aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStephen Hines <srhines@google.com>2017-02-08 10:45:48 +0000
committerandroid-build-merger <android-build-merger@google.com>2017-02-08 10:45:48 +0000
commit9826fbe38e2bc35fc6c680cc216dcb993b54d2ff (patch)
tree87b3a32b13c392939d66fa93105896f5df0736a6
parentbaba90fd78c18585d22430dc95c748f96ad0c772 (diff)
parent271389dd3199539c4474c351942f4d4fa975b81b (diff)
downloadtoolchain-utils-9826fbe38e2bc35fc6c680cc216dcb993b54d2ff.tar.gz
Merge remote-tracking branch 'aosp/mirror-chromium-master' into initial_import am: 870a8df6fc am: 9c6fa5f9e5 am: c5804ce784
am: 271389dd31 Change-Id: I22e657bc86117da9a6a45329a67a21096736da03
-rw-r--r--.gitignore3
-rw-r--r--COMMIT-QUEUE.ini12
-rw-r--r--LICENSE27
-rw-r--r--OWNERS9
-rw-r--r--README10
-rw-r--r--README.chromium17
-rwxr-xr-xafe_lock_machine.py658
-rwxr-xr-xauto_delete_nightly_test_data.py222
-rw-r--r--automation/PRESUBMIT.py14
-rw-r--r--automation/__init__.py1
-rw-r--r--automation/all_tests.py16
-rw-r--r--automation/clients/__init__.py1
-rwxr-xr-xautomation/clients/android.py87
-rwxr-xr-xautomation/clients/chromeos.py104
-rwxr-xr-xautomation/clients/crosstool.py102
-rwxr-xr-xautomation/clients/dejagnu_compiler.py98
-rw-r--r--automation/clients/helper/__init__.py1
-rw-r--r--automation/clients/helper/android.py319
-rw-r--r--automation/clients/helper/chromeos.py180
-rw-r--r--automation/clients/helper/crosstool.py168
-rw-r--r--automation/clients/helper/jobs.py11
-rw-r--r--automation/clients/helper/perforce.py215
-rwxr-xr-xautomation/clients/nightly.py51
-rwxr-xr-xautomation/clients/output_test.py29
-rwxr-xr-xautomation/clients/pwd_test.py27
-rwxr-xr-xautomation/clients/report/dejagnu.sh9
-rw-r--r--automation/clients/report/dejagnu/__init__.py1
-rw-r--r--automation/clients/report/dejagnu/main.py137
-rw-r--r--automation/clients/report/dejagnu/manifest.py103
-rw-r--r--automation/clients/report/dejagnu/report.html94
-rw-r--r--automation/clients/report/dejagnu/report.py115
-rw-r--r--automation/clients/report/dejagnu/summary.py262
-rwxr-xr-xautomation/clients/report/validate_failures.py239
-rw-r--r--automation/common/__init__.py1
-rw-r--r--automation/common/command.py241
-rw-r--r--automation/common/command_executer.py230
-rwxr-xr-xautomation/common/command_executer_test.py210
-rw-r--r--automation/common/events.py149
-rw-r--r--automation/common/job.py178
-rw-r--r--automation/common/job_group.py73
-rw-r--r--automation/common/logger.py144
-rw-r--r--automation/common/machine.py70
-rwxr-xr-xautomation/common/machine_test.py26
-rw-r--r--automation/common/state_machine.py54
-rw-r--r--automation/server/__init__.py1
-rw-r--r--automation/server/job_executer.py138
-rw-r--r--automation/server/job_group_manager.py118
-rw-r--r--automation/server/job_manager.py194
-rw-r--r--automation/server/machine_manager.py77
-rwxr-xr-xautomation/server/machine_manager_test.py32
-rw-r--r--automation/server/monitor/__init__.py1
-rw-r--r--automation/server/monitor/dashboard.py259
-rwxr-xr-xautomation/server/monitor/manage.py20
-rw-r--r--automation/server/monitor/settings.py49
-rwxr-xr-xautomation/server/monitor/start.sh7
-rw-r--r--automation/server/monitor/static/style.css101
-rw-r--r--automation/server/monitor/templates/base.html30
-rw-r--r--automation/server/monitor/templates/job.html29
-rw-r--r--automation/server/monitor/templates/job_group.html46
-rw-r--r--automation/server/monitor/templates/job_group_list.html35
-rw-r--r--automation/server/monitor/templates/job_log.html20
-rw-r--r--automation/server/monitor/templates/machine_list.html39
-rw-r--r--automation/server/monitor/templates/snippet_attribute_table.html36
-rw-r--r--automation/server/monitor/templates/snippet_code.html10
-rw-r--r--automation/server/monitor/templates/snippet_links.html7
-rw-r--r--automation/server/monitor/urls.py21
-rwxr-xr-xautomation/server/server.py125
-rwxr-xr-xautomation/server/server_test.py26
-rw-r--r--automation/server/test_pool.csv4
-rw-r--r--bestflags/README21
-rw-r--r--bestflags/example_algorithms.py196
-rw-r--r--bestflags/examples/omnetpp/README23
-rwxr-xr-xbestflags/examples/omnetpp/build_omnetpp69
-rw-r--r--bestflags/examples/omnetpp/conf2
-rw-r--r--bestflags/examples/omnetpp/example.json24
-rwxr-xr-xbestflags/examples/omnetpp/test_omnetpp24
-rw-r--r--bestflags/flags.py197
-rw-r--r--bestflags/flags_test.py190
-rw-r--r--bestflags/flags_util.py95
-rw-r--r--bestflags/generation.py139
-rw-r--r--bestflags/generation_test.py72
-rw-r--r--bestflags/genetic_algorithm.py295
-rw-r--r--bestflags/hill_climb_best_neighbor.py107
-rw-r--r--bestflags/iterative_elimination.py177
-rw-r--r--bestflags/mock_task.py92
-rw-r--r--bestflags/pipeline_process.py123
-rw-r--r--bestflags/pipeline_process_test.py89
-rw-r--r--bestflags/pipeline_worker.py142
-rw-r--r--bestflags/pipeline_worker_test.py128
-rw-r--r--bestflags/steering.py116
-rw-r--r--bestflags/steering_test.py170
-rw-r--r--bestflags/task.py450
-rw-r--r--bestflags/task_test.py174
-rw-r--r--bestflags/testing_batch.py450
-rwxr-xr-xbin/tc_pyformat36
-rw-r--r--binary_search_tool/.gitignore7
-rw-r--r--binary_search_tool/MAINTENANCE115
-rw-r--r--binary_search_tool/README.bisect213
-rw-r--r--binary_search_tool/__init__.py1
-rw-r--r--binary_search_tool/android/README.android186
-rwxr-xr-xbinary_search_tool/android/boot_test.sh61
-rwxr-xr-xbinary_search_tool/android/cleanup.sh11
-rwxr-xr-xbinary_search_tool/android/get_initial_items.sh14
-rwxr-xr-xbinary_search_tool/android/interactive_test.sh39
-rwxr-xr-xbinary_search_tool/android/setup.sh147
-rwxr-xr-xbinary_search_tool/android/switch_to_bad.sh42
-rwxr-xr-xbinary_search_tool/android/switch_to_good.sh41
-rwxr-xr-xbinary_search_tool/android/test_setup.sh130
-rwxr-xr-xbinary_search_tool/binary_search_perforce.py447
-rwxr-xr-xbinary_search_tool/binary_search_state.py598
-rwxr-xr-xbinary_search_tool/bisect.py398
-rw-r--r--binary_search_tool/bisect_driver.py334
-rw-r--r--binary_search_tool/common.py261
-rwxr-xr-xbinary_search_tool/common/boot_test.sh22
-rwxr-xr-xbinary_search_tool/common/hash_test.sh57
-rwxr-xr-xbinary_search_tool/common/interactive_test.sh37
-rwxr-xr-xbinary_search_tool/common/test_setup.sh166
-rwxr-xr-xbinary_search_tool/compiler_wrapper.py63
-rw-r--r--binary_search_tool/cros_pkg/README.cros_pkg_triage185
l---------binary_search_tool/cros_pkg/boot_test.sh1
-rwxr-xr-xbinary_search_tool/cros_pkg/create_cleanup_script.py114
-rwxr-xr-xbinary_search_tool/cros_pkg/get_initial_items.sh16
l---------binary_search_tool/cros_pkg/interactive_test.sh1
-rwxr-xr-xbinary_search_tool/cros_pkg/setup.sh123
-rwxr-xr-xbinary_search_tool/cros_pkg/switch_to_bad.sh46
-rwxr-xr-xbinary_search_tool/cros_pkg/switch_to_good.sh46
l---------binary_search_tool/cros_pkg/test_setup.sh1
-rwxr-xr-xbinary_search_tool/ndk/DO_BISECTION.sh92
-rw-r--r--binary_search_tool/ndk/PATCH140
-rw-r--r--binary_search_tool/ndk/PATCH234
-rw-r--r--binary_search_tool/ndk/README84
-rw-r--r--binary_search_tool/ndk/Teapot.tar.gzbin0 -> 263541 bytes
-rwxr-xr-xbinary_search_tool/ndk/boot_test.sh27
-rwxr-xr-xbinary_search_tool/ndk/get_initial_items.sh12
l---------binary_search_tool/ndk/switch_to_bad.sh1
-rwxr-xr-xbinary_search_tool/ndk/switch_to_good.sh46
-rwxr-xr-xbinary_search_tool/ndk/test_setup.sh27
-rw-r--r--binary_search_tool/sysroot_wrapper/README28
l---------binary_search_tool/sysroot_wrapper/boot_test.sh1
-rwxr-xr-xbinary_search_tool/sysroot_wrapper/cleanup.sh11
-rwxr-xr-xbinary_search_tool/sysroot_wrapper/get_initial_items.sh5
-rwxr-xr-xbinary_search_tool/sysroot_wrapper/glibc_test_script.sh49
l---------binary_search_tool/sysroot_wrapper/interactive_test.sh1
-rwxr-xr-xbinary_search_tool/sysroot_wrapper/setup.sh73
-rwxr-xr-xbinary_search_tool/sysroot_wrapper/switch_to_bad.sh9
-rwxr-xr-xbinary_search_tool/sysroot_wrapper/switch_to_good.sh9
-rwxr-xr-xbinary_search_tool/sysroot_wrapper/test_script.sh34
l---------binary_search_tool/sysroot_wrapper/test_setup.sh1
-rwxr-xr-xbinary_search_tool/sysroot_wrapper/testing_test.py37
-rw-r--r--binary_search_tool/test/__init__.py1
-rwxr-xr-xbinary_search_tool/test/binary_search_tool_tester.py421
-rwxr-xr-xbinary_search_tool/test/common.py41
-rwxr-xr-xbinary_search_tool/test/gen_init_list.py22
-rwxr-xr-xbinary_search_tool/test/gen_obj.py97
-rwxr-xr-xbinary_search_tool/test/is_good.py24
-rwxr-xr-xbinary_search_tool/test/is_good_noinc_prune.py46
-rwxr-xr-xbinary_search_tool/test/switch_tmp.py34
-rwxr-xr-xbinary_search_tool/test/switch_to_bad.py27
-rwxr-xr-xbinary_search_tool/test/switch_to_bad_noinc_prune.py42
-rwxr-xr-xbinary_search_tool/test/switch_to_bad_set_file.py37
-rwxr-xr-xbinary_search_tool/test/switch_to_good.py30
-rwxr-xr-xbinary_search_tool/test/switch_to_good_noinc_prune.py40
-rwxr-xr-xbinary_search_tool/test/switch_to_good_set_file.py39
-rwxr-xr-xbinary_search_tool/test/test_setup.py19
-rwxr-xr-xbinary_search_tool/test/test_setup_bad.py15
-rw-r--r--build-binutils/opts.sh0
-rw-r--r--build-gcc/opts.sh40
-rwxr-xr-xbuild_chrome_browser.py237
-rwxr-xr-xbuild_chromeos.py280
-rwxr-xr-xbuild_tc.py337
-rwxr-xr-xbuild_tool.py853
-rwxr-xr-xbuildbot_test_llvm.py167
-rwxr-xr-xbuildbot_test_toolchains.py356
-rwxr-xr-xchromiumos_image_diff.py333
-rwxr-xr-xcommand_executer_timeout_test.py33
-rwxr-xr-xcompiler-test.sh61
-rw-r--r--crb/autotest_gatherer.py67
-rw-r--r--crb/autotest_run.py317
-rwxr-xr-xcrb/crb_driver.py370
-rw-r--r--crb/machine_manager_singleton.py153
-rw-r--r--crb/table_formatter.py258
-rwxr-xr-xcros_login.py118
-rw-r--r--cros_utils/__init__.py1
-rwxr-xr-xcros_utils/buildbot_json.py1518
-rw-r--r--cros_utils/buildbot_utils.py385
-rw-r--r--cros_utils/chromeos-toolchain-credentials.json12
-rw-r--r--cros_utils/command_executer.py685
-rwxr-xr-xcros_utils/command_executer_unittest.py27
-rw-r--r--cros_utils/constants.py10
-rwxr-xr-xcros_utils/email_sender.py144
-rw-r--r--cros_utils/file_utils.py87
-rw-r--r--cros_utils/html_tools.py91
-rw-r--r--cros_utils/locks.py44
-rw-r--r--cros_utils/logger.py369
-rw-r--r--cros_utils/machines.py25
-rw-r--r--cros_utils/manifest_versions.py97
-rw-r--r--cros_utils/misc.py569
-rw-r--r--cros_utils/misc_test.py51
-rw-r--r--cros_utils/no_pseudo_terminal_test.py53
-rwxr-xr-xcros_utils/perf_diff.py332
-rw-r--r--cros_utils/pstat.py1077
-rw-r--r--cros_utils/stats.py4519
-rw-r--r--cros_utils/tabulator.py1245
-rw-r--r--cros_utils/tabulator_test.py141
-rw-r--r--cros_utils/timeline.py52
-rw-r--r--cros_utils/timeline_test.py57
-rw-r--r--crosperf/benchmark.py45
-rw-r--r--crosperf/benchmark_run.py265
-rwxr-xr-xcrosperf/benchmark_run_unittest.py430
-rwxr-xr-xcrosperf/benchmark_unittest.py63
-rw-r--r--crosperf/column_chart.py59
-rw-r--r--crosperf/compare_machines.py64
-rw-r--r--crosperf/config.py13
-rwxr-xr-xcrosperf/config_unittest.py50
-rwxr-xr-xcrosperf/crosperf2
-rwxr-xr-xcrosperf/crosperf.py144
-rwxr-xr-xcrosperf/crosperf_test.py44
-rwxr-xr-xcrosperf/crosperf_unittest.py66
-rw-r--r--crosperf/default-telemetry-results.json174
-rw-r--r--crosperf/default_remotes8
-rw-r--r--crosperf/download_images.py286
-rwxr-xr-xcrosperf/download_images_buildid_test.py111
-rwxr-xr-xcrosperf/download_images_unittest.py251
-rw-r--r--crosperf/experiment.py212
-rw-r--r--crosperf/experiment_factory.py331
-rwxr-xr-xcrosperf/experiment_factory_unittest.py242
-rw-r--r--crosperf/experiment_file.py205
-rwxr-xr-xcrosperf/experiment_file_unittest.py135
-rw-r--r--crosperf/experiment_files/README34
-rw-r--r--crosperf/experiment_files/aes_perf.exp21
-rw-r--r--crosperf/experiment_files/bloat_perf.exp25
-rw-r--r--crosperf/experiment_files/morejs_perf.exp25
-rw-r--r--crosperf/experiment_files/non-telemetry-tests.exp31
-rw-r--r--crosperf/experiment_files/official-image.exp41
-rw-r--r--crosperf/experiment_files/page_cycler.exp28
-rw-r--r--crosperf/experiment_files/page_cycler_perf.exp45
-rw-r--r--crosperf/experiment_files/telemetry-crosperf-suites.exp54
-rw-r--r--crosperf/experiment_files/telemetry-crosperf-with-external-chrome-src.exp31
-rw-r--r--crosperf/experiment_files/telemetry-crosperf-with-profiler.exp35
-rw-r--r--crosperf/experiment_files/telemetry-crosperf.exp32
-rw-r--r--crosperf/experiment_files/telemetry-without-autotest.exp31
-rwxr-xr-xcrosperf/experiment_files/telemetry_perf_perf77
-rw-r--r--crosperf/experiment_files/trybot-image.exp33
-rw-r--r--crosperf/experiment_runner.py309
-rwxr-xr-xcrosperf/experiment_runner_unittest.py450
-rw-r--r--crosperf/experiment_status.py145
-rw-r--r--crosperf/field.py152
-rwxr-xr-xcrosperf/flag_test_unittest.py41
-rwxr-xr-xcrosperf/generate_report.py277
-rwxr-xr-xcrosperf/generate_report_unittest.py146
-rw-r--r--crosperf/help.py114
-rw-r--r--crosperf/image_checksummer.py69
-rw-r--r--crosperf/label.py159
-rw-r--r--crosperf/machine_image_manager.py304
-rwxr-xr-xcrosperf/machine_image_manager_unittest.py290
-rw-r--r--crosperf/machine_manager.py709
-rwxr-xr-xcrosperf/machine_manager_unittest.py845
-rw-r--r--crosperf/mock_instance.py143
-rw-r--r--crosperf/perf_files/perf.data.report.0734
-rw-r--r--crosperf/results_cache.py758
-rwxr-xr-xcrosperf/results_cache_unittest.py1178
-rw-r--r--crosperf/results_organizer.py192
-rwxr-xr-xcrosperf/results_organizer_unittest.py109
-rw-r--r--crosperf/results_report.py691
-rw-r--r--crosperf/results_report_templates.py196
-rwxr-xr-xcrosperf/results_report_unittest.py415
-rwxr-xr-xcrosperf/run_tests.sh32
-rw-r--r--crosperf/schedv2.py439
-rwxr-xr-xcrosperf/schedv2_unittest.py221
-rw-r--r--crosperf/settings.py81
-rw-r--r--crosperf/settings_factory.py304
-rwxr-xr-xcrosperf/settings_factory_unittest.py97
-rwxr-xr-xcrosperf/settings_unittest.py229
-rw-r--r--crosperf/suite_runner.py297
-rwxr-xr-xcrosperf/suite_runner_unittest.py351
-rw-r--r--crosperf/test_cache/compare_output/autotest.tbz2bin0 -> 847904 bytes
-rw-r--r--crosperf/test_cache/compare_output/machine.txt1
-rw-r--r--crosperf/test_cache/compare_output/results.txt6
-rw-r--r--crosperf/test_cache/test_input/autotest.tbz2bin0 -> 110940 bytes
-rw-r--r--crosperf/test_cache/test_input/machine.txt1
-rw-r--r--crosperf/test_cache/test_input/results.txt6
-rw-r--r--crosperf/test_cache/test_puretelemetry_input/machine.txt1
-rw-r--r--crosperf/test_cache/test_puretelemetry_input/results.txt6
-rw-r--r--crosperf/test_flag.py12
-rw-r--r--crosperf/translate_xbuddy.py33
-rw-r--r--crosperf/unittest_keyval_file.txt20
-rw-r--r--cwp/bartlett/app.yaml22
-rwxr-xr-xcwp/bartlett/server.py153
-rw-r--r--cwp/bartlett/static/favicon.icobin0 -> 198 bytes
-rw-r--r--cwp/bartlett/test/server_tester.py101
-rwxr-xr-xcwp/bartlett/update_appengine_server1
-rw-r--r--cwp/demo_pipeline.sh55
-rw-r--r--cwp/interpreter/app_engine_pull.py253
-rw-r--r--cwp/interpreter/symbolizer.py129
-rw-r--r--cwp/performance/experiment_gen.py138
-rw-r--r--dejagnu/__init__.py1
-rw-r--r--dejagnu/boards/chromeos-machine.exp13
-rw-r--r--dejagnu/boards/gdb.exp.in133
-rw-r--r--dejagnu/boards/gdbserver.sh.in12
-rw-r--r--dejagnu/chromeos.exp.in175
-rw-r--r--dejagnu/gdb_baseline/armv7a-cros-linux-gnueabi19079
-rw-r--r--dejagnu/gdb_baseline/i686-pc-linux-gnu19167
-rw-r--r--dejagnu/gdb_baseline/x86_64-cros-linux-gnu19294
-rwxr-xr-xdejagnu/gdb_dejagnu.py357
-rwxr-xr-xdejagnu/run_dejagnu.py418
-rw-r--r--dejagnu/site.exp1
-rwxr-xr-xdeprecated/build_benchmarks.py306
-rwxr-xr-xdeprecated/compare_benchmarks.py176
-rw-r--r--deprecated/repo_to_repo_files/binutils-master.json.rtr22
-rw-r--r--deprecated/repo_to_repo_files/binutils-mobile_toolchain_v16.json.rtr23
-rw-r--r--deprecated/repo_to_repo_files/crosperf.json.rtr38
-rw-r--r--deprecated/repo_to_repo_files/gcc-branches_google_4_7.json.rtr22
-rw-r--r--deprecated/repo_to_repo_files/gcc-branches_google_main.json.rtr22
-rw-r--r--deprecated/repo_to_repo_files/gcc-master.json.rtr23
-rw-r--r--deprecated/repo_to_repo_files/gdb-master.json.rtr20
-rw-r--r--deprecated/repo_to_repo_files/toolchain-utils.json.rtr28
-rwxr-xr-xdeprecated/report_generator.py145
-rwxr-xr-xdeprecated/run_benchmarks.py245
-rwxr-xr-xdeprecated/sheriff_rotation.py130
-rwxr-xr-xdeprecated/summarize_results.py145
-rwxr-xr-xfdo_scripts/divide_and_merge_profiles.py140
-rwxr-xr-xfdo_scripts/divide_and_merge_profiles_test.py127
-rwxr-xr-xfdo_scripts/profile_cycler.py199
-rw-r--r--fdo_scripts/summarize_hot_blocks.py187
-rw-r--r--fdo_scripts/vanilla_vs_fdo.py312
-rwxr-xr-xfile_lock_machine.py372
-rwxr-xr-xgenerate-waterfall-reports.py845
-rwxr-xr-xget_common_image_version.py92
-rwxr-xr-xgo/android/adb_shamu8
-rwxr-xr-xgo/android/adb_volantis8
-rwxr-xr-xgo/android/build_go26
-rwxr-xr-xgo/android/go_shamu11
-rwxr-xr-xgo/android/go_shamu_exec8
-rwxr-xr-xgo/android/go_volantis11
-rwxr-xr-xgo/android/go_volantis_exec8
-rwxr-xr-xgo/android/target_cp28
-rwxr-xr-xgo/android/target_sh13
-rwxr-xr-xgo/android/target_tmpdir5
-rwxr-xr-xgo/chromeos/build_go45
-rwxr-xr-xgo/chromeos/go_daisy11
-rwxr-xr-xgo/chromeos/go_daisy_exec10
-rwxr-xr-xgo/chromeos/go_panther11
-rwxr-xr-xgo/chromeos/go_panther_exec10
-rwxr-xr-xgo/chromeos/go_x86-zgb11
-rwxr-xr-xgo/chromeos/go_x86-zgb_exec10
-rwxr-xr-xgo/chromeos/target_cp28
-rwxr-xr-xgo/chromeos/target_sh11
-rwxr-xr-xgo/chromeos/target_tmpdir5
-rwxr-xr-xgo/go_local8
-rwxr-xr-xgo/go_target83
-rwxr-xr-xgo/go_target_exec41
-rw-r--r--go/patch/go0.patch33
-rw-r--r--go/patch/go1.patch50
-rw-r--r--go/patch/go2.patch173
-rw-r--r--go/patch/go3.patch711
-rw-r--r--go/patch/go4.patch101
-rw-r--r--go/patch/go5.patch198
-rw-r--r--go/patch/go6.patch65
-rw-r--r--go/patch/go7.patch139
-rwxr-xr-xgo/push_goroot34
-rwxr-xr-xgo/test_go88
-rwxr-xr-xheat_map.py146
-rwxr-xr-ximage_chromeos.py430
-rw-r--r--lock_machine_test.py121
-rw-r--r--mem_tests/README46
-rwxr-xr-xmem_tests/clean_data.py29
-rwxr-xr-xmem_tests/mem_groups.py55
-rwxr-xr-xmem_tests/total_mem_actual.py37
-rwxr-xr-xmem_tests/total_mem_sampled.py31
-rw-r--r--mem_tests/utils.py22
-rwxr-xr-xperf-to-inst-page.sh85
-rwxr-xr-xproduce_output.py27
-rwxr-xr-xpyrun6
-rwxr-xr-xremote_gcc_build.py471
-rwxr-xr-xremote_kill_test.py45
-rwxr-xr-xremote_test.py98
-rwxr-xr-xrepo_to_repo.py421
-rwxr-xr-xrun_tests.py23
-rwxr-xr-xsetup_chromeos.py252
-rwxr-xr-xtc_enter_chroot.py299
-rwxr-xr-xtest_gcc_dejagnu.py218
-rwxr-xr-xtest_gdb_dejagnu.py163
-rwxr-xr-xtest_toolchains.py365
-rwxr-xr-xtoolchain_utils_githooks/pre-push9
-rwxr-xr-xtoolchain_utils_githooks/pre-push.real71
-rwxr-xr-xupdate_telemetry_defaults.py203
-rw-r--r--user_activity_benchmarks/benchmark_metrics.py306
-rwxr-xr-xuser_activity_benchmarks/benchmark_metrics_experiment.py233
-rwxr-xr-xuser_activity_benchmarks/benchmark_metrics_experiment_unittest.py79
-rwxr-xr-xuser_activity_benchmarks/benchmark_metrics_unittest.py87
-rwxr-xr-xuser_activity_benchmarks/collect_experiment_data.sh93
-rwxr-xr-xuser_activity_benchmarks/collect_experiment_data_odd_even_session.sh95
-rwxr-xr-xuser_activity_benchmarks/collect_pprof_data.sh41
-rwxr-xr-xuser_activity_benchmarks/collect_telemetry_profiles.sh90
-rw-r--r--user_activity_benchmarks/cwp_hot_functions_groups.txt314
-rwxr-xr-xuser_activity_benchmarks/process_hot_functions.py482
-rwxr-xr-xuser_activity_benchmarks/process_hot_functions_unittest.py223
-rw-r--r--user_activity_benchmarks/select_hot_functions.sql27
-rwxr-xr-xuser_activity_benchmarks/select_optimal_benchmark_set.py347
-rwxr-xr-xuser_activity_benchmarks/symbolize_profiles.sh32
-rw-r--r--user_activity_benchmarks/telemetry_benchmarks_R52_8350.68113
-rw-r--r--user_activity_benchmarks/testdata/expected/pprof_common/file1.pprof3
-rw-r--r--user_activity_benchmarks/testdata/expected/pprof_common/file2.pprof2
-rw-r--r--user_activity_benchmarks/testdata/expected/pprof_common/file3.pprof4
-rw-r--r--user_activity_benchmarks/testdata/input/cwp_function_groups.txt3
-rw-r--r--user_activity_benchmarks/testdata/input/cwp_functions_file.csv38
-rw-r--r--user_activity_benchmarks/testdata/input/inclusive_count_reference.csv8
-rw-r--r--user_activity_benchmarks/testdata/input/inclusive_count_test.csv8
-rw-r--r--user_activity_benchmarks/testdata/input/pairwise_inclusive_count_reference.csv5
-rw-r--r--user_activity_benchmarks/testdata/input/pairwise_inclusive_count_test.csv6
-rw-r--r--user_activity_benchmarks/testdata/input/parse_cwp_statistics.csv6
-rw-r--r--user_activity_benchmarks/testdata/input/pprof_top/file1.pprof20
-rw-r--r--user_activity_benchmarks/testdata/input/pprof_top/file2.pprof17
-rw-r--r--user_activity_benchmarks/testdata/input/pprof_top/file3.pprof21
-rw-r--r--user_activity_benchmarks/testdata/input/pprof_top_csv/file1.csv15
-rw-r--r--user_activity_benchmarks/testdata/input/pprof_tree/file1.pprof29
-rw-r--r--user_activity_benchmarks/testdata/input/pprof_tree_csv/file1.csv6
-rw-r--r--user_activity_benchmarks/testdata/results/pprof_common/file1.pprof3
-rw-r--r--user_activity_benchmarks/testdata/results/pprof_common/file2.pprof2
-rw-r--r--user_activity_benchmarks/testdata/results/pprof_common/file3.pprof4
-rw-r--r--user_activity_benchmarks/utils.py402
-rwxr-xr-xuser_activity_benchmarks/utils_unittest.py133
-rwxr-xr-xverify_compiler.py234
-rwxr-xr-xweekly_report.py255
424 files changed, 117682 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 00000000..d0b39e30
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,3 @@
+logs
+*.pyc
+
diff --git a/COMMIT-QUEUE.ini b/COMMIT-QUEUE.ini
new file mode 100644
index 00000000..b718f389
--- /dev/null
+++ b/COMMIT-QUEUE.ini
@@ -0,0 +1,12 @@
+# Copyright (c) 2013 The Chromium OS Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+# Per-project Commit Queue settings.
+# Documentation: http://goo.gl/4rZhAx
+
+[GENERAL]
+
+# This repository isn't used by the CQ at all, so we can submit in the
+# pre-cq.
+submit-in-pre-cq: yes
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 00000000..50bac5d3
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,27 @@
+// Copyright (c) 2011-2016 The Chromium OS Authors. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+// * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+// * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/OWNERS b/OWNERS
new file mode 100644
index 00000000..5209f14a
--- /dev/null
+++ b/OWNERS
@@ -0,0 +1,9 @@
+set noparent
+cmtice@chromium.org
+gbiv@chromium.org
+laszio@chromium.org
+llozano@chromium.org
+rahulchaudhry@chromium.org
+yunlian@chromium.org
+zhizhouy@chromium.org
+bjanakiraman@chromium.org
diff --git a/README b/README
new file mode 100644
index 00000000..3ab3d7b7
--- /dev/null
+++ b/README
@@ -0,0 +1,10 @@
+To run scripts in this directory, first run:
+
+export PYTHONPATH=$(readlink -f .):$PYTHONPATH
+
+from this directory.
+
+Then you can run any script.
+
+To get help on any script, type in python <script> --help, or refer to the
+header of the script for more information.
diff --git a/README.chromium b/README.chromium
new file mode 100644
index 00000000..acbbc5e6
--- /dev/null
+++ b/README.chromium
@@ -0,0 +1,17 @@
+Name: toolchain-utils
+Short Name: toolchain-utils
+URL: https://chromium.googlesource.com/chromiumos/third_party/toolchain-utils
+License: BSD
+License File: LICENSE
+Security Critical: no
+
+Description:
+This contains scripts used to help maintain the toolchain. These
+include tools for downloading and building Chromium OS; building
+custom versions of the toolchain inside Chromium OS; launching
+performance tests, analyzing the results and generating reports;
+running toolchain regression tests; and using binary search to isolate
+toolchain issues.
+
+NOTE: These tools are strictly for Chromium developers; none of them
+ship on the final product (devices that run Chromium OS).
diff --git a/afe_lock_machine.py b/afe_lock_machine.py
new file mode 100755
index 00000000..125ac971
--- /dev/null
+++ b/afe_lock_machine.py
@@ -0,0 +1,658 @@
+#!/usr/bin/python2
+#
+# Copyright 2015 Google INc. All Rights Reserved.
+"""This module controls locking and unlocking of test machines."""
+
+from __future__ import print_function
+
+import argparse
+import getpass
+import os
+import sys
+import traceback
+
+from cros_utils import logger
+from cros_utils import machines
+
+
+class AFELockException(Exception):
+ """Base class for exceptions in this module."""
+
+
+class MachineNotPingable(AFELockException):
+ """Raised when machine does not respond to ping."""
+
+
+class MissingHostInfo(AFELockException):
+ """Raised when cannot find info about machine on machine servers."""
+
+
+class UpdateNonLocalMachine(AFELockException):
+ """Raised when user requests to add/remove a ChromeOS HW Lab machine.."""
+
+
+class DuplicateAdd(AFELockException):
+ """Raised when user requests to add a machine that's already on the server."""
+
+
+class UpdateServerError(AFELockException):
+ """Raised when attempt to add/remove a machine from local server fails."""
+
+
+class LockingError(AFELockException):
+ """Raised when server fails to lock/unlock machine as requested."""
+
+
+class DontOwnLock(AFELockException):
+ """Raised when user attmepts to unlock machine locked by someone else."""
+ # This should not be raised if the user specified '--force'
+
+
+class NoAFEServer(AFELockException):
+ """Raised when cannot find/access the autotest server."""
+
+
+class AFEAccessError(AFELockException):
+ """Raised when cannot get information about lab machine from lab server."""
+
+
+class AFELockManager(object):
+ """Class for locking/unlocking machines vie Autotest Front End servers.
+
+ This class contains methods for checking the locked status of machines
+ on both the ChromeOS HW Lab AFE server and a local AFE server. It also
+ has methods for adding/removing machines from the local server, and for
+ changing the lock status of machines on either server. For the ChromeOS
+ HW Lab, it only allows access to the toolchain team lab machines, as
+ defined in toolchain-utils/crosperf/default_remotes. By default it will
+ look for a local server on chrotomation2.mtv.corp.google.com, but an
+ alternative local AFE server can be supplied, if desired.
+
+ !!!IMPORTANT NOTE!!! The AFE server can only be called from the main
+ thread/process of a program. If you launch threads and try to call it
+ from a thread, you will get an error. This has to do with restrictions
+ in the Python virtual machine (and signal handling) and cannot be changed.
+ """
+
+ LOCAL_SERVER = 'chrotomation2.mtv.corp.google.com'
+
+ def __init__(self,
+ remotes,
+ force_option,
+ chromeos_root,
+ local_server,
+ use_local=True,
+ log=None):
+ """Initializes an AFELockManager object.
+
+ Args:
+ remotes: A list of machine names or ip addresses to be managed. Names
+ and ip addresses should be represented as strings. If the list is
+ empty, the lock manager will get all known machines.
+ force_option: A Boolean indicating whether or not to force an unlock of
+ a machine that was locked by someone else.
+ chromeos_root: The ChromeOS chroot to use for the autotest scripts.
+ local_server: A string containing the name or ip address of the machine
+ that is running an AFE server, which is to be used for managing
+ machines that are not in the ChromeOS HW lab.
+ local: A Boolean indicating whether or not to use/allow a local AFE
+ server to be used (see local_server argument).
+ log: If not None, this is the logger object to be used for writing out
+ informational output messages. It is expected to be an instance of
+ Logger class from cros_utils/logger.py.
+ """
+ self.chromeos_root = chromeos_root
+ self.user = getpass.getuser()
+ self.logger = log or logger.GetLogger()
+ autotest_path = os.path.join(chromeos_root,
+ 'src/third_party/autotest/files')
+
+ sys.path.append(chromeos_root)
+ sys.path.append(autotest_path)
+ sys.path.append(os.path.join(autotest_path, 'server', 'cros'))
+
+ # We have to wait to do these imports until the paths above have
+ # been fixed.
+ # pylint: disable=import-error
+ from client import setup_modules
+ setup_modules.setup(
+ base_path=autotest_path, root_module_name='autotest_lib')
+
+ from dynamic_suite import frontend_wrappers
+
+ self.afe = frontend_wrappers.RetryingAFE(
+ timeout_min=30, delay_sec=10, debug=False, server='cautotest')
+
+ self.local = use_local
+ self.machines = list(set(remotes)) or []
+ self.toolchain_lab_machines = self.GetAllToolchainLabMachines()
+ if self.machines and self.AllLabMachines():
+ self.local = False
+
+ if not self.local:
+ self.local_afe = None
+ else:
+ dargs = {}
+ dargs['server'] = local_server or AFELockManager.LOCAL_SERVER
+ # Make sure local server is pingable.
+ error_msg = ('Local autotest server machine %s not responding to ping.' %
+ dargs['server'])
+ self.CheckMachine(dargs['server'], error_msg)
+ self.local_afe = frontend_wrappers.RetryingAFE(
+ timeout_min=30, delay_sec=10, debug=False, **dargs)
+ if not self.machines:
+ self.machines = self.toolchain_lab_machines + self.GetAllNonlabMachines()
+ self.force = force_option
+
+ def AllLabMachines(self):
+ """Check to see if all machines being used are HW Lab machines."""
+ all_lab = True
+ for m in self.machines:
+ if m not in self.toolchain_lab_machines:
+ all_lab = False
+ break
+ return all_lab
+
+ def CheckMachine(self, machine, error_msg):
+ """Verifies that machine is responding to ping.
+
+ Args:
+ machine: String containing the name or ip address of machine to check.
+ error_msg: Message to print if ping fails.
+
+ Raises:
+ MachineNotPingable: If machine is not responding to 'ping'
+ """
+ if not machines.MachineIsPingable(machine, logging_level='none'):
+ cros_machine = machine + '.cros'
+ if not machines.MachineIsPingable(cros_machine, logging_level='none'):
+ raise MachineNotPingable(error_msg)
+
+ def MachineIsKnown(self, machine):
+ """Checks to see if either AFE server knows the given machine.
+
+ Args:
+ machine: String containing name or ip address of machine to check.
+
+ Returns:
+ Boolean indicating if the machine is in the list of known machines for
+ either AFE server.
+ """
+ if machine in self.toolchain_lab_machines:
+ return True
+ elif self.local_afe and machine in self.GetAllNonlabMachines():
+ return True
+
+ return False
+
+ def GetAllToolchainLabMachines(self):
+ """Gets a list of all the toolchain machines in the ChromeOS HW lab.
+
+ Returns:
+ A list of names of the toolchain machines in the ChromeOS HW lab.
+ """
+ machines_file = os.path.join(
+ os.path.dirname(__file__), 'crosperf', 'default_remotes')
+ machine_list = []
+ with open(machines_file, 'r') as input_file:
+ lines = input_file.readlines()
+ for line in lines:
+ _, remotes = line.split(':')
+ remotes = remotes.strip()
+ for r in remotes.split():
+ machine_list.append(r.strip())
+ return machine_list
+
+ def GetAllNonlabMachines(self):
+ """Gets a list of all known machines on the local AFE server.
+
+ Returns:
+ A list of the names of the machines on the local AFE server.
+ """
+ non_lab_machines = []
+ if self.local_afe:
+ non_lab_machines = self.local_afe.get_hostnames()
+ return non_lab_machines
+
+ def PrintStatusHeader(self, is_lab_machine):
+ """Prints the status header lines for machines.
+
+ Args:
+ is_lab_machine: Boolean indicating whether to print HW Lab header or
+ local machine header (different spacing).
+ """
+ if is_lab_machine:
+ print('\nMachine (Board)\t\t\t\t\tStatus')
+ print('---------------\t\t\t\t\t------\n')
+ else:
+ print('\nMachine (Board)\t\tStatus')
+ print('---------------\t\t------\n')
+
+ def RemoveLocalMachine(self, m):
+ """Removes a machine from the local AFE server.
+
+ Args:
+ m: The machine to remove.
+
+ Raises:
+ MissingHostInfo: Can't find machine to be removed.
+ """
+ if self.local_afe:
+ host_info = self.local_afe.get_hosts(hostname=m)
+ if host_info:
+ host_info = host_info[0]
+ host_info.delete()
+ else:
+ raise MissingHostInfo('Cannot find/delete machine %s.' % m)
+
+ def AddLocalMachine(self, m):
+ """Adds a machine to the local AFE server.
+
+ Args:
+ m: The machine to be added.
+ """
+ if self.local_afe:
+ error_msg = 'Machine %s is not responding to ping.' % m
+ self.CheckMachine(m, error_msg)
+ self.local_afe.create_host(m)
+
+ def AddMachinesToLocalServer(self):
+ """Adds one or more machines to the local AFE server.
+
+ Verify that the requested machines are legal to add to the local server,
+ i.e. that they are not ChromeOS HW lab machines, and they are not already
+ on the local server. Call AddLocalMachine for each valid machine.
+
+ Raises:
+ DuplicateAdd: Attempt to add a machine that is already on the server.
+ UpdateNonLocalMachine: Attempt to add a ChromeOS HW lab machine.
+ UpdateServerError: Something went wrong while attempting to add a
+ machine.
+ """
+ for m in self.machines:
+ for cros_name in [m, m + '.cros']:
+ if cros_name in self.toolchain_lab_machines:
+ raise UpdateNonLocalMachine('Machine %s is already in the ChromeOS HW'
+ 'Lab. Cannot add it to local server.' %
+ cros_name)
+ host_info = self.local_afe.get_hosts(hostname=m)
+ if host_info:
+ raise DuplicateAdd('Machine %s is already on the local server.' % m)
+ try:
+ self.AddLocalMachine(m)
+ self.logger.LogOutput('Successfully added %s to local server.' % m)
+ except Exception as e:
+ traceback.print_exc()
+ raise UpdateServerError(
+ 'Error occurred while attempting to add %s. %s' % (m, str(e)))
+
+ def RemoveMachinesFromLocalServer(self):
+ """Removes one or more machines from the local AFE server.
+
+ Verify that the requested machines are legal to remove from the local
+ server, i.e. that they are not ChromeOS HW lab machines. Call
+ RemoveLocalMachine for each valid machine.
+
+ Raises:
+ UpdateServerError: Something went wrong while attempting to remove a
+ machine.
+ """
+ for m in self.machines:
+ for cros_name in [m, m + '.cros']:
+ if cros_name in self.toolchain_lab_machines:
+ raise UpdateNonLocalMachine(
+ 'Machine %s is in the ChromeOS HW Lab. '
+ 'This script cannot remove lab machines.' % cros_name)
+ try:
+ self.RemoveLocalMachine(m)
+ self.logger.LogOutput('Successfully removed %s from local server.' % m)
+ except Exception as e:
+ traceback.print_exc()
+ raise UpdateServerError('Error occurred while attempting to remove %s '
+ '(%s).' % (m, str(e)))
+
+ def ListMachineStates(self, machine_states):
+ """Gets and prints the current status for a list of machines.
+
+ Prints out the current status for all of the machines in the current
+ AFELockManager's list of machines (set when the object is initialized).
+
+ Args:
+ machine_states: A dictionary of the current state of every machine in
+ the current AFELockManager's list of machines. Normally obtained by
+ calling AFELockManager::GetMachineStates.
+ """
+ local_machines = []
+ printed_hdr = False
+ for m in machine_states:
+ cros_name = m + '.cros'
+ if (m in self.toolchain_lab_machines or
+ cros_name in self.toolchain_lab_machines):
+ name = m if m in self.toolchain_lab_machines else cros_name
+ if not printed_hdr:
+ self.PrintStatusHeader(True)
+ printed_hdr = True
+ state = machine_states[m]
+ if state['locked']:
+ print('%s (%s)\tlocked by %s since %s' %
+ (name, state['board'], state['locked_by'], state['lock_time']))
+ else:
+ print('%s (%s)\tunlocked' % (name, state['board']))
+ else:
+ local_machines.append(m)
+
+ if local_machines:
+ self.PrintStatusHeader(False)
+ for m in local_machines:
+ state = machine_states[m]
+ if state['locked']:
+ print('%s (%s)\tlocked by %s since %s' %
+ (m, state['board'], state['locked_by'], state['lock_time']))
+ else:
+ print('%s (%s)\tunlocked' % (m, state['board']))
+
+ def UpdateLockInAFE(self, should_lock_machine, machine):
+ """Calls an AFE server to lock/unlock a machine.
+
+ Args:
+ should_lock_machine: Boolean indicating whether to lock the machine (True)
+ or unlock the machine (False).
+ machine: The machine to update.
+
+ Raises:
+ LockingError: An error occurred while attempting to update the machine
+ state.
+ """
+ action = 'lock'
+ if not should_lock_machine:
+ action = 'unlock'
+ kwargs = {'locked': should_lock_machine}
+ kwargs['lock_reason'] = 'toolchain user request (%s)' % self.user
+
+ cros_name = machine + '.cros'
+ if cros_name in self.toolchain_lab_machines:
+ machine = cros_name
+ if machine in self.toolchain_lab_machines:
+ m = machine.split('.')[0]
+ afe_server = self.afe
+ else:
+ m = machine
+ afe_server = self.local_afe
+
+ try:
+ afe_server.run('modify_hosts',
+ host_filter_data={'hostname__in': [m]},
+ update_data=kwargs)
+ except Exception as e:
+ traceback.print_exc()
+ raise LockingError('Unable to %s machine %s. %s' % (action, m, str(e)))
+
+ def UpdateMachines(self, lock_machines):
+ """Sets the locked state of the machines to the requested value.
+
+ The machines updated are the ones in self.machines (specified when the
+ class object was intialized).
+
+ Args:
+ lock_machines: Boolean indicating whether to lock the machines (True) or
+ unlock the machines (False).
+
+ Returns:
+ A list of the machines whose state was successfully updated.
+ """
+ updated_machines = []
+ for m in self.machines:
+ self.UpdateLockInAFE(lock_machines, m)
+ # Since we returned from self.UpdateLockInAFE we assume the request
+ # succeeded.
+ if lock_machines:
+ self.logger.LogOutput('Locked machine(s) %s.' % m)
+ else:
+ self.logger.LogOutput('Unlocked machine(s) %s.' % m)
+ updated_machines.append(m)
+
+ return updated_machines
+
+ def _InternalRemoveMachine(self, machine):
+ """Remove machine from internal list of machines.
+
+ Args:
+ machine: Name of machine to be removed from internal list.
+ """
+ # Check to see if machine is lab machine and if so, make sure it has
+ # ".cros" on the end.
+ cros_machine = machine
+ if machine.find('rack') > 0 and machine.find('row') > 0:
+ if machine.find('.cros') == -1:
+ cros_machine = cros_machine + '.cros'
+
+ self.machines = [m for m in self.machines
+ if m != cros_machine and m != machine]
+
+ def CheckMachineLocks(self, machine_states, cmd):
+ """Check that every machine in requested list is in the proper state.
+
+ If the cmd is 'unlock' verify that every machine is locked by requestor.
+ If the cmd is 'lock' verify that every machine is currently unlocked.
+
+ Args:
+ machine_states: A dictionary of the current state of every machine in
+ the current AFELockManager's list of machines. Normally obtained by
+ calling AFELockManager::GetMachineStates.
+ cmd: The user-requested action for the machines: 'lock' or 'unlock'.
+
+ Raises:
+ DontOwnLock: The lock on a requested machine is owned by someone else.
+ """
+ for k, state in machine_states.iteritems():
+ if cmd == 'unlock':
+ if not state['locked']:
+ self.logger.LogWarning('Attempt to unlock already unlocked machine '
+ '(%s).' % k)
+ self._InternalRemoveMachine(k)
+
+ if state['locked'] and state['locked_by'] != self.user:
+ raise DontOwnLock('Attempt to unlock machine (%s) locked by someone '
+ 'else (%s).' % (k, state['locked_by']))
+ elif cmd == 'lock':
+ if state['locked']:
+ self.logger.LogWarning('Attempt to lock already locked machine (%s)' %
+ k)
+ self._InternalRemoveMachine(k)
+
+ def HasAFEServer(self, local):
+ """Verifies that the AFELockManager has appropriate AFE server.
+
+ Args:
+ local: Boolean indicating whether we are checking for the local server
+ (True) or for the global server (False).
+
+ Returns:
+ A boolean indicating if the AFELockManager has the requested AFE server.
+ """
+ if local:
+ return self.local_afe is not None
+ else:
+ return self.afe is not None
+
+ def GetMachineStates(self, cmd=''):
+ """Gets the current state of all the requested machines.
+
+ Gets the current state of all the requested machines, both from the HW lab
+ sever and from the local server. Stores the data in a dictionary keyed
+ by machine name.
+
+ Args:
+ cmd: The command for which we are getting the machine states. This is
+ important because if one of the requested machines is missing we raise
+ an exception, unless the requested command is 'add'.
+
+ Returns:
+ A dictionary of machine states for all the machines in the AFELockManager
+ object.
+
+ Raises:
+ NoAFEServer: Cannot find the HW Lab or local AFE server.
+ AFEAccessError: An error occurred when querying the server about a
+ machine.
+ """
+ if not self.HasAFEServer(False):
+ raise NoAFEServer('Error: Cannot connect to main AFE server.')
+
+ if self.local and not self.HasAFEServer(True):
+ raise NoAFEServer('Error: Cannot connect to local AFE server.')
+
+ machine_list = {}
+ for m in self.machines:
+ host_info = None
+ cros_name = m + '.cros'
+ if (m in self.toolchain_lab_machines or
+ cros_name in self.toolchain_lab_machines):
+ mod_host = m.split('.')[0]
+ host_info = self.afe.get_hosts(hostname=mod_host)
+ if not host_info:
+ raise AFEAccessError('Unable to get information about %s from main'
+ ' autotest server.' % m)
+ else:
+ host_info = self.local_afe.get_hosts(hostname=m)
+ if not host_info and cmd != 'add':
+ raise AFEAccessError('Unable to get information about %s from '
+ 'local autotest server.' % m)
+ if host_info:
+ host_info = host_info[0]
+ name = host_info.hostname
+ values = {}
+ values['board'] = host_info.platform if host_info.platform else '??'
+ values['locked'] = host_info.locked
+ if host_info.locked:
+ values['locked_by'] = host_info.locked_by
+ values['lock_time'] = host_info.lock_time
+ else:
+ values['locked_by'] = ''
+ values['lock_time'] = ''
+ machine_list[name] = values
+ else:
+ machine_list[m] = {}
+ return machine_list
+
+
+def Main(argv):
+ """Parse the options, initialize lock manager and dispatch proper method.
+
+ Args:
+ argv: The options with which this script was invoked.
+
+ Returns:
+ 0 unless an exception is raised.
+ """
+ parser = argparse.ArgumentParser()
+
+ parser.add_argument(
+ '--list',
+ dest='cmd',
+ action='store_const',
+ const='status',
+ help='List current status of all known machines.')
+ parser.add_argument(
+ '--lock',
+ dest='cmd',
+ action='store_const',
+ const='lock',
+ help='Lock given machine(s).')
+ parser.add_argument(
+ '--unlock',
+ dest='cmd',
+ action='store_const',
+ const='unlock',
+ help='Unlock given machine(s).')
+ parser.add_argument(
+ '--status',
+ dest='cmd',
+ action='store_const',
+ const='status',
+ help='List current status of given machine(s).')
+ parser.add_argument(
+ '--add_machine',
+ dest='cmd',
+ action='store_const',
+ const='add',
+ help='Add machine to local machine server.')
+ parser.add_argument(
+ '--remove_machine',
+ dest='cmd',
+ action='store_const',
+ const='remove',
+ help='Remove machine from the local machine server.')
+ parser.add_argument(
+ '--nolocal',
+ dest='local',
+ action='store_false',
+ default=True,
+ help='Do not try to use local machine server.')
+ parser.add_argument(
+ '--remote', dest='remote', help='machines on which to operate')
+ parser.add_argument(
+ '--chromeos_root',
+ dest='chromeos_root',
+ required=True,
+ help='ChromeOS root to use for autotest scripts.')
+ parser.add_argument(
+ '--local_server',
+ dest='local_server',
+ default=None,
+ help='Alternate local autotest server to use.')
+ parser.add_argument(
+ '--force',
+ dest='force',
+ action='store_true',
+ default=False,
+ help='Force lock/unlock of machines, even if not'
+ ' current lock owner.')
+
+ options = parser.parse_args(argv)
+
+ if not options.remote and options.cmd != 'status':
+ parser.error('No machines specified for operation.')
+
+ if not os.path.isdir(options.chromeos_root):
+ parser.error('Cannot find chromeos_root: %s.' % options.chromeos_root)
+
+ if not options.cmd:
+ parser.error('No operation selected (--list, --status, --lock, --unlock,'
+ ' --add_machine, --remove_machine).')
+
+ machine_list = []
+ if options.remote:
+ machine_list = options.remote.split()
+
+ lock_manager = AFELockManager(machine_list, options.force,
+ options.chromeos_root, options.local_server,
+ options.local)
+
+ machine_states = lock_manager.GetMachineStates(cmd=options.cmd)
+ cmd = options.cmd
+
+ if cmd == 'status':
+ lock_manager.ListMachineStates(machine_states)
+
+ elif cmd == 'lock':
+ if not lock_manager.force:
+ lock_manager.CheckMachineLocks(machine_states, cmd)
+ lock_manager.UpdateMachines(True)
+
+ elif cmd == 'unlock':
+ if not lock_manager.force:
+ lock_manager.CheckMachineLocks(machine_states, cmd)
+ lock_manager.UpdateMachines(False)
+
+ elif cmd == 'add':
+ lock_manager.AddMachinesToLocalServer()
+
+ elif cmd == 'remove':
+ lock_manager.RemoveMachinesFromLocalServer()
+
+ return 0
+
+
+if __name__ == '__main__':
+ sys.exit(Main(sys.argv[1:]))
diff --git a/auto_delete_nightly_test_data.py b/auto_delete_nightly_test_data.py
new file mode 100755
index 00000000..1d9853af
--- /dev/null
+++ b/auto_delete_nightly_test_data.py
@@ -0,0 +1,222 @@
+#!/usr/bin/env python2
+"""A crontab script to delete night test data."""
+
+from __future__ import print_function
+
+__author__ = 'shenhan@google.com (Han Shen)'
+
+import argparse
+import datetime
+import os
+import re
+import sys
+
+from cros_utils import command_executer
+from cros_utils import constants
+from cros_utils import misc
+
+DIR_BY_WEEKDAY = ('Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun')
+
+
+def CleanNumberedDir(s, dry_run=False):
+ """Deleted directories under each dated_dir."""
+ chromeos_dirs = [
+ os.path.join(s, x) for x in os.listdir(s)
+ if misc.IsChromeOsTree(os.path.join(s, x))
+ ]
+ ce = command_executer.GetCommandExecuter(log_level='none')
+ all_succeeded = True
+ for cd in chromeos_dirs:
+ if misc.DeleteChromeOsTree(cd, dry_run=dry_run):
+ print('Successfully removed chromeos tree "{0}".'.format(cd))
+ else:
+ all_succeeded = False
+ print('Failed to remove chromeos tree "{0}", please check.'.format(cd))
+
+ if not all_succeeded:
+ print('Failed to delete at least one chromeos tree, please check.')
+ return False
+
+ ## Now delete the numbered dir Before forcibly removing the directory, just
+ ## check 's' to make sure it is sane. A valid dir to be removed must be
+ ## '/usr/local/google/crostc/(SUN|MON|TUE...|SAT)'.
+ valid_dir_pattern = (
+ '^' + constants.CROSTC_WORKSPACE + '/(' + '|'.join(DIR_BY_WEEKDAY) + ')')
+ if not re.search(valid_dir_pattern, s):
+ print('Trying to delete an invalid dir "{0}" (must match "{1}"), '
+ 'please check.'.format(s, valid_dir_pattern))
+ return False
+
+ cmd = 'rm -fr {0}'.format(s)
+ if dry_run:
+ print(cmd)
+ else:
+ if ce.RunCommand(cmd, print_to_console=False, terminated_timeout=480) == 0:
+ print('Successfully removed "{0}".'.format(s))
+ else:
+ all_succeeded = False
+ print('Failed to remove "{0}", please check.'.format(s))
+ return all_succeeded
+
+
+def CleanDatedDir(dated_dir, dry_run=False):
+ # List subdirs under dir
+ subdirs = [
+ os.path.join(dated_dir, x) for x in os.listdir(dated_dir)
+ if os.path.isdir(os.path.join(dated_dir, x))
+ ]
+ all_succeeded = True
+ for s in subdirs:
+ if not CleanNumberedDir(s, dry_run):
+ all_succeeded = False
+ return all_succeeded
+
+
+def ProcessArguments(argv):
+ """Process arguments."""
+ parser = argparse.ArgumentParser(
+ description='Automatically delete nightly test data directories.',
+ usage='auto_delete_nightly_test_data.py options')
+ parser.add_argument(
+ '-d',
+ '--dry_run',
+ dest='dry_run',
+ default=False,
+ action='store_true',
+ help='Only print command line, do not execute anything.')
+ parser.add_argument(
+ '--days_to_preserve',
+ dest='days_to_preserve',
+ default=3,
+ help=('Specify the number of days (not including today),'
+ ' test data generated on these days will *NOT* be '
+ 'deleted. Defaults to 3.'))
+ options = parser.parse_args(argv)
+ return options
+
+
+def CleanChromeOsTmpFiles(chroot_tmp, days_to_preserve, dry_run):
+ rv = 0
+ ce = command_executer.GetCommandExecuter()
+ # Clean chroot/tmp/test_that_* and chroot/tmp/tmpxxxxxx, that were last
+ # accessed more than specified time.
+ minutes = 1440 * days_to_preserve
+ cmd = (r'find {0} -maxdepth 1 -type d '
+ r'\( -name "test_that_*" -amin +{1} -o '
+ r' -name "cros-update*" -amin +{1} -o '
+ r' -regex "{0}/tmp......" -amin +{1} \) '
+ r'-exec bash -c "echo rm -fr {{}}" \; '
+ r'-exec bash -c "rm -fr {{}}" \;').format(chroot_tmp, minutes)
+ if dry_run:
+ print('Going to execute:\n%s' % cmd)
+ else:
+ rv = ce.RunCommand(cmd, print_to_console=False)
+ if rv == 0:
+ print('Successfully cleaned chromeos tree tmp directory '
+ '"{0}".'.format(chroot_tmp))
+ else:
+ print('Some directories were not removed under chromeos tree '
+ 'tmp directory -"{0}".'.format(chroot_tmp))
+
+ return rv
+
+
+def CleanChromeOsImageFiles(chroot_tmp, subdir_suffix, days_to_preserve,
+ dry_run):
+ rv = 0
+ rv2 = 0
+ ce = command_executer.GetCommandExecuter()
+ minutes = 1440 * days_to_preserve
+ # Clean image tar files, which were last accessed 1 hour ago and clean image
+ # bin files that were last accessed more than specified time.
+ cmd = ('find {0}/*{1} -type f '
+ r'\( -name "chromiumos_test_image.tar" -amin +60 -o '
+ r' -name "chromiumos_test_image.tar.xz" -amin +60 -o '
+ r' -name "chromiumos_test_image.bin" -amin +{2} \) '
+ r'-exec bash -c "echo rm -f {{}}" \; '
+ r'-exec bash -c "rm -f {{}}" \;').format(chroot_tmp, subdir_suffix,
+ minutes)
+
+ if dry_run:
+ print('Going to execute:\n%s' % cmd)
+ else:
+ rv2 = ce.RunCommand(cmd, print_to_console=False)
+ if rv2 == 0:
+ print('Successfully cleaned chromeos images from '
+ '"{0}/*{1}".'.format(chroot_tmp, subdir_suffix))
+ else:
+ print('Some chromeos images were not removed from '
+ '"{0}/*{1}".'.format(chroot_tmp, subdir_suffix))
+
+ rv += rv2
+
+ # Clean autotest files that were last accessed more than specified time.
+ rv2 = 0
+ cmd = (r'find {0}/*{1} -maxdepth 2 -type d '
+ r'\( -name "autotest_files" \) '
+ r'-amin +{2} '
+ r'-exec bash -c "echo rm -fr {{}}" \; '
+ r'-exec bash -c "rm -fr {{}}" \;').format(chroot_tmp, subdir_suffix,
+ minutes)
+ if dry_run:
+ print('Going to execute:\n%s' % cmd)
+ else:
+ rv2 = ce.RunCommand(cmd, print_to_console=False)
+ if rv2 == 0:
+ print('Successfully cleaned chromeos image autotest directories from '
+ '"{0}/*{1}".'.format(chroot_tmp, subdir_suffix))
+ else:
+ print('Some image autotest directories were not removed from '
+ '"{0}/*{1}".'.format(chroot_tmp, subdir_suffix))
+
+ rv += rv2
+ return rv
+
+
+def CleanChromeOsTmpAndImages(days_to_preserve=1, dry_run=False):
+ """Delete temporaries, images under crostc/chromeos."""
+ chromeos_chroot_tmp = os.path.join(constants.CROSTC_WORKSPACE, 'chromeos',
+ 'chroot', 'tmp')
+ # Clean files in tmp directory
+ rv = CleanChromeOsTmpFiles(chromeos_chroot_tmp, days_to_preserve, dry_run)
+ # Clean image files in *-release directories
+ rv += CleanChromeOsImageFiles(chromeos_chroot_tmp, '-release',
+ days_to_preserve, dry_run)
+ # Clean image files in *-pfq directories
+ rv += CleanChromeOsImageFiles(chromeos_chroot_tmp, '-pfq', days_to_preserve,
+ dry_run)
+
+ return rv
+
+
+def Main(argv):
+ """Delete nightly test data directories, tmps and test images."""
+ options = ProcessArguments(argv)
+ # Function 'isoweekday' returns 1(Monday) - 7 (Sunday).
+ d = datetime.datetime.today().isoweekday()
+ # We go back 1 week, delete from that day till we are
+ # options.days_to_preserve away from today.
+ s = d - 7
+ e = d - int(options.days_to_preserve)
+ rv = 0
+ for i in range(s + 1, e):
+ if i <= 0:
+ ## Wrap around if index is negative. 6 is from i + 7 - 1, because
+ ## DIR_BY_WEEKDAY starts from 0, while isoweekday is from 1-7.
+ dated_dir = DIR_BY_WEEKDAY[i + 6]
+ else:
+ dated_dir = DIR_BY_WEEKDAY[i - 1]
+
+ rv += 0 if CleanDatedDir(
+ os.path.join(constants.CROSTC_WORKSPACE, dated_dir),
+ options.dry_run) else 1
+
+## Finally clean temporaries, images under crostc/chromeos
+ rv2 = CleanChromeOsTmpAndImages(
+ int(options.days_to_preserve), options.dry_run)
+
+ return rv + rv2
+
+if __name__ == '__main__':
+ retval = Main(sys.argv[1:])
+ sys.exit(retval)
diff --git a/automation/PRESUBMIT.py b/automation/PRESUBMIT.py
new file mode 100644
index 00000000..56a43e6c
--- /dev/null
+++ b/automation/PRESUBMIT.py
@@ -0,0 +1,14 @@
+# Copyright 2011 Google Inc. All Rights Reserved.
+#
+# Presubmit script for cc'ing c-compiler-chrome on automation related CL's.
+#
+# PRESUBMIT METADATA:
+# [
+# MailTo(
+# p4_filespecs = [
+# "//depot2/gcctools/chromeos/v14/automation/...",
+# ],
+# addresses = ["c-compiler-chrome"],
+# owners = ["asharif", "llozano", "bjanakiraman", "yunlian"]
+# ),
+# ]
diff --git a/automation/__init__.py b/automation/__init__.py
new file mode 100644
index 00000000..8b137891
--- /dev/null
+++ b/automation/__init__.py
@@ -0,0 +1 @@
+
diff --git a/automation/all_tests.py b/automation/all_tests.py
new file mode 100644
index 00000000..e7b70884
--- /dev/null
+++ b/automation/all_tests.py
@@ -0,0 +1,16 @@
+import glob
+import sys
+import unittest
+
+sys.path.insert(0, 'server')
+sys.path.insert(0, 'clients')
+sys.path.insert(0, 'common')
+
+test_file_strings = glob.glob('*/*_test.py')
+module_strings = [str[0:len(str) - 3] for str in test_file_strings]
+for i in range(len(module_strings)):
+ module_strings[i] = module_strings[i].split('/')[-1]
+suites = [unittest.defaultTestLoader.loadTestsFromName(str)
+ for str in module_strings]
+testSuite = unittest.TestSuite(suites)
+text_runner = unittest.TextTestRunner().run(testSuite)
diff --git a/automation/clients/__init__.py b/automation/clients/__init__.py
new file mode 100644
index 00000000..8b137891
--- /dev/null
+++ b/automation/clients/__init__.py
@@ -0,0 +1 @@
+
diff --git a/automation/clients/android.py b/automation/clients/android.py
new file mode 100755
index 00000000..603744b1
--- /dev/null
+++ b/automation/clients/android.py
@@ -0,0 +1,87 @@
+#!/usr/bin/python
+#
+# Copyright 2011 Google Inc. All Rights Reserved.
+"""Client for Android nightly jobs.
+
+Does the following jobs:
+ 1. Checkout android toolchain sources
+ 2. Build Android toolchain
+ 3. Build Android tree
+ 4. Checkout/build/run Android benchmarks (TODO)
+ 5. Generate size/performance dashboard ? (TODO)
+"""
+
+__author__ = 'jingyu@google.com (Jing Yu)'
+
+import optparse
+import pickle
+import sys
+import xmlrpclib
+
+from automation.clients.helper import android
+from automation.common import job_group
+from automation.common import logger
+
+
+class AndroidToolchainNightlyClient(object):
+ VALID_GCC_VERSIONS = ['4.4.3', '4.6', 'google_main', 'fsf_trunk']
+
+ def __init__(self, gcc_version, is_release):
+ assert gcc_version in self.VALID_GCC_VERSIONS
+ self.gcc_version = gcc_version
+ if is_release:
+ self.build_type = 'RELEASE'
+ else:
+ self.build_type = 'DEVELOPMENT'
+
+ def Run(self):
+ server = xmlrpclib.Server('http://localhost:8000')
+ server.ExecuteJobGroup(pickle.dumps(self.CreateJobGroup()))
+
+ def CreateJobGroup(self):
+ factory = android.JobsFactory(self.gcc_version, self.build_type)
+
+ p4_androidtc_job, checkout_dir_dep = factory.CheckoutAndroidToolchain()
+
+ tc_build_job, tc_prefix_dep = factory.BuildAndroidToolchain(
+ checkout_dir_dep)
+
+ tree_build_job = factory.BuildAndroidImage(tc_prefix_dep)
+
+ benchmark_job = factory.Benchmark(tc_prefix_dep)
+
+ all_jobs = [p4_androidtc_job, tc_build_job, tree_build_job, benchmark_job]
+
+ return job_group.JobGroup('androidtoolchain_nightly', all_jobs, True, False)
+
+
+@logger.HandleUncaughtExceptions
+def Main(argv):
+ valid_gcc_versions_string = ', '.join(
+ AndroidToolchainNightlyClient.VALID_GCC_VERSIONS)
+
+ parser = optparse.OptionParser()
+ parser.add_option('--with-gcc-version',
+ dest='gcc_version',
+ default='4.6',
+ action='store',
+ choices=AndroidToolchainNightlyClient.VALID_GCC_VERSIONS,
+ help='gcc version: %s.' % valid_gcc_versions_string)
+ parser.add_option('-r',
+ '--release',
+ dest='is_release',
+ default=False,
+ action='store_true',
+ help='Build a release toolchain?')
+ options, _ = parser.parse_args(argv)
+
+ option_list = [opt.dest for opt in parser.option_list if opt.dest]
+
+ kwargs = dict((option, getattr(options, option)) for option in option_list)
+
+ client = AndroidToolchainNightlyClient(**kwargs)
+ client.Run()
+
+
+if __name__ == '__main__':
+ Main(sys.argv)
diff --git a/automation/clients/chromeos.py b/automation/clients/chromeos.py
new file mode 100755
index 00000000..084f7840
--- /dev/null
+++ b/automation/clients/chromeos.py
@@ -0,0 +1,104 @@
+#!/usr/bin/python
+#
+# Copyright 2011 Google Inc. All Rights Reserved.
+"""chromeos.py: Build & Test ChromeOS using custom compilers."""
+
+__author__ = 'asharif@google.com (Ahmad Sharif)'
+
+import logging
+import optparse
+import os
+import pickle
+import sys
+import xmlrpclib
+
+from automation.clients.helper import jobs
+from automation.clients.helper import perforce
+from automation.common import command as cmd
+from automation.common import job_group
+from automation.common import logger
+
+
+class ChromeOSNightlyClient(object):
+ DEPOT2_DIR = '//depot2/'
+ P4_CHECKOUT_DIR = 'perforce2/'
+ P4_VERSION_DIR = os.path.join(P4_CHECKOUT_DIR, 'gcctools/chromeos/v14')
+
+ def __init__(self, board, remote, gcc_githash, p4_snapshot=''):
+ self._board = board
+ self._remote = remote
+ self._gcc_githash = gcc_githash
+ self._p4_snapshot = p4_snapshot
+
+ def Run(self):
+ server = xmlrpclib.Server('http://localhost:8000')
+ server.ExecuteJobGroup(pickle.dumps(self.CreateJobGroup()))
+
+ def CheckoutV14Dir(self):
+ p4view = perforce.View(self.DEPOT2_DIR, [
+ perforce.PathMapping('gcctools/chromeos/v14/...')
+ ])
+ return self.GetP4Snapshot(p4view)
+
+ def GetP4Snapshot(self, p4view):
+ p4client = perforce.CommandsFactory(self.P4_CHECKOUT_DIR, p4view)
+
+ if self._p4_snapshot:
+ return p4client.CheckoutFromSnapshot(self._p4_snapshot)
+ else:
+ return p4client.SetupAndDo(p4client.Sync(), p4client.Remove())
+
+ def CreateJobGroup(self):
+ chain = cmd.Chain(
+ self.CheckoutV14Dir(),
+ cmd.Shell('python',
+ os.path.join(self.P4_VERSION_DIR, 'test_toolchains.py'),
+ '--force-mismatch',
+ '--clean',
+ '--public', # crbug.com/145822
+ '--board=%s' % self._board,
+ '--remote=%s' % self._remote,
+ '--githashes=%s' % self._gcc_githash))
+ label = 'testlabel'
+ job = jobs.CreateLinuxJob(label, chain, timeout=24 * 60 * 60)
+
+ return job_group.JobGroup(label, [job], True, False)
+
+
+@logger.HandleUncaughtExceptions
+def Main(argv):
+ parser = optparse.OptionParser()
+ parser.add_option('-b',
+ '--board',
+ dest='board',
+ help='Run performance tests on these boards')
+ parser.add_option('-r',
+ '--remote',
+ dest='remote',
+ help='Run performance tests on these remotes')
+ parser.add_option('-g',
+ '--gcc_githash',
+ dest='gcc_githash',
+ help='Use this gcc_githash.')
+ parser.add_option('-p',
+ '--p4_snapshot',
+ dest='p4_snapshot',
+ default='',
+ help='Use this p4_snapshot.')
+ options, _ = parser.parse_args(argv)
+
+ if not all([options.board, options.remote, options.gcc_githash]):
+ logging.error('Specify a board, remote and gcc_githash')
+ return 1
+
+ client = ChromeOSNightlyClient(options.board,
+ options.remote,
+ options.gcc_githash,
+ p4_snapshot=options.p4_snapshot)
+ client.Run()
+ return 0
+
+
+if __name__ == '__main__':
+ logger.SetUpRootLogger(level=logging.DEBUG, display_flags={'name': False})
+ sys.exit(Main(sys.argv))
diff --git a/automation/clients/crosstool.py b/automation/clients/crosstool.py
new file mode 100755
index 00000000..65720343
--- /dev/null
+++ b/automation/clients/crosstool.py
@@ -0,0 +1,102 @@
+#!/usr/bin/python
+#
+# Copyright 2011 Google Inc. All Rights Reserved.
+
+__author__ = 'kbaclawski@google.com (Krystian Baclawski)'
+
+import logging
+import optparse
+import pickle
+import sys
+import xmlrpclib
+
+from automation.clients.helper import crosstool
+from automation.common import job_group
+from automation.common import logger
+
+
+class CrosstoolNightlyClient(object):
+ VALID_TARGETS = ['gcc-4.6.x-ubuntu_lucid-arm',
+ 'gcc-4.6.x-ubuntu_lucid-x86_64',
+ 'gcc-4.6.x-grtev2-armv7a-vfpv3.d16-hard',
+ 'gcc-4.6.x-glibc-2.11.1-grte',
+ 'gcc-4.6.x-glibc-2.11.1-powerpc']
+ VALID_BOARDS = ['qemu', 'pandaboard', 'unix']
+
+ def __init__(self, target, boards):
+ assert target in self.VALID_TARGETS
+ assert all(board in self.VALID_BOARDS for board in boards)
+
+ self._target = target
+ self._boards = boards
+
+ def Run(self):
+ server = xmlrpclib.Server('http://localhost:8000')
+ server.ExecuteJobGroup(pickle.dumps(self.CreateJobGroup()))
+
+ def CreateJobGroup(self):
+ factory = crosstool.JobsFactory()
+
+ checkout_crosstool_job, checkout_dir, manifests_dir = \
+ factory.CheckoutCrosstool(self._target)
+
+ all_jobs = [checkout_crosstool_job]
+
+ # Build crosstool target
+ build_release_job, build_tree_dir = factory.BuildRelease(checkout_dir,
+ self._target)
+ all_jobs.append(build_release_job)
+
+ testruns = []
+
+ # Perform crosstool tests
+ for board in self._boards:
+ for component in ('gcc', 'binutils'):
+ test_job, testrun_dir = factory.RunTests(checkout_dir, build_tree_dir,
+ self._target, board, component)
+ all_jobs.append(test_job)
+ testruns.append(testrun_dir)
+
+ if testruns:
+ all_jobs.append(factory.GenerateReport(testruns, manifests_dir,
+ self._target, self._boards))
+
+ return job_group.JobGroup('Crosstool Nightly Build (%s)' % self._target,
+ all_jobs, True, False)
+
+
+@logger.HandleUncaughtExceptions
+def Main(argv):
+ valid_boards_string = ', '.join(CrosstoolNightlyClient.VALID_BOARDS)
+
+ parser = optparse.OptionParser()
+ parser.add_option(
+ '-b',
+ '--board',
+ dest='boards',
+ action='append',
+ choices=CrosstoolNightlyClient.VALID_BOARDS,
+ default=[],
+ help=('Run DejaGNU tests on selected boards: %s.' % valid_boards_string))
+ options, args = parser.parse_args(argv)
+
+ if len(args) == 2:
+ target = args[1]
+ else:
+ logging.error('Exactly one target required as a command line argument!')
+ logging.info('List of valid targets:')
+ for pair in enumerate(CrosstoolNightlyClient.VALID_TARGETS, start=1):
+ logging.info('%d) %s', pair)
+ sys.exit(1)
+
+ option_list = [opt.dest for opt in parser.option_list if opt.dest]
+
+ kwargs = dict((option, getattr(options, option)) for option in option_list)
+
+ client = CrosstoolNightlyClient(target, **kwargs)
+ client.Run()
+
+
+if __name__ == '__main__':
+ logger.SetUpRootLogger(level=logging.DEBUG, display_flags={'name': False})
+ Main(sys.argv)
diff --git a/automation/clients/dejagnu_compiler.py b/automation/clients/dejagnu_compiler.py
new file mode 100755
index 00000000..eb923d5d
--- /dev/null
+++ b/automation/clients/dejagnu_compiler.py
@@ -0,0 +1,98 @@
+#!/usr/bin/python
+#
+# Copyright 2012 Google Inc. All Rights Reserved.
+"""dejagnu_compiler.py: Run dejagnu test."""
+
+__author__ = 'shenhan@google.com (Han Shen)'
+
+import logging
+import optparse
+import os
+import pickle
+import sys
+import xmlrpclib
+
+from automation.clients.helper import jobs
+from automation.clients.helper import perforce
+from automation.common import command as cmd
+from automation.common import job_group
+from automation.common import logger
+
+
+class DejagnuCompilerNightlyClient:
+ DEPOT2_DIR = '//depot2/'
+ P4_CHECKOUT_DIR = 'perforce2/'
+ P4_VERSION_DIR = os.path.join(P4_CHECKOUT_DIR, 'gcctools/chromeos/v14')
+
+ def __init__(self, board, remote, p4_snapshot, cleanup):
+ self._board = board
+ self._remote = remote
+ self._p4_snapshot = p4_snapshot
+ self._cleanup = cleanup
+
+ def Run(self):
+ server = xmlrpclib.Server('http://localhost:8000')
+ server.ExecuteJobGroup(pickle.dumps(self.CreateJobGroup()))
+
+ def CheckoutV14Dir(self):
+ p4view = perforce.View(self.DEPOT2_DIR, [
+ perforce.PathMapping('gcctools/chromeos/v14/...')
+ ])
+ return self.GetP4Snapshot(p4view)
+
+ def GetP4Snapshot(self, p4view):
+ p4client = perforce.CommandsFactory(self.P4_CHECKOUT_DIR, p4view)
+
+ if self._p4_snapshot:
+ return p4client.CheckoutFromSnapshot(self._p4_snapshot)
+ else:
+ return p4client.SetupAndDo(p4client.Sync(), p4client.Remove())
+
+ def CreateJobGroup(self):
+ chain = cmd.Chain(self.CheckoutV14Dir(), cmd.Shell(
+ 'python', os.path.join(self.P4_VERSION_DIR, 'test_gcc_dejagnu.py'),
+ '--board=%s' % self._board, '--remote=%s' % self._remote,
+ '--cleanup=%s' % self._cleanup))
+ label = 'dejagnu'
+ job = jobs.CreateLinuxJob(label, chain, timeout=8 * 60 * 60)
+ return job_group.JobGroup(label,
+ [job],
+ cleanup_on_failure=True,
+ cleanup_on_completion=True)
+
+
+@logger.HandleUncaughtExceptions
+def Main(argv):
+ parser = optparse.OptionParser()
+ parser.add_option('-b',
+ '--board',
+ dest='board',
+ help='Run performance tests on these boards')
+ parser.add_option('-r',
+ '--remote',
+ dest='remote',
+ help='Run performance tests on these remotes')
+ parser.add_option('-p',
+ '--p4_snapshot',
+ dest='p4_snapshot',
+ help=('For development only. '
+ 'Use snapshot instead of checking out.'))
+ parser.add_option('--cleanup',
+ dest='cleanup',
+ default='mount',
+ help=('Cleanup test directory, values could be one of '
+ '"mount", "chroot" or "chromeos"'))
+ options, _ = parser.parse_args(argv)
+
+ if not all([options.board, options.remote]):
+ logging.error('Specify a board and remote.')
+ return 1
+
+ client = DejagnuCompilerNightlyClient(options.board, options.remote,
+ options.p4_snapshot, options.cleanup)
+ client.Run()
+ return 0
+
+
+if __name__ == '__main__':
+ sys.exit(Main(sys.argv))
diff --git a/automation/clients/helper/__init__.py b/automation/clients/helper/__init__.py
new file mode 100644
index 00000000..8b137891
--- /dev/null
+++ b/automation/clients/helper/__init__.py
@@ -0,0 +1 @@
+
diff --git a/automation/clients/helper/android.py b/automation/clients/helper/android.py
new file mode 100644
index 00000000..7ff2ac1c
--- /dev/null
+++ b/automation/clients/helper/android.py
@@ -0,0 +1,319 @@
+# Copyright 2011 Google Inc. All Rights Reserved.
+"""Helper modules for Android toolchain test infrastructure.
+
+Provides following Android toolchain test jobs and commands.
+. Checkout Android toolchain source code
+. Build Android toolchain
+. Checkout and build Android tree
+. Checkout/build/run Android benchmarks, generate size dashboard
+. Transform size dashboard to report, send perflab jobid to
+ perflab dashboard server.(TODO)
+"""
+
+__author__ = 'jingyu@google.com (Jing Yu)'
+
+import os.path
+
+from automation.clients.helper import jobs
+from automation.clients.helper import perforce
+from automation.common import command as cmd
+from automation.common import job
+
+
+class JobsFactory(object):
+
+ def __init__(self, gcc_version='4.4.3', build_type='DEVELOPMENT'):
+ assert gcc_version in ['4.4.3', '4.6', 'google_main', 'fsf_trunk']
+ assert build_type in ['DEVELOPMENT', 'RELEASE']
+
+ self.gcc_version = gcc_version
+ self.commands = CommandsFactory(gcc_version, build_type)
+ self.tc_tag = 'gcc-%s-%s' % (gcc_version, build_type)
+
+ def CheckoutAndroidToolchain(self):
+ """Check out Android toolchain sources by release and gcc version."""
+ command = self.commands.CheckoutAndroidToolchain()
+ new_job = jobs.CreateLinuxJob('AndroidCheckoutToolchain(%s)' % self.tc_tag,
+ command)
+ checkout_dir_dep = job.FolderDependency(new_job, self.commands.CHECKOUT_DIR)
+ return new_job, checkout_dir_dep
+
+ def BuildAndroidToolchain(self, checkout_dir_dep):
+ """Build Android Toolchain."""
+ command = self.commands.BuildAndroidToolchain()
+ new_job = jobs.CreateLinuxJob('AndroidBuildToolchain(%s)' % self.tc_tag,
+ command)
+ new_job.DependsOnFolder(checkout_dir_dep)
+ tc_prefix_dep = job.FolderDependency(new_job,
+ self.commands.toolchain_prefix_dir)
+ return new_job, tc_prefix_dep
+
+ def BuildAndroidImage(self,
+ tc_prefix_dep,
+ product='stingray',
+ branch='ics-release'):
+ assert product in ['stingray', 'passion', 'trygon', 'soju']
+ assert branch in ['honeycomb-release', 'ics-release']
+ command = self.commands.BuildAndroidImage(product, branch)
+ new_job = jobs.CreateLinuxJob('AndroidGetBuildTree(%s)' % self.tc_tag,
+ command)
+ new_job.DependsOnFolder(tc_prefix_dep)
+ return new_job
+
+ def Benchmark(self, tc_prefix_dep, arch='soju'):
+ assert arch in ['soju', 'stingray']
+ script_cmd = self.commands.CheckoutScripts()
+ experiment_tag = 'android/nightly/%s/%s/$JOB_ID' % (self.tc_tag, arch)
+ build_run_benchmark_cmd = self.commands.BuildRunBenchmark(arch,
+ experiment_tag)
+ command = cmd.Chain(script_cmd, build_run_benchmark_cmd)
+ new_job = jobs.CreateLinuxJob('AndroidBenchmarking(%s)' % self.tc_tag,
+ command)
+ new_job.DependsOnFolder(tc_prefix_dep)
+ return new_job
+
+
+class CommandsFactory(object):
+ CHECKOUT_DIR = 'androidtc-checkout-dir'
+ TOOLCHAIN_SRC_DIR = os.path.join(CHECKOUT_DIR, 'src')
+ TOOLCHAIN_BUILD_DIR = 'obj'
+ ANDROID_TREES_DIR = 'android_trees'
+ TOOLS_DIR = 'android-tools'
+ BENCHMARK_OUT_DIR = 'results'
+
+ def __init__(self, gcc_version, build_type):
+ assert gcc_version in ['4.4.3', '4.6', 'google_main', 'fsf_trunk']
+ assert build_type in ['DEVELOPMENT', 'RELEASE']
+
+ self.build_type = build_type
+ self.gcc_version = gcc_version
+ self.binutils_version = '2.21'
+ self.gold_version = '2.21'
+ self.toolchain_prefix_dir = 'install-gcc-%s-%s' % (gcc_version, build_type)
+ self.p4client = self._CreatePerforceClient()
+ self.scripts = ScriptsFactory(self.gcc_version, self.binutils_version,
+ self.gold_version)
+
+ def _CreatePerforceClient(self):
+ p4_dev_path = 'gcctools/google_vendor_src_branch'
+ mobile_rel_branch = ('branches/'
+ 'mobile_toolchain_v15_release_branch/gcctools/'
+ 'google_vendor_src_branch')
+ gcc_443_rel_branch = ('branches/'
+ 'android_compiler_v14_release_branch/gcctools/'
+ 'google_vendor_src_branch')
+
+ # Common views for tools
+ p4view = perforce.View('depot2', perforce.PathMapping.ListFromPathTuples([(
+ 'gcctools/android/build/...', 'src/build/...'), (
+ 'gcctools/android/Tarballs/...', 'src/tarballs/...')]))
+ for mapping in perforce.PathMapping.ListFromPathDict(
+ {'gcctools/android': ['tools/scripts/...', 'master/...']}):
+ p4view.add(mapping)
+
+ # Add views for gdb
+ p4view.add(perforce.PathMapping(p4_dev_path, 'src',
+ 'gdb/gdb-7.1.x-android/...'))
+
+ # Add view for binutils for ld and gold
+ if self.build_type is 'RELEASE':
+ binutils_branch = mobile_rel_branch
+ else:
+ binutils_branch = p4_dev_path
+ p4view.add(perforce.PathMapping(binutils_branch, 'src', (
+ 'binutils/binutils-%s/...' % self.binutils_version)))
+ if self.binutils_version != self.gold_version:
+ p4view.add(perforce.PathMapping(binutils_branch, 'src', (
+ 'binutils/binutils-%s/...' % self.gold_version)))
+
+ # Add view for gcc if gcc_version is '4.4.3'.
+ if self.gcc_version == '4.4.3':
+ gcc443_path = 'gcc/gcc-4.4.3/...'
+ if self.build_type is 'RELEASE':
+ p4view.add(perforce.PathMapping(gcc_443_rel_branch, 'src', gcc443_path))
+ else:
+ p4view.add(perforce.PathMapping(p4_dev_path, 'src', gcc443_path))
+
+ return perforce.CommandsFactory(self.CHECKOUT_DIR, p4view)
+
+ def _CheckoutGCCFromSVN(self):
+ """Check out gcc from fsf svn.
+
+ Return the command that check out gcc from svn
+ to gcc_required_dir (=TOOLCHAIN_SRC_DIR/src/gcc/gcc-xxx).
+
+ TODO:
+ Create a svn class that does these jobs.
+ Parallelize p4 checkout and svn checkout.
+ """
+ if self.gcc_version == '4.4.3':
+ return ''
+ assert self.gcc_version in ['4.6', 'google_main', 'fsf_trunk']
+
+ gcc_branches_dir = {'4.6': 'branches/google/gcc-4_6',
+ 'google_main': 'branches/google/main',
+ 'fsf_trunk': 'trunk'}
+
+ # Find GCC revision number, output it to TOOLCHAIN_SRC_DIR/CLNUM_GCC
+ svn_get_revision = cmd.Pipe(
+ cmd.Shell('svn', 'info'),
+ cmd.Shell('grep', '"Revision:"'),
+ cmd.Shell('sed', '-E', '"s,Revision: ([0-9]+).*,\\1,"'),
+ output='../../../CLNUM_GCC')
+
+ svn_co_command = 'svn co svn://gcc.gnu.org/svn/gcc/%s .' % (
+ gcc_branches_dir[self.gcc_version])
+
+ gcc_required_dir = os.path.join(self.TOOLCHAIN_SRC_DIR, 'gcc',
+ 'gcc-%s' % self.gcc_version)
+
+ return cmd.Chain(
+ cmd.MakeDir(gcc_required_dir),
+ cmd.Wrapper(
+ cmd.Chain(svn_co_command, svn_get_revision),
+ cwd=gcc_required_dir))
+
+ def CheckoutAndroidToolchain(self):
+ p4client = self.p4client
+ command = p4client.SetupAndDo(p4client.Sync(),
+ p4client.SaveCurrentCLNumber('CLNUM'),
+ p4client.Remove())
+ if self.gcc_version != '4.4.3':
+ command.append(self._CheckoutGCCFromSVN())
+
+ return command
+
+ def BuildAndroidToolchain(self):
+ script_cmd = self.scripts.BuildAndroidToolchain(
+ self.toolchain_prefix_dir, self.CHECKOUT_DIR, self.TOOLCHAIN_BUILD_DIR,
+ self.TOOLCHAIN_SRC_DIR)
+
+ # Record toolchain and gcc CL number
+ record_cl_cmd = cmd.Copy(
+ os.path.join(self.CHECKOUT_DIR, 'CLNUM*'),
+ to_dir=self.toolchain_prefix_dir)
+ save_cmd = cmd.Tar(
+ os.path.join('$JOB_TMP', 'results', '%s.tar.bz2' %
+ self.toolchain_prefix_dir), self.toolchain_prefix_dir)
+ return cmd.Chain(script_cmd, record_cl_cmd, save_cmd)
+
+ def _BuildAndroidTree(self, local_android_branch_dir, product):
+ target_tools_prefix = os.path.join('$JOB_TMP', self.toolchain_prefix_dir,
+ 'bin', 'arm-linux-androideabi-')
+ java_path = '/usr/lib/jvm/java-6-sun/bin'
+ build_cmd = cmd.Shell('make', '-j8', 'PRODUCT-%s-userdebug' % product,
+ 'TARGET_TOOLS_PREFIX=%s' % target_tools_prefix,
+ 'PATH=%s:$PATH' % java_path)
+ return cmd.Wrapper(build_cmd, cwd=local_android_branch_dir)
+
+ def BuildAndroidImage(self, product, branch):
+ assert product in ['stingray', 'passion', 'trygon', 'soju']
+
+ # Copy the tree from atree.mtv.corp to ANDROID_TREES_DIR/branch
+ androidtrees_host = 'atree.mtv.corp.google.com'
+ androidtrees_path = ('/usr/local/google2/home/mobiletc-prebuild/'
+ 'android_trees')
+ remote_android_branch_path = os.path.join(androidtrees_path, branch)
+ local_android_branch_dir = os.path.join(self.ANDROID_TREES_DIR, branch)
+ gettree_cmd = cmd.RemoteCopyFrom(
+ androidtrees_host, remote_android_branch_path, local_android_branch_dir)
+
+ # Configure and build the tree
+ buildtree_cmd = self._BuildAndroidTree(local_android_branch_dir, product)
+
+ # Compress and copy system.img to result
+ result_system_img = os.path.join(local_android_branch_dir, 'out', 'target',
+ 'product', product, 'system.img')
+ copy_img = cmd.Copy(result_system_img, to_dir='results')
+ compress_img = cmd.Shell('bzip2', os.path.join('results', 'system.img'))
+
+ return cmd.Chain(gettree_cmd, buildtree_cmd, copy_img, compress_img)
+
+ def CheckoutScripts(self):
+ p4view = perforce.View('depot2',
+ [perforce.PathMapping('gcctools/android/tools/...',
+ 'tools/...')])
+ p4client = perforce.CommandsFactory(self.TOOLS_DIR, p4view)
+ return p4client.SetupAndDo(p4client.Sync(), p4client.Remove())
+
+ def BuildRunBenchmark(self, arch, run_experiment):
+ # Copy base benchmark binaries from atree.mtv.corp
+ base_benchbin_host = 'atree.mtv.corp.google.com'
+ base_benchbin_path = ('/usr/local/google2/home/mobiletc-prebuild/'
+ 'archive/v3binaries/2011-10-18')
+ local_basebenchbin_dir = 'base_benchmark_bin'
+ getbase_cmd = cmd.RemoteCopyFrom(base_benchbin_host, base_benchbin_path,
+ local_basebenchbin_dir)
+
+ # Build and run benchmark.
+ android_arch = 'android_%s' % arch
+ run_label = 'normal'
+ benchmark_cmd = self.scripts.RunBenchmark(
+ self.toolchain_prefix_dir, self.TOOLS_DIR, self.BENCHMARK_OUT_DIR,
+ run_label, run_experiment, android_arch, local_basebenchbin_dir)
+
+ # Extract jobid from BENCHMARK_OUT_DIR/log/jobid_normal.log file.
+ # Copy jobid to www server to generate performance dashboard.
+ # TODO(jingyu)
+
+ return cmd.Chain(getbase_cmd, benchmark_cmd)
+
+
+class ScriptsFactory(object):
+
+ def __init__(self, gcc_version, binutils_version, gold_version):
+ self._gcc_version = gcc_version
+ self._binutils_version = binutils_version
+ self._gold_version = gold_version
+
+ def BuildAndroidToolchain(self, toolchain_prefix_dir, checkout_dir,
+ toolchain_build_dir, androidtc_src_dir):
+ if self._gcc_version == '4.4.3':
+ gold_option = 'both/gold'
+ else:
+ gold_option = 'default'
+
+ return cmd.Shell(
+ 'build_androidtoolchain.sh',
+ '--toolchain-src=%s' % os.path.join('$JOB_TMP', androidtc_src_dir),
+ '--build-path=%s' % os.path.join('$JOB_TMP', toolchain_build_dir),
+ '--install-prefix=%s' % os.path.join('$JOB_TMP', toolchain_prefix_dir),
+ '--target=arm-linux-androideabi',
+ '--enable-gold=%s' % gold_option,
+ '--with-gcc-version=%s' % self._gcc_version,
+ '--with-binutils-version=%s' % self._binutils_version,
+ '--with-gold-version=%s' % self._gold_version,
+ '--with-gdb-version=7.1.x-android',
+ '--log-path=%s/logs' % '$JOB_HOME',
+ '--android-sysroot=%s' % os.path.join('$JOB_TMP', checkout_dir,
+ 'gcctools', 'android', 'master',
+ 'honeycomb_generic_sysroot'),
+ path=os.path.join(checkout_dir, 'gcctools', 'android', 'tools',
+ 'scripts'))
+
+ def RunBenchmark(self,
+ toolchain_prefix_dir,
+ checkout_dir,
+ output_dir,
+ run_label,
+ run_experiment,
+ arch,
+ base_bench_bin=None):
+ if base_bench_bin:
+ base_bench_opt = '--base_benchmark_bin=%s' % base_bench_bin
+ else:
+ base_bench_opt = ''
+
+ return cmd.Shell(
+ 'benchmark.sh',
+ '--android_toolchain=%s' % os.path.join('$JOB_TMP',
+ toolchain_prefix_dir),
+ '--bench_space=%s' % os.path.join('$JOB_TMP', 'bench'),
+ '--benchmark_bin=%s' % os.path.join('$JOB_TMP', output_dir,
+ 'bench_bin'),
+ base_bench_opt,
+ '--log_path=%s' % os.path.join('$JOB_TMP', output_dir, 'log'),
+ '--arch=%s' % arch,
+ '--run_label=%s' % run_label,
+ '--run_experiment=%s' % run_experiment,
+ path=os.path.join(checkout_dir, 'tools', 'scripts'))
diff --git a/automation/clients/helper/chromeos.py b/automation/clients/helper/chromeos.py
new file mode 100644
index 00000000..e7157451
--- /dev/null
+++ b/automation/clients/helper/chromeos.py
@@ -0,0 +1,180 @@
+# Copyright 2011 Google Inc. All Rights Reserved.
+
+__author__ = 'asharif@google.com (Ahmad Sharif)'
+
+import os.path
+import re
+
+from automation.clients.helper import jobs
+from automation.clients.helper import perforce
+from automation.common import command as cmd
+from automation.common import machine
+
+
+class ScriptsFactory(object):
+
+ def __init__(self, chromeos_root, scripts_path):
+ self._chromeos_root = chromeos_root
+ self._scripts_path = scripts_path
+
+ def SummarizeResults(self, logs_path):
+ return cmd.Shell('summarize_results.py', logs_path, path=self._scripts_path)
+
+ def Buildbot(self, config_name):
+ buildbot = os.path.join(self._chromeos_root,
+ 'chromite/cbuildbot/cbuildbot.py')
+
+ return cmd.Shell(buildbot, '--buildroot=%s' % self._chromeos_root,
+ '--resume', '--noarchive', '--noprebuilts', '--nosync',
+ '--nouprev', '--notests', '--noclean', config_name)
+
+ def RunBenchmarks(self, board, tests):
+ image_path = os.path.join(self._chromeos_root, 'src/build/images', board,
+ 'latest/chromiumos_image.bin')
+
+ return cmd.Shell('cros_run_benchmarks.py',
+ '--remote=$SECONDARY_MACHINES[0]',
+ '--board=%s' % board,
+ '--tests=%s' % tests,
+ '--full_table',
+ image_path,
+ path='/home/mobiletc-prebuild')
+
+ def SetupChromeOS(self, version='latest', use_minilayout=False):
+ setup_chromeos = cmd.Shell('setup_chromeos.py',
+ '--public',
+ '--dir=%s' % self._chromeos_root,
+ '--version=%s' % version,
+ path=self._scripts_path)
+
+ if use_minilayout:
+ setup_chromeos.AddOption('--minilayout')
+ return setup_chromeos
+
+
+class CommandsFactory(object):
+ DEPOT2_DIR = '//depot2/'
+ P4_CHECKOUT_DIR = 'perforce2/'
+ P4_VERSION_DIR = os.path.join(P4_CHECKOUT_DIR, 'gcctools/chromeos/v14')
+
+ CHROMEOS_ROOT = 'chromeos'
+ CHROMEOS_SCRIPTS_DIR = os.path.join(CHROMEOS_ROOT, 'src/scripts')
+ CHROMEOS_BUILDS_DIR = '/home/mobiletc-prebuild/www/chromeos_builds'
+
+ def __init__(self, chromeos_version, board, toolchain, p4_snapshot):
+ self.chromeos_version = chromeos_version
+ self.board = board
+ self.toolchain = toolchain
+ self.p4_snapshot = p4_snapshot
+
+ self.scripts = ScriptsFactory(self.CHROMEOS_ROOT, self.P4_VERSION_DIR)
+
+ def AddBuildbotConfig(self, config_name, config_list):
+ config_header = 'add_config(%r, [%s])' % (config_name,
+ ', '.join(config_list))
+ config_file = os.path.join(self.CHROMEOS_ROOT,
+ 'chromite/cbuildbot/cbuildbot_config.py')
+ quoted_config_header = '%r' % config_header
+ quoted_config_header = re.sub("'", "\\\"", quoted_config_header)
+
+ return cmd.Pipe(
+ cmd.Shell('echo', quoted_config_header),
+ cmd.Shell('tee', '--append', config_file))
+
+ def RunBuildbot(self):
+ config_dict = {'board': self.board,
+ 'build_tests': True,
+ 'chrome_tests': True,
+ 'unittests': False,
+ 'vm_tests': False,
+ 'prebuilts': False,
+ 'latest_toolchain': True,
+ 'useflags': ['chrome_internal'],
+ 'usepkg_chroot': True,
+ self.toolchain: True}
+ config_name = '%s-toolchain-test' % self.board
+ if 'arm' in self.board:
+ config_list = ['arm']
+ else:
+ config_list = []
+ config_list.extend(['internal', 'full', 'official', str(config_dict)])
+
+ add_config_shell = self.AddBuildbotConfig(config_name, config_list)
+ return cmd.Chain(add_config_shell, self.scripts.Buildbot(config_name))
+
+ def BuildAndBenchmark(self):
+ return cmd.Chain(
+ self.CheckoutV14Dir(),
+ self.SetupChromeOSCheckout(self.chromeos_version, True),
+ self.RunBuildbot(),
+ self.scripts.RunBenchmarks(self.board, 'BootPerfServer,10:Page,3'))
+
+ def GetP4Snapshot(self, p4view):
+ p4client = perforce.CommandsFactory(self.P4_CHECKOUT_DIR, p4view)
+
+ if self.p4_snapshot:
+ return p4client.CheckoutFromSnapshot(self.p4_snapshot)
+ else:
+ return p4client.SetupAndDo(p4client.Sync(), p4client.Remove())
+
+ def CheckoutV14Dir(self):
+ p4view = perforce.View(self.DEPOT2_DIR, [
+ perforce.PathMapping('gcctools/chromeos/v14/...')
+ ])
+ return self.GetP4Snapshot(p4view)
+
+ def SetupChromeOSCheckout(self, version, use_minilayout=False):
+ version_re = '^\d+\.\d+\.\d+\.[a-zA-Z0-9]+$'
+
+ location = os.path.join(self.CHROMEOS_BUILDS_DIR, version)
+
+ if version in ['weekly', 'quarterly']:
+ assert os.path.islink(location), 'Symlink %s does not exist.' % location
+
+ location_expanded = os.path.abspath(os.path.realpath(location))
+ version = os.path.basename(location_expanded)
+
+ if version in ['top', 'latest'] or re.match(version_re, version):
+ return self.scripts.SetupChromeOS(version, use_minilayout)
+
+ elif version.endswith('bz2') or version.endswith('gz'):
+ return cmd.UnTar(location_expanded, self.CHROMEOS_ROOT)
+
+ else:
+ signature_file_location = os.path.join(location,
+ 'src/scripts/enter_chroot.sh')
+ assert os.path.exists(signature_file_location), (
+ 'Signature file %s does not exist.' % signature_file_location)
+
+ return cmd.Copy(location, to_dir=self.CHROMEOS_ROOT, recursive=True)
+
+
+class JobsFactory(object):
+
+ def __init__(self,
+ chromeos_version='top',
+ board='x86-mario',
+ toolchain='trunk',
+ p4_snapshot=''):
+ self.chromeos_version = chromeos_version
+ self.board = board
+ self.toolchain = toolchain
+
+ self.commands = CommandsFactory(chromeos_version, board, toolchain,
+ p4_snapshot)
+
+ def BuildAndBenchmark(self):
+ command = self.commands.BuildAndBenchmark()
+
+ label = 'BuildAndBenchmark(%s,%s,%s)' % (self.toolchain, self.board,
+ self.chromeos_version)
+
+ machine_label = 'chromeos-%s' % self.board
+
+ job = jobs.CreateLinuxJob(label, command)
+ job.DependsOnMachine(
+ machine.MachineSpecification(label=machine_label,
+ lock_required=True),
+ False)
+
+ return job
diff --git a/automation/clients/helper/crosstool.py b/automation/clients/helper/crosstool.py
new file mode 100644
index 00000000..80154b25
--- /dev/null
+++ b/automation/clients/helper/crosstool.py
@@ -0,0 +1,168 @@
+# Copyright 2011 Google Inc. All Rights Reserved.
+
+__author__ = 'kbaclawski@google.com (Krystian Baclawski)'
+
+import os.path
+import time
+
+from automation.clients.helper import jobs
+from automation.clients.helper import perforce
+from automation.common import command as cmd
+from automation.common import job
+
+
+class JobsFactory(object):
+
+ def __init__(self):
+ self.commands = CommandsFactory()
+
+ def CheckoutCrosstool(self, target):
+ command = self.commands.CheckoutCrosstool()
+ new_job = jobs.CreateLinuxJob('CheckoutCrosstool(%s)' % target, command)
+ checkout_dir_dep = job.FolderDependency(new_job,
+ CommandsFactory.CHECKOUT_DIR)
+ manifests_dir_dep = job.FolderDependency(
+ new_job, os.path.join(self.commands.buildit_path, target), 'manifests')
+ return new_job, checkout_dir_dep, manifests_dir_dep
+
+ def BuildRelease(self, checkout_dir, target):
+ command = self.commands.BuildRelease(target)
+ new_job = jobs.CreateLinuxJob('BuildRelease(%s)' % target, command)
+ new_job.DependsOnFolder(checkout_dir)
+ build_tree_dep = job.FolderDependency(new_job,
+ self.commands.buildit_work_dir_path)
+ return new_job, build_tree_dep
+
+ def RunTests(self, checkout_dir, build_tree_dir, target, board, component):
+ command = self.commands.RunTests(target, board, component)
+ new_job = jobs.CreateLinuxJob('RunTests(%s, %s, %s)' %
+ (target, component, board), command)
+ new_job.DependsOnFolder(checkout_dir)
+ new_job.DependsOnFolder(build_tree_dir)
+ testrun_dir_dep = job.FolderDependency(
+ new_job, self.commands.dejagnu_output_path, board)
+ return new_job, testrun_dir_dep
+
+ def GenerateReport(self, testrun_dirs, manifests_dir, target, boards):
+ command = self.commands.GenerateReport(boards)
+ new_job = jobs.CreateLinuxJob('GenerateReport(%s)' % target, command)
+ new_job.DependsOnFolder(manifests_dir)
+ for testrun_dir in testrun_dirs:
+ new_job.DependsOnFolder(testrun_dir)
+ return new_job
+
+
+class CommandsFactory(object):
+ CHECKOUT_DIR = 'crosstool-checkout-dir'
+
+ def __init__(self):
+ self.buildit_path = os.path.join(self.CHECKOUT_DIR, 'gcctools', 'crosstool',
+ 'v15')
+
+ self.buildit_work_dir = 'buildit-tmp'
+ self.buildit_work_dir_path = os.path.join('$JOB_TMP', self.buildit_work_dir)
+ self.dejagnu_output_path = os.path.join(self.buildit_work_dir_path,
+ 'dejagnu-output')
+
+ paths = {
+ 'gcctools': [
+ 'crosstool/v15/...', 'scripts/...'
+ ],
+ 'gcctools/google_vendor_src_branch': [
+ 'binutils/binutils-2.21/...', 'gdb/gdb-7.2.x/...',
+ 'zlib/zlib-1.2.3/...'
+ ],
+ 'gcctools/vendor_src': [
+ 'gcc/google/gcc-4_6/...'
+ ]
+ }
+
+ p4view = perforce.View('depot2',
+ perforce.PathMapping.ListFromPathDict(paths))
+
+ self.p4client = perforce.CommandsFactory(self.CHECKOUT_DIR, p4view)
+
+ def CheckoutCrosstool(self):
+ p4client = self.p4client
+
+ return p4client.SetupAndDo(p4client.Sync(),
+ p4client.SaveCurrentCLNumber('CLNUM'),
+ p4client.Remove())
+
+ def BuildRelease(self, target):
+ clnum_path = os.path.join('$JOB_TMP', self.CHECKOUT_DIR, 'CLNUM')
+
+ toolchain_root = os.path.join('/google/data/rw/projects/toolchains', target,
+ 'unstable')
+ toolchain_path = os.path.join(toolchain_root, '${CLNUM}')
+
+ build_toolchain = cmd.Wrapper(
+ cmd.Chain(
+ cmd.MakeDir(toolchain_path),
+ cmd.Shell('buildit',
+ '--keep-work-dir',
+ '--build-type=release',
+ '--work-dir=%s' % self.buildit_work_dir_path,
+ '--results-dir=%s' % toolchain_path,
+ '--force-release=%s' % '${CLNUM}',
+ target,
+ path='.')),
+ cwd=self.buildit_path,
+ umask='0022',
+ env={'CLNUM': '$(< %s)' % clnum_path})
+
+ # remove all but 10 most recent directories
+ remove_old_toolchains_from_x20 = cmd.Wrapper(
+ cmd.Pipe(
+ cmd.Shell('ls', '-1', '-r'), cmd.Shell('sed', '-e', '1,10d'),
+ cmd.Shell('xargs', 'rm', '-r', '-f')),
+ cwd=toolchain_root)
+
+ return cmd.Chain(build_toolchain, remove_old_toolchains_from_x20)
+
+ def RunTests(self, target, board, component='gcc'):
+ dejagnu_flags = ['--outdir=%s' % self.dejagnu_output_path,
+ '--target_board=%s' % board]
+
+ # Look for {pandaboard,qemu}.exp files in
+ # //depot/google3/experimental/users/kbaclawski/dejagnu/boards
+
+ site_exp_file = os.path.join('/google/src/head/depot/google3',
+ 'experimental/users/kbaclawski',
+ 'dejagnu/site.exp')
+
+ build_dir_path = os.path.join(target, 'rpmbuild/BUILD/crosstool*-0.0',
+ 'build-%s' % component)
+
+ run_dejagnu = cmd.Wrapper(
+ cmd.Chain(
+ cmd.MakeDir(self.dejagnu_output_path),
+ cmd.Shell('make',
+ 'check',
+ '-k',
+ '-j $(grep -c processor /proc/cpuinfo)',
+ 'RUNTESTFLAGS="%s"' % ' '.join(dejagnu_flags),
+ 'DEJAGNU="%s"' % site_exp_file,
+ ignore_error=True)),
+ cwd=os.path.join(self.buildit_work_dir_path, build_dir_path),
+ env={'REMOTE_TMPDIR': 'job-$JOB_ID'})
+
+ save_results = cmd.Copy(self.dejagnu_output_path,
+ to_dir='$JOB_TMP/results',
+ recursive=True)
+
+ return cmd.Chain(run_dejagnu, save_results)
+
+ def GenerateReport(self, boards):
+ sumfiles = [os.path.join('$JOB_TMP', board, '*.sum') for board in boards]
+
+ return cmd.Wrapper(
+ cmd.Shell('dejagnu.sh',
+ 'report',
+ '-m',
+ '$JOB_TMP/manifests/*.xfail',
+ '-o',
+ '$JOB_TMP/results/report.html',
+ *sumfiles,
+ path='.'),
+ cwd='$HOME/automation/clients/report')
diff --git a/automation/clients/helper/jobs.py b/automation/clients/helper/jobs.py
new file mode 100644
index 00000000..96a1c408
--- /dev/null
+++ b/automation/clients/helper/jobs.py
@@ -0,0 +1,11 @@
+# Copyright 2010 Google Inc. All Rights Reserved.
+
+from automation.common import job
+from automation.common import machine
+
+
+def CreateLinuxJob(label, command, lock=False, timeout=4 * 60 * 60):
+ to_return = job.Job(label, command, timeout)
+ to_return.DependsOnMachine(machine.MachineSpecification(os='linux',
+ lock_required=lock))
+ return to_return
diff --git a/automation/clients/helper/perforce.py b/automation/clients/helper/perforce.py
new file mode 100644
index 00000000..1f2dfe79
--- /dev/null
+++ b/automation/clients/helper/perforce.py
@@ -0,0 +1,215 @@
+# Copyright 2011 Google Inc. All Rights Reserved.
+
+__author__ = 'kbaclawski@google.com (Krystian Baclawski)'
+
+import collections
+import os.path
+
+from automation.common import command as cmd
+
+
+class PathMapping(object):
+ """Stores information about relative path mapping (remote to local)."""
+
+ @classmethod
+ def ListFromPathDict(cls, prefix_path_dict):
+ """Takes {'prefix1': ['path1',...], ...} and returns a list of mappings."""
+
+ mappings = []
+
+ for prefix, paths in sorted(prefix_path_dict.items()):
+ for path in sorted(paths):
+ mappings.append(cls(os.path.join(prefix, path)))
+
+ return mappings
+
+ @classmethod
+ def ListFromPathTuples(cls, tuple_list):
+ """Takes a list of tuples and returns a list of mappings.
+
+ Args:
+ tuple_list: [('remote_path1', 'local_path1'), ...]
+
+ Returns:
+ a list of mapping objects
+ """
+ mappings = []
+ for remote_path, local_path in tuple_list:
+ mappings.append(cls(remote_path, local_path))
+
+ return mappings
+
+ def __init__(self, remote, local=None, common_suffix=None):
+ suffix = self._FixPath(common_suffix or '')
+
+ self.remote = os.path.join(remote, suffix)
+ self.local = os.path.join(local or remote, suffix)
+
+ @staticmethod
+ def _FixPath(path_s):
+ parts = [part for part in path_s.strip('/').split('/') if part]
+
+ if not parts:
+ return ''
+
+ return os.path.join(*parts)
+
+ def _GetRemote(self):
+ return self._remote
+
+ def _SetRemote(self, path_s):
+ self._remote = self._FixPath(path_s)
+
+ remote = property(_GetRemote, _SetRemote)
+
+ def _GetLocal(self):
+ return self._local
+
+ def _SetLocal(self, path_s):
+ self._local = self._FixPath(path_s)
+
+ local = property(_GetLocal, _SetLocal)
+
+ def GetAbsolute(self, depot, client):
+ return (os.path.join('//', depot, self.remote),
+ os.path.join('//', client, self.local))
+
+ def __str__(self):
+ return '%s(%s => %s)' % (self.__class__.__name__, self.remote, self.local)
+
+
+class View(collections.MutableSet):
+ """Keeps all information about local client required to work with perforce."""
+
+ def __init__(self, depot, mappings=None, client=None):
+ self.depot = depot
+
+ if client:
+ self.client = client
+
+ self._mappings = set(mappings or [])
+
+ @staticmethod
+ def _FixRoot(root_s):
+ parts = root_s.strip('/').split('/', 1)
+
+ if len(parts) != 1:
+ return None
+
+ return parts[0]
+
+ def _GetDepot(self):
+ return self._depot
+
+ def _SetDepot(self, depot_s):
+ depot = self._FixRoot(depot_s)
+ assert depot, 'Not a valid depot name: "%s".' % depot_s
+ self._depot = depot
+
+ depot = property(_GetDepot, _SetDepot)
+
+ def _GetClient(self):
+ return self._client
+
+ def _SetClient(self, client_s):
+ client = self._FixRoot(client_s)
+ assert client, 'Not a valid client name: "%s".' % client_s
+ self._client = client
+
+ client = property(_GetClient, _SetClient)
+
+ def add(self, mapping):
+ assert type(mapping) is PathMapping
+ self._mappings.add(mapping)
+
+ def discard(self, mapping):
+ assert type(mapping) is PathMapping
+ self._mappings.discard(mapping)
+
+ def __contains__(self, value):
+ return value in self._mappings
+
+ def __len__(self):
+ return len(self._mappings)
+
+ def __iter__(self):
+ return iter(mapping for mapping in self._mappings)
+
+ def AbsoluteMappings(self):
+ return iter(mapping.GetAbsolute(self.depot, self.client)
+ for mapping in self._mappings)
+
+
+class CommandsFactory(object):
+ """Creates shell commands used for interaction with Perforce."""
+
+ def __init__(self, checkout_dir, p4view, name=None, port=None):
+ self.port = port or 'perforce2:2666'
+ self.view = p4view
+ self.view.client = name or 'p4-automation-$HOSTNAME-$JOB_ID'
+ self.checkout_dir = checkout_dir
+ self.p4config_path = os.path.join(self.checkout_dir, '.p4config')
+
+ def Initialize(self):
+ return cmd.Chain('mkdir -p %s' % self.checkout_dir, 'cp ~/.p4config %s' %
+ self.checkout_dir, 'chmod u+w %s' % self.p4config_path,
+ 'echo "P4PORT=%s" >> %s' % (self.port, self.p4config_path),
+ 'echo "P4CLIENT=%s" >> %s' %
+ (self.view.client, self.p4config_path))
+
+ def Create(self):
+ # TODO(kbaclawski): Could we support value list for options consistently?
+ mappings = ['-a \"%s %s\"' % mapping
+ for mapping in self.view.AbsoluteMappings()]
+
+ # First command will create client with default mappings. Second one will
+ # replace default mapping with desired. Unfortunately, it seems that it
+ # cannot be done in one step. P4EDITOR is defined to /bin/true because we
+ # don't want "g4 client" to enter real editor and wait for user actions.
+ return cmd.Wrapper(
+ cmd.Chain(
+ cmd.Shell('g4', 'client'),
+ cmd.Shell('g4', 'client', '--replace', *mappings)),
+ env={'P4EDITOR': '/bin/true'})
+
+ def SaveSpecification(self, filename=None):
+ return cmd.Pipe(cmd.Shell('g4', 'client', '-o'), output=filename)
+
+ def Sync(self, revision=None):
+ sync_arg = '...'
+ if revision:
+ sync_arg = '%s@%s' % (sync_arg, revision)
+ return cmd.Shell('g4', 'sync', sync_arg)
+
+ def SaveCurrentCLNumber(self, filename=None):
+ return cmd.Pipe(
+ cmd.Shell('g4', 'changes', '-m1', '...#have'),
+ cmd.Shell('sed', '-E', '"s,Change ([0-9]+) .*,\\1,"'),
+ output=filename)
+
+ def Remove(self):
+ return cmd.Shell('g4', 'client', '-d', self.view.client)
+
+ def SetupAndDo(self, *commands):
+ return cmd.Chain(self.Initialize(),
+ self.InCheckoutDir(self.Create(), *commands))
+
+ def InCheckoutDir(self, *commands):
+ return cmd.Wrapper(cmd.Chain(*commands), cwd=self.checkout_dir)
+
+ def CheckoutFromSnapshot(self, snapshot):
+ cmds = cmd.Chain()
+
+ for mapping in self.view:
+ local_path, file_part = mapping.local.rsplit('/', 1)
+
+ if file_part == '...':
+ remote_dir = os.path.join(snapshot, local_path)
+ local_dir = os.path.join(self.checkout_dir, os.path.dirname(local_path))
+
+ cmds.extend([
+ cmd.Shell('mkdir', '-p', local_dir), cmd.Shell(
+ 'rsync', '-lr', remote_dir, local_dir)
+ ])
+
+ return cmds
diff --git a/automation/clients/nightly.py b/automation/clients/nightly.py
new file mode 100755
index 00000000..98e2b081
--- /dev/null
+++ b/automation/clients/nightly.py
@@ -0,0 +1,51 @@
+#!/usr/bin/python
+#
+# Copyright 2010 Google Inc. All Rights Reserved.
+
+import optparse
+import pickle
+import sys
+import xmlrpclib
+
+from automation.clients.helper import chromeos
+from automation.common import job_group
+
+
+def Main(argv):
+ parser = optparse.OptionParser()
+ parser.add_option('-c',
+ '--chromeos_version',
+ dest='chromeos_version',
+ default='quarterly',
+ help='ChromeOS version to use.')
+ parser.add_option('-t',
+ '--toolchain',
+ dest='toolchain',
+ default='latest-toolchain',
+ help='Toolchain to use {latest-toolchain,gcc_46}.')
+ parser.add_option('-b',
+ '--board',
+ dest='board',
+ default='x86-generic',
+ help='Board to use for the nightly job.')
+ options = parser.parse_args(argv)[0]
+
+ toolchain = options.toolchain
+ board = options.board
+ chromeos_version = options.chromeos_version
+
+ # Build toolchain
+ jobs_factory = chromeos.JobsFactory(chromeos_version=chromeos_version,
+ board=board,
+ toolchain=toolchain)
+ benchmark_job = jobs_factory.BuildAndBenchmark()
+
+ group_label = 'nightly_client_%s' % board
+ group = job_group.JobGroup(group_label, [benchmark_job], True, False)
+
+ server = xmlrpclib.Server('http://localhost:8000')
+ server.ExecuteJobGroup(pickle.dumps(group))
+
+
+if __name__ == '__main__':
+ Main(sys.argv)
diff --git a/automation/clients/output_test.py b/automation/clients/output_test.py
new file mode 100755
index 00000000..3126f050
--- /dev/null
+++ b/automation/clients/output_test.py
@@ -0,0 +1,29 @@
+#!/usr/bin/python
+#
+# Copyright 2010 Google Inc. All Rights Reserved.
+
+import os.path
+import pickle
+import sys
+import xmlrpclib
+
+from automation.common import job
+from automation.common import job_group
+from automation.common import machine
+
+
+def Main():
+ server = xmlrpclib.Server('http://localhost:8000')
+
+ command = os.path.join(
+ os.path.dirname(sys.argv[0]), '../../produce_output.py')
+
+ pwd_job = job.Job('pwd_job', command)
+ pwd_job.DependsOnMachine(machine.MachineSpecification(os='linux'))
+
+ group = job_group.JobGroup('pwd_client', [pwd_job])
+ server.ExecuteJobGroup(pickle.dumps(group))
+
+
+if __name__ == '__main__':
+ Main()
diff --git a/automation/clients/pwd_test.py b/automation/clients/pwd_test.py
new file mode 100755
index 00000000..a4b28552
--- /dev/null
+++ b/automation/clients/pwd_test.py
@@ -0,0 +1,27 @@
+#!/usr/bin/python
+#
+# Copyright 2010 Google Inc. All Rights Reserved.
+
+import pickle
+import xmlrpclib
+
+from automation.common import job
+from automation.common import job_group
+from automation.common import machine
+
+
+def Main():
+ server = xmlrpclib.Server('http://localhost:8000')
+
+ command = ['echo These following 3 lines should be the same', 'pwd', '$(pwd)',
+ 'echo ${PWD}']
+
+ pwd_job = job.Job('pwd_job', ' && '.join(command))
+ pwd_job.DependsOnMachine(machine.MachineSpecification(os='linux'))
+
+ group = job_group.JobGroup('pwd_client', [pwd_job])
+ server.ExecuteJobGroup(pickle.dumps(group))
+
+
+if __name__ == '__main__':
+ Main()
diff --git a/automation/clients/report/dejagnu.sh b/automation/clients/report/dejagnu.sh
new file mode 100755
index 00000000..fadd8a0c
--- /dev/null
+++ b/automation/clients/report/dejagnu.sh
@@ -0,0 +1,9 @@
+#!/bin/bash
+#
+# Copyright 2011 Google Inc. All Rights Reserved.
+# Author: kbaclawski@google.com (Krystian Baclawski)
+#
+
+export PYTHONPATH="$(pwd)"
+
+python dejagnu/main.py $@
diff --git a/automation/clients/report/dejagnu/__init__.py b/automation/clients/report/dejagnu/__init__.py
new file mode 100644
index 00000000..8b137891
--- /dev/null
+++ b/automation/clients/report/dejagnu/__init__.py
@@ -0,0 +1 @@
+
diff --git a/automation/clients/report/dejagnu/main.py b/automation/clients/report/dejagnu/main.py
new file mode 100644
index 00000000..62f095e1
--- /dev/null
+++ b/automation/clients/report/dejagnu/main.py
@@ -0,0 +1,137 @@
+# Copyright 2011 Google Inc. All Rights Reserved.
+# Author: kbaclawski@google.com (Krystian Baclawski)
+#
+
+from contextlib import contextmanager
+import glob
+from itertools import chain
+import logging
+import optparse
+import os.path
+import sys
+
+from manifest import Manifest
+import report
+from summary import DejaGnuTestRun
+
+
+def ExpandGlobExprList(paths):
+ """Returns an iterator that goes over expanded glob paths."""
+ return chain.from_iterable(map(glob.glob, paths))
+
+
+@contextmanager
+def OptionChecker(parser):
+ """Provides scoped environment for command line option checking."""
+ try:
+ yield
+ except SystemExit as ex:
+ parser.print_help()
+ print ''
+ sys.exit('ERROR: %s' % str(ex))
+
+
+def ManifestCommand(argv):
+ parser = optparse.OptionParser(
+ description=
+ ('Read in one or more DejaGNU summary files (.sum), parse their '
+ 'content and generate manifest files. Manifest files store a list '
+ 'of failed tests that should be ignored. Generated files are '
+ 'stored in current directory under following name: '
+ '${tool}-${board}.xfail (e.g. "gcc-unix.xfail").'),
+ usage='Usage: %prog manifest [file.sum] (file2.sum ...)')
+
+ _, args = parser.parse_args(argv[2:])
+
+ with OptionChecker(parser):
+ if not args:
+ sys.exit('At least one *.sum file required.')
+
+ for filename in chain.from_iterable(map(glob.glob, args)):
+ test_run = DejaGnuTestRun.FromFile(filename)
+
+ manifest = Manifest.FromDejaGnuTestRun(test_run)
+ manifest_filename = '%s-%s.xfail' % (test_run.tool, test_run.board)
+
+ with open(manifest_filename, 'w') as manifest_file:
+ manifest_file.write(manifest.Generate())
+
+ logging.info('Wrote manifest to "%s" file.', manifest_filename)
+
+
+def ReportCommand(argv):
+ parser = optparse.OptionParser(
+ description=
+ ('Read in one or more DejaGNU summary files (.sum), parse their '
+ 'content and generate a single report file in selected format '
+ '(currently only HTML).'),
+ usage=('Usage: %prog report (-m manifest.xfail) [-o report.html] '
+ '[file.sum (file2.sum ...)'))
+ parser.add_option(
+ '-o',
+ dest='output',
+ type='string',
+ default=None,
+ help=('Suppress failures for test listed in provided manifest files. '
+ '(use -m for each manifest file you want to read)'))
+ parser.add_option(
+ '-m',
+ dest='manifests',
+ type='string',
+ action='append',
+ default=None,
+ help=('Suppress failures for test listed in provided manifest files. '
+ '(use -m for each manifest file you want to read)'))
+
+ opts, args = parser.parse_args(argv[2:])
+
+ with OptionChecker(parser):
+ if not args:
+ sys.exit('At least one *.sum file required.')
+
+ if not opts.output:
+ sys.exit('Please provide name for report file.')
+
+ manifests = []
+
+ for filename in ExpandGlobExprList(opts.manifests or []):
+ logging.info('Using "%s" manifest.', filename)
+ manifests.append(Manifest.FromFile(filename))
+
+ test_runs = [DejaGnuTestRun.FromFile(filename)
+ for filename in chain.from_iterable(map(glob.glob, args))]
+
+ html = report.Generate(test_runs, manifests)
+
+ if html:
+ with open(opts.output, 'w') as html_file:
+ html_file.write(html)
+ logging.info('Wrote report to "%s" file.', opts.output)
+ else:
+ sys.exit(1)
+
+
+def HelpCommand(argv):
+ sys.exit('\n'.join([
+ 'Usage: %s command [options]' % os.path.basename(argv[
+ 0]), '', 'Commands:',
+ ' manifest - manage files containing a list of suppressed test failures',
+ ' report - generate report file for selected test runs'
+ ]))
+
+
+def Main(argv):
+ try:
+ cmd_name = argv[1]
+ except IndexError:
+ cmd_name = None
+
+ cmd_map = {'manifest': ManifestCommand, 'report': ReportCommand}
+ cmd_map.get(cmd_name, HelpCommand)(argv)
+
+
+if __name__ == '__main__':
+ FORMAT = '%(asctime)-15s %(levelname)s %(message)s'
+ logging.basicConfig(format=FORMAT, level=logging.INFO)
+
+ Main(sys.argv)
diff --git a/automation/clients/report/dejagnu/manifest.py b/automation/clients/report/dejagnu/manifest.py
new file mode 100644
index 00000000..5831d1b0
--- /dev/null
+++ b/automation/clients/report/dejagnu/manifest.py
@@ -0,0 +1,103 @@
+# Copyright 2011 Google Inc. All Rights Reserved.
+# Author: kbaclawski@google.com (Krystian Baclawski)
+#
+
+__author__ = 'kbaclawski@google.com (Krystian Baclawski)'
+
+from collections import namedtuple
+from cStringIO import StringIO
+import logging
+
+from summary import DejaGnuTestResult
+
+
+class Manifest(namedtuple('Manifest', 'tool board results')):
+ """Stores a list of unsuccessful tests.
+
+ Any line that starts with '#@' marker carries auxiliary data in form of a
+ key-value pair, for example:
+
+ #@ tool: *
+ #@ board: unix
+
+ So far tool and board parameters are recognized. Their value can contain
+ arbitrary glob expression. Based on aforementioned parameters given manifest
+ will be applied for all test results, but only in selected test runs. Note
+ that all parameters are optional. Their default value is '*' (i.e. for all
+ tools/boards).
+
+ The meaning of lines above is as follows: corresponding test results to follow
+ should only be suppressed if test run was performed on "unix" board.
+
+ The summary line used to build the test result should have this format:
+
+ attrlist | UNRESOLVED: gcc.dg/unroll_1.c (test for excess errors)
+ ^^^^^^^^ ^^^^^^^^^^ ^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^
+ optional result name variant
+ attributes
+ """
+ SUPPRESSIBLE_RESULTS = ['FAIL', 'UNRESOLVED', 'XPASS', 'ERROR']
+
+ @classmethod
+ def FromDejaGnuTestRun(cls, test_run):
+ results = [result
+ for result in test_run.results
+ if result.result in cls.SUPPRESSIBLE_RESULTS]
+
+ return cls(test_run.tool, test_run.board, results)
+
+ @classmethod
+ def FromFile(cls, filename):
+ """Creates manifest instance from a file in format described above."""
+ params = {}
+ results = []
+
+ with open(filename, 'r') as manifest_file:
+ for line in manifest_file:
+ if line.startswith('#@'):
+ # parse a line with a parameter
+ try:
+ key, value = line[2:].split(':', 1)
+ except ValueError:
+ logging.warning('Malformed parameter line: "%s".', line)
+ else:
+ params[key.strip()] = value.strip()
+ else:
+ # remove comment
+ try:
+ line, _ = line.split('#', 1)
+ except ValueError:
+ pass
+
+ line = line.strip()
+
+ if line:
+ # parse a line with a test result
+ result = DejaGnuTestResult.FromLine(line)
+
+ if result:
+ results.append(result)
+ else:
+ logging.warning('Malformed test result line: "%s".', line)
+
+ tool = params.get('tool', '*')
+ board = params.get('board', '*')
+
+ return cls(tool, board, results)
+
+ def Generate(self):
+ """Dumps manifest to string."""
+ text = StringIO()
+
+ for name in ['tool', 'board']:
+ text.write('#@ {0}: {1}\n'.format(name, getattr(self, name)))
+
+ text.write('\n')
+
+ for result in sorted(self.results, key=lambda r: r.result):
+ text.write('{0}\n'.format(result))
+
+ return text.getvalue()
+
+ def __iter__(self):
+ return iter(self.results)
diff --git a/automation/clients/report/dejagnu/report.html b/automation/clients/report/dejagnu/report.html
new file mode 100644
index 00000000..39b39e09
--- /dev/null
+++ b/automation/clients/report/dejagnu/report.html
@@ -0,0 +1,94 @@
+<link type="text/css" rel="Stylesheet"
+href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.16/themes/ui-lightness/jquery-ui.css"/>
+
+<script type="text/javascript" src="https://www.google.com/jsapi"></script>
+<script type="text/javascript">
+ google.load("visualization", "1.1", {packages: ["corechart", "table"]});
+ google.load("jquery", "1.6.2");
+ google.load("jqueryui", "1.8.16");
+
+ function drawChart(name, label, table) {
+ var data = google.visualization.arrayToDataTable(table);
+ var chart = new google.visualization.PieChart(
+ document.getElementById(name));
+
+ chart.draw(data,
+ {title: label, pieSliceText: "value", width: 800, height: 400});
+ }
+
+ function drawTable(name, table) {
+ var data = google.visualization.arrayToDataTable(table);
+ var table = new google.visualization.Table(
+ document.getElementById(name));
+
+ table.draw(data, {
+ showRowNumber: false, allowHtml: true, sortColumn: 0});
+ }
+
+ google.setOnLoadCallback(function () {
+ $( "#testruns" ).tabs();
+
+ {% for test_run in test_runs %}
+ $( "#testrun{{ test_run.id }}" ).tabs();
+
+ {% for result_type, group in test_run.groups.items %}
+ $( "#testrun{{ test_run.id }}-{{ result_type }}-tables" ).accordion({
+ autoHeight: false, collapsible: true, active: false });
+
+ drawChart(
+ "testrun{{ test_run.id }}-{{ result_type }}-chart",
+ "DejaGNU test {{ result_type }} summary for {{ test_run.name }}",
+ [
+ ["Result", "Count"],
+ {% for result, count in group.summary %}
+ ["{{ result }}", {{ count }}],{% endfor %}
+ ]);
+
+ {% for description, test_list in group.tests %}
+ {% if test_list %}
+ drawTable(
+ "testrun{{ test_run.id }}-{{ result_type }}-table-{{ forloop.counter }}",
+ [
+ ["Test", "Variant"],
+ {% for test, variant in test_list %}
+ ["{{ test }}", "{{ variant }}"],{% endfor %}
+ ]);
+ {% endif %}
+ {% endfor %}
+ {% endfor %}
+ {% endfor %}
+ });
+</script>
+
+<div id="testruns">
+ <ul>
+ {% for test_run in test_runs %}
+ <li><a href="#testrun{{ test_run.id }}">{{ test_run.name }}</a></li>
+ {% endfor %}
+ </ul>
+
+ {% for test_run in test_runs %}
+ <div id="testrun{{ test_run.id }}" style="padding: 0px">
+ <ul>
+ {% for result_type, group in test_run.groups.items %}
+ <li>
+ <a href="#testrun{{ test_run.id }}-{{ forloop.counter }}">{{ result_type }}</a>
+ </li>
+ {% endfor %}
+ </ul>
+ {% for result_type, group in test_run.groups.items %}
+ <div id="testrun{{ test_run.id }}-{{ forloop.counter }}">
+ <div id="testrun{{ test_run.id }}-{{ result_type }}-chart" style="text-align: center"></div>
+ <div id="testrun{{ test_run.id }}-{{ result_type }}-tables">
+ {% for description, test_list in group.tests %}
+ {% if test_list %}
+ <h3><a href="#">{{ description }}</a></h3>
+ <div id="testrun{{ test_run.id }}-{{ result_type }}-table-{{ forloop.counter }}"></div>
+ {% endif %}
+ {% endfor %}
+ </div>
+ </div>
+ {% endfor %}
+ </div>
+{% endfor %}
+</div>
diff --git a/automation/clients/report/dejagnu/report.py b/automation/clients/report/dejagnu/report.py
new file mode 100644
index 00000000..191a5389
--- /dev/null
+++ b/automation/clients/report/dejagnu/report.py
@@ -0,0 +1,115 @@
+# Copyright 2011 Google Inc. All Rights Reserved.
+# Author: kbaclawski@google.com (Krystian Baclawski)
+#
+
+import logging
+import os.path
+
+RESULT_DESCRIPTION = {
+ 'ERROR': 'DejaGNU errors',
+ 'FAIL': 'Failed tests',
+ 'NOTE': 'DejaGNU notices',
+ 'PASS': 'Passed tests',
+ 'UNRESOLVED': 'Unresolved tests',
+ 'UNSUPPORTED': 'Unsupported tests',
+ 'UNTESTED': 'Not executed tests',
+ 'WARNING': 'DejaGNU warnings',
+ 'XFAIL': 'Expected test failures',
+ 'XPASS': 'Unexpectedly passed tests'
+}
+
+RESULT_GROUPS = {
+ 'Successes': ['PASS', 'XFAIL'],
+ 'Failures': ['FAIL', 'XPASS', 'UNRESOLVED'],
+ 'Suppressed': ['!FAIL', '!XPASS', '!UNRESOLVED', '!ERROR'],
+ 'Framework': ['UNTESTED', 'UNSUPPORTED', 'ERROR', 'WARNING', 'NOTE']
+}
+
+ROOT_PATH = os.path.dirname(os.path.abspath(__file__))
+
+
+def _GetResultDescription(name):
+ if name.startswith('!'):
+ name = name[1:]
+
+ try:
+ return RESULT_DESCRIPTION[name]
+ except KeyError:
+ raise ValueError('Unknown result: "%s"' % name)
+
+
+def _PrepareSummary(res_types, summary):
+
+ def GetResultCount(res_type):
+ return summary.get(res_type, 0)
+
+ return [(_GetResultDescription(rt), GetResultCount(rt)) for rt in res_types]
+
+
+def _PrepareTestList(res_types, tests):
+
+ def GetTestsByResult(res_type):
+ return [(test.name, test.variant or '')
+ for test in sorted(tests) if test.result == res_type]
+
+ return [(_GetResultDescription(rt), GetTestsByResult(rt))
+ for rt in res_types if rt != 'PASS']
+
+
+def Generate(test_runs, manifests):
+ """Generate HTML report from provided test runs.
+
+ Args:
+ test_runs: DejaGnuTestRun objects list.
+ manifests: Manifest object list that will drive test result suppression.
+
+ Returns:
+ String to which the HTML report was rendered.
+ """
+ tmpl_args = []
+
+ for test_run_id, test_run in enumerate(test_runs):
+ logging.info('Generating report for: %s.', test_run)
+
+ test_run.CleanUpTestResults()
+ test_run.SuppressTestResults(manifests)
+
+ # Generate summary and test list for each result group
+ groups = {}
+
+ for res_group, res_types in RESULT_GROUPS.items():
+ summary_all = _PrepareSummary(res_types, test_run.summary)
+ tests_all = _PrepareTestList(res_types, test_run.results)
+
+ has_2nd = lambda tuple2: bool(tuple2[1])
+ summary = filter(has_2nd, summary_all)
+ tests = filter(has_2nd, tests_all)
+
+ if summary or tests:
+ groups[res_group] = {'summary': summary, 'tests': tests}
+
+ tmpl_args.append({
+ 'id': test_run_id,
+ 'name': '%s @%s' % (test_run.tool, test_run.board),
+ 'groups': groups
+ })
+
+ logging.info('Rendering report in HTML format.')
+
+ try:
+ from django import template
+ from django.template import loader
+ from django.conf import settings
+ except ImportError:
+ logging.error('Django framework not installed!')
+ logging.error('Failed to generate report in HTML format!')
+ return ''
+
+ settings.configure(DEBUG=True,
+ TEMPLATE_DEBUG=True,
+ TEMPLATE_DIRS=(ROOT_PATH,))
+
+ tmpl = loader.get_template('report.html')
+ ctx = template.Context({'test_runs': tmpl_args})
+
+ return tmpl.render(ctx)
diff --git a/automation/clients/report/dejagnu/summary.py b/automation/clients/report/dejagnu/summary.py
new file mode 100644
index 00000000..d573c691
--- /dev/null
+++ b/automation/clients/report/dejagnu/summary.py
@@ -0,0 +1,262 @@
+# Copyright 2011 Google Inc. All Rights Reserved.
+# Author: kbaclawski@google.com (Krystian Baclawski)
+#
+
+from collections import defaultdict
+from collections import namedtuple
+from datetime import datetime
+from fnmatch import fnmatch
+from itertools import groupby
+import logging
+import os.path
+import re
+
+
+class DejaGnuTestResult(namedtuple('Result', 'name variant result flaky')):
+ """Stores the result of a single test case."""
+
+ # avoid adding __dict__ to the class
+ __slots__ = ()
+
+ LINE_RE = re.compile(r'([A-Z]+):\s+([\w/+.-]+)(.*)')
+
+ @classmethod
+ def FromLine(cls, line):
+ """Alternate constructor which takes a string and parses it."""
+ try:
+ attrs, line = line.split('|', 1)
+
+ if attrs.strip() != 'flaky':
+ return None
+
+ line = line.strip()
+ flaky = True
+ except ValueError:
+ flaky = False
+
+ fields = cls.LINE_RE.match(line.strip())
+
+ if fields:
+ result, path, variant = fields.groups()
+
+ # some of the tests are generated in build dir and are issued from there,
+ # because every test run is performed in randomly named tmp directory we
+ # need to remove random part
+ try:
+ # assume that 2nd field is a test path
+ path_parts = path.split('/')
+
+ index = path_parts.index('testsuite')
+ path = '/'.join(path_parts[index + 1:])
+ except ValueError:
+ path = '/'.join(path_parts)
+
+ # Remove junk from test description.
+ variant = variant.strip(', ')
+
+ substitutions = [
+ # remove include paths - they contain name of tmp directory
+ ('-I\S+', ''),
+ # compress white spaces
+ ('\s+', ' ')
+ ]
+
+ for pattern, replacement in substitutions:
+ variant = re.sub(pattern, replacement, variant)
+
+ # Some tests separate last component of path by space, so actual filename
+ # ends up in description instead of path part. Correct that.
+ try:
+ first, rest = variant.split(' ', 1)
+ except ValueError:
+ pass
+ else:
+ if first.endswith('.o'):
+ path = os.path.join(path, first)
+ variant = rest
+
+ # DejaGNU framework errors don't contain path part at all, so description
+ # part has to be reconstructed.
+ if not any(os.path.basename(path).endswith('.%s' % suffix)
+ for suffix in ['h', 'c', 'C', 'S', 'H', 'cc', 'i', 'o']):
+ variant = '%s %s' % (path, variant)
+ path = ''
+
+ # Some tests are picked up from current directory (presumably DejaGNU
+ # generates some test files). Remove the prefix for these files.
+ if path.startswith('./'):
+ path = path[2:]
+
+ return cls(path, variant or '', result, flaky=flaky)
+
+ def __str__(self):
+ """Returns string representation of a test result."""
+ if self.flaky:
+ fmt = 'flaky | '
+ else:
+ fmt = ''
+ fmt += '{2}: {0}'
+ if self.variant:
+ fmt += ' {1}'
+ return fmt.format(*self)
+
+
+class DejaGnuTestRun(object):
+ """Container for test results that were a part of single test run.
+
+ The class stores also metadata related to the test run.
+
+ Attributes:
+ board: Name of DejaGNU board, which was used to run the tests.
+ date: The date when the test run was started.
+ target: Target triple.
+ host: Host triple.
+ tool: The tool that was tested (e.g. gcc, binutils, g++, etc.)
+ results: a list of DejaGnuTestResult objects.
+ """
+
+ __slots__ = ('board', 'date', 'target', 'host', 'tool', 'results')
+
+ def __init__(self, **kwargs):
+ assert all(name in self.__slots__ for name in kwargs)
+
+ self.results = set()
+ self.date = kwargs.get('date', datetime.now())
+
+ for name in ('board', 'target', 'tool', 'host'):
+ setattr(self, name, kwargs.get(name, 'unknown'))
+
+ @classmethod
+ def FromFile(cls, filename):
+ """Alternate constructor - reads a DejaGNU output file."""
+ test_run = cls()
+ test_run.FromDejaGnuOutput(filename)
+ test_run.CleanUpTestResults()
+ return test_run
+
+ @property
+ def summary(self):
+ """Returns a summary as {ResultType -> Count} dictionary."""
+ summary = defaultdict(int)
+
+ for r in self.results:
+ summary[r.result] += 1
+
+ return summary
+
+ def _ParseBoard(self, fields):
+ self.board = fields.group(1).strip()
+
+ def _ParseDate(self, fields):
+ self.date = datetime.strptime(fields.group(2).strip(), '%a %b %d %X %Y')
+
+ def _ParseTarget(self, fields):
+ self.target = fields.group(2).strip()
+
+ def _ParseHost(self, fields):
+ self.host = fields.group(2).strip()
+
+ def _ParseTool(self, fields):
+ self.tool = fields.group(1).strip()
+
+ def FromDejaGnuOutput(self, filename):
+ """Read in and parse DejaGNU output file."""
+
+ logging.info('Reading "%s" DejaGNU output file.', filename)
+
+ with open(filename, 'r') as report:
+ lines = [line.strip() for line in report.readlines() if line.strip()]
+
+ parsers = ((re.compile(r'Running target (.*)'), self._ParseBoard),
+ (re.compile(r'Test Run By (.*) on (.*)'), self._ParseDate),
+ (re.compile(r'=== (.*) tests ==='), self._ParseTool),
+ (re.compile(r'Target(\s+)is (.*)'), self._ParseTarget),
+ (re.compile(r'Host(\s+)is (.*)'), self._ParseHost))
+
+ for line in lines:
+ result = DejaGnuTestResult.FromLine(line)
+
+ if result:
+ self.results.add(result)
+ else:
+ for regexp, parser in parsers:
+ fields = regexp.match(line)
+ if fields:
+ parser(fields)
+ break
+
+ logging.debug('DejaGNU output file parsed successfully.')
+ logging.debug(self)
+
+ def CleanUpTestResults(self):
+ """Remove certain test results considered to be spurious.
+
+ 1) Large number of test reported as UNSUPPORTED are also marked as
+ UNRESOLVED. If that's the case remove latter result.
+ 2) If a test is performed on compiler output and for some reason compiler
+ fails, we don't want to report all failures that depend on the former.
+ """
+ name_key = lambda v: v.name
+ results_by_name = sorted(self.results, key=name_key)
+
+ for name, res_iter in groupby(results_by_name, key=name_key):
+ results = set(res_iter)
+
+ # If DejaGnu was unable to compile a test it will create following result:
+ failed = DejaGnuTestResult(name, '(test for excess errors)', 'FAIL',
+ False)
+
+ # If a test compilation failed, remove all results that are dependent.
+ if failed in results:
+ dependants = set(filter(lambda r: r.result != 'FAIL', results))
+
+ self.results -= dependants
+
+ for res in dependants:
+ logging.info('Removed {%s} dependance.', res)
+
+ # Remove all UNRESOLVED results that were also marked as UNSUPPORTED.
+ unresolved = [res._replace(result='UNRESOLVED')
+ for res in results if res.result == 'UNSUPPORTED']
+
+ for res in unresolved:
+ if res in self.results:
+ self.results.remove(res)
+ logging.info('Removed {%s} duplicate.', res)
+
+ def _IsApplicable(self, manifest):
+ """Checks if test results need to be reconsidered based on the manifest."""
+ check_list = [(self.tool, manifest.tool), (self.board, manifest.board)]
+
+ return all(fnmatch(text, pattern) for text, pattern in check_list)
+
+ def SuppressTestResults(self, manifests):
+ """Suppresses all test results listed in manifests."""
+
+ # Get a set of tests results that are going to be suppressed if they fail.
+ manifest_results = set()
+
+ for manifest in filter(self._IsApplicable, manifests):
+ manifest_results |= set(manifest.results)
+
+ suppressed_results = self.results & manifest_results
+
+ for result in sorted(suppressed_results):
+ logging.debug('Result suppressed for {%s}.', result)
+
+ new_result = '!' + result.result
+
+ # Mark result suppression as applied.
+ manifest_results.remove(result)
+
+ # Rewrite test result.
+ self.results.remove(result)
+ self.results.add(result._replace(result=new_result))
+
+ for result in sorted(manifest_results):
+ logging.warning('Result {%s} listed in manifest but not suppressed.',
+ result)
+
+ def __str__(self):
+ return '{0}, {1} @{2} on {3}'.format(self.target, self.tool, self.board,
+ self.date)
diff --git a/automation/clients/report/validate_failures.py b/automation/clients/report/validate_failures.py
new file mode 100755
index 00000000..5db356d1
--- /dev/null
+++ b/automation/clients/report/validate_failures.py
@@ -0,0 +1,239 @@
+#!/usr/bin/python
+
+# Script to compare testsuite failures against a list of known-to-fail
+# tests.
+
+# Contributed by Diego Novillo <dnovillo@google.com>
+# Overhaul by Krystian Baclawski <kbaclawski@google.com>
+#
+# Copyright (C) 2011 Free Software Foundation, Inc.
+#
+# This file is part of GCC.
+#
+# GCC 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.
+#
+# GCC 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 GCC; see the file COPYING. If not, write to
+# the Free Software Foundation, 51 Franklin Street, Fifth Floor,
+# Boston, MA 02110-1301, USA.
+"""This script provides a coarser XFAILing mechanism that requires no
+detailed DejaGNU markings. This is useful in a variety of scenarios:
+
+- Development branches with many known failures waiting to be fixed.
+- Release branches with known failures that are not considered
+ important for the particular release criteria used in that branch.
+
+The script must be executed from the toplevel build directory. When
+executed it will:
+
+1) Determine the target built: TARGET
+2) Determine the source directory: SRCDIR
+3) Look for a failure manifest file in
+ <SRCDIR>/contrib/testsuite-management/<TARGET>.xfail
+4) Collect all the <tool>.sum files from the build tree.
+5) Produce a report stating:
+ a) Failures expected in the manifest but not present in the build.
+ b) Failures in the build not expected in the manifest.
+6) If all the build failures are expected in the manifest, it exits
+ with exit code 0. Otherwise, it exits with error code 1.
+"""
+
+import optparse
+import logging
+import os
+import sys
+
+sys.path.append(os.path.dirname(os.path.abspath(__file__)))
+
+from dejagnu.manifest import Manifest
+from dejagnu.summary import DejaGnuTestResult
+from dejagnu.summary import DejaGnuTestRun
+
+# Pattern for naming manifest files. The first argument should be
+# the toplevel GCC source directory. The second argument is the
+# target triple used during the build.
+_MANIFEST_PATH_PATTERN = '%s/contrib/testsuite-management/%s.xfail'
+
+
+def GetMakefileVars(makefile_path):
+ assert os.path.exists(makefile_path)
+
+ with open(makefile_path) as lines:
+ kvs = [line.split('=', 1) for line in lines if '=' in line]
+
+ return dict((k.strip(), v.strip()) for k, v in kvs)
+
+
+def GetSumFiles(build_dir):
+ summaries = []
+
+ for root, _, filenames in os.walk(build_dir):
+ summaries.extend([os.path.join(root, filename)
+ for filename in filenames if filename.endswith('.sum')])
+
+ return map(os.path.normpath, summaries)
+
+
+def ValidBuildDirectory(build_dir, target):
+ mandatory_paths = [build_dir, os.path.join(build_dir, 'Makefile')]
+
+ extra_paths = [os.path.join(build_dir, target),
+ os.path.join(build_dir, 'build-%s' % target)]
+
+ return (all(map(os.path.exists, mandatory_paths)) and
+ any(map(os.path.exists, extra_paths)))
+
+
+def GetManifestPath(build_dir):
+ makefile = GetMakefileVars(os.path.join(build_dir, 'Makefile'))
+ srcdir = makefile['srcdir']
+ target = makefile['target']
+
+ if not ValidBuildDirectory(build_dir, target):
+ target = makefile['target_alias']
+
+ if not ValidBuildDirectory(build_dir, target):
+ logging.error('%s is not a valid GCC top level build directory.', build_dir)
+ sys.exit(1)
+
+ logging.info('Discovered source directory: "%s"', srcdir)
+ logging.info('Discovered build target: "%s"', target)
+
+ return _MANIFEST_PATH_PATTERN % (srcdir, target)
+
+
+def CompareResults(manifest, actual):
+ """Compare sets of results and return two lists:
+ - List of results present in MANIFEST but missing from ACTUAL.
+ - List of results present in ACTUAL but missing from MANIFEST.
+ """
+ # Report all the actual results not present in the manifest.
+ actual_vs_manifest = actual - manifest
+
+ # Filter out tests marked flaky.
+ manifest_without_flaky_tests = set(filter(lambda result: not result.flaky,
+ manifest))
+
+ # Simlarly for all the tests in the manifest.
+ manifest_vs_actual = manifest_without_flaky_tests - actual
+
+ return actual_vs_manifest, manifest_vs_actual
+
+
+def LogResults(level, results):
+ log_fun = getattr(logging, level)
+
+ for num, result in enumerate(sorted(results), start=1):
+ log_fun(' %d) %s', num, result)
+
+
+def CheckExpectedResults(manifest_path, build_dir):
+ logging.info('Reading manifest file: "%s"', manifest_path)
+
+ manifest = set(Manifest.FromFile(manifest_path))
+
+ logging.info('Getting actual results from build directory: "%s"',
+ os.path.realpath(build_dir))
+
+ summaries = GetSumFiles(build_dir)
+
+ actual = set()
+
+ for summary in summaries:
+ test_run = DejaGnuTestRun.FromFile(summary)
+ failures = set(Manifest.FromDejaGnuTestRun(test_run))
+ actual.update(failures)
+
+ if manifest:
+ logging.debug('Tests expected to fail:')
+ LogResults('debug', manifest)
+
+ if actual:
+ logging.debug('Actual test failures:')
+ LogResults('debug', actual)
+
+ actual_vs_manifest, manifest_vs_actual = CompareResults(manifest, actual)
+
+ if actual_vs_manifest:
+ logging.info('Build results not in the manifest:')
+ LogResults('info', actual_vs_manifest)
+
+ if manifest_vs_actual:
+ logging.info('Manifest results not present in the build:')
+ LogResults('info', manifest_vs_actual)
+ logging.info('NOTE: This is not a failure! ',
+ 'It just means that the manifest expected these tests to '
+ 'fail, but they worked in this configuration.')
+
+ if actual_vs_manifest or manifest_vs_actual:
+ sys.exit(1)
+
+ logging.info('No unexpected failures.')
+
+
+def ProduceManifest(manifest_path, build_dir, overwrite):
+ if os.path.exists(manifest_path) and not overwrite:
+ logging.error('Manifest file "%s" already exists.', manifest_path)
+ logging.error('Use --force to overwrite.')
+ sys.exit(1)
+
+ testruns = map(DejaGnuTestRun.FromFile, GetSumFiles(build_dir))
+ manifests = map(Manifest.FromDejaGnuTestRun, testruns)
+
+ with open(manifest_path, 'w') as manifest_file:
+ manifest_strings = [manifest.Generate() for manifest in manifests]
+ logging.info('Writing manifest to "%s".', manifest_path)
+ manifest_file.write('\n'.join(manifest_strings))
+
+
+def Main(argv):
+ parser = optparse.OptionParser(usage=__doc__)
+ parser.add_option(
+ '-b',
+ '--build_dir',
+ dest='build_dir',
+ action='store',
+ metavar='PATH',
+ default=os.getcwd(),
+ help='Build directory to check. (default: current directory)')
+ parser.add_option('-m',
+ '--manifest',
+ dest='manifest',
+ action='store_true',
+ help='Produce the manifest for the current build.')
+ parser.add_option(
+ '-f',
+ '--force',
+ dest='force',
+ action='store_true',
+ help=('Overwrite an existing manifest file, if user requested creating '
+ 'new one. (default: False)'))
+ parser.add_option('-v',
+ '--verbose',
+ dest='verbose',
+ action='store_true',
+ help='Increase verbosity.')
+ options, _ = parser.parse_args(argv[1:])
+
+ if options.verbose:
+ logging.root.setLevel(logging.DEBUG)
+
+ manifest_path = GetManifestPath(options.build_dir)
+
+ if options.manifest:
+ ProduceManifest(manifest_path, options.build_dir, options.force)
+ else:
+ CheckExpectedResults(manifest_path, options.build_dir)
+
+
+if __name__ == '__main__':
+ logging.basicConfig(format='%(levelname)s: %(message)s', level=logging.INFO)
+ Main(sys.argv)
diff --git a/automation/common/__init__.py b/automation/common/__init__.py
new file mode 100644
index 00000000..8b137891
--- /dev/null
+++ b/automation/common/__init__.py
@@ -0,0 +1 @@
+
diff --git a/automation/common/command.py b/automation/common/command.py
new file mode 100644
index 00000000..c56e9fad
--- /dev/null
+++ b/automation/common/command.py
@@ -0,0 +1,241 @@
+# Copyright 2011 Google Inc. All Rights Reserved.
+
+__author__ = 'kbaclawski@google.com (Krystian Baclawski)'
+
+import abc
+import collections
+import os.path
+
+
+class Shell(object):
+ """Class used to build a string representation of a shell command."""
+
+ def __init__(self, cmd, *args, **kwargs):
+ assert all(key in ['path', 'ignore_error'] for key in kwargs)
+
+ self._cmd = cmd
+ self._args = list(args)
+ self._path = kwargs.get('path', '')
+ self._ignore_error = bool(kwargs.get('ignore_error', False))
+
+ def __str__(self):
+ cmdline = [os.path.join(self._path, self._cmd)]
+ cmdline.extend(self._args)
+
+ cmd = ' '.join(cmdline)
+
+ if self._ignore_error:
+ cmd = '{ %s; true; }' % cmd
+
+ return cmd
+
+ def AddOption(self, option):
+ self._args.append(option)
+
+
+class Wrapper(object):
+ """Wraps a command with environment which gets cleaned up after execution."""
+
+ _counter = 1
+
+ def __init__(self, command, cwd=None, env=None, umask=None):
+ # @param cwd: temporary working directory
+ # @param env: dictionary of environment variables
+ self._command = command
+ self._prefix = Chain()
+ self._suffix = Chain()
+
+ if cwd:
+ self._prefix.append(Shell('pushd', cwd))
+ self._suffix.insert(0, Shell('popd'))
+
+ if env:
+ for env_var, value in env.items():
+ self._prefix.append(Shell('%s=%s' % (env_var, value)))
+ self._suffix.insert(0, Shell('unset', env_var))
+
+ if umask:
+ umask_save_var = 'OLD_UMASK_%d' % self.counter
+
+ self._prefix.append(Shell('%s=$(umask)' % umask_save_var))
+ self._prefix.append(Shell('umask', umask))
+ self._suffix.insert(0, Shell('umask', '$%s' % umask_save_var))
+
+ @property
+ def counter(self):
+ counter = self._counter
+ self._counter += 1
+ return counter
+
+ def __str__(self):
+ return str(Chain(self._prefix, self._command, self._suffix))
+
+
+class AbstractCommandContainer(collections.MutableSequence):
+ """Common base for all classes that behave like command container."""
+
+ def __init__(self, *commands):
+ self._commands = list(commands)
+
+ def __contains__(self, command):
+ return command in self._commands
+
+ def __iter__(self):
+ return iter(self._commands)
+
+ def __len__(self):
+ return len(self._commands)
+
+ def __getitem__(self, index):
+ return self._commands[index]
+
+ def __setitem__(self, index, command):
+ self._commands[index] = self._ValidateCommandType(command)
+
+ def __delitem__(self, index):
+ del self._commands[index]
+
+ def insert(self, index, command):
+ self._commands.insert(index, self._ValidateCommandType(command))
+
+ @abc.abstractmethod
+ def __str__(self):
+ pass
+
+ @abc.abstractproperty
+ def stored_types(self):
+ pass
+
+ def _ValidateCommandType(self, command):
+ if type(command) not in self.stored_types:
+ raise TypeError('Command cannot have %s type.' % type(command))
+ else:
+ return command
+
+ def _StringifyCommands(self):
+ cmds = []
+
+ for cmd in self:
+ if isinstance(cmd, AbstractCommandContainer) and len(cmd) > 1:
+ cmds.append('{ %s; }' % cmd)
+ else:
+ cmds.append(str(cmd))
+
+ return cmds
+
+
+class Chain(AbstractCommandContainer):
+ """Container that chains shell commands using (&&) shell operator."""
+
+ @property
+ def stored_types(self):
+ return [str, Shell, Chain, Pipe]
+
+ def __str__(self):
+ return ' && '.join(self._StringifyCommands())
+
+
+class Pipe(AbstractCommandContainer):
+ """Container that chains shell commands using pipe (|) operator."""
+
+ def __init__(self, *commands, **kwargs):
+ assert all(key in ['input', 'output'] for key in kwargs)
+
+ AbstractCommandContainer.__init__(self, *commands)
+
+ self._input = kwargs.get('input', None)
+ self._output = kwargs.get('output', None)
+
+ @property
+ def stored_types(self):
+ return [str, Shell]
+
+ def __str__(self):
+ pipe = self._StringifyCommands()
+
+ if self._input:
+ pipe.insert(str(Shell('cat', self._input), 0))
+
+ if self._output:
+ pipe.append(str(Shell('tee', self._output)))
+
+ return ' | '.join(pipe)
+
+# TODO(kbaclawski): Unfortunately we don't have any policy describing which
+# directories can or cannot be touched by a job. Thus, I cannot decide how to
+# protect a system against commands that are considered to be dangerous (like
+# RmTree("${HOME}")). AFAIK we'll have to execute some commands with root access
+# (especially for ChromeOS related jobs, which involve chroot-ing), which is
+# even more scary.
+
+
+def Copy(*args, **kwargs):
+ assert all(key in ['to_dir', 'recursive'] for key in kwargs.keys())
+
+ options = []
+
+ if 'to_dir' in kwargs:
+ options.extend(['-t', kwargs['to_dir']])
+
+ if 'recursive' in kwargs:
+ options.append('-r')
+
+ options.extend(args)
+
+ return Shell('cp', *options)
+
+
+def RemoteCopyFrom(from_machine, from_path, to_path, username=None):
+ from_path = os.path.expanduser(from_path) + '/'
+ to_path = os.path.expanduser(to_path) + '/'
+
+ if not username:
+ login = from_machine
+ else:
+ login = '%s@%s' % (username, from_machine)
+
+ return Chain(
+ MakeDir(to_path), Shell('rsync', '-a', '%s:%s' %
+ (login, from_path), to_path))
+
+
+def MakeSymlink(to_path, link_name):
+ return Shell('ln', '-f', '-s', '-T', to_path, link_name)
+
+
+def MakeDir(*dirs, **kwargs):
+ options = ['-p']
+
+ mode = kwargs.get('mode', None)
+
+ if mode:
+ options.extend(['-m', str(mode)])
+
+ options.extend(dirs)
+
+ return Shell('mkdir', *options)
+
+
+def RmTree(*dirs):
+ return Shell('rm', '-r', '-f', *dirs)
+
+
+def UnTar(tar_file, dest_dir):
+ return Chain(
+ MakeDir(dest_dir), Shell('tar', '-x', '-f', tar_file, '-C', dest_dir))
+
+
+def Tar(tar_file, *args):
+ options = ['-c']
+
+ if tar_file.endswith('.tar.bz2'):
+ options.append('-j')
+ elif tar_file.endswith('.tar.gz'):
+ options.append('-z')
+ else:
+ assert tar_file.endswith('.tar')
+
+ options.extend(['-f', tar_file])
+ options.extend(args)
+
+ return Chain(MakeDir(os.path.dirname(tar_file)), Shell('tar', *options))
diff --git a/automation/common/command_executer.py b/automation/common/command_executer.py
new file mode 100644
index 00000000..c0f314f5
--- /dev/null
+++ b/automation/common/command_executer.py
@@ -0,0 +1,230 @@
+# Copyright 2011 Google Inc. All Rights Reserved.
+#
+"""Classes that help running commands in a subshell.
+
+Commands can be run locally, or remotly using SSH connection. You may log the
+output of a command to a terminal or a file, or any other destination.
+"""
+
+__author__ = 'kbaclawski@google.com (Krystian Baclawski)'
+
+import fcntl
+import logging
+import os
+import select
+import subprocess
+import time
+
+from automation.common import logger
+
+
+class CommandExecuter(object):
+ DRY_RUN = False
+
+ def __init__(self, dry_run=False):
+ self._logger = logging.getLogger(self.__class__.__name__)
+ self._dry_run = dry_run or self.DRY_RUN
+
+ @classmethod
+ def Configure(cls, dry_run):
+ cls.DRY_RUN = dry_run
+
+ def RunCommand(self,
+ cmd,
+ machine=None,
+ username=None,
+ command_terminator=None,
+ command_timeout=None):
+ cmd = str(cmd)
+
+ if self._dry_run:
+ return 0
+
+ if not command_terminator:
+ command_terminator = CommandTerminator()
+
+ if command_terminator.IsTerminated():
+ self._logger.warning('Command has been already terminated!')
+ return 1
+
+ # Rewrite command for remote execution.
+ if machine:
+ if username:
+ login = '%s@%s' % (username, machine)
+ else:
+ login = machine
+
+ self._logger.debug("Executing '%s' on %s.", cmd, login)
+
+ # FIXME(asharif): Remove this after crosbug.com/33007 is fixed.
+ cmd = "ssh -t -t %s -- '%s'" % (login, cmd)
+ else:
+ self._logger.debug("Executing: '%s'.", cmd)
+
+ child = self._SpawnProcess(cmd, command_terminator, command_timeout)
+
+ self._logger.debug('{PID: %d} Finished with %d code.', child.pid,
+ child.returncode)
+
+ return child.returncode
+
+ def _Terminate(self, child, command_timeout, wait_timeout=10):
+ """Gracefully shutdown the child by sending SIGTERM."""
+
+ if command_timeout:
+ self._logger.warning('{PID: %d} Timeout of %s seconds reached since '
+ 'process started.', child.pid, command_timeout)
+
+ self._logger.warning('{PID: %d} Terminating child.', child.pid)
+
+ try:
+ child.terminate()
+ except OSError:
+ pass
+
+ wait_started = time.time()
+
+ while not child.poll():
+ if time.time() - wait_started >= wait_timeout:
+ break
+ time.sleep(0.1)
+
+ return child.poll()
+
+ def _Kill(self, child):
+ """Kill the child with immediate result."""
+ self._logger.warning('{PID: %d} Process still alive.', child.pid)
+ self._logger.warning('{PID: %d} Killing child.', child.pid)
+ child.kill()
+ child.wait()
+
+ def _SpawnProcess(self, cmd, command_terminator, command_timeout):
+ # Create a child process executing provided command.
+ child = subprocess.Popen(cmd,
+ stdout=subprocess.PIPE,
+ stderr=subprocess.PIPE,
+ stdin=subprocess.PIPE,
+ shell=True)
+
+ # Close stdin so the child won't be able to block on read.
+ child.stdin.close()
+
+ started_time = time.time()
+
+ # Watch for data on process stdout, stderr.
+ pipes = [child.stdout, child.stderr]
+
+ # Put pipes into non-blocking mode.
+ for pipe in pipes:
+ fd = pipe.fileno()
+ fd_flags = fcntl.fcntl(fd, fcntl.F_GETFL)
+ fcntl.fcntl(fd, fcntl.F_SETFL, fd_flags | os.O_NONBLOCK)
+
+ already_terminated = False
+
+ while pipes:
+ # Maybe timeout reached?
+ if command_timeout and time.time() - started_time > command_timeout:
+ command_terminator.Terminate()
+
+ # Check if terminate request was received.
+ if command_terminator.IsTerminated() and not already_terminated:
+ if not self._Terminate(child, command_timeout):
+ self._Kill(child)
+ # Don't exit the loop immediately. Firstly try to read everything that
+ # was left on stdout and stderr.
+ already_terminated = True
+
+ # Wait for pipes to become ready.
+ ready_pipes, _, _ = select.select(pipes, [], [], 0.1)
+
+ # Handle file descriptors ready to be read.
+ for pipe in ready_pipes:
+ fd = pipe.fileno()
+
+ data = os.read(fd, 4096)
+
+ # check for end-of-file
+ if not data:
+ pipes.remove(pipe)
+ continue
+
+ # read all data that's available
+ while data:
+ if pipe == child.stdout:
+ self.DataReceivedOnOutput(data)
+ elif pipe == child.stderr:
+ self.DataReceivedOnError(data)
+
+ try:
+ data = os.read(fd, 4096)
+ except OSError:
+ # terminate loop if EWOULDBLOCK (EAGAIN) is received
+ data = ''
+
+ if not already_terminated:
+ self._logger.debug('Waiting for command to finish.')
+ child.wait()
+
+ return child
+
+ def DataReceivedOnOutput(self, data):
+ """Invoked when the child process wrote data to stdout."""
+ sys.stdout.write(data)
+
+ def DataReceivedOnError(self, data):
+ """Invoked when the child process wrote data to stderr."""
+ sys.stderr.write(data)
+
+
+class LoggingCommandExecuter(CommandExecuter):
+
+ def __init__(self, *args, **kwargs):
+ super(LoggingCommandExecuter, self).__init__(*args, **kwargs)
+
+ # Create a logger for command's stdout/stderr streams.
+ self._output = logging.getLogger('%s.%s' % (self._logger.name, 'Output'))
+
+ def OpenLog(self, log_path):
+ """The messages are going to be saved to gzip compressed file."""
+ formatter = logging.Formatter('%(asctime)s %(prefix)s: %(message)s',
+ '%Y-%m-%d %H:%M:%S')
+ handler = logger.CompressedFileHandler(log_path, delay=True)
+ handler.setFormatter(formatter)
+ self._output.addHandler(handler)
+
+ # Set a flag to prevent log records from being propagated up the logger
+ # hierarchy tree. We don't want for command output messages to appear in
+ # the main log.
+ self._output.propagate = 0
+
+ def CloseLog(self):
+ """Remove handlers and reattach the logger to its parent."""
+ for handler in list(self._output.handlers):
+ self._output.removeHandler(handler)
+ handler.flush()
+ handler.close()
+
+ self._output.propagate = 1
+
+ def DataReceivedOnOutput(self, data):
+ """Invoked when the child process wrote data to stdout."""
+ for line in data.splitlines():
+ self._output.info(line, extra={'prefix': 'STDOUT'})
+
+ def DataReceivedOnError(self, data):
+ """Invoked when the child process wrote data to stderr."""
+ for line in data.splitlines():
+ self._output.warning(line, extra={'prefix': 'STDERR'})
+
+
+class CommandTerminator(object):
+
+ def __init__(self):
+ self.terminated = False
+
+ def Terminate(self):
+ self.terminated = True
+
+ def IsTerminated(self):
+ return self.terminated
diff --git a/automation/common/command_executer_test.py b/automation/common/command_executer_test.py
new file mode 100755
index 00000000..4aa245f0
--- /dev/null
+++ b/automation/common/command_executer_test.py
@@ -0,0 +1,210 @@
+#!/usr/bin/python
+#
+# Copyright 2011 Google Inc. All Rights Reserved.
+#
+
+__author__ = 'kbaclawski@google.com (Krystian Baclawski)'
+
+import cStringIO
+import logging
+import os
+import signal
+import socket
+import sys
+import time
+import unittest
+
+
+def AddScriptDirToPath():
+ """Required for remote python script execution."""
+ path = os.path.abspath(__file__)
+
+ for _ in range(3):
+ path, _ = os.path.split(path)
+
+ if not path in sys.path:
+ sys.path.append(path)
+
+
+AddScriptDirToPath()
+
+from automation.common.command_executer import CommandExecuter
+
+
+class LoggerMock(object):
+
+ def LogCmd(self, cmd, machine='', user=''):
+ if machine:
+ logging.info('[%s] Executing: %s', machine, cmd)
+ else:
+ logging.info('Executing: %s', cmd)
+
+ def LogError(self, msg):
+ logging.error(msg)
+
+ def LogWarning(self, msg):
+ logging.warning(msg)
+
+ def LogOutput(self, msg):
+ logging.info(msg)
+
+
+class CommandExecuterUnderTest(CommandExecuter):
+
+ def __init__(self):
+ CommandExecuter.__init__(self, logger_to_set=LoggerMock())
+
+ # We will record stdout and stderr.
+ self._stderr = cStringIO.StringIO()
+ self._stdout = cStringIO.StringIO()
+
+ @property
+ def stdout(self):
+ return self._stdout.getvalue()
+
+ @property
+ def stderr(self):
+ return self._stderr.getvalue()
+
+ def DataReceivedOnOutput(self, data):
+ self._stdout.write(data)
+
+ def DataReceivedOnError(self, data):
+ self._stderr.write(data)
+
+
+class CommandExecuterLocalTests(unittest.TestCase):
+ HOSTNAME = None
+
+ def setUp(self):
+ self._executer = CommandExecuterUnderTest()
+
+ def tearDown(self):
+ pass
+
+ def RunCommand(self, method, **kwargs):
+ program = os.path.abspath(sys.argv[0])
+
+ return self._executer.RunCommand('%s runHelper %s' % (program, method),
+ machine=self.HOSTNAME,
+ **kwargs)
+
+ def testCommandTimeout(self):
+ exit_code = self.RunCommand('SleepForMinute', command_timeout=3)
+
+ self.assertTrue(-exit_code in [signal.SIGTERM, signal.SIGKILL],
+ 'Invalid exit code: %d' % exit_code)
+
+ def testCommandTimeoutIfSigTermIgnored(self):
+ exit_code = self.RunCommand('IgnoreSigTerm', command_timeout=3)
+
+ self.assertTrue(-exit_code in [signal.SIGTERM, signal.SIGKILL])
+
+ def testCommandSucceeded(self):
+ self.assertFalse(self.RunCommand('ReturnTrue'))
+
+ def testCommandFailed(self):
+ self.assertTrue(self.RunCommand('ReturnFalse'))
+
+ def testStringOnOutputStream(self):
+ self.assertFalse(self.RunCommand('EchoToOutputStream'))
+ self.assertEquals(self._executer.stderr, '')
+ self.assertEquals(self._executer.stdout, 'test')
+
+ def testStringOnErrorStream(self):
+ self.assertFalse(self.RunCommand('EchoToErrorStream'))
+ self.assertEquals(self._executer.stderr, 'test')
+ self.assertEquals(self._executer.stdout, '')
+
+ def testOutputStreamNonInteractive(self):
+ self.assertFalse(
+ self.RunCommand('IsOutputStreamInteractive'),
+ 'stdout stream is a terminal!')
+
+ def testErrorStreamNonInteractive(self):
+ self.assertFalse(
+ self.RunCommand('IsErrorStreamInteractive'),
+ 'stderr stream is a terminal!')
+
+ def testAttemptToRead(self):
+ self.assertFalse(self.RunCommand('WaitForInput', command_timeout=3))
+
+ def testInterruptedProcess(self):
+ self.assertEquals(self.RunCommand('TerminateBySigAbrt'), -signal.SIGABRT)
+
+
+class CommandExecuterRemoteTests(CommandExecuterLocalTests):
+ HOSTNAME = socket.gethostname()
+
+ def testCommandTimeoutIfSigTermIgnored(self):
+ exit_code = self.RunCommand('IgnoreSigTerm', command_timeout=6)
+
+ self.assertEquals(exit_code, 255)
+
+ lines = self._executer.stdout.splitlines()
+ pid = int(lines[0])
+
+ try:
+ with open('/proc/%d/cmdline' % pid) as f:
+ cmdline = f.read()
+ except IOError:
+ cmdline = ''
+
+ self.assertFalse('IgnoreSigTerm' in cmdline, 'Process is still alive.')
+
+
+class CommandExecuterTestHelpers(object):
+
+ def SleepForMinute(self):
+ time.sleep(60)
+ return 1
+
+ def ReturnTrue(self):
+ return 0
+
+ def ReturnFalse(self):
+ return 1
+
+ def EchoToOutputStream(self):
+ sys.stdout.write('test')
+ return 0
+
+ def EchoToErrorStream(self):
+ sys.stderr.write('test')
+ return 0
+
+ def IsOutputStreamInteractive(self):
+ return sys.stdout.isatty()
+
+ def IsErrorStreamInteractive(self):
+ return sys.stderr.isatty()
+
+ def IgnoreSigTerm(self):
+ os.write(1, '%d' % os.getpid())
+ signal.signal(signal.SIGTERM, signal.SIG_IGN)
+ time.sleep(30)
+ return 0
+
+ def WaitForInput(self):
+ try:
+ # can only read end-of-file marker
+ return os.read(0, 1) != ''
+ except OSError:
+ # that means that stdin descriptor is closed
+ return 0
+
+ def TerminateBySigAbrt(self):
+ os.kill(os.getpid(), signal.SIGABRT)
+ return 0
+
+
+if __name__ == '__main__':
+ FORMAT = '%(asctime)-15s %(levelname)s %(message)s'
+ logging.basicConfig(format=FORMAT, level=logging.DEBUG)
+
+ if len(sys.argv) > 1:
+ if sys.argv[1] == 'runHelper':
+ helpers = CommandExecuterTestHelpers()
+ sys.exit(getattr(helpers, sys.argv[2])())
+
+ unittest.main()
diff --git a/automation/common/events.py b/automation/common/events.py
new file mode 100644
index 00000000..ad3ec844
--- /dev/null
+++ b/automation/common/events.py
@@ -0,0 +1,149 @@
+# -*- coding: utf-8 -*-
+#
+# Copyright 2011 Google Inc. All Rights Reserved.
+#
+"""Tools for recording and reporting timeline of abstract events.
+
+You can store any events provided that they can be stringified.
+"""
+
+__author__ = 'kbaclawski@google.com (Krystian Baclawski)'
+
+import collections
+import datetime
+import time
+
+
+class _EventRecord(object):
+ """Internal class. Attaches extra information to an event."""
+
+ def __init__(self, event, time_started=None, time_elapsed=None):
+ self._event = event
+ self._time_started = time_started or time.time()
+ self._time_elapsed = None
+
+ if time_elapsed:
+ self.time_elapsed = time_elapsed
+
+ @property
+ def event(self):
+ return self._event
+
+ @property
+ def time_started(self):
+ return self._time_started
+
+ def _TimeElapsedGet(self):
+ if self.has_finished:
+ time_elapsed = self._time_elapsed
+ else:
+ time_elapsed = time.time() - self._time_started
+
+ return datetime.timedelta(seconds=time_elapsed)
+
+ def _TimeElapsedSet(self, time_elapsed):
+ if isinstance(time_elapsed, datetime.timedelta):
+ self._time_elapsed = time_elapsed.seconds
+ else:
+ self._time_elapsed = time_elapsed
+
+ time_elapsed = property(_TimeElapsedGet, _TimeElapsedSet)
+
+ @property
+ def has_finished(self):
+ return self._time_elapsed is not None
+
+ def GetTimeStartedFormatted(self):
+ return time.strftime('%m/%d/%Y %H:%M:%S', time.gmtime(self._time_started))
+
+ def GetTimeElapsedRounded(self):
+ return datetime.timedelta(seconds=int(self.time_elapsed.seconds))
+
+ def Finish(self):
+ if not self.has_finished:
+ self._time_elapsed = time.time() - self._time_started
+
+
+class _Transition(collections.namedtuple('_Transition', ('from_', 'to_'))):
+ """Internal class. Represents transition point between events / states."""
+
+ def __str__(self):
+ return '%s => %s' % (self.from_, self.to_)
+
+
+class EventHistory(collections.Sequence):
+ """Records events and provides human readable events timeline."""
+
+ def __init__(self, records=None):
+ self._records = records or []
+
+ def __len__(self):
+ return len(self._records)
+
+ def __iter__(self):
+ return iter(self._records)
+
+ def __getitem__(self, index):
+ return self._records[index]
+
+ @property
+ def last(self):
+ if self._records:
+ return self._records[-1]
+
+ def AddEvent(self, event):
+ if self.last:
+ self.last.Finish()
+
+ evrec = _EventRecord(event)
+ self._records.append(evrec)
+ return evrec
+
+ def GetTotalTime(self):
+ if self._records:
+ total_time_elapsed = sum(evrec.time_elapsed.seconds
+ for evrec in self._records)
+
+ return datetime.timedelta(seconds=int(total_time_elapsed))
+
+ def GetTransitionEventHistory(self):
+ records = []
+
+ if self._records:
+ for num, next_evrec in enumerate(self._records[1:], start=1):
+ evrec = self._records[num - 1]
+
+ records.append(_EventRecord(
+ _Transition(evrec.event, next_evrec.event), evrec.time_started,
+ evrec.time_elapsed))
+
+ if not self.last.has_finished:
+ records.append(_EventRecord(
+ _Transition(self.last.event,
+ 'NOW'), self.last.time_started, self.last.time_elapsed))
+
+ return EventHistory(records)
+
+ @staticmethod
+ def _GetReport(history, report_name):
+ report = [report_name]
+
+ for num, evrec in enumerate(history, start=1):
+ time_elapsed = str(evrec.GetTimeElapsedRounded())
+
+ if not evrec.has_finished:
+ time_elapsed.append(' (not finished)')
+
+ report.append('%d) %s: %s: %s' % (num, evrec.GetTimeStartedFormatted(),
+ evrec.event, time_elapsed))
+
+ report.append('Total Time: %s' % history.GetTotalTime())
+
+ return '\n'.join(report)
+
+ def GetEventReport(self):
+ return EventHistory._GetReport(self, 'Timeline of events:')
+
+ def GetTransitionEventReport(self):
+ return EventHistory._GetReport(self.GetTransitionEventHistory(),
+ 'Timeline of transition events:')
diff --git a/automation/common/job.py b/automation/common/job.py
new file mode 100644
index 00000000..e845ab25
--- /dev/null
+++ b/automation/common/job.py
@@ -0,0 +1,178 @@
+# Copyright 2010 Google Inc. All Rights Reserved.
+#
+"""A module for a job in the infrastructure."""
+
+__author__ = 'raymes@google.com (Raymes Khoury)'
+
+import os.path
+
+from automation.common import state_machine
+
+STATUS_NOT_EXECUTED = 'NOT_EXECUTED'
+STATUS_SETUP = 'SETUP'
+STATUS_COPYING = 'COPYING'
+STATUS_RUNNING = 'RUNNING'
+STATUS_SUCCEEDED = 'SUCCEEDED'
+STATUS_FAILED = 'FAILED'
+
+
+class FolderDependency(object):
+
+ def __init__(self, job, src, dest=None):
+ if not dest:
+ dest = src
+
+ # TODO(kbaclawski): rename to producer
+ self.job = job
+ self.src = src
+ self.dest = dest
+
+ @property
+ def read_only(self):
+ return self.dest == self.src
+
+
+class JobStateMachine(state_machine.BasicStateMachine):
+ state_machine = {
+ STATUS_NOT_EXECUTED: [STATUS_SETUP],
+ STATUS_SETUP: [STATUS_COPYING, STATUS_FAILED],
+ STATUS_COPYING: [STATUS_RUNNING, STATUS_FAILED],
+ STATUS_RUNNING: [STATUS_SUCCEEDED, STATUS_FAILED]
+ }
+
+ final_states = [STATUS_SUCCEEDED, STATUS_FAILED]
+
+
+class JobFailure(Exception):
+
+ def __init__(self, message, exit_code):
+ Exception.__init__(self, message)
+ self.exit_code = exit_code
+
+
+class Job(object):
+ """A class representing a job whose commands will be executed."""
+
+ WORKDIR_PREFIX = '/usr/local/google/tmp/automation'
+
+ def __init__(self, label, command, timeout=4 * 60 * 60):
+ self._state = JobStateMachine(STATUS_NOT_EXECUTED)
+ self.predecessors = set()
+ self.successors = set()
+ self.machine_dependencies = []
+ self.folder_dependencies = []
+ self.id = 0
+ self.machines = []
+ self.command = command
+ self._has_primary_machine_spec = False
+ self.group = None
+ self.dry_run = None
+ self.label = label
+ self.timeout = timeout
+
+ def _StateGet(self):
+ return self._state
+
+ def _StateSet(self, new_state):
+ self._state.Change(new_state)
+
+ status = property(_StateGet, _StateSet)
+
+ @property
+ def timeline(self):
+ return self._state.timeline
+
+ def __repr__(self):
+ return '{%s: %s}' % (self.__class__.__name__, self.id)
+
+ def __str__(self):
+ res = []
+ res.append('%d' % self.id)
+ res.append('Predecessors:')
+ res.extend(['%d' % pred.id for pred in self.predecessors])
+ res.append('Successors:')
+ res.extend(['%d' % succ.id for succ in self.successors])
+ res.append('Machines:')
+ res.extend(['%s' % machine for machine in self.machines])
+ res.append(self.PrettyFormatCommand())
+ res.append('%s' % self.status)
+ res.append(self.timeline.GetTransitionEventReport())
+ return '\n'.join(res)
+
+ @staticmethod
+ def _FormatCommand(cmd, substitutions):
+ for pattern, replacement in substitutions:
+ cmd = cmd.replace(pattern, replacement)
+
+ return cmd
+
+ def GetCommand(self):
+ substitutions = [
+ ('$JOB_ID', str(self.id)), ('$JOB_TMP', self.work_dir),
+ ('$JOB_HOME', self.home_dir),
+ ('$PRIMARY_MACHINE', self.primary_machine.hostname)
+ ]
+
+ if len(self.machines) > 1:
+ for num, machine in enumerate(self.machines[1:]):
+ substitutions.append(('$SECONDARY_MACHINES[%d]' % num, machine.hostname
+ ))
+
+ return self._FormatCommand(str(self.command), substitutions)
+
+ def PrettyFormatCommand(self):
+ # TODO(kbaclawski): This method doesn't belong here, but rather to
+ # non existing Command class. If one is created then PrettyFormatCommand
+ # shall become its method.
+ return self._FormatCommand(self.GetCommand(), [
+ ('\{ ', ''), ('; \}', ''), ('\} ', '\n'), ('\s*&&\s*', '\n')
+ ])
+
+ def DependsOnFolder(self, dependency):
+ self.folder_dependencies.append(dependency)
+ self.DependsOn(dependency.job)
+
+ @property
+ def results_dir(self):
+ return os.path.join(self.work_dir, 'results')
+
+ @property
+ def logs_dir(self):
+ return os.path.join(self.home_dir, 'logs')
+
+ @property
+ def log_filename_prefix(self):
+ return 'job-%d.log' % self.id
+
+ @property
+ def work_dir(self):
+ return os.path.join(self.WORKDIR_PREFIX, 'job-%d' % self.id)
+
+ @property
+ def home_dir(self):
+ return os.path.join(self.group.home_dir, 'job-%d' % self.id)
+
+ @property
+ def primary_machine(self):
+ return self.machines[0]
+
+ def DependsOn(self, job):
+ """Specifies Jobs to be finished before this job can be launched."""
+ self.predecessors.add(job)
+ job.successors.add(self)
+
+ @property
+ def is_ready(self):
+ """Check that all our dependencies have been executed."""
+ return all(pred.status == STATUS_SUCCEEDED for pred in self.predecessors)
+
+ def DependsOnMachine(self, machine_spec, primary=True):
+ # Job will run on arbitrarily chosen machine specified by
+ # MachineSpecification class instances passed to this method.
+ if primary:
+ if self._has_primary_machine_spec:
+ raise RuntimeError('Only one primary machine specification allowed.')
+ self._has_primary_machine_spec = True
+ self.machine_dependencies.insert(0, machine_spec)
+ else:
+ self.machine_dependencies.append(machine_spec)
diff --git a/automation/common/job_group.py b/automation/common/job_group.py
new file mode 100644
index 00000000..96912fc1
--- /dev/null
+++ b/automation/common/job_group.py
@@ -0,0 +1,73 @@
+# Copyright 2010 Google Inc. All Rights Reserved.
+#
+
+import getpass
+import os
+
+from automation.common.state_machine import BasicStateMachine
+
+STATUS_NOT_EXECUTED = 'NOT_EXECUTED'
+STATUS_EXECUTING = 'EXECUTING'
+STATUS_SUCCEEDED = 'SUCCEEDED'
+STATUS_FAILED = 'FAILED'
+
+
+class JobGroupStateMachine(BasicStateMachine):
+ state_machine = {
+ STATUS_NOT_EXECUTED: [STATUS_EXECUTING],
+ STATUS_EXECUTING: [STATUS_SUCCEEDED, STATUS_FAILED]
+ }
+
+ final_states = [STATUS_SUCCEEDED, STATUS_FAILED]
+
+
+class JobGroup(object):
+ HOMEDIR_PREFIX = os.path.join('/home', getpass.getuser(), 'www', 'automation')
+
+ def __init__(self,
+ label,
+ jobs=None,
+ cleanup_on_completion=True,
+ cleanup_on_failure=False,
+ description=''):
+ self._state = JobGroupStateMachine(STATUS_NOT_EXECUTED)
+ self.id = 0
+ self.label = label
+ self.jobs = []
+ self.cleanup_on_completion = cleanup_on_completion
+ self.cleanup_on_failure = cleanup_on_failure
+ self.description = description
+
+ if jobs:
+ for job in jobs:
+ self.AddJob(job)
+
+ def _StateGet(self):
+ return self._state
+
+ def _StateSet(self, new_state):
+ self._state.Change(new_state)
+
+ status = property(_StateGet, _StateSet)
+
+ @property
+ def home_dir(self):
+ return os.path.join(self.HOMEDIR_PREFIX, 'job-group-%d' % self.id)
+
+ @property
+ def time_submitted(self):
+ try:
+ return self.status.timeline[1].time_started
+ except IndexError:
+ return None
+
+ def __repr__(self):
+ return '{%s: %s}' % (self.__class__.__name__, self.id)
+
+ def __str__(self):
+ return '\n'.join(['Job-Group:', 'ID: %s' % self.id] + [str(
+ job) for job in self.jobs])
+
+ def AddJob(self, job):
+ self.jobs.append(job)
+ job.group = self
diff --git a/automation/common/logger.py b/automation/common/logger.py
new file mode 100644
index 00000000..4aeee052
--- /dev/null
+++ b/automation/common/logger.py
@@ -0,0 +1,144 @@
+# Copyright 2010 Google Inc. All Rights Reserved.
+
+from itertools import chain
+import gzip
+import logging
+import logging.handlers
+import time
+import traceback
+
+
+def SetUpRootLogger(filename=None, level=None, display_flags={}):
+ console_handler = logging.StreamHandler()
+ console_handler.setFormatter(CustomFormatter(AnsiColorCoder(), display_flags))
+ logging.root.addHandler(console_handler)
+
+ if filename:
+ file_handler = logging.handlers.RotatingFileHandler(
+ filename,
+ maxBytes=10 * 1024 * 1024,
+ backupCount=9,
+ delay=True)
+ file_handler.setFormatter(CustomFormatter(NullColorCoder(), display_flags))
+ logging.root.addHandler(file_handler)
+
+ if level:
+ logging.root.setLevel(level)
+
+
+class NullColorCoder(object):
+
+ def __call__(self, *args):
+ return ''
+
+
+class AnsiColorCoder(object):
+ CODES = {'reset': (0,),
+ 'bold': (1, 22),
+ 'italics': (3, 23),
+ 'underline': (4, 24),
+ 'inverse': (7, 27),
+ 'strikethrough': (9, 29),
+ 'black': (30, 40),
+ 'red': (31, 41),
+ 'green': (32, 42),
+ 'yellow': (33, 43),
+ 'blue': (34, 44),
+ 'magenta': (35, 45),
+ 'cyan': (36, 46),
+ 'white': (37, 47)}
+
+ def __call__(self, *args):
+ codes = []
+
+ for arg in args:
+ if arg.startswith('bg-') or arg.startswith('no-'):
+ codes.append(self.CODES[arg[3:]][1])
+ else:
+ codes.append(self.CODES[arg][0])
+
+ return '\033[%sm' % ';'.join(map(str, codes))
+
+
+class CustomFormatter(logging.Formatter):
+ COLORS = {'DEBUG': ('white',),
+ 'INFO': ('green',),
+ 'WARN': ('yellow', 'bold'),
+ 'ERROR': ('red', 'bold'),
+ 'CRIT': ('red', 'inverse', 'bold')}
+
+ def __init__(self, coder, display_flags={}):
+ items = []
+
+ if display_flags.get('datetime', True):
+ items.append('%(asctime)s')
+ if display_flags.get('level', True):
+ items.append('%(levelname)s')
+ if display_flags.get('name', True):
+ items.append(coder('cyan') + '[%(threadName)s:%(name)s]' + coder('reset'))
+ items.append('%(prefix)s%(message)s')
+
+ logging.Formatter.__init__(self, fmt=' '.join(items))
+
+ self._coder = coder
+
+ def formatTime(self, record):
+ ct = self.converter(record.created)
+ t = time.strftime('%Y-%m-%d %H:%M:%S', ct)
+ return '%s.%02d' % (t, record.msecs / 10)
+
+ def formatLevelName(self, record):
+ if record.levelname in ['WARNING', 'CRITICAL']:
+ levelname = record.levelname[:4]
+ else:
+ levelname = record.levelname
+
+ return ''.join([self._coder(*self.COLORS[levelname]), levelname,
+ self._coder('reset')])
+
+ def formatMessagePrefix(self, record):
+ try:
+ return ' %s%s:%s ' % (self._coder('black', 'bold'), record.prefix,
+ self._coder('reset'))
+ except AttributeError:
+ return ''
+
+ def format(self, record):
+ if record.exc_info:
+ if not record.exc_text:
+ record.exc_text = self.formatException(record.exc_info)
+ else:
+ record.exc_text = ''
+
+ fmt = record.__dict__.copy()
+ fmt.update({'levelname': self.formatLevelName(record),
+ 'asctime': self.formatTime(record),
+ 'prefix': self.formatMessagePrefix(record)})
+
+ s = []
+
+ for line in chain(record.getMessage().splitlines(),
+ record.exc_text.splitlines()):
+ fmt['message'] = line
+
+ s.append(self._fmt % fmt)
+
+ return '\n'.join(s)
+
+
+class CompressedFileHandler(logging.FileHandler):
+
+ def _open(self):
+ return gzip.open(self.baseFilename + '.gz', self.mode, 9)
+
+
+def HandleUncaughtExceptions(fun):
+ """Catches all exceptions that would go outside decorated fun scope."""
+
+ def _Interceptor(*args, **kwargs):
+ try:
+ return fun(*args, **kwargs)
+ except StandardError:
+ logging.exception('Uncaught exception:')
+
+ return _Interceptor
diff --git a/automation/common/machine.py b/automation/common/machine.py
new file mode 100644
index 00000000..4db0db0d
--- /dev/null
+++ b/automation/common/machine.py
@@ -0,0 +1,70 @@
+# Copyright 2010 Google Inc. All Rights Reserved.
+
+__author__ = 'asharif@google.com (Ahmad Sharif)'
+
+from fnmatch import fnmatch
+
+
+class Machine(object):
+ """Stores information related to machine and its state."""
+
+ def __init__(self, hostname, label, cpu, cores, os, username):
+ self.hostname = hostname
+ self.label = label
+ self.cpu = cpu
+ self.cores = cores
+ self.os = os
+ self.username = username
+
+ # MachineManager related attributes.
+ self.uses = 0
+ self.locked = False
+
+ def Acquire(self, exclusively):
+ assert not self.locked
+
+ if exclusively:
+ self.locked = True
+ self.uses += 1
+
+ def Release(self):
+ assert self.uses > 0
+
+ self.uses -= 1
+
+ if not self.uses:
+ self.locked = False
+
+ def __repr__(self):
+ return '{%s: %s@%s}' % (self.__class__.__name__, self.username,
+ self.hostname)
+
+ def __str__(self):
+ return '\n'.join(
+ ['Machine Information:', 'Hostname: %s' % self.hostname, 'Label: %s' %
+ self.label, 'CPU: %s' % self.cpu, 'Cores: %d' % self.cores, 'OS: %s' %
+ self.os, 'Uses: %d' % self.uses, 'Locked: %s' % self.locked])
+
+
+class MachineSpecification(object):
+ """Helper class used to find a machine matching your requirements."""
+
+ def __init__(self, hostname='*', label='*', os='*', lock_required=False):
+ self.hostname = hostname
+ self.label = label
+ self.os = os
+ self.lock_required = lock_required
+ self.preferred_machines = []
+
+ def __str__(self):
+ return '\n'.join(['Machine Specification:', 'Name: %s' % self.name, 'OS: %s'
+ % self.os, 'Lock required: %s' % self.lock_required])
+
+ def IsMatch(self, machine):
+ return all([not machine.locked, fnmatch(machine.hostname, self.hostname),
+ fnmatch(machine.label, self.label), fnmatch(machine.os,
+ self.os)])
+
+ def AddPreferredMachine(self, hostname):
+ if hostname not in self.preferred_machines:
+ self.preferred_machines.append(hostname)
diff --git a/automation/common/machine_test.py b/automation/common/machine_test.py
new file mode 100755
index 00000000..c9c200a9
--- /dev/null
+++ b/automation/common/machine_test.py
@@ -0,0 +1,26 @@
+#!/usr/bin/python
+#
+# Copyright 2010 Google Inc. All Rights Reserved.
+"""Machine manager unittest.
+
+MachineManagerTest tests MachineManager.
+"""
+
+__author__ = 'asharif@google.com (Ahmad Sharif)'
+
+import machine
+import unittest
+
+
+class MachineTest(unittest.TestCase):
+
+ def setUp(self):
+ pass
+
+ def testPrintMachine(self):
+ mach = machine.Machine('ahmad.mtv', 'core2duo', 4, 'linux', 'asharif')
+ self.assertTrue('ahmad.mtv' in str(mach))
+
+
+if __name__ == '__main__':
+ unittest.main()
diff --git a/automation/common/state_machine.py b/automation/common/state_machine.py
new file mode 100644
index 00000000..d1cf42c8
--- /dev/null
+++ b/automation/common/state_machine.py
@@ -0,0 +1,54 @@
+# -*- coding: utf-8 -*-
+#
+# Copyright 2011 Google Inc. All Rights Reserved.
+#
+
+__author__ = 'kbaclawski@google.com (Krystian Baclawski)'
+
+from automation.common import events
+
+
+class BasicStateMachine(object):
+ """Generic class for constructing state machines.
+
+ Keeps all states and possible transition of a state machine. Ensures that
+ transition between two states is always valid. Also stores transition events
+ in a timeline object.
+ """
+ state_machine = {}
+ final_states = []
+
+ def __init__(self, initial_state):
+ assert initial_state in self.state_machine,\
+ 'Initial state does not belong to this state machine'
+
+ self._state = initial_state
+
+ self.timeline = events.EventHistory()
+ self.timeline.AddEvent(self._state)
+
+ def __str__(self):
+ return self._state
+
+ def __eq__(self, value):
+ if isinstance(value, BasicStateMachine):
+ value = str(value)
+
+ return self._state == value
+
+ def __ne__(self, value):
+ return not self == value
+
+ def _TransitionAllowed(self, to_state):
+ return to_state in self.state_machine.get(self._state, [])
+
+ def Change(self, new_state):
+ assert self._TransitionAllowed(new_state),\
+ 'Transition from %s to %s not possible' % (self._state, new_state)
+
+ self._state = new_state
+
+ self.timeline.AddEvent(self._state)
+
+ if self._state in self.final_states:
+ self.timeline.last.Finish()
diff --git a/automation/server/__init__.py b/automation/server/__init__.py
new file mode 100644
index 00000000..8b137891
--- /dev/null
+++ b/automation/server/__init__.py
@@ -0,0 +1 @@
+
diff --git a/automation/server/job_executer.py b/automation/server/job_executer.py
new file mode 100644
index 00000000..30b59463
--- /dev/null
+++ b/automation/server/job_executer.py
@@ -0,0 +1,138 @@
+# Copyright 2010 Google Inc. All Rights Reserved.
+#
+
+import logging
+import os.path
+import threading
+
+from automation.common import command as cmd
+from automation.common import job
+from automation.common import logger
+from automation.common.command_executer import LoggingCommandExecuter
+from automation.common.command_executer import CommandTerminator
+
+
+class JobExecuter(threading.Thread):
+
+ def __init__(self, job_to_execute, machines, listeners):
+ threading.Thread.__init__(self)
+
+ assert machines
+
+ self.job = job_to_execute
+ self.listeners = listeners
+ self.machines = machines
+
+ # Set Thread name.
+ self.name = '%s-%s' % (self.__class__.__name__, self.job.id)
+
+ self._logger = logging.getLogger(self.__class__.__name__)
+ self._executer = LoggingCommandExecuter(self.job.dry_run)
+ self._terminator = CommandTerminator()
+
+ def _RunRemotely(self, command, fail_msg, command_timeout=1 * 60 * 60):
+ exit_code = self._executer.RunCommand(command,
+ self.job.primary_machine.hostname,
+ self.job.primary_machine.username,
+ command_terminator=self._terminator,
+ command_timeout=command_timeout)
+ if exit_code:
+ raise job.JobFailure(fail_msg, exit_code)
+
+ def _RunLocally(self, command, fail_msg, command_timeout=1 * 60 * 60):
+ exit_code = self._executer.RunCommand(command,
+ command_terminator=self._terminator,
+ command_timeout=command_timeout)
+ if exit_code:
+ raise job.JobFailure(fail_msg, exit_code)
+
+ def Kill(self):
+ self._terminator.Terminate()
+
+ def CleanUpWorkDir(self):
+ self._logger.debug('Cleaning up %r work directory.', self.job)
+ self._RunRemotely(cmd.RmTree(self.job.work_dir), 'Cleanup workdir failed.')
+
+ def CleanUpHomeDir(self):
+ self._logger.debug('Cleaning up %r home directory.', self.job)
+ self._RunLocally(cmd.RmTree(self.job.home_dir), 'Cleanup homedir failed.')
+
+ def _PrepareRuntimeEnvironment(self):
+ self._RunRemotely(
+ cmd.MakeDir(self.job.work_dir, self.job.logs_dir, self.job.results_dir),
+ 'Creating new job directory failed.')
+
+ # The log directory is ready, so we can prepare to log command's output.
+ self._executer.OpenLog(os.path.join(self.job.logs_dir,
+ self.job.log_filename_prefix))
+
+ def _SatisfyFolderDependencies(self):
+ for dependency in self.job.folder_dependencies:
+ to_folder = os.path.join(self.job.work_dir, dependency.dest)
+ from_folder = os.path.join(dependency.job.work_dir, dependency.src)
+ from_machine = dependency.job.primary_machine
+
+ if from_machine == self.job.primary_machine and dependency.read_only:
+ # No need to make a copy, just symlink it
+ self._RunRemotely(
+ cmd.MakeSymlink(from_folder, to_folder),
+ 'Failed to create symlink to required directory.')
+ else:
+ self._RunRemotely(
+ cmd.RemoteCopyFrom(from_machine.hostname,
+ from_folder,
+ to_folder,
+ username=from_machine.username),
+ 'Failed to copy required files.')
+
+ def _LaunchJobCommand(self):
+ command = self.job.GetCommand()
+
+ self._RunRemotely('%s; %s' % ('PS1=. TERM=linux source ~/.bashrc',
+ cmd.Wrapper(command,
+ cwd=self.job.work_dir)),
+ "Command failed to execute: '%s'." % command,
+ self.job.timeout)
+
+ def _CopyJobResults(self):
+ """Copy test results back to directory."""
+ self._RunLocally(
+ cmd.RemoteCopyFrom(self.job.primary_machine.hostname,
+ self.job.results_dir,
+ self.job.home_dir,
+ username=self.job.primary_machine.username),
+ 'Failed to copy results.')
+
+ def run(self):
+ self.job.status = job.STATUS_SETUP
+ self.job.machines = self.machines
+ self._logger.debug('Executing %r on %r in directory %s.', self.job,
+ self.job.primary_machine.hostname, self.job.work_dir)
+
+ try:
+ self.CleanUpWorkDir()
+
+ self._PrepareRuntimeEnvironment()
+
+ self.job.status = job.STATUS_COPYING
+
+ self._SatisfyFolderDependencies()
+
+ self.job.status = job.STATUS_RUNNING
+
+ self._LaunchJobCommand()
+ self._CopyJobResults()
+
+ # If we get here, the job succeeded.
+ self.job.status = job.STATUS_SUCCEEDED
+ except job.JobFailure as ex:
+ self._logger.error('Job failed. Exit code %s. %s', ex.exit_code, ex)
+ if self._terminator.IsTerminated():
+ self._logger.info('%r was killed', self.job)
+
+ self.job.status = job.STATUS_FAILED
+
+ self._executer.CloseLog()
+
+ for listener in self.listeners:
+ listener.NotifyJobComplete(self.job)
diff --git a/automation/server/job_group_manager.py b/automation/server/job_group_manager.py
new file mode 100644
index 00000000..d66f5e07
--- /dev/null
+++ b/automation/server/job_group_manager.py
@@ -0,0 +1,118 @@
+# Copyright 2010 Google Inc. All Rights Reserved.
+#
+
+import copy
+import logging
+import threading
+
+from automation.common import command as cmd
+from automation.common import logger
+from automation.common.command_executer import CommandExecuter
+from automation.common import job
+from automation.common import job_group
+from automation.server.job_manager import IdProducerPolicy
+
+
+class JobGroupManager(object):
+
+ def __init__(self, job_manager):
+ self.all_job_groups = []
+
+ self.job_manager = job_manager
+ self.job_manager.AddListener(self)
+
+ self._lock = threading.Lock()
+ self._job_group_finished = threading.Condition(self._lock)
+
+ self._id_producer = IdProducerPolicy()
+ self._id_producer.Initialize(job_group.JobGroup.HOMEDIR_PREFIX,
+ 'job-group-(?P<id>\d+)')
+
+ self._logger = logging.getLogger(self.__class__.__name__)
+
+ def GetJobGroup(self, group_id):
+ with self._lock:
+ for group in self.all_job_groups:
+ if group.id == group_id:
+ return group
+
+ return None
+
+ def GetAllJobGroups(self):
+ with self._lock:
+ return copy.deepcopy(self.all_job_groups)
+
+ def AddJobGroup(self, group):
+ with self._lock:
+ group.id = self._id_producer.GetNextId()
+
+ self._logger.debug('Creating runtime environment for %r.', group)
+
+ CommandExecuter().RunCommand(cmd.Chain(
+ cmd.RmTree(group.home_dir), cmd.MakeDir(group.home_dir)))
+
+ with self._lock:
+ self.all_job_groups.append(group)
+
+ for job_ in group.jobs:
+ self.job_manager.AddJob(job_)
+
+ group.status = job_group.STATUS_EXECUTING
+
+ self._logger.info('Added %r to queue.', group)
+
+ return group.id
+
+ def KillJobGroup(self, group):
+ with self._lock:
+ self._logger.debug('Killing all jobs that belong to %r.', group)
+
+ for job_ in group.jobs:
+ self.job_manager.KillJob(job_)
+
+ self._logger.debug('Waiting for jobs to quit.')
+
+ # Lets block until the group is killed so we know it is completed
+ # when we return.
+ while group.status not in [job_group.STATUS_SUCCEEDED,
+ job_group.STATUS_FAILED]:
+ self._job_group_finished.wait()
+
+ def NotifyJobComplete(self, job_):
+ self._logger.debug('Handling %r completion event.', job_)
+
+ group = job_.group
+
+ with self._lock:
+ # We need to perform an action only if the group hasn't already failed.
+ if group.status != job_group.STATUS_FAILED:
+ if job_.status == job.STATUS_FAILED:
+ # We have a failed job, abort the job group
+ group.status = job_group.STATUS_FAILED
+ if group.cleanup_on_failure:
+ for job_ in group.jobs:
+ # TODO(bjanakiraman): We should probably only kill dependent jobs
+ # instead of the whole job group.
+ self.job_manager.KillJob(job_)
+ self.job_manager.CleanUpJob(job_)
+ else:
+ # The job succeeded successfully -- lets check to see if we are done.
+ assert job_.status == job.STATUS_SUCCEEDED
+ finished = True
+ for other_job in group.jobs:
+ assert other_job.status != job.STATUS_FAILED
+ if other_job.status != job.STATUS_SUCCEEDED:
+ finished = False
+ break
+
+ if finished and group.status != job_group.STATUS_SUCCEEDED:
+ # TODO(kbaclawski): Without check performed above following code
+ # could be called more than once. This would trigger StateMachine
+ # crash, because it cannot transition from STATUS_SUCCEEDED to
+ # STATUS_SUCCEEDED. Need to address that bug in near future.
+ group.status = job_group.STATUS_SUCCEEDED
+ if group.cleanup_on_completion:
+ for job_ in group.jobs:
+ self.job_manager.CleanUpJob(job_)
+
+ self._job_group_finished.notifyAll()
diff --git a/automation/server/job_manager.py b/automation/server/job_manager.py
new file mode 100644
index 00000000..7a65b918
--- /dev/null
+++ b/automation/server/job_manager.py
@@ -0,0 +1,194 @@
+# Copyright 2010 Google Inc. All Rights Reserved.
+#
+
+import logging
+import os
+import re
+import threading
+
+from automation.common import job
+from automation.common import logger
+from automation.server.job_executer import JobExecuter
+
+
+class IdProducerPolicy(object):
+ """Produces series of unique integer IDs.
+
+ Example:
+ id_producer = IdProducerPolicy()
+ id_a = id_producer.GetNextId()
+ id_b = id_producer.GetNextId()
+ assert id_a != id_b
+ """
+
+ def __init__(self):
+ self._counter = 1
+
+ def Initialize(self, home_prefix, home_pattern):
+ """Find first available ID based on a directory listing.
+
+ Args:
+ home_prefix: A directory to be traversed.
+ home_pattern: A regexp describing all files/directories that will be
+ considered. The regexp must contain exactly one match group with name
+ "id", which must match an integer number.
+
+ Example:
+ id_producer.Initialize(JOBDIR_PREFIX, 'job-(?P<id>\d+)')
+ """
+ harvested_ids = []
+
+ if os.path.isdir(home_prefix):
+ for filename in os.listdir(home_prefix):
+ path = os.path.join(home_prefix, filename)
+
+ if os.path.isdir(path):
+ match = re.match(home_pattern, filename)
+
+ if match:
+ harvested_ids.append(int(match.group('id')))
+
+ self._counter = max(harvested_ids or [0]) + 1
+
+ def GetNextId(self):
+ """Calculates another ID considered to be unique."""
+ new_id = self._counter
+ self._counter += 1
+ return new_id
+
+
+class JobManager(threading.Thread):
+
+ def __init__(self, machine_manager):
+ threading.Thread.__init__(self, name=self.__class__.__name__)
+ self.all_jobs = []
+ self.ready_jobs = []
+ self.job_executer_mapping = {}
+
+ self.machine_manager = machine_manager
+
+ self._lock = threading.Lock()
+ self._jobs_available = threading.Condition(self._lock)
+ self._exit_request = False
+
+ self.listeners = []
+ self.listeners.append(self)
+
+ self._id_producer = IdProducerPolicy()
+ self._id_producer.Initialize(job.Job.WORKDIR_PREFIX, 'job-(?P<id>\d+)')
+
+ self._logger = logging.getLogger(self.__class__.__name__)
+
+ def StartJobManager(self):
+ self._logger.info('Starting...')
+
+ with self._lock:
+ self.start()
+ self._jobs_available.notifyAll()
+
+ def StopJobManager(self):
+ self._logger.info('Shutdown request received.')
+
+ with self._lock:
+ for job_ in self.all_jobs:
+ self._KillJob(job_.id)
+
+ # Signal to die
+ self._exit_request = True
+ self._jobs_available.notifyAll()
+
+ # Wait for all job threads to finish
+ for executer in self.job_executer_mapping.values():
+ executer.join()
+
+ def KillJob(self, job_id):
+ """Kill a job by id.
+
+ Does not block until the job is completed.
+ """
+ with self._lock:
+ self._KillJob(job_id)
+
+ def GetJob(self, job_id):
+ for job_ in self.all_jobs:
+ if job_.id == job_id:
+ return job_
+ return None
+
+ def _KillJob(self, job_id):
+ self._logger.info('Killing [Job: %d].', job_id)
+
+ if job_id in self.job_executer_mapping:
+ self.job_executer_mapping[job_id].Kill()
+ for job_ in self.ready_jobs:
+ if job_.id == job_id:
+ self.ready_jobs.remove(job_)
+ break
+
+ def AddJob(self, job_):
+ with self._lock:
+ job_.id = self._id_producer.GetNextId()
+
+ self.all_jobs.append(job_)
+ # Only queue a job as ready if it has no dependencies
+ if job_.is_ready:
+ self.ready_jobs.append(job_)
+
+ self._jobs_available.notifyAll()
+
+ return job_.id
+
+ def CleanUpJob(self, job_):
+ with self._lock:
+ if job_.id in self.job_executer_mapping:
+ self.job_executer_mapping[job_.id].CleanUpWorkDir()
+ del self.job_executer_mapping[job_.id]
+ # TODO(raymes): remove job from self.all_jobs
+
+ def NotifyJobComplete(self, job_):
+ self.machine_manager.ReturnMachines(job_.machines)
+
+ with self._lock:
+ self._logger.debug('Handling %r completion event.', job_)
+
+ if job_.status == job.STATUS_SUCCEEDED:
+ for succ in job_.successors:
+ if succ.is_ready:
+ if succ not in self.ready_jobs:
+ self.ready_jobs.append(succ)
+
+ self._jobs_available.notifyAll()
+
+ def AddListener(self, listener):
+ self.listeners.append(listener)
+
+ @logger.HandleUncaughtExceptions
+ def run(self):
+ self._logger.info('Started.')
+
+ while not self._exit_request:
+ with self._lock:
+ # Get the next ready job, block if there are none
+ self._jobs_available.wait()
+
+ while self.ready_jobs:
+ ready_job = self.ready_jobs.pop()
+
+ required_machines = ready_job.machine_dependencies
+ for pred in ready_job.predecessors:
+ required_machines[0].AddPreferredMachine(
+ pred.primary_machine.hostname)
+
+ machines = self.machine_manager.GetMachines(required_machines)
+ if not machines:
+ # If we can't get the necessary machines right now, simply wait
+ # for some jobs to complete
+ self.ready_jobs.insert(0, ready_job)
+ break
+ else:
+ # Mark as executing
+ executer = JobExecuter(ready_job, machines, self.listeners)
+ executer.start()
+ self.job_executer_mapping[ready_job.id] = executer
+
+ self._logger.info('Stopped.')
diff --git a/automation/server/machine_manager.py b/automation/server/machine_manager.py
new file mode 100644
index 00000000..b7186077
--- /dev/null
+++ b/automation/server/machine_manager.py
@@ -0,0 +1,77 @@
+# Copyright 2010 Google Inc. All Rights Reserved.
+
+__author__ = 'asharif@google.com (Ahmad Sharif)'
+
+from operator import attrgetter
+import copy
+import csv
+import threading
+import os.path
+
+from automation.common import machine
+
+DEFAULT_MACHINES_FILE = os.path.join(os.path.dirname(__file__), 'test_pool.csv')
+
+
+class MachineManager(object):
+ """Container for list of machines one can run jobs on."""
+
+ @classmethod
+ def FromMachineListFile(cls, filename):
+ # Read the file and skip header
+ csv_file = csv.reader(open(filename, 'rb'), delimiter=',', quotechar='"')
+ csv_file.next()
+
+ return cls([machine.Machine(hostname, label, cpu, int(cores), os, user)
+ for hostname, label, cpu, cores, os, user in csv_file])
+
+ def __init__(self, machines):
+ self._machine_pool = machines
+ self._lock = threading.RLock()
+
+ def _GetMachine(self, mach_spec):
+ available_pool = [m for m in self._machine_pool if mach_spec.IsMatch(m)]
+
+ if available_pool:
+ # find a machine with minimum uses
+ uses = attrgetter('uses')
+
+ mach = min(available_pool, key=uses)
+
+ if mach_spec.preferred_machines:
+ preferred_pool = [m
+ for m in available_pool
+ if m.hostname in mach_spec.preferred_machines]
+ if preferred_pool:
+ mach = min(preferred_pool, key=uses)
+
+ mach.Acquire(mach_spec.lock_required)
+
+ return mach
+
+ def GetMachines(self, required_machines):
+ """Acquire machines for use by a job."""
+
+ with self._lock:
+ acquired_machines = [self._GetMachine(ms) for ms in required_machines]
+
+ if not all(acquired_machines):
+ # Roll back acquires
+ while acquired_machines:
+ mach = acquired_machines.pop()
+ if mach:
+ mach.Release()
+
+ return acquired_machines
+
+ def GetMachineList(self):
+ with self._lock:
+ return copy.deepcopy(self._machine_pool)
+
+ def ReturnMachines(self, machines):
+ with self._lock:
+ for m in machines:
+ m.Release()
+
+ def __str__(self):
+ return str(self._machine_pool)
diff --git a/automation/server/machine_manager_test.py b/automation/server/machine_manager_test.py
new file mode 100755
index 00000000..67fdcc2b
--- /dev/null
+++ b/automation/server/machine_manager_test.py
@@ -0,0 +1,32 @@
+#!/usr/bin/python
+#
+# Copyright 2010 Google Inc. All Rights Reserved.
+
+__author__ = 'asharif@google.com (Ahmad Sharif)'
+
+import unittest
+from automation.common import machine
+from automation.server import machine_manager
+
+
+class MachineManagerTest(unittest.TestCase):
+
+ def setUp(self):
+ self.machine_manager = machine_manager.MachineManager()
+
+ def testPrint(self):
+ print self.machine_manager
+
+ def testGetLinuxBox(self):
+ mach_spec_list = [machine.MachineSpecification(os='linux')]
+ machines = self.machine_manager.GetMachines(mach_spec_list)
+ self.assertTrue(machines)
+
+ def testGetChromeOSBox(self):
+ mach_spec_list = [machine.MachineSpecification(os='chromeos')]
+ machines = self.machine_manager.GetMachines(mach_spec_list)
+ self.assertTrue(machines)
+
+
+if __name__ == '__main__':
+ unittest.main()
diff --git a/automation/server/monitor/__init__.py b/automation/server/monitor/__init__.py
new file mode 100644
index 00000000..8b137891
--- /dev/null
+++ b/automation/server/monitor/__init__.py
@@ -0,0 +1 @@
+
diff --git a/automation/server/monitor/dashboard.py b/automation/server/monitor/dashboard.py
new file mode 100644
index 00000000..f6befed8
--- /dev/null
+++ b/automation/server/monitor/dashboard.py
@@ -0,0 +1,259 @@
+# Copyright 2011 Google Inc. All Rights Reserved.
+#
+
+__author__ = 'kbaclawski@google.com (Krystian Baclawski)'
+
+from collections import namedtuple
+import glob
+import gzip
+import os.path
+import pickle
+import time
+import xmlrpclib
+
+from django import forms
+from django.http import HttpResponseRedirect
+from django.shortcuts import render_to_response
+from django.template import Context
+from django.views import static
+
+Link = namedtuple('Link', 'href name')
+
+
+def GetServerConnection():
+ return xmlrpclib.Server('http://localhost:8000')
+
+
+def MakeDefaultContext(*args):
+ context = Context({'links': [
+ Link('/job-group', 'Job Groups'), Link('/machine', 'Machines')
+ ]})
+
+ for arg in args:
+ context.update(arg)
+
+ return context
+
+
+class JobInfo(object):
+
+ def __init__(self, job_id):
+ self._job = pickle.loads(GetServerConnection().GetJob(job_id))
+
+ def GetAttributes(self):
+ job = self._job
+
+ group = [Link('/job-group/%d' % job.group.id, job.group.label)]
+
+ predecessors = [Link('/job/%d' % pred.id, pred.label)
+ for pred in job.predecessors]
+
+ successors = [Link('/job/%d' % succ.id, succ.label)
+ for succ in job.successors]
+
+ machines = [Link('/machine/%s' % mach.hostname, mach.hostname)
+ for mach in job.machines]
+
+ logs = [Link('/job/%d/log' % job.id, 'Log')]
+
+ commands = enumerate(job.PrettyFormatCommand().split('\n'), start=1)
+
+ return {'text': [('Label', job.label), ('Directory', job.work_dir)],
+ 'link': [('Group', group), ('Predecessors', predecessors),
+ ('Successors', successors), ('Machines', machines),
+ ('Logs', logs)],
+ 'code': [('Command', commands)]}
+
+ def GetTimeline(self):
+ return [{'started': evlog.GetTimeStartedFormatted(),
+ 'state_from': evlog.event.from_,
+ 'state_to': evlog.event.to_,
+ 'elapsed': evlog.GetTimeElapsedRounded()}
+ for evlog in self._job.timeline.GetTransitionEventHistory()]
+
+ def GetLog(self):
+ log_path = os.path.join(self._job.logs_dir,
+ '%s.gz' % self._job.log_filename_prefix)
+
+ try:
+ log = gzip.open(log_path, 'r')
+ except IOError:
+ content = []
+ else:
+ # There's a good chance that file is not closed yet, so EOF handling
+ # function and CRC calculation will fail, thus we need to monkey patch the
+ # _read_eof method.
+ log._read_eof = lambda: None
+
+ def SplitLine(line):
+ prefix, msg = line.split(': ', 1)
+ datetime, stream = prefix.rsplit(' ', 1)
+
+ return datetime, stream, msg
+
+ content = map(SplitLine, log.readlines())
+ finally:
+ log.close()
+
+ return content
+
+
+class JobGroupInfo(object):
+
+ def __init__(self, job_group_id):
+ self._job_group = pickle.loads(GetServerConnection().GetJobGroup(
+ job_group_id))
+
+ def GetAttributes(self):
+ group = self._job_group
+
+ home_dir = [Link('/job-group/%d/files/' % group.id, group.home_dir)]
+
+ return {'text': [('Label', group.label),
+ ('Time submitted', time.ctime(group.time_submitted)),
+ ('State', group.status),
+ ('Cleanup on completion', group.cleanup_on_completion),
+ ('Cleanup on failure', group.cleanup_on_failure)],
+ 'link': [('Directory', home_dir)]}
+
+ def _GetJobStatus(self, job):
+ status_map = {'SUCCEEDED': 'success', 'FAILED': 'failure'}
+ return status_map.get(str(job.status), None)
+
+ def GetJobList(self):
+ return [{'id': job.id,
+ 'label': job.label,
+ 'state': job.status,
+ 'status': self._GetJobStatus(job),
+ 'elapsed': job.timeline.GetTotalTime()}
+ for job in self._job_group.jobs]
+
+ def GetHomeDirectory(self):
+ return self._job_group.home_dir
+
+ def GetReportList(self):
+ job_dir_pattern = os.path.join(self._job_group.home_dir, 'job-*')
+
+ filenames = []
+
+ for job_dir in glob.glob(job_dir_pattern):
+ filename = os.path.join(job_dir, 'report.html')
+
+ if os.access(filename, os.F_OK):
+ filenames.append(filename)
+
+ reports = []
+
+ for filename in sorted(filenames, key=lambda f: os.stat(f).st_ctime):
+ try:
+ with open(filename, 'r') as report:
+ reports.append(report.read())
+ except IOError:
+ pass
+
+ return reports
+
+
+class JobGroupListInfo(object):
+
+ def __init__(self):
+ self._all_job_groups = pickle.loads(GetServerConnection().GetAllJobGroups())
+
+ def _GetJobGroupState(self, group):
+ return str(group.status)
+
+ def _GetJobGroupStatus(self, group):
+ status_map = {'SUCCEEDED': 'success', 'FAILED': 'failure'}
+ return status_map.get(self._GetJobGroupState(group), None)
+
+ def GetList(self):
+ return [{'id': group.id,
+ 'label': group.label,
+ 'submitted': time.ctime(group.time_submitted),
+ 'state': self._GetJobGroupState(group),
+ 'status': self._GetJobGroupStatus(group)}
+ for group in self._all_job_groups]
+
+ def GetLabelList(self):
+ return sorted(set(group.label for group in self._all_job_groups))
+
+
+def JobPageHandler(request, job_id):
+ job = JobInfo(int(job_id))
+
+ ctx = MakeDefaultContext({
+ 'job_id': job_id,
+ 'attributes': job.GetAttributes(),
+ 'timeline': job.GetTimeline()
+ })
+
+ return render_to_response('job.html', ctx)
+
+
+def LogPageHandler(request, job_id):
+ job = JobInfo(int(job_id))
+
+ ctx = MakeDefaultContext({'job_id': job_id, 'log_lines': job.GetLog()})
+
+ return render_to_response('job_log.html', ctx)
+
+
+def JobGroupPageHandler(request, job_group_id):
+ group = JobGroupInfo(int(job_group_id))
+
+ ctx = MakeDefaultContext({
+ 'group_id': job_group_id,
+ 'attributes': group.GetAttributes(),
+ 'job_list': group.GetJobList(),
+ 'reports': group.GetReportList()
+ })
+
+ return render_to_response('job_group.html', ctx)
+
+
+def JobGroupFilesPageHandler(request, job_group_id, path):
+ group = JobGroupInfo(int(job_group_id))
+
+ return static.serve(request,
+ path,
+ document_root=group.GetHomeDirectory(),
+ show_indexes=True)
+
+
+class FilterJobGroupsForm(forms.Form):
+ label = forms.ChoiceField(label='Filter by label:', required=False)
+
+
+def JobGroupListPageHandler(request):
+ groups = JobGroupListInfo()
+ group_list = groups.GetList()
+
+ field = FilterJobGroupsForm.base_fields['label']
+ field.choices = [('*', '--- no filtering ---')]
+ field.choices.extend([(label, label) for label in groups.GetLabelList()])
+
+ if request.method == 'POST':
+ form = FilterJobGroupsForm(request.POST)
+
+ if form.is_valid():
+ label = form.cleaned_data['label']
+
+ if label != '*':
+ group_list = [group for group in group_list if group['label'] == label]
+ else:
+ form = FilterJobGroupsForm({'initial': '*'})
+
+ ctx = MakeDefaultContext({'filter': form, 'groups': group_list})
+
+ return render_to_response('job_group_list.html', ctx)
+
+
+def MachineListPageHandler(request):
+ machine_list = pickle.loads(GetServerConnection().GetMachineList())
+
+ return render_to_response('machine_list.html',
+ MakeDefaultContext({'machines': machine_list}))
+
+
+def DefaultPageHandler(request):
+ return HttpResponseRedirect('/job-group')
diff --git a/automation/server/monitor/manage.py b/automation/server/monitor/manage.py
new file mode 100755
index 00000000..57deb5c2
--- /dev/null
+++ b/automation/server/monitor/manage.py
@@ -0,0 +1,20 @@
+#!/usr/bin/python
+#
+# Copyright 2011 Google Inc. All Rights Reserved.
+#
+
+__author__ = 'kbaclawski@google.com (Krystian Baclawski)'
+
+from django.core.management import execute_manager
+
+try:
+ import settings # Assumed to be in the same directory.
+except ImportError:
+ import sys
+
+ sys.stderr.write('Error: Can\'t find settings.py file in the directory '
+ 'containing %r.' % __file__)
+ sys.exit(1)
+
+if __name__ == '__main__':
+ execute_manager(settings)
diff --git a/automation/server/monitor/settings.py b/automation/server/monitor/settings.py
new file mode 100644
index 00000000..8cd20e35
--- /dev/null
+++ b/automation/server/monitor/settings.py
@@ -0,0 +1,49 @@
+# Copyright 2011 Google Inc. All Rights Reserved.
+#
+# Django settings for monitor project.
+#
+# For explanation look here: http://docs.djangoproject.com/en/dev/ref/settings
+#
+
+__author__ = 'kbaclawski@google.com (Krystian Baclawski)'
+
+import os.path
+import sys
+
+# Path to the root of application. It's a custom setting, not related to Django.
+ROOT_PATH = os.path.dirname(os.path.realpath(sys.argv[0]))
+
+# Print useful information during runtime if possible.
+DEBUG = True
+TEMPLATE_DEBUG = DEBUG
+
+# Sqlite3 database configuration, though we don't use it right now.
+DATABASE_ENGINE = 'sqlite3'
+DATABASE_NAME = os.path.join(ROOT_PATH, 'monitor.db')
+
+# Local time zone for this installation.
+TIME_ZONE = 'America/Los_Angeles'
+
+# Language code for this installation.
+LANGUAGE_CODE = 'en-us'
+
+# If you set this to False, Django will make some optimizations so as not
+# to load the internationalization machinery.
+USE_I18N = True
+
+# Absolute path to the directory that holds media.
+MEDIA_ROOT = os.path.join(ROOT_PATH, 'static') + '/'
+
+# URL that handles the media served from MEDIA_ROOT. Make sure to use a
+# trailing slash if there is a path component (optional in other cases).
+MEDIA_URL = '/static/'
+
+# Used to provide a seed in secret-key hashing algorithms. Make this unique,
+# and don't share it with anybody.
+SECRET_KEY = '13p5p_4q91*8@yo+tvvt#2k&6#d_&e_zvxdpdil53k419i5sop'
+
+# A string representing the full Python import path to your root URLconf.
+ROOT_URLCONF = 'monitor.urls'
+
+# List of locations of the template source files, in search order.
+TEMPLATE_DIRS = (os.path.join(ROOT_PATH, 'templates'),)
diff --git a/automation/server/monitor/start.sh b/automation/server/monitor/start.sh
new file mode 100755
index 00000000..4fc53bef
--- /dev/null
+++ b/automation/server/monitor/start.sh
@@ -0,0 +1,7 @@
+#!/bin/bash
+#
+# Copyright 2011 Google Inc. All Rights Reserved.
+# Author: kbaclawski@google.com (Krystian Baclawski)
+#
+
+./manage.py runserver "$HOSTNAME":8080
diff --git a/automation/server/monitor/static/style.css b/automation/server/monitor/static/style.css
new file mode 100644
index 00000000..b571b059
--- /dev/null
+++ b/automation/server/monitor/static/style.css
@@ -0,0 +1,101 @@
+* { font-family: sans-serif; }
+
+.left { text-align: left; }
+.right { text-align: right; }
+
+.code { font-family: monospace; text-align: left; }
+.line1 { background-color: Gainsboro; }
+.line2 { background-color: WhiteSmoke; }
+
+.title { margin-bottom: 0.25em; }
+
+.success { background-color: LightGreen; }
+.failure { background-color: LightPink; }
+
+pre.code { margin: 0px; }
+
+div.header p.title {
+ border: 1px solid black;
+ font-size: 32px;
+ font-style: bold;
+ background-color: LightBlue;
+ text-align: center;
+ margin: 0px;
+ padding: 10px;
+ font-weight: bold;
+}
+
+div.links {
+ background-color: Azure;
+ margin-top: 2px;
+ padding: 8px 4px 8px 4px;
+ border: solid 1px;
+}
+
+div.content {
+ margin-top: 2px;
+ padding: 8px;
+ border: solid 1px;
+}
+
+div.content p.title {
+ font-size: 28px;
+ text-align: left;
+ margin: 0px;
+ margin-bottom: 8px;
+ padding: 12px;
+ font-weight: bold;
+}
+
+table { border-collapse: collapse; }
+td, th { text-align: center; }
+
+table.list td, th { padding: 3px 8px 2px 8px; border:1px solid black; }
+table.list td { font-family: monospace; }
+table.list th { background-color: LightGray; }
+
+table.attributes td { text-align: left; }
+table.attributes > tbody > tr > td:first-child { font-family: sans-serif; }
+
+table.raw { border-style: none; }
+table.raw td {
+ padding: 0em 0.5em 0em 0.5em;
+ border-style: none;
+ vertical-align: top;
+ text-align: right;
+ font-family: monospace;
+}
+table.raw > tbody > tr > td:first-child { border-left: 0px; }
+table.raw > tbody > tr > td { border-left: 1px solid; }
+
+a.button {
+ background-color: PeachPuff;
+ text-decoration: underline;
+ text-align: center;
+ color: Black;
+ padding: 4px;
+ border: solid 1px;
+}
+
+a.small {
+ padding: 2px 4px 2px 4px;
+ font-size: small;
+ border-color: Gray;
+ background-color: PapayaWhip;
+}
+
+a.button:hover { background-color: LightYellow; }
+a.button:active { background-color: Yellow; }
+
+a.column {
+ border-style: none;
+ display: block;
+ margin: -3px -8px -2px -8px;
+}
+
+div.warning {
+ background-color: MistyRose;
+ border: 1px solid Crimson;
+ padding: 0.5em;
+ font-size: x-large;
+}
diff --git a/automation/server/monitor/templates/base.html b/automation/server/monitor/templates/base.html
new file mode 100644
index 00000000..95ffc222
--- /dev/null
+++ b/automation/server/monitor/templates/base.html
@@ -0,0 +1,30 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+ <head>
+ <link rel="stylesheet" href="/static/style.css" />
+ <title>{% block title %}Automation Dashboard{% endblock %}</title>
+ </head>
+
+ <body>
+ <div class="header">
+ {% block header %}
+ <p class="title">Automation Dashboard</p>
+ {% endblock %}
+ </div>
+
+ <div class="links">
+ <span>Subpages:</span>
+ {% block links %}
+ {% for link in links %}
+ <a class="button" href="{{ link.href }}">{{ link.name }}</a>
+ {% endfor %}
+ {% endblock %}
+ </div>
+
+ <div class="content">
+ {% block content %}
+ {% endblock %}
+ </div>
+ </body>
+</html>
diff --git a/automation/server/monitor/templates/job.html b/automation/server/monitor/templates/job.html
new file mode 100644
index 00000000..90acd969
--- /dev/null
+++ b/automation/server/monitor/templates/job.html
@@ -0,0 +1,29 @@
+{% extends "base.html" %}
+
+{% block content %}
+<h1 class="title">Job {{ job_id }}</h1>
+
+<h2 class="title">General information</h2>
+{% include "snippet_attribute_table.html" %}
+
+<h2 class="title">Timeline of status events</h2>
+<table class="list">
+ <tbody>
+ <tr>
+ <th>Started</th>
+ <th>From State</th>
+ <th>To State</th>
+ <th>Elapsed</th>
+ </tr>
+ {% for entry in timeline %}
+ <tr>
+ <td>{{ entry.started }}</td>
+ <td>{{ entry.state_from }}</td>
+ <td>{{ entry.state_to }}</td>
+ <td>{{ entry.elapsed }}</td>
+ </tr>
+ {% endfor %}
+ </tbody>
+</table>
+
+{% endblock %}
diff --git a/automation/server/monitor/templates/job_group.html b/automation/server/monitor/templates/job_group.html
new file mode 100644
index 00000000..b6ed8ea8
--- /dev/null
+++ b/automation/server/monitor/templates/job_group.html
@@ -0,0 +1,46 @@
+{% extends "base.html" %}
+
+{% block content %}
+<h1 class="title">Job Group {{ group_id }}</h1>
+
+<h2 class="title">General information</h2>
+{% include "snippet_attribute_table.html" %}
+
+<h2 class="title">Job Listing</h2>
+<table class="list">
+ <tbody>
+ <tr>
+ <th>Job ID</th>
+ <th>Label</th>
+ <th>Turnaround Time</th>
+ <th>State</th>
+ </tr>
+ {% for job in job_list %}
+ <tr>
+ <td>
+ <a class="button column" href="/job/{{ job.id }}">{{ job.id }}</a>
+ </td>
+ <td>{{ job.label }}</td>
+ <td>{{ job.elapsed }}</td>
+ {% if job.status %}
+ <td class="{{ job.status }}">{{ job.state }}</td>
+ {% else %}
+ <td>{{ job.state }}</td>
+ {% endif %}
+ </tr>
+ {% endfor %}
+ </tbody>
+</table>
+
+<h2 class="title">Report</h2>
+{% if reports %}
+{% autoescape off %}
+{% for report in reports %}
+{{ report }}
+{% endfor %}
+{% endautoescape %}
+{% else %}
+<div class="warning">No reports found!</div>
+{% endif %}
+
+{% endblock %}
diff --git a/automation/server/monitor/templates/job_group_list.html b/automation/server/monitor/templates/job_group_list.html
new file mode 100644
index 00000000..b82fa730
--- /dev/null
+++ b/automation/server/monitor/templates/job_group_list.html
@@ -0,0 +1,35 @@
+{% extends "base.html" %}
+
+{% block content %}
+<p class="title">Job Groups</p>
+
+<form action="/job-group" method="post">
+{{ filter.as_p }}
+<p><input type="submit" value="Filter!" /></p>
+</form>
+
+<table class="list">
+ <tbody>
+ <tr>
+ <th>Group ID</th>
+ <th>Label</th>
+ <th>Time Submitted</th>
+ <th>Status</th>
+ </tr>
+ {% for group in groups %}
+ <tr>
+ <td>
+ <a class="button column" href="/job-group/{{ group.id }}">{{ group.id }}</a>
+ </td>
+ <td>{{ group.label }}</td>
+ <td>{{ group.submitted }}</td>
+ {% if group.status %}
+ <td class="{{ group.status }}">{{ group.state }}</td>
+ {% else %}
+ <td>{{ group.state }}</td>
+ {% endif %}
+ </tr>
+ {% endfor %}
+ </tbody>
+</table>
+{% endblock %}
diff --git a/automation/server/monitor/templates/job_log.html b/automation/server/monitor/templates/job_log.html
new file mode 100644
index 00000000..937b21b0
--- /dev/null
+++ b/automation/server/monitor/templates/job_log.html
@@ -0,0 +1,20 @@
+{% extends "base.html" %}
+
+{% block content %}
+<h1 class="title">Job {{ job_id }}</h1>
+
+<h2 class="title">Command output:</h2>
+
+<table class="raw">
+<tbody>
+{% for datetime, stream, line in log_lines %}
+<tr class="{% cycle 'line1' 'line2' %}">
+ <td>{{ datetime }}</td>
+ <td>{{ stream }}</td>
+ <td><pre class="code">{{ line|wordwrap:80 }}</pre></td>
+</tr>
+{% endfor %}
+</tbody>
+</table>
+
+{% endblock %}
diff --git a/automation/server/monitor/templates/machine_list.html b/automation/server/monitor/templates/machine_list.html
new file mode 100644
index 00000000..f81422d3
--- /dev/null
+++ b/automation/server/monitor/templates/machine_list.html
@@ -0,0 +1,39 @@
+{% extends "base.html" %}
+
+{% block content %}
+<p class="title">Machines</p>
+
+<table class="list">
+<tbody>
+<tr>
+ <th>Hostname</th>
+ <th>Label</th>
+ <th>CPU</th>
+ <th>Cores</th>
+ <th>Operating System</th>
+ <th>Jobs Running</th>
+ <th>Locked</th>
+</tr>
+{% for machine in machines %}
+<tr>
+ <td>
+ <a class="button column" href="/machine/{{ machine.hostname }}">
+ {{ machine.hostname }}
+ </a>
+ </td>
+ <td>{{ machine.label }}</td>
+ <td>{{ machine.cpu }}</td>
+ <td>{{ machine.cores }}</td>
+ <td>{{ machine.os }}</td>
+ <td>{{ machine.uses }}</td>
+ {% if machine.locked %}
+ <td class="failure">Yes</td>
+ {% else %}
+ <td class="success">No</td>
+ {% endif %}
+</tr>
+{% endfor %}
+</tbody>
+</table>
+
+{% endblock %}
diff --git a/automation/server/monitor/templates/snippet_attribute_table.html b/automation/server/monitor/templates/snippet_attribute_table.html
new file mode 100644
index 00000000..24bacc17
--- /dev/null
+++ b/automation/server/monitor/templates/snippet_attribute_table.html
@@ -0,0 +1,36 @@
+<table class="list attributes">
+ <tbody>
+ <tr>
+ <th>Attribute</th>
+ <th>Value</th>
+ </tr>
+ {% for name, value in attributes.text %}
+ <tr>
+ <td>{{ name }}</td>
+ <td>{{ value }}</td>
+ </tr>
+ {% endfor %}
+
+ {% for name, links in attributes.link %}
+ <tr>
+ <td>{{ name }}</td>
+ <td>
+ {% if links %}
+ {% for link in links %}
+ <a class="button small" href="{{ link.href }}">{{ link.name }}</a>
+ {% endfor %}
+ {% else %}
+ None
+ {% endif %}
+ </td>
+ </tr>
+ {% endfor %}
+
+ {% for name, code in attributes.code %}
+ <tr>
+ <td>{{ name }}</td>
+ <td>{% include "snippet_code.html" %}</td>
+ </tr>
+ {% endfor %}
+ </tbody>
+</table>
diff --git a/automation/server/monitor/templates/snippet_code.html b/automation/server/monitor/templates/snippet_code.html
new file mode 100644
index 00000000..281754d6
--- /dev/null
+++ b/automation/server/monitor/templates/snippet_code.html
@@ -0,0 +1,10 @@
+<table class="raw">
+<tbody>
+{% for num, line in code %}
+<tr class="{% cycle 'line1' 'line2' %}">
+ <td>{{ num }}</td>
+ <td><pre class="code">{{ line|wordwrap:120 }}</pre></td>
+</tr>
+{% endfor %}
+</tbody>
+</table>
diff --git a/automation/server/monitor/templates/snippet_links.html b/automation/server/monitor/templates/snippet_links.html
new file mode 100644
index 00000000..f19fa6e5
--- /dev/null
+++ b/automation/server/monitor/templates/snippet_links.html
@@ -0,0 +1,7 @@
+{% if param %}
+{% for link in param %}
+<a class="button small" href="{{ link.href }}">{{ link.name }}</a>
+{% endfor %}
+{% else %}
+None
+{% endif %}
diff --git a/automation/server/monitor/urls.py b/automation/server/monitor/urls.py
new file mode 100644
index 00000000..1a6b2485
--- /dev/null
+++ b/automation/server/monitor/urls.py
@@ -0,0 +1,21 @@
+# Copyright 2011 Google Inc. All Rights Reserved.
+#
+
+__author__ = 'kbaclawski@google.com (Krystian Baclawski)'
+
+from django.conf import settings
+from django.conf.urls.defaults import patterns
+
+urlpatterns = patterns(
+ 'dashboard', (r'^job-group$', 'JobGroupListPageHandler'),
+ (r'^machine$', 'MachineListPageHandler'),
+ (r'^job/(?P<job_id>\d+)/log$', 'LogPageHandler'),
+ (r'^job/(?P<job_id>\d+)$', 'JobPageHandler'), (
+ r'^job-group/(?P<job_group_id>\d+)/files/(?P<path>.*)$',
+ 'JobGroupFilesPageHandler'),
+ (r'^job-group/(?P<job_group_id>\d+)$', 'JobGroupPageHandler'),
+ (r'^$', 'DefaultPageHandler'))
+
+urlpatterns += patterns('',
+ (r'^static/(?P<path>.*)$', 'django.views.static.serve',
+ {'document_root': settings.MEDIA_ROOT}))
diff --git a/automation/server/server.py b/automation/server/server.py
new file mode 100755
index 00000000..f02a1d0f
--- /dev/null
+++ b/automation/server/server.py
@@ -0,0 +1,125 @@
+#!/usr/bin/python
+#
+# Copyright 2010 Google Inc. All Rights Reserved.
+
+import logging
+import optparse
+import pickle
+import signal
+from SimpleXMLRPCServer import SimpleXMLRPCServer
+import sys
+
+from automation.common import logger
+from automation.common.command_executer import CommandExecuter
+from automation.server import machine_manager
+from automation.server.job_group_manager import JobGroupManager
+from automation.server.job_manager import JobManager
+
+
+class Server(object):
+ """Plays a role of external interface accessible over XMLRPC."""
+
+ def __init__(self, machines_file=None, dry_run=False):
+ """Default constructor.
+
+ Args:
+ machines_file: Path to file storing a list of machines.
+ dry_run: If True, the server only simulates command execution.
+ """
+ CommandExecuter.Configure(dry_run)
+
+ self.job_manager = JobManager(
+ machine_manager.MachineManager.FromMachineListFile(
+ machines_file or machine_manager.DEFAULT_MACHINES_FILE))
+
+ self.job_group_manager = JobGroupManager(self.job_manager)
+
+ self._logger = logging.getLogger(self.__class__.__name__)
+
+ def ExecuteJobGroup(self, job_group, dry_run=False):
+ job_group = pickle.loads(job_group)
+ self._logger.info('Received ExecuteJobGroup(%r, dry_run=%s) request.',
+ job_group, dry_run)
+
+ for job in job_group.jobs:
+ job.dry_run = dry_run
+ return self.job_group_manager.AddJobGroup(job_group)
+
+ def GetAllJobGroups(self):
+ self._logger.info('Received GetAllJobGroups() request.')
+ return pickle.dumps(self.job_group_manager.GetAllJobGroups())
+
+ def KillJobGroup(self, job_group_id):
+ self._logger.info('Received KillJobGroup(%d) request.', job_group_id)
+ self.job_group_manager.KillJobGroup(pickle.loads(job_group_id))
+
+ def GetJobGroup(self, job_group_id):
+ self._logger.info('Received GetJobGroup(%d) request.', job_group_id)
+
+ return pickle.dumps(self.job_group_manager.GetJobGroup(job_group_id))
+
+ def GetJob(self, job_id):
+ self._logger.info('Received GetJob(%d) request.', job_id)
+
+ return pickle.dumps(self.job_manager.GetJob(job_id))
+
+ def GetMachineList(self):
+ self._logger.info('Received GetMachineList() request.')
+
+ return pickle.dumps(self.job_manager.machine_manager.GetMachineList())
+
+ def StartServer(self):
+ self.job_manager.StartJobManager()
+
+ def StopServer(self):
+ self.job_manager.StopJobManager()
+ self.job_manager.join()
+
+
+def GetServerOptions():
+ """Get server's settings from command line options."""
+ parser = optparse.OptionParser()
+ parser.add_option('-m',
+ '--machines-file',
+ dest='machines_file',
+ help='The location of the file '
+ 'containing the machines database',
+ default=machine_manager.DEFAULT_MACHINES_FILE)
+ parser.add_option('-n',
+ '--dry-run',
+ dest='dry_run',
+ help='Start the server in dry-run mode, where jobs will '
+ 'not actually be executed.',
+ action='store_true',
+ default=False)
+ return parser.parse_args()[0]
+
+
+def Main():
+ logger.SetUpRootLogger(filename='server.log', level=logging.DEBUG)
+
+ options = GetServerOptions()
+ server = Server(options.machines_file, options.dry_run)
+ server.StartServer()
+
+ def _HandleKeyboardInterrupt(*_):
+ server.StopServer()
+ sys.exit(1)
+
+ signal.signal(signal.SIGINT, _HandleKeyboardInterrupt)
+
+ try:
+ xmlserver = SimpleXMLRPCServer(
+ ('localhost', 8000),
+ allow_none=True,
+ logRequests=False)
+ xmlserver.register_instance(server)
+ xmlserver.serve_forever()
+ except Exception as ex:
+ logging.error(ex)
+ server.StopServer()
+ sys.exit(1)
+
+
+if __name__ == '__main__':
+ Main()
diff --git a/automation/server/server_test.py b/automation/server/server_test.py
new file mode 100755
index 00000000..bcf1b9f5
--- /dev/null
+++ b/automation/server/server_test.py
@@ -0,0 +1,26 @@
+#!/usr/bin/python
+#
+# Copyright 2010 Google Inc. All Rights Reserved.
+"""Machine manager unittest.
+
+MachineManagerTest tests MachineManager.
+"""
+
+__author__ = 'asharif@google.com (Ahmad Sharif)'
+
+import server
+import unittest
+
+
+class ServerTest(unittest.TestCase):
+
+ def setUp(self):
+ pass
+
+ def testGetAllJobs(self):
+ s = server.Server()
+ print s.GetAllJobs()
+
+
+if __name__ == '__main__':
+ unittest.main()
diff --git a/automation/server/test_pool.csv b/automation/server/test_pool.csv
new file mode 100644
index 00000000..b0700c9b
--- /dev/null
+++ b/automation/server/test_pool.csv
@@ -0,0 +1,4 @@
+hostname,label,cpu,cores,os,username
+"chrotomation.mtv.corp.google.com","pc-workstation","core2duo",8,"linux","mobiletc-prebuild"
+"chromeos-test1.mtv.corp.google.com","cr48","atom",1,"chromeos","chromeos"
+"chromeos-test2.mtv.corp.google.com","cr48","atom",1,"chromeos","chromeos"
diff --git a/bestflags/README b/bestflags/README
new file mode 100644
index 00000000..d9fc5ba6
--- /dev/null
+++ b/bestflags/README
@@ -0,0 +1,21 @@
+There is a vast set of compiler flags that can be used to build Chrome for
+ChromeOS. This option space has not been explored before. This directory
+provides an infrastructure to build Chrome with certain flag combinations, test
+it, gather results and prepare a fresh batch of flags to repeat the process. The
+infrastructure supports plug-in modules that implement algorithms for searching
+in the N-Dimensional space of compiler flag combinations.
+
+Currently, three different algorithms are built, namely genetic algorithm, hill
+climbing and negative flag iterative elimination. The module 'testing_batch.py'
+contains the testing of these algorithms.
+
+To run the script, type in python testing_batch.py.
+
+For further information about the project, please refer to the design document
+at:
+
+https://docs.google.com/a/google.com/document/d/19iE9rhszTWjISBpKJ3qK8uBCoUjs0o4etWDRkyEeUOw/
+
+There is also a presentation slide available at:
+
+https://docs.google.com/a/google.com/presentation/d/13rS9jALXffbP48YsF0-bsqovrVBfgzEud4e-XpavOdA/edit#slide=id.gf880fcd4_180
diff --git a/bestflags/example_algorithms.py b/bestflags/example_algorithms.py
new file mode 100644
index 00000000..9775d491
--- /dev/null
+++ b/bestflags/example_algorithms.py
@@ -0,0 +1,196 @@
+# Copyright (c) 2013 The Chromium OS Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+"""An example main file running the algorithms.
+
+Part of the Chrome build flags optimization.
+
+An example use of the framework. It parses the input json configuration file.
+Then it initiates the variables of the generation. Finally, it sets up the
+processes for different modules and runs the experiment.
+"""
+
+__author__ = 'yuhenglong@google.com (Yuheng Long)'
+
+import json
+import multiprocessing
+from optparse import OptionParser
+import sys
+
+import flags
+from genetic_algorithm import GAGeneration
+from pipeline_process import PipelineProcess
+import pipeline_worker
+from steering import Steering
+from task import BUILD_STAGE
+from task import Task
+from task import TEST_STAGE
+import testing_batch
+
+parser = OptionParser()
+
+parser.add_option('-f',
+ '--file',
+ dest='filename',
+ help='configuration file FILE input',
+ metavar='FILE')
+
+# The meta data for the genetic algorithm.
+BUILD_CMD = 'BUILD_CMD'
+TEST_CMD = 'TEST_CMD'
+OUTPUT = 'OUTPUT'
+DEFAULT_OUTPUT = 'output'
+CONF = 'CONF'
+DEFAULT_CONF = 'conf'
+NUM_BUILDER = 'NUM_BUILDER'
+DEFAULT_NUM_BUILDER = 1
+NUM_TESTER = 'NUM_TESTER'
+DEFAULT_NUM_TESTER = 1
+STOP_THRESHOLD = 'STOP_THRESHOLD'
+DEFAULT_STOP_THRESHOLD = 1
+NUM_CHROMOSOMES = 'NUM_CHROMOSOMES'
+DEFAULT_NUM_CHROMOSOMES = 20
+NUM_TRIALS = 'NUM_TRIALS'
+DEFAULT_NUM_TRIALS = 20
+MUTATION_RATE = 'MUTATION_RATE'
+DEFAULT_MUTATION_RATE = 0.01
+
+
+def _ProcessGA(meta_data):
+ """Set up the meta data for the genetic algorithm.
+
+ Args:
+ meta_data: the meta data for the genetic algorithm.
+ """
+ assert BUILD_CMD in meta_data
+ build_cmd = meta_data[BUILD_CMD]
+
+ assert TEST_CMD in meta_data
+ test_cmd = meta_data[TEST_CMD]
+
+ if OUTPUT not in meta_data:
+ output_file = DEFAULT_OUTPUT
+ else:
+ output_file = meta_data[OUTPUT]
+
+ if CONF not in meta_data:
+ conf_file = DEFAULT_CONF
+ else:
+ conf_file = meta_data[CONF]
+
+ if NUM_BUILDER not in meta_data:
+ num_builders = DEFAULT_NUM_BUILDER
+ else:
+ num_builders = meta_data[NUM_BUILDER]
+
+ if NUM_TESTER not in meta_data:
+ num_testers = DEFAULT_NUM_TESTER
+ else:
+ num_testers = meta_data[NUM_TESTER]
+
+ if STOP_THRESHOLD not in meta_data:
+ stop_threshold = DEFAULT_STOP_THRESHOLD
+ else:
+ stop_threshold = meta_data[STOP_THRESHOLD]
+
+ if NUM_CHROMOSOMES not in meta_data:
+ num_chromosomes = DEFAULT_NUM_CHROMOSOMES
+ else:
+ num_chromosomes = meta_data[NUM_CHROMOSOMES]
+
+ if NUM_TRIALS not in meta_data:
+ num_trials = DEFAULT_NUM_TRIALS
+ else:
+ num_trials = meta_data[NUM_TRIALS]
+
+ if MUTATION_RATE not in meta_data:
+ mutation_rate = DEFAULT_MUTATION_RATE
+ else:
+ mutation_rate = meta_data[MUTATION_RATE]
+
+ specs = flags.ReadConf(conf_file)
+
+ # Initiate the build/test command and the log directory.
+ Task.InitLogCommand(build_cmd, test_cmd, output_file)
+
+ # Initiate the build/test command and the log directory.
+ GAGeneration.InitMetaData(stop_threshold, num_chromosomes, num_trials, specs,
+ mutation_rate)
+
+ # Generate the initial generations.
+ generation_tasks = testing_batch.GenerateRandomGATasks(specs, num_chromosomes,
+ num_trials)
+ generations = [GAGeneration(generation_tasks, set([]), 0)]
+
+ # Execute the experiment.
+ _StartExperiment(num_builders, num_testers, generations)
+
+
+def _ParseJson(file_name):
+ """Parse the input json file.
+
+ Parse the input json file and call the proper function to perform the
+ algorithms.
+
+ Args:
+ file_name: the input json file name.
+ """
+
+ experiments = json.load(open(file_name))
+
+ for experiment in experiments:
+ if experiment == 'GA':
+ # An GA experiment
+ _ProcessGA(experiments[experiment])
+
+
+def _StartExperiment(num_builders, num_testers, generations):
+ """Set up the experiment environment and execute the framework.
+
+ Args:
+ num_builders: number of concurrent builders.
+ num_testers: number of concurrent testers.
+ generations: the initial generation for the framework.
+ """
+
+ manager = multiprocessing.Manager()
+
+ # The queue between the steering algorithm and the builder.
+ steering_build = manager.Queue()
+ # The queue between the builder and the tester.
+ build_test = manager.Queue()
+ # The queue between the tester and the steering algorithm.
+ test_steering = manager.Queue()
+
+ # Set up the processes for the builder, tester and steering algorithm module.
+ build_process = PipelineProcess(num_builders, 'builder', {}, BUILD_STAGE,
+ steering_build, pipeline_worker.Helper,
+ pipeline_worker.Worker, build_test)
+
+ test_process = PipelineProcess(num_testers, 'tester', {}, TEST_STAGE,
+ build_test, pipeline_worker.Helper,
+ pipeline_worker.Worker, test_steering)
+
+ steer_process = multiprocessing.Process(
+ target=Steering,
+ args=(set([]), generations, test_steering, steering_build))
+
+ # Start the processes.
+ build_process.start()
+ test_process.start()
+ steer_process.start()
+
+ # Wait for the processes to finish.
+ build_process.join()
+ test_process.join()
+ steer_process.join()
+
+
+def main(argv):
+ (options, _) = parser.parse_args(argv)
+ assert options.filename
+ _ParseJson(options.filename)
+
+
+if __name__ == '__main__':
+ main(sys.argv)
diff --git a/bestflags/examples/omnetpp/README b/bestflags/examples/omnetpp/README
new file mode 100644
index 00000000..eba522fe
--- /dev/null
+++ b/bestflags/examples/omnetpp/README
@@ -0,0 +1,23 @@
+This directory contains the omnetpp example in SPEC2006 benchmark.
+
+It also contains the json configuration file which includes the meta data
+information to run the experiment.
+
+This directory contains a build file build_omnetpp which is used by the build
+module of the framework to compile the application.
+This directory contains a test file test_omnetpp which is used by the test
+module of the framework to benchmark the optimization compilation.
+This directory contains a conf file which includes the set of optimization flags
+the experiment will try.
+
+To use this direction, first gives the file the executable permission.
+ chmod a+x build_bikjmp
+ chmod a+x test_bikjmp
+
+Copy the SPEC2006 benchmark into this directory.
+
+To run, invoke the example_algorithm.py in the parent directory.
+ python example_algorithms.py --file=examples/omnetpp/example.json
+
+For help,
+ python example_algorithms.py --help \ No newline at end of file
diff --git a/bestflags/examples/omnetpp/build_omnetpp b/bestflags/examples/omnetpp/build_omnetpp
new file mode 100755
index 00000000..35e9ec13
--- /dev/null
+++ b/bestflags/examples/omnetpp/build_omnetpp
@@ -0,0 +1,69 @@
+#!/bin/bash -x
+
+cd examples/omnetpp/cpu2006-redhat-ia32
+
+# Contains the optimization flags.
+flags=''
+
+# The index of the parameter.
+i=1
+
+# Indicate whether it is parsing the gcc param.
+in_gcc_param=false
+
+for parameter in "$@"
+ do
+ # The last parameter is the file name.
+ if [ "$i" == "$#" ]; then
+ file=$parameter
+ break
+ fi
+
+ # The param is not a flag, it combines with the flag that comes right after.
+ # For example, --param max-inline-insns-single
+ if [ "$parameter" == "-param" ]; then
+ in_gcc_param=true
+ flags+=-$parameter' '
+ let i++
+ continue
+ fi
+
+ # In in_gcc_param section, this flag follows the key word '--param'.
+ if [ $in_gcc_param == true ]; then
+ flags+=$parameter' '
+ let i++
+ in_gcc_param=false
+ continue
+ fi
+
+ # Normal flags.
+ flags+=-$parameter' '
+ let i++
+ done
+
+# Change the configuration file.
+content=$(sed s/amd64-m64-gcc41-kk/test$file/ config/linux64-amd64-pgi.cfg)
+echo "$content" | sed s/-O2/-O1\ "$flags"/ >config/linux64-amd64-pgi$file.cfg
+. ./shrc
+/usr/bin/time -o temp$file runspec --config linux64-amd64-pgi$file -D --action=build 471.omnetpp
+
+state=$?
+
+outfile="./benchspec/CPU2006/471.omnetpp/run/build_base_test$file.0000/omnetpp"
+
+if [ $state -eq 0 ];then
+ user_time=$(cat build_timer$file | grep "user" | cut -d "u" -f 1)
+ output_file="$file"
+
+ checksum=$(readelf -x .text $outfile | md5sum | cut -d " " -f 1)
+ file_size=$(ls -l $outfile | cut -d " " -f 5)
+ text_section=$(readelf -SW $outfile | grep ".text")
+ size_hex=$(echo $text_section | sed "s/\s\{1,\}/\ /g" | cut -d ' ' -f 6)
+ size=$(echo $size_hex | ( echo "ibase=16" ; tr '[:lower:]' '[:upper:]') | bc)
+
+ echo $checksum $user_time $output_file $file_size $size
+else
+ echo "error" "error" "error" "error" "error"
+fi
+
+return $state \ No newline at end of file
diff --git a/bestflags/examples/omnetpp/conf b/bestflags/examples/omnetpp/conf
new file mode 100644
index 00000000..c7059e12
--- /dev/null
+++ b/bestflags/examples/omnetpp/conf
@@ -0,0 +1,2 @@
+fgcse-after-reload
+ftree-vectorize
diff --git a/bestflags/examples/omnetpp/example.json b/bestflags/examples/omnetpp/example.json
new file mode 100644
index 00000000..dda6dd11
--- /dev/null
+++ b/bestflags/examples/omnetpp/example.json
@@ -0,0 +1,24 @@
+{
+"GA":{
+
+"BUILD_CMD": "./examples/omnetpp/build_omnetpp",
+
+"TEST_CMD": "./examples/omnetpp/test_omnetpp",
+
+"OUTPUT": "output",
+
+"CONF": "examples/omnetpp/conf",
+
+"NUM_BUILDER": 3,
+
+"NUM_TESTER": 2,
+
+"STOP_THRESHOLD": 20,
+
+"NUM_CHROMOSOMES": 10,
+
+"NUM_TRIALS": 20,
+
+"MUTATION_RATE": 0.03
+}
+} \ No newline at end of file
diff --git a/bestflags/examples/omnetpp/test_omnetpp b/bestflags/examples/omnetpp/test_omnetpp
new file mode 100755
index 00000000..aeedb634
--- /dev/null
+++ b/bestflags/examples/omnetpp/test_omnetpp
@@ -0,0 +1,24 @@
+#!/bin/bash -ux
+
+cd /usr/local/google/home/yuhenglong/Desktop/spec2006/cpu2006-redhat-ia32/
+cd benchspec/CPU2006/471.omnetpp/run/build_base_test$1.0000
+
+(time ./omnetpp$1 ../../data/train/input/omnetpp.ini) 1>log-file 2>time.txt
+
+state=$?
+
+if [ $state -eq 0 ];then
+ diff ../../data/train/output/omnetpp.sca.result omnetpp.sca
+ state=$?
+ if [ $state -eq 0 ];then
+ time=$(cat time.txt | grep real | cut -f2 -s | cut -d 's' -f 1)
+ time=$(echo $time | awk -Fm '{ print ($1 * 60) + $2 }')
+ echo $time
+ else
+ echo "error"
+ fi
+else
+ echo "error"
+fi
+
+return $state \ No newline at end of file
diff --git a/bestflags/flags.py b/bestflags/flags.py
new file mode 100644
index 00000000..b316421e
--- /dev/null
+++ b/bestflags/flags.py
@@ -0,0 +1,197 @@
+# Copyright (c) 2013 The Chromium OS Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+"""Manage bundles of flags used for the optimizing of ChromeOS.
+
+Part of the Chrome build flags optimization.
+
+The content of this module is adapted from the Trakhelp JVM project. This module
+contains the basic Class Flag and the Class FlagSet. The core abstractions are:
+
+The class Flag, which takes a domain specific language describing how to fill
+the flags with values.
+
+The class FlagSet, which contains a number of flags and can create new FlagSets
+by mixing with other FlagSets.
+
+The Flag DSL works by replacing value ranges in [x-y] with numbers in the range
+x through y.
+
+Examples:
+ "foo[0-9]bar" will expand to e.g. "foo5bar".
+"""
+
+__author__ = 'yuhenglong@google.com (Yuheng Long)'
+
+import random
+import re
+
+#
+# This matches a [...] group in the internal representation for a flag
+# specification, and is used in "filling out" flags - placing values inside
+# the flag_spec. The internal flag_spec format is like "foo[0]", with
+# values filled out like 5; this would be transformed by
+# FormattedForUse() into "foo5".
+_FLAG_FILLOUT_VALUE_RE = re.compile(r'\[([^\]]*)\]')
+
+# This matches a numeric flag flag=[start-end].
+rx = re.compile(r'\[(?P<start>\d+)-(?P<end>\d+)\]')
+
+
+# Search the numeric flag pattern.
+def Search(spec):
+ return rx.search(spec)
+
+
+class NoSuchFileError(Exception):
+ """Define an Exception class for user providing invalid input file."""
+ pass
+
+
+def ReadConf(file_name):
+ """Parse the configuration file.
+
+ The configuration contains one flag specification in each line.
+
+ Args:
+ file_name: The name of the configuration file.
+
+ Returns:
+ A list of specs in the configuration file.
+
+ Raises:
+ NoSuchFileError: The caller should provide a valid configuration file.
+ """
+
+ with open(file_name, 'r') as input_file:
+ lines = input_file.readlines()
+
+ return sorted([line.strip() for line in lines if line.strip()])
+
+ raise NoSuchFileError()
+
+
+class Flag(object):
+ """A class representing a particular command line flag argument.
+
+ The Flag consists of two parts: The spec and the value.
+ The spec is a definition of the following form: a string with escaped
+ sequences of the form [<start>-<end>] where start and end is an positive
+ integer for a fillable value.
+
+ An example of a spec is "foo[0-9]".
+ There are two kinds of flags, boolean flag and numeric flags. Boolean flags
+ can either be turned on or off, which numeric flags can have different
+ positive integer values. For example, -finline-limit=[1-1000] is a numeric
+ flag and -ftree-vectorize is a boolean flag.
+
+ A (boolean/numeric) flag is not turned on if it is not selected in the
+ FlagSet.
+ """
+
+ def __init__(self, spec, value=-1):
+ self._spec = spec
+
+ # If the value is not specified, generate a random value to use.
+ if value == -1:
+ # If creating a boolean flag, the value will be 0.
+ value = 0
+
+ # Parse the spec's expression for the flag value's numeric range.
+ numeric_flag_match = Search(spec)
+
+ # If this is a numeric flag, a value is chosen within start and end, start
+ # inclusive and end exclusive.
+ if numeric_flag_match:
+ start = int(numeric_flag_match.group('start'))
+ end = int(numeric_flag_match.group('end'))
+
+ assert start < end
+ value = random.randint(start, end)
+
+ self._value = value
+
+ def __eq__(self, other):
+ if isinstance(other, Flag):
+ return self._spec == other.GetSpec() and self._value == other.GetValue()
+ return False
+
+ def __hash__(self):
+ return hash(self._spec) + self._value
+
+ def GetValue(self):
+ """Get the value for this flag.
+
+ Returns:
+ The value.
+ """
+
+ return self._value
+
+ def GetSpec(self):
+ """Get the spec for this flag.
+
+ Returns:
+ The spec.
+ """
+
+ return self._spec
+
+ def FormattedForUse(self):
+ """Calculate the combination of flag_spec and values.
+
+ For e.g. the flag_spec 'foo[0-9]' and the value equals to 5, this will
+ return 'foo5'. The filled out version of the flag is the text string you use
+ when you actually want to pass the flag to some binary.
+
+ Returns:
+ A string that represent the filled out flag, e.g. the flag with the
+ FlagSpec '-X[0-9]Y' and value equals to 5 would return '-X5Y'.
+ """
+
+ return _FLAG_FILLOUT_VALUE_RE.sub(str(self._value), self._spec)
+
+
+class FlagSet(object):
+ """A dictionary of Flag objects.
+
+ The flags dictionary stores the spec and flag pair.
+ """
+
+ def __init__(self, flag_array):
+ # Store the flags as a dictionary mapping of spec -> flag object
+ self._flags = dict([(flag.GetSpec(), flag) for flag in flag_array])
+
+ def __eq__(self, other):
+ return isinstance(other, FlagSet) and self._flags == other.GetFlags()
+
+ def __hash__(self):
+ return sum([hash(flag) for flag in self._flags.values()])
+
+ def __getitem__(self, flag_spec):
+ """Get flag with a particular flag_spec.
+
+ Args:
+ flag_spec: The flag_spec to find.
+
+ Returns:
+ A flag.
+ """
+
+ return self._flags[flag_spec]
+
+ def __contains__(self, flag_spec):
+ return self._flags.has_key(flag_spec)
+
+ def GetFlags(self):
+ return self._flags
+
+ def FormattedForUse(self):
+ """Format this for use in an application.
+
+ Returns:
+ A list of flags, sorted alphabetically and filled in with the values
+ for each flag.
+ """
+
+ return sorted([f.FormattedForUse() for f in self._flags.values()])
diff --git a/bestflags/flags_test.py b/bestflags/flags_test.py
new file mode 100644
index 00000000..dbbea77c
--- /dev/null
+++ b/bestflags/flags_test.py
@@ -0,0 +1,190 @@
+# Copyright (c) 2013 The Chromium OS Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+"""Unit tests for the classes in module 'flags'.
+
+Part of the Chrome build flags optimization.
+"""
+
+__author__ = 'yuhenglong@google.com (Yuheng Long)'
+
+import random
+import sys
+import unittest
+
+from flags import Flag
+from flags import FlagSet
+
+# The number of tests to test.
+NUM_TESTS = 20
+
+
+class FlagTest(unittest.TestCase):
+ """This class tests the Flag class."""
+
+ def testInit(self):
+ """The value generated should fall within start and end of the spec.
+
+ If the value is not specified, the value generated should fall within start
+ and end of the spec.
+ """
+
+ for _ in range(NUM_TESTS):
+ start = random.randint(1, sys.maxint - 1)
+ end = random.randint(start + 1, sys.maxint)
+
+ spec = 'flag=[%s-%s]' % (start, end)
+
+ test_flag = Flag(spec)
+
+ value = test_flag.GetValue()
+
+ # If the value is not specified when the flag is constructed, a random
+ # value is chosen. This value should fall within start and end of the
+ # spec.
+ assert start <= value and value < end
+
+ def testEqual(self):
+ """Test the equal operator (==) of the flag.
+
+ Two flags are equal if and only if their spec and value are equal.
+ """
+
+ tests = range(NUM_TESTS)
+
+ # Two tasks having the same spec and value should be equivalent.
+ for test in tests:
+ assert Flag(str(test), test) == Flag(str(test), test)
+
+ # Two tasks having different flag set should be different.
+ for test in tests:
+ flag = Flag(str(test), test)
+ other_flag_sets = [other for other in tests if test != other]
+ for other_test in other_flag_sets:
+ assert flag != Flag(str(other_test), other_test)
+
+ def testFormattedForUse(self):
+ """Test the FormattedForUse method of the flag.
+
+ The FormattedForUse replaces the string within the [] with the actual value.
+ """
+
+ for _ in range(NUM_TESTS):
+ start = random.randint(1, sys.maxint - 1)
+ end = random.randint(start + 1, sys.maxint)
+ value = random.randint(start, end - 1)
+
+ spec = 'flag=[%s-%s]' % (start, end)
+
+ test_flag = Flag(spec, value)
+
+ # For numeric flag, the FormattedForUse replaces the string within the []
+ # with the actual value.
+ test_value = test_flag.FormattedForUse()
+ actual_value = 'flag=%s' % value
+
+ assert test_value == actual_value
+
+ for _ in range(NUM_TESTS):
+ value = random.randint(1, sys.maxint - 1)
+
+ test_flag = Flag('flag', value)
+
+ # For boolean flag, the FormattedForUse returns the spec.
+ test_value = test_flag.FormattedForUse()
+ actual_value = 'flag'
+ assert test_value == actual_value
+
+
+class FlagSetTest(unittest.TestCase):
+ """This class test the FlagSet class."""
+
+ def testEqual(self):
+ """Test the equal method of the Class FlagSet.
+
+ Two FlagSet instances are equal if all their flags are equal.
+ """
+
+ flag_names = range(NUM_TESTS)
+
+ # Two flag sets having the same flags should be equivalent.
+ for flag_name in flag_names:
+ spec = '%s' % flag_name
+
+ assert FlagSet([Flag(spec)]) == FlagSet([Flag(spec)])
+
+ # Two flag sets having different flags should be different.
+ for flag_name in flag_names:
+ spec = '%s' % flag_name
+ flag_set = FlagSet([Flag(spec)])
+ other_flag_sets = [other for other in flag_names if flag_name != other]
+ for other_name in other_flag_sets:
+ other_spec = '%s' % other_name
+ assert flag_set != FlagSet([Flag(other_spec)])
+
+ def testGetItem(self):
+ """Test the get item method of the Class FlagSet.
+
+ The flag set is also indexed by the specs. The flag set should return the
+ appropriate flag given the spec.
+ """
+
+ tests = range(NUM_TESTS)
+
+ specs = [str(spec) for spec in tests]
+ flag_array = [Flag(spec) for spec in specs]
+
+ flag_set = FlagSet(flag_array)
+
+ # Created a dictionary of spec and flag, the flag set should return the flag
+ # the same as this dictionary.
+ spec_flag = dict(zip(specs, flag_array))
+
+ for spec in spec_flag:
+ assert flag_set[spec] == spec_flag[spec]
+
+ def testContain(self):
+ """Test the contain method of the Class FlagSet.
+
+ The flag set is also indexed by the specs. The flag set should return true
+ for spec if it contains a flag containing spec.
+ """
+
+ true_tests = range(NUM_TESTS)
+ false_tests = range(NUM_TESTS, NUM_TESTS * 2)
+
+ specs = [str(spec) for spec in true_tests]
+
+ flag_set = FlagSet([Flag(spec) for spec in specs])
+
+ for spec in specs:
+ assert spec in flag_set
+
+ for spec in false_tests:
+ assert spec not in flag_set
+
+ def testFormattedForUse(self):
+ """Test the FormattedForUse method of the Class FlagSet.
+
+ The output should be a sorted list of strings.
+ """
+
+ flag_names = range(NUM_TESTS)
+ flag_names.reverse()
+ flags = []
+ result = []
+
+ # Construct the flag set.
+ for flag_name in flag_names:
+ spec = '%s' % flag_name
+ flags.append(Flag(spec))
+ result.append(spec)
+
+ flag_set = FlagSet(flags)
+
+ # The results string should be sorted.
+ assert sorted(result) == flag_set.FormattedForUse()
+
+
+if __name__ == '__main__':
+ unittest.main()
diff --git a/bestflags/flags_util.py b/bestflags/flags_util.py
new file mode 100644
index 00000000..20be57fb
--- /dev/null
+++ b/bestflags/flags_util.py
@@ -0,0 +1,95 @@
+# Copyright (c) 2013 The Chromium OS Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+"""Utility functions to explore the neighbor flags.
+
+Part of the Chrome build flags optimization.
+"""
+
+__author__ = 'yuhenglong@google.com (Yuheng Long)'
+
+import flags
+from flags import Flag
+
+
+def ClimbNext(flags_dict, climb_spec):
+ """Get the flags that are different from |flags_dict| by |climb_spec|.
+
+ Given a set of flags, |flags_dict|, return a new set of flags that are
+ adjacent along the flag spec |climb_spec|.
+
+ An example flags_dict is {foo=[1-9]:foo=5, bar=[1-5]:bar=2} and climb_spec is
+ bar=[1-5]. This method changes the flag that contains the spec bar=[1-5]. The
+ results are its neighbors dictionaries, i.e., {foo=[1-9]:foo=5,
+ bar=[1-5]:bar=1} and {foo=[1-9]:foo=5, bar=[1-5]:bar=3}.
+
+ Args:
+ flags_dict: The dictionary containing the original flags whose neighbors are
+ to be explored.
+ climb_spec: The spec in the flags_dict is to be changed. The spec is a
+ definition in the little language, a string with escaped sequences of the
+ form [<start>-<end>] where start and end is an positive integer for a
+ fillable value. An example of a spec is "foo[0-9]".
+
+ Returns:
+ List of dictionaries of neighbor flags.
+ """
+
+ # This method searches for a pattern [start-end] in the spec. If the spec
+ # contains this pattern, it is a numeric flag. Otherwise it is a boolean flag.
+ # For example, -finline-limit=[1-1000] is a numeric flag and -falign-jumps is
+ # a boolean flag.
+ numeric_flag_match = flags.Search(climb_spec)
+
+ # If the flags do not contain the spec.
+ if climb_spec not in flags_dict:
+ results = flags_dict.copy()
+
+ if numeric_flag_match:
+ # Numeric flags.
+ results[climb_spec] = Flag(climb_spec,
+ int(numeric_flag_match.group('start')))
+ else:
+ # Boolean flags.
+ results[climb_spec] = Flag(climb_spec)
+
+ return [results]
+
+ # The flags contain the spec.
+ if not numeric_flag_match:
+ # Boolean flags.
+ results = flags_dict.copy()
+
+ # Turn off the flag. A flag is turned off if it is not presented in the
+ # flags_dict.
+ del results[climb_spec]
+ return [results]
+
+ # Numeric flags.
+ flag = flags_dict[climb_spec]
+
+ # The value of the flag having spec.
+ value = flag.GetValue()
+ results = []
+
+ if value + 1 < int(numeric_flag_match.group('end')):
+ # If the value is not the end value, explore the value that is 1 larger than
+ # the current value.
+ neighbor = flags_dict.copy()
+ neighbor[climb_spec] = Flag(climb_spec, value + 1)
+ results.append(neighbor)
+
+ if value > int(numeric_flag_match.group('start')):
+ # If the value is not the start value, explore the value that is 1 lesser
+ # than the current value.
+ neighbor = flags_dict.copy()
+ neighbor[climb_spec] = Flag(climb_spec, value - 1)
+ results.append(neighbor)
+ else:
+ # Delete the value, i.e., turn off the flag. A flag is turned off if it is
+ # not presented in the flags_dict.
+ neighbor = flags_dict.copy()
+ del neighbor[climb_spec]
+ results.append(neighbor)
+
+ return results
diff --git a/bestflags/generation.py b/bestflags/generation.py
new file mode 100644
index 00000000..67c379f5
--- /dev/null
+++ b/bestflags/generation.py
@@ -0,0 +1,139 @@
+# Copyright (c) 2013 The Chromium OS Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+"""A generation of a set of tasks.
+
+Part of the Chrome build flags optimization.
+
+This module contains the base generation class. This class contains the tasks of
+this current generation. The generation will not evolve to the next generation
+until all the tasks in this generation are done executing. It also contains a
+set of tasks that could potentially be used to generate the next generation,
+e.g., in the genetic algorithm, a set of good species will be kept to evolve to
+the successive generations. For the hill climbing algorithm example, the
+candidate_pool will contain a current task t being evaluated and the exe_set
+will contains all the task t's neighbor.
+"""
+
+__author__ = 'yuhenglong@google.com (Yuheng Long)'
+
+
+class NoneOverridingError(Exception):
+ """Define an Exception class for subclasses not overriding certain methods."""
+ pass
+
+
+class Generation(object):
+ """A generation of a framework run.
+
+ The base class of generation. Concrete subclasses, e.g., GAGeneration should
+ override the Next and IsImproved method to implement algorithm specific
+ applications.
+ """
+
+ def __init__(self, exe_set, candidate_pool):
+ """Set up the tasks set of this generation.
+
+ Args:
+ exe_set: A set of tasks to be run.
+ candidate_pool: A set of tasks to be considered to be used to generate the
+ next generation.
+ """
+
+ self._exe_set = exe_set
+ self._candidate_pool = candidate_pool
+
+ # Keeping the record of how many tasks are pending. Pending tasks are the
+ # ones that have been sent out to the next stage for execution but have not
+ # finished. A generation is not ready for the reproduction of the new
+ # generations until all its pending tasks have been executed.
+ self._pending = len(exe_set)
+
+ def CandidatePool(self):
+ """Return the candidate tasks of this generation."""
+
+ return self._candidate_pool
+
+ def Pool(self):
+ """Return the task set of this generation."""
+
+ return self._exe_set
+
+ def Done(self):
+ """All the tasks in this generation are done.
+
+ Returns:
+ True if all the tasks have been executed. That is the number of pending
+ task is 0.
+ """
+
+ return self._pending == 0
+
+ def UpdateTask(self, task):
+ """Match a task t in this generation that is equal to the input task.
+
+ This method is called when the input task has just finished execution. This
+ method finds out whether there is a pending task t in the current generation
+ that is the same as the input task. Two tasks are the same if their flag
+ options are the same. A task is pending if it has not been performed.
+ If there is a pending task t that matches the input task, task t will be
+ substituted with the input task in this generation. In that case, the input
+ task, as well as its build and test results encapsulated in the task, will
+ be stored in the current generation. These results could be used to produce
+ the next generation.
+ If there is a match, the current generation will have one less pending task.
+ When there is no pending task, the generation can be used to produce the
+ next generation.
+ The caller of this function is responsible for not calling this method on
+ the same task more than once.
+
+ Args:
+ task: A task that has its results ready.
+
+ Returns:
+ Whether the input task belongs to this generation.
+ """
+
+ # If there is a match, the input task belongs to this generation.
+ if task not in self._exe_set:
+ return False
+
+ # Remove the place holder task in this generation and store the new input
+ # task and its result.
+ self._exe_set.remove(task)
+ self._exe_set.add(task)
+
+ # The current generation will have one less task to wait on.
+ self._pending -= 1
+
+ assert self._pending >= 0
+
+ return True
+
+ def IsImproved(self):
+ """True if this generation has improvement upon its parent generation.
+
+ Raises:
+ NoneOverridingError: The subclass should override this method.
+ """
+ raise NoneOverridingError('Must be implemented by child class')
+
+ def Next(self, _):
+ """Calculate the next generation.
+
+ This is the core of the framework implementation. It must be overridden by
+ the concrete subclass to implement algorithm specific generations.
+
+ Args:
+ _: A set of tasks that have been generated before. The overridden method
+ in the subclasses can use this so as not to generate task that has been
+ generated before.
+
+ Returns:
+ A set of new generations.
+
+ Raises:
+ NoneOverridingError: The subclass should override this method.
+ """
+
+ raise NoneOverridingError('Must be implemented by child class')
diff --git a/bestflags/generation_test.py b/bestflags/generation_test.py
new file mode 100644
index 00000000..2e042d49
--- /dev/null
+++ b/bestflags/generation_test.py
@@ -0,0 +1,72 @@
+# Copyright (c) 2013 The Chromium OS Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+"""Generation unittest.
+
+Part of the Chrome build flags optimization.
+"""
+
+__author__ = 'yuhenglong@google.com (Yuheng Long)'
+
+import random
+import unittest
+
+from generation import Generation
+from mock_task import IdentifierMockTask
+
+# Pick an integer at random.
+TEST_STAGE = -125
+
+# The number of tasks to be put in a generation to be tested.
+NUM_TASKS = 20
+
+# The stride of permutation used to shuffle the input list of tasks. Should be
+# relatively prime with NUM_TASKS.
+STRIDE = 7
+
+
+class GenerationTest(unittest.TestCase):
+ """This class test the Generation class.
+
+ Given a set of tasks in the generation, if there is any task that is pending,
+ then the Done method will return false, and true otherwise.
+ """
+
+ def testDone(self):
+ """"Test the Done method.
+
+ Produce a generation with a set of tasks. Set the cost of the task one by
+ one and verify that the Done method returns false before setting the cost
+ for all the tasks. After the costs of all the tasks are set, the Done method
+ should return true.
+ """
+
+ random.seed(0)
+
+ testing_tasks = range(NUM_TASKS)
+
+ # The tasks for the generation to be tested.
+ tasks = [IdentifierMockTask(TEST_STAGE, t) for t in testing_tasks]
+
+ gen = Generation(set(tasks), None)
+
+ # Permute the list.
+ permutation = [(t * STRIDE) % NUM_TASKS for t in range(NUM_TASKS)]
+ permuted_tasks = [testing_tasks[index] for index in permutation]
+
+ # The Done method of the Generation should return false before all the tasks
+ # in the permuted list are set.
+ for testing_task in permuted_tasks:
+ assert not gen.Done()
+
+ # Mark a task as done by calling the UpdateTask method of the generation.
+ # Send the generation the task as well as its results.
+ gen.UpdateTask(IdentifierMockTask(TEST_STAGE, testing_task))
+
+ # The Done method should return true after all the tasks in the permuted
+ # list is set.
+ assert gen.Done()
+
+
+if __name__ == '__main__':
+ unittest.main()
diff --git a/bestflags/genetic_algorithm.py b/bestflags/genetic_algorithm.py
new file mode 100644
index 00000000..deb83f12
--- /dev/null
+++ b/bestflags/genetic_algorithm.py
@@ -0,0 +1,295 @@
+# Copyright (c) 2013 The Chromium OS Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+"""The hill genetic algorithm.
+
+Part of the Chrome build flags optimization.
+"""
+
+__author__ = 'yuhenglong@google.com (Yuheng Long)'
+
+import random
+
+import flags
+from flags import Flag
+from flags import FlagSet
+from generation import Generation
+from task import Task
+
+
+def CrossoverWith(first_flag, second_flag):
+ """Get a crossed over gene.
+
+ At present, this just picks either/or of these values. However, it could be
+ implemented as an integer maskover effort, if required.
+
+ Args:
+ first_flag: The first gene (Flag) to cross over with.
+ second_flag: The second gene (Flag) to cross over with.
+
+ Returns:
+ A Flag that can be considered appropriately randomly blended between the
+ first and second input flag.
+ """
+
+ return first_flag if random.randint(0, 1) else second_flag
+
+
+def RandomMutate(specs, flag_set, mutation_rate):
+ """Randomly mutate the content of a task.
+
+ Args:
+ specs: A list of spec from which the flag set is created.
+ flag_set: The current flag set being mutated
+ mutation_rate: What fraction of genes to mutate.
+
+ Returns:
+ A Genetic Task constructed by randomly mutating the input flag set.
+ """
+
+ results_flags = []
+
+ for spec in specs:
+ # Randomly choose whether this flag should be mutated.
+ if random.randint(0, int(1 / mutation_rate)):
+ continue
+
+ # If the flag is not already in the flag set, it is added.
+ if spec not in flag_set:
+ results_flags.append(Flag(spec))
+ continue
+
+ # If the flag is already in the flag set, it is mutated.
+ numeric_flag_match = flags.Search(spec)
+
+ # The value of a numeric flag will be changed, and a boolean flag will be
+ # dropped.
+ if not numeric_flag_match:
+ continue
+
+ value = flag_set[spec].GetValue()
+
+ # Randomly select a nearby value of the current value of the flag.
+ rand_arr = [value]
+ if value + 1 < int(numeric_flag_match.group('end')):
+ rand_arr.append(value + 1)
+
+ rand_arr.append(value - 1)
+ value = random.sample(rand_arr, 1)[0]
+
+ # If the value is smaller than the start of the spec, this flag will be
+ # dropped.
+ if value != int(numeric_flag_match.group('start')) - 1:
+ results_flags.append(Flag(spec, value))
+
+ return GATask(FlagSet(results_flags))
+
+
+class GATask(Task):
+
+ def __init__(self, flag_set):
+ Task.__init__(self, flag_set)
+
+ def ReproduceWith(self, other, specs, mutation_rate):
+ """Reproduce with other FlagSet.
+
+ Args:
+ other: A FlagSet to reproduce with.
+ specs: A list of spec from which the flag set is created.
+ mutation_rate: one in mutation_rate flags will be mutated (replaced by a
+ random version of the same flag, instead of one from either of the
+ parents). Set to 0 to disable mutation.
+
+ Returns:
+ A GA task made by mixing self with other.
+ """
+
+ # Get the flag dictionary.
+ father_flags = self.GetFlags().GetFlags()
+ mother_flags = other.GetFlags().GetFlags()
+
+ # Flags that are common in both parents and flags that belong to only one
+ # parent.
+ self_flags = []
+ other_flags = []
+ common_flags = []
+
+ # Find out flags that are common to both parent and flags that belong soly
+ # to one parent.
+ for self_flag in father_flags:
+ if self_flag in mother_flags:
+ common_flags.append(self_flag)
+ else:
+ self_flags.append(self_flag)
+
+ for other_flag in mother_flags:
+ if other_flag not in father_flags:
+ other_flags.append(other_flag)
+
+ # Randomly select flags that belong to only one parent.
+ output_flags = [father_flags[f] for f in self_flags if random.randint(0, 1)]
+ others = [mother_flags[f] for f in other_flags if random.randint(0, 1)]
+ output_flags.extend(others)
+ # Turn on flags that belong to both parent. Randomly choose the value of the
+ # flag from either parent.
+ for flag in common_flags:
+ output_flags.append(CrossoverWith(father_flags[flag], mother_flags[flag]))
+
+ # Mutate flags
+ if mutation_rate:
+ return RandomMutate(specs, FlagSet(output_flags), mutation_rate)
+
+ return GATask(FlagSet(output_flags))
+
+
+class GAGeneration(Generation):
+ """The Genetic Algorithm."""
+
+ # The value checks whether the algorithm has converged and arrives at a fixed
+ # point. If STOP_THRESHOLD of generations have not seen any performance
+ # improvement, the Genetic Algorithm stops.
+ STOP_THRESHOLD = None
+
+ # Number of tasks in each generation.
+ NUM_CHROMOSOMES = None
+
+ # The value checks whether the algorithm has converged and arrives at a fixed
+ # point. If NUM_TRIALS of trials have been attempted to generate a new task
+ # without a success, the Genetic Algorithm stops.
+ NUM_TRIALS = None
+
+ # The flags that can be used to generate new tasks.
+ SPECS = None
+
+ # What fraction of genes to mutate.
+ MUTATION_RATE = 0
+
+ @staticmethod
+ def InitMetaData(stop_threshold, num_chromosomes, num_trials, specs,
+ mutation_rate):
+ """Set up the meta data for the Genetic Algorithm.
+
+ Args:
+ stop_threshold: The number of generations, upon which no performance has
+ seen, the Genetic Algorithm stops.
+ num_chromosomes: Number of tasks in each generation.
+ num_trials: The number of trials, upon which new task has been tried to
+ generated without success, the Genetic Algorithm stops.
+ specs: The flags that can be used to generate new tasks.
+ mutation_rate: What fraction of genes to mutate.
+ """
+
+ GAGeneration.STOP_THRESHOLD = stop_threshold
+ GAGeneration.NUM_CHROMOSOMES = num_chromosomes
+ GAGeneration.NUM_TRIALS = num_trials
+ GAGeneration.SPECS = specs
+ GAGeneration.MUTATION_RATE = mutation_rate
+
+ def __init__(self, tasks, parents, total_stucks):
+ """Set up the meta data for the Genetic Algorithm.
+
+ Args:
+ tasks: A set of tasks to be run.
+ parents: A set of tasks from which this new generation is produced. This
+ set also contains the best tasks generated so far.
+ total_stucks: The number of generations that have not seen improvement.
+ The Genetic Algorithm will stop once the total_stucks equals to
+ NUM_TRIALS defined in the GAGeneration class.
+ """
+
+ Generation.__init__(self, tasks, parents)
+ self._total_stucks = total_stucks
+
+ def IsImproved(self):
+ """True if this generation has improvement upon its parent generation."""
+
+ tasks = self.Pool()
+ parents = self.CandidatePool()
+
+ # The first generate does not have parents.
+ if not parents:
+ return True
+
+ # Found out whether a task has improvement upon the best task in the
+ # parent generation.
+ best_parent = sorted(parents, key=lambda task: task.GetTestResult())[0]
+ best_current = sorted(tasks, key=lambda task: task.GetTestResult())[0]
+
+ # At least one task has improvement.
+ if best_current.IsImproved(best_parent):
+ self._total_stucks = 0
+ return True
+
+ # If STOP_THRESHOLD of generations have no improvement, the algorithm stops.
+ if self._total_stucks >= GAGeneration.STOP_THRESHOLD:
+ return False
+
+ self._total_stucks += 1
+ return True
+
+ def Next(self, cache):
+ """Calculate the next generation.
+
+ Generate a new generation from the a set of tasks. This set contains the
+ best set seen so far and the tasks executed in the parent generation.
+
+ Args:
+ cache: A set of tasks that have been generated before.
+
+ Returns:
+ A set of new generations.
+ """
+
+ target_len = GAGeneration.NUM_CHROMOSOMES
+ specs = GAGeneration.SPECS
+ mutation_rate = GAGeneration.MUTATION_RATE
+
+ # Collect a set of size target_len of tasks. This set will be used to
+ # produce a new generation of tasks.
+ gen_tasks = [task for task in self.Pool()]
+
+ parents = self.CandidatePool()
+ if parents:
+ gen_tasks.extend(parents)
+
+ # A set of tasks that are the best. This set will be used as the parent
+ # generation to produce the next generation.
+ sort_func = lambda task: task.GetTestResult()
+ retained_tasks = sorted(gen_tasks, key=sort_func)[:target_len]
+
+ child_pool = set()
+ for father in retained_tasks:
+ num_trials = 0
+ # Try num_trials times to produce a new child.
+ while num_trials < GAGeneration.NUM_TRIALS:
+ # Randomly select another parent.
+ mother = random.choice(retained_tasks)
+ # Cross over.
+ child = mother.ReproduceWith(father, specs, mutation_rate)
+ if child not in child_pool and child not in cache:
+ child_pool.add(child)
+ break
+ else:
+ num_trials += 1
+
+ num_trials = 0
+
+ while len(child_pool) < target_len and num_trials < GAGeneration.NUM_TRIALS:
+ for keep_task in retained_tasks:
+ # Mutation.
+ child = RandomMutate(specs, keep_task.GetFlags(), mutation_rate)
+ if child not in child_pool and child not in cache:
+ child_pool.add(child)
+ if len(child_pool) >= target_len:
+ break
+ else:
+ num_trials += 1
+
+ # If NUM_TRIALS of tries have been attempted without generating a set of new
+ # tasks, the algorithm stops.
+ if num_trials >= GAGeneration.NUM_TRIALS:
+ return []
+
+ assert len(child_pool) == target_len
+
+ return [GAGeneration(child_pool, set(retained_tasks), self._total_stucks)]
diff --git a/bestflags/hill_climb_best_neighbor.py b/bestflags/hill_climb_best_neighbor.py
new file mode 100644
index 00000000..7bb5a7ff
--- /dev/null
+++ b/bestflags/hill_climb_best_neighbor.py
@@ -0,0 +1,107 @@
+# Copyright (c) 2013 The Chromium OS Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+"""A variation of the hill climbing algorithm.
+
+Part of the Chrome build flags optimization.
+
+This algorithm explores all the neighbors of the current task. If at least one
+neighbor gives better performance than the current task, it explores the best
+neighbor.
+"""
+
+__author__ = 'yuhenglong@google.com (Yuheng Long)'
+
+from flags import FlagSet
+import flags_util
+from generation import Generation
+from task import Task
+
+
+class HillClimbingBestBranch(Generation):
+ """A variation of the hill climbing algorithm.
+
+ Given a task, it explores all its neighbors. Pick the best neighbor for the
+ next iteration.
+ """
+
+ def __init__(self, exe_set, parents, specs):
+ """Set up the tasks set of this generation.
+
+ Args:
+ exe_set: A set of tasks to be run.
+ parents: A set of tasks to be used to check whether their neighbors have
+ improved upon them.
+ specs: A list of specs to explore. The spec specifies the flags that can
+ be changed to find neighbors of a task.
+ """
+
+ Generation.__init__(self, exe_set, parents)
+ self._specs = specs
+
+ # This variable will be used, by the Next method, to generate the tasks for
+ # the next iteration. This self._next_task contains the best task in the
+ # current iteration and it will be set by the IsImproved method. The tasks
+ # of the next iteration are the neighbor of self._next_task.
+ self._next_task = None
+
+ def IsImproved(self):
+ """True if this generation has improvement over its parent generation.
+
+ If this generation improves upon the previous generation, this method finds
+ out the best task in this generation and sets it to _next_task for the
+ method Next to use.
+
+ Returns:
+ True if the best neighbor improves upon the parent task.
+ """
+
+ # Find the best neighbor.
+ best_task = None
+ for task in self._exe_set:
+ if not best_task or task.IsImproved(best_task):
+ best_task = task
+
+ if not best_task:
+ return False
+
+ # The first generation may not have parent generation.
+ parents = list(self._candidate_pool)
+ if parents:
+ assert len(parents) == 1
+ self._next_task = best_task
+ # If the best neighbor improves upon the parent task.
+ return best_task.IsImproved(parents[0])
+
+ self._next_task = best_task
+ return True
+
+ def Next(self, cache):
+ """Calculate the next generation.
+
+ The best neighbor b of the current task is the parent of the next
+ generation. The neighbors of b will be the set of tasks to be evaluated
+ next.
+
+ Args:
+ cache: A set of tasks that have been generated before.
+
+ Returns:
+ A set of new generations.
+ """
+
+ # The best neighbor.
+ current_task = self._next_task
+ flag_set = current_task.GetFlags()
+
+ # The neighbors of the best neighbor.
+ children_tasks = set([])
+ for spec in self._specs:
+ for next_flag in flags_util.ClimbNext(flag_set.GetFlags(), spec):
+ new_task = Task(FlagSet(next_flag.values()))
+
+ if new_task not in cache:
+ children_tasks.add(new_task)
+
+ return [HillClimbingBestBranch(children_tasks, set([current_task]),
+ self._specs)]
diff --git a/bestflags/iterative_elimination.py b/bestflags/iterative_elimination.py
new file mode 100644
index 00000000..2f4c41d1
--- /dev/null
+++ b/bestflags/iterative_elimination.py
@@ -0,0 +1,177 @@
+# Copyright (c) 2013 The Chromium OS Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+"""Iterative flags elimination.
+
+Part of the Chrome build flags optimization.
+
+This module implements the flag iterative elimination algorithm (IE) adopted
+from the paper
+Z. Pan et al. Fast and Effective Orchestration of Compiler Optimizations for
+Automatic Performance Tuning.
+
+IE begins with the base line that turns on all the optimizations flags and
+setting the numeric flags to their highest values. IE turns off the one boolean
+flag or lower the value of a numeric flag with the most negative effect from the
+baseline. This process repeats with all remaining flags, until none of them
+causes performance degradation. The complexity of IE is O(n^2).
+
+For example, -fstrict-aliasing and -ftree-vectorize. The base line is
+b=[-fstrict-aliasing, -ftree-vectorize]. The two tasks in the first iteration
+are t0=[-fstrict-aliasing] and t1=[-ftree-vectorize]. The algorithm compares b
+with t0 and t1, respectively, and see whether setting the numeric flag with a
+lower value or removing the boolean flag -fstrict-aliasing produce a better
+fitness value.
+"""
+
+__author__ = 'yuhenglong@google.com (Yuheng Long)'
+
+import flags
+from generation import Generation
+import task
+
+
+def _DecreaseFlag(flags_dict, spec):
+ """Decrease the value of the flag that has the specification spec.
+
+ If the flag that contains the spec is a boolean flag, it is eliminated.
+ Otherwise the flag is a numeric flag, its value will be reduced by one.
+
+ Args:
+ flags_dict: The dictionary containing the original flags whose neighbors are
+ to be explored.
+ spec: The spec in the flags_dict is to be changed.
+
+ Returns:
+ Dictionary of neighbor flag that is only different from the original
+ dictionary by the spec.
+ """
+
+ # The specification must be held by one of the flags.
+ assert spec in flags_dict
+
+ # The results this method returns.
+ results = flags_dict.copy()
+
+ # This method searches for a pattern [start-end] in the spec. If the spec
+ # contains this pattern, it is a numeric flag. Otherwise it is a boolean flag.
+ # For example, -finline-limit=[1-1000] is a numeric flag and -falign-jumps is
+ # a boolean flag.
+ numeric_flag_match = flags.Search(spec)
+
+ if numeric_flag_match:
+ # numeric flag
+ val = results[spec].GetValue()
+
+ # If the value of the flag is the lower boundary of the specification, this
+ # flag will be turned off. Because it already contains the lowest value and
+ # can not be decreased any more.
+ if val == int(numeric_flag_match.group('start')):
+ # Turn off the flag. A flag is turned off if it is not presented in the
+ # flags_dict.
+ del results[spec]
+ else:
+ results[spec] = flags.Flag(spec, val - 1)
+ else:
+ # Turn off the flag. A flag is turned off if it is not presented in the
+ # flags_dict.
+ del results[spec]
+
+ return results
+
+
+class IterativeEliminationGeneration(Generation):
+ """The negative flag iterative elimination algorithm."""
+
+ def __init__(self, exe_set, parent_task):
+ """Set up the base line parent task.
+
+ The parent task is the base line against which the new tasks are compared.
+ The new tasks are only different from the base line from one flag f by
+ either turning this flag f off, or lower the flag value by 1.
+ If a new task is better than the base line, one flag is identified that
+ gives degradation. The flag that give the worst degradation will be removed
+ or lower the value by 1 in the base in each iteration.
+
+ Args:
+ exe_set: A set of tasks to be run. Each one only differs from the
+ parent_task by one flag.
+ parent_task: The base line task, against which the new tasks in exe_set
+ are compared.
+ """
+
+ Generation.__init__(self, exe_set, None)
+ self._parent_task = parent_task
+
+ def IsImproved(self):
+ """Whether any new task has improvement upon the parent task."""
+
+ parent = self._parent_task
+ # Whether there is any new task that has improvement over the parent base
+ # line task.
+ for curr in [curr for curr in self.Pool() if curr != parent]:
+ if curr.IsImproved(parent):
+ return True
+
+ return False
+
+ def Next(self, cache):
+ """Find out the flag that gives the worst degradation.
+
+ Found out the flag that gives the worst degradation. Turn that flag off from
+ the base line and use the new base line for the new generation.
+
+ Args:
+ cache: A set of tasks that have been generated before.
+
+ Returns:
+ A set of new generations.
+ """
+ parent_task = self._parent_task
+
+ # Find out the task that gives the worst degradation.
+ worst_task = parent_task
+
+ for curr in [curr for curr in self.Pool() if curr != parent_task]:
+ # The method IsImproved, which is supposed to be called before, ensures
+ # that there is at least a task that improves upon the parent_task.
+ if curr.IsImproved(worst_task):
+ worst_task = curr
+
+ assert worst_task != parent_task
+
+ # The flags_set of the worst task.
+ work_flags_set = worst_task.GetFlags().GetFlags()
+
+ results = set([])
+
+ # If the flags_set contains no flag, i.e., all the flags have been
+ # eliminated, the algorithm stops.
+ if not work_flags_set:
+ return []
+
+ # Turn of the remaining flags one by one for the next generation.
+ for spec in work_flags_set:
+ flag_set = flags.FlagSet(_DecreaseFlag(work_flags_set, spec).values())
+ new_task = task.Task(flag_set)
+ if new_task not in cache:
+ results.add(new_task)
+
+ return [IterativeEliminationGeneration(results, worst_task)]
+
+
+class IterativeEliminationFirstGeneration(IterativeEliminationGeneration):
+ """The first iteration of the iterative elimination algorithm.
+
+ The first iteration also evaluates the base line task. The base line tasks in
+ the subsequent iterations have been evaluated. Therefore,
+ IterativeEliminationGeneration does not include the base line task in the
+ execution set.
+ """
+
+ def IsImproved(self):
+ # Find out the base line task in the execution set.
+ parent = next(task for task in self.Pool() if task == self._parent_task)
+ self._parent_task = parent
+
+ return IterativeEliminationGeneration.IsImproved(self)
diff --git a/bestflags/mock_task.py b/bestflags/mock_task.py
new file mode 100644
index 00000000..6de2b35c
--- /dev/null
+++ b/bestflags/mock_task.py
@@ -0,0 +1,92 @@
+# Copyright (c) 2013 The Chromium OS Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+"""This module defines the common mock tasks used by various unit tests.
+
+Part of the Chrome build flags optimization.
+"""
+
+__author__ = 'yuhenglong@google.com (Yuheng Long)'
+
+# Pick an integer at random.
+POISONPILL = 975
+
+
+class MockTask(object):
+ """This class emulates an actual task.
+
+ It does not do the actual work, but simply returns the result as given when
+ this task is constructed.
+ """
+
+ def __init__(self, stage, identifier, cost=0):
+ """Set up the results for this task.
+
+ Args:
+ stage: the stage of this test is in.
+ identifier: the identifier of this task.
+ cost: the mock cost of this task.
+
+ The _cost field stored the cost. Once this task is performed, i.e., by
+ calling the work method or by setting the result from other task, the
+ _cost field will have this cost. The stage field verifies that the module
+ being tested and the unitest are in the same stage. If the unitest does
+ not care about cost of this task, the cost parameter should be leaved
+ blank.
+ """
+
+ self._identifier = identifier
+ self._cost = cost
+ self._stage = stage
+
+ # Indicate that this method has not been performed yet.
+ self._performed = False
+
+ def __eq__(self, other):
+ if isinstance(other, MockTask):
+ return (self._identifier == other.GetIdentifier(self._stage) and
+ self._cost == other.GetResult(self._stage))
+ return False
+
+ def GetIdentifier(self, stage):
+ assert stage == self._stage
+ return self._identifier
+
+ def SetResult(self, stage, cost):
+ assert stage == self._stage
+ self._cost = cost
+ self._performed = True
+
+ def Work(self, stage):
+ assert stage == self._stage
+ self._performed = True
+
+ def GetResult(self, stage):
+ assert stage == self._stage
+ return self._cost
+
+ def Done(self, stage):
+ """Indicates whether the task has been performed."""
+
+ assert stage == self._stage
+ return self._performed
+
+ def LogSteeringCost(self):
+ pass
+
+
+class IdentifierMockTask(MockTask):
+ """This class defines the mock task that does not consider the cost.
+
+ The task instances will be inserted into a set. Therefore the hash and the
+ equal methods are overridden. The unittests that compares identities of the
+ tasks for equality can use this mock task instead of the base mock tack.
+ """
+
+ def __hash__(self):
+ return self._identifier
+
+ def __eq__(self, other):
+ if isinstance(other, MockTask):
+ return self._identifier == other.GetIdentifier(self._stage)
+ return False
diff --git a/bestflags/pipeline_process.py b/bestflags/pipeline_process.py
new file mode 100644
index 00000000..31f5f21f
--- /dev/null
+++ b/bestflags/pipeline_process.py
@@ -0,0 +1,123 @@
+# Copyright (c) 2013 The Chromium OS Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+"""Pipeline process that encapsulates the actual content.
+
+Part of the Chrome build flags optimization.
+
+The actual stages include the builder and the executor.
+"""
+
+__author__ = 'yuhenglong@google.com (Yuheng Long)'
+
+import multiprocessing
+
+# Pick an integer at random.
+POISONPILL = 975
+
+
+class PipelineProcess(multiprocessing.Process):
+ """A process that encapsulates the actual content pipeline stage.
+
+ The actual pipeline stage can be the builder or the tester. This process
+ continuously pull tasks from the queue until a poison pill is received.
+ Once a job is received, it will hand it to the actual stage for processing.
+
+ Each pipeline stage contains three modules.
+ The first module continuously pulls task from the input queue. It searches the
+ cache to check whether the task has encountered before. If so, duplicate
+ computation can be avoided.
+ The second module consists of a pool of workers that do the actual work, e.g.,
+ the worker will compile the source code and get the image in the builder
+ pipeline stage.
+ The third module is a helper that put the result cost to the cost field of the
+ duplicate tasks. For example, if two tasks are equivalent, only one task, say
+ t1 will be executed and the other task, say t2 will not be executed. The third
+ mode gets the result from t1, when it is available and set the cost of t2 to
+ be the same as that of t1.
+ """
+
+ def __init__(self, num_processes, name, cache, stage, task_queue, helper,
+ worker, result_queue):
+ """Set up input/output queue and the actual method to be called.
+
+ Args:
+ num_processes: Number of helpers subprocessors this stage has.
+ name: The name of this stage.
+ cache: The computed tasks encountered before.
+ stage: An int value that specifies the stage for this pipeline stage, for
+ example, build stage or test stage. This value will be used to retrieve
+ the keys in different stage. I.e., the flags set is the key in build
+ stage and the checksum is the key in the test stage. The key is used to
+ detect duplicates.
+ task_queue: The input task queue for this pipeline stage.
+ helper: The method hosted by the helper module to fill up the cost of the
+ duplicate tasks.
+ worker: The method hosted by the worker pools to do the actual work, e.g.,
+ compile the image.
+ result_queue: The output task queue for this pipeline stage.
+ """
+
+ multiprocessing.Process.__init__(self)
+
+ self._name = name
+ self._task_queue = task_queue
+ self._result_queue = result_queue
+
+ self._helper = helper
+ self._worker = worker
+
+ self._cache = cache
+ self._stage = stage
+ self._num_processes = num_processes
+
+ # the queues used by the modules for communication
+ manager = multiprocessing.Manager()
+ self._helper_queue = manager.Queue()
+ self._work_queue = manager.Queue()
+
+ def run(self):
+ """Busy pulling the next task from the queue for execution.
+
+ Once a job is pulled, this stage invokes the actual stage method and submits
+ the result to the next pipeline stage.
+
+ The process will terminate on receiving the poison pill from previous stage.
+ """
+
+ # the worker pool
+ work_pool = multiprocessing.Pool(self._num_processes)
+
+ # the helper process
+ helper_process = multiprocessing.Process(
+ target=self._helper,
+ args=(self._stage, self._cache, self._helper_queue, self._work_queue,
+ self._result_queue))
+ helper_process.start()
+ mycache = self._cache.keys()
+
+ while True:
+ task = self._task_queue.get()
+ if task == POISONPILL:
+ # Poison pill means shutdown
+ self._result_queue.put(POISONPILL)
+ break
+
+ task_key = task.GetIdentifier(self._stage)
+ if task_key in mycache:
+ # The task has been encountered before. It will be sent to the helper
+ # module for further processing.
+ self._helper_queue.put(task)
+ else:
+ # Let the workers do the actual work.
+ work_pool.apply_async(
+ self._worker,
+ args=(self._stage, task, self._work_queue, self._result_queue))
+ mycache.append(task_key)
+
+ # Shutdown the workers pool and the helper process.
+ work_pool.close()
+ work_pool.join()
+
+ self._helper_queue.put(POISONPILL)
+ helper_process.join()
diff --git a/bestflags/pipeline_process_test.py b/bestflags/pipeline_process_test.py
new file mode 100644
index 00000000..b9d84067
--- /dev/null
+++ b/bestflags/pipeline_process_test.py
@@ -0,0 +1,89 @@
+# Copyright (c) 2013 The Chromium OS Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+"""Pipeline Process unittest.
+
+Part of the Chrome build flags optimization.
+"""
+
+__author__ = 'yuhenglong@google.com (Yuheng Long)'
+
+import multiprocessing
+import unittest
+
+from mock_task import MockTask
+import pipeline_process
+
+# Pick an integer at random.
+ERROR = -334
+# Pick an integer at random.
+TEST_STAGE = -8
+
+
+def MockHelper(stage, done_dict, helper_queue, _, result_queue):
+ """This method echos input to the output."""
+
+ assert stage == TEST_STAGE
+ while True:
+ if not helper_queue.empty():
+ task = helper_queue.get()
+ if task == pipeline_process.POISONPILL:
+ # Poison pill means shutdown
+ break
+
+ if task in done_dict:
+ # verify that it does not get duplicate "1"s in the test.
+ result_queue.put(ERROR)
+ else:
+ result_queue.put(('helper', task.GetIdentifier(TEST_STAGE)))
+
+
+def MockWorker(stage, task, _, result_queue):
+ assert stage == TEST_STAGE
+ result_queue.put(('worker', task.GetIdentifier(TEST_STAGE)))
+
+
+class PipelineProcessTest(unittest.TestCase):
+ """This class test the PipelineProcess.
+
+ All the task inserted into the input queue should be taken out and hand to the
+ actual pipeline handler, except for the POISON_PILL. All these task should
+ also be passed to the next pipeline stage via the output queue.
+ """
+
+ def testRun(self):
+ """Test the run method.
+
+ Ensure that all the tasks inserted into the queue are properly handled.
+ """
+
+ manager = multiprocessing.Manager()
+ inp = manager.Queue()
+ output = manager.Queue()
+
+ process = pipeline_process.PipelineProcess(
+ 2, 'testing', {}, TEST_STAGE, inp, MockHelper, MockWorker, output)
+
+ process.start()
+ inp.put(MockTask(TEST_STAGE, 1))
+ inp.put(MockTask(TEST_STAGE, 1))
+ inp.put(MockTask(TEST_STAGE, 2))
+ inp.put(pipeline_process.POISONPILL)
+ process.join()
+
+ # All tasks are processed once and only once.
+ result = [('worker', 1), ('helper', 1), ('worker', 2),
+ pipeline_process.POISONPILL]
+ while result:
+ task = output.get()
+
+ # One "1"s is passed to the worker and one to the helper.
+ self.assertNotEqual(task, ERROR)
+
+ # The messages received should be exactly the same as the result.
+ self.assertTrue(task in result)
+ result.remove(task)
+
+
+if __name__ == '__main__':
+ unittest.main()
diff --git a/bestflags/pipeline_worker.py b/bestflags/pipeline_worker.py
new file mode 100644
index 00000000..e21ec2c8
--- /dev/null
+++ b/bestflags/pipeline_worker.py
@@ -0,0 +1,142 @@
+# Copyright (c) 2013 The Chromium OS Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+"""The pipeline_worker functions of the build and test stage of the framework.
+
+Part of the Chrome build flags optimization.
+
+This module defines the helper and the worker. If there are duplicate tasks, for
+example t1 and t2, needs to be built/tested, one of them, for example t1, will
+be built/tested and the helper waits for the result of t1 and set the results of
+the other task, t2 here, to be the same as that of t1. Setting the result of t2
+to be the same as t1 is referred to as resolving the result of t2.
+The worker invokes the work method of the tasks that are not duplicate.
+"""
+
+__author__ = 'yuhenglong@google.com (Yuheng Long)'
+
+import pipeline_process
+
+
+def Helper(stage, done_dict, helper_queue, completed_queue, result_queue):
+ """Helper that filters duplicate tasks.
+
+ This method Continuously pulls duplicate tasks from the helper_queue. The
+ duplicate tasks need not be compiled/tested. This method also pulls completed
+ tasks from the worker queue and let the results of the duplicate tasks be the
+ same as their corresponding finished task.
+
+ Args:
+ stage: The current stage of the pipeline, for example, build stage or test
+ stage.
+ done_dict: A dictionary of tasks that are done. The key of the dictionary is
+ the identifier of the task. The value of the dictionary is the results of
+ performing the corresponding task.
+ helper_queue: A queue of duplicate tasks whose results need to be resolved.
+ This is a communication channel between the pipeline_process and this
+ helper process.
+ completed_queue: A queue of tasks that have been built/tested. The results
+ of these tasks are needed to resolve the results of the duplicate tasks.
+ This is the communication channel between the workers and this helper
+ process.
+ result_queue: After the results of the duplicate tasks have been resolved,
+ the duplicate tasks will be sent to the next stage via this queue.
+ """
+
+ # The list of duplicate tasks, the results of which need to be resolved.
+ waiting_list = []
+
+ while True:
+ # Pull duplicate task from the helper queue.
+ if not helper_queue.empty():
+ task = helper_queue.get()
+
+ if task == pipeline_process.POISONPILL:
+ # Poison pill means no more duplicate task from the helper queue.
+ break
+
+ # The task has not been performed before.
+ assert not task.Done(stage)
+
+ # The identifier of this task.
+ identifier = task.GetIdentifier(stage)
+
+ # If a duplicate task comes before the corresponding resolved results from
+ # the completed_queue, it will be put in the waiting list. If the result
+ # arrives before the duplicate task, the duplicate task will be resolved
+ # right away.
+ if identifier in done_dict:
+ # This task has been encountered before and the result is available. The
+ # result can be resolved right away.
+ task.SetResult(stage, done_dict[identifier])
+ result_queue.put(task)
+ else:
+ waiting_list.append(task)
+
+ # Check and get completed tasks from completed_queue.
+ GetResultFromCompletedQueue(stage, completed_queue, done_dict, waiting_list,
+ result_queue)
+
+ # Wait to resolve the results of the remaining duplicate tasks.
+ while waiting_list:
+ GetResultFromCompletedQueue(stage, completed_queue, done_dict, waiting_list,
+ result_queue)
+
+
+def GetResultFromCompletedQueue(stage, completed_queue, done_dict, waiting_list,
+ result_queue):
+ """Pull results from the completed queue and resolves duplicate tasks.
+
+ Args:
+ stage: The current stage of the pipeline, for example, build stage or test
+ stage.
+ completed_queue: A queue of tasks that have been performed. The results of
+ these tasks are needed to resolve the results of the duplicate tasks. This
+ is the communication channel between the workers and this method.
+ done_dict: A dictionary of tasks that are done. The key of the dictionary is
+ the optimization flags of the task. The value of the dictionary is the
+ compilation results of the corresponding task.
+ waiting_list: The list of duplicate tasks, the results of which need to be
+ resolved.
+ result_queue: After the results of the duplicate tasks have been resolved,
+ the duplicate tasks will be sent to the next stage via this queue.
+
+ This helper method tries to pull a completed task from the completed queue.
+ If it gets a task from the queue, it resolves the results of all the relevant
+ duplicate tasks in the waiting list. Relevant tasks are the tasks that have
+ the same flags as the currently received results from the completed_queue.
+ """
+ # Pull completed task from the worker queue.
+ if not completed_queue.empty():
+ (identifier, result) = completed_queue.get()
+ done_dict[identifier] = result
+
+ tasks = [t for t in waiting_list if t.GetIdentifier(stage) == identifier]
+ for duplicate_task in tasks:
+ duplicate_task.SetResult(stage, result)
+ result_queue.put(duplicate_task)
+ waiting_list.remove(duplicate_task)
+
+
+def Worker(stage, task, helper_queue, result_queue):
+ """Worker that performs the task.
+
+ This method calls the work method of the input task and distribute the result
+ to the helper and the next stage.
+
+ Args:
+ stage: The current stage of the pipeline, for example, build stage or test
+ stage.
+ task: Input task that needs to be performed.
+ helper_queue: Queue that holds the completed tasks and the results. This is
+ the communication channel between the worker and the helper.
+ result_queue: Queue that holds the completed tasks and the results. This is
+ the communication channel between the worker and the next stage.
+ """
+
+ # The task has not been completed before.
+ assert not task.Done(stage)
+
+ task.Work(stage)
+ helper_queue.put((task.GetIdentifier(stage), task.GetResult(stage)))
+ result_queue.put(task)
diff --git a/bestflags/pipeline_worker_test.py b/bestflags/pipeline_worker_test.py
new file mode 100644
index 00000000..e3de5e12
--- /dev/null
+++ b/bestflags/pipeline_worker_test.py
@@ -0,0 +1,128 @@
+# Copyright (c) 2013 The Chromium OS Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+"""Unittest for the pipeline_worker functions in the build/test stage.
+
+Part of the Chrome build flags optimization.
+
+This module tests the helper method and the worker method.
+"""
+
+__author__ = 'yuhenglong@google.com (Yuheng Long)'
+
+import multiprocessing
+import random
+import sys
+import unittest
+
+from mock_task import MockTask
+import pipeline_process
+import pipeline_worker
+
+# Pick an integer at random.
+TEST_STAGE = -3
+
+
+def MockTaskCostGenerator():
+ """Calls a random number generator and returns a negative number."""
+ return random.randint(-sys.maxint - 1, -1)
+
+
+class PipelineWorkerTest(unittest.TestCase):
+ """This class tests the pipeline_worker functions.
+
+ Given the same identifier, the cost should result the same from the
+ pipeline_worker functions.
+ """
+
+ def testHelper(self):
+ """"Test the helper.
+
+ Call the helper method twice, and test the results. The results should be
+ the same, i.e., the cost should be the same.
+ """
+
+ # Set up the input, helper and output queue for the helper method.
+ manager = multiprocessing.Manager()
+ helper_queue = manager.Queue()
+ result_queue = manager.Queue()
+ completed_queue = manager.Queue()
+
+ # Set up the helper process that holds the helper method.
+ helper_process = multiprocessing.Process(
+ target=pipeline_worker.Helper,
+ args=(TEST_STAGE, {}, helper_queue, completed_queue, result_queue))
+ helper_process.start()
+
+ # A dictionary defines the mock result to the helper.
+ mock_result = {1: 1995, 2: 59, 9: 1027}
+
+ # Test if there is a task that is done before, whether the duplicate task
+ # will have the same result. Here, two different scenarios are tested. That
+ # is the mock results are added to the completed_queue before and after the
+ # corresponding mock tasks being added to the input queue.
+ completed_queue.put((9, mock_result[9]))
+
+ # The output of the helper should contain all the following tasks.
+ results = [1, 1, 2, 9]
+
+ # Testing the correctness of having tasks having the same identifier, here
+ # 1.
+ for result in results:
+ helper_queue.put(MockTask(TEST_STAGE, result, MockTaskCostGenerator()))
+
+ completed_queue.put((2, mock_result[2]))
+ completed_queue.put((1, mock_result[1]))
+
+ # Signal there is no more duplicate task.
+ helper_queue.put(pipeline_process.POISONPILL)
+ helper_process.join()
+
+ while results:
+ task = result_queue.get()
+ identifier = task.GetIdentifier(TEST_STAGE)
+ self.assertTrue(identifier in results)
+ if identifier in mock_result:
+ self.assertTrue(task.GetResult(TEST_STAGE), mock_result[identifier])
+ results.remove(identifier)
+
+ def testWorker(self):
+ """"Test the worker method.
+
+ The worker should process all the input tasks and output the tasks to the
+ helper and result queue.
+ """
+
+ manager = multiprocessing.Manager()
+ result_queue = manager.Queue()
+ completed_queue = manager.Queue()
+
+ # A dictionary defines the mock tasks and their corresponding results.
+ mock_work_tasks = {1: 86, 2: 788}
+
+ mock_tasks = []
+
+ for flag, cost in mock_work_tasks.iteritems():
+ mock_tasks.append(MockTask(TEST_STAGE, flag, cost))
+
+ # Submit the mock tasks to the worker.
+ for mock_task in mock_tasks:
+ pipeline_worker.Worker(TEST_STAGE, mock_task, completed_queue,
+ result_queue)
+
+ # The tasks, from the output queue, should be the same as the input and
+ # should be performed.
+ for task in mock_tasks:
+ output = result_queue.get()
+ self.assertEqual(output, task)
+ self.assertTrue(output.Done(TEST_STAGE))
+
+ # The tasks, from the completed_queue, should be defined in the
+ # mock_work_tasks dictionary.
+ for flag, cost in mock_work_tasks.iteritems():
+ helper_input = completed_queue.get()
+ self.assertEqual(helper_input, (flag, cost))
+
+
+if __name__ == '__main__':
+ unittest.main()
diff --git a/bestflags/steering.py b/bestflags/steering.py
new file mode 100644
index 00000000..320f7c37
--- /dev/null
+++ b/bestflags/steering.py
@@ -0,0 +1,116 @@
+# Copyright (c) 2013 The Chromium OS Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+"""The framework stage that produces the next generation of tasks to run.
+
+Part of the Chrome build flags optimization.
+"""
+
+__author__ = 'yuhenglong@google.com (Yuheng Long)'
+
+import pipeline_process
+
+
+def Steering(cache, generations, input_queue, result_queue):
+ """The core method template that produces the next generation of tasks to run.
+
+ This method waits for the results of the tasks from the previous generation.
+ Upon the arrival of all these results, the method uses them to generate the
+ next generation of tasks.
+
+ The main logic of producing the next generation from previous generation is
+ application specific. For example, in the genetic algorithm, a task is
+ produced by combining two parents tasks, while in the hill climbing algorithm,
+ a task is generated by its immediate neighbor. The method 'Next' is overridden
+ in the concrete subclasses of the class Generation to produce the next
+ application-specific generation. The steering method invokes the 'Next'
+ method, produces the next generation and submits the tasks in this generation
+ to the next stage, e.g., the build/compilation stage.
+
+ Args:
+ cache: It stores the experiments that have been conducted before. Used to
+ avoid duplicate works.
+ generations: The initial generations of tasks to be run.
+ input_queue: The input results from the last stage of the framework. These
+ results will trigger new iteration of the algorithm.
+ result_queue: The output task queue for this pipeline stage. The new tasks
+ generated by the steering algorithm will be sent to the next stage via
+ this queue.
+ """
+
+ # Generations that have pending tasks to be executed. Pending tasks are those
+ # whose results are not ready. The tasks that have their results ready are
+ # referenced to as ready tasks. Once there is no pending generation, the
+ # algorithm terminates.
+ waiting = generations
+
+ # Record how many initial tasks there are. If there is no task at all, the
+ # algorithm can terminate right away.
+ num_tasks = 0
+
+ # Submit all the tasks in the initial generations to the next stage of the
+ # framework. The next stage can be the build/compilation stage.
+ for generation in generations:
+ # Only send the task that has not been performed before to the next stage.
+ for task in [task for task in generation.Pool() if task not in cache]:
+ result_queue.put(task)
+ cache.add(task)
+ num_tasks += 1
+
+ # If there is no task to be executed at all, the algorithm returns right away.
+ if not num_tasks:
+ # Inform the next stage that there will be no more task.
+ result_queue.put(pipeline_process.POISONPILL)
+ return
+
+ # The algorithm is done if there is no pending generation. A generation is
+ # pending if it has pending task.
+ while waiting:
+ # Busy-waiting for the next task.
+ if input_queue.empty():
+ continue
+
+ # If there is a task whose result is ready from the last stage of the
+ # feedback loop, there will be one less pending task.
+
+ task = input_queue.get()
+
+ # Store the result of this ready task. Intermediate results can be used to
+ # generate report for final result or be used to reboot from a crash from
+ # the failure of any module of the framework.
+ task.LogSteeringCost()
+
+ # Find out which pending generation this ready task belongs to. This pending
+ # generation will have one less pending task. The "next" expression iterates
+ # the generations in waiting until the first generation whose UpdateTask
+ # method returns true.
+ generation = next(gen for gen in waiting if gen.UpdateTask(task))
+
+ # If there is still any pending task, do nothing.
+ if not generation.Done():
+ continue
+
+ # All the tasks in the generation are finished. The generation is ready to
+ # produce the next generation.
+ waiting.remove(generation)
+
+ # Check whether a generation should generate the next generation.
+ # A generation may not generate the next generation, e.g., because a
+ # fixpoint has been reached, there has not been any improvement for a few
+ # generations or a local maxima is reached.
+ if not generation.IsImproved():
+ continue
+
+ for new_generation in generation.Next(cache):
+ # Make sure that each generation should contain at least one task.
+ assert new_generation.Pool()
+ waiting.append(new_generation)
+
+ # Send the tasks of the new generations to the next stage for execution.
+ for new_task in new_generation.Pool():
+ result_queue.put(new_task)
+ cache.add(new_task)
+
+ # Steering algorithm is finished and it informs the next stage that there will
+ # be no more task.
+ result_queue.put(pipeline_process.POISONPILL)
diff --git a/bestflags/steering_test.py b/bestflags/steering_test.py
new file mode 100644
index 00000000..c96e362f
--- /dev/null
+++ b/bestflags/steering_test.py
@@ -0,0 +1,170 @@
+# Copyright (c) 2013 The Chromium OS Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+"""Steering stage unittest.
+
+Part of the Chrome build flags optimization.
+"""
+
+__author__ = 'yuhenglong@google.com (Yuheng Long)'
+
+import multiprocessing
+import unittest
+
+from generation import Generation
+from mock_task import IdentifierMockTask
+import pipeline_process
+import steering
+
+# Pick an integer at random.
+STEERING_TEST_STAGE = -8
+
+# The number of generations to be used to do the testing.
+NUMBER_OF_GENERATIONS = 20
+
+# The number of tasks to be put in each generation to be tested.
+NUMBER_OF_TASKS = 20
+
+# The stride of permutation used to shuffle the input list of tasks. Should be
+# relatively prime with NUMBER_OF_TASKS.
+STRIDE = 7
+
+
+class MockGeneration(Generation):
+ """This class emulates an actual generation.
+
+ It will output the next_generations when the method Next is called. The
+ next_generations is initiated when the MockGeneration instance is constructed.
+ """
+
+ def __init__(self, tasks, next_generations):
+ """Set up the next generations for this task.
+
+ Args:
+ tasks: A set of tasks to be run.
+ next_generations: A list of generations as the next generation of the
+ current generation.
+ """
+ Generation.__init__(self, tasks, None)
+ self._next_generations = next_generations
+
+ def Next(self, _):
+ return self._next_generations
+
+ def IsImproved(self):
+ if self._next_generations:
+ return True
+ return False
+
+
+class SteeringTest(unittest.TestCase):
+ """This class test the steering method.
+
+ The steering algorithm should return if there is no new task in the initial
+ generation. The steering algorithm should send all the tasks to the next stage
+ and should terminate once there is no pending generation. A generation is
+ pending if it contains pending task. A task is pending if its (test) result
+ is not ready.
+ """
+
+ def testSteering(self):
+ """Test that the steering algorithm processes all the tasks properly.
+
+ Test that the steering algorithm sends all the tasks to the next stage. Test
+ that the steering algorithm terminates once all the tasks have been
+ processed, i.e., the results for the tasks are all ready.
+ """
+
+ # A list of generations used to test the steering stage.
+ generations = []
+
+ task_index = 0
+ previous_generations = None
+
+ # Generate a sequence of generations to be tested. Each generation will
+ # output the next generation in reverse order of the list when the "Next"
+ # method is called.
+ for _ in range(NUMBER_OF_GENERATIONS):
+ # Use a consecutive sequence of numbers as identifiers for the set of
+ # tasks put into a generation.
+ test_ranges = range(task_index, task_index + NUMBER_OF_TASKS)
+ tasks = [IdentifierMockTask(STEERING_TEST_STAGE, t) for t in test_ranges]
+ steering_tasks = set(tasks)
+
+ # Let the previous generation as the offspring generation of the current
+ # generation.
+ current_generation = MockGeneration(steering_tasks, previous_generations)
+ generations.insert(0, current_generation)
+ previous_generations = [current_generation]
+
+ task_index += NUMBER_OF_TASKS
+
+ # If there is no generation at all, the unittest returns right away.
+ if not current_generation:
+ return
+
+ # Set up the input and result queue for the steering method.
+ manager = multiprocessing.Manager()
+ input_queue = manager.Queue()
+ result_queue = manager.Queue()
+
+ steering_process = multiprocessing.Process(
+ target=steering.Steering,
+ args=(set(), [current_generation], input_queue, result_queue))
+ steering_process.start()
+
+ # Test that each generation is processed properly. I.e., the generations are
+ # processed in order.
+ while generations:
+ generation = generations.pop(0)
+ tasks = [task for task in generation.Pool()]
+
+ # Test that all the tasks are processed once and only once.
+ while tasks:
+ task = result_queue.get()
+
+ assert task in tasks
+ tasks.remove(task)
+
+ input_queue.put(task)
+
+ task = result_queue.get()
+
+ # Test that the steering algorithm returns properly after processing all
+ # the generations.
+ assert task == pipeline_process.POISONPILL
+
+ steering_process.join()
+
+ def testCache(self):
+ """The steering algorithm returns immediately if there is no new tasks.
+
+ If all the new tasks have been cached before, the steering algorithm does
+ not have to execute these tasks again and thus can terminate right away.
+ """
+
+ # Put a set of tasks in the cache and add this set to initial generation.
+ test_ranges = range(NUMBER_OF_TASKS)
+ tasks = [IdentifierMockTask(STEERING_TEST_STAGE, t) for t in test_ranges]
+ steering_tasks = set(tasks)
+
+ current_generation = MockGeneration(steering_tasks, None)
+
+ # Set up the input and result queue for the steering method.
+ manager = multiprocessing.Manager()
+ input_queue = manager.Queue()
+ result_queue = manager.Queue()
+
+ steering_process = multiprocessing.Process(
+ target=steering.Steering,
+ args=(steering_tasks, [current_generation], input_queue, result_queue))
+
+ steering_process.start()
+
+ # Test that the steering method returns right away.
+ assert result_queue.get() == pipeline_process.POISONPILL
+ steering_process.join()
+
+
+if __name__ == '__main__':
+ unittest.main()
diff --git a/bestflags/task.py b/bestflags/task.py
new file mode 100644
index 00000000..f055fc75
--- /dev/null
+++ b/bestflags/task.py
@@ -0,0 +1,450 @@
+# Copyright (c) 2013 The Chromium OS Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+"""A reproducing entity.
+
+Part of the Chrome build flags optimization.
+
+The Task class is used by different modules. Each module fills in the
+corresponding information into a Task instance. Class Task contains the bit set
+representing the flags selection. The builder module is responsible for filling
+the image and the checksum field of a Task. The executor module will put the
+execution output to the execution field.
+"""
+
+__author__ = 'yuhenglong@google.com (Yuheng Long)'
+
+import os
+import subprocess
+import sys
+from uuid import uuid4
+
+BUILD_STAGE = 1
+TEST_STAGE = 2
+
+# Message indicating that the build or test failed.
+ERROR_STRING = 'error'
+
+# The maximum number of tries a build can have. Some compilations may fail due
+# to unexpected environment circumstance. This variable defines how many tries
+# the build should attempt before giving up.
+BUILD_TRIES = 3
+
+# The maximum number of tries a test can have. Some tests may fail due to
+# unexpected environment circumstance. This variable defines how many tries the
+# test should attempt before giving up.
+TEST_TRIES = 3
+
+
+# Create the file/directory if it does not already exist.
+def _CreateDirectory(file_name):
+ directory = os.path.dirname(file_name)
+ if not os.path.exists(directory):
+ os.makedirs(directory)
+
+
+class Task(object):
+ """A single reproducing entity.
+
+ A single test of performance with a particular set of flags. It records the
+ flag set, the image, the check sum of the image and the cost.
+ """
+
+ # The command that will be used in the build stage to compile the tasks.
+ BUILD_COMMAND = None
+ # The command that will be used in the test stage to test the tasks.
+ TEST_COMMAND = None
+ # The directory to log the compilation and test results.
+ LOG_DIRECTORY = None
+
+ @staticmethod
+ def InitLogCommand(build_command, test_command, log_directory):
+ """Set up the build and test command for the task and the log directory.
+
+ This framework is generic. It lets the client specify application specific
+ compile and test methods by passing different build_command and
+ test_command.
+
+ Args:
+ build_command: The command that will be used in the build stage to compile
+ this task.
+ test_command: The command that will be used in the test stage to test this
+ task.
+ log_directory: The directory to log the compilation and test results.
+ """
+
+ Task.BUILD_COMMAND = build_command
+ Task.TEST_COMMAND = test_command
+ Task.LOG_DIRECTORY = log_directory
+
+ def __init__(self, flag_set):
+ """Set up the optimization flag selection for this task.
+
+ Args:
+ flag_set: The optimization flag set that is encapsulated by this task.
+ """
+
+ self._flag_set = flag_set
+
+ # A unique identifier that distinguishes this task from other tasks.
+ self._task_identifier = uuid4()
+
+ self._log_path = (Task.LOG_DIRECTORY, self._task_identifier)
+
+ # Initiate the hash value. The hash value is used so as not to recompute it
+ # every time the hash method is called.
+ self._hash_value = None
+
+ # Indicate that the task has not been compiled/tested.
+ self._build_cost = None
+ self._exe_cost = None
+ self._checksum = None
+ self._image = None
+ self._file_length = None
+ self._text_length = None
+
+ def __eq__(self, other):
+ """Test whether two tasks are equal.
+
+ Two tasks are equal if their flag_set are equal.
+
+ Args:
+ other: The other task with which this task is tested equality.
+ Returns:
+ True if the encapsulated flag sets are equal.
+ """
+ if isinstance(other, Task):
+ return self.GetFlags() == other.GetFlags()
+ return False
+
+ def __hash__(self):
+ if self._hash_value is None:
+ # Cache the hash value of the flags, so as not to recompute them.
+ self._hash_value = hash(self._flag_set)
+ return self._hash_value
+
+ def GetIdentifier(self, stage):
+ """Get the identifier of the task in the stage.
+
+ The flag set uniquely identifies a task in the build stage. The checksum of
+ the image of the task uniquely identifies the task in the test stage.
+
+ Args:
+ stage: The stage (build/test) in which this method is called.
+ Returns:
+ Return the flag set in build stage and return the checksum in test stage.
+ """
+
+ # Define the dictionary for different stage function lookup.
+ get_identifier_functions = {BUILD_STAGE: self.FormattedFlags,
+ TEST_STAGE: self.__GetCheckSum}
+
+ assert stage in get_identifier_functions
+ return get_identifier_functions[stage]()
+
+ def GetResult(self, stage):
+ """Get the performance results of the task in the stage.
+
+ Args:
+ stage: The stage (build/test) in which this method is called.
+ Returns:
+ Performance results.
+ """
+
+ # Define the dictionary for different stage function lookup.
+ get_result_functions = {BUILD_STAGE: self.__GetBuildResult,
+ TEST_STAGE: self.GetTestResult}
+
+ assert stage in get_result_functions
+
+ return get_result_functions[stage]()
+
+ def SetResult(self, stage, result):
+ """Set the performance results of the task in the stage.
+
+ This method is called by the pipeling_worker to set the results for
+ duplicated tasks.
+
+ Args:
+ stage: The stage (build/test) in which this method is called.
+ result: The performance results of the stage.
+ """
+
+ # Define the dictionary for different stage function lookup.
+ set_result_functions = {BUILD_STAGE: self.__SetBuildResult,
+ TEST_STAGE: self.__SetTestResult}
+
+ assert stage in set_result_functions
+
+ set_result_functions[stage](result)
+
+ def Done(self, stage):
+ """Check whether the stage is done.
+
+ Args:
+ stage: The stage to be checked, build or test.
+ Returns:
+ True if the stage is done.
+ """
+
+ # Define the dictionary for different result string lookup.
+ done_string = {BUILD_STAGE: self._build_cost, TEST_STAGE: self._exe_cost}
+
+ assert stage in done_string
+
+ return done_string[stage] is not None
+
+ def Work(self, stage):
+ """Perform the task.
+
+ Args:
+ stage: The stage in which the task is performed, compile or test.
+ """
+
+ # Define the dictionary for different stage function lookup.
+ work_functions = {BUILD_STAGE: self.__Compile, TEST_STAGE: self.__Test}
+
+ assert stage in work_functions
+
+ work_functions[stage]()
+
+ def FormattedFlags(self):
+ """Format the optimization flag set of this task.
+
+ Returns:
+ The formatted optimization flag set that is encapsulated by this task.
+ """
+ return str(self._flag_set.FormattedForUse())
+
+ def GetFlags(self):
+ """Get the optimization flag set of this task.
+
+ Returns:
+ The optimization flag set that is encapsulated by this task.
+ """
+
+ return self._flag_set
+
+ def __GetCheckSum(self):
+ """Get the compilation image checksum of this task.
+
+ Returns:
+ The compilation image checksum of this task.
+ """
+
+ # The checksum should be computed before this method is called.
+ assert self._checksum is not None
+ return self._checksum
+
+ def __Compile(self):
+ """Run a compile.
+
+ This method compile an image using the present flags, get the image,
+ test the existent of the image and gathers monitoring information, and sets
+ the internal cost (fitness) for this set of flags.
+ """
+
+ # Format the flags as a string as input to compile command. The unique
+ # identifier is passed to the compile command. If concurrent processes are
+ # used to compile different tasks, these processes can use the identifier to
+ # write to different file.
+ flags = self._flag_set.FormattedForUse()
+ command = '%s %s %s' % (Task.BUILD_COMMAND, ' '.join(flags),
+ self._task_identifier)
+
+ # Try BUILD_TRIES number of times before confirming that the build fails.
+ for _ in range(BUILD_TRIES):
+ try:
+ # Execute the command and get the execution status/results.
+ p = subprocess.Popen(command.split(),
+ stdout=subprocess.PIPE,
+ stderr=subprocess.PIPE)
+ (out, err) = p.communicate()
+
+ if out:
+ out = out.strip()
+ if out != ERROR_STRING:
+ # Each build results contains the checksum of the result image, the
+ # performance cost of the build, the compilation image, the length
+ # of the build, and the length of the text section of the build.
+ (checksum, cost, image, file_length, text_length) = out.split()
+ # Build successfully.
+ break
+
+ # Build failed.
+ cost = ERROR_STRING
+ except _:
+ # If there is exception getting the cost information of the build, the
+ # build failed.
+ cost = ERROR_STRING
+
+ # Convert the build cost from String to integer. The build cost is used to
+ # compare a task with another task. Set the build cost of the failing task
+ # to the max integer. The for loop will keep trying until either there is a
+ # success or BUILD_TRIES number of tries have been conducted.
+ self._build_cost = sys.maxint if cost == ERROR_STRING else float(cost)
+
+ self._checksum = checksum
+ self._file_length = file_length
+ self._text_length = text_length
+ self._image = image
+
+ self.__LogBuildCost(err)
+
+ def __Test(self):
+ """__Test the task against benchmark(s) using the input test command."""
+
+ # Ensure that the task is compiled before being tested.
+ assert self._image is not None
+
+ # If the task does not compile, no need to test.
+ if self._image == ERROR_STRING:
+ self._exe_cost = ERROR_STRING
+ return
+
+ # The unique identifier is passed to the test command. If concurrent
+ # processes are used to compile different tasks, these processes can use the
+ # identifier to write to different file.
+ command = '%s %s %s' % (Task.TEST_COMMAND, self._image,
+ self._task_identifier)
+
+ # Try TEST_TRIES number of times before confirming that the build fails.
+ for _ in range(TEST_TRIES):
+ try:
+ p = subprocess.Popen(command.split(),
+ stdout=subprocess.PIPE,
+ stderr=subprocess.PIPE)
+ (out, err) = p.communicate()
+
+ if out:
+ out = out.strip()
+ if out != ERROR_STRING:
+ # The test results contains the performance cost of the test.
+ cost = out
+ # Test successfully.
+ break
+
+ # Test failed.
+ cost = ERROR_STRING
+ except _:
+ # If there is exception getting the cost information of the test, the
+ # test failed. The for loop will keep trying until either there is a
+ # success or TEST_TRIES number of tries have been conducted.
+ cost = ERROR_STRING
+
+ self._exe_cost = sys.maxint if (cost == ERROR_STRING) else float(cost)
+
+ self.__LogTestCost(err)
+
+ def __SetBuildResult(self, (checksum, build_cost, image, file_length,
+ text_length)):
+ self._checksum = checksum
+ self._build_cost = build_cost
+ self._image = image
+ self._file_length = file_length
+ self._text_length = text_length
+
+ def __GetBuildResult(self):
+ return (self._checksum, self._build_cost, self._image, self._file_length,
+ self._text_length)
+
+ def GetTestResult(self):
+ return self._exe_cost
+
+ def __SetTestResult(self, exe_cost):
+ self._exe_cost = exe_cost
+
+ def LogSteeringCost(self):
+ """Log the performance results for the task.
+
+ This method is called by the steering stage and this method writes the
+ results out to a file. The results include the build and the test results.
+ """
+
+ steering_log = '%s/%s/steering.txt' % self._log_path
+
+ _CreateDirectory(steering_log)
+
+ with open(steering_log, 'w') as out_file:
+ # Include the build and the test results.
+ steering_result = (self._flag_set, self._checksum, self._build_cost,
+ self._image, self._file_length, self._text_length,
+ self._exe_cost)
+
+ # Write out the result in the comma-separated format (CSV).
+ out_file.write('%s,%s,%s,%s,%s,%s,%s\n' % steering_result)
+
+ def __LogBuildCost(self, log):
+ """Log the build results for the task.
+
+ The build results include the compilation time of the build, the result
+ image, the checksum, the file length and the text length of the image.
+ The file length of the image includes the length of the file of the image.
+ The text length only includes the length of the text section of the image.
+
+ Args:
+ log: The build log of this task.
+ """
+
+ build_result_log = '%s/%s/build.txt' % self._log_path
+
+ _CreateDirectory(build_result_log)
+
+ with open(build_result_log, 'w') as out_file:
+ build_result = (self._flag_set, self._build_cost, self._image,
+ self._checksum, self._file_length, self._text_length)
+
+ # Write out the result in the comma-separated format (CSV).
+ out_file.write('%s,%s,%s,%s,%s,%s\n' % build_result)
+
+ # The build information about running the build.
+ build_run_log = '%s/%s/build_log.txt' % self._log_path
+ _CreateDirectory(build_run_log)
+
+ with open(build_run_log, 'w') as out_log_file:
+ # Write out the execution information.
+ out_log_file.write('%s' % log)
+
+ def __LogTestCost(self, log):
+ """Log the test results for the task.
+
+ The test results include the runtime execution time of the test.
+
+ Args:
+ log: The test log of this task.
+ """
+
+ test_log = '%s/%s/test.txt' % self._log_path
+
+ _CreateDirectory(test_log)
+
+ with open(test_log, 'w') as out_file:
+ test_result = (self._flag_set, self._checksum, self._exe_cost)
+
+ # Write out the result in the comma-separated format (CSV).
+ out_file.write('%s,%s,%s\n' % test_result)
+
+ # The execution information about running the test.
+ test_run_log = '%s/%s/test_log.txt' % self._log_path
+
+ _CreateDirectory(test_run_log)
+
+ with open(test_run_log, 'w') as out_log_file:
+ # Append the test log information.
+ out_log_file.write('%s' % log)
+
+ def IsImproved(self, other):
+ """Compare the current task with another task.
+
+ Args:
+ other: The other task against which the current task is compared.
+
+ Returns:
+ True if this task has improvement upon the other task.
+ """
+
+ # The execution costs must have been initiated.
+ assert self._exe_cost is not None
+ assert other.GetTestResult() is not None
+
+ return self._exe_cost < other.GetTestResult()
diff --git a/bestflags/task_test.py b/bestflags/task_test.py
new file mode 100644
index 00000000..68a7bf78
--- /dev/null
+++ b/bestflags/task_test.py
@@ -0,0 +1,174 @@
+# Copyright (c) 2013 The Chromium OS Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+"""Task unittest.
+
+Part of the Chrome build flags optimization.
+"""
+
+__author__ = 'yuhenglong@google.com (Yuheng Long)'
+
+import random
+import sys
+import unittest
+
+import task
+from task import Task
+
+# The number of flags be tested.
+NUM_FLAGS = 20
+
+# The random build result values used to test get set result method.
+RANDOM_BUILD_RESULT = 100
+
+# The random test result values used to test get set result method.
+RANDOM_TESTRESULT = 100
+
+
+class MockFlagSet(object):
+ """This class emulates a set of flags.
+
+ It returns the flags and hash value, when the FormattedForUse method and the
+ __hash__ method is called, respectively. These values are initialized when the
+ MockFlagSet instance is constructed.
+ """
+
+ def __init__(self, flags=0, hash_value=-1):
+ self._flags = flags
+ self._hash_value = hash_value
+
+ def __eq__(self, other):
+ assert isinstance(other, MockFlagSet)
+ return self._flags == other.FormattedForUse()
+
+ def FormattedForUse(self):
+ return self._flags
+
+ def __hash__(self):
+ return self._hash_value
+
+ def GetHash(self):
+ return self._hash_value
+
+
+class TaskTest(unittest.TestCase):
+ """This class test the Task class."""
+
+ def testEqual(self):
+ """Test the equal method of the task.
+
+ Two tasks are equal if and only if their encapsulated flag_sets are equal.
+ """
+
+ flags = range(NUM_FLAGS)
+
+ # Two tasks having the same flag set should be equivalent.
+ flag_sets = [MockFlagSet(flag) for flag in flags]
+ for flag_set in flag_sets:
+ assert Task(flag_set) == Task(flag_set)
+
+ # Two tasks having different flag set should be different.
+ for flag_set in flag_sets:
+ test_task = Task(flag_set)
+ other_flag_sets = [flags for flags in flag_sets if flags != flag_set]
+ for flag_set1 in other_flag_sets:
+ assert test_task != Task(flag_set1)
+
+ def testHash(self):
+ """Test the hash method of the task.
+
+ Two tasks are equal if and only if their encapsulated flag_sets are equal.
+ """
+
+ # Random identifier that is not relevant in this test.
+ identifier = random.randint(-sys.maxint - 1, -1)
+
+ flag_sets = [MockFlagSet(identifier, value) for value in range(NUM_FLAGS)]
+ for flag_set in flag_sets:
+ # The hash of a task is the same as the hash of its flag set.
+ hash_task = Task(flag_set)
+ hash_value = hash(hash_task)
+ assert hash_value == flag_set.GetHash()
+
+ # The hash of a task does not change.
+ assert hash_value == hash(hash_task)
+
+ def testGetIdentifier(self):
+ """Test the get identifier method of the task.
+
+ The get identifier method should returns the flag set in the build stage.
+ """
+
+ flag_sets = [MockFlagSet(flag) for flag in range(NUM_FLAGS)]
+ for flag_set in flag_sets:
+ identifier_task = Task(flag_set)
+
+ identifier = identifier_task.GetIdentifier(task.BUILD_STAGE)
+
+ # The task formats the flag set into a string.
+ assert identifier == str(flag_set.FormattedForUse())
+
+ def testGetSetResult(self):
+ """Test the get and set result methods of the task.
+
+ The get result method should return the same results as were set.
+ """
+
+ flag_sets = [MockFlagSet(flag) for flag in range(NUM_FLAGS)]
+ for flag_set in flag_sets:
+ result_task = Task(flag_set)
+
+ # The get result method should return the same results as were set, in
+ # build stage. Currently, the build result is a 5-element tuple containing
+ # the checksum of the result image, the performance cost of the build, the
+ # compilation image, the length of the build, and the length of the text
+ # section of the build.
+ result = tuple([random.randint(0, RANDOM_BUILD_RESULT) for _ in range(5)])
+ result_task.SetResult(task.BUILD_STAGE, result)
+ assert result == result_task.GetResult(task.BUILD_STAGE)
+
+ # The checksum is the identifier of the test stage.
+ identifier = result_task.GetIdentifier(task.TEST_STAGE)
+ # The first element of the result tuple is the checksum.
+ assert identifier == result[0]
+
+ # The get result method should return the same results as were set, in
+ # test stage.
+ random_test_result = random.randint(0, RANDOM_TESTRESULT)
+ result_task.SetResult(task.TEST_STAGE, random_test_result)
+ test_result = result_task.GetResult(task.TEST_STAGE)
+ assert test_result == random_test_result
+
+ def testDone(self):
+ """Test the done methods of the task.
+
+ The done method should return false is the task has not perform and return
+ true after the task is finished.
+ """
+
+ flags = range(NUM_FLAGS)
+
+ flag_sets = [MockFlagSet(flag) for flag in flags]
+ for flag_set in flag_sets:
+ work_task = Task(flag_set)
+
+ # The task has not been compiled nor tested.
+ assert not work_task.Done(task.TEST_STAGE)
+ assert not work_task.Done(task.BUILD_STAGE)
+
+ # After the task has been compiled, it should indicate finished in BUILD
+ # stage.
+ result = tuple([random.randint(0, RANDOM_BUILD_RESULT) for _ in range(5)])
+ work_task.SetResult(task.BUILD_STAGE, result)
+ assert not work_task.Done(task.TEST_STAGE)
+ assert work_task.Done(task.BUILD_STAGE)
+
+ # After the task has been tested, it should indicate finished in TEST
+ # stage.
+ work_task.SetResult(task.TEST_STAGE, random.randint(0, RANDOM_TESTRESULT))
+ assert work_task.Done(task.TEST_STAGE)
+ assert work_task.Done(task.BUILD_STAGE)
+
+
+if __name__ == '__main__':
+ unittest.main()
diff --git a/bestflags/testing_batch.py b/bestflags/testing_batch.py
new file mode 100644
index 00000000..ffe19448
--- /dev/null
+++ b/bestflags/testing_batch.py
@@ -0,0 +1,450 @@
+# Copyright (c) 2013 The Chromium OS Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+"""Hill climbing unitest.
+
+Part of the Chrome build flags optimization.
+
+Test the best branching hill climbing algorithms, genetic algorithm and
+iterative elimination algorithm.
+"""
+
+__author__ = 'yuhenglong@google.com (Yuheng Long)'
+
+import multiprocessing
+import random
+import sys
+import unittest
+
+import flags
+from flags import Flag
+from flags import FlagSet
+from genetic_algorithm import GAGeneration
+from genetic_algorithm import GATask
+from hill_climb_best_neighbor import HillClimbingBestBranch
+from iterative_elimination import IterativeEliminationFirstGeneration
+import pipeline_process
+from steering import Steering
+from task import BUILD_STAGE
+from task import Task
+from task import TEST_STAGE
+
+# The number of flags be tested.
+NUM_FLAGS = 5
+
+# The value range of the flags.
+FLAG_RANGES = 10
+
+# The following variables are meta data for the Genetic Algorithm.
+STOP_THRESHOLD = 20
+NUM_CHROMOSOMES = 10
+NUM_TRIALS = 20
+MUTATION_RATE = 0.03
+
+
+def _GenerateRandomRasks(specs):
+ """Generate a task that has random values.
+
+ Args:
+ specs: A list of spec from which the flag set is created.
+
+ Returns:
+ A set containing a task that has random values.
+ """
+
+ flag_set = []
+
+ for spec in specs:
+ numeric_flag_match = flags.Search(spec)
+ if numeric_flag_match:
+ # Numeric flags.
+ start = int(numeric_flag_match.group('start'))
+ end = int(numeric_flag_match.group('end'))
+
+ value = random.randint(start - 1, end - 1)
+ if value != start - 1:
+ # If the value falls in the range, this flag is enabled.
+ flag_set.append(Flag(spec, value))
+ else:
+ # Boolean flags.
+ if random.randint(0, 1):
+ flag_set.append(Flag(spec))
+
+ return set([Task(FlagSet(flag_set))])
+
+
+def _GenerateAllFlagsTasks(specs):
+ """Generate a task that all the flags are enable.
+
+ All the boolean flags in the specs will be enabled and all the numeric flag
+ with have the largest legal value.
+
+ Args:
+ specs: A list of spec from which the flag set is created.
+
+ Returns:
+ A set containing a task that has all flags enabled.
+ """
+
+ flag_set = []
+
+ for spec in specs:
+ numeric_flag_match = flags.Search(spec)
+
+ if numeric_flag_match:
+ value = (int(numeric_flag_match.group('end')) - 1)
+ else:
+ value = -1
+ flag_set.append(Flag(spec, value))
+
+ return set([Task(FlagSet(flag_set))])
+
+
+def _GenerateNoFlagTask():
+ return set([Task(FlagSet([]))])
+
+
+def GenerateRandomGATasks(specs, num_tasks, num_trials):
+ """Generate a set of tasks for the Genetic Algorithm.
+
+ Args:
+ specs: A list of spec from which the flag set is created.
+ num_tasks: number of tasks that should be generated.
+ num_trials: the maximum number of tries should be attempted to generate the
+ set of tasks.
+
+ Returns:
+ A set of randomly generated tasks.
+ """
+
+ tasks = set([])
+
+ total_trials = 0
+ while len(tasks) < num_tasks and total_trials < num_trials:
+ new_flag = FlagSet([Flag(spec) for spec in specs if random.randint(0, 1)])
+ new_task = GATask(new_flag)
+
+ if new_task in tasks:
+ total_trials += 1
+ else:
+ tasks.add(new_task)
+ total_trials = 0
+
+ return tasks
+
+
+def _GenerateInitialFlags(specs, spec):
+ """Generate the flag_set of a task in the flag elimination algorithm.
+
+ Set the value of all the flags to the largest value, except for the flag that
+ contains spec.
+
+ For example, if the specs are [-finline-limit=[1-1000], -fstrict-aliasing] and
+ the spec is -finline-limit=[1-1000], then the result is
+ [-finline-limit=[1-1000]:-finline-limit=998,
+ -fstrict-aliasing:-fstrict-aliasing]
+
+ Args:
+ specs: an array of specifications from which the result flag_set is created.
+ The flag_set contains one and only one flag that contain the specification
+ spec.
+ spec: The flag containing this spec should have a value that is smaller than
+ the highest value the flag can have.
+
+ Returns:
+ An array of flags, each of which contains one spec in specs. All the values
+ of the flags are the largest values in specs, expect the one that contains
+ spec.
+ """
+
+ flag_set = []
+ for other_spec in specs:
+ numeric_flag_match = flags.Search(other_spec)
+ # Found the spec in the array specs.
+ if other_spec == spec:
+ # Numeric flag will have a value that is smaller than the largest value
+ # and Boolean flag will be deleted.
+ if numeric_flag_match:
+ end = int(numeric_flag_match.group('end'))
+ flag_set.append(flags.Flag(other_spec, end - 2))
+
+ continue
+
+ # other_spec != spec
+ if numeric_flag_match:
+ # numeric flag
+ end = int(numeric_flag_match.group('end'))
+ flag_set.append(flags.Flag(other_spec, end - 1))
+ continue
+
+ # boolean flag
+ flag_set.append(flags.Flag(other_spec))
+
+ return flag_set
+
+
+def _GenerateAllIterativeEliminationTasks(specs):
+ """Generate the initial tasks for the negative flag elimination algorithm.
+
+ Generate the base line task that turns on all the boolean flags and sets the
+ value to be the largest value for the numeric flag.
+
+ For example, if the specs are [-finline-limit=[1-1000], -fstrict-aliasing],
+ the base line is [-finline-limit=[1-1000]:-finline-limit=999,
+ -fstrict-aliasing:-fstrict-aliasing]
+
+ Generate a set of task, each turns off one of the flag or sets a value that is
+ smaller than the largest value for the flag.
+
+ Args:
+ specs: an array of specifications from which the result flag_set is created.
+
+ Returns:
+ An array containing one generation of the initial tasks for the negative
+ flag elimination algorithm.
+ """
+
+ # The set of tasks to be generated.
+ results = set([])
+ flag_set = []
+
+ for spec in specs:
+ numeric_flag_match = flags.Search(spec)
+ if numeric_flag_match:
+ # Numeric flag.
+ end_value = int(numeric_flag_match.group('end'))
+ flag_set.append(flags.Flag(spec, end_value - 1))
+ continue
+
+ # Boolean flag.
+ flag_set.append(flags.Flag(spec))
+
+ # The base line task that set all the flags to their largest values.
+ parent_task = Task(flags.FlagSet(flag_set))
+ results.add(parent_task)
+
+ for spec in specs:
+ results.add(Task(flags.FlagSet(_GenerateInitialFlags(specs, spec))))
+
+ return [IterativeEliminationFirstGeneration(results, parent_task)]
+
+
+def _ComputeCost(cost_func, specs, flag_set):
+ """Compute the mock cost of the flag_set using the input cost function.
+
+ All the boolean flags in the specs will be enabled and all the numeric flag
+ with have the largest legal value.
+
+ Args:
+ cost_func: The cost function which is used to compute the mock cost of a
+ dictionary of flags.
+ specs: All the specs that are used in the algorithm. This is used to check
+ whether certain flag is disabled in the flag_set dictionary.
+ flag_set: a dictionary of the spec and flag pairs.
+
+ Returns:
+ The mock cost of the input dictionary of the flags.
+ """
+
+ values = []
+
+ for spec in specs:
+ # If a flag is enabled, its value is added. Otherwise a padding 0 is added.
+ values.append(flag_set[spec].GetValue() if spec in flag_set else 0)
+
+ # The cost function string can use the values array.
+ return eval(cost_func)
+
+
+def _GenerateTestFlags(num_flags, upper_bound, file_name):
+ """Generate a set of mock flags and write it to a configuration file.
+
+ Generate a set of mock flags
+
+ Args:
+ num_flags: Number of numeric flags to be generated.
+ upper_bound: The value of the upper bound of the range.
+ file_name: The configuration file name into which the mock flags are put.
+ """
+
+ with open(file_name, 'w') as output_file:
+ num_flags = int(num_flags)
+ upper_bound = int(upper_bound)
+ for i in range(num_flags):
+ output_file.write('%s=[1-%d]\n' % (i, upper_bound))
+
+
+def _TestAlgorithm(cost_func, specs, generations, best_result):
+ """Test the best result the algorithm should return.
+
+ Set up the framework, run the input algorithm and verify the result.
+
+ Args:
+ cost_func: The cost function which is used to compute the mock cost of a
+ dictionary of flags.
+ specs: All the specs that are used in the algorithm. This is used to check
+ whether certain flag is disabled in the flag_set dictionary.
+ generations: The initial generations to be evaluated.
+ best_result: The expected best result of the algorithm. If best_result is
+ -1, the algorithm may or may not return the best value. Therefore, no
+ assertion will be inserted.
+ """
+
+ # Set up the utilities to test the framework.
+ manager = multiprocessing.Manager()
+ input_queue = manager.Queue()
+ output_queue = manager.Queue()
+ pp_steer = multiprocessing.Process(
+ target=Steering,
+ args=(set(), generations, output_queue, input_queue))
+ pp_steer.start()
+
+ # The best result of the algorithm so far.
+ result = sys.maxint
+
+ while True:
+ task = input_queue.get()
+
+ # POISONPILL signal the ends of the algorithm.
+ if task == pipeline_process.POISONPILL:
+ break
+
+ task.SetResult(BUILD_STAGE, (0, 0, 0, 0, 0))
+
+ # Compute the mock cost for the task.
+ task_result = _ComputeCost(cost_func, specs, task.GetFlags())
+ task.SetResult(TEST_STAGE, task_result)
+
+ # If the mock result of the current task is the best so far, set this
+ # result to be the best result.
+ if task_result < result:
+ result = task_result
+
+ output_queue.put(task)
+
+ pp_steer.join()
+
+ # Only do this test when best_result is not -1.
+ if best_result != -1:
+ assert best_result == result
+
+
+class MockAlgorithmsTest(unittest.TestCase):
+ """This class mock tests different steering algorithms.
+
+ The steering algorithms are responsible for generating the next set of tasks
+ to run in each iteration. This class does a functional testing on the
+ algorithms. It mocks out the computation of the fitness function from the
+ build and test phases by letting the user define the fitness function.
+ """
+
+ def _GenerateFlagSpecifications(self):
+ """Generate the testing specifications."""
+
+ mock_test_file = 'scale_mock_test'
+ _GenerateTestFlags(NUM_FLAGS, FLAG_RANGES, mock_test_file)
+ return flags.ReadConf(mock_test_file)
+
+ def testBestHillClimb(self):
+ """Test the best hill climb algorithm.
+
+ Test whether it finds the best results as expected.
+ """
+
+ # Initiate the build/test command and the log directory.
+ Task.InitLogCommand(None, None, 'output')
+
+ # Generate the testing specs.
+ specs = self._GenerateFlagSpecifications()
+
+ # Generate the initial generations for a test whose cost function is the
+ # summation of the values of all the flags.
+ generation_tasks = _GenerateAllFlagsTasks(specs)
+ generations = [HillClimbingBestBranch(generation_tasks, set([]), specs)]
+
+ # Test the algorithm. The cost function is the summation of all the values
+ # of all the flags. Therefore, the best value is supposed to be 0, i.e.,
+ # when all the flags are disabled.
+ _TestAlgorithm('sum(values[0:len(values)])', specs, generations, 0)
+
+ # This test uses a cost function that is the negative of the previous cost
+ # function. Therefore, the best result should be found in task with all the
+ # flags enabled.
+ cost_function = 'sys.maxint - sum(values[0:len(values)])'
+ all_flags = list(generation_tasks)[0].GetFlags()
+ cost = _ComputeCost(cost_function, specs, all_flags)
+
+ # Generate the initial generations.
+ generation_tasks = _GenerateNoFlagTask()
+ generations = [HillClimbingBestBranch(generation_tasks, set([]), specs)]
+
+ # Test the algorithm. The cost function is negative of the summation of all
+ # the values of all the flags. Therefore, the best value is supposed to be
+ # 0, i.e., when all the flags are disabled.
+ _TestAlgorithm(cost_function, specs, generations, cost)
+
+ def testGeneticAlgorithm(self):
+ """Test the Genetic Algorithm.
+
+ Do a functional testing here and see how well it scales.
+ """
+
+ # Initiate the build/test command and the log directory.
+ Task.InitLogCommand(None, None, 'output')
+
+ # Generate the testing specs.
+ specs = self._GenerateFlagSpecifications()
+ # Initiate the build/test command and the log directory.
+ GAGeneration.InitMetaData(STOP_THRESHOLD, NUM_CHROMOSOMES, NUM_TRIALS,
+ specs, MUTATION_RATE)
+
+ # Generate the initial generations.
+ generation_tasks = GenerateRandomGATasks(specs, NUM_CHROMOSOMES, NUM_TRIALS)
+ generations = [GAGeneration(generation_tasks, set([]), 0)]
+
+ # Test the algorithm.
+ _TestAlgorithm('sum(values[0:len(values)])', specs, generations, -1)
+ cost_func = 'sys.maxint - sum(values[0:len(values)])'
+ _TestAlgorithm(cost_func, specs, generations, -1)
+
+ def testIterativeElimination(self):
+ """Test the iterative elimination algorithm.
+
+ Test whether it finds the best results as expected.
+ """
+
+ # Initiate the build/test command and the log directory.
+ Task.InitLogCommand(None, None, 'output')
+
+ # Generate the testing specs.
+ specs = self._GenerateFlagSpecifications()
+
+ # Generate the initial generations. The generation contains the base line
+ # task that turns on all the flags and tasks that each turn off one of the
+ # flags.
+ generations = _GenerateAllIterativeEliminationTasks(specs)
+
+ # Test the algorithm. The cost function is the summation of all the values
+ # of all the flags. Therefore, the best value is supposed to be 0, i.e.,
+ # when all the flags are disabled.
+ _TestAlgorithm('sum(values[0:len(values)])', specs, generations, 0)
+
+ # This test uses a cost function that is the negative of the previous cost
+ # function. Therefore, the best result should be found in task with all the
+ # flags enabled.
+ all_flags_tasks = _GenerateAllFlagsTasks(specs)
+ cost_function = 'sys.maxint - sum(values[0:len(values)])'
+ # Compute the cost of the task that turns on all the flags.
+ all_flags = list(all_flags_tasks)[0].GetFlags()
+ cost = _ComputeCost(cost_function, specs, all_flags)
+
+ # Test the algorithm. The cost function is negative of the summation of all
+ # the values of all the flags. Therefore, the best value is supposed to be
+ # 0, i.e., when all the flags are disabled.
+ # The concrete type of the generation decides how the next generation will
+ # be generated.
+ _TestAlgorithm(cost_function, specs, generations, cost)
+
+
+if __name__ == '__main__':
+ unittest.main()
diff --git a/bin/tc_pyformat b/bin/tc_pyformat
new file mode 100755
index 00000000..21eceebe
--- /dev/null
+++ b/bin/tc_pyformat
@@ -0,0 +1,36 @@
+#!/bin/bash
+# Usage: tc_pyformat <list of pyformat options> file1.py file2.py ...
+#
+# Most common option is -i, which makes formatting changes in place.
+set -u
+
+PF=pyformat
+PF_OPTIONS="--yapf --force_quote_type=single"
+PF_USER_OPTIONS=""
+
+if [[ -z "$(type -t ${PF})" ]]; then
+ echo "Error: ${PF} not in your path."
+ exit 1
+fi
+
+while [[ "$1" == -* ]]; do
+ PF_USER_OPTIONS+=" $1"
+ shift
+done
+
+FILES=$*
+PF_OPTIONS+=${PF_USER_OPTIONS}
+
+for f in ${FILES}; do
+ if [[ $f != *.py ]]; then
+ echo "Error: File $f is not a python file"
+ exit 2
+ elif [[ -x $f ]]; then
+ ${PF} ${PF_OPTIONS} $f
+ elif [[ -f $f ]]; then
+ ${PF} --remove_shebang ${PF_OPTIONS} $f
+ else
+ echo "Error: File $f does not exist"
+ exit 2
+ fi
+done
diff --git a/binary_search_tool/.gitignore b/binary_search_tool/.gitignore
new file mode 100644
index 00000000..c4977a33
--- /dev/null
+++ b/binary_search_tool/.gitignore
@@ -0,0 +1,7 @@
+log
+*.pyc
+working_set.txt
+objects.txt
+.binary_search_state.py.state*
+binary_search_state.py.state
+
diff --git a/binary_search_tool/MAINTENANCE b/binary_search_tool/MAINTENANCE
new file mode 100644
index 00000000..8e5b3c61
--- /dev/null
+++ b/binary_search_tool/MAINTENANCE
@@ -0,0 +1,115 @@
+This document is for future maintainers of the binary search/bisection tools.
+
+Authors:
+ * Original Tool: asharif@, llozano@, cmtice@
+ * Updates after May 2016: cburden@
+ * chromeos-toolchain@
+
+The following are good reference materials on how the tool works:
+ * Ahmad's original presentation:
+ https://goto.google.com/zxdfyi
+
+ * Bisection tool update design doc:
+ https://goto.google.com/zcwei
+
+ * Bisection tool webpage:
+ https://goto.google.com/ruwpyi
+
+ * Compiler wrapper webpage:
+ https://goto.google.com/xossn
+
+
+TESTING:
+All unit tests live under the ./test directory. However, these tests
+specifically test binary_search_state.py, binary_search_perforce.py, bisect.py.
+These unit tests will not test the specific logic for ChromeOS/Android
+bisection. To test the ChromeOS/Android bisectors, use the common/hash_test.sh
+test. This is a simple test case that just checks the hashes of files on your
+file system. This means you won't have to find a specific compiler error for
+the bisector to triage in order to test each bisector.
+
+TODO:
+The bisection tool (I believe) is in a fairly good state. So these are mostly
+wishlist items and things that could use some improvement.
+
+ 1. Get rid of binary_search_perforce.py. This file is mostly legacy code and
+ the majority of it isn't even used to bisect object files. The file was
+ originally intended to bisect CLs, and binary_search_state.py just reused
+ the binary searching logic from it. Maybe just extract the binary searching
+ logic from binary_search_perforce.py and put it in its own module in
+ cros_utils?
+
+ 2. Cleanup unit tests in ./test. These tests are a little hacked together,
+ and are all under one test suite. Maybe consider organizing them across
+ multiple directories.
+
+ 3. Create a "checkout setup" system for bisection. Currently if you want to
+ bisect, you have to run scripts/edit sources in this repo. Ideally these
+ scripts would be static, and if you wanted to bisect/make changes you would
+ "checkout" or copy all the scripts to a working directory and have a unique
+ working directory for each bisection. Credits to Luis for this idea =)
+
+ 4. Make all scripts relative to each other. Currently all scripts enforce the
+ idea that their cwd will be ./binary_search_tool/. But it would be less
+ confusing to have each script relative to each other. There's quite a few
+ stackoverflow topics on how to do this best, but each one has some sort of
+ downside or flaw.
+
+ 5. Overall modularize code more, especially in binary_search_state.py
+
+DESIGN EXPLANATIONS:
+Some of the design decisions are a bit difficult to understand from just reading
+the code unfortunately. I will attempt to clear up the major offenders of this:
+
+ 1. common.py's argument dictionary:
+ binary_search_state.py and bisect.py both have to have near identical
+ arguments in order to support argument overriding in bisect.py. However
+ they do have to be slightly different. Mainly, bisect.py needs to have no
+ default values for arguments (so it can determine what's being overriden).
+
+ In order to reduce huge amounts of code duplication for the argument
+ building, we put argument building in common.py. That way both modules
+ can reference the arguments, and they can have different configurations
+ across both.
+
+ 2. Compiler wrapper:
+ The compiler wrapper is called before all compiler calls. It exists to
+ trick whatever build system (make, emerge, etc.) into thinking our
+ bisection is just a normal build, when really we're doing some tricks.
+
+ The biggest benefit the compiler wrapper gives is: knowing for sure which
+ files are actually generated by the compiler during bisection setup, and
+ potentially being able to skip compilations while triaging (speeding up the
+ triaging process significantly).
+
+ 3. The weird options for the --verify, --verbose, --file_args, etc. arguments:
+ Some of the arguments for the bisection tool have a weird set of options
+ for the AddArgument method (nargs, const, default, StrToBool). This is so
+ we can make argument overriding workable. These options allow the following
+ functionality for a boolean argument (using --prune as an example):
+ * --prune (prune set to True)
+ * <not given> (prune set to False)
+ * --prune=True (prune set to True)
+ * --prune=False (prune set to False)
+
+ The first two are easy to implement (action='store_true'), but the last two
+ are why the extra weird arguments are required. Now, why would we want the
+ last two? Imagine if the Android bisector set --prune=True as a default
+ argument. With just the first two options above it would be impossible for
+ the user to override prune and set it to False. So the user needs the
+ --prune=False option. See the argparse documentation for more details.
+
+ 4. General binary searching logic/pruning logic:
+ binary_search_state.py will enumerate all items into a list. The binary
+ search will find the *first* bad item (starting with lowest index).
+ Everything to the left of the "current" index is switched to good,
+ everything to right of the "current" index is switched to bad. Once a bad
+ item is found, it's put at the very end of the list.
+
+ If prune is set, the tool will continuing searching until all bad items are
+ found (instead of stopping after the first one). If the tool finds the same
+ item twice, that means no more bad items exist. This is because the item
+ was found, said item was put at the end of the list, and it was found
+ again. Because the binary search logic finds the bad item with the lowest
+ index, this means nothing in between the start of the list and the end of
+ the list is bad (thus no more bad items remain).
diff --git a/binary_search_tool/README.bisect b/binary_search_tool/README.bisect
new file mode 100644
index 00000000..e6185e8a
--- /dev/null
+++ b/binary_search_tool/README.bisect
@@ -0,0 +1,213 @@
+
+bisect.py is a wrapper around the general purpose binary_search_state.py. It
+provides a user friendly interface for bisecting various compilation errors.
+The 2 currently provided methods of bisecting are ChromeOS package and object
+bisection. Each method defines a default set of options to pass to
+binary_search_state.py and allow the user to override these defaults (see
+the "Overriding" section).
+
+** NOTE **
+All commands, examples, scripts, etc. are to be run from your chroot unless
+stated otherwise.
+
+Bisection Methods:
+
+1) ChromeOS Package:
+ This method will bisect across all packages in a ChromeOS repository and find
+ the offending packages (according to your test script). This method takes the
+ following arguments:
+
+ board: The board to bisect on. For example: daisy, falco, etc.
+ remote: The IP address of the physical machine you're using to test with.
+
+ By default the ChromeOS package method will do a simple interactive test that
+ pings the machine and prompts the user if the machine is good.
+
+ a) Setup:
+ The ChromeOS package method requires that you have three build trees:
+
+ /build/${board}.bad - The build tree for your "bad" build
+ /build/${board}.good - The build tree for your "good" build
+ /build/${board}.work - A full copy of /build/${board}.bad
+
+ b) Cleanup:
+ bisect.py does most cleanup for you, the only thing required by the user is
+ to cleanup all built images and the three build trees made in /build/
+
+ c) Default Arguments:
+ --get_initial_items='cros_pkg/get_initial_items.sh'
+ --switch_to_good='cros_pkg/switch_to_good.sh'
+ --switch_to_bad='cros_pkg/switch_to_bad.sh'
+ --test_setup_script='cros_pkg/test_setup.sh'
+ --test_script='cros_pkg/interactive_test.sh'
+ --incremental
+ --prune
+ --file_args
+
+ d) Additional Documentation:
+ See ./cros_pkg/README.cros_pkg_triage for full documentation of ChromeOS
+ package bisection.
+
+ e) Examples:
+ i) Basic interactive test package bisection, on daisy board:
+ ./bisect.py package daisy 172.17.211.184
+
+ ii) Basic boot test package bisection, on daisy board:
+ ./bisect.py package daisy 172.17.211.184 -t cros_pkg/boot_test.sh
+
+2) ChromeOS Object:
+ This method will bisect across all objects in a ChromeOS package and find
+ the offending objects (according to your test script). This method takes the
+ following arguments:
+
+ board: The board to bisect on. For example: daisy, falco, etc.
+ remote: The IP address of the physical machine you're using to test with.
+ package: The package to bisect with. For example: chromeos-chrome
+ dir: (Optional) the directory for your good/bad build trees. Defaults to
+ $BISECT_DIR or /tmp/sysroot_bisect. This value will set $BISECT_DIR
+ for all bisecting scripts.
+
+ By default the ChromeOS object method will do a simple interactive test that
+ pings the machine and prompts the user if the machine is good.
+
+ a) Setup:
+ The ChromeOS package method requires that you populate your good and bad set
+ of objects. sysroot_wrapper will automatically detect the BISECT_STAGE
+ variable and use this to populate emerged objects. Here is an example:
+
+ # Defaults to /tmp/sysroot_bisect
+ export BISECT_DIR="/path/to/where/you/want/to/store/builds/"
+
+ export BISECT_STAGE="POPULATE_GOOD"
+ ./switch_to_good_compiler.sh
+ emerge-${board} -C ${package_to_bisect}
+ emerge-${board} ${package_to_bisect}
+
+ export BISECT_STAGE="POPULATE_BAD"
+ ./switch_to_bad_compiler.sh
+ emerge-${board} -C {package_to_bisect}
+ emerge-${board} ${package_to_bisect}
+
+ b) Cleanup:
+ The user must clean up all built images and the populated object files.
+
+ c) Default Arguments:
+ --get_initial_items='sysroot_wrapper/get_initial_items.sh'
+ --switch_to_good='sysroot_wrapper/switch_to_good.sh'
+ --switch_to_bad='sysroot_wrapper/switch_to_bad.sh'
+ --test_setup_script='sysroot_wrapper/test_setup.sh'
+ --test_script='sysroot_wrapper/interactive_test.sh'
+ --noincremental
+ --prune
+ --file_args
+
+ d) Additional Documentation:
+ See ./sysroot_wrapper/README for full documentation of ChromeOS object file
+ bisecting.
+
+ e) Examples:
+ i) Basic interactive test object bisection, on daisy board for
+ cryptohome package:
+ ./bisect.py object daisy 172.17.211.184 cryptohome
+
+ ii) Basic boot test package bisection, on daisy board for cryptohome
+ package:
+ ./bisect.py object daisy 172.17.211.184 cryptohome \
+ --test_script=sysroot_wrapper/boot_test.sh
+
+3) Android object:
+ NOTE: Because this isn't a ChromeOS bisection tool, the concept of a
+ chroot doesn't exist. Just run this tool from a normal shell.
+
+ This method will bisect across all objects in the Android source tree and
+ find the offending objects (according to your test script). This method takes
+ the following arguments:
+
+ android_src: The location of your android source tree
+ num_jobs: (Optional) The number of jobs to pass to make. This is dependent
+ on how many cores your machine has. A good number is probably
+ somewhere around 5 to 10.
+ device_id: (Optional) The serial code for the device you are testing on.
+ This is used to determine which device should be used in case
+ multiple devices are plugged into your computer. You can get
+ serial code for your device by running "adb devices".
+ dir: (Optional) the directory for your good/bad build trees. Defaults to
+ $BISECT_DIR or ~/ANDROID_BISECT/. This value will set $BISECT_DIR
+ for all bisecting scripts.
+
+ By default the Android object method will do a simple interactive test that
+ pings the machine and prompts the user if the machine is good.
+
+ a) Setup:
+ The Android object method requires that you populate your good and bad set
+ of objects. The Android compiler wrapper will automatically detect the
+ BISECT_STAGE variable and use this to populate emerged objects. Here is an
+ example:
+
+ # Defaults to ~/ANDROID_BISECT/
+ export BISECT_DIR="/path/to/where/you/want/to/store/builds/"
+
+ export BISECT_STAGE="POPULATE_GOOD"
+ # Install the "good" compiler
+ ./switch_to_good_compiler.sh
+ make clean
+ make -j <your_preferred_number_of_jobs>
+
+ export BISECT_STAGE="POPULATE_BAD"
+ # Install the "bad" compiler
+ ./switch_to_bad_compiler.sh
+ make clean
+ make -j <your_preferred_number_of_jobs>
+
+ b) Cleanup:
+ The user must clean up all built images and the populated object files.
+
+ c) Default Arguments:
+ --get_initial_items='android/get_initial_items.sh'
+ --switch_to_good='android/switch_to_good.sh'
+ --switch_to_bad='android/switch_to_bad.sh'
+ --test_setup_script='android/test_setup.sh'
+ --test_script='android/interactive_test.sh'
+ --incremental
+ --prune
+ --file_args
+
+ d) Additional Documentation:
+ See ./android/README.android for full documentation of Android object file
+ bisecting.
+
+ e) Examples:
+ i) Basic interactive test android bisection, where the android source is
+ at ~/android_src:
+ ./bisect.py android ~/android_src
+
+ ii) Basic boot test android bisection, where the android source is at
+ ~/android_src, and 10 jobs will be used to build android:
+ ./bisect.py android ~/android_src --num_jobs=10 \
+ --test_script=sysroot_wrapper/boot_test.sh
+
+Resuming:
+ bisect.py and binary_search_state.py offer the ability to resume a bisection
+ in case it was interrupted by a SIGINT, power failure, etc. Every time the
+ tool completes a bisection iteration its state is saved to disk (usually to
+ the file "./bisect.py.state"). If passed the --resume option, the tool
+ it will automatically detect the state file and resume from the last
+ completed iteration.
+
+Overriding:
+ You can run ./bisect.py --help or ./binary_search_state.py --help for a full
+ list of arguments that can be overriden. Here are a couple of examples:
+
+ Example 1 (do boot test instead of interactive test):
+ ./bisect.py package daisy 172.17.211.182 --test_script=cros_pkg/boot_test.sh
+
+ Example 2 (do package bisector system test instead of interactive test, this
+ is used to test the bisecting tool itself -- see comments in
+ hash_test.sh for more details):
+ ./bisect.py package daisy 172.17.211.182 \
+ --test_script=common/hash_test.sh --test_setup_script=""
+
+ Example 3 (enable verbose mode, disable pruning, and disable verification):
+ ./bisect.py package daisy 172.17.211.182 \
+ --verbose --prune=False --verify=False
+
diff --git a/binary_search_tool/__init__.py b/binary_search_tool/__init__.py
new file mode 100644
index 00000000..8b137891
--- /dev/null
+++ b/binary_search_tool/__init__.py
@@ -0,0 +1 @@
+
diff --git a/binary_search_tool/android/README.android b/binary_search_tool/android/README.android
new file mode 100644
index 00000000..9e518f60
--- /dev/null
+++ b/binary_search_tool/android/README.android
@@ -0,0 +1,186 @@
+
+binary_search_state.py is a general binary search triage tool that
+performs a binary search on a set of things to try to identify which
+thing or thing(s) in the set is 'bad'. binary_search_state.py assumes
+that the user has two sets, one where everything is known to be good,
+and one which contains at least one bad item. binary_search_state.py
+then copies items from the good and bad sets into a working set and
+tests the result (good or bad). binary_search_state.py requires that
+a set of scripts be supplied to it for any particular job. For more
+information on binary_search_state.py, see
+
+https://sites.google.com/a/google.com/chromeos-toolchain-team-home2/home/team-tools-and-scripts/binary-searcher-tool-for-triage
+
+This particular set of scripts is designed to work wtih
+binary_search_state.py in order to find the bad object or set of
+bad objects in an Android build.
+
+
+QUICKSTART:
+
+After setting up your 2 build trees (see Prerequisites section), do the
+following:
+
+ - Decide which test script to use (boot_test.sh or
+ interactive_test.sh)
+ - Get the serial number for the Android device you will use for testing.
+ - Run the following:
+
+ $ cd <android_src>
+ $ source build/envsetup.sh
+ $ lunch <android_device_lunch_combo>
+ $ cd <path_to_toolchain_utils>/binary_search_tool/
+ $ NUM_JOBS=10 ANDROID_SERIAL=<device_serial> \
+ ./android/setup.sh <android_src>
+
+ If you chose the boot test, then:
+ TEST_SCRIPT=android/boot_test.sh
+
+ If you chose the interactive test, then:
+ TEST_SCRIPT=android/interactive_test.sh
+
+ Finally, run the binary search tool:
+
+ $ python ./binary_search_state.py \
+ --get_initial_items=android/get_initial_items.sh \
+ --switch_to_good=android/switch_to_good.sh \
+ --switch_to_bad=android/switch_to_bad.sh \
+ --test_setup_script=android/test_setup.sh \
+ --test_script=$TEST_SCRIPT \
+ --file_args \
+ --prune
+
+ Once you have completely finished doing the binary search/triage,
+ run the cleanup script:
+
+ $ android/cleanup.sh
+
+
+
+FILES AND SCRIPTS:
+
+ Check the header comments for each script for more in depth documentation.
+
+ boot_test.sh - One of two possible test scripts used to determine
+ if the Android image built from the objects is good
+ or bad. This script tests to see if the image
+ booted, and requires no user intervention.
+
+ cleanup.sh - This is called after the binary search tool completes. This
+ script will clean up the common.sh file generated by setup.sh
+
+ get_initial_items.sh - This script is used to determine all Android objects
+ that will be bisected.
+
+ test_setup.sh - This script will build and flash your image to the
+ Android device. If the flash fails, this script will
+ help the user troubleshoot by trying to flash again or
+ by asking the user to manually flash it.
+
+ interactive_test.sh - One of two possible scripts used to determine
+ if the Android image built from the objects
+ is good or bad. This script requires user
+ interaction to determine if the image is
+ good or bad.
+
+ setup.sh - This is the first script the user should call, after
+ taking care of the prerequisites. It sets up the
+ environment appropriately for running the Android
+ object binary search triage, and it generates the
+ necessary common script (see below).
+
+ switch_to_bad.sh - This script is used to link objects from the
+ 'bad' build tree into the work area.
+
+ switch_to_good.sh - This script is used to link objects from the
+ 'good' build tree into the work area.
+
+
+GENERATED SCRIPTS:
+
+ common.sh - contains basic environment variable definitions for
+ this binary search triage session.
+
+ASSUMPTIONS:
+
+- There are two different Android builds, for the same board/lunch combo with
+ the same set of generated object files. One build creates a good working
+ Android image and the other does not.
+
+- The toolchain bug you are tracking down is not related to the linker. If the
+ linker is broken or generates bad code, this tool is unlikely to help you.
+
+
+PREREQUISITES FOR USING THESE SCRIPTS:
+
+ Step 1: Decide where to store each build tree
+ By default, each build tree is stored in "~/ANDROID_BISECT". However you
+ can override this by exporting BISECT_DIR set to whatever directory you
+ please. Keep in mind these build trees take dozens of gigabytes each.
+
+ Step 2: Setup your android build environment
+ 1. `cd <android_src>`
+ 2. `source build/envsetup.sh`
+ 3. `lunch <android_device_lunch_combo>`
+
+ Step 3: Populate the good build tree
+ 1. `make clean`
+ 2. `export BISECT_STAGE=POPULATE_GOOD`
+ 3. Install your "good" toolchain in Android, this will most likely be
+ the toolchain that comes preinstalled with the Android source.
+ 4. Build all of Android: `make -j10`. The "-j" parameter depends on how
+ many cores your machine has. See Android documentation for more details.
+
+ Step 4: Populate the bad build tree
+ 1. `make clean`
+ 2. `export BISECT_STAGE=POPULATE_BAD`
+ 3. Install your "bad" toolchain in Android.
+ 4. Build all of Android again.
+
+ Step 5: Run the android setup script
+ 1. `cd <path_to_toolchain_utils>/binary_search_tool/`
+ 2. `NUM_JOBS=<jobs> ANDROID_SERIAL=<android_serial_num> \
+ android/setup.sh <android_src>`
+
+ WARNING: It's important that you leave the full "out/" directory in your
+ Android source alone after Step 4. The binary search tool will
+ use this directory as a skeleton to build each test image while
+ triaging.
+
+USING THESE SCRIPTS FOR BINARY TRIAGE OF OBJECTS:
+
+To use these scripts, you must first run setup.sh, passing it the path to your
+Android source directory. setup.sh will do the following:
+
+ - Verify that your build trees are set up correctly (with good, bad).
+ - Verify that each build tree has the same contents.
+ - Verify that the android build environment (lunch, etc.) are setup in your
+ current shell.
+ - Create the common.sh file that the other scripts passed to the
+ binary triage tool will need.
+
+
+This set of scripts comes with two alternate test scripts. One test
+script, boot_test.sh, just checks to make sure that the image
+booted (wait for device to boot to home screen) and assumes that is enough.
+The other test script, interactive_test.sh, is interactive and asks YOU
+to tell it whether the image on the android device is ok or not (it
+prompts you and waits for a response).
+
+
+Once you have run setup.sh (and decided which test script you
+want to use) run the binary triage tool using these scripts to
+isolate/identify the bad object:
+
+./binary_search_state.py \
+ --get_initial_items=android/get_initial_items.sh \
+ --switch_to_good=android/switch_to_good.sh \
+ --switch_to_bad=android/switch_to_bad.sh \
+ --test_setup_script=android/test_setup.sh \
+ --test_script=android/boot_test.sh \ # could use interactive_test.sh instead
+ --prune
+
+
+After you have finished running the tool and have identified the bad
+object(s), you will want to run the cleanup script (android/cleanup.sh).
+
diff --git a/binary_search_tool/android/boot_test.sh b/binary_search_tool/android/boot_test.sh
new file mode 100755
index 00000000..dc871601
--- /dev/null
+++ b/binary_search_tool/android/boot_test.sh
@@ -0,0 +1,61 @@
+#!/bin/bash -u
+#
+# Copyright 2016 Google Inc. All Rights Reserved.
+#
+# This script pings the android device to determine if it successfully booted.
+#
+# This script is intended to be used by binary_search_state.py, as
+# part of the binary search triage on the Android source tree. It
+# waits for the test setup script to build and install the image, then checks
+# if image boots or not. It should return '0' if the test succeeds
+# (the image is 'good'); '1' if the test fails (the image is 'bad'); and '125'
+# if it could not determine (does not apply in this case).
+#
+
+source android/common.sh
+
+# Check if boot animation has stopped and trim whitespace
+is_booted()
+{
+ # Wait for boot animation to stop and trim whitespace
+ status=`adb shell getprop init.svc.bootanim | tr -d '[:space:]'`
+ [[ "$status" == "stopped" ]]
+ return $?
+}
+
+# Wait for device to boot, retry every 1s
+# WARNING: Do not run without timeout command, could run forever
+wait_for_boot()
+{
+ while ! is_booted
+ do
+ sleep 1
+ done
+}
+
+echo "Waiting 60 seconds for device to come online..."
+timeout 60 adb wait-for-device
+retval=$?
+
+if [[ ${retval} -eq 0 ]]; then
+ echo "Android image has been built and installed."
+else
+ echo "Device failed to reboot within 60 seconds."
+ exit 1
+fi
+
+echo "Waiting 60 seconds for device to finish boot..."
+# Spawn subshell that will timeout in 60 seconds
+# Feed to cat so that timeout will recognize it as a command
+# (timeout only works for commands/programs, not functions)
+timeout 60 cat <(wait_for_boot)
+retval=$?
+
+if [[ ${retval} -eq 0 ]]; then
+ echo "Android device fully booted!"
+else
+ echo "Device failed to fully boot within 60 seconds."
+ exit 1
+fi
+
+exit ${retval}
diff --git a/binary_search_tool/android/cleanup.sh b/binary_search_tool/android/cleanup.sh
new file mode 100755
index 00000000..c89c337d
--- /dev/null
+++ b/binary_search_tool/android/cleanup.sh
@@ -0,0 +1,11 @@
+#!/bin/bash
+#
+# Copyright 2016 Google Inc. All Rights Reserved.
+#
+# This script is part of the Android binary search triage process.
+# It should be the last script called by the user, after the user has
+# successfully run the bisection tool and found their bad items. This script
+# will perform all necessary cleanup for the bisection tool.
+#
+
+rm android/common.sh
diff --git a/binary_search_tool/android/get_initial_items.sh b/binary_search_tool/android/get_initial_items.sh
new file mode 100755
index 00000000..2a1eda3a
--- /dev/null
+++ b/binary_search_tool/android/get_initial_items.sh
@@ -0,0 +1,14 @@
+#!/bin/bash -u
+#
+# Copyright 2016 Google Inc. All Rights Reserved.
+#
+# This script is intended to be used by binary_search_state.py, as
+# part of the binary search triage on the Android source tree. This script
+# generates the list of current Android object files, that is then used
+# for doing the binary search.
+#
+
+source android/common.sh
+
+cat ${BISECT_GOOD_BUILD}/_LIST
+
diff --git a/binary_search_tool/android/interactive_test.sh b/binary_search_tool/android/interactive_test.sh
new file mode 100755
index 00000000..e506b236
--- /dev/null
+++ b/binary_search_tool/android/interactive_test.sh
@@ -0,0 +1,39 @@
+#!/bin/bash -u
+#
+# Copyright 2016 Google Inc. All Rights Reserved.
+#
+# This script pings the android device to determine if it successfully booted.
+# It then asks the user if the image is good or not, allowing the user to
+# conduct whatever tests the user wishes, and waiting for a response.
+#
+# This script is intended to be used by binary_search_state.py, as
+# part of the binary search triage on the Android source tree. It
+# waits for the test setup script to build and install the image, then asks the
+# user if the image is good or not. It should return '0' if the test succeeds
+# (the image is 'good'); '1' if the test fails (the image is 'bad'); and '125'
+# if it could not determine (does not apply in this case).
+#
+
+source android/common.sh
+
+echo "Waiting 60 seconds for device to boot..."
+timeout 60 adb wait-for-device
+retval=$?
+
+if [[ ${retval} -eq 0 ]]; then
+ echo "Android image has been built and installed."
+else
+ echo "Device failed to reboot within 60 seconds."
+ exit 1
+fi
+
+while true; do
+ read -p "Is this a good Android image?" yn
+ case $yn in
+ [Yy]* ) exit 0;;
+ [Nn]* ) exit 1;;
+ * ) echo "Please answer yes or no.";;
+ esac
+done
+
+exit 125
diff --git a/binary_search_tool/android/setup.sh b/binary_search_tool/android/setup.sh
new file mode 100755
index 00000000..7f8ba0e9
--- /dev/null
+++ b/binary_search_tool/android/setup.sh
@@ -0,0 +1,147 @@
+#!/bin/bash -u
+#
+# Copyright 2016 Google Inc. All Rights Reserved.
+#
+# This script is part of the Android binary search triage process.
+# It should be the first script called by the user, after the user has set up
+# the two necessary build tree directories (see the prerequisites section of
+# README.android).
+#
+# WARNING:
+# Before running this script make sure you have setup the Android build
+# environment in this shell (i.e. successfully run 'lunch').
+#
+# This script takes three arguments. The first argument must be the path of
+# the android source tree being tested. The second (optional) argument is the
+# device ID for fastboot/adb so the test device can be uniquely indentified in
+# case multiple phones are plugged in. The final (optional) argument is the
+# number of jobs that various programs can use for parallelism
+# (make, xargs, etc.). There is also the argument for bisection directory, but
+# this is not strictly an argument for just this script (as it should be set
+# during the POPULATE_GOOD and POPULATE_BAD steps, see README.android for
+# details).
+#
+# Example call:
+# ANDROID_SERIAL=002ee16b1558a3d3 NUM_JOBS=10 android/setup.sh ~/android
+#
+# This will setup the bisector for Nexus5X, using 10 jobs, where the android
+# source lives at ~/android.
+#
+# NOTE: ANDROID_SERIAL is actually an option used by ADB. You can also simply
+# do 'export ANDROID_SERIAL=<device_id>' and the bisector will still work.
+# Furthermore, if your device is the only Android device plugged in you can
+# ignore ANDROID_SERIAL.
+#
+# This script sets all necessary environment variables, and ensures the
+# environment for the binary search triage process is setup properly. In
+# addition, this script generates common.sh, which generates enviroment
+# variables used by the other scripts in the package binary search triage process.
+#
+
+#
+# Positional arguments
+#
+
+ANDROID_SRC=$1
+
+#
+# Optional arguments
+#
+
+# If DEVICE_ID is not null export this as ANDROID_SERIAL for use by adb
+# If DEVICE_ID is null then leave null
+DEVICE_ID=${ANDROID_SERIAL:+"export ANDROID_SERIAL=${ANDROID_SERIAL} "}
+
+NUM_JOBS=${NUM_JOBS:-"1"}
+BISECT_ANDROID_DIR=${BISECT_DIR:-~/ANDROID_BISECT}
+
+#
+# Set up basic variables.
+#
+
+GOOD_BUILD=${BISECT_ANDROID_DIR}/good
+BAD_BUILD=${BISECT_ANDROID_DIR}/bad
+WORK_BUILD=${ANDROID_SRC}
+
+#
+# Verify that the necessary directories exist.
+#
+
+if [[ ! -d ${GOOD_BUILD} ]] ; then
+ echo "Error: ${GOOD_BUILD} does not exist."
+ exit 1
+fi
+
+if [[ ! -d ${BAD_BUILD} ]] ; then
+ echo "Error: ${BAD_BUILD} does not exist."
+ exit 1
+fi
+
+if [[ ! -d ${WORK_BUILD} ]] ; then
+ echo "Error: ${WORK_BUILD} does not exist."
+ exit 1
+fi
+
+#
+# Verify that good/bad object lists are the same
+#
+
+good_list=`mktemp`
+bad_list=`mktemp`
+sort ${GOOD_BUILD}/_LIST > good_list
+sort ${BAD_BUILD}/_LIST > bad_list
+
+diff good_list bad_list
+diff_result=$?
+rm good_list bad_list
+
+if [ ${diff_result} -ne 0 ]; then
+ echo "Error: good and bad object lists differ."
+ echo "diff exited with non-zero status: ${diff_result}"
+ exit 1
+fi
+
+#
+# Ensure android build environment is setup
+#
+# ANDROID_PRODUCT_OUT is only set once lunch is successfully executed. Fail if
+# ANDROID_PRODUCT_OUT is unset.
+#
+
+if [ -z ${ANDROID_PRODUCT_OUT+0} ]; then
+ echo "Error: Android build environment is not setup."
+ echo "cd to ${ANDROID_SRC} and do the following:"
+ echo " source build/envsetup.sh"
+ echo " lunch <device_lunch_combo>"
+ exit 1
+fi
+
+#
+# Create common.sh file, containing appropriate environment variables.
+#
+
+COMMON_FILE="android/common.sh"
+
+cat <<-EOF > ${COMMON_FILE}
+
+BISECT_ANDROID_DIR=${BISECT_ANDROID_DIR}
+
+BISECT_ANDROID_SRC=${ANDROID_SRC}
+BISECT_NUM_JOBS=${NUM_JOBS}
+
+BISECT_GOOD_BUILD=${GOOD_BUILD}
+BISECT_BAD_BUILD=${BAD_BUILD}
+BISECT_WORK_BUILD=${WORK_BUILD}
+
+BISECT_GOOD_SET=${GOOD_BUILD}/_LIST
+BISECT_BAD_SET=${BAD_BUILD}/_LIST
+
+${DEVICE_ID}
+
+export BISECT_STAGE="TRIAGE"
+
+EOF
+
+chmod 755 ${COMMON_FILE}
+
+exit 0
diff --git a/binary_search_tool/android/switch_to_bad.sh b/binary_search_tool/android/switch_to_bad.sh
new file mode 100755
index 00000000..f746b628
--- /dev/null
+++ b/binary_search_tool/android/switch_to_bad.sh
@@ -0,0 +1,42 @@
+#!/bin/bash -u
+#
+# Copyright 2016 Google Inc. All Rights Reserved.
+#
+# This script is intended to be used by binary_search_state.py, as
+# part of the binary search triage on the Android source tree. This script
+# symlinks a list of object files from the 'bad' build tree into the working
+# build tree, for testing.
+#
+# It is highly recommended to not use --noincremental with these scripts. If the
+# switch scripts are given non incremental sets of GOOD/BAD objects, make will
+# not be able to do an incremental build and will take much longer to build.
+#
+
+
+source android/common.sh
+
+OBJ_LIST_FILE=$1
+
+# Symlink from BAD obj to working tree.
+SWITCH_CMD="ln -f ${BISECT_BAD_BUILD}/{} {}; touch {};"
+
+overall_status=0
+
+# Check that number of arguments == 1
+if [ $# -eq 1 ] ; then
+ # Run symlink once per input line, ignore empty lines.
+ # Have ${BISECT_NUM_JOBS} processes running concurrently.
+ # Pass to "sh" to allow multiple commands to be executed.
+ xargs -P ${BISECT_NUM_JOBS} -a ${OBJ_LIST_FILE} -r -l -I '{}' \
+ sh -c "${SWITCH_CMD}"
+else
+ echo "ERROR:"
+ echo "Please run the binary search tool with --file_args"
+ echo "Android has too many files to be passed as command line arguments"
+ echo "The binary search tool will now exit..."
+ exit 1
+fi
+overall_status=$?
+
+
+exit ${overall_status}
diff --git a/binary_search_tool/android/switch_to_good.sh b/binary_search_tool/android/switch_to_good.sh
new file mode 100755
index 00000000..1c046c3f
--- /dev/null
+++ b/binary_search_tool/android/switch_to_good.sh
@@ -0,0 +1,41 @@
+#!/bin/bash -u
+#
+# Copyright 2016 Google Inc. All Rights Reserved.
+#
+# This script is intended to be used by binary_search_state.py, as
+# part of the binary search triage on the Android source tree. This script
+# symlinks a list of object files from the 'good' build tree into the working
+# build tree, for testing.
+#
+# It is highly recommended to not use --noincremental with these scripts. If the
+# switch scripts are given non incremental sets of GOOD/BAD objects, make will
+# not be able to do an incremental build and will take much longer to build.
+#
+
+source android/common.sh
+
+OBJ_LIST_FILE=$1
+
+# Symlink from GOOD obj to working tree.
+SWITCH_CMD="ln -f ${BISECT_GOOD_BUILD}/{} {}; touch {};"
+
+overall_status=0
+
+# Check that number of arguments == 1
+if [ $# -eq 1 ] ; then
+ # Run symlink once per input line, ignore empty lines.
+ # Have ${BISECT_NUM_JOBS} processes running concurrently.
+ # Pass to "sh" to allow multiple commands to be executed.
+ xargs -P ${BISECT_NUM_JOBS} -a ${OBJ_LIST_FILE} -r -l -I '{}' \
+ sh -c "${SWITCH_CMD}"
+else
+ echo "ERROR:"
+ echo "Please run the binary search tool with --file_args"
+ echo "Android has too many files to be passed as command line arguments"
+ echo "The binary search tool will now exit..."
+ exit 1
+fi
+overall_status=$?
+
+
+exit ${overall_status}
diff --git a/binary_search_tool/android/test_setup.sh b/binary_search_tool/android/test_setup.sh
new file mode 100755
index 00000000..26f8ec22
--- /dev/null
+++ b/binary_search_tool/android/test_setup.sh
@@ -0,0 +1,130 @@
+#!/bin/bash
+#
+# Copyright 2016 Google Inc. All Rights Reserved.
+#
+# This is the test setup script for generating an Android image based off the
+# current working build tree. make is called to relink the object files and
+# generate the new Android image to be flashed. The device is then rebooted into
+# bootloader mode and fastboot is used to flash the new image. The device is
+# then rebooted so the user's test script can run.
+#
+# This script is intended to be used by binary_search_state.py, as
+# part of the binary search triage on the Android source tree. It should
+# return '0' if the setup succeeds; and '1' if the setup fails (the image
+# could not build or be flashed).
+#
+
+source android/common.sh
+
+manual_flash()
+{
+ echo
+ echo "Please manually flash the built image to your device."
+ echo "To do so follow these steps:"
+ echo " 1. Boot your device into fastboot mode."
+ echo " 2. cd to '${BISECT_ANDROID_SRC}'"
+ echo " 2. Run 'source build/envsetup.sh'"
+ echo " 3. Run 'lunch'"
+ echo " 4. Run '${ADB_DEVICE}fastboot flashall -w'"
+ echo "Or see the following link for more in depth steps:"
+ echo "https://source.android.com/source/running.html"
+ echo
+ while true; do
+ sleep 1
+ read -p "Was the flashing of the image successful? " choice
+ case $choice in
+ [Yy]*) return 0;;
+ [Nn]*) return 1;;
+ *) echo "Please answer y or n.";;
+ esac
+ done
+}
+
+auto_flash()
+{
+ echo
+ echo "Please ensure your Android device is on and in fastboot mode so"
+ echo "fastboot flash may run."
+ echo
+ sleep 1
+ read -p $'Press enter to continue and retry the flashing' notused
+
+ echo " ${ADB_DEVICE}fastboot flashall -w"
+ fastboot flashall -w
+}
+
+flash()
+{
+ echo
+ echo "FLASHING"
+ echo "Rebooting device into fastboot mode."
+ echo " ${ADB_DEVICE}adb reboot bootloader"
+ adb reboot bootloader
+
+ echo
+ echo "Waiting for device to reach fastboot mode."
+ echo "(will timeout after 60 seconds)"
+ # fastboot will block indefinitely until device comes online.
+ # Grab random variable to test if device is online.
+ # If takes >60s then we error out and ask the user for help.
+ timeout 60 fastboot getvar 0 2>/dev/null
+ fastboot_flash_status=$?
+
+ if [[ ${fastboot_flash_status} -eq 0 ]]; then
+ echo
+ echo "Flashing image."
+ echo " ${ADB_DEVICE}fastboot flashall -w"
+ fastboot flashall -w
+ fastboot_flash_status=$?
+ fi
+
+ while [[ ${fastboot_flash_status} -ne 0 ]] ; do
+ echo
+ echo "fastboot flash has failed! From here you can:"
+ echo "1. Debug and/or flash manually"
+ echo "2. Retry flashing automatically"
+ echo "3. Abort this installation and skip this image"
+ echo "4. Abort this installation and mark test as failed"
+ sleep 1
+ read -p "Which method would you like to do? " choice
+ case $choice in
+ 1) manual_flash && break;;
+ 2) auto_flash && break;;
+ 3) return 125;;
+ 4) return 1;;
+ *) echo "Please answer 1, 2, 3, or 4.";;
+ esac
+ done
+}
+
+# Number of jobs make will use. Can be customized and played with.
+MAKE_JOBS=${BISECT_NUM_JOBS}
+
+# Set ADB_DEVICE to "ANDROID_SERIAL=${ANDROID_SERIAL}" or "" if device id not
+# set. This is used for debugging info so users can confirm which device
+# commands are being sent to.
+ADB_DEVICE=${ANDROID_SERIAL:+"ANDROID_SERIAL=${ANDROID_SERIAL} "}
+
+echo
+echo "INSTALLATION BEGIN"
+echo
+
+cd ${BISECT_ANDROID_SRC}
+
+echo "BUILDING IMAGE"
+
+make -j ${MAKE_JOBS}
+make_status=$?
+
+exit_val=0
+if [[ ${make_status} -eq 0 ]]; then
+ flash
+ exit_val=$?
+else
+ echo "ERROR:"
+ echo "make returned a non-zero status: ${make_status}. Skipping image..."
+ exit_val=1
+fi
+
+
+exit ${exit_val}
diff --git a/binary_search_tool/binary_search_perforce.py b/binary_search_tool/binary_search_perforce.py
new file mode 100755
index 00000000..7ac2fba6
--- /dev/null
+++ b/binary_search_tool/binary_search_perforce.py
@@ -0,0 +1,447 @@
+#!/usr/bin/python2
+"""Module of binary serch for perforce."""
+from __future__ import print_function
+
+import math
+import argparse
+import os
+import re
+import sys
+import tempfile
+
+from cros_utils import command_executer
+from cros_utils import logger
+
+verbose = True
+
+
+def _GetP4ClientSpec(client_name, p4_paths):
+ p4_string = ''
+ for p4_path in p4_paths:
+ if ' ' not in p4_path:
+ p4_string += ' -a %s' % p4_path
+ else:
+ p4_string += " -a \"" + (' //' + client_name + '/').join(p4_path) + "\""
+
+ return p4_string
+
+
+def GetP4Command(client_name, p4_port, p4_paths, checkoutdir, p4_snapshot=''):
+ command = ''
+
+ if p4_snapshot:
+ command += 'mkdir -p ' + checkoutdir
+ for p4_path in p4_paths:
+ real_path = p4_path[1]
+ if real_path.endswith('...'):
+ real_path = real_path.replace('/...', '')
+ command += (
+ '; mkdir -p ' + checkoutdir + '/' + os.path.dirname(real_path))
+ command += ('&& rsync -lr ' + p4_snapshot + '/' + real_path + ' ' +
+ checkoutdir + '/' + os.path.dirname(real_path))
+ return command
+
+ command += ' export P4CONFIG=.p4config'
+ command += ' && mkdir -p ' + checkoutdir
+ command += ' && cd ' + checkoutdir
+ command += ' && cp ${HOME}/.p4config .'
+ command += ' && chmod u+w .p4config'
+ command += " && echo \"P4PORT=" + p4_port + "\" >> .p4config"
+ command += " && echo \"P4CLIENT=" + client_name + "\" >> .p4config"
+ command += (' && g4 client ' + _GetP4ClientSpec(client_name, p4_paths))
+ command += ' && g4 sync '
+ command += ' && cd -'
+ return command
+
+
+class BinarySearchPoint(object):
+ """Class of binary search point."""
+
+ def __init__(self, revision, status, tag=None):
+ self.revision = revision
+ self.status = status
+ self.tag = tag
+
+
+class BinarySearcher(object):
+ """Class of binary searcher."""
+
+ def __init__(self, logger_to_set=None):
+ self.sorted_list = []
+ self.index_log = []
+ self.status_log = []
+ self.skipped_indices = []
+ self.current = 0
+ self.points = {}
+ self.lo = 0
+ self.hi = 0
+ if logger_to_set is not None:
+ self.logger = logger_to_set
+ else:
+ self.logger = logger.GetLogger()
+
+ def SetSortedList(self, sorted_list):
+ assert len(sorted_list) > 0
+ self.sorted_list = sorted_list
+ self.index_log = []
+ self.hi = len(sorted_list) - 1
+ self.lo = 0
+ self.points = {}
+ for i in range(len(self.sorted_list)):
+ bsp = BinarySearchPoint(self.sorted_list[i], -1, 'Not yet done.')
+ self.points[i] = bsp
+
+ def SetStatus(self, status, tag=None):
+ message = ('Revision: %s index: %d returned: %d' %
+ (self.sorted_list[self.current], self.current, status))
+ self.logger.LogOutput(message, print_to_console=verbose)
+ assert status == 0 or status == 1 or status == 125
+ self.index_log.append(self.current)
+ self.status_log.append(status)
+ bsp = BinarySearchPoint(self.sorted_list[self.current], status, tag)
+ self.points[self.current] = bsp
+
+ if status == 125:
+ self.skipped_indices.append(self.current)
+
+ if status == 0 or status == 1:
+ if status == 0:
+ self.lo = self.current + 1
+ elif status == 1:
+ self.hi = self.current
+ self.logger.LogOutput('lo: %d hi: %d\n' % (self.lo, self.hi))
+ self.current = (self.lo + self.hi) / 2
+
+ if self.lo == self.hi:
+ message = ('Search complete. First bad version: %s'
+ ' at index: %d' % (self.sorted_list[self.current], self.lo))
+ self.logger.LogOutput(message)
+ return True
+
+ for index in range(self.lo, self.hi):
+ if index not in self.skipped_indices:
+ return False
+ self.logger.LogOutput(
+ 'All skipped indices between: %d and %d\n' % (self.lo, self.hi),
+ print_to_console=verbose)
+ return True
+
+ # Does a better job with chromeos flakiness.
+ def GetNextFlakyBinary(self):
+ t = (self.lo, self.current, self.hi)
+ q = [t]
+ while len(q):
+ element = q.pop(0)
+ if element[1] in self.skipped_indices:
+ # Go top
+ to_add = (element[0], (element[0] + element[1]) / 2, element[1])
+ q.append(to_add)
+ # Go bottom
+ to_add = (element[1], (element[1] + element[2]) / 2, element[2])
+ q.append(to_add)
+ else:
+ self.current = element[1]
+ return
+ assert len(q), 'Queue should never be 0-size!'
+
+ def GetNextFlakyLinear(self):
+ current_hi = self.current
+ current_lo = self.current
+ while True:
+ if current_hi < self.hi and current_hi not in self.skipped_indices:
+ self.current = current_hi
+ break
+ if current_lo >= self.lo and current_lo not in self.skipped_indices:
+ self.current = current_lo
+ break
+ if current_lo < self.lo and current_hi >= self.hi:
+ break
+
+ current_hi += 1
+ current_lo -= 1
+
+ def GetNext(self):
+ self.current = (self.hi + self.lo) / 2
+ # Try going forward if current is skipped.
+ if self.current in self.skipped_indices:
+ self.GetNextFlakyBinary()
+
+ # TODO: Add an estimated time remaining as well.
+ message = ('Estimated tries: min: %d max: %d\n' %
+ (1 + math.log(self.hi - self.lo, 2),
+ self.hi - self.lo - len(self.skipped_indices)))
+ self.logger.LogOutput(message, print_to_console=verbose)
+ message = ('lo: %d hi: %d current: %d version: %s\n' %
+ (self.lo, self.hi, self.current, self.sorted_list[self.current]))
+ self.logger.LogOutput(message, print_to_console=verbose)
+ self.logger.LogOutput(str(self), print_to_console=verbose)
+ return self.sorted_list[self.current]
+
+ def SetLoRevision(self, lo_revision):
+ self.lo = self.sorted_list.index(lo_revision)
+
+ def SetHiRevision(self, hi_revision):
+ self.hi = self.sorted_list.index(hi_revision)
+
+ def GetAllPoints(self):
+ to_return = ''
+ for i in range(len(self.sorted_list)):
+ to_return += ('%d %d %s\n' % (self.points[i].status, i,
+ self.points[i].revision))
+
+ return to_return
+
+ def __str__(self):
+ to_return = ''
+ to_return += 'Current: %d\n' % self.current
+ to_return += str(self.index_log) + '\n'
+ revision_log = []
+ for index in self.index_log:
+ revision_log.append(self.sorted_list[index])
+ to_return += str(revision_log) + '\n'
+ to_return += str(self.status_log) + '\n'
+ to_return += 'Skipped indices:\n'
+ to_return += str(self.skipped_indices) + '\n'
+ to_return += self.GetAllPoints()
+ return to_return
+
+
+class RevisionInfo(object):
+ """Class of reversion info."""
+
+ def __init__(self, date, client, description):
+ self.date = date
+ self.client = client
+ self.description = description
+ self.status = -1
+
+
+class VCSBinarySearcher(object):
+ """Class of VCS binary searcher."""
+
+ def __init__(self):
+ self.bs = BinarySearcher()
+ self.rim = {}
+ self.current_ce = None
+ self.checkout_dir = None
+ self.current_revision = None
+
+ def Initialize(self):
+ pass
+
+ def GetNextRevision(self):
+ pass
+
+ def CheckoutRevision(self, revision):
+ pass
+
+ def SetStatus(self, status):
+ pass
+
+ def Cleanup(self):
+ pass
+
+ def SetGoodRevision(self, revision):
+ if revision is None:
+ return
+ assert revision in self.bs.sorted_list
+ self.bs.SetLoRevision(revision)
+
+ def SetBadRevision(self, revision):
+ if revision is None:
+ return
+ assert revision in self.bs.sorted_list
+ self.bs.SetHiRevision(revision)
+
+
+class P4BinarySearcher(VCSBinarySearcher):
+ """Class of P4 binary searcher."""
+
+ def __init__(self, p4_port, p4_paths, test_command):
+ VCSBinarySearcher.__init__(self)
+ self.p4_port = p4_port
+ self.p4_paths = p4_paths
+ self.test_command = test_command
+ self.checkout_dir = tempfile.mkdtemp()
+ self.ce = command_executer.GetCommandExecuter()
+ self.client_name = 'binary-searcher-$HOSTNAME-$USER'
+ self.job_log_root = '/home/asharif/www/coreboot_triage/'
+ self.changes = None
+
+ def Initialize(self):
+ self.Cleanup()
+ command = GetP4Command(self.client_name, self.p4_port, self.p4_paths, 1,
+ self.checkout_dir)
+ self.ce.RunCommand(command)
+ command = 'cd %s && g4 changes ...' % self.checkout_dir
+ _, out, _ = self.ce.RunCommandWOutput(command)
+ self.changes = re.findall(r'Change (\d+)', out)
+ change_infos = re.findall(r'Change (\d+) on ([\d/]+) by '
+ r"([^\s]+) ('[^']*')", out)
+ for change_info in change_infos:
+ ri = RevisionInfo(change_info[1], change_info[2], change_info[3])
+ self.rim[change_info[0]] = ri
+ # g4 gives changes in reverse chronological order.
+ self.changes.reverse()
+ self.bs.SetSortedList(self.changes)
+
+ def SetStatus(self, status):
+ self.rim[self.current_revision].status = status
+ return self.bs.SetStatus(status)
+
+ def GetNextRevision(self):
+ next_revision = self.bs.GetNext()
+ self.current_revision = next_revision
+ return next_revision
+
+ def CleanupCLs(self):
+ if not os.path.isfile(self.checkout_dir + '/.p4config'):
+ command = 'cd %s' % self.checkout_dir
+ command += ' && cp ${HOME}/.p4config .'
+ command += " && echo \"P4PORT=" + self.p4_port + "\" >> .p4config"
+ command += " && echo \"P4CLIENT=" + self.client_name + "\" >> .p4config"
+ self.ce.RunCommand(command)
+ command = 'cd %s' % self.checkout_dir
+ command += '; g4 changes -c %s' % self.client_name
+ _, out, _ = self.ce.RunCommandWOUTPUOT(command)
+ changes = re.findall(r'Change (\d+)', out)
+ if len(changes) != 0:
+ command = 'cd %s' % self.checkout_dir
+ for change in changes:
+ command += '; g4 revert -c %s' % change
+ self.ce.RunCommand(command)
+
+ def CleanupClient(self):
+ command = 'cd %s' % self.checkout_dir
+ command += '; g4 revert ...'
+ command += '; g4 client -d %s' % self.client_name
+ self.ce.RunCommand(command)
+
+ def Cleanup(self):
+ self.CleanupCLs()
+ self.CleanupClient()
+
+ def __str__(self):
+ to_return = ''
+ for change in self.changes:
+ ri = self.rim[change]
+ if ri.status == -1:
+ to_return = '%s\t%d\n' % (change, ri.status)
+ else:
+ to_return += ('%s\t%d\t%s\t%s\t%s\t%s\t%s\t%s\n' %
+ (change, ri.status, ri.date, ri.client, ri.description,
+ self.job_log_root + change + '.cmd',
+ self.job_log_root + change + '.out',
+ self.job_log_root + change + '.err'))
+ return to_return
+
+
+class P4GCCBinarySearcher(P4BinarySearcher):
+ """Class of P4 gcc binary searcher."""
+
+ # TODO: eventually get these patches from g4 instead of creating them manually
+ def HandleBrokenCLs(self, current_revision):
+ cr = int(current_revision)
+ problematic_ranges = []
+ problematic_ranges.append([44528, 44539])
+ problematic_ranges.append([44528, 44760])
+ problematic_ranges.append([44335, 44882])
+ command = 'pwd'
+ for pr in problematic_ranges:
+ if cr in range(pr[0], pr[1]):
+ patch_file = '/home/asharif/triage_tool/%d-%d.patch' % (pr[0], pr[1])
+ f = open(patch_file)
+ patch = f.read()
+ f.close()
+ files = re.findall('--- (//.*)', patch)
+ command += '; cd %s' % self.checkout_dir
+ for f in files:
+ command += '; g4 open %s' % f
+ command += '; patch -p2 < %s' % patch_file
+ self.current_ce.RunCommand(command)
+
+ def CheckoutRevision(self, current_revision):
+ job_logger = logger.Logger(
+ self.job_log_root, current_revision, True, subdir='')
+ self.current_ce = command_executer.GetCommandExecuter(job_logger)
+
+ self.CleanupCLs()
+ # Change the revision of only the gcc part of the toolchain.
+ command = ('cd %s/gcctools/google_vendor_src_branch/gcc '
+ '&& g4 revert ...; g4 sync @%s' %
+ (self.checkout_dir, current_revision))
+ self.current_ce.RunCommand(command)
+
+ self.HandleBrokenCLs(current_revision)
+
+
+def Main(argv):
+ """The main function."""
+ # Common initializations
+ ### command_executer.InitCommandExecuter(True)
+ ce = command_executer.GetCommandExecuter()
+
+ parser = argparse.ArgumentParser()
+ parser.add_argument(
+ '-n',
+ '--num_tries',
+ dest='num_tries',
+ default='100',
+ help='Number of tries.')
+ parser.add_argument(
+ '-g',
+ '--good_revision',
+ dest='good_revision',
+ help='Last known good revision.')
+ parser.add_argument(
+ '-b',
+ '--bad_revision',
+ dest='bad_revision',
+ help='Last known bad revision.')
+ parser.add_argument(
+ '-s', '--script', dest='script', help='Script to run for every version.')
+ options = parser.parse_args(argv)
+ # First get all revisions
+ p4_paths = ['//depot2/gcctools/google_vendor_src_branch/gcc/gcc-4.4.3/...',
+ '//depot2/gcctools/google_vendor_src_branch/binutils/'
+ 'binutils-2.20.1-mobile/...',
+ '//depot2/gcctools/google_vendor_src_branch/'
+ 'binutils/binutils-20100303/...']
+ p4gccbs = P4GCCBinarySearcher('perforce2:2666', p4_paths, '')
+
+ # Main loop:
+ terminated = False
+ num_tries = int(options.num_tries)
+ script = os.path.expanduser(options.script)
+
+ try:
+ p4gccbs.Initialize()
+ p4gccbs.SetGoodRevision(options.good_revision)
+ p4gccbs.SetBadRevision(options.bad_revision)
+ while not terminated and num_tries > 0:
+ current_revision = p4gccbs.GetNextRevision()
+
+ # Now run command to get the status
+ ce = command_executer.GetCommandExecuter()
+ command = '%s %s' % (script, p4gccbs.checkout_dir)
+ status = ce.RunCommand(command)
+ message = ('Revision: %s produced: %d status\n' %
+ (current_revision, status))
+ logger.GetLogger().LogOutput(message, print_to_console=verbose)
+ terminated = p4gccbs.SetStatus(status)
+ num_tries -= 1
+ logger.GetLogger().LogOutput(str(p4gccbs), print_to_console=verbose)
+
+ if not terminated:
+ logger.GetLogger().LogOutput(
+ 'Tries: %d expired.' % num_tries, print_to_console=verbose)
+ logger.GetLogger().LogOutput(str(p4gccbs.bs), print_to_console=verbose)
+ except (KeyboardInterrupt, SystemExit):
+ logger.GetLogger().LogOutput('Cleaning up...')
+ finally:
+ logger.GetLogger().LogOutput(str(p4gccbs.bs), print_to_console=verbose)
+ status = p4gccbs.Cleanup()
+
+
+if __name__ == '__main__':
+ Main(sys.argv[1:])
diff --git a/binary_search_tool/binary_search_state.py b/binary_search_tool/binary_search_state.py
new file mode 100755
index 00000000..a10e90b9
--- /dev/null
+++ b/binary_search_tool/binary_search_state.py
@@ -0,0 +1,598 @@
+#!/usr/bin/python2
+"""The binary search wrapper."""
+
+from __future__ import print_function
+
+import argparse
+import contextlib
+import errno
+import math
+import os
+import pickle
+import sys
+import tempfile
+import time
+
+# Adds cros_utils to PYTHONPATH
+import common
+
+# Now we do import from cros_utils
+from cros_utils import command_executer
+from cros_utils import logger
+
+import binary_search_perforce
+
+GOOD_SET_VAR = 'BISECT_GOOD_SET'
+BAD_SET_VAR = 'BISECT_BAD_SET'
+
+STATE_FILE = '%s.state' % sys.argv[0]
+HIDDEN_STATE_FILE = os.path.join(
+ os.path.dirname(STATE_FILE), '.%s' % os.path.basename(STATE_FILE))
+
+
+class Error(Exception):
+ """The general binary search tool error class."""
+ pass
+
+
+@contextlib.contextmanager
+def SetFile(env_var, items):
+ """Generate set files that can be used by switch/test scripts.
+
+ Generate temporary set file (good/bad) holding contents of good/bad items for
+ the current binary search iteration. Store the name of each file as an
+ environment variable so all child processes can access it.
+
+ This function is a contextmanager, meaning it's meant to be used with the
+ "with" statement in Python. This is so cleanup and setup happens automatically
+ and cleanly. Execution of the outer "with" statement happens at the "yield"
+ statement.
+
+ Args:
+ env_var: What environment variable to store the file name in.
+ items: What items are in this set.
+ """
+ with tempfile.NamedTemporaryFile() as f:
+ os.environ[env_var] = f.name
+ f.write('\n'.join(items))
+ f.flush()
+ yield
+
+
+class BinarySearchState(object):
+ """The binary search state class."""
+
+ def __init__(self, get_initial_items, switch_to_good, switch_to_bad,
+ test_setup_script, test_script, incremental, prune, iterations,
+ prune_iterations, verify, file_args, verbose):
+ """BinarySearchState constructor, see Run for full args documentation."""
+ self.get_initial_items = get_initial_items
+ self.switch_to_good = switch_to_good
+ self.switch_to_bad = switch_to_bad
+ self.test_setup_script = test_setup_script
+ self.test_script = test_script
+ self.incremental = incremental
+ self.prune = prune
+ self.iterations = iterations
+ self.prune_iterations = prune_iterations
+ self.verify = verify
+ self.file_args = file_args
+ self.verbose = verbose
+
+ self.l = logger.GetLogger()
+ self.ce = command_executer.GetCommandExecuter()
+
+ self.resumed = False
+ self.prune_cycles = 0
+ self.search_cycles = 0
+ self.binary_search = None
+ self.all_items = None
+ self.PopulateItemsUsingCommand(self.get_initial_items)
+ self.currently_good_items = set([])
+ self.currently_bad_items = set([])
+ self.found_items = set([])
+ self.known_good = set([])
+
+ self.start_time = time.time()
+
+ def SwitchToGood(self, item_list):
+ """Switch given items to "good" set."""
+ if self.incremental:
+ self.l.LogOutput(
+ 'Incremental set. Wanted to switch %s to good' % str(item_list),
+ print_to_console=self.verbose)
+ incremental_items = [
+ item for item in item_list if item not in self.currently_good_items
+ ]
+ item_list = incremental_items
+ self.l.LogOutput(
+ 'Incremental set. Actually switching %s to good' % str(item_list),
+ print_to_console=self.verbose)
+
+ if not item_list:
+ return
+
+ self.l.LogOutput(
+ 'Switching %s to good' % str(item_list), print_to_console=self.verbose)
+ self.RunSwitchScript(self.switch_to_good, item_list)
+ self.currently_good_items = self.currently_good_items.union(set(item_list))
+ self.currently_bad_items.difference_update(set(item_list))
+
+ def SwitchToBad(self, item_list):
+ """Switch given items to "bad" set."""
+ if self.incremental:
+ self.l.LogOutput(
+ 'Incremental set. Wanted to switch %s to bad' % str(item_list),
+ print_to_console=self.verbose)
+ incremental_items = [
+ item for item in item_list if item not in self.currently_bad_items
+ ]
+ item_list = incremental_items
+ self.l.LogOutput(
+ 'Incremental set. Actually switching %s to bad' % str(item_list),
+ print_to_console=self.verbose)
+
+ if not item_list:
+ return
+
+ self.l.LogOutput(
+ 'Switching %s to bad' % str(item_list), print_to_console=self.verbose)
+ self.RunSwitchScript(self.switch_to_bad, item_list)
+ self.currently_bad_items = self.currently_bad_items.union(set(item_list))
+ self.currently_good_items.difference_update(set(item_list))
+
+ def RunSwitchScript(self, switch_script, item_list):
+ """Pass given items to switch script.
+
+ Args:
+ switch_script: path to switch script
+ item_list: list of all items to be switched
+ """
+ if self.file_args:
+ with tempfile.NamedTemporaryFile() as f:
+ f.write('\n'.join(item_list))
+ f.flush()
+ command = '%s %s' % (switch_script, f.name)
+ ret, _, _ = self.ce.RunCommandWExceptionCleanup(
+ command, print_to_console=self.verbose)
+ else:
+ command = '%s %s' % (switch_script, ' '.join(item_list))
+ try:
+ ret, _, _ = self.ce.RunCommandWExceptionCleanup(
+ command, print_to_console=self.verbose)
+ except OSError as e:
+ if e.errno == errno.E2BIG:
+ raise Error('Too many arguments for switch script! Use --file_args')
+ else:
+ raise
+ assert ret == 0, 'Switch script %s returned %d' % (switch_script, ret)
+
+ def TestScript(self):
+ """Run test script and return exit code from script."""
+ command = self.test_script
+ ret, _, _ = self.ce.RunCommandWExceptionCleanup(command)
+ return ret
+
+ def TestSetupScript(self):
+ """Run test setup script and return exit code from script."""
+ if not self.test_setup_script:
+ return 0
+
+ command = self.test_setup_script
+ ret, _, _ = self.ce.RunCommandWExceptionCleanup(command)
+ return ret
+
+ def DoVerify(self):
+ """Verify correctness of test environment.
+
+ Verify that a "good" set of items produces a "good" result and that a "bad"
+ set of items produces a "bad" result. To be run directly before running
+ DoSearch. If verify is False this step is skipped.
+ """
+ if not self.verify:
+ return
+
+ self.l.LogOutput('VERIFICATION')
+ self.l.LogOutput('Beginning tests to verify good/bad sets\n')
+
+ self._OutputProgress('Verifying items from GOOD set\n')
+ with SetFile(GOOD_SET_VAR, self.all_items), SetFile(BAD_SET_VAR, []):
+ self.l.LogOutput('Resetting all items to good to verify.')
+ self.SwitchToGood(self.all_items)
+ status = self.TestSetupScript()
+ assert status == 0, 'When reset_to_good, test setup should succeed.'
+ status = self.TestScript()
+ assert status == 0, 'When reset_to_good, status should be 0.'
+
+ self._OutputProgress('Verifying items from BAD set\n')
+ with SetFile(GOOD_SET_VAR, []), SetFile(BAD_SET_VAR, self.all_items):
+ self.l.LogOutput('Resetting all items to bad to verify.')
+ self.SwitchToBad(self.all_items)
+ status = self.TestSetupScript()
+ # The following assumption is not true; a bad image might not
+ # successfully push onto a device.
+ # assert status == 0, 'When reset_to_bad, test setup should succeed.'
+ if status == 0:
+ status = self.TestScript()
+ assert status == 1, 'When reset_to_bad, status should be 1.'
+
+ def DoSearch(self):
+ """Perform full search for bad items.
+
+ Perform full search until prune_iterations number of bad items are found.
+ """
+ while (True and len(self.all_items) > 1 and
+ self.prune_cycles < self.prune_iterations):
+ terminated = self.DoBinarySearch()
+ self.prune_cycles += 1
+ if not terminated:
+ break
+ # Prune is set.
+ prune_index = self.binary_search.current
+
+ # If found item is last item, no new items can be found
+ if prune_index == len(self.all_items) - 1:
+ self.l.LogOutput('First bad item is the last item. Breaking.')
+ self.l.LogOutput('Bad items are: %s' % self.all_items[-1])
+ break
+
+ # If already seen item we have no new bad items to find, finish up
+ if self.all_items[prune_index] in self.found_items:
+ self.l.LogOutput(
+ 'Found item already found before: %s.' %
+ self.all_items[prune_index],
+ print_to_console=self.verbose)
+ self.l.LogOutput('No more bad items remaining. Done searching.')
+ self.l.LogOutput('Bad items are: %s' % ' '.join(self.found_items))
+ break
+
+ new_all_items = list(self.all_items)
+ # Move prune item to the end of the list.
+ new_all_items.append(new_all_items.pop(prune_index))
+ self.found_items.add(new_all_items[-1])
+
+ # Everything below newly found bad item is now known to be a good item.
+ # Take these good items out of the equation to save time on the next
+ # search. We save these known good items so they are still sent to the
+ # switch_to_good script.
+ if prune_index:
+ self.known_good.update(new_all_items[:prune_index])
+ new_all_items = new_all_items[prune_index:]
+
+ self.l.LogOutput(
+ 'Old list: %s. New list: %s' % (str(self.all_items),
+ str(new_all_items)),
+ print_to_console=self.verbose)
+
+ if not self.prune:
+ self.l.LogOutput('Not continuning further, --prune is not set')
+ break
+ # FIXME: Do we need to Convert the currently good items to bad
+ self.PopulateItemsUsingList(new_all_items)
+
+ def DoBinarySearch(self):
+ """Perform single iteration of binary search."""
+ # If in resume mode don't reset search_cycles
+ if not self.resumed:
+ self.search_cycles = 0
+ else:
+ self.resumed = False
+
+ terminated = False
+ while self.search_cycles < self.iterations and not terminated:
+ self.SaveState()
+ self.OutputIterationProgress()
+
+ self.search_cycles += 1
+ [bad_items, good_items] = self.GetNextItems()
+
+ with SetFile(GOOD_SET_VAR, good_items), SetFile(BAD_SET_VAR, bad_items):
+ # TODO: bad_items should come first.
+ self.SwitchToGood(good_items)
+ self.SwitchToBad(bad_items)
+ status = self.TestSetupScript()
+ if status == 0:
+ status = self.TestScript()
+ terminated = self.binary_search.SetStatus(status)
+
+ if terminated:
+ self.l.LogOutput('Terminated!', print_to_console=self.verbose)
+ if not terminated:
+ self.l.LogOutput('Ran out of iterations searching...')
+ self.l.LogOutput(str(self), print_to_console=self.verbose)
+ return terminated
+
+ def PopulateItemsUsingCommand(self, command):
+ """Update all_items and binary search logic from executable.
+
+ This method is mainly required for enumerating the initial list of items
+ from the get_initial_items script.
+
+ Args:
+ command: path to executable that will enumerate items.
+ """
+ ce = command_executer.GetCommandExecuter()
+ _, out, _ = ce.RunCommandWExceptionCleanup(
+ command, return_output=True, print_to_console=self.verbose)
+ all_items = out.split()
+ self.PopulateItemsUsingList(all_items)
+
+ def PopulateItemsUsingList(self, all_items):
+ """Update all_items and binary searching logic from list.
+
+ Args:
+ all_items: new list of all_items
+ """
+ self.all_items = all_items
+ self.binary_search = binary_search_perforce.BinarySearcher(
+ logger_to_set=self.l)
+ self.binary_search.SetSortedList(self.all_items)
+
+ def SaveState(self):
+ """Save state to STATE_FILE.
+
+ SaveState will create a new unique, hidden state file to hold data from
+ object. Then atomically overwrite the STATE_FILE symlink to point to the
+ new data.
+
+ Raises:
+ Error if STATE_FILE already exists but is not a symlink.
+ """
+ ce, l = self.ce, self.l
+ self.ce, self.l, self.binary_search.logger = None, None, None
+ old_state = None
+
+ _, path = tempfile.mkstemp(prefix=HIDDEN_STATE_FILE, dir='.')
+ with open(path, 'wb') as f:
+ pickle.dump(self, f)
+
+ if os.path.exists(STATE_FILE):
+ if os.path.islink(STATE_FILE):
+ old_state = os.readlink(STATE_FILE)
+ else:
+ raise Error(('%s already exists and is not a symlink!\n'
+ 'State file saved to %s' % (STATE_FILE, path)))
+
+ # Create new link and atomically overwrite old link
+ temp_link = '%s.link' % HIDDEN_STATE_FILE
+ os.symlink(path, temp_link)
+ os.rename(temp_link, STATE_FILE)
+
+ if old_state:
+ os.remove(old_state)
+
+ self.ce, self.l, self.binary_search.logger = ce, l, l
+
+ @classmethod
+ def LoadState(cls):
+ """Create BinarySearchState object from STATE_FILE."""
+ if not os.path.isfile(STATE_FILE):
+ return None
+ try:
+ bss = pickle.load(file(STATE_FILE))
+ bss.l = logger.GetLogger()
+ bss.ce = command_executer.GetCommandExecuter()
+ bss.binary_search.logger = bss.l
+ bss.start_time = time.time()
+
+ # Set resumed to be True so we can enter DoBinarySearch without the method
+ # resetting our current search_cycles to 0.
+ bss.resumed = True
+
+ # Set currently_good_items and currently_bad_items to empty so that the
+ # first iteration after resuming will always be non-incremental. This is
+ # just in case the environment changes, the user makes manual changes, or
+ # a previous switch_script corrupted the environment.
+ bss.currently_good_items = set([])
+ bss.currently_bad_items = set([])
+
+ binary_search_perforce.verbose = bss.verbose
+ return bss
+ except StandardError:
+ return None
+
+ def RemoveState(self):
+ """Remove STATE_FILE and its symlinked data from file system."""
+ if os.path.exists(STATE_FILE):
+ if os.path.islink(STATE_FILE):
+ real_file = os.readlink(STATE_FILE)
+ os.remove(real_file)
+ os.remove(STATE_FILE)
+
+ def GetNextItems(self):
+ """Get next items for binary search based on result of the last test run."""
+ border_item = self.binary_search.GetNext()
+ index = self.all_items.index(border_item)
+
+ next_bad_items = self.all_items[:index + 1]
+ next_good_items = self.all_items[index + 1:] + list(self.known_good)
+
+ return [next_bad_items, next_good_items]
+
+ def ElapsedTimeString(self):
+ """Return h m s format of elapsed time since execution has started."""
+ diff = int(time.time() - self.start_time)
+ seconds = diff % 60
+ minutes = (diff / 60) % 60
+ hours = diff / (60 * 60)
+
+ seconds = str(seconds).rjust(2)
+ minutes = str(minutes).rjust(2)
+ hours = str(hours).rjust(2)
+
+ return '%sh %sm %ss' % (hours, minutes, seconds)
+
+ def _OutputProgress(self, progress_text):
+ """Output current progress of binary search to console and logs.
+
+ Args:
+ progress_text: The progress to display to the user.
+ """
+ progress = ('\n***** PROGRESS (elapsed time: %s) *****\n'
+ '%s'
+ '************************************************')
+ progress = progress % (self.ElapsedTimeString(), progress_text)
+ self.l.LogOutput(progress)
+
+ def OutputIterationProgress(self):
+ out = ('Search %d of estimated %d.\n'
+ 'Prune %d of max %d.\n'
+ 'Current bad items found:\n'
+ '%s\n')
+ out = out % (self.search_cycles + 1,
+ math.ceil(math.log(len(self.all_items), 2)),
+ self.prune_cycles + 1, self.prune_iterations,
+ ', '.join(self.found_items))
+ self._OutputProgress(out)
+
+ def __str__(self):
+ ret = ''
+ ret += 'all: %s\n' % str(self.all_items)
+ ret += 'currently_good: %s\n' % str(self.currently_good_items)
+ ret += 'currently_bad: %s\n' % str(self.currently_bad_items)
+ ret += str(self.binary_search)
+ return ret
+
+
+class MockBinarySearchState(BinarySearchState):
+ """Mock class for BinarySearchState."""
+
+ def __init__(self, **kwargs):
+ # Initialize all arguments to None
+ default_kwargs = {
+ 'get_initial_items': 'echo "1"',
+ 'switch_to_good': None,
+ 'switch_to_bad': None,
+ 'test_setup_script': None,
+ 'test_script': None,
+ 'incremental': True,
+ 'prune': False,
+ 'iterations': 50,
+ 'prune_iterations': 100,
+ 'verify': True,
+ 'file_args': False,
+ 'verbose': False
+ }
+ default_kwargs.update(kwargs)
+ super(MockBinarySearchState, self).__init__(**default_kwargs)
+
+
+def _CanonicalizeScript(script_name):
+ """Return canonical path to script.
+
+ Args:
+ script_name: Relative or absolute path to script
+
+ Returns:
+ Canonicalized script path
+ """
+ script_name = os.path.expanduser(script_name)
+ if not script_name.startswith('/'):
+ return os.path.join('.', script_name)
+
+
+def Run(get_initial_items,
+ switch_to_good,
+ switch_to_bad,
+ test_script,
+ test_setup_script=None,
+ iterations=50,
+ prune=False,
+ noincremental=False,
+ file_args=False,
+ verify=True,
+ prune_iterations=100,
+ verbose=False,
+ resume=False):
+ """Run binary search tool. Equivalent to running through terminal.
+
+ Args:
+ get_initial_items: Script to enumerate all items being binary searched
+ switch_to_good: Script that will take items as input and switch them to good
+ set
+ switch_to_bad: Script that will take items as input and switch them to bad
+ set
+ test_script: Script that will determine if the current combination of good
+ and bad items make a "good" or "bad" result.
+ test_setup_script: Script to do necessary setup (building, compilation,
+ etc.) for test_script.
+ iterations: How many binary search iterations to run before exiting.
+ prune: If False the binary search tool will stop when the first bad item is
+ found. Otherwise then binary search tool will continue searching
+ until all bad items are found (or prune_iterations is reached).
+ noincremental: Whether to send "diffs" of good/bad items to switch scripts.
+ file_args: If True then arguments to switch scripts will be a file name
+ containing a newline separated list of the items to switch.
+ verify: If True, run tests to ensure initial good/bad sets actually
+ produce a good/bad result.
+ prune_iterations: Max number of bad items to search for.
+ verbose: If True will print extra debug information to user.
+ resume: If True will resume using STATE_FILE.
+
+ Returns:
+ 0 for success, error otherwise
+ """
+ if resume:
+ bss = BinarySearchState.LoadState()
+ if not bss:
+ logger.GetLogger().LogOutput(
+ '%s is not a valid binary_search_tool state file, cannot resume!' %
+ STATE_FILE)
+ return 1
+ else:
+ switch_to_good = _CanonicalizeScript(switch_to_good)
+ switch_to_bad = _CanonicalizeScript(switch_to_bad)
+ if test_setup_script:
+ test_setup_script = _CanonicalizeScript(test_setup_script)
+ test_script = _CanonicalizeScript(test_script)
+ get_initial_items = _CanonicalizeScript(get_initial_items)
+ incremental = not noincremental
+
+ binary_search_perforce.verbose = verbose
+
+ bss = BinarySearchState(get_initial_items, switch_to_good, switch_to_bad,
+ test_setup_script, test_script, incremental, prune,
+ iterations, prune_iterations, verify, file_args,
+ verbose)
+ bss.DoVerify()
+
+ try:
+ bss.DoSearch()
+ bss.RemoveState()
+ logger.GetLogger().LogOutput('Total execution time: %s' %
+ bss.ElapsedTimeString())
+ except Error as e:
+ logger.GetLogger().LogError(e)
+ return 1
+
+ return 0
+
+
+def Main(argv):
+ """The main function."""
+ # Common initializations
+
+ parser = argparse.ArgumentParser()
+ common.BuildArgParser(parser)
+ logger.GetLogger().LogOutput(' '.join(argv))
+ options = parser.parse_args(argv)
+
+ if not (options.get_initial_items and options.switch_to_good and
+ options.switch_to_bad and options.test_script) and not options.resume:
+ parser.print_help()
+ return 1
+
+ if options.resume:
+ logger.GetLogger().LogOutput('Resuming from %s' % STATE_FILE)
+ if len(argv) > 1:
+ logger.GetLogger().LogOutput(('Note: resuming from previous state, '
+ 'ignoring given options and loading saved '
+ 'options instead.'))
+
+ # Get dictionary of all options
+ args = vars(options)
+ return Run(**args)
+
+
+if __name__ == '__main__':
+ sys.exit(Main(sys.argv[1:]))
diff --git a/binary_search_tool/bisect.py b/binary_search_tool/bisect.py
new file mode 100755
index 00000000..d5a8b710
--- /dev/null
+++ b/binary_search_tool/bisect.py
@@ -0,0 +1,398 @@
+#!/usr/bin/python2
+"""The unified package/object bisecting tool."""
+
+from __future__ import print_function
+
+import abc
+import argparse
+import os
+import sys
+from argparse import RawTextHelpFormatter
+
+import common
+
+from cros_utils import command_executer
+from cros_utils import logger
+
+import binary_search_state
+
+
+class Bisector(object):
+ """The abstract base class for Bisectors."""
+
+ # Make Bisector an abstract class
+ __metaclass__ = abc.ABCMeta
+
+ def __init__(self, options, overrides=None):
+ """Constructor for Bisector abstract base class
+
+ Args:
+ options: positional arguments for specific mode (board, remote, etc.)
+ overrides: optional dict of overrides for argument defaults
+ """
+ self.options = options
+ self.overrides = overrides
+ if not overrides:
+ self.overrides = {}
+ self.logger = logger.GetLogger()
+ self.ce = command_executer.GetCommandExecuter()
+
+ def _PrettyPrintArgs(self, args, overrides):
+ """Output arguments in a nice, human readable format
+
+ Will print and log all arguments for the bisecting tool and make note of
+ which arguments have been overridden.
+
+ Example output:
+ ./bisect.py package daisy 172.17.211.184 -I "" -t cros_pkg/my_test.sh
+ Performing ChromeOS Package bisection
+ Method Config:
+ board : daisy
+ remote : 172.17.211.184
+
+ Bisection Config: (* = overridden)
+ get_initial_items : cros_pkg/get_initial_items.sh
+ switch_to_good : cros_pkg/switch_to_good.sh
+ switch_to_bad : cros_pkg/switch_to_bad.sh
+ * test_setup_script :
+ * test_script : cros_pkg/my_test.sh
+ prune : True
+ noincremental : False
+ file_args : True
+
+ Args:
+ args: The args to be given to binary_search_state.Run. This represents
+ how the bisection tool will run (with overridden arguments already
+ added in).
+ overrides: The dict of overriden arguments provided by the user. This is
+ provided so the user can be told which arguments were
+ overriden and with what value.
+ """
+ # Output method config (board, remote, etc.)
+ options = vars(self.options)
+ out = '\nPerforming %s bisection\n' % self.method_name
+ out += 'Method Config:\n'
+ max_key_len = max([len(str(x)) for x in options.keys()])
+ for key in sorted(options):
+ val = options[key]
+ key_str = str(key).rjust(max_key_len)
+ val_str = str(val)
+ out += ' %s : %s\n' % (key_str, val_str)
+
+ # Output bisection config (scripts, prune, etc.)
+ out += '\nBisection Config: (* = overridden)\n'
+ max_key_len = max([len(str(x)) for x in args.keys()])
+ # Print args in common._ArgsDict order
+ args_order = [x['dest'] for x in common.GetArgsDict().itervalues()]
+ compare = lambda x, y: cmp(args_order.index(x), args_order.index(y))
+
+ for key in sorted(args, cmp=compare):
+ val = args[key]
+ key_str = str(key).rjust(max_key_len)
+ val_str = str(val)
+ changed_str = '*' if key in overrides else ' '
+
+ out += ' %s %s : %s\n' % (changed_str, key_str, val_str)
+
+ out += '\n'
+ self.logger.LogOutput(out)
+
+ def ArgOverride(self, args, overrides, pretty_print=True):
+ """Override arguments based on given overrides and provide nice output
+
+ Args:
+ args: dict of arguments to be passed to binary_search_state.Run (runs
+ dict.update, causing args to be mutated).
+ overrides: dict of arguments to update args with
+ pretty_print: if True print out args/overrides to user in pretty format
+ """
+ args.update(overrides)
+ if pretty_print:
+ self._PrettyPrintArgs(args, overrides)
+
+ @abc.abstractmethod
+ def PreRun(self):
+ pass
+
+ @abc.abstractmethod
+ def Run(self):
+ pass
+
+ @abc.abstractmethod
+ def PostRun(self):
+ pass
+
+
+class BisectPackage(Bisector):
+ """The class for package bisection steps."""
+
+ cros_pkg_setup = 'cros_pkg/setup.sh'
+ cros_pkg_cleanup = 'cros_pkg/%s_cleanup.sh'
+
+ def __init__(self, options, overrides):
+ super(BisectPackage, self).__init__(options, overrides)
+ self.method_name = 'ChromeOS Package'
+ self.default_kwargs = {
+ 'get_initial_items': 'cros_pkg/get_initial_items.sh',
+ 'switch_to_good': 'cros_pkg/switch_to_good.sh',
+ 'switch_to_bad': 'cros_pkg/switch_to_bad.sh',
+ 'test_setup_script': 'cros_pkg/test_setup.sh',
+ 'test_script': 'cros_pkg/interactive_test.sh',
+ 'noincremental': False,
+ 'prune': True,
+ 'file_args': True
+ }
+ self.setup_cmd = ('%s %s %s' % (self.cros_pkg_setup, self.options.board,
+ self.options.remote))
+ self.ArgOverride(self.default_kwargs, self.overrides)
+
+ def PreRun(self):
+ ret, _, _ = self.ce.RunCommandWExceptionCleanup(
+ self.setup_cmd, print_to_console=True)
+ if ret:
+ self.logger.LogError('Package bisector setup failed w/ error %d' % ret)
+ return 1
+ return 0
+
+ def Run(self):
+ return binary_search_state.Run(**self.default_kwargs)
+
+ def PostRun(self):
+ cmd = self.cros_pkg_cleanup % self.options.board
+ ret, _, _ = self.ce.RunCommandWExceptionCleanup(cmd, print_to_console=True)
+ if ret:
+ self.logger.LogError('Package bisector cleanup failed w/ error %d' % ret)
+ return 1
+
+ self.logger.LogOutput(('Cleanup successful! To restore the bisection '
+ 'environment run the following:\n'
+ ' cd %s; %s') % (os.getcwd(), self.setup_cmd))
+ return 0
+
+
+class BisectObject(Bisector):
+ """The class for object bisection steps."""
+
+ sysroot_wrapper_setup = 'sysroot_wrapper/setup.sh'
+ sysroot_wrapper_cleanup = 'sysroot_wrapper/cleanup.sh'
+
+ def __init__(self, options, overrides):
+ super(BisectObject, self).__init__(options, overrides)
+ self.method_name = 'ChromeOS Object'
+ self.default_kwargs = {
+ 'get_initial_items': 'sysroot_wrapper/get_initial_items.sh',
+ 'switch_to_good': 'sysroot_wrapper/switch_to_good.sh',
+ 'switch_to_bad': 'sysroot_wrapper/switch_to_bad.sh',
+ 'test_setup_script': 'sysroot_wrapper/test_setup.sh',
+ 'test_script': 'sysroot_wrapper/interactive_test.sh',
+ 'noincremental': False,
+ 'prune': True,
+ 'file_args': True
+ }
+ self.options = options
+ if options.dir:
+ os.environ['BISECT_DIR'] = options.dir
+ self.options.dir = os.environ.get('BISECT_DIR', '/tmp/sysroot_bisect')
+ self.setup_cmd = ('%s %s %s %s' % (self.sysroot_wrapper_setup,
+ self.options.board, self.options.remote,
+ self.options.package))
+
+ self.ArgOverride(self.default_kwargs, overrides)
+
+ def PreRun(self):
+ ret, _, _ = self.ce.RunCommandWExceptionCleanup(
+ self.setup_cmd, print_to_console=True)
+ if ret:
+ self.logger.LogError('Object bisector setup failed w/ error %d' % ret)
+ return 1
+
+ os.environ['BISECT_STAGE'] = 'TRIAGE'
+ return 0
+
+ def Run(self):
+ return binary_search_state.Run(**self.default_kwargs)
+
+ def PostRun(self):
+ cmd = self.sysroot_wrapper_cleanup
+ ret, _, _ = self.ce.RunCommandWExceptionCleanup(cmd, print_to_console=True)
+ if ret:
+ self.logger.LogError('Object bisector cleanup failed w/ error %d' % ret)
+ return 1
+ self.logger.LogOutput(('Cleanup successful! To restore the bisection '
+ 'environment run the following:\n'
+ ' cd %s; %s') % (os.getcwd(), self.setup_cmd))
+ return 0
+
+
+class BisectAndroid(Bisector):
+ """The class for Android bisection steps."""
+
+ android_setup = 'android/setup.sh'
+ android_cleanup = 'android/cleanup.sh'
+ default_dir = os.path.expanduser('~/ANDROID_BISECT')
+
+ def __init__(self, options, overrides):
+ super(BisectAndroid, self).__init__(options, overrides)
+ self.method_name = 'Android'
+ self.default_kwargs = {
+ 'get_initial_items': 'android/get_initial_items.sh',
+ 'switch_to_good': 'android/switch_to_good.sh',
+ 'switch_to_bad': 'android/switch_to_bad.sh',
+ 'test_setup_script': 'android/test_setup.sh',
+ 'test_script': 'android/interactive_test.sh',
+ 'prune': True,
+ 'file_args': True,
+ 'noincremental': False,
+ }
+ self.options = options
+ if options.dir:
+ os.environ['BISECT_DIR'] = options.dir
+ self.options.dir = os.environ.get('BISECT_DIR', self.default_dir)
+
+ num_jobs = "NUM_JOBS='%s'" % self.options.num_jobs
+ device_id = ''
+ if self.options.device_id:
+ device_id = "ANDROID_SERIAL='%s'" % self.options.device_id
+
+ self.setup_cmd = ('%s %s %s %s' % (num_jobs, device_id, self.android_setup,
+ self.options.android_src))
+
+ self.ArgOverride(self.default_kwargs, overrides)
+
+ def PreRun(self):
+ ret, _, _ = self.ce.RunCommandWExceptionCleanup(
+ self.setup_cmd, print_to_console=True)
+ if ret:
+ self.logger.LogError('Android bisector setup failed w/ error %d' % ret)
+ return 1
+
+ os.environ['BISECT_STAGE'] = 'TRIAGE'
+ return 0
+
+ def Run(self):
+ return binary_search_state.Run(**self.default_kwargs)
+
+ def PostRun(self):
+ cmd = self.android_cleanup
+ ret, _, _ = self.ce.RunCommandWExceptionCleanup(cmd, print_to_console=True)
+ if ret:
+ self.logger.LogError('Android bisector cleanup failed w/ error %d' % ret)
+ return 1
+ self.logger.LogOutput(('Cleanup successful! To restore the bisection '
+ 'environment run the following:\n'
+ ' cd %s; %s') % (os.getcwd(), self.setup_cmd))
+ return 0
+
+
+def Run(bisector):
+ log = logger.GetLogger()
+
+ log.LogOutput('Setting up Bisection tool')
+ ret = bisector.PreRun()
+ if ret:
+ return ret
+
+ log.LogOutput('Running Bisection tool')
+ ret = bisector.Run()
+ if ret:
+ return ret
+
+ log.LogOutput('Cleaning up Bisection tool')
+ ret = bisector.PostRun()
+ if ret:
+ return ret
+
+ return 0
+
+
+_HELP_EPILOG = """
+Run ./bisect.py {method} --help for individual method help/args
+
+------------------
+
+See README.bisect for examples on argument overriding
+
+See below for full override argument reference:
+"""
+
+
+def Main(argv):
+ override_parser = argparse.ArgumentParser(
+ add_help=False,
+ argument_default=argparse.SUPPRESS,
+ usage='bisect.py {mode} [options]')
+ common.BuildArgParser(override_parser, override=True)
+
+ epilog = _HELP_EPILOG + override_parser.format_help()
+ parser = argparse.ArgumentParser(
+ epilog=epilog, formatter_class=RawTextHelpFormatter)
+ subparsers = parser.add_subparsers(
+ title='Bisect mode',
+ description=('Which bisection method to '
+ 'use. Each method has '
+ 'specific setup and '
+ 'arguments. Please consult '
+ 'the README for more '
+ 'information.'))
+
+ parser_package = subparsers.add_parser('package')
+ parser_package.add_argument('board', help='Board to target')
+ parser_package.add_argument('remote', help='Remote machine to test on')
+ parser_package.set_defaults(handler=BisectPackage)
+
+ parser_object = subparsers.add_parser('object')
+ parser_object.add_argument('board', help='Board to target')
+ parser_object.add_argument('remote', help='Remote machine to test on')
+ parser_object.add_argument('package', help='Package to emerge and test')
+ parser_object.add_argument(
+ '--dir',
+ help=('Bisection directory to use, sets '
+ '$BISECT_DIR if provided. Defaults to '
+ 'current value of $BISECT_DIR (or '
+ '/tmp/sysroot_bisect if $BISECT_DIR is '
+ 'empty).'))
+ parser_object.set_defaults(handler=BisectObject)
+
+ parser_android = subparsers.add_parser('android')
+ parser_android.add_argument('android_src', help='Path to android source tree')
+ parser_android.add_argument(
+ '--dir',
+ help=('Bisection directory to use, sets '
+ '$BISECT_DIR if provided. Defaults to '
+ 'current value of $BISECT_DIR (or '
+ '~/ANDROID_BISECT/ if $BISECT_DIR is '
+ 'empty).'))
+ parser_android.add_argument(
+ '-j',
+ '--num_jobs',
+ type=int,
+ default=1,
+ help=('Number of jobs that make and various '
+ 'scripts for bisector can spawn. Setting '
+ 'this value too high can freeze up your '
+ 'machine!'))
+ parser_android.add_argument(
+ '--device_id',
+ default='',
+ help=('Device id for device used for testing. '
+ 'Use this if you have multiple Android '
+ 'devices plugged into your machine.'))
+ parser_android.set_defaults(handler=BisectAndroid)
+
+ options, remaining = parser.parse_known_args(argv)
+ if remaining:
+ overrides = override_parser.parse_args(remaining)
+ overrides = vars(overrides)
+ else:
+ overrides = {}
+
+ subcmd = options.handler
+ del options.handler
+
+ bisector = subcmd(options, overrides)
+ return Run(bisector)
+
+
+if __name__ == '__main__':
+ os.chdir(os.path.dirname(__file__))
+ sys.exit(Main(sys.argv[1:]))
diff --git a/binary_search_tool/bisect_driver.py b/binary_search_tool/bisect_driver.py
new file mode 100644
index 00000000..0b3fb1d4
--- /dev/null
+++ b/binary_search_tool/bisect_driver.py
@@ -0,0 +1,334 @@
+# Copyright 2016 Google Inc. All Rights Reserved.
+#
+# This script is used to help the compiler wrapper in the Android build system
+# bisect for bad object files.
+"""Utilities for bisection of Android object files.
+
+This module contains a set of utilities to allow bisection between
+two sets (good and bad) of object files. Mostly used to find compiler
+bugs.
+
+Reference page:
+https://sites.google.com/a/google.com/chromeos-toolchain-team-home2/home/team-tools-and-scripts/bisecting-chromeos-compiler-problems/bisection-compiler-wrapper
+
+Design doc:
+https://docs.google.com/document/d/1yDgaUIa2O5w6dc3sSTe1ry-1ehKajTGJGQCbyn0fcEM
+"""
+
+from __future__ import print_function
+
+import contextlib
+import fcntl
+import os
+import shutil
+import subprocess
+import sys
+
+VALID_MODES = ['POPULATE_GOOD', 'POPULATE_BAD', 'TRIAGE']
+GOOD_CACHE = 'good'
+BAD_CACHE = 'bad'
+LIST_FILE = os.path.join(GOOD_CACHE, '_LIST')
+
+CONTINUE_ON_MISSING = os.environ.get('BISECT_CONTINUE_ON_MISSING', None) == '1'
+WRAPPER_SAFE_MODE = os.environ.get('BISECT_WRAPPER_SAFE_MODE', None) == '1'
+
+
+class Error(Exception):
+ """The general compiler wrapper error class."""
+ pass
+
+
+@contextlib.contextmanager
+def lock_file(path, mode):
+ """Lock file and block if other process has lock on file.
+
+ Acquire exclusive lock for file. Only blocks other processes if they attempt
+ to also acquire lock through this method. If only reading (modes 'r' and 'rb')
+ then the lock is shared (i.e. many reads can happen concurrently, but only one
+ process may write at a time).
+
+ This function is a contextmanager, meaning it's meant to be used with the
+ "with" statement in Python. This is so cleanup and setup happens automatically
+ and cleanly. Execution of the outer "with" statement happens at the "yield"
+ statement. Execution resumes after the yield when the outer "with" statement
+ ends.
+
+ Args:
+ path: path to file being locked
+ mode: mode to open file with ('w', 'r', etc.)
+ """
+ with open(path, mode) as f:
+ # Share the lock if just reading, make lock exclusive if writing
+ if f.mode == 'r' or f.mode == 'rb':
+ lock_type = fcntl.LOCK_SH
+ else:
+ lock_type = fcntl.LOCK_EX
+
+ try:
+ fcntl.lockf(f, lock_type)
+ yield f
+ f.flush()
+ except:
+ raise
+ finally:
+ fcntl.lockf(f, fcntl.LOCK_UN)
+
+
+def log_to_file(path, execargs, link_from=None, link_to=None):
+ """Common logging function.
+
+ Log current working directory, current execargs, and a from-to relationship
+ between files.
+ """
+ with lock_file(path, 'a') as log:
+ log.write('cd: %s; %s\n' % (os.getcwd(), ' '.join(execargs)))
+ if link_from and link_to:
+ log.write('%s -> %s\n' % (link_from, link_to))
+
+
+def exec_and_return(execargs):
+ """Execute process and return.
+
+ Execute according to execargs and return immediately. Don't inspect
+ stderr or stdout.
+ """
+ return subprocess.call(execargs)
+
+
+def which_cache(obj_file):
+ """Determine which cache an object belongs to.
+
+ The binary search tool creates two files for each search iteration listing
+ the full set of bad objects and full set of good objects. We use this to
+ determine where an object file should be linked from (good or bad).
+ """
+ bad_set_file = os.environ.get('BISECT_BAD_SET')
+ ret = subprocess.call(['grep', '-x', '-q', obj_file, bad_set_file])
+ if ret == 0:
+ return BAD_CACHE
+ else:
+ return GOOD_CACHE
+
+
+def makedirs(path):
+ """Try to create directories in path."""
+ try:
+ os.makedirs(path)
+ except os.error:
+ if not os.path.isdir(path):
+ raise
+
+
+def get_obj_path(execargs):
+ """Get the object path for the object file in the list of arguments.
+
+ Returns:
+ Absolute object path from execution args (-o argument). If no object being
+ outputted or output doesn't end in ".o" then return empty string.
+ """
+ try:
+ i = execargs.index('-o')
+ except ValueError:
+ return ''
+
+ obj_path = execargs[i + 1]
+ if not obj_path.endswith(('.o',)):
+ # TODO: what suffixes do we need to contemplate
+ # TODO: add this as a warning
+ # TODO: need to handle -r compilations
+ return ''
+
+ return os.path.abspath(obj_path)
+
+
+def get_dep_path(execargs):
+ """Get the dep file path for the dep file in the list of arguments.
+
+ Returns:
+ Absolute path of dependency file path from execution args (-o argument). If
+ no dependency being outputted then return empty string.
+ """
+ if '-MD' not in execargs and '-MMD' not in execargs:
+ return ''
+
+ # If -MF given this is the path of the dependency file. Otherwise the
+ # dependency file is the value of -o but with a .d extension
+ if '-MF' in execargs:
+ i = execargs.index('-MF')
+ dep_path = execargs[i + 1]
+ return os.path.abspath(dep_path)
+
+ full_obj_path = get_obj_path(execargs)
+ if not full_obj_path:
+ return ''
+
+ return full_obj_path[:-2] + '.d'
+
+
+def get_dwo_path(execargs):
+ """Get the dwo file path for the dwo file in the list of arguments.
+
+ Returns:
+ Absolute dwo file path from execution args (-gsplit-dwarf argument) If no
+ dwo file being outputted then return empty string.
+ """
+ if '-gsplit-dwarf' not in execargs:
+ return ''
+
+ full_obj_path = get_obj_path(execargs)
+ if not full_obj_path:
+ return ''
+
+ return full_obj_path[:-2] + '.dwo'
+
+
+def in_object_list(obj_name, list_filename):
+ """Check if object file name exist in file with object list."""
+ if not obj_name:
+ return False
+
+ with lock_file(list_filename, 'r') as list_file:
+ for line in list_file:
+ if line.strip() == obj_name:
+ return True
+
+ return False
+
+
+def get_side_effects(execargs):
+ """Determine side effects generated by compiler
+
+ Returns:
+ List of paths of objects that the compiler generates as side effects.
+ """
+ side_effects = []
+
+ # Cache dependency files
+ full_dep_path = get_dep_path(execargs)
+ if full_dep_path:
+ side_effects.append(full_dep_path)
+
+ # Cache dwo files
+ full_dwo_path = get_dwo_path(execargs)
+ if full_dwo_path:
+ side_effects.append(full_dwo_path)
+
+ return side_effects
+
+
+def cache_file(execargs, bisect_dir, cache, abs_file_path):
+ """Cache compiler output file (.o/.d/.dwo)."""
+ # os.path.join fails with absolute paths, use + instead
+ bisect_path = os.path.join(bisect_dir, cache) + abs_file_path
+ bisect_path_dir = os.path.dirname(bisect_path)
+ makedirs(bisect_path_dir)
+ pop_log = os.path.join(bisect_dir, cache, '_POPULATE_LOG')
+ log_to_file(pop_log, execargs, abs_file_path, bisect_path)
+
+ try:
+ if os.path.exists(abs_file_path):
+ shutil.copy2(abs_file_path, bisect_path)
+ except Exception:
+ print('Could not cache file %s' % abs_file_path, file=sys.stderr)
+ raise
+
+
+def restore_file(bisect_dir, cache, abs_file_path):
+ """Restore file from cache (.o/.d/.dwo)."""
+ # os.path.join fails with absolute paths, use + instead
+ cached_path = os.path.join(bisect_dir, cache) + abs_file_path
+ if os.path.exists(cached_path):
+ if os.path.exists(abs_file_path):
+ os.remove(abs_file_path)
+ os.link(cached_path, abs_file_path)
+ else:
+ raise Error(('%s is missing from %s cache! Unsure how to proceed. Make '
+ 'will now crash.' % (cache, cached_path)))
+
+
+def bisect_populate(execargs, bisect_dir, population_name):
+ """Add necessary information to the bisect cache for the given execution.
+
+ Extract the necessary information for bisection from the compiler
+ execution arguments and put it into the bisection cache. This
+ includes copying the created object file, adding the object
+ file path to the cache list and keeping a log of the execution.
+
+ Args:
+ execargs: compiler execution arguments.
+ bisect_dir: bisection directory.
+ population_name: name of the cache being populated (good/bad).
+ """
+ retval = exec_and_return(execargs)
+ if retval:
+ return retval
+
+ full_obj_path = get_obj_path(execargs)
+ # If not a normal compiler call then just exit
+ if not full_obj_path:
+ return
+
+ cache_file(execargs, bisect_dir, population_name, full_obj_path)
+
+ population_dir = os.path.join(bisect_dir, population_name)
+ with lock_file(os.path.join(population_dir, '_LIST'), 'a') as object_list:
+ object_list.write('%s\n' % full_obj_path)
+
+ for side_effect in get_side_effects(execargs):
+ cache_file(execargs, bisect_dir, population_name, side_effect)
+
+
+def bisect_triage(execargs, bisect_dir):
+ full_obj_path = get_obj_path(execargs)
+ obj_list = os.path.join(bisect_dir, LIST_FILE)
+
+ # If the output isn't an object file just call compiler
+ if not full_obj_path:
+ return exec_and_return(execargs)
+
+ # If this isn't a bisected object just call compiler
+ # This shouldn't happen!
+ if not in_object_list(full_obj_path, obj_list):
+ if CONTINUE_ON_MISSING:
+ log_file = os.path.join(bisect_dir, '_MISSING_CACHED_OBJ_LOG')
+ log_to_file(log_file, execargs, '? compiler', full_obj_path)
+ return exec_and_return(execargs)
+ else:
+ raise Error(('%s is missing from cache! To ignore export '
+ 'BISECT_CONTINUE_ON_MISSING=1. See documentation for more '
+ 'details on this option.' % full_obj_path))
+
+ cache = which_cache(full_obj_path)
+
+ # If using safe WRAPPER_SAFE_MODE option call compiler and overwrite the
+ # result from the good/bad cache. This option is safe and covers all compiler
+ # side effects, but is very slow!
+ if WRAPPER_SAFE_MODE:
+ retval = exec_and_return(execargs)
+ if retval:
+ return retval
+ os.remove(full_obj_path)
+ restore_file(bisect_dir, cache, full_obj_path)
+ return
+
+ # Generate compiler side effects. Trick Make into thinking compiler was
+ # actually executed.
+ for side_effect in get_side_effects(execargs):
+ restore_file(bisect_dir, cache, side_effect)
+
+ # If generated object file happened to be pruned/cleaned by Make then link it
+ # over from cache again.
+ if not os.path.exists(full_obj_path):
+ restore_file(bisect_dir, cache, full_obj_path)
+
+
+def bisect_driver(bisect_stage, bisect_dir, execargs):
+ """Call appropriate bisection stage according to value in bisect_stage."""
+ if bisect_stage == 'POPULATE_GOOD':
+ bisect_populate(execargs, bisect_dir, GOOD_CACHE)
+ elif bisect_stage == 'POPULATE_BAD':
+ bisect_populate(execargs, bisect_dir, BAD_CACHE)
+ elif bisect_stage == 'TRIAGE':
+ bisect_triage(execargs, bisect_dir)
+ else:
+ raise ValueError('wrong value for BISECT_STAGE: %s' % bisect_stage)
diff --git a/binary_search_tool/common.py b/binary_search_tool/common.py
new file mode 100644
index 00000000..945270be
--- /dev/null
+++ b/binary_search_tool/common.py
@@ -0,0 +1,261 @@
+"""Common config and logic for binary search tool
+
+This module serves two main purposes:
+ 1. Programatically include the utils module in PYTHONPATH
+ 2. Create the argument parsing shared between binary_search_state.py and
+ bisect.py
+
+The argument parsing is handled by populating _ArgsDict with all arguments.
+_ArgsDict is required so that binary_search_state.py and bisect.py can share
+the argument parsing, but treat them slightly differently. For example,
+bisect.py requires that all argument defaults are suppressed so that overriding
+can occur properly (i.e. only options that are explicitly entered by the user
+end up in the resultant options dictionary).
+
+ArgumentDict inherits OrderedDict in order to preserve the order the args are
+created so the help text is made properly.
+"""
+
+from __future__ import print_function
+
+import collections
+import os
+import sys
+
+# Programatically adding utils python path to PYTHONPATH
+if os.path.isabs(sys.argv[0]):
+ utils_pythonpath = os.path.abspath('{0}/..'.format(
+ os.path.dirname(sys.argv[0])))
+else:
+ wdir = os.getcwd()
+ utils_pythonpath = os.path.abspath('{0}/{1}/..'.format(wdir, os.path.dirname(
+ sys.argv[0])))
+sys.path.append(utils_pythonpath)
+
+
+class ArgumentDict(collections.OrderedDict):
+ """Wrapper around OrderedDict, represents CLI arguments for program.
+
+ AddArgument enforces the following layout:
+ {
+ ['-n', '--iterations'] : {
+ 'dest': 'iterations',
+ 'type': int,
+ 'help': 'Number of iterations to try in the search.',
+ 'default': 50
+ }
+ [arg_name1, arg_name2, ...] : {
+ arg_option1 : arg_option_val1,
+ ...
+ },
+ ...
+ }
+ """
+ _POSSIBLE_OPTIONS = ['action', 'nargs', 'const', 'default', 'type', 'choices',
+ 'required', 'help', 'metavar', 'dest']
+
+ def AddArgument(self, *args, **kwargs):
+ """Add argument to ArgsDict, has same signature as argparse.add_argument
+
+ Emulates the the argparse.add_argument method so the internal OrderedDict
+ can be safely and easily populated. Each call to this method will have a 1-1
+ corresponding call to argparse.add_argument once BuildArgParser is called.
+
+ Args:
+ *args: The names for the argument (-V, --verbose, etc.)
+ **kwargs: The options for the argument, corresponds to the args of
+ argparse.add_argument
+
+ Returns:
+ None
+
+ Raises:
+ TypeError: if args is empty or if option in kwargs is not a valid
+ option for argparse.add_argument.
+ """
+ if len(args) == 0:
+ raise TypeError('Argument needs at least one name')
+
+ for key in kwargs:
+ if key not in self._POSSIBLE_OPTIONS:
+ raise TypeError('Invalid option "%s" for argument %s' % (key, args[0]))
+
+ self[args] = kwargs
+
+
+_ArgsDict = ArgumentDict()
+
+
+def GetArgsDict():
+ """_ArgsDict singleton method"""
+ if not _ArgsDict:
+ _BuildArgsDict(_ArgsDict)
+ return _ArgsDict
+
+
+def BuildArgParser(parser, override=False):
+ """Add all arguments from singleton ArgsDict to parser.
+
+ Will take argparse parser and add all arguments in ArgsDict. Will ignore
+ the default and required options if override is set to True.
+
+ Args:
+ parser: type argparse.ArgumentParser, will call add_argument for every item
+ in _ArgsDict
+ override: True if being called from bisect.py. Used to say that default and
+ required options are to be ignored
+
+ Returns:
+ None
+ """
+ ArgsDict = GetArgsDict()
+
+ # Have no defaults when overriding
+ for arg_names, arg_options in ArgsDict.iteritems():
+ if override:
+ arg_options = arg_options.copy()
+ arg_options.pop('default', None)
+ arg_options.pop('required', None)
+
+ parser.add_argument(*arg_names, **arg_options)
+
+
+def StrToBool(str_in):
+ if str_in.lower() in ['true', 't', '1']:
+ return True
+ if str_in.lower() in ['false', 'f', '0']:
+ return False
+
+ raise AttributeError('%s is not a valid boolean string' % str_in)
+
+
+def _BuildArgsDict(args):
+ """Populate ArgumentDict with all arguments"""
+ args.AddArgument(
+ '-n',
+ '--iterations',
+ dest='iterations',
+ type=int,
+ help='Number of iterations to try in the search.',
+ default=50)
+ args.AddArgument(
+ '-i',
+ '--get_initial_items',
+ dest='get_initial_items',
+ help=('Script to run to get the initial objects. '
+ 'If your script requires user input '
+ 'the --verbose option must be used'))
+ args.AddArgument(
+ '-g',
+ '--switch_to_good',
+ dest='switch_to_good',
+ help=('Script to run to switch to good. '
+ 'If your switch script requires user input '
+ 'the --verbose option must be used'))
+ args.AddArgument(
+ '-b',
+ '--switch_to_bad',
+ dest='switch_to_bad',
+ help=('Script to run to switch to bad. '
+ 'If your switch script requires user input '
+ 'the --verbose option must be used'))
+ args.AddArgument(
+ '-I',
+ '--test_setup_script',
+ dest='test_setup_script',
+ help=('Optional script to perform building, flashing, '
+ 'and other setup before the test script runs.'))
+ args.AddArgument(
+ '-t',
+ '--test_script',
+ dest='test_script',
+ help=('Script to run to test the '
+ 'output after packages are built.'))
+ # No input (evals to False),
+ # --prune (evals to True),
+ # --prune=False,
+ # --prune=True
+ args.AddArgument(
+ '-p',
+ '--prune',
+ dest='prune',
+ nargs='?',
+ const=True,
+ default=False,
+ type=StrToBool,
+ metavar='bool',
+ help=('If True, continue until all bad items are found. '
+ 'Defaults to False.'))
+ # No input (evals to False),
+ # --noincremental (evals to True),
+ # --noincremental=False,
+ # --noincremental=True
+ args.AddArgument(
+ '-c',
+ '--noincremental',
+ dest='noincremental',
+ nargs='?',
+ const=True,
+ default=False,
+ type=StrToBool,
+ metavar='bool',
+ help=('If True, don\'t propagate good/bad changes '
+ 'incrementally. Defaults to False.'))
+ # No input (evals to False),
+ # --file_args (evals to True),
+ # --file_args=False,
+ # --file_args=True
+ args.AddArgument(
+ '-f',
+ '--file_args',
+ dest='file_args',
+ nargs='?',
+ const=True,
+ default=False,
+ type=StrToBool,
+ metavar='bool',
+ help=('Whether to use a file to pass arguments to scripts. '
+ 'Defaults to False.'))
+ # No input (evals to True),
+ # --verify (evals to True),
+ # --verify=False,
+ # --verify=True
+ args.AddArgument(
+ '--verify',
+ dest='verify',
+ nargs='?',
+ const=True,
+ default=True,
+ type=StrToBool,
+ metavar='bool',
+ help=('Whether to run verify iterations before searching. '
+ 'Defaults to True.'))
+ args.AddArgument(
+ '-N',
+ '--prune_iterations',
+ dest='prune_iterations',
+ type=int,
+ help='Number of prune iterations to try in the search.',
+ default=100)
+ # No input (evals to False),
+ # --verbose (evals to True),
+ # --verbose=False,
+ # --verbose=True
+ args.AddArgument(
+ '-V',
+ '--verbose',
+ dest='verbose',
+ nargs='?',
+ const=True,
+ default=False,
+ type=StrToBool,
+ metavar='bool',
+ help='If True, print full output to console.')
+ args.AddArgument(
+ '-r',
+ '--resume',
+ dest='resume',
+ action='store_true',
+ help=('Resume bisection tool execution from state file.'
+ 'Useful if the last bisection was terminated '
+ 'before it could properly finish.'))
diff --git a/binary_search_tool/common/boot_test.sh b/binary_search_tool/common/boot_test.sh
new file mode 100755
index 00000000..8f6d9a7d
--- /dev/null
+++ b/binary_search_tool/common/boot_test.sh
@@ -0,0 +1,22 @@
+#!/bin/bash -u
+#
+# Copyright 2016 Google Inc. All Rights Reserved.
+#
+# This script pings the chromebook to determine if it has successfully booted.
+#
+# This script is intended to be used by binary_search_state.py, as
+# part of the binary search triage on ChromeOS package and object files.
+# It waits for the test setup script to build and install the image, then pings
+# the machine. It should return '0' if the test succeeds (the image booted); '1'
+# if the test fails (the image did not boot); and '125' if it could not
+# determine (does not apply in this case).
+#
+
+source common/common.sh
+
+# Send 3 pings and wait 3 seconds for any responsed (then timeout).
+ping -c 3 -W 3 ${BISECT_REMOTE}
+retval=$?
+
+
+exit $retval
diff --git a/binary_search_tool/common/hash_test.sh b/binary_search_tool/common/hash_test.sh
new file mode 100755
index 00000000..5450988e
--- /dev/null
+++ b/binary_search_tool/common/hash_test.sh
@@ -0,0 +1,57 @@
+#!/bin/bash -u
+#
+# Copyright 2016 Google Inc. All Rights Reserved.
+#
+# This script is intended to be used by binary_search_state.py. It is to
+# be used for testing/development of the binary search triage tool
+# itself. It waits for the test setup script to build and install the
+# image, then checks the hashes in the provided file.
+# If the real hashes match the checksum hashes, then the image is 'good',
+# otherwise it is 'bad'. This allows the rest of the bisecting tool
+# to run without requiring help from the user (as it would if we were
+# dealing with a real 'bad' image).
+#
+
+#
+# Initialize the value below before using this script!!!
+#
+# Make an md5sum of all the files you want to check. For example if you want
+# file1, file2, and file3 to be found as bad items:
+#
+# md5sum file1 file2 file3 > checksum.out
+#
+# (Make sure you are hashing the files from your good build and that the hashes
+# from good to bad build differ)
+#
+# Then set HASHES_FILE to be the path to 'checksum.out'
+# In this example, file1, file2, file3 will be found as the bad files
+# because their hashes won't match when from the bad build tree. This is
+# assuming that the hashes between good/bad builds change. It is suggested to
+# build good and bad builds at different optimization levels to help ensure
+# each item has a different hash.
+#
+# WARNING:
+# Make sure paths to all files are absolute paths or relative to
+# binary_search_state.py
+#
+# cros_pkg bisector example:
+# 1. Build good packages with -O1, bad packages with -O2
+# 2. cros_pkg/switch_to_good.sh pkg1 pkg2 pkg3
+# 3. md5sum pkg1 pkg2 pkg3 > checksum.out.cros_pkg
+# 4. Set HASHES_FILE to be checksum.out.cros_pkg
+# 5. Run the bisector with this test script
+#
+#
+HASHES_FILE=
+
+if [[ -z "${HASHES_FILE}" || ! -f "${HASHES_FILE}" ]];
+then
+ echo "ERROR: HASHES_FILE must be intialized in common/hash_test.sh"
+ exit 3
+fi
+
+md5sum -c --status ${HASHES_FILE}
+md5_result=$?
+
+
+exit $md5_result
diff --git a/binary_search_tool/common/interactive_test.sh b/binary_search_tool/common/interactive_test.sh
new file mode 100755
index 00000000..8773dd12
--- /dev/null
+++ b/binary_search_tool/common/interactive_test.sh
@@ -0,0 +1,37 @@
+#!/bin/bash -u
+#
+# Copyright 2016 Google Inc. All Rights Reserved.
+#
+# This script pings the chromebook to determine if it successfully booted.
+# It then asks the user if the image is good or not, allowing the user to
+# conduct whatever tests the user wishes, and waiting for a response.
+#
+# This script is intended to be used by binary_search_state.py, as
+# part of the binary search triage on ChromeOS package and object files. It
+# waits for the test setup script to build and install the image, then asks the
+# user if the image is good or not. It should return '0' if the test succeeds
+# (the image is 'good'); '1' if the test fails (the image is 'bad'); and '125'
+# if it could not determine (does not apply in this case).
+#
+
+source common/common.sh
+
+ping -c 3 -W 3 ${BISECT_REMOTE}
+retval=$?
+
+if [[ ${retval} -eq 0 ]]; then
+ echo "ChromeOS image has been built and installed on ${BISECT_REMOTE}."
+else
+ exit 1
+fi
+
+while true; do
+ read -p "Is this a good ChromeOS image?" yn
+ case $yn in
+ [Yy]* ) exit 0;;
+ [Nn]* ) exit 1;;
+ * ) echo "Please answer yes or no.";;
+ esac
+done
+
+exit 125
diff --git a/binary_search_tool/common/test_setup.sh b/binary_search_tool/common/test_setup.sh
new file mode 100755
index 00000000..c4f5f698
--- /dev/null
+++ b/binary_search_tool/common/test_setup.sh
@@ -0,0 +1,166 @@
+#!/bin/bash
+#
+# Copyright 2016 Google Inc. All Rights Reserved.
+#
+# This is a generic ChromeOS package/image test setup script. It is meant to
+# be used for either the object file or package bisection tools. This script
+# does one of the following depending on what ${BISECT_MODE} is set to:
+#
+# 1) ${BISECT_MODE} is PACKAGE_MODE:
+# build_image is called and generates a new ChromeOS image using whatever
+# packages are currently in the build tree. This image is then pushed to the
+# remote machine using flash over ethernet (or usb flash if ethernet flash
+# fails).
+#
+# 2) ${BISECT_MODE} is OBJECT_MODE:
+# emerge is called for ${BISECT_PACKAGE} and generates a build for said
+# package. This package is then deployed to the remote machine and the machine
+# is rebooted. If deploying fails then a new ChromeOS image is built from
+# scratch and pushed to the machine like in PACKAGE_MODE.
+#
+# This script is intended to be used by binary_search_state.py, as
+# part of the binary search triage on ChromeOS objects and packages. It should
+# return '0' if the setup succeeds; and '1' if the setup fails (the image
+# could not build or be flashed).
+#
+
+export PYTHONUNBUFFERED=1
+
+source common/common.sh
+
+usb_flash()
+{
+ echo
+ echo "Insert a usb stick into the current machine"
+ echo "Note: The cros flash will take time and doesn't give much output."
+ echo " Be patient. If your usb access light is flashing it's working."
+ sleep 1
+ read -p "Press enter to continue" notused
+
+ cros flash --board=${BISECT_BOARD} --clobber-stateful usb:// ~/trunk/src/build/images/${BISECT_BOARD}/latest/chromiumos_test_image.bin
+
+ echo
+ echo "Flash to usb complete!"
+ echo "Plug the usb into your chromebook and install the image."
+ echo "Refer to the ChromiumOS Developer's Handbook for more details."
+ echo "http://www.chromium.org/chromium-os/developer-guide#TOC-Boot-from-your-USB-disk"
+ while true; do
+ sleep 1
+ read -p "Was the installation of the image successful? " choice
+ case $choice in
+ [Yy]*) return 0;;
+ [Nn]*) return 1;;
+ *) echo "Please answer y or n.";;
+ esac
+ done
+}
+
+ethernet_flash()
+{
+ echo
+ echo "Please ensure your Chromebook is up and running Chrome so"
+ echo "cros flash may run."
+ echo "If your Chromebook has a broken image you can try:"
+ echo "1. Rebooting your Chromebook 6 times to install the last working image"
+ echo "2. Alternatively, running the following command on the Chromebook"
+ echo " will also rollback to the last working image:"
+ echo " 'update_engine_client --rollback --nopowerwash --reboot'"
+ echo "3. Flashing a new image through USB"
+ echo
+ sleep 1
+ read -p $'Press enter to continue and retry the ethernet flash' notused
+ cros flash --board=${BISECT_BOARD} --clobber-stateful ${BISECT_REMOTE} ~/trunk/src/build/images/${BISECT_BOARD}/latest/chromiumos_test_image.bin
+}
+
+reboot()
+{
+ ret_val=0
+ pushd ~/trunk/src/scripts > /dev/null
+ set -- --remote=${BISECT_REMOTE}
+ . ./common.sh || ret_val=1
+ . ./remote_access.sh || ret_val=1
+ TMP=$(mktemp -d)
+ FLAGS "$@" || ret_val=1
+ remote_access_init || ret_val=1
+ remote_reboot || ret_val=1
+ popd > /dev/null
+
+ return $ret_val
+}
+
+echo
+echo "INSTALLATION BEGIN"
+echo
+
+if [[ "${BISECT_MODE}" == "OBJECT_MODE" ]]; then
+ echo "EMERGING ${BISECT_PACKAGE}"
+ CLEAN_DELAY=0 emerge-${BISECT_BOARD} -C ${BISECT_PACKAGE}
+ emerge-${BISECT_BOARD} ${BISECT_PACKAGE}
+ emerge_status=$?
+
+ if [[ ${emerge_status} -ne 0 ]] ; then
+ echo "emerging ${BISECT_PACKAGE} returned a non-zero status: $emerge_status"
+ exit 1
+ fi
+
+ echo
+ echo "DEPLOYING"
+ echo "cros deploy ${BISECT_REMOTE} ${BISECT_PACKAGE}"
+ cros deploy ${BISECT_REMOTE} ${BISECT_PACKAGE} --log-level=info
+ deploy_status=$?
+
+ if [[ ${deploy_status} -eq 0 ]] ; then
+ echo "Deploy successful. Rebooting device..."
+ reboot
+ if [[ $? -ne 0 ]] ; then
+ echo
+ echo "Could not automatically reboot device!"
+ read -p "Please manually reboot device and press enter to continue" notused
+ fi
+ exit 0
+ fi
+
+ echo "Deploy failed! Trying build_image/cros flash instead..."
+ echo
+fi
+
+echo "BUILDING IMAGE"
+pushd ~/trunk/src/scripts
+./build_image test --board=${BISECT_BOARD} --noenable_rootfs_verification --noeclean
+build_status=$?
+popd
+
+if [[ ${build_status} -eq 0 ]] ; then
+ echo
+ echo "FLASHING"
+ echo "Pushing built image onto device."
+ echo "cros flash --board=${BISECT_BOARD} --clobber-stateful ${BISECT_REMOTE} ~/trunk/src/build/images/${BISECT_BOARD}/latest/chromiumos_test_image.bin"
+ cros flash --board=${BISECT_BOARD} --clobber-stateful ${BISECT_REMOTE} ~/trunk/src/build/images/${BISECT_BOARD}/latest/chromiumos_test_image.bin
+ cros_flash_status=$?
+ while [[ ${cros_flash_status} -ne 0 ]] ; do
+ while true; do
+ echo
+ echo "cros flash has failed! From here you can:"
+ echo "1. Flash through USB"
+ echo "2. Retry flashing over ethernet"
+ echo "3. Abort this installation and skip this image"
+ echo "4. Abort this installation and mark test as failed"
+ sleep 1
+ read -p "Which method would you like to do? " choice
+ case $choice in
+ 1) usb_flash && break;;
+ 2) ethernet_flash && break;;
+ 3) exit 125;;
+ 4) exit 1;;
+ *) echo "Please answer 1, 2, 3, or 4.";;
+ esac
+ done
+
+ cros_flash_status=$?
+ done
+else
+ echo "build_image returned a non-zero status: ${build_status}"
+ exit 1
+fi
+
+exit 0
diff --git a/binary_search_tool/compiler_wrapper.py b/binary_search_tool/compiler_wrapper.py
new file mode 100755
index 00000000..3d6403a2
--- /dev/null
+++ b/binary_search_tool/compiler_wrapper.py
@@ -0,0 +1,63 @@
+#!/usr/bin/python2
+"""Prototype compiler wrapper.
+
+Only tested with: gcc, g++, clang, clang++
+Installation instructions:
+ 1. Rename compiler from <compiler_name> to <compiler_name>.real
+ 2. Create symlink from this script (compiler_wrapper.py), and name it
+ <compiler_name>. compiler_wrapper.py can live anywhere as long as it is
+ executable.
+
+Reference page:
+https://sites.google.com/a/google.com/chromeos-toolchain-team-home2/home/team-tools-and-scripts/bisecting-chromeos-compiler-problems/bisection-compiler-wrapper
+
+Design doc:
+https://docs.google.com/document/d/1yDgaUIa2O5w6dc3sSTe1ry-1ehKajTGJGQCbyn0fcEM
+"""
+
+from __future__ import print_function
+
+import os
+import shlex
+import sys
+
+import bisect_driver
+
+WRAPPED = '%s.real' % sys.argv[0]
+BISECT_STAGE = os.environ.get('BISECT_STAGE')
+DEFAULT_BISECT_DIR = os.path.expanduser('~/ANDROID_BISECT')
+BISECT_DIR = os.environ.get('BISECT_DIR') or DEFAULT_BISECT_DIR
+
+
+def ProcessArgFile(arg_file):
+ args = []
+ # Read in entire file at once and parse as if in shell
+ with open(arg_file, 'rb') as f:
+ args.extend(shlex.split(f.read()))
+
+ return args
+
+
+def Main(_):
+ if not os.path.islink(sys.argv[0]):
+ print("Compiler wrapper can't be called directly!")
+ return 1
+
+ execargs = [WRAPPED] + sys.argv[1:]
+
+ if BISECT_STAGE not in bisect_driver.VALID_MODES or '-o' not in execargs:
+ os.execv(WRAPPED, [WRAPPED] + sys.argv[1:])
+
+ # Handle @file argument syntax with compiler
+ for idx, _ in enumerate(execargs):
+ # @file can be nested in other @file arguments, use While to re-evaluate
+ # the first argument of the embedded file.
+ while execargs[idx][0] == '@':
+ args_in_file = ProcessArgFile(execargs[idx][1:])
+ execargs = execargs[0:idx] + args_in_file + execargs[idx + 1:]
+
+ bisect_driver.bisect_driver(BISECT_STAGE, BISECT_DIR, execargs)
+
+
+if __name__ == '__main__':
+ sys.exit(Main(sys.argv[1:]))
diff --git a/binary_search_tool/cros_pkg/README.cros_pkg_triage b/binary_search_tool/cros_pkg/README.cros_pkg_triage
new file mode 100644
index 00000000..5e285008
--- /dev/null
+++ b/binary_search_tool/cros_pkg/README.cros_pkg_triage
@@ -0,0 +1,185 @@
+
+binary_search_state.py is a general binary search triage tool that
+performs a binary search on a set of things to try to identify which
+thing or thing(s) in the set is 'bad'. binary_search_state.py assumes
+that the user has two sets, one where everything is known to be good,
+ane one which contains at least one bad item. binary_search_state.py
+then copies items from the good and bad sets into a working set and
+tests the result (good or bad). binary_search_state.py requires that
+a set of scripts be supplied to it for any particular job. For more
+information on binary_search_state.py, see
+
+https://sites.google.com/a/google.com/chromeos-toolchain-team-home2/home/team-tools-and-scripts/binary-searcher-tool-for-triage
+
+This particular set of scripts is designed to work wtih
+binary_search_state.py in order to find the bad package or set of
+packages in a ChromeOS build.
+
+
+QUICKSTART:
+
+After setting up your 3 build trees (see Prerequisites section), do the
+following:
+
+ - Decide which test script to use (boot_test.sh or
+ interactive_test.sh)
+ - Get the IP name or address of the chromebook you will use for testing.
+ - Do the following inside your chroot:
+
+ $ cd ~/trunk/src/third_party/toolchain_utils/binary_search_tool
+ $ ./cros_pkg/setup.sh <board-to-test> <IP-name-or-address-of-chromebook>
+
+ If you chose the boot test, then:
+
+ $ python ./binary_search_state.py \
+ --get_initial_items=cros_pkg/get_initial_items.sh \
+ --switch_to_good=cros_pkg/switch_to_good.sh \
+ --switch_to_bad=cros_pkg/switch_to_bad.sh \
+ --test_setup_script=cros_pkg/test_setup.sh \
+ --test_script=cros_pkg/boot_test.sh \
+ --file_args \
+ --prune
+
+ Otherwise, if you chose the interactive test, then:
+
+ $ python ./binary_search_state.py \
+ --get_initial_items=cros_pkg/get_initial_items.sh \
+ --switch_to_good=cros_pkg/switch_to_good.sh \
+ --switch_to_bad=cros_pkg/switch_to_bad.sh \
+ --test_setup_script=cros_pkg/test_setup.sh \
+ --test_script=cros_pkg/interactive_test.sh \
+ --file_args \
+ --prune
+
+ Once you have completely finished doing the binary search/triage,
+ run the genereated cleanup script, to restore your chroot to the state
+ it was in before you ran the setup.sh script:
+
+ $ cros_pkg/${BOARD}_cleanup.sh
+
+
+
+FILES AND SCRIPTS:
+
+ boot_test.sh - One of two possible test scripts used to determine
+ if the ChromeOS image built from the packages is good
+ or bad. This script tests to see if the image
+ booted, and requires no user intervention.
+
+ create_cleanup_script.py - This is called by setup.sh, to
+ generate ${BOARD}_cleanup.sh,
+ which is supposed to be run by the user
+ after the binary search triage process is
+ finished, to undo the changes made by
+ setup.sh and return everything
+ to its original state.
+
+ get_initial_items.sh - This script is used to determine the current
+ set of ChromeOS packages.
+
+ test_setup.sh - This script will build and flash your image to the
+ remote machine. If the flash fails, this script will
+ help the user troubleshoot by flashing through usb or
+ by retrying the flash over ethernet.
+
+ interactive_test.sh - One of two possible scripts used to determine
+ if the ChromeOS image built from the packages
+ is good or bad. This script requires user
+ interaction to determine if the image is
+ good or bad.
+
+ setup.sh - This is the first script the user should call, after
+ taking care of the prerequisites. It sets up the
+ environment appropriately for running the ChromeOS
+ package binary search triage, and it generates two
+ necessary scripts (see below).
+
+ switch_to_bad.sh - This script is used to copy packages from the
+ 'bad' build tree into the work area.
+
+ switch_to_good.sh - This script is used to copy packages from the
+ good' build tree into the work area.
+
+
+GENERATED SCRIPTS:
+
+ common.sh - contains basic environment variable definitions for
+ this binary search triage session.
+
+ ${BOARD}_cleanup.sh - script to undo all the changes made by
+ running setup.sh, and returning
+ everything to its original state. The user
+ should manually run this script once the
+ binary search triage process is over.
+
+ASSUMPTIONS:
+
+- There are two different ChromeOS builds, for the same board, with the
+ same set of ChromeOS packages. One build creates a good working ChromeOS
+ image and the other does not.
+
+- You have saved the complete build trees for both the good and bad builds.
+
+
+PREREQUISITES FOR USING THESE SCRIPTS (inside the chroot):
+
+- The "good" build tree, for the board, is in /build/${board}.good
+ (e.g. /build/lumpy.good or /build/daisy.good).
+
+- The "bad" build tree is in /build/${board}.bad
+ (e.g. /build/lumpy.bad or /build/daisy.bad).
+
+- You made a complete copy of the "bad" build tree , and put it in
+ /build/${board}.work (e.g. /build/lumpy.work or /build/daisy.work.
+ The easiest way to do this is to use something similar to the
+ following set of commands (this example assumes the board is
+ 'lumpy'):
+
+ $ cd /build
+ $ sudo tar -cvf lumpy.bad.tar lumpy.bad
+ $ sudo mv lumpy.bad lumpy.work
+ $ sudo tar -xvf lumpy.bad.tar
+
+
+USING THESE SCRIPTS FOR BINARY TRIAGE OF PACKAGES:
+
+To use these scripts, you must first run setup.sh, passing it two
+arguments (in order): the board for which you are building the image;
+and the name or ip address of the chromebook you want to use for
+testing your chromeos images. setup.sh will do the following:
+
+ - Verify that your build trees are set up correctly (with good, bad
+ and work).
+ - Create a soft link for /build/${board} pointing to the work build
+ tree.
+ - Create the common.sh file that the other scripts passed to the
+ binary triage tool will need.
+ - Create a cleanup script, ${board}_cleanup.sh, for you to
+ run after you are done with the binary triages, to undo all of these
+ various changes that setup.sh did.
+
+
+This set of scripts comes with two alternate test scripts. One test
+script, boot_test.sh, just checks to make sure that the image
+booted (i.e. responds to ping) and assumes that is enough. The other
+test script, interactive_test.sh, is interactive and asks YOU
+to tell it whether the image on the chromebook is ok or not (it
+prompts you and waits for a response).
+
+
+Once you have run setup.sh (and decided which test script you
+want to use) run the binary triage tool using these scripts to
+isolate/identify the bad package:
+
+~/trunk/src/third_party/toolchain_utils/binary_search_tool/binary_search_state.py \
+ --get_initial_items=cros_pkg/get_initial_items.sh \
+ --switch_to_good=cros_pkg/switch_to_good.sh \
+ --switch_to_bad=cros_pkg/switch_to_bad.sh \
+ --test_setup_script=cros_pkg/test_setup.sh \
+ --test_script=cros_pkg/boots_test.sh \ # could use interactive_test.sh instead
+ --prune
+
+
+After you have finished running the tool and have identified the bad
+package(s), you will want to run the cleanup script that setup.sh
+generated (cros_pkg/${BOARD}_cleanup.sh).
diff --git a/binary_search_tool/cros_pkg/boot_test.sh b/binary_search_tool/cros_pkg/boot_test.sh
new file mode 120000
index 00000000..9a345617
--- /dev/null
+++ b/binary_search_tool/cros_pkg/boot_test.sh
@@ -0,0 +1 @@
+../common/boot_test.sh \ No newline at end of file
diff --git a/binary_search_tool/cros_pkg/create_cleanup_script.py b/binary_search_tool/cros_pkg/create_cleanup_script.py
new file mode 100755
index 00000000..32a1f160
--- /dev/null
+++ b/binary_search_tool/cros_pkg/create_cleanup_script.py
@@ -0,0 +1,114 @@
+#!/usr/bin/python2
+#
+# Copyright 2015 Google Inc. All Rights Reserved
+"""The script to generate a cleanup script after setup.sh.
+
+This script takes a set of flags, telling it what setup.sh changed
+during the set up process. Based on the values of the input flags, it
+generates a cleanup script, named ${BOARD}_cleanup.sh, which will
+undo the changes made by setup.sh, returning everything to its
+original state.
+"""
+
+from __future__ import print_function
+
+import argparse
+import sys
+
+
+def Usage(parser, msg):
+ print('ERROR: ' + msg)
+ parser.print_help()
+ sys.exit(1)
+
+
+def Main(argv):
+ """Generate a script to undo changes done by setup.sh
+
+ The script setup.sh makes a change that needs to be
+ undone, namely it creates a soft link making /build/${board} point
+ to /build/${board}.work. To do this, it had to see if
+ /build/${board} already existed, and if so, whether it was a real
+ tree or a soft link. If it was soft link, it saved the old value
+ of the link, then deleted it and created the new link. If it was
+ a real tree, it renamed the tree to /build/${board}.save, and then
+ created the new soft link. If the /build/${board} did not
+ previously exist, then it just created the new soft link.
+
+ This function takes arguments that tell it exactly what setup.sh
+ actually did, then generates a script to undo those exact changes.
+ """
+
+ parser = argparse.ArgumentParser()
+ parser.add_argument(
+ '--board',
+ dest='board',
+ required=True,
+ help='Chromeos board for packages/image.')
+
+ parser.add_argument(
+ '--old_tree_missing',
+ dest='tree_existed',
+ action='store_false',
+ help='Did /build/${BOARD} exist.',
+ default=True)
+
+ parser.add_argument(
+ '--renamed_tree',
+ dest='renamed_tree',
+ action='store_true',
+ help='Was /build/${BOARD} saved & renamed.',
+ default=False)
+
+ parser.add_argument(
+ '--old_link',
+ dest='old_link',
+ help=('The original build tree soft link.'))
+
+ options = parser.parse_args(argv[1:])
+
+ if options.old_link or options.renamed_tree:
+ if not options.tree_existed:
+ Usage(parser, 'If --tree_existed is False, cannot have '
+ '--renamed_tree or --old_link')
+
+ if options.old_link and options.renamed_tree:
+ Usage(parser, '--old_link and --renamed_tree are incompatible options.')
+
+ if options.tree_existed:
+ if not options.old_link and not options.renamed_tree:
+ Usage(parser, 'If --tree_existed is True, then must have either '
+ '--old_link or --renamed_tree')
+
+ out_filename = 'cros_pkg/' + options.board + '_cleanup.sh'
+
+ with open(out_filename, 'w') as out_file:
+ out_file.write('#!/bin/bash\n\n')
+ # First, remove the 'new' soft link.
+ out_file.write('sudo rm /build/%s\n' % options.board)
+ if options.tree_existed:
+ if options.renamed_tree:
+ # Old build tree existed and was a real tree, so it got
+ # renamed. Move the renamed tree back to the original tree.
+ out_file.write('sudo mv /build/%s.save /build/%s\n' %
+ (options.board, options.board))
+ else:
+ # Old tree existed and was already a soft link. Re-create the
+ # original soft link.
+ original_link = options.old_link
+ if original_link[0] == "'":
+ original_link = original_link[1:]
+ if original_link[-1] == "'":
+ original_link = original_link[:-1]
+ out_file.write('sudo ln -s %s /build/%s\n' % (original_link,
+ options.board))
+ out_file.write('\n')
+ # Remove common.sh file
+ out_file.write('rm common/common.sh\n')
+
+ return 0
+
+
+if __name__ == '__main__':
+ retval = Main(sys.argv)
+ sys.exit(retval)
diff --git a/binary_search_tool/cros_pkg/get_initial_items.sh b/binary_search_tool/cros_pkg/get_initial_items.sh
new file mode 100755
index 00000000..49ca3d18
--- /dev/null
+++ b/binary_search_tool/cros_pkg/get_initial_items.sh
@@ -0,0 +1,16 @@
+#!/bin/bash -u
+#
+# Copyright 2015 Google Inc. All Rights Reserved.
+#
+# This script is intended to be used by binary_search_state.py, as
+# part of the binary search triage on ChromeOS packages. This script
+# generates the list of current ChromeOS packages, that is then used
+# for doing the binary search.
+#
+
+source common/common.sh
+
+cd ${GOOD_BUILD}/packages
+find . -name "*.tbz2"
+
+
diff --git a/binary_search_tool/cros_pkg/interactive_test.sh b/binary_search_tool/cros_pkg/interactive_test.sh
new file mode 120000
index 00000000..18fe3958
--- /dev/null
+++ b/binary_search_tool/cros_pkg/interactive_test.sh
@@ -0,0 +1 @@
+../common/interactive_test.sh \ No newline at end of file
diff --git a/binary_search_tool/cros_pkg/setup.sh b/binary_search_tool/cros_pkg/setup.sh
new file mode 100755
index 00000000..ae31fa82
--- /dev/null
+++ b/binary_search_tool/cros_pkg/setup.sh
@@ -0,0 +1,123 @@
+#!/bin/bash -u
+#
+# Copyright 2015 Google Inc. All Rights Reserved.
+#
+# This script is part of the ChromeOS package binary search triage process.
+# It should be the first script called by the user, after the user has set up
+# the three necessary build tree directories (see the prerequisites section of
+# README.cros_pkg_triage).
+#
+# This script requires two arguments. The first argument must be the name of
+# the board for which this work is being done (e.g. 'daisy', 'lumpy','parrot',
+# etc.). The second argument must be the name or IP address of the chromebook
+# on which the ChromeOS images will be pushed and tested.
+#
+# This script sets up a soft link definining /build/${board} to point
+# to the working build tree, for the binary search triags process. In
+# addition, this script generates two other scripts, common.sh,
+# which generates enviroment variables used by the other scripts in the
+# package binary search triage process; and ${board}_cleanup.sh,
+# which undoes the various changes that this script performs, returning the
+# user's environment to its original state.
+#
+
+# Set up basic variables.
+
+BOARD=$1
+REMOTE=$2
+
+GOOD_BUILD=/build/${BOARD}.good
+BAD_BUILD=/build/${BOARD}.bad
+WORK_BUILD=/build/${BOARD}.work
+
+#
+# Verify that the necessary directories exist.
+#
+
+if [[ ! -d ${GOOD_BUILD} ]] ; then
+ echo "Error: ${GOOD_BUILD} does not exist."
+ exit 1
+fi
+
+if [[ ! -d ${BAD_BUILD} ]] ; then
+ echo "Error: ${BAD_BUILD} does not exist."
+ exit 1
+fi
+
+if [[ ! -d ${WORK_BUILD} ]] ; then
+ echo "Error: ${WORK_BUILD} does not exist."
+ exit 1
+fi
+
+#
+# Check to see if /build/${BOARD} already exists and if so, in what state.
+# Set appropriate flags & values, in order to be able to undo these changes
+# in ${board}_cleanup.sh. If it's a soft link, remove it; if it's a
+# read tree, rename it.
+#
+
+build_tree_existed=0
+build_tree_was_soft_link=0
+build_tree_renamed=0
+build_tree_link=""
+
+if [[ -d "/build/${BOARD}" ]] ; then
+ build_tree_existed=1
+ if [[ -L "/build/${BOARD}" ]] ; then
+ build_tree_was_soft_link=1
+ build_tree_link=`readlink /build/${BOARD}`
+ sudo rm /build/${BOARD}
+ else
+ build_tree_renamed=1
+ sudo mv /build/${BOARD} /build/${BOARD}.save
+ fi
+fi
+
+# Make "working' tree the default board tree (set up soft link)
+
+sudo ln -s /build/${BOARD}.work /build/${BOARD}
+
+#
+# Create common.sh file, containing appropriate environment variables.
+#
+
+COMMON_FILE="common/common.sh"
+
+cat <<-EOF > ${COMMON_FILE}
+
+BISECT_BOARD=${BOARD}
+BISECT_REMOTE=${REMOTE}
+BISECT_MODE="PACKAGE_MODE"
+
+GOOD_BUILD=/build/${BOARD}.good
+BAD_BUILD=/build/${BOARD}.bad
+WORK_BUILD=/build/${BOARD}.work
+
+EOF
+
+chmod 755 ${COMMON_FILE}
+
+#
+# Create clean-up script, calling create_cleanup_script.py with
+# the appropriate flags.
+#
+
+if [[ ${build_tree_existed} -eq 0 ]] ; then
+
+ python cros_pkg/create_cleanup_script.py --board=${BOARD} \
+ --old_tree_missing
+
+elif [[ ${build_tree_was_soft_link} -eq 0 ]] ; then
+
+ python cros_pkg/create_cleanup_script.py --board=${BOARD} \
+ --renamed_tree
+
+else
+
+ python cros_pkg/create_cleanup_script.py --board=${BOARD} \
+ --old_link="'${build_tree_link}'"
+fi
+
+chmod 755 cros_pkg/${BOARD}_cleanup.sh
+
+exit 0
diff --git a/binary_search_tool/cros_pkg/switch_to_bad.sh b/binary_search_tool/cros_pkg/switch_to_bad.sh
new file mode 100755
index 00000000..126425f4
--- /dev/null
+++ b/binary_search_tool/cros_pkg/switch_to_bad.sh
@@ -0,0 +1,46 @@
+#!/bin/bash -u
+#
+# Copyright 2015 Google Inc. All Rights Reserved.
+#
+# This script is intended to be used by binary_search_state.py, as
+# part of the binary search triage on ChromeOS packages. This script
+# copies a list of packages from the 'bad' build tree into the working
+# build tree, for testing.
+#
+
+source common/common.sh
+
+pushd ${WORK_BUILD}
+
+PKG_LIST_FILE=$1
+
+overall_status=0
+
+if [[ -f ${PKG_LIST_FILE} ]] ; then
+
+ # Read every line, and handle case where last line has no newline
+ while read pkg || [[ -n "$pkg" ]];
+ do
+ sudo cp ${BAD_BUILD}/packages/$pkg ${WORK_BUILD}/packages/$pkg
+ status=$?
+ if [[ ${status} -ne 0 ]] ; then
+ echo "Failed to copy ${pkg} to work build tree."
+ overall_status=2
+ fi
+ done < ${PKG_LIST_FILE}
+else
+
+ for o in "$@"
+ do
+ sudo cp ${BAD_BUILD}/packages/$o ${WORK_BUILD}/packages/$o
+ status=$?
+ if [[ ${status} -ne 0 ]] ; then
+ echo "Failed to copy ${pkg} to work build tree."
+ overall_status=2
+ fi
+ done
+fi
+
+popd
+
+exit ${overall_status}
diff --git a/binary_search_tool/cros_pkg/switch_to_good.sh b/binary_search_tool/cros_pkg/switch_to_good.sh
new file mode 100755
index 00000000..a9095e99
--- /dev/null
+++ b/binary_search_tool/cros_pkg/switch_to_good.sh
@@ -0,0 +1,46 @@
+#!/bin/bash -u
+#
+# Copyright 2015 Google Inc. All Rights Reserved.
+#
+# This script is intended to be used by binary_search_state.py, as
+# part of the binary search triage on ChromeOS packages. This script
+# copies a list of packages from the 'good' build tree into the working
+# build tree, for testing.
+#
+
+source common/common.sh
+
+pushd ${WORK_BUILD}
+
+PKG_LIST_FILE=$1
+
+overall_status=0
+
+if [[ -f ${PKG_LIST_FILE} ]] ; then
+
+ # Read every line, and handle case where last line has no newline
+ while read pkg || [[ -n "$pkg" ]];
+ do
+ sudo cp ${GOOD_BUILD}/packages/$pkg ${WORK_BUILD}/packages/$pkg
+ status=$?
+ if [[ ${status} -ne 0 ]] ; then
+ echo "Failed to copy ${pkg} to work build tree."
+ overall_status=2
+ fi
+ done < ${PKG_LIST_FILE}
+else
+
+ for o in "$@"
+ do
+ sudo cp ${GOOD_BUILD}/packages/$o ${WORK_BUILD}/packages/$o
+ status=$?
+ if [[ ${status} -ne 0 ]] ; then
+ echo "Failed to copy ${pkg} to work build tree."
+ overall_status=2
+ fi
+ done
+fi
+
+popd
+
+exit ${overall_status}
diff --git a/binary_search_tool/cros_pkg/test_setup.sh b/binary_search_tool/cros_pkg/test_setup.sh
new file mode 120000
index 00000000..39e715f6
--- /dev/null
+++ b/binary_search_tool/cros_pkg/test_setup.sh
@@ -0,0 +1 @@
+../common/test_setup.sh \ No newline at end of file
diff --git a/binary_search_tool/ndk/DO_BISECTION.sh b/binary_search_tool/ndk/DO_BISECTION.sh
new file mode 100755
index 00000000..298d5747
--- /dev/null
+++ b/binary_search_tool/ndk/DO_BISECTION.sh
@@ -0,0 +1,92 @@
+#!/bin/bash
+#
+# Copyright 2016 Google Inc. All Rights Reserved.
+#
+# This is an example script to show users the steps for bisecting an NDK
+# application for Android. Our example is the Teapot app that comes bundled with
+# the NDK as a sample app.
+#
+# Our Teapot app only has 12 or so object files generated per build. Bisection
+# for just 12 object files is overkill, but this bisection process easily scales
+# to thousands of object files (as seen with the Android source).
+#
+# Setup:
+# 1. Install NDK (make sure it is in your PATH)
+# 2. Install compiler_wrapper.py
+# 3. Connect an arm7 device (tested with Nexus 5X)
+# a. See README for supporting other device archs
+#
+# Tested in bash on Linux.
+
+# Set CWD to where this script lives
+pushd "$(dirname "$0")"
+
+# If Teapot dir already exists remove it.
+if [[ -d Teapot ]]; then
+ rm -rf Teapot
+fi
+
+# Unzip our repository we'll be testing with.
+tar -xzf Teapot.tar.gz
+
+# Apply small setup patch. This patch makes a small change to the build system
+# to make this bisecting example a little easier. It inserts the option to only
+# build for an arm7. See the patch file for details.
+# (This patch file was generated with git, -p1 will remove the a/ and b/)
+patch -p1 -i PATCH1
+
+# We want all of our cached files to be stored in ~/NDK_EXAMPLE_BISECT
+# Remove directory if already exists
+export BISECT_DIR=~/NDK_EXAMPLE_BISECT
+if [[ -d ${BISECT_DIR} ]]; then
+ rm -rf ${BISECT_DIR}
+fi
+
+# We will now take our normal "good compiler" and do a full build of the app. We
+# need to clean before building. This ensures that all objects are generated and
+# can be cached.
+pushd Teapot
+export BISECT_STAGE=POPULATE_GOOD
+./gradlew clean
+./gradlew installArm7Debug
+popd
+
+# Inserting "compiler error". Really this is just a patch that inserts a simple
+# error in the code, but this is used to simulate our compiler error. This patch
+# will simply cause the app to crash as soon as it starts. See the patch file
+# for details.
+# (This patch file was generated with git, -p1 will remove the a/ and b/)
+patch -p1 -i PATCH2
+
+# Now that we have installed our bad compiler (i.e. applied the above patch that
+# acts like a compiler error), we want to enumerate and cache all objects
+# generated by this "bad compiler". So again, we clean the build tree so that
+# all objects are regenerated and can be cached.
+pushd Teapot
+export BISECT_STAGE=POPULATE_BAD
+./gradlew clean
+./gradlew installArm7Debug
+popd
+
+# Now ~/NDK_EXAMPLE_BISECT holds the caches for both good and bad compiler
+# outputs. We will now use these to bisect our problem. We should find that
+# TeapotRenderer.o is the bad file (because this is where PATCH2 inserted the
+# "compiler error").
+
+# Tell the compiler wrapper to not cache outputs, and instead begin bisecting.
+export BISECT_STAGE=TRIAGE
+
+# Run the actual bisection tool. This will automatically narrow down which
+# object file has the error. The test_setup.sh script will rebuild our app
+# with gradle, and boot_test.sh will ping the device to see if the app crashed
+# or not.
+cd ..
+./binary_search_state.py \
+ --get_initial_items=ndk/get_initial_items.sh \
+ --switch_to_good=ndk/switch_to_good.sh \
+ --switch_to_bad=ndk/switch_to_bad.sh \
+ --test_setup_script=ndk/test_setup.sh \
+ --test_script=ndk/boot_test.sh \
+ --file_args
+
+popd
diff --git a/binary_search_tool/ndk/PATCH1 b/binary_search_tool/ndk/PATCH1
new file mode 100644
index 00000000..eddf61cf
--- /dev/null
+++ b/binary_search_tool/ndk/PATCH1
@@ -0,0 +1,40 @@
+From 93395bf49f856abac5ab06d4bcaa7cdbf76a77fc Mon Sep 17 00:00:00 2001
+From: Cassidy Burden <cburden@google.com>
+Date: Tue, 9 Aug 2016 09:38:41 -0700
+Subject: [PATCH] FOR BINARY SEARCH TOOL: Add arm7 target
+
+Add arm7 target to build.gradle file. This is so the bisection tool only
+has to triage the object files generated for our specific device.
+Without this target we would have to binary search across object files
+meant for x86 targets (that we can't even test on our ARM device).
+---
+ Teapot/app/build.gradle | 7 ++++++-
+ 1 file changed, 6 insertions(+), 1 deletion(-)
+
+diff --git a/Teapot/app/build.gradle b/Teapot/app/build.gradle
+index 78cf54d..c322114 100644
+--- a/Teapot/app/build.gradle
++++ b/Teapot/app/build.gradle
+@@ -29,7 +29,7 @@ model {
+ cppFlags.addAll(['-I' + "${ndkDir}/sources/android/cpufeatures",
+ '-I' + file('src/main/jni/ndk_helper')])
+ cppFlags.addAll(['-std=c++11', '-Wall',
+- '-fno-exceptions', '-fno-rtti'])
++ '-fno-exceptions', '-fno-rtti', '-gsplit-dwarf'])
+ ldLibs.addAll(['android', 'log', 'EGL', 'GLESv2','atomic'])
+ }
+ sources {
+@@ -51,5 +51,10 @@ model {
+ proguardFiles.add(file('proguard-rules.txt'))
+ }
+ }
++ productFlavors{
++ create("arm7") {
++ ndk.abiFilters.add("armeabi-v7a")
++ }
++ }
+ }
+ }
+--
+2.8.0.rc3.226.g39d4020
+
diff --git a/binary_search_tool/ndk/PATCH2 b/binary_search_tool/ndk/PATCH2
new file mode 100644
index 00000000..9fcf45d0
--- /dev/null
+++ b/binary_search_tool/ndk/PATCH2
@@ -0,0 +1,34 @@
+From 960134fb87a194595f2a0a36290be7961e12b946 Mon Sep 17 00:00:00 2001
+From: Cassidy Burden <cburden@google.com>
+Date: Tue, 9 Aug 2016 09:46:27 -0700
+Subject: [PATCH] FOR BISECTION TOOL: Insert error
+
+Insert error into code that will cause crash. This is the "compiler
+error" that we will be triaging. We will be pretending the compiler
+mistakenly inserted a nullptr where it shouldn't have.
+
+This error causes the app to immediately crash upon starting. This makes
+it very easy to automatically test the app through adb. Not all compiler
+problems will be this easy to test, and may require manual testing from
+you (the user). See android/interactive_test.sh for an example on
+manual testing from the user.
+---
+ Teapot/app/src/main/jni/TeapotRenderer.cpp | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/Teapot/app/src/main/jni/TeapotRenderer.cpp b/Teapot/app/src/main/jni/TeapotRenderer.cpp
+index 7cafdb3..75cadbf 100644
+--- a/Teapot/app/src/main/jni/TeapotRenderer.cpp
++++ b/Teapot/app/src/main/jni/TeapotRenderer.cpp
+@@ -58,7 +58,7 @@ void TeapotRenderer::Init() {
+ num_vertices_ = sizeof(teapotPositions) / sizeof(teapotPositions[0]) / 3;
+ int32_t stride = sizeof(TEAPOT_VERTEX);
+ int32_t index = 0;
+- TEAPOT_VERTEX* p = new TEAPOT_VERTEX[num_vertices_];
++ TEAPOT_VERTEX* p = nullptr; //new TEAPOT_VERTEX[num_vertices_];
+ for (int32_t i = 0; i < num_vertices_; ++i) {
+ p[i].pos[0] = teapotPositions[index];
+ p[i].pos[1] = teapotPositions[index + 1];
+--
+2.8.0.rc3.226.g39d4020
+
diff --git a/binary_search_tool/ndk/README b/binary_search_tool/ndk/README
new file mode 100644
index 00000000..324d1391
--- /dev/null
+++ b/binary_search_tool/ndk/README
@@ -0,0 +1,84 @@
+
+This is an example bisection for an NDK build system. This example specifically
+bisects the sample NDK Teapot app. All steps (setup and otherwise) for bisection
+can be found in DO_BISECTION.sh. This shell script is meant to show the process
+required to bisect a compiler problem in an arbitrary NDK app build system.
+
+There are three necessary setup steps to run this example:
+
+ 1. Install the NDK (known to work with r12b)
+ a. See here for NDK: https://developer.android.com/ndk/index.html
+ b. Go here for older NDK downloads: https://github.com/android-ndk/ndk/wiki
+
+ 2. Install the compiler wrapper provided with this repo. See
+ compiler_wrapper.py for more details.
+ a. Essentially you must go into the NDK source (or where you build system
+ stores its toolchain), rename your compilers to <compiler>.real, and
+ create a symlink pointing to compiler_wrapper.py named <compiler>
+ (where your compiler used to be).
+ b. If you're using the toolchains that come with the NDK they live at:
+ <ndk_path>/toolchains/<arch>/prebuilt/<host>/bin
+ example:
+ <ndk_path>/toolchains/llvm/prebuilt/linux-x86_64/bin/clang
+
+ 3. Plug in an Arm7 compatible Android device with usb debugging enabled.
+ a. This bisection example was tested with a Nexus 5X
+ b. It should be relatively simple to change the example to work with other
+ types of devices. Just change the scripts, and change PATCH1 to use a
+ different build flavor (like x86). See below for more details.
+
+This example contains two patches:
+
+ PATCH1 - This is the necessary changes to the build system to make the
+ bisection easier. More specifically, it adds an arm7 build flavor to gradle.
+ By default, this project will build objects for all possible architectures and
+ package them into one big apk. These object files meant for another
+ architecture just sit there and don't actually execute. By adding a build
+ flavor for arm7, our compiler wrapper won't try to bisect object files meant
+ for another device.
+
+ PATCH2 - This patch is what inserts the "compiler error". This is a simple
+ nullptr error in one of the source files, but it is meant to mimic bad code
+ generation. The result of the error is the app simply crashes immediately
+ after starting.
+
+Using another device architecture:
+
+ If we want to bisect for an x86-64 device we first need to provide a arch
+ specific build flavor in our app/build.gradle file:
+
+ create("x86-64") {
+ ndk.abiFilters.add("x86_64")
+ }
+
+ We want to add this under the same "productFlavors" section that our arm7
+ build flavor is in (see PATCH1). Now we should have the "installx86-64Debug"
+ task in our build system. We can use this to build and install an x86-64
+ version of our app.
+
+ Now we want to change our test_setup.sh script to run our new gradle task:
+ ./gradlew installx86-64Debug
+
+ Keep in mind, these specific build flavors are not required. If your build
+ system makes these device specific builds difficult to implement, the
+ bisection tool will function perfectly fine without them. However, the
+ downside of not having targetting a single architecture is the bisection will
+ take longer (as it will need to search across more object files).
+
+Additional Documentation:
+ These are internal Google documents, if you are a developer external to
+ Google please ask whoever gave you this sample for access or copies to the
+ documentation. If you cannot gain access, the various READMEs paired with the
+ bisector should help you.
+
+ * Ahmad's original presentation:
+ https://goto.google.com/zxdfyi
+
+ * Bisection tool update design doc:
+ https://goto.google.com/zcwei
+
+ * Bisection tool webpage:
+ https://goto.google.com/ruwpyi
+
+ * Compiler wrapper webpage:
+ https://goto.google.com/xossn
diff --git a/binary_search_tool/ndk/Teapot.tar.gz b/binary_search_tool/ndk/Teapot.tar.gz
new file mode 100644
index 00000000..87faf54b
--- /dev/null
+++ b/binary_search_tool/ndk/Teapot.tar.gz
Binary files differ
diff --git a/binary_search_tool/ndk/boot_test.sh b/binary_search_tool/ndk/boot_test.sh
new file mode 100755
index 00000000..b8c34aa5
--- /dev/null
+++ b/binary_search_tool/ndk/boot_test.sh
@@ -0,0 +1,27 @@
+#!/bin/bash -u
+#
+# Copyright 2016 Google Inc. All Rights Reserved.
+#
+# This script checks the android device to determine if the app is currently
+# running. For our specific test case we will be checking if the Teapot app
+# has crashed.
+#
+# This script is intended to be used by binary_search_state.py, as
+# part of the binary search triage on the Android NDK apps. It
+# waits for the test setup script to build and install the app, then checks if
+# app boots or not. It should return '0' if the test succeeds
+# (the image is 'good'); '1' if the test fails (the image is 'bad'); and '125'
+# if it could not determine (does not apply in this case).
+#
+
+echo "Starting Teapot app..."
+adb shell am start -n com.sample.teapot/com.sample.teapot.TeapotNativeActivity
+sleep 3
+
+echo "Checking if Teapot app crashed..."
+adb shell ps | grep com.sample.teapot
+
+retval=$?
+
+
+exit ${retval}
diff --git a/binary_search_tool/ndk/get_initial_items.sh b/binary_search_tool/ndk/get_initial_items.sh
new file mode 100755
index 00000000..bc2d05cd
--- /dev/null
+++ b/binary_search_tool/ndk/get_initial_items.sh
@@ -0,0 +1,12 @@
+#!/bin/bash -u
+#
+# Copyright 2016 Google Inc. All Rights Reserved.
+#
+# This script is intended to be used by binary_search_state.py, as
+# part of the binary search triage on the Android NDK apps. This script
+# generates the list of object files to be bisected. This list is generated
+# by the compiler wrapper during the POPULATE_GOOD and POPULATE_BAD stages.
+#
+
+cat ${BISECT_DIR}/good/_LIST
+
diff --git a/binary_search_tool/ndk/switch_to_bad.sh b/binary_search_tool/ndk/switch_to_bad.sh
new file mode 120000
index 00000000..0172bce5
--- /dev/null
+++ b/binary_search_tool/ndk/switch_to_bad.sh
@@ -0,0 +1 @@
+switch_to_good.sh \ No newline at end of file
diff --git a/binary_search_tool/ndk/switch_to_good.sh b/binary_search_tool/ndk/switch_to_good.sh
new file mode 100755
index 00000000..cb8d5fd9
--- /dev/null
+++ b/binary_search_tool/ndk/switch_to_good.sh
@@ -0,0 +1,46 @@
+#!/bin/bash -u
+#
+# Copyright 2016 Google Inc. All Rights Reserved.
+#
+# This script is intended to be used by binary_search_state.py, as
+# part of the binary search triage on Android NDK apps. This script simply
+# deletes all given objects, signaling gradle to execute a recompilation of said
+# object files.
+#
+
+# Input is a file, with newline seperated list of files we will be switching
+OBJ_LIST_FILE=$1
+
+# Check that number of arguments == 1
+if [ $# -ne 1 ] ; then
+ echo "ERROR:"
+ echo "Got multiple inputs to switch script!"
+ echo "Run binary_search_state.py with --file_args"
+ exit 1
+fi
+
+# Remove any file that's being switched. This is because Gradle only recompiles
+# if:
+# 1. The resultant object file doesn't exist
+# 2. The hash of the source file has changed
+#
+# Because we have no reliable way to edit the source file, we instead remove the
+# object file and have the compiler wrapper insert the file from the appropriate
+# cache (good or bad).
+#
+# Not entirely relevant to the Teapot example, but something to consider:
+# This removing strategy has the side effect that all switched items cause the
+# invocation of the compiler wrapper, which can add up and slow the build
+# process. With Android's source tree, Make checks the timestamp of the object
+# file. So we symlink in the appropriate file and touch it to tell Make it needs
+# to be relinked. This avoids having to call the compiler wrapper in the
+# majority of cases.
+#
+# However, a similar construct doesn't seem to exist in Gradle. It may be better
+# to add a build target to Gradle that will always relink all given object
+# files. This way we can avoid calling the compiler wrapper while Triaging and
+# save some time. Not really necessary
+
+cat $OBJ_LIST_FILE | xargs rm
+exit 0
+
diff --git a/binary_search_tool/ndk/test_setup.sh b/binary_search_tool/ndk/test_setup.sh
new file mode 100755
index 00000000..477bcb21
--- /dev/null
+++ b/binary_search_tool/ndk/test_setup.sh
@@ -0,0 +1,27 @@
+#!/bin/bash
+#
+# Copyright 2016 Google Inc. All Rights Reserved.
+#
+# This is the setup script for generating and installing the ndk app.
+#
+# This script is intended to be used by binary_search_state.py, as
+# part of the binary search triage on the Android source tree. It should
+# return '0' if the setup succeeds; and '1' if the setup fails (the image
+# could not build or be flashed).
+#
+
+echo
+echo "INSTALLATION BEGIN"
+echo
+
+# This normally shouldn't be hardcoded, but this is a sample bisection.
+# Also keep in mind that the bisection tool mandates all paths are
+# relative to binary_search_state.py
+cd ndk/Teapot
+
+echo "BUILDING APP"
+
+./gradlew installArm7Debug
+gradle_status=$?
+
+exit ${gradle_status}
diff --git a/binary_search_tool/sysroot_wrapper/README b/binary_search_tool/sysroot_wrapper/README
new file mode 100644
index 00000000..599d700d
--- /dev/null
+++ b/binary_search_tool/sysroot_wrapper/README
@@ -0,0 +1,28 @@
+This is a set of scripts to use when triaging compiler problem by using
+the bisecting functionality included in the sysroot_wrapper.hardened.
+The only script that you need to create for your triaging problem is the
+test_script.sh (The ones in this directory are here only as an example).
+
+Before running the binary searcher tool you will need to run the setup script:
+
+./sysroot_wrapper/setup.sh ${board} ${remote_ip} ${package}
+
+This setup script will ensure your $BISECT_DIR is properly populated and
+generate a common variable script for the convenience of the scripts in
+./sysroot_wrapper
+
+To run the binary searcher tool with these scripts, execute it like this:
+
+./binary_search_state.py --get_initial_items=./sysroot_wrapper/get_initial_items.sh --switch_to_good=./sysroot_wrapper/switch_to_good.sh --switch_to_bad=./sysroot_wrapper/switch_to_bad.sh --test_script=./sysroot_wrapper/test_script.sh --noincremental --file_args 2>&1 | tee /tmp/binary_search.log
+
+Finally once done you will want to run the cleanup script:
+
+./sysroot_wrapper/cleanup.sh
+
+For more information on how to use the sysroot_wrapper to do object file
+triaging see:
+
+https://sites.google.com/a/google.com/chromeos-toolchain-team-home2/home/team-tools-and-scripts/bisecting-compiler-problems
+
+
+
diff --git a/binary_search_tool/sysroot_wrapper/boot_test.sh b/binary_search_tool/sysroot_wrapper/boot_test.sh
new file mode 120000
index 00000000..9a345617
--- /dev/null
+++ b/binary_search_tool/sysroot_wrapper/boot_test.sh
@@ -0,0 +1 @@
+../common/boot_test.sh \ No newline at end of file
diff --git a/binary_search_tool/sysroot_wrapper/cleanup.sh b/binary_search_tool/sysroot_wrapper/cleanup.sh
new file mode 100755
index 00000000..5066d638
--- /dev/null
+++ b/binary_search_tool/sysroot_wrapper/cleanup.sh
@@ -0,0 +1,11 @@
+#!/bin/bash
+#
+# Copyright 2016 Google Inc. All Rights Reserved.
+#
+# This script is part of the ChromeOS object binary search triage process.
+# It should be the last script called by the user, after the user has
+# successfully run the bisection tool and found their bad items. This script
+# will perform all necessary cleanup for the bisection tool.
+#
+
+rm common/common.sh
diff --git a/binary_search_tool/sysroot_wrapper/get_initial_items.sh b/binary_search_tool/sysroot_wrapper/get_initial_items.sh
new file mode 100755
index 00000000..c1beb972
--- /dev/null
+++ b/binary_search_tool/sysroot_wrapper/get_initial_items.sh
@@ -0,0 +1,5 @@
+#!/bin/bash -u
+
+source common/common.sh
+
+cat ${bisect_dir}/good/_LIST
diff --git a/binary_search_tool/sysroot_wrapper/glibc_test_script.sh b/binary_search_tool/sysroot_wrapper/glibc_test_script.sh
new file mode 100755
index 00000000..58413ad1
--- /dev/null
+++ b/binary_search_tool/sysroot_wrapper/glibc_test_script.sh
@@ -0,0 +1,49 @@
+#!/bin/bash -u
+
+# This is an example execution script.
+# This script changes with the problem you are trying to fix.
+# This particular script was used to triage a problem where a glibc
+# compiled with a new compiler would expose a problem in piglit.
+# Note it returns 0 only when the installation of the image succeeded
+# (ie: the machine booted after installation)
+
+source common/common.sh
+
+#export BISECT_STAGE=TRIAGE
+echo "BISECT_STAGE=${BISECT_STAGE}"
+
+echo "State of sets"
+wc -l ${bisect_dir}/*_SET
+
+board=x86-alex
+DUT=172.17.186.180
+
+echo "Cleaning up"
+{ sudo emerge -C cross-i686-pc-linux-gnu/glibc || exit 125; } &>> /tmp/glibc_triage.log
+
+echo "Building"
+{ sudo -E emerge cross-i686-pc-linux-gnu/glibc || exit 125; } &>> /tmp/glibc_triage.log
+
+echo "Building image"
+{ /home/llozano/trunk/src/scripts/build_image --board=${board} test || exit 125; } &>> /tmp/glibc_triage.log
+
+echo "Installing image"
+cros flash ${DUT} latest &> /tmp/tmp_cros_flash_result.log
+
+cat /tmp/tmp_cros_flash_result.log >> /tmp/cros_flash_result.log
+
+grep "Cros Flash completed successfully" /tmp/tmp_cros_flash_result.log || exit 125
+
+echo "Trying piglit"
+
+echo "export DISPLAY=:0.0; echo \$DISPLAY; /usr/local/piglit/lib/piglit/bin/glx-close-display -auto" > /tmp/repro.sh
+SSH_OPTS="-oUserKnownHostsFile=/dev/null -oStrictHostKeyChecking=no -oServerAliveInterval=10 -i /var/cache/chromeos-cache/distfiles/target/./chrome-src/src/third_party/chromite/ssh_keys/testing_rsa"
+scp ${SSH_OPTS} /tmp/repro.sh root@${DUT}:/tmp
+
+# notice the bash -l here. Otherwise the DISPLAY cannot be set
+( ssh ${SSH_OPTS} root@${DUT} -- /bin/bash -l /tmp/repro.sh ) > /tmp/result
+grep pass /tmp/result || { echo "PIGLIT FAILED"; exit 1; }
+
+echo "PIGLIT PASSED"
+
+exit 0
diff --git a/binary_search_tool/sysroot_wrapper/interactive_test.sh b/binary_search_tool/sysroot_wrapper/interactive_test.sh
new file mode 120000
index 00000000..18fe3958
--- /dev/null
+++ b/binary_search_tool/sysroot_wrapper/interactive_test.sh
@@ -0,0 +1 @@
+../common/interactive_test.sh \ No newline at end of file
diff --git a/binary_search_tool/sysroot_wrapper/setup.sh b/binary_search_tool/sysroot_wrapper/setup.sh
new file mode 100755
index 00000000..f5907f59
--- /dev/null
+++ b/binary_search_tool/sysroot_wrapper/setup.sh
@@ -0,0 +1,73 @@
+#!/bin/bash -u
+#
+# Copyright 2016 Google Inc. All Rights Reserved.
+#
+# This script is part of the ChromeOS object binary search triage process.
+# It should be the first script called by the user, after the user has set up
+# the two necessary build tree directories (see sysroot_wrapper/README).
+#
+# This script requires three arguments. The first argument must be the name of
+# the board for which this work is being done (e.g. 'daisy', 'lumpy','parrot',
+# etc.). The second argument must be the name or IP address of the chromebook
+# on which the ChromeOS images will be pushed and tested. The third argument
+# must be the name of the package being bisected (e.g. 'chromeos-chrome',
+# 'cryptohome', etc.).
+#
+# This script generates common/common.sh, which generates enviroment variables
+# used by the other scripts in the object file binary search triage process.
+#
+
+# Set up basic variables.
+bisect_dir=${BISECT_DIR:-/tmp/sysroot_bisect}
+
+BOARD=$1
+REMOTE=$2
+PACKAGE=$3
+
+GOOD_BUILD=${bisect_dir}/good
+BAD_BUILD=${bisect_dir}/bad
+GOOD_LIST=${GOOD_BUILD}/_LIST
+BAD_LIST=${BAD_BUILD}/_LIST
+
+#
+# Verify that the necessary directories exist.
+#
+
+if [[ ! -d ${GOOD_BUILD} ]] ; then
+ echo "Error: ${GOOD_BUILD} does not exist."
+ exit 1
+fi
+
+if [[ ! -d ${BAD_BUILD} ]] ; then
+ echo "Error: ${BAD_BUILD} does not exist."
+ exit 1
+fi
+
+if [[ ! -e ${GOOD_LIST} ]] ; then
+ echo "Error: ${GOOD_LIST} does not exist."
+ exit 1
+fi
+
+if [[ ! -e ${BAD_LIST} ]] ; then
+ echo "Error: ${BAD_LIST} does not exist."
+ exit 1
+fi
+
+COMMON_FILE="common/common.sh"
+
+cat <<-EOF > ${COMMON_FILE}
+
+BISECT_BOARD=${BOARD}
+BISECT_REMOTE=${REMOTE}
+BISECT_PACKAGE=${PACKAGE}
+BISECT_MODE="OBJECT_MODE"
+
+bisect_dir=${bisect_dir}
+
+export BISECT_STAGE=TRIAGE
+
+EOF
+
+chmod 755 ${COMMON_FILE}
+
+exit 0
diff --git a/binary_search_tool/sysroot_wrapper/switch_to_bad.sh b/binary_search_tool/sysroot_wrapper/switch_to_bad.sh
new file mode 100755
index 00000000..32f96780
--- /dev/null
+++ b/binary_search_tool/sysroot_wrapper/switch_to_bad.sh
@@ -0,0 +1,9 @@
+#!/bin/bash -u
+
+source common/common.sh
+
+# Remove file, signaling to emerge that it needs to be rebuilt. The compiler
+# wrapper will insert the correct object file based on $BISECT_BAD_SET
+cat $1 | sudo xargs rm -f
+
+exit 0
diff --git a/binary_search_tool/sysroot_wrapper/switch_to_good.sh b/binary_search_tool/sysroot_wrapper/switch_to_good.sh
new file mode 100755
index 00000000..f59b278d
--- /dev/null
+++ b/binary_search_tool/sysroot_wrapper/switch_to_good.sh
@@ -0,0 +1,9 @@
+#!/bin/bash -u
+
+source common/common.sh
+
+# Remove file, signaling to emerge that it needs to be rebuilt. The compiler
+# wrapper will insert the correct object file based on $BISECT_GOOD_SET
+cat $1 | sudo xargs rm -f
+
+exit 0
diff --git a/binary_search_tool/sysroot_wrapper/test_script.sh b/binary_search_tool/sysroot_wrapper/test_script.sh
new file mode 100755
index 00000000..2629a187
--- /dev/null
+++ b/binary_search_tool/sysroot_wrapper/test_script.sh
@@ -0,0 +1,34 @@
+#!/bin/bash -u
+
+# This is an example execution script.
+# This script changes with the problem you are trying to fix.
+# This particular script was used to triage a problem where the kernel
+# would not boot while migrating to GCC 4.9.
+# Note it returns 0 only when the installation of the image succeeded
+# (ie: the machine booted after installation)
+
+source common/common.sh
+
+export BISECT_STAGE=TRIAGE
+echo "BISECT_STAGE=${BISECT_STAGE}"
+
+echo "State of sets"
+wc -l ${bisect_dir}/*_SET
+
+echo "Cleaning up"
+{ /usr/bin/sudo rm -rf /build/falco/var/cache/portage/sys-kernel && emerge-falco -C sys-kernel/chromeos-kernel-3_8-3.8.11-r96 || exit 125; } &>> /tmp/kernel_triage.log
+
+echo "Building"
+{ /usr/local/bin/emerge-falco =sys-kernel/chromeos-kernel-3_8-3.8.11-r96 || exit 125; } &>> /tmp/kernel_triage.log
+
+echo "Building image"
+{ /home/llozano/trunk/src/scripts/build_image --board=falco test || exit 125; } &>> /tmp/kernel_triage.log
+
+echo "Installing image"
+cros flash 172.17.187.150 latest &> /tmp/tmp_cros_flash_result.log
+
+cat /tmp/tmp_cros_flash_result.log >> /tmp/cros_flash_result.log
+
+grep "Cros Flash completed successfully" /tmp/tmp_cros_flash_result.log || exit 1
+
+exit 0
diff --git a/binary_search_tool/sysroot_wrapper/test_setup.sh b/binary_search_tool/sysroot_wrapper/test_setup.sh
new file mode 120000
index 00000000..39e715f6
--- /dev/null
+++ b/binary_search_tool/sysroot_wrapper/test_setup.sh
@@ -0,0 +1 @@
+../common/test_setup.sh \ No newline at end of file
diff --git a/binary_search_tool/sysroot_wrapper/testing_test.py b/binary_search_tool/sysroot_wrapper/testing_test.py
new file mode 100755
index 00000000..2f7bc4c3
--- /dev/null
+++ b/binary_search_tool/sysroot_wrapper/testing_test.py
@@ -0,0 +1,37 @@
+#!/usr/bin/python2
+"""Test for sysroot_wrapper bisector.
+
+All files in bad_files will be determined to be bad. This test was made for
+chromeos-chrome built for a daisy board, if you are using another package you
+will need to change the base_path accordingly.
+"""
+
+from __future__ import print_function
+
+import subprocess
+import sys
+import os
+
+base_path = ('/var/cache/chromeos-chrome/chrome-src-internal/src/out_daisy/'
+ 'Release/obj/')
+bad_files = [
+ os.path.join(base_path, 'base/base.cpu.o'),
+ os.path.join(base_path, 'base/base.version.o'),
+ os.path.join(base_path, 'apps/apps.launcher.o')
+]
+
+bisect_dir = os.environ.get('BISECT_DIR', '/tmp/sysroot_bisect')
+
+
+def Main(_):
+ for test_file in bad_files:
+ test_file = test_file.strip()
+ cmd = ['grep', test_file, os.path.join(bisect_dir, 'BAD_SET')]
+ ret = subprocess.call(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
+ if not ret:
+ return 1
+ return 0
+
+
+if __name__ == '__main__':
+ sys.exit(Main(sys.argv[1:]))
diff --git a/binary_search_tool/test/__init__.py b/binary_search_tool/test/__init__.py
new file mode 100644
index 00000000..8b137891
--- /dev/null
+++ b/binary_search_tool/test/__init__.py
@@ -0,0 +1 @@
+
diff --git a/binary_search_tool/test/binary_search_tool_tester.py b/binary_search_tool/test/binary_search_tool_tester.py
new file mode 100755
index 00000000..775c1715
--- /dev/null
+++ b/binary_search_tool/test/binary_search_tool_tester.py
@@ -0,0 +1,421 @@
+#!/usr/bin/python2
+
+# Copyright 2012 Google Inc. All Rights Reserved.
+"""Tests for bisecting tool."""
+
+from __future__ import print_function
+
+__author__ = 'shenhan@google.com (Han Shen)'
+
+import os
+import random
+import sys
+import unittest
+
+from cros_utils import command_executer
+from binary_search_tool import binary_search_state
+from binary_search_tool import bisect
+
+import common
+import gen_obj
+
+
+def GenObj():
+ obj_num = random.randint(100, 1000)
+ bad_obj_num = random.randint(obj_num / 100, obj_num / 20)
+ if bad_obj_num == 0:
+ bad_obj_num = 1
+ gen_obj.Main(['--obj_num', str(obj_num), '--bad_obj_num', str(bad_obj_num)])
+
+
+def CleanObj():
+ os.remove(common.OBJECTS_FILE)
+ os.remove(common.WORKING_SET_FILE)
+ print('Deleted "{0}" and "{1}"'.format(common.OBJECTS_FILE,
+ common.WORKING_SET_FILE))
+
+
+class BisectTest(unittest.TestCase):
+ """Tests for bisect.py"""
+
+ def setUp(self):
+ with open('./is_setup', 'w'):
+ pass
+
+ try:
+ os.remove(binary_search_state.STATE_FILE)
+ except OSError:
+ pass
+
+ def tearDown(self):
+ try:
+ os.remove('./is_setup')
+ os.remove(os.readlink(binary_search_state.STATE_FILE))
+ os.remove(binary_search_state.STATE_FILE)
+ except OSError:
+ pass
+
+ class FullBisector(bisect.Bisector):
+ """Test bisector to test bisect.py with"""
+
+ def __init__(self, options, overrides):
+ super(BisectTest.FullBisector, self).__init__(options, overrides)
+
+ def PreRun(self):
+ GenObj()
+ return 0
+
+ def Run(self):
+ return binary_search_state.Run(get_initial_items='./gen_init_list.py',
+ switch_to_good='./switch_to_good.py',
+ switch_to_bad='./switch_to_bad.py',
+ test_script='./is_good.py',
+ prune=True,
+ file_args=True)
+
+ def PostRun(self):
+ CleanObj()
+ return 0
+
+ def test_full_bisector(self):
+ ret = bisect.Run(self.FullBisector({}, {}))
+ self.assertEquals(ret, 0)
+ self.assertFalse(os.path.exists(common.OBJECTS_FILE))
+ self.assertFalse(os.path.exists(common.WORKING_SET_FILE))
+
+ def check_output(self):
+ _, out, _ = command_executer.GetCommandExecuter().RunCommandWOutput(
+ ('grep "Bad items are: " logs/binary_search_tool_tester.py.out | '
+ 'tail -n1'))
+ ls = out.splitlines()
+ self.assertEqual(len(ls), 1)
+ line = ls[0]
+
+ _, _, bad_ones = line.partition('Bad items are: ')
+ bad_ones = bad_ones.split()
+ expected_result = common.ReadObjectsFile()
+
+ # Reconstruct objects file from bad_ones and compare
+ actual_result = [0] * len(expected_result)
+ for bad_obj in bad_ones:
+ actual_result[int(bad_obj)] = 1
+
+ self.assertEqual(actual_result, expected_result)
+
+
+class BisectingUtilsTest(unittest.TestCase):
+ """Tests for bisecting tool."""
+
+ def setUp(self):
+ """Generate [100-1000] object files, and 1-5% of which are bad ones."""
+ GenObj()
+
+ with open('./is_setup', 'w'):
+ pass
+
+ try:
+ os.remove(binary_search_state.STATE_FILE)
+ except OSError:
+ pass
+
+ def tearDown(self):
+ """Cleanup temp files."""
+ CleanObj()
+
+ try:
+ os.remove(os.readlink(binary_search_state.STATE_FILE))
+ except OSError:
+ pass
+
+ cleanup_list = ['./is_setup', binary_search_state.STATE_FILE,
+ 'noinc_prune_bad', 'noinc_prune_good']
+ for f in cleanup_list:
+ if os.path.exists(f):
+ os.remove(f)
+
+ def runTest(self):
+ ret = binary_search_state.Run(get_initial_items='./gen_init_list.py',
+ switch_to_good='./switch_to_good.py',
+ switch_to_bad='./switch_to_bad.py',
+ test_script='./is_good.py',
+ prune=True,
+ file_args=True)
+ self.assertEquals(ret, 0)
+ self.check_output()
+
+ def test_arg_parse(self):
+ args = ['--get_initial_items', './gen_init_list.py', '--switch_to_good',
+ './switch_to_good.py', '--switch_to_bad', './switch_to_bad.py',
+ '--test_script', './is_good.py', '--prune', '--file_args']
+ ret = binary_search_state.Main(args)
+ self.assertEquals(ret, 0)
+ self.check_output()
+
+ def test_test_setup_script(self):
+ os.remove('./is_setup')
+ with self.assertRaises(AssertionError):
+ ret = binary_search_state.Run(get_initial_items='./gen_init_list.py',
+ switch_to_good='./switch_to_good.py',
+ switch_to_bad='./switch_to_bad.py',
+ test_script='./is_good.py',
+ prune=True,
+ file_args=True)
+
+ ret = binary_search_state.Run(get_initial_items='./gen_init_list.py',
+ switch_to_good='./switch_to_good.py',
+ switch_to_bad='./switch_to_bad.py',
+ test_script='./is_good.py',
+ test_setup_script='./test_setup.py',
+ prune=True,
+ file_args=True)
+ self.assertEquals(ret, 0)
+ self.check_output()
+
+ def test_bad_test_setup_script(self):
+ with self.assertRaises(AssertionError):
+ binary_search_state.Run(get_initial_items='./gen_init_list.py',
+ switch_to_good='./switch_to_good.py',
+ switch_to_bad='./switch_to_bad.py',
+ test_script='./is_good.py',
+ test_setup_script='./test_setup_bad.py',
+ prune=True,
+ file_args=True)
+
+ def test_bad_save_state(self):
+ state_file = binary_search_state.STATE_FILE
+ hidden_state_file = os.path.basename(binary_search_state.HIDDEN_STATE_FILE)
+
+ with open(state_file, 'w') as f:
+ f.write('test123')
+
+ bss = binary_search_state.MockBinarySearchState()
+ with self.assertRaises(binary_search_state.Error):
+ bss.SaveState()
+
+ with open(state_file, 'r') as f:
+ self.assertEquals(f.read(), 'test123')
+
+ os.remove(state_file)
+
+ # Cleanup generated save state that has no symlink
+ files = os.listdir(os.getcwd())
+ save_states = [x for x in files if x.startswith(hidden_state_file)]
+ _ = [os.remove(x) for x in save_states]
+
+ def test_save_state(self):
+ state_file = binary_search_state.STATE_FILE
+
+ bss = binary_search_state.MockBinarySearchState()
+ bss.SaveState()
+ self.assertTrue(os.path.exists(state_file))
+ first_state = os.readlink(state_file)
+
+ bss.SaveState()
+ second_state = os.readlink(state_file)
+ self.assertTrue(os.path.exists(state_file))
+ self.assertTrue(second_state != first_state)
+ self.assertFalse(os.path.exists(first_state))
+
+ bss.RemoveState()
+ self.assertFalse(os.path.islink(state_file))
+ self.assertFalse(os.path.exists(second_state))
+
+ def test_load_state(self):
+ test_items = [1, 2, 3, 4, 5]
+
+ bss = binary_search_state.MockBinarySearchState()
+ bss.all_items = test_items
+ bss.currently_good_items = set([1, 2, 3])
+ bss.currently_bad_items = set([4, 5])
+ bss.SaveState()
+
+ bss = None
+
+ bss2 = binary_search_state.MockBinarySearchState.LoadState()
+ self.assertEquals(bss2.all_items, test_items)
+ self.assertEquals(bss2.currently_good_items, set([]))
+ self.assertEquals(bss2.currently_bad_items, set([]))
+
+ def test_tmp_cleanup(self):
+ bss = binary_search_state.MockBinarySearchState(
+ get_initial_items='echo "0\n1\n2\n3"',
+ switch_to_good='./switch_tmp.py',
+ file_args=True)
+ bss.SwitchToGood(['0', '1', '2', '3'])
+
+ tmp_file = None
+ with open('tmp_file', 'r') as f:
+ tmp_file = f.read()
+ os.remove('tmp_file')
+
+ self.assertFalse(os.path.exists(tmp_file))
+ ws = common.ReadWorkingSet()
+ for i in range(3):
+ self.assertEquals(ws[i], 42)
+
+ def test_verify_fail(self):
+ bss = binary_search_state.MockBinarySearchState(
+ get_initial_items='./gen_init_list.py',
+ switch_to_good='./switch_to_bad.py',
+ switch_to_bad='./switch_to_good.py',
+ test_script='./is_good.py',
+ prune=True,
+ file_args=True,
+ verify=True)
+ with self.assertRaises(AssertionError):
+ bss.DoVerify()
+
+ def test_early_terminate(self):
+ bss = binary_search_state.MockBinarySearchState(
+ get_initial_items='./gen_init_list.py',
+ switch_to_good='./switch_to_good.py',
+ switch_to_bad='./switch_to_bad.py',
+ test_script='./is_good.py',
+ prune=True,
+ file_args=True,
+ iterations=1)
+ bss.DoSearch()
+ self.assertFalse(bss.found_items)
+
+ def test_no_prune(self):
+ bss = binary_search_state.MockBinarySearchState(
+ get_initial_items='./gen_init_list.py',
+ switch_to_good='./switch_to_good.py',
+ switch_to_bad='./switch_to_bad.py',
+ test_script='./is_good.py',
+ test_setup_script='./test_setup.py',
+ prune=False,
+ file_args=True)
+ bss.DoSearch()
+ self.assertEquals(len(bss.found_items), 1)
+
+ bad_objs = common.ReadObjectsFile()
+ found_obj = int(bss.found_items.pop())
+ self.assertEquals(bad_objs[found_obj], 1)
+
+ def test_set_file(self):
+ binary_search_state.Run(get_initial_items='./gen_init_list.py',
+ switch_to_good='./switch_to_good_set_file.py',
+ switch_to_bad='./switch_to_bad_set_file.py',
+ test_script='./is_good.py',
+ prune=True,
+ file_args=True,
+ verify=True)
+ self.check_output()
+
+ def test_noincremental_prune(self):
+ ret = binary_search_state.Run(
+ get_initial_items='./gen_init_list.py',
+ switch_to_good='./switch_to_good_noinc_prune.py',
+ switch_to_bad='./switch_to_bad_noinc_prune.py',
+ test_script='./is_good_noinc_prune.py',
+ test_setup_script='./test_setup.py',
+ prune=True,
+ noincremental=True,
+ file_args=True,
+ verify=False)
+ self.assertEquals(ret, 0)
+ self.check_output()
+
+ def check_output(self):
+ _, out, _ = command_executer.GetCommandExecuter().RunCommandWOutput(
+ ('grep "Bad items are: " logs/binary_search_tool_tester.py.out | '
+ 'tail -n1'))
+ ls = out.splitlines()
+ self.assertEqual(len(ls), 1)
+ line = ls[0]
+
+ _, _, bad_ones = line.partition('Bad items are: ')
+ bad_ones = bad_ones.split()
+ expected_result = common.ReadObjectsFile()
+
+ # Reconstruct objects file from bad_ones and compare
+ actual_result = [0] * len(expected_result)
+ for bad_obj in bad_ones:
+ actual_result[int(bad_obj)] = 1
+
+ self.assertEqual(actual_result, expected_result)
+
+
+class BisectStressTest(unittest.TestCase):
+ """Stress tests for bisecting tool."""
+
+ def test_every_obj_bad(self):
+ amt = 25
+ gen_obj.Main(['--obj_num', str(amt), '--bad_obj_num', str(amt)])
+ ret = binary_search_state.Run(get_initial_items='./gen_init_list.py',
+ switch_to_good='./switch_to_good.py',
+ switch_to_bad='./switch_to_bad.py',
+ test_script='./is_good.py',
+ prune=True,
+ file_args=True,
+ verify=False)
+ self.assertEquals(ret, 0)
+ self.check_output()
+
+ def test_every_index_is_bad(self):
+ amt = 25
+ for i in range(amt):
+ obj_list = ['0'] * amt
+ obj_list[i] = '1'
+ obj_list = ','.join(obj_list)
+ gen_obj.Main(['--obj_list', obj_list])
+ ret = binary_search_state.Run(get_initial_items='./gen_init_list.py',
+ switch_to_good='./switch_to_good.py',
+ switch_to_bad='./switch_to_bad.py',
+ test_setup_script='./test_setup.py',
+ test_script='./is_good.py',
+ prune=True,
+ file_args=True)
+ self.assertEquals(ret, 0)
+ self.check_output()
+
+ def check_output(self):
+ _, out, _ = command_executer.GetCommandExecuter().RunCommandWOutput(
+ ('grep "Bad items are: " logs/binary_search_tool_tester.py.out | '
+ 'tail -n1'))
+ ls = out.splitlines()
+ self.assertEqual(len(ls), 1)
+ line = ls[0]
+
+ _, _, bad_ones = line.partition('Bad items are: ')
+ bad_ones = bad_ones.split()
+ expected_result = common.ReadObjectsFile()
+
+ # Reconstruct objects file from bad_ones and compare
+ actual_result = [0] * len(expected_result)
+ for bad_obj in bad_ones:
+ actual_result[int(bad_obj)] = 1
+
+ self.assertEqual(actual_result, expected_result)
+
+
+def Main(argv):
+ num_tests = 2
+ if len(argv) > 1:
+ num_tests = int(argv[1])
+
+ suite = unittest.TestSuite()
+ for _ in range(0, num_tests):
+ suite.addTest(BisectingUtilsTest())
+ suite.addTest(BisectingUtilsTest('test_arg_parse'))
+ suite.addTest(BisectingUtilsTest('test_test_setup_script'))
+ suite.addTest(BisectingUtilsTest('test_bad_test_setup_script'))
+ suite.addTest(BisectingUtilsTest('test_bad_save_state'))
+ suite.addTest(BisectingUtilsTest('test_save_state'))
+ suite.addTest(BisectingUtilsTest('test_load_state'))
+ suite.addTest(BisectingUtilsTest('test_tmp_cleanup'))
+ suite.addTest(BisectingUtilsTest('test_verify_fail'))
+ suite.addTest(BisectingUtilsTest('test_early_terminate'))
+ suite.addTest(BisectingUtilsTest('test_no_prune'))
+ suite.addTest(BisectingUtilsTest('test_set_file'))
+ suite.addTest(BisectingUtilsTest('test_noincremental_prune'))
+ suite.addTest(BisectTest('test_full_bisector'))
+ suite.addTest(BisectStressTest('test_every_obj_bad'))
+ suite.addTest(BisectStressTest('test_every_index_is_bad'))
+ runner = unittest.TextTestRunner()
+ runner.run(suite)
+
+
+if __name__ == '__main__':
+ Main(sys.argv)
diff --git a/binary_search_tool/test/common.py b/binary_search_tool/test/common.py
new file mode 100755
index 00000000..baac9434
--- /dev/null
+++ b/binary_search_tool/test/common.py
@@ -0,0 +1,41 @@
+#!/usr/bin/python2
+"""Common utility functions."""
+
+DEFAULT_OBJECT_NUMBER = 1238
+DEFAULT_BAD_OBJECT_NUMBER = 23
+OBJECTS_FILE = 'objects.txt'
+WORKING_SET_FILE = 'working_set.txt'
+
+
+def ReadWorkingSet():
+ working_set = []
+ f = open(WORKING_SET_FILE, 'r')
+ for l in f:
+ working_set.append(int(l))
+ f.close()
+ return working_set
+
+
+def WriteWorkingSet(working_set):
+ f = open(WORKING_SET_FILE, 'w')
+ for o in working_set:
+ f.write('{0}\n'.format(o))
+ f.close()
+
+
+def ReadObjectsFile():
+ objects_file = []
+ f = open(OBJECTS_FILE, 'r')
+ for l in f:
+ objects_file.append(int(l))
+ f.close()
+ return objects_file
+
+
+def ReadObjectIndex(filename):
+ object_index = []
+ f = open(filename, 'r')
+ for o in f:
+ object_index.append(int(o))
+ f.close()
+ return object_index
diff --git a/binary_search_tool/test/gen_init_list.py b/binary_search_tool/test/gen_init_list.py
new file mode 100755
index 00000000..4a79a1b1
--- /dev/null
+++ b/binary_search_tool/test/gen_init_list.py
@@ -0,0 +1,22 @@
+#!/usr/bin/python2
+"""Prints out index for every object file, starting from 0."""
+
+from __future__ import print_function
+
+import sys
+
+from cros_utils import command_executer
+import common
+
+
+def Main():
+ ce = command_executer.GetCommandExecuter()
+ _, l, _ = ce.RunCommandWOutput(
+ 'cat {0} | wc -l'.format(common.OBJECTS_FILE), print_to_console=False)
+ for i in range(0, int(l)):
+ print(i)
+
+
+if __name__ == '__main__':
+ Main()
+ sys.exit(0)
diff --git a/binary_search_tool/test/gen_obj.py b/binary_search_tool/test/gen_obj.py
new file mode 100755
index 00000000..265729d2
--- /dev/null
+++ b/binary_search_tool/test/gen_obj.py
@@ -0,0 +1,97 @@
+#!/usr/bin/python2
+"""Script to generate a list of object files.
+
+0 represents a good object file.
+1 represents a bad object file.
+"""
+
+from __future__ import print_function
+
+import argparse
+import os
+import random
+import sys
+
+import common
+
+
+def Main(argv):
+ """Generates a list, the value of each element is 0 or 1.
+
+ The number of 1s in the list is specified by bad_obj_num.
+ The others are all 0s. The total number of 0s and 1s is specified by obj_num.
+
+ Args:
+ argv: argument from command line
+
+ Returns:
+ 0 always.
+ """
+ parser = argparse.ArgumentParser()
+ parser.add_argument(
+ '-n',
+ '--obj_num',
+ dest='obj_num',
+ default=common.DEFAULT_OBJECT_NUMBER,
+ help=('Number of total objects.'))
+ parser.add_argument(
+ '-b',
+ '--bad_obj_num',
+ dest='bad_obj_num',
+ default=common.DEFAULT_BAD_OBJECT_NUMBER,
+ help=('Number of bad objects. Must be great than or '
+ 'equal to zero and less than total object '
+ 'number.'))
+ parser.add_argument(
+ '-o',
+ '--obj_list',
+ dest='obj_list',
+ default='',
+ help=('List of comma seperated objects to generate. '
+ 'A 0 means the object is good, a 1 means the '
+ 'object is bad.'))
+ options = parser.parse_args(argv)
+
+ obj_num = int(options.obj_num)
+ bad_obj_num = int(options.bad_obj_num)
+ bad_to_gen = int(options.bad_obj_num)
+ obj_list = options.obj_list
+ if not obj_list:
+ obj_list = []
+ for i in range(obj_num):
+ if bad_to_gen > 0 and random.randint(1, obj_num) <= bad_obj_num:
+ obj_list.append(1)
+ bad_to_gen -= 1
+ else:
+ obj_list.append(0)
+ while bad_to_gen > 0:
+ t = random.randint(0, obj_num - 1)
+ if obj_list[t] == 0:
+ obj_list[t] = 1
+ bad_to_gen -= 1
+ else:
+ obj_list = obj_list.split(',')
+
+ if os.path.isfile(common.OBJECTS_FILE):
+ os.remove(common.OBJECTS_FILE)
+ if os.path.isfile(common.WORKING_SET_FILE):
+ os.remove(common.WORKING_SET_FILE)
+
+ f = open(common.OBJECTS_FILE, 'w')
+ w = open(common.WORKING_SET_FILE, 'w')
+ for i in obj_list:
+ f.write('{0}\n'.format(i))
+ w.write('{0}\n'.format(i))
+ f.close()
+
+ obj_num = len(obj_list)
+ bad_obj_num = obj_list.count('1')
+ print('Generated {0} object files, with {1} bad ones.'.format(obj_num,
+ bad_obj_num))
+
+ return 0
+
+
+if __name__ == '__main__':
+ retval = Main(sys.argv[1:])
+ sys.exit(retval)
diff --git a/binary_search_tool/test/is_good.py b/binary_search_tool/test/is_good.py
new file mode 100755
index 00000000..bfe9cc32
--- /dev/null
+++ b/binary_search_tool/test/is_good.py
@@ -0,0 +1,24 @@
+#!/usr/bin/python2
+"""Check to see if the working set produces a good executable."""
+
+from __future__ import print_function
+
+import os
+import sys
+
+import common
+
+
+def Main():
+ if not os.path.exists('./is_setup'):
+ return 1
+ working_set = common.ReadWorkingSet()
+ for w in working_set:
+ if w == 1:
+ return 1 ## False, linking failure
+ return 0
+
+
+if __name__ == '__main__':
+ retval = Main()
+ sys.exit(retval)
diff --git a/binary_search_tool/test/is_good_noinc_prune.py b/binary_search_tool/test/is_good_noinc_prune.py
new file mode 100755
index 00000000..5aafd6c2
--- /dev/null
+++ b/binary_search_tool/test/is_good_noinc_prune.py
@@ -0,0 +1,46 @@
+#!/usr/bin/python2
+"""Check to see if the working set produces a good executable.
+
+This test script is made for the noincremental-prune test. This makes sure
+that, after pruning starts (>1 bad item is found), that the number of args sent
+to the switch scripts is equals to the actual number of items (i.e. checking
+that noincremental always holds).
+"""
+
+from __future__ import print_function
+
+import os
+import sys
+
+import common
+
+
+def Main():
+ working_set = common.ReadWorkingSet()
+
+ with open('noinc_prune_good', 'r') as good_args:
+ num_good_args = len(good_args.readlines())
+
+ with open('noinc_prune_bad', 'r') as bad_args:
+ num_bad_args = len(bad_args.readlines())
+
+ num_args = num_good_args + num_bad_args
+ if num_args != len(working_set):
+ print('Only %d args, expected %d' % (num_args, len(working_set)))
+ print('%d good args, %d bad args' % (num_good_args, num_bad_args))
+ return 3
+
+ os.remove('noinc_prune_bad')
+ os.remove('noinc_prune_good')
+
+ if not os.path.exists('./is_setup'):
+ return 1
+ for w in working_set:
+ if w == 1:
+ return 1 ## False, linking failure
+ return 0
+
+
+if __name__ == '__main__':
+ retval = Main()
+ sys.exit(retval)
diff --git a/binary_search_tool/test/switch_tmp.py b/binary_search_tool/test/switch_tmp.py
new file mode 100755
index 00000000..165004ed
--- /dev/null
+++ b/binary_search_tool/test/switch_tmp.py
@@ -0,0 +1,34 @@
+#!/usr/bin/python2
+"""Change portions of the object files to good.
+
+This file is a test switch script. Used only for the test test_tmp_cleanup.
+The "portion" is defined by the file (which is passed as the only argument to
+this script) content. Every line in the file is an object index, which will be
+set to good (mark as 42).
+"""
+
+from __future__ import print_function
+
+import sys
+
+import common
+
+
+def Main(argv):
+ working_set = common.ReadWorkingSet()
+ object_index = common.ReadObjectIndex(argv[1])
+
+ # Random number so the results can be checked
+ for oi in object_index:
+ working_set[int(oi)] = 42
+
+ common.WriteWorkingSet(working_set)
+ with open('tmp_file', 'w') as f:
+ f.write(argv[1])
+
+ return 0
+
+
+if __name__ == '__main__':
+ retval = Main(sys.argv)
+ sys.exit(retval)
diff --git a/binary_search_tool/test/switch_to_bad.py b/binary_search_tool/test/switch_to_bad.py
new file mode 100755
index 00000000..b8602421
--- /dev/null
+++ b/binary_search_tool/test/switch_to_bad.py
@@ -0,0 +1,27 @@
+#!/usr/bin/python2
+"""Switch part of the objects file in working set to (possible) bad ones."""
+
+from __future__ import print_function
+
+import sys
+
+import common
+
+
+def Main(argv):
+ """Switch part of the objects file in working set to (possible) bad ones."""
+ working_set = common.ReadWorkingSet()
+ objects_file = common.ReadObjectsFile()
+ object_index = common.ReadObjectIndex(argv[1])
+
+ for oi in object_index:
+ working_set[oi] = objects_file[oi]
+
+ common.WriteWorkingSet(working_set)
+
+ return 0
+
+
+if __name__ == '__main__':
+ retval = Main(sys.argv)
+ sys.exit(retval)
diff --git a/binary_search_tool/test/switch_to_bad_noinc_prune.py b/binary_search_tool/test/switch_to_bad_noinc_prune.py
new file mode 100755
index 00000000..87bf1584
--- /dev/null
+++ b/binary_search_tool/test/switch_to_bad_noinc_prune.py
@@ -0,0 +1,42 @@
+#!/usr/bin/python2
+"""Switch part of the objects file in working set to (possible) bad ones.
+
+The "portion" is defined by the file (which is passed as the only argument to
+this script) content. Every line in the file is an object index, which will be
+set to good (mark as 0).
+
+This switch script is made for the noincremental-prune test. This makes sure
+that, after pruning starts (>1 bad item is found), that the number of args sent
+to the switch scripts is equals to the actual number of items (i.e. checking
+that noincremental always holds).
+
+Warning: This switch script assumes the --file_args option
+"""
+
+from __future__ import print_function
+
+import shutil
+import sys
+
+import common
+
+
+def Main(argv):
+ """Switch part of the objects file in working set to (possible) bad ones."""
+ working_set = common.ReadWorkingSet()
+ objects_file = common.ReadObjectsFile()
+ object_index = common.ReadObjectIndex(argv[1])
+
+ for oi in object_index:
+ working_set[oi] = objects_file[oi]
+
+ shutil.copy(argv[1], './noinc_prune_bad')
+
+ common.WriteWorkingSet(working_set)
+
+ return 0
+
+
+if __name__ == '__main__':
+ retval = Main(sys.argv)
+ sys.exit(retval)
diff --git a/binary_search_tool/test/switch_to_bad_set_file.py b/binary_search_tool/test/switch_to_bad_set_file.py
new file mode 100755
index 00000000..f535fdfd
--- /dev/null
+++ b/binary_search_tool/test/switch_to_bad_set_file.py
@@ -0,0 +1,37 @@
+#!/usr/bin/python2
+"""Switch part of the objects file in working set to (possible) bad ones.
+
+This script is meant to be specifically used with the set_file test. This uses
+the set files generated by binary_search_state to do the switching.
+"""
+
+from __future__ import print_function
+
+import os
+import sys
+
+import common
+
+
+def Main(_):
+ """Switch part of the objects file in working set to (possible) bad ones."""
+ working_set = common.ReadWorkingSet()
+ objects_file = common.ReadObjectsFile()
+
+ if not os.path.exists(os.environ['BISECT_BAD_SET']):
+ print('Bad set file does not exist!')
+ return 1
+
+ object_index = common.ReadObjectIndex(os.environ['BISECT_BAD_SET'])
+
+ for oi in object_index:
+ working_set[int(oi)] = objects_file[oi]
+
+ common.WriteWorkingSet(working_set)
+
+ return 0
+
+
+if __name__ == '__main__':
+ retval = Main(sys.argv)
+ sys.exit(retval)
diff --git a/binary_search_tool/test/switch_to_good.py b/binary_search_tool/test/switch_to_good.py
new file mode 100755
index 00000000..68e9633f
--- /dev/null
+++ b/binary_search_tool/test/switch_to_good.py
@@ -0,0 +1,30 @@
+#!/usr/bin/python2
+"""Change portions of the object files to good.
+
+The "portion" is defined by the file (which is passed as the only argument to
+this script) content. Every line in the file is an object index, which will be
+set to good (mark as 0).
+"""
+
+from __future__ import print_function
+
+import sys
+
+import common
+
+
+def Main(argv):
+ working_set = common.ReadWorkingSet()
+ object_index = common.ReadObjectIndex(argv[1])
+
+ for oi in object_index:
+ working_set[int(oi)] = 0
+
+ common.WriteWorkingSet(working_set)
+
+ return 0
+
+
+if __name__ == '__main__':
+ retval = Main(sys.argv)
+ sys.exit(retval)
diff --git a/binary_search_tool/test/switch_to_good_noinc_prune.py b/binary_search_tool/test/switch_to_good_noinc_prune.py
new file mode 100755
index 00000000..c5e78e45
--- /dev/null
+++ b/binary_search_tool/test/switch_to_good_noinc_prune.py
@@ -0,0 +1,40 @@
+#!/usr/bin/python2
+"""Change portions of the object files to good.
+
+The "portion" is defined by the file (which is passed as the only argument to
+this script) content. Every line in the file is an object index, which will be
+set to good (mark as 0).
+
+This switch script is made for the noincremental-prune test. This makes sure
+that, after pruning starts (>1 bad item is found), that the number of args sent
+to the switch scripts is equals to the actual number of items (i.e. checking
+that noincremental always holds).
+
+Warning: This switch script assumes the --file_args option
+"""
+
+from __future__ import print_function
+
+import shutil
+import sys
+
+import common
+
+
+def Main(argv):
+ working_set = common.ReadWorkingSet()
+ object_index = common.ReadObjectIndex(argv[1])
+
+ for oi in object_index:
+ working_set[int(oi)] = 0
+
+ shutil.copy(argv[1], './noinc_prune_good')
+
+ common.WriteWorkingSet(working_set)
+
+ return 0
+
+
+if __name__ == '__main__':
+ retval = Main(sys.argv)
+ sys.exit(retval)
diff --git a/binary_search_tool/test/switch_to_good_set_file.py b/binary_search_tool/test/switch_to_good_set_file.py
new file mode 100755
index 00000000..83777af0
--- /dev/null
+++ b/binary_search_tool/test/switch_to_good_set_file.py
@@ -0,0 +1,39 @@
+#!/usr/bin/python2
+"""Change portions of the object files to good.
+
+The "portion" is defined by the file (which is passed as the only argument to
+this script) content. Every line in the file is an object index, which will be
+set to good (mark as 0).
+
+This script is meant to be specifically used with the set_file test. This uses
+the set files generated by binary_search_state to do the switching.
+"""
+
+from __future__ import print_function
+
+import os
+import sys
+
+import common
+
+
+def Main(_):
+ working_set = common.ReadWorkingSet()
+
+ if not os.path.exists(os.environ['BISECT_GOOD_SET']):
+ print('Good set file does not exist!')
+ return 1
+
+ object_index = common.ReadObjectIndex(os.environ['BISECT_GOOD_SET'])
+
+ for oi in object_index:
+ working_set[int(oi)] = 0
+
+ common.WriteWorkingSet(working_set)
+
+ return 0
+
+
+if __name__ == '__main__':
+ retval = Main(sys.argv)
+ sys.exit(retval)
diff --git a/binary_search_tool/test/test_setup.py b/binary_search_tool/test/test_setup.py
new file mode 100755
index 00000000..3fb5a23c
--- /dev/null
+++ b/binary_search_tool/test/test_setup.py
@@ -0,0 +1,19 @@
+#!/usr/bin/python2
+"""Emulate running of test setup script, is_good.py should fail without this."""
+
+from __future__ import print_function
+
+import sys
+
+
+def Main():
+ # create ./is_setup
+ with open('./is_setup', 'w'):
+ pass
+
+ return 0
+
+
+if __name__ == '__main__':
+ retval = Main()
+ sys.exit(retval)
diff --git a/binary_search_tool/test/test_setup_bad.py b/binary_search_tool/test/test_setup_bad.py
new file mode 100755
index 00000000..8d72763e
--- /dev/null
+++ b/binary_search_tool/test/test_setup_bad.py
@@ -0,0 +1,15 @@
+#!/usr/bin/python2
+"""Emulate test setup that fails (i.e. failed flash to device)"""
+
+from __future__ import print_function
+
+import sys
+
+
+def Main():
+ return 1 ## False, flashing failure
+
+
+if __name__ == '__main__':
+ retval = Main()
+ sys.exit(retval)
diff --git a/build-binutils/opts.sh b/build-binutils/opts.sh
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/build-binutils/opts.sh
diff --git a/build-gcc/opts.sh b/build-gcc/opts.sh
new file mode 100644
index 00000000..d1e6fadb
--- /dev/null
+++ b/build-gcc/opts.sh
@@ -0,0 +1,40 @@
+get_gcc_configure_options()
+{
+ local CTARGET=$1; shift
+ local confgcc=$(get_gcc_common_options)
+ case ${CTARGET} in
+ arm*) #264534
+ local arm_arch="${CTARGET%%-*}"
+ # Only do this if arm_arch is armv*
+ if [[ ${arm_arch} == armv* ]] ; then
+ # Convert armv7{a,r,m} to armv7-{a,r,m}
+ [[ ${arm_arch} == armv7? ]] && arm_arch=${arm_arch/7/7-}
+ # Remove endian ('l' / 'eb')
+ [[ ${arm_arch} == *l ]] && arm_arch=${arm_arch%l}
+ [[ ${arm_arch} == *eb ]] && arm_arch=${arm_arch%eb}
+ confgcc="${confgcc} --with-arch=${arm_arch}"
+ confgcc="${confgcc} --disable-esp"
+ fi
+ ;;
+ i?86*)
+ # Hardened is enabled for x86, but disabled for ARM.
+ confgcc="${confgcc} --with-arch=atom"
+ confgcc="${confgcc} --enable-esp"
+ ;;
+ esac
+ echo ${confgcc}
+}
+
+get_gcc_common_options()
+{
+ local confgcc
+ # TODO(asharif): Build without these options.
+ confgcc="${confgcc} --disable-libmudflap"
+ confgcc="${confgcc} --disable-libssp"
+ confgcc="${confgcc} --disable-libgomp"
+ confgcc="${confgcc} --enable-__cxa_atexit"
+ confgcc="${confgcc} --enable-checking=release"
+ confgcc="${confgcc} --disable-libquadmath"
+ echo ${confgcc}
+}
+
diff --git a/build_chrome_browser.py b/build_chrome_browser.py
new file mode 100755
index 00000000..8effa19d
--- /dev/null
+++ b/build_chrome_browser.py
@@ -0,0 +1,237 @@
+#!/usr/bin/python2
+#
+# Copyright 2010 Google Inc. All Rights Reserved.
+"""Script to checkout the ChromeOS source.
+
+This script sets up the ChromeOS source in the given directory, matching a
+particular release of ChromeOS.
+"""
+
+from __future__ import print_function
+
+__author__ = 'raymes@google.com (Raymes Khoury)'
+
+import argparse
+import os
+import sys
+
+from cros_utils import command_executer
+from cros_utils import logger
+from cros_utils import misc
+
+
+def Usage(parser, message):
+ print('ERROR: %s' % message)
+ parser.print_help()
+ sys.exit(0)
+
+
+def Main(argv):
+ """Build Chrome browser."""
+
+ cmd_executer = command_executer.GetCommandExecuter()
+
+ parser = argparse.ArgumentParser()
+ parser.add_argument('--chromeos_root',
+ dest='chromeos_root',
+ help='Target directory for ChromeOS installation.')
+ parser.add_argument('--version', dest='version')
+ parser.add_argument('--clean',
+ dest='clean',
+ default=False,
+ action='store_true',
+ help=('Clean the /var/cache/chromeos-chrome/'
+ 'chrome-src/src/out_$board dir'))
+ parser.add_argument('--env',
+ dest='env',
+ default='',
+ help='Use the following env')
+ parser.add_argument('--ebuild_version',
+ dest='ebuild_version',
+ help='Use this ebuild instead of the default one.')
+ parser.add_argument('--cflags',
+ dest='cflags',
+ default='',
+ help='CFLAGS for the ChromeOS packages')
+ parser.add_argument('--cxxflags',
+ dest='cxxflags',
+ default='',
+ help='CXXFLAGS for the ChromeOS packages')
+ parser.add_argument('--ldflags',
+ dest='ldflags',
+ default='',
+ help='LDFLAGS for the ChromeOS packages')
+ parser.add_argument('--board',
+ dest='board',
+ help='ChromeOS target board, e.g. x86-generic')
+ parser.add_argument('--no_build_image',
+ dest='no_build_image',
+ default=False,
+ action='store_true',
+ help=('Skip build image after building browser.'
+ 'Defaults to False.'))
+ parser.add_argument('--label',
+ dest='label',
+ help='Optional label to apply to the ChromeOS image.')
+ parser.add_argument('--build_image_args',
+ default='',
+ dest='build_image_args',
+ help='Optional arguments to build_image.')
+ parser.add_argument('--cros_workon',
+ dest='cros_workon',
+ help='Build using external source tree.')
+ parser.add_argument('--dev',
+ dest='dev',
+ default=False,
+ action='store_true',
+ help=('Build a dev (eg. writable/large) image. '
+ 'Defaults to False.'))
+ parser.add_argument('--debug',
+ dest='debug',
+ default=False,
+ action='store_true',
+ help=('Build chrome browser using debug mode. '
+ 'This option implies --dev. Defaults to false.'))
+ parser.add_argument('--verbose',
+ dest='verbose',
+ default=False,
+ action='store_true',
+ help='Build with verbose information.')
+
+ options = parser.parse_args(argv)
+
+ if options.chromeos_root is None:
+ Usage(parser, '--chromeos_root must be set')
+
+ if options.board is None:
+ Usage(parser, '--board must be set')
+
+ if options.version is None:
+ logger.GetLogger().LogOutput('No Chrome version given so '
+ 'using the default checked in version.')
+ chrome_version = ''
+ else:
+ chrome_version = 'CHROME_VERSION=%s' % options.version
+
+ if options.dev and options.no_build_image:
+ logger.GetLogger().LogOutput(
+ "\"--dev\" is meaningless if \"--no_build_image\" is given.")
+
+ if options.debug:
+ options.dev = True
+
+ options.chromeos_root = misc.CanonicalizePath(options.chromeos_root)
+
+ unmask_env = 'ACCEPT_KEYWORDS=~*'
+ if options.ebuild_version:
+ ebuild_version = '=%s' % options.ebuild_version
+ options.env = '%s %s' % (options.env, unmask_env)
+ else:
+ ebuild_version = 'chromeos-chrome'
+
+ if options.cros_workon and not (
+ os.path.isdir(options.cros_workon) and os.path.exists(os.path.join(
+ options.cros_workon, 'src/chromeos/chromeos.gyp'))):
+ Usage(parser, '--cros_workon must be a valid chromium browser checkout.')
+
+ if options.verbose:
+ options.env = misc.MergeEnvStringWithDict(
+ options.env, {'USE': 'chrome_internal verbose'})
+ else:
+ options.env = misc.MergeEnvStringWithDict(options.env,
+ {'USE': 'chrome_internal'})
+ if options.debug:
+ options.env = misc.MergeEnvStringWithDict(options.env,
+ {'BUILDTYPE': 'Debug'})
+
+ if options.clean:
+ misc.RemoveChromeBrowserObjectFiles(options.chromeos_root, options.board)
+
+ chrome_origin = 'SERVER_SOURCE'
+ if options.cros_workon:
+ chrome_origin = 'LOCAL_SOURCE'
+ command = 'cros_workon --board={0} start chromeos-chrome'.format(
+ options.board)
+ ret = cmd_executer.ChrootRunCommandWOutput(options.chromeos_root, command)
+
+ # cros_workon start returns non-zero if chromeos-chrome is already a
+ # cros_workon package.
+ if ret[0] and ret[2].find(
+ 'WARNING : Already working on chromeos-base/chromeos-chrome') == -1:
+ logger.GetLogger().LogFatal('cros_workon chromeos-chrome failed.')
+
+ # Return value is non-zero means we do find the "Already working on..."
+ # message, keep the information, so later on we do not revert the
+ # cros_workon status.
+ cros_workon_keep = (ret[0] != 0)
+
+ # Emerge the browser
+ emerge_browser_command = ('CHROME_ORIGIN={0} {1} '
+ 'CFLAGS="$(portageq-{2} envvar CFLAGS) {3}" '
+ 'LDFLAGS="$(portageq-{2} envvar LDFLAGS) {4}" '
+ 'CXXFLAGS="$(portageq-{2} envvar CXXFLAGS) {5}" '
+ '{6} emerge-{2} --buildpkg {7}').format(
+ chrome_origin, chrome_version, options.board,
+ options.cflags, options.ldflags,
+ options.cxxflags, options.env, ebuild_version)
+
+ cros_sdk_options = ''
+ if options.cros_workon:
+ cros_sdk_options = '--chrome_root={0}'.format(options.cros_workon)
+
+ ret = cmd_executer.ChrootRunCommand(options.chromeos_root,
+ emerge_browser_command,
+ cros_sdk_options=cros_sdk_options)
+
+ logger.GetLogger().LogFatalIf(ret, 'build_packages failed')
+
+ if options.cros_workon and not cros_workon_keep:
+ command = 'cros_workon --board={0} stop chromeos-chrome'.format(
+ options.board)
+ ret = cmd_executer.ChrootRunCommand(options.chromeos_root, command)
+ # cros_workon failed, not a fatal one, just report it.
+ if ret:
+ print('cros_workon stop chromeos-chrome failed.')
+
+ if options.no_build_image:
+ return ret
+
+ # Finally build the image
+ ret = cmd_executer.ChrootRunCommand(
+ options.chromeos_root,
+ '{0} {1} {2} {3}'.format(unmask_env,
+ options.env,
+ misc.GetBuildImageCommand(options.board,
+ dev=options.dev),
+ options.build_image_args))
+
+ logger.GetLogger().LogFatalIf(ret, 'build_image failed')
+
+ flags_file_name = 'chrome_flags.txt'
+ flags_file_path = '{0}/src/build/images/{1}/latest/{2}'.format(
+ options.chromeos_root, options.board, flags_file_name)
+ flags_file = open(flags_file_path, 'wb')
+ flags_file.write('CFLAGS={0}\n'.format(options.cflags))
+ flags_file.write('CXXFLAGS={0}\n'.format(options.cxxflags))
+ flags_file.write('LDFLAGS={0}\n'.format(options.ldflags))
+ flags_file.close()
+
+ if options.label:
+ image_dir_path = '{0}/src/build/images/{1}/latest'.format(
+ options.chromeos_root, options.board)
+ real_image_dir_path = os.path.realpath(image_dir_path)
+ command = 'ln -sf -T {0} {1}/{2}'.format(
+ os.path.basename(real_image_dir_path),\
+ os.path.dirname(real_image_dir_path),\
+ options.label)
+
+ ret = cmd_executer.RunCommand(command)
+ logger.GetLogger().LogFatalIf(ret, 'Failed to apply symlink label %s' %
+ options.label)
+
+ return ret
+
+
+if __name__ == '__main__':
+ retval = Main(sys.argv[1:])
+ sys.exit(retval)
diff --git a/build_chromeos.py b/build_chromeos.py
new file mode 100755
index 00000000..cb68fd00
--- /dev/null
+++ b/build_chromeos.py
@@ -0,0 +1,280 @@
+#!/usr/bin/python2
+#
+# Copyright 2010 Google Inc. All Rights Reserved.
+"""Script to checkout the ChromeOS source.
+
+This script sets up the ChromeOS source in the given directory, matching a
+particular release of ChromeOS.
+"""
+
+from __future__ import print_function
+
+__author__ = ('asharif@google.com (Ahmad Sharif) '
+ 'llozano@google.com (Luis Lozano) '
+ 'raymes@google.com (Raymes Khoury) '
+ 'shenhan@google.com (Han Shen)')
+
+import argparse
+import os
+import sys
+
+from cros_utils import command_executer
+from cros_utils import logger
+from cros_utils import misc
+
+
+def Usage(parser, message):
+ print('ERROR: %s' % message)
+ parser.print_help()
+ sys.exit(0)
+
+
+def Main(argv):
+ """Build ChromeOS."""
+ # Common initializations
+ cmd_executer = command_executer.GetCommandExecuter()
+
+ parser = argparse.ArgumentParser()
+ parser.add_argument('--chromeos_root',
+ dest='chromeos_root',
+ help='Target directory for ChromeOS installation.')
+ parser.add_argument('--clobber_chroot',
+ dest='clobber_chroot',
+ action='store_true',
+ help='Delete the chroot and start fresh',
+ default=False)
+ parser.add_argument('--clobber_board',
+ dest='clobber_board',
+ action='store_true',
+ help='Delete the board and start fresh',
+ default=False)
+ parser.add_argument('--rebuild',
+ dest='rebuild',
+ action='store_true',
+ help='Rebuild all board packages except the toolchain.',
+ default=False)
+ parser.add_argument('--cflags',
+ dest='cflags',
+ default='',
+ help='CFLAGS for the ChromeOS packages')
+ parser.add_argument('--cxxflags',
+ dest='cxxflags',
+ default='',
+ help='CXXFLAGS for the ChromeOS packages')
+ parser.add_argument('--ldflags',
+ dest='ldflags',
+ default='',
+ help='LDFLAGS for the ChromeOS packages')
+ parser.add_argument('--board',
+ dest='board',
+ help='ChromeOS target board, e.g. x86-generic')
+ parser.add_argument('--package',
+ dest='package',
+ help='The package needs to be built')
+ parser.add_argument('--label',
+ dest='label',
+ help='Optional label symlink to point to build dir.')
+ parser.add_argument('--dev',
+ dest='dev',
+ default=False,
+ action='store_true',
+ help=('Make the final image in dev mode (eg writable, '
+ 'more space on image). Defaults to False.'))
+ parser.add_argument('--debug',
+ dest='debug',
+ default=False,
+ action='store_true',
+ help=("Optional. Build chrome browser with \"-g -O0\". "
+ "Notice, this also turns on \'--dev\'. "
+ 'Defaults to False.'))
+ parser.add_argument('--env',
+ dest='env',
+ default='',
+ help='Env to pass to build_packages.')
+ parser.add_argument('--vanilla',
+ dest='vanilla',
+ default=False,
+ action='store_true',
+ help='Use default ChromeOS toolchain.')
+ parser.add_argument('--vanilla_image',
+ dest='vanilla_image',
+ default=False,
+ action='store_true',
+ help=('Use prebuild packages for building the image. '
+ 'It also implies the --vanilla option is set.'))
+
+ options = parser.parse_args(argv[1:])
+
+ if options.chromeos_root is None:
+ Usage(parser, '--chromeos_root must be set')
+ options.chromeos_root = os.path.expanduser(options.chromeos_root)
+ scripts_dir = os.path.join(options.chromeos_root, 'src', 'scripts')
+ if not os.path.isdir(scripts_dir):
+ Usage(parser, '--chromeos_root must be set up first. Use setup_chromeos.py')
+
+ if options.board is None:
+ Usage(parser, '--board must be set')
+
+ if options.debug:
+ options.dev = True
+
+ build_packages_env = options.env
+ if build_packages_env.find('EXTRA_BOARD_FLAGS=') != -1:
+ logger.GetLogger().LogFatal(
+ ('Passing "EXTRA_BOARD_FLAGS" in "--env" is not supported. '
+ 'This flags is used internally by this script. '
+ 'Contact the author for more detail.'))
+
+ if options.rebuild == True:
+ build_packages_env += ' EXTRA_BOARD_FLAGS=-e'
+ # EXTRA_BOARD_FLAGS=-e should clean up the object files for the chrome
+ # browser but it doesn't. So do it here.
+ misc.RemoveChromeBrowserObjectFiles(options.chromeos_root, options.board)
+
+ # Build with afdo_use by default.
+ # To change the default use --env="USE=-afdo_use".
+ build_packages_env = misc.MergeEnvStringWithDict(
+ build_packages_env, {'USE': 'chrome_internal afdo_use'})
+
+ build_packages_command = misc.GetBuildPackagesCommand(
+ board=options.board,
+ usepkg=options.vanilla_image,
+ debug=options.debug)
+
+ if options.package:
+ build_packages_command += ' {0}'.format(options.package)
+
+ build_image_command = misc.GetBuildImageCommand(options.board, options.dev)
+
+ if options.vanilla or options.vanilla_image:
+ command = misc.GetSetupBoardCommand(options.board,
+ usepkg=options.vanilla_image,
+ force=options.clobber_board)
+ command += '; ' + build_packages_env + ' ' + build_packages_command
+ command += '&& ' + build_packages_env + ' ' + build_image_command
+ ret = cmd_executer.ChrootRunCommand(options.chromeos_root, command)
+ return ret
+
+ # Setup board
+ if not os.path.isdir(options.chromeos_root + '/chroot/build/' +
+ options.board) or options.clobber_board:
+ # Run build_tc.py from binary package
+ ret = cmd_executer.ChrootRunCommand(options.chromeos_root,
+ misc.GetSetupBoardCommand(
+ options.board,
+ force=options.clobber_board))
+ logger.GetLogger().LogFatalIf(ret, 'setup_board failed')
+ else:
+ logger.GetLogger().LogOutput('Did not setup_board '
+ 'because it already exists')
+
+ if options.debug:
+ # Perform 2-step build_packages to build a debug chrome browser.
+
+ # Firstly, build everything that chromeos-chrome depends on normally.
+ if options.rebuild == True:
+ # Give warning about "--rebuild" and "--debug". Under this combination,
+ # only dependencies of "chromeos-chrome" get rebuilt.
+ logger.GetLogger().LogWarning(
+ "\"--rebuild\" does not correctly re-build every package when "
+ "\"--debug\" is enabled. ")
+
+ # Replace EXTRA_BOARD_FLAGS=-e with "-e --onlydeps"
+ build_packages_env = build_packages_env.replace(
+ 'EXTRA_BOARD_FLAGS=-e', 'EXTRA_BOARD_FLAGS=\"-e --onlydeps\"')
+ else:
+ build_packages_env += ' EXTRA_BOARD_FLAGS=--onlydeps'
+
+ ret = cmd_executer.ChrootRunCommand(
+ options.chromeos_root, "CFLAGS=\"$(portageq-%s envvar CFLAGS) %s\" "
+ "CXXFLAGS=\"$(portageq-%s envvar CXXFLAGS) %s\" "
+ "LDFLAGS=\"$(portageq-%s envvar LDFLAGS) %s\" "
+ 'CHROME_ORIGIN=SERVER_SOURCE '
+ '%s '
+ '%s --skip_chroot_upgrade'
+ 'chromeos-chrome' % (options.board, options.cflags, options.board,
+ options.cxxflags, options.board, options.ldflags,
+ build_packages_env, build_packages_command))
+
+ logger.GetLogger().LogFatalIf(\
+ ret, 'build_packages failed while trying to build chromeos-chrome deps.')
+
+ # Secondly, build chromeos-chrome using debug mode.
+ # Replace '--onlydeps' with '--nodeps'.
+ if options.rebuild == True:
+ build_packages_env = build_packages_env.replace(
+ 'EXTRA_BOARD_FLAGS=\"-e --onlydeps\"', 'EXTRA_BOARD_FLAGS=--nodeps')
+ else:
+ build_packages_env = build_packages_env.replace(
+ 'EXTRA_BOARD_FLAGS=--onlydeps', 'EXTRA_BOARD_FLAGS=--nodeps')
+ ret = cmd_executer.ChrootRunCommand(
+ options.chromeos_root, "CFLAGS=\"$(portageq-%s envvar CFLAGS) %s\" "
+ "CXXFLAGS=\"$(portageq-%s envvar CXXFLAGS) %s\" "
+ "LDFLAGS=\"$(portageq-%s envvar LDFLAGS) %s\" "
+ 'CHROME_ORIGIN=SERVER_SOURCE BUILDTYPE=Debug '
+ '%s '
+ '%s --skip_chroot_upgrade'
+ 'chromeos-chrome' % (options.board, options.cflags, options.board,
+ options.cxxflags, options.board, options.ldflags,
+ build_packages_env, build_packages_command))
+ logger.GetLogger().LogFatalIf(
+ ret,
+ 'build_packages failed while trying to build debug chromeos-chrome.')
+
+ # Now, we have built chromeos-chrome and all dependencies.
+ # Finally, remove '-e' from EXTRA_BOARD_FLAGS,
+ # otherwise, chromeos-chrome gets rebuilt.
+ build_packages_env = build_packages_env.replace(\
+ 'EXTRA_BOARD_FLAGS=--nodeps', '')
+
+ # Up to now, we have a debug built chromos-chrome browser.
+ # Fall through to build the rest of the world.
+
+ # Build packages
+ ret = cmd_executer.ChrootRunCommand(
+ options.chromeos_root, "CFLAGS=\"$(portageq-%s envvar CFLAGS) %s\" "
+ "CXXFLAGS=\"$(portageq-%s envvar CXXFLAGS) %s\" "
+ "LDFLAGS=\"$(portageq-%s envvar LDFLAGS) %s\" "
+ 'CHROME_ORIGIN=SERVER_SOURCE '
+ '%s '
+ '%s --skip_chroot_upgrade' % (options.board, options.cflags,
+ options.board, options.cxxflags,
+ options.board, options.ldflags,
+ build_packages_env, build_packages_command))
+
+ logger.GetLogger().LogFatalIf(ret, 'build_packages failed')
+ if options.package:
+ return 0
+ # Build image
+ ret = cmd_executer.ChrootRunCommand(
+ options.chromeos_root, build_packages_env + ' ' + build_image_command)
+
+ logger.GetLogger().LogFatalIf(ret, 'build_image failed')
+
+ flags_file_name = 'flags.txt'
+ flags_file_path = ('%s/src/build/images/%s/latest/%s' %
+ (options.chromeos_root, options.board, flags_file_name))
+ flags_file = open(flags_file_path, 'wb')
+ flags_file.write('CFLAGS=%s\n' % options.cflags)
+ flags_file.write('CXXFLAGS=%s\n' % options.cxxflags)
+ flags_file.write('LDFLAGS=%s\n' % options.ldflags)
+ flags_file.close()
+
+ if options.label:
+ image_dir_path = ('%s/src/build/images/%s/latest' % (options.chromeos_root,
+ options.board))
+ real_image_dir_path = os.path.realpath(image_dir_path)
+ command = ('ln -sf -T %s %s/%s' %
+ (os.path.basename(real_image_dir_path),
+ os.path.dirname(real_image_dir_path), options.label))
+
+ ret = cmd_executer.RunCommand(command)
+ logger.GetLogger().LogFatalIf(ret, 'Failed to apply symlink label %s' %
+ options.label)
+
+ return ret
+
+
+if __name__ == '__main__':
+ retval = Main(sys.argv)
+ sys.exit(retval)
diff --git a/build_tc.py b/build_tc.py
new file mode 100755
index 00000000..55fc5b70
--- /dev/null
+++ b/build_tc.py
@@ -0,0 +1,337 @@
+#!/usr/bin/python2
+#
+# Copyright 2010 The Chromium OS Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+"""Script to build the ChromeOS toolchain.
+
+This script sets up the toolchain if you give it the gcctools directory.
+"""
+
+from __future__ import print_function
+
+__author__ = 'asharif@google.com (Ahmad Sharif)'
+
+import argparse
+import getpass
+import os
+import sys
+import tempfile
+
+import tc_enter_chroot
+from cros_utils import command_executer
+from cros_utils import constants
+from cros_utils import misc
+
+
+class ToolchainPart(object):
+ """Class to hold the toolchain pieces."""
+
+ def __init__(self,
+ name,
+ source_path,
+ chromeos_root,
+ board,
+ incremental,
+ build_env,
+ gcc_enable_ccache=False):
+ self._name = name
+ self._source_path = misc.CanonicalizePath(source_path)
+ self._chromeos_root = chromeos_root
+ self._board = board
+ self._ctarget = misc.GetCtargetFromBoard(self._board, self._chromeos_root)
+ self._gcc_libs_dest = misc.GetGccLibsDestForBoard(self._board,
+ self._chromeos_root)
+ self.tag = '%s-%s' % (name, self._ctarget)
+ self._ce = command_executer.GetCommandExecuter()
+ self._mask_file = os.path.join(self._chromeos_root, 'chroot',
+ 'etc/portage/package.mask/cross-%s' %
+ self._ctarget)
+ self._new_mask_file = None
+
+ self._chroot_source_path = os.path.join(constants.MOUNTED_TOOLCHAIN_ROOT,
+ self._name).lstrip('/')
+ self._incremental = incremental
+ self._build_env = build_env
+ self._gcc_enable_ccache = gcc_enable_ccache
+
+ def RunSetupBoardIfNecessary(self):
+ cross_symlink = os.path.join(self._chromeos_root, 'chroot',
+ 'usr/local/bin/emerge-%s' % self._board)
+ if not os.path.exists(cross_symlink):
+ command = ('%s/setup_board --board=%s' %
+ (misc.CHROMEOS_SCRIPTS_DIR, self._board))
+ self._ce.ChrootRunCommand(self._chromeos_root, command)
+
+ def Build(self):
+ rv = 1
+ try:
+ self.UninstallTool()
+ self.MoveMaskFile()
+ self.MountSources(False)
+ self.RemoveCompiledFile()
+ rv = self.BuildTool()
+ finally:
+ self.UnMoveMaskFile()
+ return rv
+
+ def RemoveCompiledFile(self):
+ compiled_file = os.path.join(self._chromeos_root, 'chroot',
+ 'var/tmp/portage/cross-%s' % self._ctarget,
+ '%s-9999' % self._name, '.compiled')
+ command = 'rm -f %s' % compiled_file
+ self._ce.RunCommand(command)
+
+ def MountSources(self, unmount_source):
+ mount_points = []
+ mounted_source_path = os.path.join(self._chromeos_root, 'chroot',
+ self._chroot_source_path)
+ src_mp = tc_enter_chroot.MountPoint(self._source_path, mounted_source_path,
+ getpass.getuser(), 'ro')
+ mount_points.append(src_mp)
+
+ build_suffix = 'build-%s' % self._ctarget
+ build_dir = '%s-%s' % (self._source_path, build_suffix)
+
+ if not self._incremental and os.path.exists(build_dir):
+ command = 'rm -rf %s/*' % build_dir
+ self._ce.RunCommand(command)
+
+ # Create a -build directory for the objects.
+ command = 'mkdir -p %s' % build_dir
+ self._ce.RunCommand(command)
+
+ mounted_build_dir = os.path.join(self._chromeos_root, 'chroot', '%s-%s' %
+ (self._chroot_source_path, build_suffix))
+ build_mp = tc_enter_chroot.MountPoint(build_dir, mounted_build_dir,
+ getpass.getuser())
+ mount_points.append(build_mp)
+
+ if unmount_source:
+ unmount_statuses = [mp.UnMount() == 0 for mp in mount_points]
+ assert all(unmount_statuses), 'Could not unmount all mount points!'
+ else:
+ mount_statuses = [mp.DoMount() == 0 for mp in mount_points]
+
+ if not all(mount_statuses):
+ mounted = [mp
+ for mp, status in zip(mount_points, mount_statuses)
+ if status]
+ unmount_statuses = [mp.UnMount() == 0 for mp in mounted]
+ assert all(unmount_statuses), 'Could not unmount all mount points!'
+
+ def UninstallTool(self):
+ command = 'sudo CLEAN_DELAY=0 emerge -C cross-%s/%s' % (self._ctarget,
+ self._name)
+ self._ce.ChrootRunCommand(self._chromeos_root, command)
+
+ def BuildTool(self):
+ env = self._build_env
+ # FEATURES=buildpkg adds minutes of time so we disable it.
+ # TODO(shenhan): keep '-sandbox' for a while for compatibility, then remove
+ # it after a while.
+ features = ('nostrip userpriv userfetch -usersandbox -sandbox noclean '
+ '-buildpkg')
+ env['FEATURES'] = features
+
+ if self._incremental:
+ env['FEATURES'] += ' keepwork'
+
+ if 'USE' in env:
+ env['USE'] += ' multislot mounted_%s' % self._name
+ else:
+ env['USE'] = 'multislot mounted_%s' % self._name
+
+ # Disable ccache in our compilers. cache may be problematic for us.
+ # It ignores compiler environments settings and it is not clear if
+ # the cache hit algorithm verifies all the compiler binaries or
+ # just the driver.
+ if self._name == 'gcc' and not self._gcc_enable_ccache:
+ env['USE'] += ' -wrapper_ccache'
+
+ env['%s_SOURCE_PATH' % self._name.upper()] = (
+ os.path.join('/', self._chroot_source_path))
+ env['ACCEPT_KEYWORDS'] = '~*'
+ env_string = ' '.join(["%s=\"%s\"" % var for var in env.items()])
+ command = 'emerge =cross-%s/%s-9999' % (self._ctarget, self._name)
+ full_command = 'sudo %s %s' % (env_string, command)
+ rv = self._ce.ChrootRunCommand(self._chromeos_root, full_command)
+ if rv != 0:
+ return rv
+ if self._name == 'gcc':
+ command = ('sudo cp -r /usr/lib/gcc/%s %s' %
+ (self._ctarget, self._gcc_libs_dest))
+ rv = self._ce.ChrootRunCommand(self._chromeos_root, command)
+ return rv
+
+ def MoveMaskFile(self):
+ self._new_mask_file = None
+ if os.path.isfile(self._mask_file):
+ self._new_mask_file = tempfile.mktemp()
+ command = 'sudo mv %s %s' % (self._mask_file, self._new_mask_file)
+ self._ce.RunCommand(command)
+
+ def UnMoveMaskFile(self):
+ if self._new_mask_file:
+ command = 'sudo mv %s %s' % (self._new_mask_file, self._mask_file)
+ self._ce.RunCommand(command)
+
+
+def Main(argv):
+ """The main function."""
+ # Common initializations
+ parser = argparse.ArgumentParser()
+ parser.add_argument('-c',
+ '--chromeos_root',
+ dest='chromeos_root',
+ default='../../',
+ help=('ChromeOS root checkout directory'
+ ' uses ../.. if none given.'))
+ parser.add_argument('-g',
+ '--gcc_dir',
+ dest='gcc_dir',
+ help='The directory where gcc resides.')
+ parser.add_argument('--binutils_dir',
+ dest='binutils_dir',
+ help='The directory where binutils resides.')
+ parser.add_argument('-x',
+ '--gdb_dir',
+ dest='gdb_dir',
+ help='The directory where gdb resides.')
+ parser.add_argument('-b',
+ '--board',
+ dest='board',
+ default='x86-alex',
+ help='The target board.')
+ parser.add_argument('-n',
+ '--noincremental',
+ dest='noincremental',
+ default=False,
+ action='store_true',
+ help='Use FEATURES=keepwork to do incremental builds.')
+ parser.add_argument('--cflags',
+ dest='cflags',
+ default='',
+ help='Build a compiler with specified CFLAGS')
+ parser.add_argument('--cxxflags',
+ dest='cxxflags',
+ default='',
+ help='Build a compiler with specified CXXFLAGS')
+ parser.add_argument('--cflags_for_target',
+ dest='cflags_for_target',
+ default='',
+ help='Build the target libraries with specified flags')
+ parser.add_argument('--cxxflags_for_target',
+ dest='cxxflags_for_target',
+ default='',
+ help='Build the target libraries with specified flags')
+ parser.add_argument('--ldflags',
+ dest='ldflags',
+ default='',
+ help='Build a compiler with specified LDFLAGS')
+ parser.add_argument('-d',
+ '--debug',
+ dest='debug',
+ default=False,
+ action='store_true',
+ help='Build a compiler with -g3 -O0 appended to both'
+ ' CFLAGS and CXXFLAGS.')
+ parser.add_argument('-m',
+ '--mount_only',
+ dest='mount_only',
+ default=False,
+ action='store_true',
+ help='Just mount the tool directories.')
+ parser.add_argument('-u',
+ '--unmount_only',
+ dest='unmount_only',
+ default=False,
+ action='store_true',
+ help='Just unmount the tool directories.')
+ parser.add_argument('--extra_use_flags',
+ dest='extra_use_flags',
+ default='',
+ help='Extra flag for USE, to be passed to the ebuild. '
+ "('multislot' and 'mounted_<tool>' are always passed.)")
+ parser.add_argument('--gcc_enable_ccache',
+ dest='gcc_enable_ccache',
+ default=False,
+ action='store_true',
+ help='Enable ccache for the gcc invocations')
+
+ options = parser.parse_args(argv)
+
+ chromeos_root = misc.CanonicalizePath(options.chromeos_root)
+ if options.gcc_dir:
+ gcc_dir = misc.CanonicalizePath(options.gcc_dir)
+ assert gcc_dir and os.path.isdir(gcc_dir), 'gcc_dir does not exist!'
+ if options.binutils_dir:
+ binutils_dir = misc.CanonicalizePath(options.binutils_dir)
+ assert os.path.isdir(binutils_dir), 'binutils_dir does not exist!'
+ if options.gdb_dir:
+ gdb_dir = misc.CanonicalizePath(options.gdb_dir)
+ assert os.path.isdir(gdb_dir), 'gdb_dir does not exist!'
+ if options.unmount_only:
+ options.mount_only = False
+ elif options.mount_only:
+ options.unmount_only = False
+ build_env = {}
+ if options.cflags:
+ build_env['CFLAGS'] = '`portageq envvar CFLAGS` ' + options.cflags
+ if options.cxxflags:
+ build_env['CXXFLAGS'] = '`portageq envvar CXXFLAGS` ' + options.cxxflags
+ if options.cflags_for_target:
+ build_env['CFLAGS_FOR_TARGET'] = options.cflags_for_target
+ if options.cxxflags_for_target:
+ build_env['CXXFLAGS_FOR_TARGET'] = options.cxxflags_for_target
+ if options.ldflags:
+ build_env['LDFLAGS'] = options.ldflags
+ if options.debug:
+ debug_flags = '-g3 -O0'
+ if 'CFLAGS' in build_env:
+ build_env['CFLAGS'] += ' %s' % (debug_flags)
+ else:
+ build_env['CFLAGS'] = debug_flags
+ if 'CXXFLAGS' in build_env:
+ build_env['CXXFLAGS'] += ' %s' % (debug_flags)
+ else:
+ build_env['CXXFLAGS'] = debug_flags
+ if options.extra_use_flags:
+ build_env['USE'] = options.extra_use_flags
+
+ # Create toolchain parts
+ toolchain_parts = {}
+ for board in options.board.split(','):
+ if options.gcc_dir:
+ tp = ToolchainPart('gcc', gcc_dir, chromeos_root, board,
+ not options.noincremental, build_env,
+ options.gcc_enable_ccache)
+ toolchain_parts[tp.tag] = tp
+ tp.RunSetupBoardIfNecessary()
+ if options.binutils_dir:
+ tp = ToolchainPart('binutils', binutils_dir, chromeos_root, board,
+ not options.noincremental, build_env)
+ toolchain_parts[tp.tag] = tp
+ tp.RunSetupBoardIfNecessary()
+ if options.gdb_dir:
+ tp = ToolchainPart('gdb', gdb_dir, chromeos_root, board,
+ not options.noincremental, build_env)
+ toolchain_parts[tp.tag] = tp
+ tp.RunSetupBoardIfNecessary()
+
+ rv = 0
+ try:
+ for tag in toolchain_parts:
+ tp = toolchain_parts[tag]
+ if options.mount_only or options.unmount_only:
+ tp.MountSources(options.unmount_only)
+ else:
+ rv = rv + tp.Build()
+ finally:
+ print('Exiting...')
+ return rv
+
+
+if __name__ == '__main__':
+ retval = Main(sys.argv[1:])
+ sys.exit(retval)
diff --git a/build_tool.py b/build_tool.py
new file mode 100755
index 00000000..1df46952
--- /dev/null
+++ b/build_tool.py
@@ -0,0 +1,853 @@
+#!/usr/bin/python2
+"""Script to bootstrap the chroot using new toolchain.
+
+This script allows you to build/install a customized version of gcc/binutils,
+either by specifying branch or a local directory.
+
+This script must be executed outside chroot.
+
+Below is some typical usage -
+
+## Build gcc located at /local/gcc/dir and do a bootstrap using the new
+## compiler for the chromeos root. The script tries to find a valid chromeos
+## tree all the way up from your current working directory.
+./build_tool.py --gcc_dir=/loca/gcc/dir --bootstrap
+
+## Build binutils, using remote branch "mobile_toolchain_v17" and do a
+## bootstrap using the new binutils for the chromeos root. The script tries to
+## find a valid chromeos tree all the way up from your current working
+## directory.
+./build_tool.py --binutils_branch=cros/mobile_toolchain_v17 \
+ --chromeos_root=/chromeos/dir --bootstrap
+
+## Same as above except only do it for board daisy - no bootstrapping involved.
+./build_tool.py --binutils_branch=cros/mobile_toolchain_v16 \
+ --chromeos_root=/chromeos/dir --board=daisy
+"""
+
+from __future__ import print_function
+
+__author__ = 'shenhan@google.com (Han Shen)'
+
+import argparse
+import os
+import re
+import sys
+
+
+from cros_utils import command_executer
+from cros_utils import logger
+from cros_utils import misc
+import repo_to_repo
+
+REPO_PATH_PATTERN = 'src/third_party/{0}'
+TEMP_BRANCH_NAME = 'internal_testing_branch_no_use'
+CHROMIUMOS_OVERLAY_PATH = 'src/third_party/chromiumos-overlay'
+EBUILD_PATH_PATTERN = 'src/third_party/chromiumos-overlay/sys-devel/{0}'
+
+
+class Bootstrapper(object):
+ """Class that handles bootstrap process."""
+
+ def __init__(self,
+ chromeos_root,
+ ndk_dir,
+ gcc_branch=None,
+ gcc_dir=None,
+ binutils_branch=None,
+ binutils_dir=None,
+ board=None,
+ disable_2nd_bootstrap=False,
+ setup_tool_ebuild_file_only=False):
+ self._chromeos_root = chromeos_root
+ self._ndk_dir = ndk_dir
+
+ self._gcc_branch = gcc_branch
+ self._gcc_branch_tree = None
+ self._gcc_dir = gcc_dir
+ self._gcc_ebuild_file = None
+ self._gcc_ebuild_file_name = None
+
+ self._binutils_branch = binutils_branch
+ self._binutils_branch_tree = None
+ self._binutils_dir = binutils_dir
+ self._binutils_ebuild_file = None
+ self._binutils_ebuild_file_name = None
+
+ self._setup_tool_ebuild_file_only = setup_tool_ebuild_file_only
+
+ self._ce = command_executer.GetCommandExecuter()
+ self._logger = logger.GetLogger()
+ self._board = board
+ self._disable_2nd_bootstrap = disable_2nd_bootstrap
+
+ def IsTreeSame(self, t1, t2):
+ diff = 'diff -qr -x .git -x .svn "{0}" "{1}"'.format(t1, t2)
+ if self._ce.RunCommand(diff, print_to_console=False) == 0:
+ self._logger.LogOutput('"{0}" and "{1}" are the same."'.format(t1, t2))
+ return True
+ self._logger.LogWarning('"{0}" and "{1}" are different."'.format(t1, t2))
+ return False
+
+ def SubmitToLocalBranch(self):
+ """Copy source code to the chromium source tree and submit it locally."""
+ if self._gcc_dir:
+ if not self.SubmitToolToLocalBranch(tool_name='gcc',
+ tool_dir=self._gcc_dir):
+ return False
+ self._gcc_branch = TEMP_BRANCH_NAME
+
+ if self._binutils_dir:
+ if not self.SubmitToolToLocalBranch(tool_name='binutils',
+ tool_dir=self._binutils_dir):
+ return False
+ self._binutils_branch = TEMP_BRANCH_NAME
+
+ return True
+
+ def SubmitToolToLocalBranch(self, tool_name, tool_dir):
+ """Copy the source code to local chromium source tree.
+
+ Args:
+ tool_name: either 'gcc' or 'binutils'
+ tool_dir: the tool source dir to be used
+
+ Returns:
+ True if all succeeded False otherwise.
+ """
+
+ # The next few steps creates an internal branch to sync with the tool dir
+ # user provided.
+ chrome_tool_dir = self.GetChromeOsToolDir(tool_name)
+
+ # 0. Test to see if git tree is free of local changes.
+ if not misc.IsGitTreeClean(chrome_tool_dir):
+ self._logger.LogError('Git repository "{0}" not clean, aborted.'.format(
+ chrome_tool_dir))
+ return False
+
+ # 1. Checkout/create a (new) branch for testing.
+ command = 'cd "{0}" && git checkout -B {1}'.format(chrome_tool_dir,
+ TEMP_BRANCH_NAME)
+ ret = self._ce.RunCommand(command)
+ if ret:
+ self._logger.LogError('Failed to create a temp branch for test, aborted.')
+ return False
+
+ if self.IsTreeSame(tool_dir, chrome_tool_dir):
+ self._logger.LogOutput(
+ '"{0}" and "{1}" are the same, sync skipped.'.format(tool_dir,
+ chrome_tool_dir))
+ return True
+
+ # 2. Sync sources from user provided tool dir to chromiumos tool git.
+ local_tool_repo = repo_to_repo.FileRepo(tool_dir)
+ chrome_tool_repo = repo_to_repo.GitRepo(chrome_tool_dir, TEMP_BRANCH_NAME)
+ chrome_tool_repo.SetRoot(chrome_tool_dir)
+ # Delete all stuff except '.git' before start mapping.
+ self._ce.RunCommand(
+ 'cd {0} && find . -maxdepth 1 -not -name ".git" -not -name "." '
+ r'\( -type f -exec rm {{}} \; -o '
+ r' -type d -exec rm -fr {{}} \; \)'.format(chrome_tool_dir))
+ local_tool_repo.MapSources(chrome_tool_repo.GetRoot())
+
+ # 3. Ensure after sync tree is the same.
+ if self.IsTreeSame(tool_dir, chrome_tool_dir):
+ self._logger.LogOutput('Sync successfully done.')
+ else:
+ self._logger.LogError('Sync not successful, aborted.')
+ return False
+
+ # 4. Commit all changes.
+ # 4.1 Try to get some information about the tool dir we are using.
+ cmd = 'cd {0} && git log -1 --pretty=oneline'.format(tool_dir)
+ tool_dir_extra_info = None
+ ret, tool_dir_extra_info, _ = self._ce.RunCommandWOutput(
+ cmd,
+ print_to_console=False)
+ commit_message = 'Synced with tool source tree at - "{0}".'.format(tool_dir)
+ if not ret:
+ commit_message += '\nGit log for {0}:\n{1}'.format(
+ tool_dir, tool_dir_extra_info.strip())
+
+ if chrome_tool_repo.CommitLocally(commit_message):
+ self._logger.LogError(
+ 'Commit to local branch "{0}" failed, aborted.'.format(
+ TEMP_BRANCH_NAME))
+ return False
+ return True
+
+ def CheckoutBranch(self):
+ """Checkout working branch for the tools.
+
+ Returns:
+ True: if operation succeeds.
+ """
+
+ if self._gcc_branch:
+ rv = self.CheckoutToolBranch('gcc', self._gcc_branch)
+ if rv:
+ self._gcc_branch_tree = rv
+ else:
+ return False
+
+ if self._binutils_branch:
+ rv = self.CheckoutToolBranch('binutils', self._binutils_branch)
+ if rv:
+ self._binutils_branch_tree = rv
+ else:
+ return False
+
+ return True
+
+ def CheckoutToolBranch(self, tool_name, tool_branch):
+ """Checkout the tool branch for a certain tool.
+
+ Args:
+ tool_name: either 'gcc' or 'binutils'
+ tool_branch: tool branch to use
+
+ Returns:
+ True: if operation succeeds. Otherwise False.
+ """
+
+ chrome_tool_dir = self.GetChromeOsToolDir(tool_name)
+ command = 'cd "{0}" && git checkout {1}'.format(chrome_tool_dir,
+ tool_branch)
+ if not self._ce.RunCommand(command, print_to_console=True):
+ # Get 'TREE' value of this commit
+ command = ('cd "{0}" && git cat-file -p {1} '
+ '| grep -E "^tree [a-f0-9]+$" '
+ '| cut -d" " -f2').format(chrome_tool_dir, tool_branch)
+ ret, stdout, _ = self._ce.RunCommandWOutput(command,
+ print_to_console=False)
+ # Pipe operation always has a zero return value. So need to check if
+ # stdout is valid.
+ if not ret and stdout and re.match('[0-9a-h]{40}', stdout.strip(),
+ re.IGNORECASE):
+ tool_branch_tree = stdout.strip()
+ self._logger.LogOutput('Find tree for {0} branch "{1}" - "{2}"'.format(
+ tool_name, tool_branch, tool_branch_tree))
+ return tool_branch_tree
+ self._logger.LogError(('Failed to checkout "{0}" or failed to '
+ 'get tree value, aborted.').format(tool_branch))
+ return None
+
+ def FindEbuildFile(self):
+ """Find the ebuild files for the tools.
+
+ Returns:
+ True: if operation succeeds.
+ """
+
+ if self._gcc_branch:
+ (rv, ef, efn) = self.FindToolEbuildFile('gcc')
+ if rv:
+ self._gcc_ebuild_file = ef
+ self._gcc_ebuild_file_name = efn
+ else:
+ return False
+
+ if self._binutils_branch:
+ (rv, ef, efn) = self.FindToolEbuildFile('binutils')
+ if rv:
+ self._binutils_ebuild_file = ef
+ self._binutils_ebuild_file_name = efn
+ else:
+ return False
+
+ return True
+
+ def FindToolEbuildFile(self, tool_name):
+ """Find ebuild file for a specific tool.
+
+ Args:
+ tool_name: either "gcc" or "binutils".
+
+ Returns:
+ A triplet that consisits of whether operation succeeds or not,
+ tool ebuild file full path and tool ebuild file name.
+ """
+
+ # To get the active gcc ebuild file, we need a workable chroot first.
+ if not os.path.exists(os.path.join(
+ self._chromeos_root, 'chroot')) and self._ce.RunCommand(
+ 'cd "{0}" && cros_sdk --create'.format(self._chromeos_root)):
+ self._logger.LogError(('Failed to install a initial chroot, aborted.\n'
+ 'If previous bootstrap failed, do a '
+ '"cros_sdk --delete" to remove '
+ 'in-complete chroot.'))
+ return (False, None, None)
+
+ rv, stdout, _ = self._ce.ChrootRunCommandWOutput(
+ self._chromeos_root,
+ 'equery w sys-devel/{0}'.format(tool_name),
+ print_to_console=True)
+ if rv:
+ self._logger.LogError(('Failed to execute inside chroot '
+ '"equery w sys-devel/{0}", aborted.').format(
+ tool_name))
+ return (False, None, None)
+ m = re.match(r'^.*/({0}/(.*\.ebuild))$'.format(EBUILD_PATH_PATTERN.format(
+ tool_name)), stdout)
+ if not m:
+ self._logger.LogError(
+ ('Failed to find {0} ebuild file, aborted. '
+ 'If previous bootstrap failed, do a "cros_sdk --delete" to remove '
+ 'in-complete chroot.').format(tool_name))
+ return (False, None, None)
+ tool_ebuild_file = os.path.join(self._chromeos_root, m.group(1))
+ tool_ebuild_file_name = m.group(2)
+
+ return (True, tool_ebuild_file, tool_ebuild_file_name)
+
+ def InplaceModifyEbuildFile(self):
+ """Modify the ebuild file.
+
+ Returns:
+ True if operation succeeds.
+ """
+
+ # Note we shall not use remote branch name (eg. "cros/gcc.gnu.org/...") in
+ # CROS_WORKON_COMMIT, we have to use GITHASH. So we call GitGetCommitHash on
+ # tool_branch.
+ tool = None
+ toolbranch = None
+ if self._gcc_branch:
+ tool = 'gcc'
+ toolbranch = self._gcc_branch
+ tooltree = self._gcc_branch_tree
+ toolebuild = self._gcc_ebuild_file
+ elif self._binutils_branch:
+ tool = 'binutils'
+ toolbranch = self._binutils_branch
+ tooltree = self._binutils_branch_tree
+ toolebuild = self._binutils_ebuild_file
+
+
+ assert tool
+
+ # An example for the following variables would be:
+ # tooldir = '~/android/master-ndk/toolchain/gcc/gcc-4.9'
+ # tool_branch_githash = xxxxx
+ # toolcomponents = toolchain/gcc
+ tooldir = self.GetChromeOsToolDir(tool)
+ toolgithash = misc.GitGetCommitHash(tooldir, toolbranch)
+ if not toolgithash:
+ return False
+ toolcomponents = 'toolchain/{}'.format(tool)
+ return self.InplaceModifyToolEbuildFile(toolcomponents,
+ toolgithash,
+ tooltree,
+ toolebuild)
+
+ @staticmethod
+ def ResetToolEbuildFile(chromeos_root, tool_name):
+ """Reset tool ebuild file to clean state.
+
+ Args:
+ chromeos_root: chromeos source tree
+ tool_name: either "gcc" or "binutils"
+
+ Returns:
+ True if operation succeds.
+ """
+ rv = misc.GetGitChangesAsList(
+ os.path.join(chromeos_root, CHROMIUMOS_OVERLAY_PATH),
+ path=('sys-devel/{0}/{0}-*.ebuild'.format(tool_name)),
+ staged=False)
+ if rv:
+ cmd = 'cd {0} && git checkout --'.format(os.path.join(
+ chromeos_root, CHROMIUMOS_OVERLAY_PATH))
+ for g in rv:
+ cmd += ' ' + g
+ rv = command_executer.GetCommandExecuter().RunCommand(cmd)
+ if rv:
+ logger.GetLogger().LogWarning(
+ 'Failed to reset the ebuild file. Please refer to log above.')
+ return False
+ else:
+ logger.GetLogger().LogWarning(
+ 'Note - did not find any modified {0} ebuild file.'.format(tool_name))
+ # Fall through
+ return True
+
+ def GetChromeOsToolDir(self, tool_name):
+ """Return the chromeos git dir for a specific tool.
+
+ Note, after we unified ChromeOs and Android, the tool dir is under
+ ndk_dir/toolchain/[gcc,binutils].
+
+ Args:
+ tool_name: either 'gcc' or 'binutils'.
+
+ Returns:
+ Absolute git path for the tool.
+ """
+
+ tool_toppath = os.path.join(self._ndk_dir, 'toolchain', tool_name)
+ # There may be sub-directories like 'binutils-2.25', 'binutils-2.24',
+ # 'gcc-4.9', 'gcc-4.8', etc. find the newest binutils version.
+ cmd = ('find {} -maxdepth 1 -type d -name "{}-*" '
+ '| sort -r | head -1').format(tool_toppath, tool_name)
+ rv, out, _ = self._ce.RunCommandWOutput(cmd, print_to_console=False)
+ if rv:
+ return None
+ repo = out.strip()
+
+ # cros-workon eclass expects every CROS_WORKON_PROJECT ends with ".git".
+ self._ce.RunCommand(('cd $(dirname {0}) && '
+ 'ln -sf $(basename {0}) $(basename {0}).git').format(
+ repo, print_to_console=True))
+ return repo
+
+
+ def InplaceModifyToolEbuildFile(self,
+ tool_components,
+ tool_branch_githash,
+ tool_branch_tree,
+ tool_ebuild_file):
+ """Using sed to fill properly values into the ebuild file.
+
+ Args:
+ tool_components: either "toolchain/gcc" or "toolchain/binutils"
+ tool_branch_githash: githash for tool_branch
+ tool_branch_tree: treeish for the tool branch
+ tool_ebuild_file: tool ebuild file
+
+ Returns:
+ True: if operation succeeded.
+ """
+
+ command = ('sed -i '
+ '-e \'/^CROS_WORKON_REPO=".*"/i'
+ ' # The following line is modified by script.\' '
+ '-e \'s!^CROS_WORKON_REPO=".*"$!CROS_WORKON_REPO="{0}"!\' '
+ '-e \'/^CROS_WORKON_PROJECT=".*"/i'
+ ' # The following line is modified by script.\' '
+ '-e \'s!^CROS_WORKON_PROJECT=.*$!CROS_WORKON_PROJECT="{1}"!\' '
+ '-e \'/^CROS_WORKON_COMMIT=".*"/i'
+ ' # The following line is modified by script.\' '
+ '-e \'s!^CROS_WORKON_COMMIT=".*"$!CROS_WORKON_COMMIT="{2}"!\' '
+ '-e \'/^CROS_WORKON_TREE=".*"/i'
+ ' # The following line is modified by script.\' '
+ '-e \'s!^CROS_WORKON_TREE=".*"$!CROS_WORKON_TREE="{3}"!\' '
+ '{4}').format('/home/{}/ndk-root'.format(os.environ['USER']),
+ tool_components,
+ tool_branch_githash,
+ tool_branch_tree,
+ tool_ebuild_file)
+ rv = self._ce.RunCommand(command)
+ if rv:
+ self._logger.LogError(
+ 'Failed to modify commit and tree value for "{0}"", aborted.'.format(
+ tool_ebuild_file))
+ return False
+
+ # Warn that the ebuild file has been modified.
+ self._logger.LogWarning(
+ ('Ebuild file "{0}" is modified, to revert the file - \n'
+ 'bootstrap_compiler.py --chromeos_root={1} '
+ '--reset_tool_ebuild_file').format(tool_ebuild_file,
+ self._chromeos_root))
+ return True
+
+ def DoBuildForBoard(self):
+ """Build tool for a specific board.
+
+ Returns:
+ True if operation succeeds.
+ """
+
+ if self._gcc_branch:
+ if not self.DoBuildToolForBoard('gcc'):
+ return False
+ if self._binutils_branch:
+ if not self.DoBuildToolForBoard('binutils'):
+ return False
+ return True
+
+ def DoBuildToolForBoard(self, tool_name):
+ """Build a specific tool for a specific board.
+
+ Args:
+ tool_name: either "gcc" or "binutils"
+
+ Returns:
+ True if operation succeeds.
+ """
+
+ chroot_ndk_root = os.path.join(self._chromeos_root, 'chroot',
+ 'home', os.environ['USER'],
+ 'ndk-root')
+ self._ce.RunCommand('mkdir -p {}'.format(chroot_ndk_root))
+ if self._ce.RunCommand('sudo mount --bind {} {}'.format(
+ self._ndk_dir, chroot_ndk_root)):
+ self._logger.LogError('Failed to mount ndk dir into chroot')
+ return False
+
+ try:
+ boards_to_build = self._board.split(',')
+ target_built = set()
+ failed = []
+ for board in boards_to_build:
+ if board == 'host':
+ command = 'sudo emerge sys-devel/{0}'.format(tool_name)
+ else:
+ target = misc.GetCtargetFromBoard(board, self._chromeos_root)
+ if not target:
+ self._logger.LogError(
+ 'Unsupported board "{0}", skip.'.format(board))
+ failed.append(board)
+ continue
+ # Skip this board if we have already built for a board that has the
+ # same target.
+ if target in target_built:
+ self._logger.LogWarning(
+ 'Skipping toolchain for board "{}"'.format(board))
+ continue
+ target_built.add(target)
+ command = 'sudo emerge cross-{0}/{1}'.format(target, tool_name)
+
+ rv = self._ce.ChrootRunCommand(self._chromeos_root,
+ command,
+ print_to_console=True)
+ if rv:
+ self._logger.LogError('Build {0} failed for {1}, aborted.'.format(
+ tool_name, board))
+ failed.append(board)
+ else:
+ self._logger.LogOutput('Successfully built {0} for board {1}.'.format(
+ tool_name, board))
+ finally:
+ # Make sure we un-mount ndk-root before we leave here, regardless of the
+ # build result of the tool. Otherwise we may inadvertently delete ndk-root
+ # dir, which is not part of the chroot and could be disastrous.
+ if chroot_ndk_root:
+ if self._ce.RunCommand('sudo umount {}'.format(chroot_ndk_root)):
+ self._logger.LogWarning(('Failed to umount "{}", please check '
+ 'before deleting chroot.').format(
+ chroot_ndk_root))
+
+ # Clean up soft links created during build.
+ self._ce.RunCommand('cd {}/toolchain/{} && git clean -df'.format(
+ self._ndk_dir, tool_name))
+
+ if failed:
+ self._logger.LogError(
+ 'Failed to build {0} for the following board(s): "{1}"'.format(
+ tool_name, ' '.join(failed)))
+ return False
+ # All boards build successfully
+ return True
+
+ def DoBootstrapping(self):
+ """Do bootstrapping the chroot.
+
+ This step firstly downloads a prestine sdk, then use this sdk to build the
+ new sdk, finally use the new sdk to build every host package.
+
+ Returns:
+ True if operation succeeds.
+ """
+
+ logfile = os.path.join(self._chromeos_root, 'bootstrap.log')
+ command = 'cd "{0}" && cros_sdk --delete --bootstrap |& tee "{1}"'.format(
+ self._chromeos_root, logfile)
+ rv = self._ce.RunCommand(command, print_to_console=True)
+ if rv:
+ self._logger.LogError('Bootstrapping failed, log file - "{0}"\n'.format(
+ logfile))
+ return False
+
+ self._logger.LogOutput('Bootstrap succeeded.')
+ return True
+
+ def BuildAndInstallAmd64Host(self):
+ """Build amd64-host (host) packages.
+
+ Build all host packages in the newly-bootstrapped 'chroot' using *NEW*
+ toolchain.
+
+ So actually we perform 2 builds of all host packages -
+ 1. build new toolchain using old toolchain and build all host packages
+ using the newly built toolchain
+ 2. build the new toolchain again but using new toolchain built in step 1,
+ and build all host packages using the newly built toolchain
+
+ Returns:
+ True if operation succeeds.
+ """
+
+ cmd = ('cd {0} && cros_sdk -- -- ./setup_board --board=amd64-host '
+ '--accept_licenses=@CHROMEOS --skip_chroot_upgrade --nousepkg '
+ '--reuse_pkgs_from_local_boards').format(self._chromeos_root)
+ rv = self._ce.RunCommand(cmd, print_to_console=True)
+ if rv:
+ self._logger.LogError('Build amd64-host failed.')
+ return False
+
+ # Package amd64-host into 'built-sdk.tar.xz'.
+ sdk_package = os.path.join(self._chromeos_root, 'built-sdk.tar.xz')
+ cmd = ('cd {0}/chroot/build/amd64-host && sudo XZ_OPT="-e9" '
+ 'tar --exclude="usr/lib/debug/*" --exclude="packages/*" '
+ '--exclude="tmp/*" --exclude="usr/local/build/autotest/*" '
+ '--sparse -I xz -vcf {1} . && sudo chmod a+r {1}').format(
+ self._chromeos_root, sdk_package)
+ rv = self._ce.RunCommand(cmd, print_to_console=True)
+ if rv:
+ self._logger.LogError('Failed to create "built-sdk.tar.xz".')
+ return False
+
+ # Install amd64-host into a new chroot.
+ cmd = ('cd {0} && cros_sdk --chroot new-sdk-chroot --download --replace '
+ '--nousepkg --url file://{1}').format(self._chromeos_root,
+ sdk_package)
+ rv = self._ce.RunCommand(cmd, print_to_console=True)
+ if rv:
+ self._logger.LogError('Failed to install "built-sdk.tar.xz".')
+ return False
+ self._logger.LogOutput(
+ 'Successfully installed built-sdk.tar.xz into a new chroot.\nAll done.')
+
+ # Rename the newly created new-sdk-chroot to chroot.
+ cmd = ('cd {0} && sudo mv chroot chroot-old && '
+ 'sudo mv new-sdk-chroot chroot').format(self._chromeos_root)
+ rv = self._ce.RunCommand(cmd, print_to_console=True)
+ return rv == 0
+
+ def Do(self):
+ """Entrance of the class.
+
+ Returns:
+ True if everything is ok.
+ """
+
+ if (self.SubmitToLocalBranch() and self.CheckoutBranch() and
+ self.FindEbuildFile() and self.InplaceModifyEbuildFile()):
+ if self._setup_tool_ebuild_file_only:
+ # Everything is done, we are good.
+ ret = True
+ else:
+ if self._board:
+ ret = self.DoBuildForBoard()
+ else:
+ # This implies '--bootstrap'.
+ ret = (self.DoBootstrapping() and (self._disable_2nd_bootstrap or
+ self.BuildAndInstallAmd64Host()))
+ else:
+ ret = False
+ return ret
+
+
+def Main(argv):
+ parser = argparse.ArgumentParser()
+ parser.add_argument('-c',
+ '--chromeos_root',
+ dest='chromeos_root',
+ help=('Optional. ChromeOs root dir. '
+ 'When not specified, chromeos root will be deduced'
+ ' from current working directory.'))
+ parser.add_argument('--ndk_dir',
+ dest='ndk_dir',
+ help=('Topmost android ndk dir, required. '
+ 'Do not need to include the "toolchain/*" part.'))
+ parser.add_argument('--gcc_branch',
+ dest='gcc_branch',
+ help=('The branch to test against. '
+ 'This branch must be a local branch '
+ 'inside "src/third_party/gcc". '
+ 'Notice, this must not be used with "--gcc_dir".'))
+ parser.add_argument('--binutils_branch',
+ dest='binutils_branch',
+ help=('The branch to test against binutils. '
+ 'This branch must be a local branch '
+ 'inside "src/third_party/binutils". '
+ 'Notice, this must not be used with '
+ '"--binutils_dir".'))
+ parser.add_argument('-g',
+ '--gcc_dir',
+ dest='gcc_dir',
+ help=('Use a local gcc tree to do bootstrapping. '
+ 'Notice, this must not be used with '
+ '"--gcc_branch".'))
+ parser.add_argument('--binutils_dir',
+ dest='binutils_dir',
+ help=('Use a local binutils tree to do bootstrapping. '
+ 'Notice, this must not be used with '
+ '"--binutils_branch".'))
+ parser.add_argument('--fixperm',
+ dest='fixperm',
+ default=False,
+ action='store_true',
+ help=('Fix the (notorious) permission error '
+ 'while trying to bootstrap the chroot. '
+ 'Note this takes an extra 10-15 minutes '
+ 'and is only needed once per chromiumos tree.'))
+ parser.add_argument('--setup_tool_ebuild_file_only',
+ dest='setup_tool_ebuild_file_only',
+ default=False,
+ action='store_true',
+ help=('Setup gcc and/or binutils ebuild file '
+ 'to pick up the branch (--gcc/binutils_branch) or '
+ 'use gcc and/or binutils source '
+ '(--gcc/binutils_dir) and exit. Keep chroot as is.'
+ ' This should not be used with '
+ '--gcc/binutils_dir/branch options.'))
+ parser.add_argument('--reset_tool_ebuild_file',
+ dest='reset_tool_ebuild_file',
+ default=False,
+ action='store_true',
+ help=('Reset the modification that is done by this '
+ 'script. Note, when this script is running, it '
+ 'will modify the active gcc/binutils ebuild file. '
+ 'Use this option to reset (what this script has '
+ 'done) and exit. This should not be used with -- '
+ 'gcc/binutils_dir/branch options.'))
+ parser.add_argument('--board',
+ dest='board',
+ default=None,
+ help=('Only build toolchain for specific board(s). '
+ 'Use "host" to build for host. '
+ 'Use "," to seperate multiple boards. '
+ 'This does not perform a chroot bootstrap.'))
+ parser.add_argument('--bootstrap',
+ dest='bootstrap',
+ default=False,
+ action='store_true',
+ help=('Performs a chroot bootstrap. '
+ 'Note, this will *destroy* your current chroot.'))
+ parser.add_argument('--disable-2nd-bootstrap',
+ dest='disable_2nd_bootstrap',
+ default=False,
+ action='store_true',
+ help=('Disable a second bootstrap '
+ '(build of amd64-host stage).'))
+
+ options = parser.parse_args(argv)
+ # Trying to deduce chromeos root from current directory.
+ if not options.chromeos_root:
+ logger.GetLogger().LogOutput('Trying to deduce chromeos root ...')
+ wdir = os.getcwd()
+ while wdir and wdir != '/':
+ if misc.IsChromeOsTree(wdir):
+ logger.GetLogger().LogOutput('Find chromeos_root: {}'.format(wdir))
+ options.chromeos_root = wdir
+ break
+ wdir = os.path.dirname(wdir)
+
+ if not options.chromeos_root:
+ parser.error('Missing or failing to deduce mandatory option "--chromeos".')
+ return 1
+
+ options.chromeos_root = os.path.abspath(os.path.expanduser(
+ options.chromeos_root))
+
+ if not os.path.isdir(options.chromeos_root):
+ logger.GetLogger().LogError('"{0}" does not exist.'.format(
+ options.chromeos_root))
+ return 1
+
+ options.ndk_dir = os.path.expanduser(options.ndk_dir)
+ if not options.ndk_dir:
+ parser.error('Missing mandatory option "--ndk_dir".')
+ return 1
+
+ # Some tolerance regarding user input. We only need the ndk_root part, do not
+ # include toolchain/(gcc|binutils)/ part in this option.
+ options.ndk_dir = re.sub(
+ '/toolchain(/gcc|/binutils)?/?$', '', options.ndk_dir)
+
+ if not (os.path.isdir(options.ndk_dir) and
+ os.path.isdir(os.path.join(options.ndk_dir, 'toolchain'))):
+ logger.GetLogger().LogError(
+ '"toolchain" directory not found under "{0}".'.format(options.ndk_dir))
+ return 1
+
+ if options.fixperm:
+ # Fix perm error before continuing.
+ cmd = (
+ r'sudo find "{0}" \( -name ".cache" -type d -prune \) -o '
+ r'\( -name "chroot" -type d -prune \) -o '
+ r'\( -type f -exec chmod a+r {{}} \; \) -o '
+ r'\( -type d -exec chmod a+rx {{}} \; \)').format(options.chromeos_root)
+ logger.GetLogger().LogOutput(
+ 'Fixing perm issues for chromeos root, this might take some time.')
+ command_executer.GetCommandExecuter().RunCommand(cmd)
+
+ if options.reset_tool_ebuild_file:
+ if (options.gcc_dir or options.gcc_branch or options.binutils_dir or
+ options.binutils_branch):
+ logger.GetLogger().LogWarning(
+ 'Ignoring any "--gcc/binutils_dir" and/or "--gcc/binutils_branch".')
+ if options.setup_tool_ebuild_file_only:
+ logger.GetLogger().LogError(
+ ('Conflict options "--reset_tool_ebuild_file" '
+ 'and "--setup_tool_ebuild_file_only".'))
+ return 1
+ rv = Bootstrapper.ResetToolEbuildFile(options.chromeos_root, 'gcc')
+ rv1 = Bootstrapper.ResetToolEbuildFile(options.chromeos_root, 'binutils')
+ return 0 if (rv and rv1) else 1
+
+ if options.gcc_dir:
+ options.gcc_dir = os.path.abspath(os.path.expanduser(options.gcc_dir))
+ if not os.path.isdir(options.gcc_dir):
+ logger.GetLogger().LogError('"{0}" does not exist.'.format(
+ options.gcc_dir))
+ return 1
+
+ if options.gcc_branch and options.gcc_dir:
+ parser.error('Only one of "--gcc_dir" and "--gcc_branch" can be specified.')
+ return 1
+
+ if options.binutils_dir:
+ options.binutils_dir = os.path.abspath(os.path.expanduser(
+ options.binutils_dir))
+ if not os.path.isdir(options.binutils_dir):
+ logger.GetLogger().LogError('"{0}" does not exist.'.format(
+ options.binutils_dir))
+ return 1
+
+ if options.binutils_branch and options.binutils_dir:
+ parser.error('Only one of "--binutils_dir" and '
+ '"--binutils_branch" can be specified.')
+ return 1
+
+ if (not (options.binutils_branch or options.binutils_dir or options.gcc_branch
+ or options.gcc_dir)):
+ parser.error(('At least one of "--gcc_dir", "--gcc_branch", '
+ '"--binutils_dir" and "--binutils_branch" must '
+ 'be specified.'))
+ return 1
+
+ if not options.board and not options.bootstrap:
+ parser.error('You must specify either "--board" or "--bootstrap".')
+ return 1
+
+ if (options.board and options.bootstrap and
+ not options.setup_tool_ebuild_file_only):
+ parser.error('You must specify only one of "--board" and "--bootstrap".')
+ return 1
+
+ if not options.bootstrap and options.disable_2nd_bootstrap:
+ parser.error('"--disable-2nd-bootstrap" has no effect '
+ 'without specifying "--bootstrap".')
+ return 1
+
+ if Bootstrapper(
+ options.chromeos_root,
+ options.ndk_dir,
+ gcc_branch=options.gcc_branch,
+ gcc_dir=options.gcc_dir,
+ binutils_branch=options.binutils_branch,
+ binutils_dir=options.binutils_dir,
+ board=options.board,
+ disable_2nd_bootstrap=options.disable_2nd_bootstrap,
+ setup_tool_ebuild_file_only=options.setup_tool_ebuild_file_only).Do():
+ return 0
+ return 1
+
+
+if __name__ == '__main__':
+ retval = Main(sys.argv[1:])
+ sys.exit(retval)
diff --git a/buildbot_test_llvm.py b/buildbot_test_llvm.py
new file mode 100755
index 00000000..a43db752
--- /dev/null
+++ b/buildbot_test_llvm.py
@@ -0,0 +1,167 @@
+#!/usr/bin/env python2
+"""Script for running llvm validation tests on ChromeOS.
+
+This script launches a buildbot to build ChromeOS with the llvm on
+a particular board; then it finds and downloads the trybot image and the
+corresponding official image, and runs test for correctness.
+It then generates a report, emails it to the c-compiler-chrome, as
+well as copying the result into a directory.
+"""
+
+# Script to test different toolchains against ChromeOS benchmarks.
+
+from __future__ import print_function
+
+import argparse
+import datetime
+import os
+import sys
+import time
+
+from cros_utils import command_executer
+from cros_utils import logger
+
+from cros_utils import buildbot_utils
+
+# CL that uses LLVM to build the peppy image.
+USE_LLVM_PATCH = '295217'
+
+CROSTC_ROOT = '/usr/local/google/crostc'
+ROLE_ACCOUNT = 'mobiletc-prebuild'
+TOOLCHAIN_DIR = os.path.dirname(os.path.realpath(__file__))
+MAIL_PROGRAM = '~/var/bin/mail-sheriff'
+VALIDATION_RESULT_DIR = os.path.join(CROSTC_ROOT, 'validation_result')
+START_DATE = datetime.date(2016, 1, 1)
+TEST_PER_DAY = 2
+TEST_BOARD = [
+ 'squawks', # x86_64, rambi (baytrail)
+ 'terra', # x86_64, strago (braswell)
+ 'lulu', # x86_64, auron (broadwell)
+ 'peach_pit', # arm, peach (exynos-5420)
+ 'peppy', # x86_64, slippy (haswell celeron)
+ 'link', # x86_64, ivybridge (ivybridge)
+ 'nyan_big', # arm, nyan (tegra)
+ 'sentry', # x86_64, kunimitsu (skylake-u)
+ 'chell', # x86_64, glados (skylake-y)
+ 'daisy', # arm, daisy (exynos)
+ 'caroline', # amd64
+ 'kevin', # arm, gru (Rockchip)
+]
+
+
+class ToolchainVerifier(object):
+ """Class for the toolchain verifier."""
+
+ def __init__(self, board, chromeos_root, weekday, patches, compiler):
+ self._board = board
+ self._chromeos_root = chromeos_root
+ self._base_dir = os.getcwd()
+ self._ce = command_executer.GetCommandExecuter()
+ self._l = logger.GetLogger()
+ self._compiler = compiler
+ self._build = '%s-%s-toolchain' % (board, compiler)
+ self._patches = patches.split(',') if patches else []
+ self._patches_string = '_'.join(str(p) for p in self._patches)
+
+ if not weekday:
+ self._weekday = time.strftime('%a')
+ else:
+ self._weekday = weekday
+ self._reports = os.path.join(VALIDATION_RESULT_DIR, compiler, board)
+
+ def _FinishSetup(self):
+ """Make sure testing_rsa file is properly set up."""
+ # Fix protections on ssh key
+ command = ('chmod 600 /var/cache/chromeos-cache/distfiles/target'
+ '/chrome-src-internal/src/third_party/chromite/ssh_keys'
+ '/testing_rsa')
+ ret_val = self._ce.ChrootRunCommand(self._chromeos_root, command)
+ if ret_val != 0:
+ raise RuntimeError('chmod for testing_rsa failed')
+
+ def DoAll(self):
+ """Main function inside ToolchainComparator class.
+
+ Launch trybot, get image names, create crosperf experiment file, run
+ crosperf, and copy images into seven-day report directories.
+ """
+ flags = ['--hwtest']
+ date_str = datetime.date.today()
+ description = 'master_%s_%s_%s' % (self._patches_string, self._build,
+ date_str)
+ _ = buildbot_utils.GetTrybotImage(
+ self._chromeos_root,
+ self._build,
+ self._patches,
+ description,
+ other_flags=flags,
+ async=True)
+
+ return 0
+
+def Main(argv):
+ """The main function."""
+
+ # Common initializations
+ command_executer.InitCommandExecuter()
+ parser = argparse.ArgumentParser()
+ parser.add_argument(
+ '--chromeos_root',
+ dest='chromeos_root',
+ help='The chromeos root from which to run tests.')
+ parser.add_argument(
+ '--weekday',
+ default='',
+ dest='weekday',
+ help='The day of the week for which to run tests.')
+ parser.add_argument(
+ '--board', default='', dest='board', help='The board to test.')
+ parser.add_argument(
+ '--patch',
+ dest='patches',
+ default='',
+ help='The patches to use for the testing, '
+ "seprate the patch numbers with ',' "
+ 'for more than one patches.')
+ parser.add_argument(
+ '--compiler',
+ dest='compiler',
+ help='Which compiler (llvm, llvm-next or gcc) to use for '
+ 'testing.')
+
+ options = parser.parse_args(argv[1:])
+ if not options.chromeos_root:
+ print('Please specify the ChromeOS root directory.')
+ return 1
+ if not options.compiler:
+ print('Please specify which compiler to test (gcc, llvm, or llvm-next).')
+ return 1
+ patches = options.patches
+ if not patches and options.compiler == 'llvm':
+ patches = USE_LLVM_PATCH
+
+ if options.board:
+ fv = ToolchainVerifier(options.board, options.chromeos_root,
+ options.weekday, patches, options.compiler)
+ return fv.Doall()
+
+ today = datetime.date.today()
+ delta = today - START_DATE
+ days = delta.days
+
+ start_board = (days * TEST_PER_DAY) % len(TEST_BOARD)
+ for i in range(TEST_PER_DAY):
+ try:
+ board = TEST_BOARD[(start_board + i) % len(TEST_BOARD)]
+ fv = ToolchainVerifier(board, options.chromeos_root, options.weekday,
+ patches, options.compiler)
+ fv.DoAll()
+ except SystemExit:
+ logfile = os.path.join(VALIDATION_RESULT_DIR, options.compiler, board)
+ with open(logfile, 'w') as f:
+ f.write('Verifier got an exception, please check the log.\n')
+
+
+if __name__ == '__main__':
+ retval = Main(sys.argv)
+ sys.exit(retval)
diff --git a/buildbot_test_toolchains.py b/buildbot_test_toolchains.py
new file mode 100755
index 00000000..5bef28a4
--- /dev/null
+++ b/buildbot_test_toolchains.py
@@ -0,0 +1,356 @@
+#!/usr/bin/env python2
+#
+# Copyright 2016 The Chromium OS Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+"""Script for running nightly compiler tests on ChromeOS.
+
+This script launches a buildbot to build ChromeOS with the latest compiler on
+a particular board; then it finds and downloads the trybot image and the
+corresponding official image, and runs crosperf performance tests comparing
+the two. It then generates a report, emails it to the c-compiler-chrome, as
+well as copying the images into the seven-day reports directory.
+"""
+
+# Script to test different toolchains against ChromeOS benchmarks.
+
+from __future__ import print_function
+
+import argparse
+import datetime
+import os
+import re
+import sys
+import time
+
+from cros_utils import command_executer
+from cros_utils import logger
+
+from cros_utils import buildbot_utils
+
+# CL that updated GCC ebuilds to use 'next_gcc'.
+USE_NEXT_GCC_PATCH = '230260'
+
+# CL that uses LLVM to build the peppy image.
+USE_LLVM_PATCH = '295217'
+
+# CL that uses LLVM-Next to build the images (includes chrome).
+USE_LLVM_NEXT_PATCH = '424123'
+
+CROSTC_ROOT = '/usr/local/google/crostc'
+ROLE_ACCOUNT = 'mobiletc-prebuild'
+TOOLCHAIN_DIR = os.path.dirname(os.path.realpath(__file__))
+MAIL_PROGRAM = '~/var/bin/mail-sheriff'
+PENDING_ARCHIVES_DIR = os.path.join(CROSTC_ROOT, 'pending_archives')
+NIGHTLY_TESTS_DIR = os.path.join(CROSTC_ROOT, 'nightly_test_reports')
+
+IMAGE_DIR = '{board}-{image_type}'
+IMAGE_VERSION_STR = r'{chrome_version}-{tip}\.{branch}\.{branch_branch}'
+IMAGE_FS = IMAGE_DIR + '/' + IMAGE_VERSION_STR
+TRYBOT_IMAGE_FS = 'trybot-' + IMAGE_FS + '-{build_id}'
+PFQ_IMAGE_FS = IMAGE_FS + '-rc1'
+IMAGE_RE_GROUPS = {
+ 'board': r'(?P<board>\S+)',
+ 'image_type': r'(?P<image_type>\S+)',
+ 'chrome_version': r'(?P<chrome_version>R\d+)',
+ 'tip': r'(?P<tip>\d+)',
+ 'branch': r'(?P<branch>\d+)',
+ 'branch_branch': r'(?P<branch_branch>\d+)',
+ 'build_id': r'(?P<build_id>b\d+)'
+}
+TRYBOT_IMAGE_RE = TRYBOT_IMAGE_FS.format(**IMAGE_RE_GROUPS)
+
+
+class ToolchainComparator(object):
+ """Class for doing the nightly tests work."""
+
+ def __init__(self,
+ board,
+ remotes,
+ chromeos_root,
+ weekday,
+ patches,
+ noschedv2=False):
+ self._board = board
+ self._remotes = remotes
+ self._chromeos_root = chromeos_root
+ self._base_dir = os.getcwd()
+ self._ce = command_executer.GetCommandExecuter()
+ self._l = logger.GetLogger()
+ self._build = '%s-release' % board
+ self._patches = patches.split(',')
+ self._patches_string = '_'.join(str(p) for p in self._patches)
+ self._noschedv2 = noschedv2
+
+ if not weekday:
+ self._weekday = time.strftime('%a')
+ else:
+ self._weekday = weekday
+ timestamp = datetime.datetime.strftime(datetime.datetime.now(),
+ '%Y-%m-%d_%H:%M:%S')
+ self._reports_dir = os.path.join(
+ NIGHTLY_TESTS_DIR,
+ '%s.%s' % (timestamp, board),)
+
+ def _GetVanillaImageName(self, trybot_image):
+ """Given a trybot artifact name, get latest vanilla image name.
+
+ Args:
+ trybot_image: artifact name such as
+ 'trybot-daisy-release/R40-6394.0.0-b1389'
+
+ Returns:
+ Latest official image name, e.g. 'daisy-release/R57-9089.0.0'.
+ """
+ mo = re.search(TRYBOT_IMAGE_RE, trybot_image)
+ assert mo
+ dirname = IMAGE_DIR.replace('\\', '').format(**mo.groupdict())
+ version = buildbot_utils.GetGSContent(self._chromeos_root,
+ dirname + '/LATEST-master')
+ return dirname + '/' + version
+
+ def _GetNonAFDOImageName(self, trybot_image):
+ """Given a trybot artifact name, get corresponding non-AFDO image name.
+
+ We get the non-AFDO image from the PFQ builders. This image
+ is not generated for all the boards and, the closest PFQ image
+ was the one build for the previous ChromeOS version (the chrome
+ used in the current version is the one validated in the previous
+ version).
+ The previous ChromeOS does not always exist either. So, we try
+ a couple of versions before.
+
+ Args:
+ trybot_image: artifact name such as
+ 'trybot-daisy-release/R40-6394.0.0-b1389'
+
+ Returns:
+ Corresponding chrome PFQ image name, e.g.
+ 'daisy-chrome-pfq/R40-6393.0.0-rc1'.
+ """
+ mo = re.search(TRYBOT_IMAGE_RE, trybot_image)
+ assert mo
+ image_dict = mo.groupdict()
+ image_dict['image_type'] = 'chrome-pfq'
+ for _ in xrange(2):
+ image_dict['tip'] = str(int(image_dict['tip']) - 1)
+ nonafdo_image = PFQ_IMAGE_FS.replace('\\', '').format(**image_dict)
+ if buildbot_utils.DoesImageExist(self._chromeos_root, nonafdo_image):
+ return nonafdo_image
+ return ''
+
+ def _FinishSetup(self):
+ """Make sure testing_rsa file is properly set up."""
+ # Fix protections on ssh key
+ command = ('chmod 600 /var/cache/chromeos-cache/distfiles/target'
+ '/chrome-src-internal/src/third_party/chromite/ssh_keys'
+ '/testing_rsa')
+ ret_val = self._ce.ChrootRunCommand(self._chromeos_root, command)
+ if ret_val != 0:
+ raise RuntimeError('chmod for testing_rsa failed')
+
+ def _TestImages(self, trybot_image, vanilla_image, nonafdo_image):
+ """Create crosperf experiment file.
+
+ Given the names of the trybot, vanilla and non-AFDO images, create the
+ appropriate crosperf experiment file and launch crosperf on it.
+ """
+ experiment_file_dir = os.path.join(self._chromeos_root, '..', self._weekday)
+ experiment_file_name = '%s_toolchain_experiment.txt' % self._board
+
+ compiler_string = 'gcc'
+ if USE_LLVM_NEXT_PATCH in self._patches_string:
+ experiment_file_name = '%s_llvm_next_experiment.txt' % self._board
+ compiler_string = 'llvm_next'
+ elif USE_LLVM_PATCH in self._patches_string:
+ experiment_file_name = '%s_llvm_experiment.txt' % self._board
+ compiler_string = 'llvm'
+
+ experiment_file = os.path.join(experiment_file_dir, experiment_file_name)
+ experiment_header = """
+ board: %s
+ remote: %s
+ retries: 1
+ """ % (self._board, self._remotes)
+ experiment_tests = """
+ benchmark: all_toolchain_perf {
+ suite: telemetry_Crosperf
+ iterations: 3
+ }
+
+ benchmark: page_cycler_v2.typical_25 {
+ suite: telemetry_Crosperf
+ iterations: 2
+ run_local: False
+ retries: 0
+ }
+ """
+
+ with open(experiment_file, 'w') as f:
+ f.write(experiment_header)
+ f.write(experiment_tests)
+
+ # Now add vanilla to test file.
+ official_image = """
+ vanilla_image {
+ chromeos_root: %s
+ build: %s
+ compiler: gcc
+ }
+ """ % (self._chromeos_root, vanilla_image)
+ f.write(official_image)
+
+ # Now add non-AFDO image to test file.
+ if nonafdo_image:
+ official_nonafdo_image = """
+ nonafdo_image {
+ chromeos_root: %s
+ build: %s
+ compiler: gcc
+ }
+ """ % (self._chromeos_root, nonafdo_image)
+ f.write(official_nonafdo_image)
+
+ label_string = '%s_trybot_image' % compiler_string
+ if USE_NEXT_GCC_PATCH in self._patches:
+ label_string = 'gcc_next_trybot_image'
+
+ # Reuse autotest files from vanilla image for trybot images
+ autotest_files = os.path.join('/tmp', vanilla_image, 'autotest_files')
+ experiment_image = """
+ %s {
+ chromeos_root: %s
+ build: %s
+ autotest_path: %s
+ compiler: %s
+ }
+ """ % (label_string, self._chromeos_root, trybot_image,
+ autotest_files, compiler_string)
+ f.write(experiment_image)
+
+ crosperf = os.path.join(TOOLCHAIN_DIR, 'crosperf', 'crosperf')
+ noschedv2_opts = '--noschedv2' if self._noschedv2 else ''
+ command = ('{crosperf} --no_email=True --results_dir={r_dir} '
+ '--json_report=True {noschedv2_opts} {exp_file}').format(
+ crosperf=crosperf,
+ r_dir=self._reports_dir,
+ noschedv2_opts=noschedv2_opts,
+ exp_file=experiment_file)
+
+ ret = self._ce.RunCommand(command)
+ if ret != 0:
+ raise RuntimeError('Crosperf execution error!')
+ else:
+ # Copy json report to pending archives directory.
+ command = 'cp %s/*.json %s/.' % (self._reports_dir, PENDING_ARCHIVES_DIR)
+ ret = self._ce.RunCommand(command)
+ return
+
+ def _SendEmail(self):
+ """Find email message generated by crosperf and send it."""
+ filename = os.path.join(self._reports_dir, 'msg_body.html')
+ if (os.path.exists(filename) and
+ os.path.exists(os.path.expanduser(MAIL_PROGRAM))):
+ email_title = 'buildbot test results'
+ if USE_LLVM_NEXT_PATCH in self._patches_string:
+ email_title = 'buildbot llvm_next test results'
+ elif USE_LLVM_PATCH in self._patches_string:
+ email_title = 'buildbot llvm test results'
+ command = ('cat %s | %s -s "%s, %s" -team -html' %
+ (filename, MAIL_PROGRAM, email_title, self._board))
+ self._ce.RunCommand(command)
+
+ def DoAll(self):
+ """Main function inside ToolchainComparator class.
+
+ Launch trybot, get image names, create crosperf experiment file, run
+ crosperf, and copy images into seven-day report directories.
+ """
+ date_str = datetime.date.today()
+ description = 'master_%s_%s_%s' % (self._patches_string, self._build,
+ date_str)
+ build_id, trybot_image = buildbot_utils.GetTrybotImage(
+ self._chromeos_root,
+ self._build,
+ self._patches,
+ description,
+ other_flags=['--notests'],
+ build_toolchain=True)
+
+ print('trybot_url: \
+ https://uberchromegw.corp.google.com/i/chromiumos.tryserver/builders/release/builds/%s'
+ % build_id)
+ if len(trybot_image) == 0:
+ self._l.LogError('Unable to find trybot_image for %s!' % description)
+ return 1
+
+ vanilla_image = self._GetVanillaImageName(trybot_image)
+ nonafdo_image = self._GetNonAFDOImageName(trybot_image)
+
+ print('trybot_image: %s' % trybot_image)
+ print('vanilla_image: %s' % vanilla_image)
+ print('nonafdo_image: %s' % nonafdo_image)
+
+ if os.getlogin() == ROLE_ACCOUNT:
+ self._FinishSetup()
+
+ self._TestImages(trybot_image, vanilla_image, nonafdo_image)
+ self._SendEmail()
+ return 0
+
+
+def Main(argv):
+ """The main function."""
+
+ # Common initializations
+ command_executer.InitCommandExecuter()
+ parser = argparse.ArgumentParser()
+ parser.add_argument(
+ '--remote', dest='remote', help='Remote machines to run tests on.')
+ parser.add_argument(
+ '--board', dest='board', default='x86-zgb', help='The target board.')
+ parser.add_argument(
+ '--chromeos_root',
+ dest='chromeos_root',
+ help='The chromeos root from which to run tests.')
+ parser.add_argument(
+ '--weekday',
+ default='',
+ dest='weekday',
+ help='The day of the week for which to run tests.')
+ parser.add_argument(
+ '--patch',
+ dest='patches',
+ help='The patches to use for the testing, '
+ "seprate the patch numbers with ',' "
+ 'for more than one patches.')
+ parser.add_argument(
+ '--noschedv2',
+ dest='noschedv2',
+ action='store_true',
+ default=False,
+ help='Pass --noschedv2 to crosperf.')
+
+ options = parser.parse_args(argv[1:])
+ if not options.board:
+ print('Please give a board.')
+ return 1
+ if not options.remote:
+ print('Please give at least one remote machine.')
+ return 1
+ if not options.chromeos_root:
+ print('Please specify the ChromeOS root directory.')
+ return 1
+ if options.patches:
+ patches = options.patches
+ else:
+ patches = USE_NEXT_GCC_PATCH
+
+ fc = ToolchainComparator(options.board, options.remote, options.chromeos_root,
+ options.weekday, patches, options.noschedv2)
+ return fc.DoAll()
+
+
+if __name__ == '__main__':
+ retval = Main(sys.argv)
+ sys.exit(retval)
diff --git a/chromiumos_image_diff.py b/chromiumos_image_diff.py
new file mode 100755
index 00000000..68791ac5
--- /dev/null
+++ b/chromiumos_image_diff.py
@@ -0,0 +1,333 @@
+#!/usr/bin/python2
+"""Diff 2 chromiumos images by comparing each elf file.
+
+ The script diffs every *ELF* files by dissembling every *executable*
+ section, which means it is not a FULL elf differ.
+
+ A simple usage example -
+ chromiumos_image_diff.py --image1 image-path-1 --image2 image-path-2
+
+ Note that image path should be inside the chroot, if not (ie, image is
+ downloaded from web), please specify a chromiumos checkout via
+ "--chromeos_root".
+
+ And this script should be executed outside chroot.
+"""
+
+from __future__ import print_function
+
+__author__ = 'shenhan@google.com (Han Shen)'
+
+import argparse
+import os
+import re
+import sys
+import tempfile
+
+import image_chromeos
+from cros_utils import command_executer
+from cros_utils import logger
+from cros_utils import misc
+
+
+class CrosImage(object):
+ """A cros image object."""
+
+ def __init__(self, image, chromeos_root, no_unmount):
+ self.image = image
+ self.chromeos_root = chromeos_root
+ self.mounted = False
+ self._ce = command_executer.GetCommandExecuter()
+ self.logger = logger.GetLogger()
+ self.elf_files = []
+ self.no_unmount = no_unmount
+ self.unmount_script = ''
+ self.stateful = ''
+ self.rootfs = ''
+
+ def MountImage(self, mount_basename):
+ """Mount/unpack the image."""
+
+ if mount_basename:
+ self.rootfs = '/tmp/{0}.rootfs'.format(mount_basename)
+ self.stateful = '/tmp/{0}.stateful'.format(mount_basename)
+ self.unmount_script = '/tmp/{0}.unmount.sh'.format(mount_basename)
+ else:
+ self.rootfs = tempfile.mkdtemp(suffix='.rootfs',
+ prefix='chromiumos_image_diff')
+ ## rootfs is like /tmp/tmpxyz012.rootfs.
+ match = re.match(r'^(.*)\.rootfs$', self.rootfs)
+ basename = match.group(1)
+ self.stateful = basename + '.stateful'
+ os.mkdir(self.stateful)
+ self.unmount_script = '{0}.unmount.sh'.format(basename)
+
+ self.logger.LogOutput('Mounting "{0}" onto "{1}" and "{2}"'.format(
+ self.image, self.rootfs, self.stateful))
+ ## First of all creating an unmount image
+ self.CreateUnmountScript()
+ command = image_chromeos.GetImageMountCommand(
+ self.chromeos_root, self.image, self.rootfs, self.stateful)
+ rv = self._ce.RunCommand(command, print_to_console=True)
+ self.mounted = (rv == 0)
+ if not self.mounted:
+ self.logger.LogError('Failed to mount "{0}" onto "{1}" and "{2}".'.format(
+ self.image, self.rootfs, self.stateful))
+ return self.mounted
+
+ def CreateUnmountScript(self):
+ command = ('sudo umount {r}/usr/local {r}/usr/share/oem '
+ '{r}/var {r}/mnt/stateful_partition {r}; sudo umount {s} ; '
+ 'rmdir {r} ; rmdir {s}\n').format(r=self.rootfs, s=self.stateful)
+ f = open(self.unmount_script, 'w')
+ f.write(command)
+ f.close()
+ self._ce.RunCommand('chmod +x {}'.format(self.unmount_script),
+ print_to_console=False)
+ self.logger.LogOutput('Created an unmount script - "{0}"'.format(
+ self.unmount_script))
+
+ def UnmountImage(self):
+ """Unmount the image and delete mount point."""
+
+ self.logger.LogOutput('Unmounting image "{0}" from "{1}" and "{2}"'.format(
+ self.image, self.rootfs, self.stateful))
+ if self.mounted:
+ command = 'bash "{0}"'.format(self.unmount_script)
+ if self.no_unmount:
+ self.logger.LogOutput(('Please unmount manually - \n'
+ '\t bash "{0}"'.format(self.unmount_script)))
+ else:
+ if self._ce.RunCommand(command, print_to_console=True) == 0:
+ self._ce.RunCommand('rm {0}'.format(self.unmount_script))
+ self.mounted = False
+ self.rootfs = None
+ self.stateful = None
+ self.unmount_script = None
+
+ return not self.mounted
+
+ def FindElfFiles(self):
+ """Find all elf files for the image.
+
+ Returns:
+ Always true
+ """
+
+ self.logger.LogOutput('Finding all elf files in "{0}" ...'.format(
+ self.rootfs))
+ # Note '\;' must be prefixed by 'r'.
+ command = ('find "{0}" -type f -exec '
+ 'bash -c \'file -b "{{}}" | grep -q "ELF"\'' r' \; '
+ r'-exec echo "{{}}" \;').format(self.rootfs)
+ self.logger.LogCmd(command)
+ _, out, _ = self._ce.RunCommandWOutput(command, print_to_console=False)
+ self.elf_files = out.splitlines()
+ self.logger.LogOutput(
+ 'Total {0} elf files found.'.format(len(self.elf_files)))
+ return True
+
+
+class ImageComparator(object):
+ """A class that wraps comparsion actions."""
+
+ def __init__(self, images, diff_file):
+ self.images = images
+ self.logger = logger.GetLogger()
+ self.diff_file = diff_file
+ self.tempf1 = None
+ self.tempf2 = None
+
+ def Cleanup(self):
+ if self.tempf1 and self.tempf2:
+ command_executer.GetCommandExecuter().RunCommand(
+ 'rm {0} {1}'.format(self.tempf1, self.tempf2))
+ logger.GetLogger('Removed "{0}" and "{1}".'.format(
+ self.tempf1, self.tempf2))
+
+ def CheckElfFileSetEquality(self):
+ """Checking whether images have exactly number of elf files."""
+
+ self.logger.LogOutput('Checking elf file equality ...')
+ i1 = self.images[0]
+ i2 = self.images[1]
+ t1 = i1.rootfs + '/'
+ elfset1 = set([e.replace(t1, '') for e in i1.elf_files])
+ t2 = i2.rootfs + '/'
+ elfset2 = set([e.replace(t2, '') for e in i2.elf_files])
+ dif1 = elfset1.difference(elfset2)
+ msg = None
+ if dif1:
+ msg = 'The following files are not in "{image}" - "{rootfs}":\n'.format(
+ image=i2.image, rootfs=i2.rootfs)
+ for d in dif1:
+ msg += '\t' + d + '\n'
+ dif2 = elfset2.difference(elfset1)
+ if dif2:
+ msg = 'The following files are not in "{image}" - "{rootfs}":\n'.format(
+ image=i1.image, rootfs=i1.rootfs)
+ for d in dif2:
+ msg += '\t' + d + '\n'
+ if msg:
+ self.logger.LogError(msg)
+ return False
+ return True
+
+ def CompareImages(self):
+ """Do the comparsion work."""
+
+ if not self.CheckElfFileSetEquality():
+ return False
+
+ mismatch_list = []
+ match_count = 0
+ i1 = self.images[0]
+ i2 = self.images[1]
+ self.logger.LogOutput('Start comparing {0} elf file by file ...'.format(
+ len(i1.elf_files)))
+ ## Note - i1.elf_files and i2.elf_files have exactly the same entries here.
+
+ ## Create 2 temp files to be used for all disassembed files.
+ handle, self.tempf1 = tempfile.mkstemp()
+ os.close(handle) # We do not need the handle
+ handle, self.tempf2 = tempfile.mkstemp()
+ os.close(handle)
+
+ cmde = command_executer.GetCommandExecuter()
+ for elf1 in i1.elf_files:
+ tmp_rootfs = i1.rootfs + '/'
+ f1 = elf1.replace(tmp_rootfs, '')
+ full_path1 = elf1
+ full_path2 = elf1.replace(i1.rootfs, i2.rootfs)
+
+ if full_path1 == full_path2:
+ self.logger.LogError(
+ 'Error: We\'re comparing the SAME file - {0}'.format(f1))
+ continue
+
+ command = ('objdump -d "{f1}" > {tempf1} ; '
+ 'objdump -d "{f2}" > {tempf2} ; '
+ # Remove path string inside the dissemble
+ 'sed -i \'s!{rootfs1}!!g\' {tempf1} ; '
+ 'sed -i \'s!{rootfs2}!!g\' {tempf2} ; '
+ 'diff {tempf1} {tempf2} 1>/dev/null 2>&1').format(
+ f1=full_path1, f2=full_path2,
+ rootfs1=i1.rootfs, rootfs2=i2.rootfs,
+ tempf1=self.tempf1, tempf2=self.tempf2)
+ ret = cmde.RunCommand(command, print_to_console=False)
+ if ret != 0:
+ self.logger.LogOutput('*** Not match - "{0}" "{1}"'.format(
+ full_path1, full_path2))
+ mismatch_list.append(f1)
+ if self.diff_file:
+ command = (
+ 'echo "Diffs of disassemble of \"{f1}\" and \"{f2}\"" '
+ '>> {diff_file} ; diff {tempf1} {tempf2} '
+ '>> {diff_file}').format(
+ f1=full_path1, f2=full_path2, diff_file=self.diff_file,
+ tempf1=self.tempf1, tempf2=self.tempf2)
+ cmde.RunCommand(command, print_to_console=False)
+ else:
+ match_count += 1
+ ## End of comparing every elf files.
+
+ if not mismatch_list:
+ self.logger.LogOutput('** COOL, ALL {0} BINARIES MATCHED!! **'.format(
+ match_count))
+ return True
+
+ mismatch_str = 'Found {0} mismatch:\n'.format(len(mismatch_list))
+ for b in mismatch_list:
+ mismatch_str += '\t' + b + '\n'
+
+ self.logger.LogOutput(mismatch_str)
+ return False
+
+
+def Main(argv):
+ """The main function."""
+
+ command_executer.InitCommandExecuter()
+ images = []
+
+ parser = argparse.ArgumentParser()
+ parser.add_argument(
+ '--no_unmount', action='store_true', dest='no_unmount', default=False,
+ help='Do not unmount after finish, this is useful for debugging.')
+ parser.add_argument(
+ '--chromeos_root', dest='chromeos_root', default=None, action='store',
+ help=('[Optional] Specify a chromeos tree instead of '
+ 'deducing it from image path so that we can compare '
+ '2 images that are downloaded.'))
+ parser.add_argument(
+ '--mount_basename', dest='mount_basename', default=None, action='store',
+ help=('Specify a meaningful name for the mount point. With this being '
+ 'set, the mount points would be "/tmp/mount_basename.x.rootfs" '
+ ' and "/tmp/mount_basename.x.stateful". (x is 1 or 2).'))
+ parser.add_argument('--diff_file', dest='diff_file', default=None,
+ help='Dumping all the diffs (if any) to the diff file')
+ parser.add_argument('--image1', dest='image1', default=None,
+ required=True, help=('Image 1 file name.'))
+ parser.add_argument('--image2', dest='image2', default=None,
+ required=True, help=('Image 2 file name.'))
+ options = parser.parse_args(argv[1:])
+
+ if options.mount_basename and options.mount_basename.find('/') >= 0:
+ logger.GetLogger().LogError(
+ '"--mount_basename" must be a name, not a path.')
+ parser.print_help()
+ return 1
+
+ result = False
+ image_comparator = None
+ try:
+ for i, image_path in enumerate([options.image1, options.image2], start=1):
+ image_path = os.path.realpath(image_path)
+ if not os.path.isfile(image_path):
+ logger.getLogger().LogError('"{0}" is not a file.'.format(image_path))
+ return 1
+
+ chromeos_root = None
+ if options.chromeos_root:
+ chromeos_root = options.chromeos_root
+ else:
+ ## Deduce chromeos root from image
+ t = image_path
+ while t != '/':
+ if misc.IsChromeOsTree(t):
+ break
+ t = os.path.dirname(t)
+ if misc.IsChromeOsTree(t):
+ chromeos_root = t
+
+ if not chromeos_root:
+ logger.GetLogger().LogError(
+ 'Please provide a valid chromeos root via --chromeos_root')
+ return 1
+
+ image = CrosImage(image_path, chromeos_root, options.no_unmount)
+
+ if options.mount_basename:
+ mount_basename = '{basename}.{index}'.format(
+ basename=options.mount_basename, index=i)
+ else:
+ mount_basename = None
+
+ if image.MountImage(mount_basename):
+ images.append(image)
+ image.FindElfFiles()
+
+ if len(images) == 2:
+ image_comparator = ImageComparator(images, options.diff_file)
+ result = image_comparator.CompareImages()
+ finally:
+ for image in images:
+ image.UnmountImage()
+ if image_comparator:
+ image_comparator.Cleanup()
+
+ return 0 if result else 1
+
+
+if __name__ == '__main__':
+ Main(sys.argv)
diff --git a/command_executer_timeout_test.py b/command_executer_timeout_test.py
new file mode 100755
index 00000000..ba0207ef
--- /dev/null
+++ b/command_executer_timeout_test.py
@@ -0,0 +1,33 @@
+#!/usr/bin/python2
+#
+# Copyright 2010 Google Inc. All Rights Reserved.
+"""Timeout test for command_executer."""
+
+from __future__ import print_function
+
+__author__ = 'asharif@google.com (Ahmad Sharif)'
+
+import argparse
+import sys
+
+from cros_utils import command_executer
+
+
+def Usage(parser, message):
+ print('ERROR: %s' % message)
+ parser.print_help()
+ sys.exit(0)
+
+
+def Main(argv):
+ parser = argparse.ArgumentParser()
+ _ = parser.parse_args(argv)
+
+ command = 'sleep 1000'
+ ce = command_executer.GetCommandExecuter()
+ ce.RunCommand(command, command_timeout=1)
+ return 0
+
+
+if __name__ == '__main__':
+ Main(sys.argv[1:])
diff --git a/compiler-test.sh b/compiler-test.sh
new file mode 100755
index 00000000..8083e2d2
--- /dev/null
+++ b/compiler-test.sh
@@ -0,0 +1,61 @@
+#!/bin/bash
+
+# This script is supposed to verify which compiler (GCC or clang) was
+# used to build the packages in a ChromeOS image. To use the script,
+# just pass the path to the tree containing the *.debug files for a
+# ChromeOS image. It then reads the debug info in each .debug file
+# it can find, checking the AT_producer field to determine whether
+# the package was built with clang or GCC. It counts the total
+# number of .debug files found as well as how many are built with
+# each compiler. It writes out these statistics when it is done.
+#
+# For a locally-built ChromeOS image, the debug directory is usually:
+# ${chromeos_root}/chroot/build/${board}/usr/lib/debug (from outside
+# chroot)
+# or
+# /build/${board}/usr/lib/debug (from inside chroot)
+#
+# For a buildbot-built image you can usually download the debug tree
+# (using 'gsutil cp') from
+# gs://chromeos-archive-image/<path-to-your-artifact-tree>/debug.tgz
+# After downloading it somewhere, you will need to uncompress and
+# untar it before running this script.
+#
+
+DEBUG_TREE=$1
+
+clang_count=0
+gcc_count=0
+file_count=0
+
+# Verify the argument.
+
+if [[ $# != 1 ]]; then
+ echo "Usage error:"
+ echo "compiler-test.sh <debug_directory>"
+ exit 1
+fi
+
+
+if [[ ! -d ${DEBUG_TREE} ]] ; then
+ echo "Cannot find ${DEBUG_TREE}."
+ exit 1
+fi
+
+cd ${DEBUG_TREE}
+for f in `find . -name "*.debug" -type f` ; do
+ at_producer=`readelf --debug-dump=info $f | head -25 | grep AT_producer `;
+ if echo ${at_producer} | grep -q 'GNU C' ; then
+ ((gcc_count++))
+ elif echo ${at_producer} | grep -q 'clang'; then
+ ((clang_count++));
+ fi;
+ ((file_count++))
+done
+
+echo "GCC count: ${gcc_count}"
+echo "Clang count: ${clang_count}"
+echo "Total file count: ${file_count}"
+
+
+exit 0
diff --git a/crb/autotest_gatherer.py b/crb/autotest_gatherer.py
new file mode 100644
index 00000000..f8f7b43f
--- /dev/null
+++ b/crb/autotest_gatherer.py
@@ -0,0 +1,67 @@
+from table_formatter import TableFormatter as TableFormatter
+
+
+class AutotestGatherer(TableFormatter):
+
+ def __init__(self):
+ self.runs = []
+ TableFormatter.__init__(self)
+
+ def GetFormattedMainTable(self, percents_only, fit_string):
+ ret = ''
+ table = self.GetTableValues()
+ ret += self.GetTableLabels(table)
+ ret += self.GetFormattedTable(table,
+ percents_only=percents_only,
+ fit_string=fit_string)
+ return ret
+
+ def GetFormattedSummaryTable(self, percents_only, fit_string):
+ ret = ''
+ table = self.GetTableValues()
+ summary_table = self.GetSummaryTableValues(table)
+ ret += self.GetTableLabels(summary_table)
+ ret += self.GetFormattedTable(summary_table,
+ percents_only=percents_only,
+ fit_string=fit_string)
+ return ret
+
+ def GetBenchmarksString(self):
+ ret = 'Benchmarks (in order):'
+ ret = '\n'.join(self.GetAllBenchmarks())
+ return ret
+
+ def GetAllBenchmarks(self):
+ all_benchmarks = []
+ for run in self.runs:
+ for key in run.results.keys():
+ if key not in all_benchmarks:
+ all_benchmarks.append(key)
+ all_benchmarks.sort()
+ return all_benchmarks
+
+ def GetTableValues(self):
+ table = []
+ row = []
+
+ row.append('Benchmark')
+ for i in range(len(self.runs)):
+ run = self.runs[i]
+ label = run.GetLabel()
+ label = self.GetLabelWithIteration(label, run.iteration)
+ row.append(label)
+ table.append(row)
+
+ all_benchmarks = self.GetAllBenchmarks()
+ for benchmark in all_benchmarks:
+ row = []
+ row.append(benchmark)
+ for run in self.runs:
+ results = run.results
+ if benchmark in results:
+ row.append(results[benchmark])
+ else:
+ row.append('')
+ table.append(row)
+
+ return table
diff --git a/crb/autotest_run.py b/crb/autotest_run.py
new file mode 100644
index 00000000..380c578b
--- /dev/null
+++ b/crb/autotest_run.py
@@ -0,0 +1,317 @@
+import datetime
+import getpass
+import glob
+import os
+import pickle
+import re
+import threading
+import time
+import image_chromeos
+import machine_manager_singleton
+import table_formatter
+from cros_utils import command_executer
+from cros_utils import logger
+
+SCRATCH_DIR = '/home/%s/cros_scratch' % getpass.getuser()
+PICKLE_FILE = 'pickle.txt'
+VERSION = '1'
+
+
+def ConvertToFilename(text):
+ ret = text
+ ret = re.sub('/', '__', ret)
+ ret = re.sub(' ', '_', ret)
+ ret = re.sub('=', '', ret)
+ ret = re.sub("\"", '', ret)
+ return ret
+
+
+class AutotestRun(threading.Thread):
+
+ def __init__(self,
+ autotest,
+ chromeos_root='',
+ chromeos_image='',
+ board='',
+ remote='',
+ iteration=0,
+ image_checksum='',
+ exact_remote=False,
+ rerun=False,
+ rerun_if_failed=False):
+ self.autotest = autotest
+ self.chromeos_root = chromeos_root
+ self.chromeos_image = chromeos_image
+ self.board = board
+ self.remote = remote
+ self.iteration = iteration
+ l = logger.GetLogger()
+ l.LogFatalIf(not image_checksum, "Checksum shouldn't be None")
+ self.image_checksum = image_checksum
+ self.results = {}
+ threading.Thread.__init__(self)
+ self.terminate = False
+ self.retval = None
+ self.status = 'PENDING'
+ self.run_completed = False
+ self.exact_remote = exact_remote
+ self.rerun = rerun
+ self.rerun_if_failed = rerun_if_failed
+ self.results_dir = None
+ self.full_name = None
+
+ @staticmethod
+ def MeanExcludingSlowest(array):
+ mean = sum(array) / len(array)
+ array2 = []
+
+ for v in array:
+ if mean != 0 and abs(v - mean) / mean < 0.2:
+ array2.append(v)
+
+ if array2:
+ return sum(array2) / len(array2)
+ else:
+ return mean
+
+ @staticmethod
+ def AddComposite(results_dict):
+ composite_keys = []
+ composite_dict = {}
+ for key in results_dict:
+ mo = re.match('(.*){\d+}', key)
+ if mo:
+ composite_keys.append(mo.group(1))
+ for key in results_dict:
+ for composite_key in composite_keys:
+ if (key.count(composite_key) != 0 and
+ table_formatter.IsFloat(results_dict[key])):
+ if composite_key not in composite_dict:
+ composite_dict[composite_key] = []
+ composite_dict[composite_key].append(float(results_dict[key]))
+ break
+
+ for composite_key in composite_dict:
+ v = composite_dict[composite_key]
+ results_dict['%s[c]' % composite_key] = sum(v) / len(v)
+ mean_excluding_slowest = AutotestRun.MeanExcludingSlowest(v)
+ results_dict['%s[ce]' % composite_key] = mean_excluding_slowest
+
+ return results_dict
+
+ def ParseOutput(self):
+ p = re.compile('^-+.*?^-+', re.DOTALL | re.MULTILINE)
+ matches = p.findall(self.out)
+ for i in range(len(matches)):
+ results = matches[i]
+ results_dict = {}
+ for line in results.splitlines()[1:-1]:
+ mo = re.match('(.*\S)\s+\[\s+(PASSED|FAILED)\s+\]', line)
+ if mo:
+ results_dict[mo.group(1)] = mo.group(2)
+ continue
+ mo = re.match('(.*\S)\s+(.*)', line)
+ if mo:
+ results_dict[mo.group(1)] = mo.group(2)
+
+ # Add a composite keyval for tests like startup.
+ results_dict = AutotestRun.AddComposite(results_dict)
+
+ self.results = results_dict
+
+ # This causes it to not parse the table again
+ # Autotest recently added a secondary table
+ # That reports errors and screws up the final pretty output.
+ break
+ mo = re.search('Results placed in (\S+)', self.out)
+ if mo:
+ self.results_dir = mo.group(1)
+ self.full_name = os.path.basename(self.results_dir)
+
+ def GetCacheHashBase(self):
+ ret = ('%s %s %s' %
+ (self.image_checksum, self.autotest.name, self.iteration))
+ if self.autotest.args:
+ ret += ' %s' % self.autotest.args
+ ret += '-%s' % VERSION
+ return ret
+
+ def GetLabel(self):
+ ret = '%s %s remote:%s' % (self.chromeos_image, self.autotest.name,
+ self.remote)
+ return ret
+
+ def TryToLoadFromCache(self):
+ base = self.GetCacheHashBase()
+ if self.exact_remote:
+ if not self.remote:
+ return False
+ cache_dir_glob = '%s_%s' % (ConvertToFilename(base), self.remote)
+ else:
+ cache_dir_glob = '%s*' % ConvertToFilename(base)
+ cache_path_glob = os.path.join(SCRATCH_DIR, cache_dir_glob)
+ matching_dirs = glob.glob(cache_path_glob)
+ if matching_dirs:
+ matching_dir = matching_dirs[0]
+ cache_file = os.path.join(matching_dir, PICKLE_FILE)
+ assert os.path.isfile(cache_file)
+ self._logger.LogOutput('Trying to read from cache file: %s' % cache_file)
+ return self.ReadFromCache(cache_file)
+ self._logger.LogOutput('Cache miss. AM going to run: %s for: %s' %
+ (self.autotest.name, self.chromeos_image))
+ return False
+
+ def ReadFromCache(self, cache_file):
+ with open(cache_file, 'rb') as f:
+ self.retval = pickle.load(f)
+ self.out = pickle.load(f)
+ self.err = pickle.load(f)
+ self._logger.LogOutput(self.out)
+ return True
+ return False
+
+ def StoreToCache(self):
+ base = self.GetCacheHashBase()
+ self.cache_dir = os.path.join(SCRATCH_DIR,
+ '%s_%s' % (ConvertToFilename(base),
+ self.remote))
+ cache_file = os.path.join(self.cache_dir, PICKLE_FILE)
+ command = 'mkdir -p %s' % os.path.dirname(cache_file)
+ ret = self._ce.RunCommand(command)
+ assert ret == 0, "Couldn't create cache dir"
+ with open(cache_file, 'wb') as f:
+ pickle.dump(self.retval, f)
+ pickle.dump(self.out, f)
+ pickle.dump(self.err, f)
+
+ def run(self):
+ self._logger = logger.Logger(
+ os.path.dirname(__file__), '%s.%s' % (os.path.basename(__file__),
+ self.name), True)
+ self._ce = command_executer.GetCommandExecuter(self._logger)
+ self.RunCached()
+
+ def RunCached(self):
+ self.status = 'WAITING'
+ cache_hit = False
+ if not self.rerun:
+ cache_hit = self.TryToLoadFromCache()
+ else:
+ self._logger.LogOutput('--rerun passed. Not using cached results.')
+ if self.rerun_if_failed and self.retval:
+ self._logger.LogOutput('--rerun_if_failed passed and existing test '
+ 'failed. Rerunning...')
+ cache_hit = False
+ if not cache_hit:
+ # Get machine
+ while True:
+ if self.terminate:
+ return 1
+ self.machine = (machine_manager_singleton.MachineManagerSingleton(
+ ).AcquireMachine(self.image_checksum))
+ if self.machine:
+ self._logger.LogOutput('%s: Machine %s acquired at %s' %
+ (self.name, self.machine.name,
+ datetime.datetime.now()))
+ break
+ else:
+ sleep_duration = 10
+ time.sleep(sleep_duration)
+ try:
+ self.remote = self.machine.name
+
+ if self.machine.checksum != self.image_checksum:
+ self.retval = self.ImageTo(self.machine.name)
+ if self.retval:
+ return self.retval
+ self.machine.checksum = self.image_checksum
+ self.machine.image = self.chromeos_image
+ self.status = 'RUNNING: %s' % self.autotest.name
+ [self.retval, self.out, self.err] = self.RunTestOn(self.machine.name)
+ self.run_completed = True
+
+ finally:
+ self._logger.LogOutput('Releasing machine: %s' % self.machine.name)
+ machine_manager_singleton.MachineManagerSingleton().ReleaseMachine(
+ self.machine)
+ self._logger.LogOutput('Released machine: %s' % self.machine.name)
+
+ self.StoreToCache()
+
+ if not self.retval:
+ self.status = 'SUCCEEDED'
+ else:
+ self.status = 'FAILED'
+
+ self.ParseOutput()
+ # Copy results directory to the scratch dir
+ if (not cache_hit and not self.retval and self.autotest.args and
+ '--profile' in self.autotest.args):
+ results_dir = os.path.join(self.chromeos_root, 'chroot',
+ self.results_dir.lstrip('/'))
+ tarball = os.path.join(
+ self.cache_dir, os.path.basename(os.path.dirname(self.results_dir)))
+ command = ('cd %s && tar cjf %s.tbz2 .' % (results_dir, tarball))
+ self._ce.RunCommand(command)
+ perf_data_file = os.path.join(self.results_dir, self.full_name,
+ 'profiling/iteration.1/perf.data')
+
+ # Attempt to build a perf report and keep it with the results.
+ command = ('cd %s/src/scripts &&'
+ ' cros_sdk -- /usr/sbin/perf report --symfs=/build/%s'
+ ' -i %s --stdio' % (self.chromeos_root, self.board,
+ perf_data_file))
+ ret, out, err = self._ce.RunCommandWOutput(command)
+ with open(os.path.join(self.cache_dir, 'perf.report'), 'wb') as f:
+ f.write(out)
+ return self.retval
+
+ def ImageTo(self, machine_name):
+ image_args = [image_chromeos.__file__, '--chromeos_root=%s' %
+ self.chromeos_root, '--image=%s' % self.chromeos_image,
+ '--remote=%s' % machine_name]
+ if self.board:
+ image_args.append('--board=%s' % self.board)
+
+### devserver_port = 8080
+### mo = re.search("\d+", self.name)
+### if mo:
+### to_add = int(mo.group(0))
+### assert to_add < 100, "Too many threads launched!"
+### devserver_port += to_add
+
+### # I tried --noupdate_stateful, but that still fails when run in parallel.
+### image_args.append("--image_to_live_args=\"--devserver_port=%s"
+### " --noupdate_stateful\"" % devserver_port)
+### image_args.append("--image_to_live_args=--devserver_port=%s" %
+### devserver_port)
+
+# Currently can't image two machines at once.
+# So have to serialized on this lock.
+ self.status = 'WAITING ON IMAGE_LOCK'
+ with machine_manager_singleton.MachineManagerSingleton().image_lock:
+ self.status = 'IMAGING'
+ retval = self._ce.RunCommand(' '.join(['python'] + image_args))
+ machine_manager_singleton.MachineManagerSingleton().num_reimages += 1
+ if retval:
+ self.status = 'ABORTED DUE TO IMAGE FAILURE'
+ return retval
+
+ def DoPowerdHack(self):
+ command = 'sudo initctl stop powerd'
+ self._ce.CrosRunCommand(command,
+ machine=self.machine.name,
+ chromeos_root=self.chromeos_root)
+
+ def RunTestOn(self, machine_name):
+ command = 'cd %s/src/scripts' % self.chromeos_root
+ options = ''
+ if self.board:
+ options += ' --board=%s' % self.board
+ if self.autotest.args:
+ options += " --args='%s'" % self.autotest.args
+ if 'tegra2' in self.board:
+ self.DoPowerdHack()
+ command += ('&& cros_sdk -- /usr/bin/test_that %s %s %s' %
+ (options, machine_name, self.autotest.name))
+ return self._ce.RunCommand(command, True)
diff --git a/crb/crb_driver.py b/crb/crb_driver.py
new file mode 100755
index 00000000..8c767fb8
--- /dev/null
+++ b/crb/crb_driver.py
@@ -0,0 +1,370 @@
+#!/usr/bin/python
+#
+# Copyright 2010 Google Inc. All Rights Reserved.
+
+import datetime
+import optparse
+import os
+import smtplib
+import sys
+import time
+from email.mime.text import MIMEText
+
+from autotest_gatherer import AutotestGatherer as AutotestGatherer
+from autotest_run import AutotestRun as AutotestRun
+from machine_manager_singleton import MachineManagerSingleton as MachineManagerSingleton
+from cros_utils import logger
+from cros_utils.file_utils import FileUtils
+
+
+def CanonicalizeChromeOSRoot(chromeos_root):
+ chromeos_root = os.path.expanduser(chromeos_root)
+ if os.path.isfile(os.path.join(chromeos_root, 'src/scripts/enter_chroot.sh')):
+ return chromeos_root
+ else:
+ return None
+
+
+class Autotest(object):
+
+ def __init__(self, autotest_string):
+ self.name = None
+ self.iterations = None
+ self.args = None
+ fields = autotest_string.split(',', 1)
+ self.name = fields[0]
+ if len(fields) > 1:
+ autotest_string = fields[1]
+ fields = autotest_string.split(',', 1)
+ else:
+ return
+ self.iterations = int(fields[0])
+ if len(fields) > 1:
+ self.args = fields[1]
+ else:
+ return
+
+ def __str__(self):
+ return '\n'.join([self.name, self.iterations, self.args])
+
+
+def CreateAutotestListFromString(autotest_strings, default_iterations=None):
+ autotest_list = []
+ for autotest_string in autotest_strings.split(':'):
+ autotest = Autotest(autotest_string)
+ if default_iterations and not autotest.iterations:
+ autotest.iterations = default_iterations
+
+ autotest_list.append(autotest)
+ return autotest_list
+
+
+def CreateAutotestRuns(images,
+ autotests,
+ remote,
+ board,
+ exact_remote,
+ rerun,
+ rerun_if_failed,
+ main_chromeos_root=None):
+ autotest_runs = []
+ for image in images:
+ logger.GetLogger().LogOutput('Computing md5sum of: %s' % image)
+ image_checksum = FileUtils().Md5File(image)
+ logger.GetLogger().LogOutput('md5sum %s: %s' % (image, image_checksum))
+ ### image_checksum = "abcdefghi"
+
+ chromeos_root = main_chromeos_root
+ if not main_chromeos_root:
+ image_chromeos_root = os.path.join(
+ os.path.dirname(image), '../../../../..')
+ chromeos_root = CanonicalizeChromeOSRoot(image_chromeos_root)
+ assert chromeos_root, 'chromeos_root: %s invalid' % image_chromeos_root
+ else:
+ chromeos_root = CanonicalizeChromeOSRoot(main_chromeos_root)
+ assert chromeos_root, 'chromeos_root: %s invalid' % main_chromeos_root
+
+ # We just need a single ChromeOS root in the MachineManagerSingleton. It is
+ # needed because we can save re-image time by checking the image checksum at
+ # the beginning and assigning autotests to machines appropriately.
+ if not MachineManagerSingleton().chromeos_root:
+ MachineManagerSingleton().chromeos_root = chromeos_root
+
+ for autotest in autotests:
+ for iteration in range(autotest.iterations):
+ autotest_run = AutotestRun(autotest,
+ chromeos_root=chromeos_root,
+ chromeos_image=image,
+ board=board,
+ remote=remote,
+ iteration=iteration,
+ image_checksum=image_checksum,
+ exact_remote=exact_remote,
+ rerun=rerun,
+ rerun_if_failed=rerun_if_failed)
+ autotest_runs.append(autotest_run)
+ return autotest_runs
+
+
+def GetNamesAndIterations(autotest_runs):
+ strings = []
+ for autotest_run in autotest_runs:
+ strings.append('%s:%s' % (autotest_run.autotest.name,
+ autotest_run.iteration))
+ return ' %s (%s)' % (len(strings), ' '.join(strings))
+
+
+def GetStatusString(autotest_runs):
+ status_bins = {}
+ for autotest_run in autotest_runs:
+ if autotest_run.status not in status_bins:
+ status_bins[autotest_run.status] = []
+ status_bins[autotest_run.status].append(autotest_run)
+
+ status_strings = []
+ for key, val in status_bins.items():
+ status_strings.append('%s: %s' % (key, GetNamesAndIterations(val)))
+ return 'Thread Status:\n%s' % '\n'.join(status_strings)
+
+
+def GetProgressBar(num_done, num_total):
+ ret = 'Done: %s%%' % int(100.0 * num_done / num_total)
+ bar_length = 50
+ done_char = '>'
+ undone_char = ' '
+ num_done_chars = bar_length * num_done / num_total
+ num_undone_chars = bar_length - num_done_chars
+ ret += ' [%s%s]' % (num_done_chars * done_char,
+ num_undone_chars * undone_char)
+ return ret
+
+
+def GetProgressString(start_time, num_remain, num_total):
+ current_time = time.time()
+ elapsed_time = current_time - start_time
+ try:
+ eta_seconds = float(num_remain) * elapsed_time / (num_total - num_remain)
+ eta_seconds = int(eta_seconds)
+ eta = datetime.timedelta(seconds=eta_seconds)
+ except ZeroDivisionError:
+ eta = 'Unknown'
+ strings = []
+ strings.append('Current time: %s Elapsed: %s ETA: %s' %
+ (datetime.datetime.now(),
+ datetime.timedelta(seconds=int(elapsed_time)), eta))
+ strings.append(GetProgressBar(num_total - num_remain, num_total))
+ return '\n'.join(strings)
+
+
+def RunAutotestRunsInParallel(autotest_runs):
+ start_time = time.time()
+ active_threads = []
+ for autotest_run in autotest_runs:
+ # Set threads to daemon so program exits when ctrl-c is pressed.
+ autotest_run.daemon = True
+ autotest_run.start()
+ active_threads.append(autotest_run)
+
+ print_interval = 30
+ last_printed_time = time.time()
+ while active_threads:
+ try:
+ active_threads = [t for t in active_threads
+ if t is not None and t.isAlive()]
+ for t in active_threads:
+ t.join(1)
+ if time.time() - last_printed_time > print_interval:
+ border = '=============================='
+ logger.GetLogger().LogOutput(border)
+ logger.GetLogger().LogOutput(GetProgressString(start_time, len(
+ [t for t in autotest_runs if t.status not in ['SUCCEEDED', 'FAILED']
+ ]), len(autotest_runs)))
+ logger.GetLogger().LogOutput(GetStatusString(autotest_runs))
+ logger.GetLogger().LogOutput('%s\n' %
+ MachineManagerSingleton().AsString())
+ logger.GetLogger().LogOutput(border)
+ last_printed_time = time.time()
+ except KeyboardInterrupt:
+ print 'C-c received... cleaning up threads.'
+ for t in active_threads:
+ t.terminate = True
+ return 1
+ return 0
+
+
+def RunAutotestRunsSerially(autotest_runs):
+ for autotest_run in autotest_runs:
+ retval = autotest_run.Run()
+ if retval:
+ return retval
+
+
+def ProduceTables(autotest_runs, full_table, fit_string):
+ l = logger.GetLogger()
+ ags_dict = {}
+ for autotest_run in autotest_runs:
+ name = autotest_run.full_name
+ if name not in ags_dict:
+ ags_dict[name] = AutotestGatherer()
+ ags_dict[name].runs.append(autotest_run)
+ output = ''
+ for b, ag in ags_dict.items():
+ output += 'Benchmark: %s\n' % b
+ output += ag.GetFormattedMainTable(percents_only=not full_table,
+ fit_string=fit_string)
+ output += '\n'
+
+ summary = ''
+ for b, ag in ags_dict.items():
+ summary += 'Benchmark Summary Table: %s\n' % b
+ summary += ag.GetFormattedSummaryTable(percents_only=not full_table,
+ fit_string=fit_string)
+ summary += '\n'
+
+ output += summary
+ output += ('Number of re-images performed: %s' %
+ MachineManagerSingleton().num_reimages)
+ l.LogOutput(output)
+
+ if autotest_runs:
+ board = autotest_runs[0].board
+ else:
+ board = ''
+
+ subject = '%s: %s' % (board, ', '.join(ags_dict.keys()))
+
+ if any(autotest_run.run_completed for autotest_run in autotest_runs):
+ SendEmailToUser(subject, summary)
+
+
+def SendEmailToUser(subject, text_to_send):
+ # Email summary to the current user.
+ msg = MIMEText(text_to_send)
+
+ # me == the sender's email address
+ # you == the recipient's email address
+ me = os.path.basename(__file__)
+ you = os.getlogin()
+ msg['Subject'] = '[%s] %s' % (os.path.basename(__file__), subject)
+ msg['From'] = me
+ msg['To'] = you
+
+ # Send the message via our own SMTP server, but don't include the
+ # envelope header.
+ s = smtplib.SMTP('localhost')
+ s.sendmail(me, [you], msg.as_string())
+ s.quit()
+
+
+def Main(argv):
+ """The main function."""
+ # Common initializations
+ ### command_executer.InitCommandExecuter(True)
+ l = logger.GetLogger()
+
+ parser = optparse.OptionParser()
+ parser.add_option('-t',
+ '--tests',
+ dest='tests',
+ help=('Tests to compare.'
+ 'Optionally specify per-test iterations by:'
+ '<test>,<iter>:<args>'))
+ parser.add_option('-c',
+ '--chromeos_root',
+ dest='chromeos_root',
+ help='A *single* chromeos_root where scripts can be found.')
+ parser.add_option('-n',
+ '--iterations',
+ dest='iterations',
+ help='Iterations to run per benchmark.',
+ default=1)
+ parser.add_option('-r',
+ '--remote',
+ dest='remote',
+ help='The remote chromeos machine.')
+ parser.add_option('-b', '--board', dest='board', help='The remote board.')
+ parser.add_option('--full_table',
+ dest='full_table',
+ help='Print full tables.',
+ action='store_true',
+ default=True)
+ parser.add_option('--exact_remote',
+ dest='exact_remote',
+ help='Run tests on the exact remote.',
+ action='store_true',
+ default=False)
+ parser.add_option('--fit_string',
+ dest='fit_string',
+ help='Fit strings to fixed sizes.',
+ action='store_true',
+ default=False)
+ parser.add_option('--rerun',
+ dest='rerun',
+ help='Re-run regardless of cache hit.',
+ action='store_true',
+ default=False)
+ parser.add_option('--rerun_if_failed',
+ dest='rerun_if_failed',
+ help='Re-run if previous run was a failure.',
+ action='store_true',
+ default=False)
+ parser.add_option('--no_lock',
+ dest='no_lock',
+ help='Do not lock the machine before running the tests.',
+ action='store_true',
+ default=False)
+ l.LogOutput(' '.join(argv))
+ [options, args] = parser.parse_args(argv)
+
+ if options.remote is None:
+ l.LogError('No remote machine specified.')
+ parser.print_help()
+ return 1
+
+ if not options.board:
+ l.LogError('No board specified.')
+ parser.print_help()
+ return 1
+
+ remote = options.remote
+ tests = options.tests
+ board = options.board
+ exact_remote = options.exact_remote
+ iterations = int(options.iterations)
+
+ autotests = CreateAutotestListFromString(tests, iterations)
+
+ main_chromeos_root = options.chromeos_root
+ images = args[1:]
+ fit_string = options.fit_string
+ full_table = options.full_table
+ rerun = options.rerun
+ rerun_if_failed = options.rerun_if_failed
+
+ MachineManagerSingleton().no_lock = options.no_lock
+
+ # Now try creating all the Autotests
+ autotest_runs = CreateAutotestRuns(images, autotests, remote, board,
+ exact_remote, rerun, rerun_if_failed,
+ main_chromeos_root)
+
+ try:
+ # At this point we have all the autotest runs.
+ for machine in remote.split(','):
+ MachineManagerSingleton().AddMachine(machine)
+
+ retval = RunAutotestRunsInParallel(autotest_runs)
+ if retval:
+ return retval
+
+ # Now print tables
+ ProduceTables(autotest_runs, full_table, fit_string)
+ finally:
+ # not sure why this isn't called at the end normally...
+ MachineManagerSingleton().__del__()
+
+ return 0
+
+
+if __name__ == '__main__':
+ sys.exit(Main(sys.argv))
diff --git a/crb/machine_manager_singleton.py b/crb/machine_manager_singleton.py
new file mode 100644
index 00000000..6ffe9684
--- /dev/null
+++ b/crb/machine_manager_singleton.py
@@ -0,0 +1,153 @@
+import image_chromeos
+import lock_machine
+import sys
+import threading
+import time
+from cros_utils import command_executer
+from cros_utils import logger
+
+
+class CrosMachine(object):
+
+ def __init__(self, name):
+ self.name = name
+ self.image = None
+ self.checksum = None
+ self.locked = False
+ self.released_time = time.time()
+ self.autotest_run = None
+
+ def __str__(self):
+ l = []
+ l.append(self.name)
+ l.append(str(self.image))
+ l.append(str(self.checksum))
+ l.append(str(self.locked))
+ l.append(str(self.released_time))
+ return ', '.join(l)
+
+
+class MachineManagerSingleton(object):
+ _instance = None
+ _lock = threading.RLock()
+ _all_machines = []
+ _machines = []
+ image_lock = threading.Lock()
+ num_reimages = 0
+ chromeos_root = None
+ no_lock = False
+
+ def __new__(cls, *args, **kwargs):
+ with cls._lock:
+ if not cls._instance:
+ cls._instance = super(MachineManagerSingleton, cls).__new__(cls, *args,
+ **kwargs)
+ return cls._instance
+
+ def TryToLockMachine(self, cros_machine):
+ with self._lock:
+ assert cros_machine, "Machine can't be None"
+ for m in self._machines:
+ assert m.name != cros_machine.name, ('Tried to double-lock %s' %
+ cros_machine.name)
+ if self.no_lock:
+ locked = True
+ else:
+ locked = lock_machine.Machine(cros_machine.name).Lock(True, sys.argv[0])
+ if locked:
+ ce = command_executer.GetCommandExecuter()
+ command = 'cat %s' % image_chromeos.checksum_file
+ ret, out, err = ce.CrosRunCommandWOutput(
+ command,
+ chromeos_root=self.chromeos_root,
+ machine=cros_machine.name)
+ if ret == 0:
+ cros_machine.checksum = out.strip()
+ self._machines.append(cros_machine)
+ else:
+ logger.GetLogger().LogOutput("Warning: Couldn't lock: %s" %
+ cros_machine.name)
+
+ # This is called from single threaded mode.
+ def AddMachine(self, machine_name):
+ with self._lock:
+ for m in self._all_machines:
+ assert m.name != machine_name, 'Tried to double-add %s' % machine_name
+ self._all_machines.append(CrosMachine(machine_name))
+
+ def AcquireMachine(self, image_checksum):
+ with self._lock:
+ # Lazily external lock machines
+ if not self._machines:
+ for m in self._all_machines:
+ self.TryToLockMachine(m)
+ assert self._machines, ('Could not lock any machine in %s' %
+ self._all_machines)
+
+ ### for m in self._machines:
+ ### if (m.locked and time.time() - m.released_time < 10 and
+ ### m.checksum == image_checksum):
+ ### return None
+ for m in [machine for machine in self._machines if not machine.locked]:
+ if m.checksum == image_checksum:
+ m.locked = True
+ m.autotest_run = threading.current_thread()
+ return m
+ for m in [machine for machine in self._machines if not machine.locked]:
+ if not m.checksum:
+ m.locked = True
+ m.autotest_run = threading.current_thread()
+ return m
+ for m in [machine for machine in self._machines if not machine.locked]:
+ if time.time() - m.released_time > 20:
+ m.locked = True
+ m.autotest_run = threading.current_thread()
+ return m
+ return None
+
+ def ReleaseMachine(self, machine):
+ with self._lock:
+ for m in self._machines:
+ if machine.name == m.name:
+ assert m.locked == True, 'Tried to double-release %s' % m.name
+ m.released_time = time.time()
+ m.locked = False
+ m.status = 'Available'
+ break
+
+ def __del__(self):
+ with self._lock:
+ # Unlock all machines.
+ for m in self._machines:
+ if not self.no_lock:
+ assert lock_machine.Machine(m.name).Unlock(True) == True, (
+ "Couldn't unlock machine: %s" % m.name)
+
+ def __str__(self):
+ with self._lock:
+ l = ['MachineManager Status:']
+ for m in self._machines:
+ l.append(str(m))
+ return '\n'.join(l)
+
+ def AsString(self):
+ with self._lock:
+ stringify_fmt = '%-30s %-10s %-4s %-25s %-32s'
+ header = stringify_fmt % ('Machine', 'Thread', 'Lock', 'Status',
+ 'Checksum')
+ table = [header]
+ for m in self._machines:
+ if m.autotest_run:
+ autotest_name = m.autotest_run.name
+ autotest_status = m.autotest_run.status
+ else:
+ autotest_name = ''
+ autotest_status = ''
+
+ try:
+ machine_string = stringify_fmt % (m.name, autotest_name, m.locked,
+ autotest_status, m.checksum)
+ except:
+ machine_string = ''
+ table.append(machine_string)
+ return 'Machine Status:\n%s' % '\n'.join(table)
diff --git a/crb/table_formatter.py b/crb/table_formatter.py
new file mode 100644
index 00000000..b8e25d5f
--- /dev/null
+++ b/crb/table_formatter.py
@@ -0,0 +1,258 @@
+import numpy
+import re
+
+
+def IsFloat(text):
+ if text is None:
+ return False
+ try:
+ float(text)
+ return True
+ except ValueError:
+ return False
+
+
+def RemoveTrailingZeros(x):
+ ret = x
+ ret = re.sub('\.0*$', '', ret)
+ ret = re.sub('(\.[1-9]*)0+$', '\\1', ret)
+ return ret
+
+
+def HumanizeFloat(x, n=2):
+ if not IsFloat(x):
+ return x
+ digits = re.findall('[0-9.]', str(x))
+ decimal_found = False
+ ret = ''
+ sig_figs = 0
+ for digit in digits:
+ if digit == '.':
+ decimal_found = True
+ elif sig_figs != 0 or digit != '0':
+ sig_figs += 1
+ if decimal_found and sig_figs >= n:
+ break
+ ret += digit
+ return ret
+
+
+def GetNSigFigs(x, n=2):
+ if not IsFloat(x):
+ return x
+ my_fmt = '%.' + str(n - 1) + 'e'
+ x_string = my_fmt % x
+ f = float(x_string)
+ return f
+
+
+def GetFormattedPercent(baseline, other, bad_result='--'):
+ result = '%8s' % GetPercent(baseline, other, bad_result)
+ return result
+
+
+def GetPercent(baseline, other, bad_result='--'):
+ result = bad_result
+ if IsFloat(baseline) and IsFloat(other):
+ try:
+ pct = (float(other) / float(baseline) - 1) * 100
+ result = '%+1.1f' % pct
+ except ZeroDivisionError:
+ pass
+ return result
+
+
+def FitString(text, length):
+ if len(text) == length:
+ return text
+ elif len(text) > length:
+ return text[-length:]
+ else:
+ fmt = '%%%ds' % length
+ return fmt % text
+
+
+class TableFormatter(object):
+
+ def __init__(self):
+ self.d = '\t'
+ self.bad_result = 'x'
+
+ def GetTablePercents(self, table):
+ # Assumes table is not transposed.
+ pct_table = []
+
+ pct_table.append(table[0])
+ for i in range(1, len(table)):
+ row = []
+ row.append(table[i][0])
+ for j in range(1, len(table[0])):
+ c = table[i][j]
+ b = table[i][1]
+ p = GetPercent(b, c, self.bad_result)
+ row.append(p)
+ pct_table.append(row)
+ return pct_table
+
+ def FormatFloat(self, c, max_length=8):
+ if not IsFloat(c):
+ return c
+ f = float(c)
+ ret = HumanizeFloat(f, 4)
+ ret = RemoveTrailingZeros(ret)
+ if len(ret) > max_length:
+ ret = '%1.1ef' % f
+ return ret
+
+ def TransposeTable(self, table):
+ transposed_table = []
+ for i in range(len(table[0])):
+ row = []
+ for j in range(len(table)):
+ row.append(table[j][i])
+ transposed_table.append(row)
+ return transposed_table
+
+ def GetTableLabels(self, table):
+ ret = ''
+ header = table[0]
+ for i in range(1, len(header)):
+ ret += '%d: %s\n' % (i, header[i])
+ return ret
+
+ def GetFormattedTable(self,
+ table,
+ transposed=False,
+ first_column_width=30,
+ column_width=14,
+ percents_only=True,
+ fit_string=True):
+ o = ''
+ pct_table = self.GetTablePercents(table)
+ if transposed == True:
+ table = self.TransposeTable(table)
+ pct_table = self.TransposeTable(table)
+
+ for i in range(0, len(table)):
+ for j in range(len(table[0])):
+ if j == 0:
+ width = first_column_width
+ else:
+ width = column_width
+
+ c = table[i][j]
+ p = pct_table[i][j]
+
+ # Replace labels with numbers: 0... n
+ if IsFloat(c):
+ c = self.FormatFloat(c)
+
+ if IsFloat(p) and not percents_only:
+ p = '%s%%' % p
+
+ # Print percent values side by side.
+ if j != 0:
+ if percents_only:
+ c = '%s' % p
+ else:
+ c = '%s (%s)' % (c, p)
+
+ if i == 0 and j != 0:
+ c = str(j)
+
+ if fit_string:
+ o += FitString(c, width) + self.d
+ else:
+ o += c + self.d
+ o += '\n'
+ return o
+
+ def GetGroups(self, table):
+ labels = table[0]
+ groups = []
+ group_dict = {}
+ for i in range(1, len(labels)):
+ label = labels[i]
+ stripped_label = self.GetStrippedLabel(label)
+ if stripped_label not in group_dict:
+ group_dict[stripped_label] = len(groups)
+ groups.append([])
+ groups[group_dict[stripped_label]].append(i)
+ return groups
+
+ def GetSummaryTableValues(self, table):
+ # First get the groups
+ groups = self.GetGroups(table)
+
+ summary_table = []
+
+ labels = table[0]
+
+ summary_labels = ['Summary Table']
+ for group in groups:
+ label = labels[group[0]]
+ stripped_label = self.GetStrippedLabel(label)
+ group_label = '%s (%d runs)' % (stripped_label, len(group))
+ summary_labels.append(group_label)
+ summary_table.append(summary_labels)
+
+ for i in range(1, len(table)):
+ row = table[i]
+ summary_row = [row[0]]
+ for group in groups:
+ group_runs = []
+ for index in group:
+ group_runs.append(row[index])
+ group_run = self.AggregateResults(group_runs)
+ summary_row.append(group_run)
+ summary_table.append(summary_row)
+
+ return summary_table
+
+ # Drop N% slowest and M% fastest numbers, and return arithmean of
+ # the remaining.
+ @staticmethod
+ def AverageWithDrops(numbers, slow_percent=20, fast_percent=20):
+ sorted_numbers = list(numbers)
+ sorted_numbers.sort()
+ num_slow = int(slow_percent / 100.0 * len(sorted_numbers))
+ num_fast = int(fast_percent / 100.0 * len(sorted_numbers))
+ sorted_numbers = sorted_numbers[num_slow:]
+ if num_fast:
+ sorted_numbers = sorted_numbers[:-num_fast]
+ return numpy.average(sorted_numbers)
+
+ @staticmethod
+ def AggregateResults(group_results):
+ ret = ''
+ if not group_results:
+ return ret
+ all_floats = True
+ all_passes = True
+ all_fails = True
+ for group_result in group_results:
+ if not IsFloat(group_result):
+ all_floats = False
+ if group_result != 'PASSED':
+ all_passes = False
+ if group_result != 'FAILED':
+ all_fails = False
+ if all_floats == True:
+ float_results = [float(v) for v in group_results]
+ ret = '%f' % TableFormatter.AverageWithDrops(float_results)
+ # Add this line for standard deviation.
+ ### ret += " %f" % numpy.std(float_results)
+ elif all_passes == True:
+ ret = 'ALL_PASS'
+ elif all_fails == True:
+ ret = 'ALL_FAILS'
+ return ret
+
+ @staticmethod
+ def GetStrippedLabel(label):
+ return re.sub('\s*\S+:\S+\s*', '', label)
+### return re.sub("\s*remote:\S*\s*i:\d+$", "", label)
+
+ @staticmethod
+ def GetLabelWithIteration(label, iteration):
+ return '%s i:%d' % (label, iteration)
diff --git a/cros_login.py b/cros_login.py
new file mode 100755
index 00000000..32dfcb70
--- /dev/null
+++ b/cros_login.py
@@ -0,0 +1,118 @@
+#!/usr/bin/python2
+#
+# Copyright 2010~2015 Google Inc. All Rights Reserved.
+"""Script to get past the login screen of ChromeOS.
+
+"""
+from __future__ import print_function
+
+import argparse
+import os
+import sys
+import tempfile
+
+from cros_utils import command_executer
+
+LOGIN_PROMPT_VISIBLE_MAGIC_FILE = '/tmp/uptime-login-prompt-visible'
+LOGGED_IN_MAGIC_FILE = '/var/run/state/logged-in'
+
+script_header = """
+import os
+import autox
+import time
+"""
+
+wait_for_login_screen = """
+
+while True:
+ print 'Waiting for login screen to appear...'
+ if os.path.isfile('%s'):
+ break
+ time.sleep(1)
+ print 'Done'
+
+time.sleep(20)
+""" % LOGIN_PROMPT_VISIBLE_MAGIC_FILE
+
+do_login = """
+xauth_filename = '/home/chronos/.Xauthority'
+os.environ.setdefault('XAUTHORITY', xauth_filename)
+os.environ.setdefault('DISPLAY', ':0.0')
+
+print 'Now sending the hotkeys for logging in.'
+ax = autox.AutoX()
+# navigate to login screen
+ax.send_hotkey('Ctrl+Shift+q')
+ax.send_hotkey('Ctrl+Alt+l')
+# escape out of any login screen menus (e.g., the network select menu)
+time.sleep(2)
+ax.send_hotkey('Escape')
+time.sleep(2)
+ax.send_hotkey('Tab')
+time.sleep(0.5)
+ax.send_hotkey('Tab')
+time.sleep(0.5)
+ax.send_hotkey('Tab')
+time.sleep(0.5)
+ax.send_hotkey('Tab')
+time.sleep(0.5)
+ax.send_hotkey('Return')
+print 'Waiting for Chrome to appear...'
+while True:
+ if os.path.isfile('%s'):
+ break
+ time.sleep(1)
+print 'Done'
+""" % LOGGED_IN_MAGIC_FILE
+
+
+def RestartUI(remote, chromeos_root, login=True):
+ chromeos_root = os.path.expanduser(chromeos_root)
+ ce = command_executer.GetCommandExecuter()
+ # First, restart ui.
+ command = 'rm -rf %s && restart ui' % LOGIN_PROMPT_VISIBLE_MAGIC_FILE
+ ce.CrosRunCommand(command, machine=remote, chromeos_root=chromeos_root)
+ host_login_script = tempfile.mktemp()
+ device_login_script = '/tmp/login.py'
+ login_script_list = [script_header, wait_for_login_screen]
+ if login:
+ login_script_list.append(do_login)
+
+ full_login_script_contents = '\n'.join(login_script_list)
+
+ with open(host_login_script, 'w') as f:
+ f.write(full_login_script_contents)
+ ce.CopyFiles(host_login_script,
+ device_login_script,
+ dest_machine=remote,
+ chromeos_root=chromeos_root,
+ recursive=False,
+ dest_cros=True)
+ ret = ce.CrosRunCommand('python %s' % device_login_script,
+ chromeos_root=chromeos_root,
+ machine=remote)
+ if os.path.exists(host_login_script):
+ os.remove(host_login_script)
+ return ret
+
+
+def Main(argv):
+ """The main function."""
+ parser = argparse.ArgumentParser()
+ parser.add_argument('-r',
+ '--remote',
+ dest='remote',
+ help='The remote ChromeOS box.')
+ parser.add_argument('-c',
+ '--chromeos_root',
+ dest='chromeos_root',
+ help='The ChromeOS root.')
+
+ options = parser.parse_args(argv)
+
+ return RestartUI(options.remote, options.chromeos_root)
+
+
+if __name__ == '__main__':
+ retval = Main(sys.argv[1:])
+ sys.exit(retval)
diff --git a/cros_utils/__init__.py b/cros_utils/__init__.py
new file mode 100644
index 00000000..8b137891
--- /dev/null
+++ b/cros_utils/__init__.py
@@ -0,0 +1 @@
+
diff --git a/cros_utils/buildbot_json.py b/cros_utils/buildbot_json.py
new file mode 100755
index 00000000..8a9d9cb8
--- /dev/null
+++ b/cros_utils/buildbot_json.py
@@ -0,0 +1,1518 @@
+#!/usr/bin/env python2
+# Copyright (c) 2012 The Chromium Authors. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following disclaimer
+# in the documentation and/or other materials provided with the
+# distribution.
+# * Neither the name of Google Inc. nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+# NOTE: This file is NOT under GPL. See above.
+"""Queries buildbot through the json interface.
+"""
+
+from __future__ import print_function
+
+__author__ = 'maruel@chromium.org'
+__version__ = '1.2'
+
+import code
+import datetime
+import functools
+import json
+
+# Pylint recommends we use "from chromite.lib import cros_logging as logging".
+# Chromite specific policy message, we want to keep using the standard logging.
+# pylint: disable=cros-logging-import
+import logging
+
+# pylint: disable=deprecated-module
+import optparse
+
+import time
+import urllib
+import urllib2
+import sys
+
+try:
+ from natsort import natsorted
+except ImportError:
+ # natsorted is a simple helper to sort "naturally", e.g. "vm40" is sorted
+ # after "vm7". Defaults to normal sorting.
+ natsorted = sorted
+
+# These values are buildbot constants used for Build and BuildStep.
+# This line was copied from master/buildbot/status/builder.py.
+SUCCESS, WARNINGS, FAILURE, SKIPPED, EXCEPTION, RETRY = range(6)
+
+## Generic node caching code.
+
+
+class Node(object):
+ """Root class for all nodes in the graph.
+
+ Provides base functionality for any node in the graph, independent if it has
+ children or not or if its content can be addressed through an url or needs to
+ be fetched as part of another node.
+
+ self.printable_attributes is only used for self documentation and for str()
+ implementation.
+ """
+ printable_attributes = []
+
+ def __init__(self, parent, url):
+ self.printable_attributes = self.printable_attributes[:]
+ if url:
+ self.printable_attributes.append('url')
+ url = url.rstrip('/')
+ if parent is not None:
+ self.printable_attributes.append('parent')
+ self.url = url
+ self.parent = parent
+
+ def __str__(self):
+ return self.to_string()
+
+ def __repr__(self):
+ """Embeds key if present."""
+ key = getattr(self, 'key', None)
+ if key is not None:
+ return '<%s key=%s>' % (self.__class__.__name__, key)
+ cached_keys = getattr(self, 'cached_keys', None)
+ if cached_keys is not None:
+ return '<%s keys=%s>' % (self.__class__.__name__, cached_keys)
+ return super(Node, self).__repr__()
+
+ def to_string(self, maximum=100):
+ out = ['%s:' % self.__class__.__name__]
+ assert not 'printable_attributes' in self.printable_attributes
+
+ def limit(txt):
+ txt = str(txt)
+ if maximum > 0:
+ if len(txt) > maximum + 2:
+ txt = txt[:maximum] + '...'
+ return txt
+
+ for k in sorted(self.printable_attributes):
+ if k == 'parent':
+ # Avoid infinite recursion.
+ continue
+ out.append(limit(' %s: %r' % (k, getattr(self, k))))
+ return '\n'.join(out)
+
+ def refresh(self):
+ """Refreshes the data."""
+ self.discard()
+ return self.cache()
+
+ def cache(self): # pragma: no cover
+ """Caches the data."""
+ raise NotImplementedError()
+
+ def discard(self): # pragma: no cover
+ """Discards cached data.
+
+ Pretty much everything is temporary except completed Build.
+ """
+ raise NotImplementedError()
+
+
+class AddressableBaseDataNode(Node): # pylint: disable=W0223
+ """A node that contains a dictionary of data that can be fetched with an url.
+
+ The node is directly addressable. It also often can be fetched by the parent.
+ """
+ printable_attributes = Node.printable_attributes + ['data']
+
+ def __init__(self, parent, url, data):
+ super(AddressableBaseDataNode, self).__init__(parent, url)
+ self._data = data
+
+ @property
+ def cached_data(self):
+ return self._data
+
+ @property
+ def data(self):
+ self.cache()
+ return self._data
+
+ def cache(self):
+ if self._data is None:
+ self._data = self._readall()
+ return True
+ return False
+
+ def discard(self):
+ self._data = None
+
+ def read(self, suburl):
+ assert self.url, self.__class__.__name__
+ url = self.url
+ if suburl:
+ url = '%s/%s' % (self.url, suburl)
+ return self.parent.read(url)
+
+ def _readall(self):
+ return self.read('')
+
+
+class AddressableDataNode(AddressableBaseDataNode): # pylint: disable=W0223
+ """Automatically encodes the url."""
+
+ def __init__(self, parent, url, data):
+ super(AddressableDataNode, self).__init__(parent, urllib.quote(url), data)
+
+
+class NonAddressableDataNode(Node): # pylint: disable=W0223
+ """A node that cannot be addressed by an unique url.
+
+ The data comes directly from the parent.
+ """
+
+ def __init__(self, parent, subkey):
+ super(NonAddressableDataNode, self).__init__(parent, None)
+ self.subkey = subkey
+
+ @property
+ def cached_data(self):
+ if self.parent.cached_data is None:
+ return None
+ return self.parent.cached_data[self.subkey]
+
+ @property
+ def data(self):
+ return self.parent.data[self.subkey]
+
+ def cache(self):
+ self.parent.cache()
+
+ def discard(self): # pragma: no cover
+ """Avoid invalid state when parent recreate the object."""
+ raise AttributeError('Call parent discard() instead')
+
+
+class VirtualNodeList(Node):
+ """Base class for every node that has children.
+
+ Adds partial supports for keys and iterator functionality. 'key' can be a
+ string or a int. Not to be used directly.
+ """
+ printable_attributes = Node.printable_attributes + ['keys']
+
+ def __init__(self, parent, url):
+ super(VirtualNodeList, self).__init__(parent, url)
+ # Keeps the keys independently when ordering is needed.
+ self._is_cached = False
+ self._has_keys_cached = False
+
+ def __contains__(self, key):
+ """Enables 'if i in obj:'."""
+ return key in self.keys
+
+ def __iter__(self):
+ """Enables 'for i in obj:'. It returns children."""
+ self.cache_keys()
+ for key in self.keys:
+ yield self[key]
+
+ def __len__(self):
+ """Enables 'len(obj)' to get the number of childs."""
+ return len(self.keys)
+
+ def discard(self):
+ """Discards data.
+
+ The default behavior is to not invalidate cached keys. The only place where
+ keys need to be invalidated is with Builds.
+ """
+ self._is_cached = False
+ self._has_keys_cached = False
+
+ @property
+ def cached_children(self): # pragma: no cover
+ """Returns an iterator over the children that are cached."""
+ raise NotImplementedError()
+
+ @property
+ def cached_keys(self): # pragma: no cover
+ raise NotImplementedError()
+
+ @property
+ def keys(self): # pragma: no cover
+ """Returns the keys for every children."""
+ raise NotImplementedError()
+
+ def __getitem__(self, key): # pragma: no cover
+ """Returns a child, without fetching its data.
+
+ The children could be invalid since no verification is done.
+ """
+ raise NotImplementedError()
+
+ def cache(self): # pragma: no cover
+ """Cache all the children."""
+ raise NotImplementedError()
+
+ def cache_keys(self): # pragma: no cover
+ """Cache all children's keys."""
+ raise NotImplementedError()
+
+
+class NodeList(VirtualNodeList): # pylint: disable=W0223
+ """Adds a cache of the keys."""
+
+ def __init__(self, parent, url):
+ super(NodeList, self).__init__(parent, url)
+ self._keys = []
+
+ @property
+ def cached_keys(self):
+ return self._keys
+
+ @property
+ def keys(self):
+ self.cache_keys()
+ return self._keys
+
+
+class NonAddressableNodeList(VirtualNodeList): # pylint: disable=W0223
+ """A node that contains children but retrieves all its data from its parent.
+
+ I.e. there's no url to get directly this data.
+ """
+ # Child class object for children of this instance. For example, BuildSteps
+ # has BuildStep children.
+ _child_cls = None
+
+ def __init__(self, parent, subkey):
+ super(NonAddressableNodeList, self).__init__(parent, None)
+ self.subkey = subkey
+ assert (not isinstance(self._child_cls, NonAddressableDataNode) and
+ issubclass(self._child_cls, NonAddressableDataNode)), (
+ self._child_cls.__name__)
+
+ @property
+ def cached_children(self):
+ if self.parent.cached_data is not None:
+ for i in xrange(len(self.parent.cached_data[self.subkey])):
+ yield self[i]
+
+ @property
+ def cached_data(self):
+ if self.parent.cached_data is None:
+ return None
+ return self.parent.data.get(self.subkey, None)
+
+ @property
+ def cached_keys(self):
+ if self.parent.cached_data is None:
+ return None
+ return range(len(self.parent.data.get(self.subkey, [])))
+
+ @property
+ def data(self):
+ return self.parent.data[self.subkey]
+
+ def cache(self):
+ self.parent.cache()
+
+ def cache_keys(self):
+ self.parent.cache()
+
+ def discard(self): # pragma: no cover
+ """Do not call.
+
+ Avoid infinite recursion by having the caller calls the parent's
+ discard() explicitely.
+ """
+ raise AttributeError('Call parent discard() instead')
+
+ def __iter__(self):
+ """Enables 'for i in obj:'. It returns children."""
+ if self.data:
+ for i in xrange(len(self.data)):
+ yield self[i]
+
+ def __getitem__(self, key):
+ """Doesn't cache the value, it's not needed.
+
+ TODO(maruel): Cache?
+ """
+ if isinstance(key, int) and key < 0:
+ key = len(self.data) + key
+ # pylint: disable=E1102
+ return self._child_cls(self, key)
+
+
+class AddressableNodeList(NodeList):
+ """A node that has children that can be addressed with an url."""
+
+ # Child class object for children of this instance. For example, Builders has
+ # Builder children and Builds has Build children.
+ _child_cls = None
+
+ def __init__(self, parent, url):
+ super(AddressableNodeList, self).__init__(parent, url)
+ self._cache = {}
+ assert (not isinstance(self._child_cls, AddressableDataNode) and
+ issubclass(self._child_cls, AddressableDataNode)), (
+ self._child_cls.__name__)
+
+ @property
+ def cached_children(self):
+ for item in self._cache.itervalues():
+ if item.cached_data is not None:
+ yield item
+
+ @property
+ def cached_keys(self):
+ return self._cache.keys()
+
+ def __getitem__(self, key):
+ """Enables 'obj[i]'."""
+ if self._has_keys_cached and not key in self._keys:
+ raise KeyError(key)
+
+ if not key in self._cache:
+ # Create an empty object.
+ self._create_obj(key, None)
+ return self._cache[key]
+
+ def cache(self):
+ if not self._is_cached:
+ data = self._readall()
+ for key in sorted(data):
+ self._create_obj(key, data[key])
+ self._is_cached = True
+ self._has_keys_cached = True
+
+ def cache_partial(self, children):
+ """Caches a partial number of children.
+
+ This method is more efficient since it does a single request for all the
+ children instead of one request per children.
+
+ It only grab objects not already cached.
+ """
+ # pylint: disable=W0212
+ if not self._is_cached:
+ to_fetch = [
+ child
+ for child in children
+ if not (child in self._cache and self._cache[child].cached_data)
+ ]
+ if to_fetch:
+ # Similar to cache(). The only reason to sort is to simplify testing.
+ params = '&'.join('select=%s' % urllib.quote(str(v))
+ for v in sorted(to_fetch))
+ data = self.read('?' + params)
+ for key in sorted(data):
+ self._create_obj(key, data[key])
+
+ def cache_keys(self):
+ """Implement to speed up enumeration. Defaults to call cache()."""
+ if not self._has_keys_cached:
+ self.cache()
+ assert self._has_keys_cached
+
+ def discard(self):
+ """Discards temporary children."""
+ super(AddressableNodeList, self).discard()
+ for v in self._cache.itervalues():
+ v.discard()
+
+ def read(self, suburl):
+ assert self.url, self.__class__.__name__
+ url = self.url
+ if suburl:
+ url = '%s/%s' % (self.url, suburl)
+ return self.parent.read(url)
+
+ def _create_obj(self, key, data):
+ """Creates an object of type self._child_cls."""
+ # pylint: disable=E1102
+ obj = self._child_cls(self, key, data)
+ # obj.key and key may be different.
+ # No need to overide cached data with None.
+ if data is not None or obj.key not in self._cache:
+ self._cache[obj.key] = obj
+ if obj.key not in self._keys:
+ self._keys.append(obj.key)
+
+ def _readall(self):
+ return self.read('')
+
+
+class SubViewNodeList(VirtualNodeList): # pylint: disable=W0223
+ """A node that shows a subset of children that comes from another structure.
+
+ The node is not addressable.
+
+ E.g. the keys are retrieved from parent but the actual data comes from
+ virtual_parent.
+ """
+
+ def __init__(self, parent, virtual_parent, subkey):
+ super(SubViewNodeList, self).__init__(parent, None)
+ self.subkey = subkey
+ self.virtual_parent = virtual_parent
+ assert isinstance(self.parent, AddressableDataNode)
+ assert isinstance(self.virtual_parent, NodeList)
+
+ @property
+ def cached_children(self):
+ if self.parent.cached_data is not None:
+ for item in self.keys:
+ if item in self.virtual_parent.keys:
+ child = self[item]
+ if child.cached_data is not None:
+ yield child
+
+ @property
+ def cached_keys(self):
+ return (self.parent.cached_data or {}).get(self.subkey, [])
+
+ @property
+ def keys(self):
+ self.cache_keys()
+ return self.parent.data.get(self.subkey, [])
+
+ def cache(self):
+ """Batch request for each child in a single read request."""
+ if not self._is_cached:
+ self.virtual_parent.cache_partial(self.keys)
+ self._is_cached = True
+
+ def cache_keys(self):
+ if not self._has_keys_cached:
+ self.parent.cache()
+ self._has_keys_cached = True
+
+ def discard(self):
+ if self.parent.cached_data is not None:
+ for child in self.virtual_parent.cached_children:
+ if child.key in self.keys:
+ child.discard()
+ self.parent.discard()
+ super(SubViewNodeList, self).discard()
+
+ def __getitem__(self, key):
+ """Makes sure the key is in our key but grab it from the virtual parent."""
+ return self.virtual_parent[key]
+
+ def __iter__(self):
+ self.cache()
+ return super(SubViewNodeList, self).__iter__()
+
+###############################################################################
+## Buildbot-specific code
+
+
+class Slave(AddressableDataNode):
+ """Buildbot slave class."""
+ printable_attributes = AddressableDataNode.printable_attributes + [
+ 'name',
+ 'key',
+ 'connected',
+ 'version',
+ ]
+
+ def __init__(self, parent, name, data):
+ super(Slave, self).__init__(parent, name, data)
+ self.name = name
+ self.key = self.name
+ # TODO(maruel): Add SlaveBuilders and a 'builders' property.
+ # TODO(maruel): Add a 'running_builds' property.
+
+ @property
+ def connected(self):
+ return self.data.get('connected', False)
+
+ @property
+ def version(self):
+ return self.data.get('version')
+
+
+class Slaves(AddressableNodeList):
+ """Buildbot slaves."""
+ _child_cls = Slave
+ printable_attributes = AddressableNodeList.printable_attributes + ['names']
+
+ def __init__(self, parent):
+ super(Slaves, self).__init__(parent, 'slaves')
+
+ @property
+ def names(self):
+ return self.keys
+
+
+class BuilderSlaves(SubViewNodeList):
+ """Similar to Slaves but only list slaves connected to a specific builder."""
+ printable_attributes = SubViewNodeList.printable_attributes + ['names']
+
+ def __init__(self, parent):
+ super(BuilderSlaves, self).__init__(parent, parent.parent.parent.slaves,
+ 'slaves')
+
+ @property
+ def names(self):
+ return self.keys
+
+
+class BuildStep(NonAddressableDataNode):
+ """Class for a buildbot build step."""
+ printable_attributes = NonAddressableDataNode.printable_attributes + [
+ 'name',
+ 'number',
+ 'start_time',
+ 'end_time',
+ 'duration',
+ 'is_started',
+ 'is_finished',
+ 'is_running',
+ 'result',
+ 'simplified_result',
+ ]
+
+ def __init__(self, parent, number):
+ """Pre-loaded, since the data is retrieved via the Build object."""
+ assert isinstance(number, int)
+ super(BuildStep, self).__init__(parent, number)
+ self.number = number
+
+ @property
+ def start_time(self):
+ if self.data.get('times'):
+ return int(round(self.data['times'][0]))
+
+ @property
+ def end_time(self):
+ times = self.data.get('times')
+ if times and len(times) == 2 and times[1]:
+ return int(round(times[1]))
+
+ @property
+ def duration(self):
+ if self.start_time:
+ return (self.end_time or int(round(time.time()))) - self.start_time
+
+ @property
+ def name(self):
+ return self.data['name']
+
+ @property
+ def is_started(self):
+ return self.data.get('isStarted', False)
+
+ @property
+ def is_finished(self):
+ return self.data.get('isFinished', False)
+
+ @property
+ def is_running(self):
+ return self.is_started and not self.is_finished
+
+ @property
+ def result(self):
+ result = self.data.get('results')
+ if result is None:
+ # results may be 0, in that case with filter=1, the value won't be
+ # present.
+ if self.data.get('isFinished'):
+ result = self.data.get('results', 0)
+ while isinstance(result, list):
+ result = result[0]
+ return result
+
+ @property
+ def simplified_result(self):
+ """Returns a simplified 3 state value, True, False or None."""
+ result = self.result
+ if result in (SUCCESS, WARNINGS):
+ return True
+ elif result in (FAILURE, EXCEPTION, RETRY):
+ return False
+ assert result in (None, SKIPPED), (result, self.data)
+ return None
+
+
+class BuildSteps(NonAddressableNodeList):
+ """Duplicates keys to support lookup by both step number and step name."""
+ printable_attributes = NonAddressableNodeList.printable_attributes + [
+ 'failed',
+ ]
+ _child_cls = BuildStep
+
+ def __init__(self, parent):
+ """Pre-loaded, since the data is retrieved via the Build object."""
+ super(BuildSteps, self).__init__(parent, 'steps')
+
+ @property
+ def keys(self):
+ """Returns the steps name in order."""
+ return [i['name'] for i in self.data or []]
+
+ @property
+ def failed(self):
+ """Shortcuts that lists the step names of steps that failed."""
+ return [step.name for step in self if step.simplified_result is False]
+
+ def __getitem__(self, key):
+ """Accept step name in addition to index number."""
+ if isinstance(key, basestring):
+ # It's a string, try to find the corresponding index.
+ for i, step in enumerate(self.data):
+ if step['name'] == key:
+ key = i
+ break
+ else:
+ raise KeyError(key)
+ return super(BuildSteps, self).__getitem__(key)
+
+
+class Build(AddressableDataNode):
+ """Buildbot build info."""
+ printable_attributes = AddressableDataNode.printable_attributes + [
+ 'key',
+ 'number',
+ 'steps',
+ 'blame',
+ 'reason',
+ 'revision',
+ 'result',
+ 'simplified_result',
+ 'start_time',
+ 'end_time',
+ 'duration',
+ 'slave',
+ 'properties',
+ 'completed',
+ ]
+
+ def __init__(self, parent, key, data):
+ super(Build, self).__init__(parent, str(key), data)
+ self.number = int(key)
+ self.key = self.number
+ self.steps = BuildSteps(self)
+
+ @property
+ def blame(self):
+ return self.data.get('blame', [])
+
+ @property
+ def builder(self):
+ """Returns the Builder object.
+
+ Goes up the hierarchy to find the Buildbot.builders[builder] instance.
+ """
+ return self.parent.parent.parent.parent.builders[self.data['builderName']]
+
+ @property
+ def start_time(self):
+ if self.data.get('times'):
+ return int(round(self.data['times'][0]))
+
+ @property
+ def end_time(self):
+ times = self.data.get('times')
+ if times and len(times) == 2 and times[1]:
+ return int(round(times[1]))
+
+ @property
+ def duration(self):
+ if self.start_time:
+ return (self.end_time or int(round(time.time()))) - self.start_time
+
+ @property
+ def eta(self):
+ return self.data.get('eta', 0)
+
+ @property
+ def completed(self):
+ return self.data.get('currentStep') is None
+
+ @property
+ def properties(self):
+ return self.data.get('properties', [])
+
+ @property
+ def reason(self):
+ return self.data.get('reason')
+
+ @property
+ def result(self):
+ result = self.data.get('results')
+ while isinstance(result, list):
+ result = result[0]
+ if result is None and self.steps:
+ # results may be 0, in that case with filter=1, the value won't be
+ # present.
+ result = self.steps[-1].result
+ return result
+
+ @property
+ def revision(self):
+ return self.data.get('sourceStamp', {}).get('revision')
+
+ @property
+ def simplified_result(self):
+ """Returns a simplified 3 state value, True, False or None."""
+ result = self.result
+ if result in (SUCCESS, WARNINGS, SKIPPED):
+ return True
+ elif result in (FAILURE, EXCEPTION, RETRY):
+ return False
+ assert result is None, (result, self.data)
+ return None
+
+ @property
+ def slave(self):
+ """Returns the Slave object.
+
+ Goes up the hierarchy to find the Buildbot.slaves[slave] instance.
+ """
+ return self.parent.parent.parent.parent.slaves[self.data['slave']]
+
+ def discard(self):
+ """Completed Build isn't discarded."""
+ if self._data and self.result is None:
+ assert not self.steps or not self.steps[-1].data.get('isFinished')
+ self._data = None
+
+
+class CurrentBuilds(SubViewNodeList):
+ """Lists of the current builds."""
+
+ def __init__(self, parent):
+ super(CurrentBuilds, self).__init__(parent, parent.builds, 'currentBuilds')
+
+
+class PendingBuilds(AddressableDataNode):
+ """List of the pending builds."""
+
+ def __init__(self, parent):
+ super(PendingBuilds, self).__init__(parent, 'pendingBuilds', None)
+
+
+class Builds(AddressableNodeList):
+ """Supports iteration.
+
+ Recommends using .cache() to speed up if a significant number of builds are
+ iterated over.
+ """
+ _child_cls = Build
+
+ def __init__(self, parent):
+ super(Builds, self).__init__(parent, 'builds')
+
+ def __getitem__(self, key):
+ """Support for negative reference and enable retrieving non-cached builds.
+
+ e.g. -1 is the last build, -2 is the previous build before the last one.
+ """
+ key = int(key)
+ if key < 0:
+ # Convert negative to positive build number.
+ self.cache_keys()
+ # Since the negative value can be outside of the cache keys range, use the
+ # highest key value and calculate from it.
+ key = max(self._keys) + key + 1
+
+ if not key in self._cache:
+ # Create an empty object.
+ self._create_obj(key, None)
+ return self._cache[key]
+
+ def __iter__(self):
+ """Returns cached Build objects in reversed order.
+
+ The most recent build is returned first and then in reverse chronological
+ order, up to the oldest cached build by the server. Older builds can be
+ accessed but will trigger significantly more I/O so they are not included by
+ default in the iteration.
+
+ To access the older builds, use self.iterall() instead.
+ """
+ self.cache()
+ return reversed(self._cache.values())
+
+ def iterall(self):
+ """Returns Build objects in decreasing order unbounded up to build 0.
+
+ The most recent build is returned first and then in reverse chronological
+ order. Older builds can be accessed and will trigger significantly more I/O
+ so use this carefully.
+ """
+ # Only cache keys here.
+ self.cache_keys()
+ if self._keys:
+ for i in xrange(max(self._keys), -1, -1):
+ yield self[i]
+
+ def cache_keys(self):
+ """Grabs the keys (build numbers) from the builder."""
+ if not self._has_keys_cached:
+ for i in self.parent.data.get('cachedBuilds', []):
+ i = int(i)
+ self._cache.setdefault(i, Build(self, i, None))
+ if i not in self._keys:
+ self._keys.append(i)
+ self._has_keys_cached = True
+
+ def discard(self):
+ super(Builds, self).discard()
+ # Can't keep keys.
+ self._has_keys_cached = False
+
+ def _readall(self):
+ return self.read('_all')
+
+
+class Builder(AddressableDataNode):
+ """Builder status."""
+ printable_attributes = AddressableDataNode.printable_attributes + [
+ 'name',
+ 'key',
+ 'builds',
+ 'slaves',
+ 'pending_builds',
+ 'current_builds',
+ ]
+
+ def __init__(self, parent, name, data):
+ super(Builder, self).__init__(parent, name, data)
+ self.name = name
+ self.key = name
+ self.builds = Builds(self)
+ self.slaves = BuilderSlaves(self)
+ self.current_builds = CurrentBuilds(self)
+ self.pending_builds = PendingBuilds(self)
+
+ def discard(self):
+ super(Builder, self).discard()
+ self.builds.discard()
+ self.slaves.discard()
+ self.current_builds.discard()
+
+
+class Builders(AddressableNodeList):
+ """Root list of builders."""
+ _child_cls = Builder
+
+ def __init__(self, parent):
+ super(Builders, self).__init__(parent, 'builders')
+
+
+class Buildbot(AddressableBaseDataNode):
+ """This object should be recreated on a master restart as it caches data."""
+ # Throttle fetches to not kill the server.
+ auto_throttle = None
+ printable_attributes = AddressableDataNode.printable_attributes + [
+ 'slaves',
+ 'builders',
+ 'last_fetch',
+ ]
+
+ def __init__(self, url):
+ super(Buildbot, self).__init__(None, url.rstrip('/') + '/json', None)
+ self._builders = Builders(self)
+ self._slaves = Slaves(self)
+ self.last_fetch = None
+
+ @property
+ def builders(self):
+ return self._builders
+
+ @property
+ def slaves(self):
+ return self._slaves
+
+ def discard(self):
+ """Discards information about Builders and Slaves."""
+ super(Buildbot, self).discard()
+ self._builders.discard()
+ self._slaves.discard()
+
+ def read(self, suburl):
+ if self.auto_throttle:
+ if self.last_fetch:
+ delta = datetime.datetime.utcnow() - self.last_fetch
+ remaining = (datetime.timedelta(seconds=self.auto_throttle) - delta)
+ if remaining > datetime.timedelta(seconds=0):
+ logging.debug('Sleeping for %ss', remaining)
+ time.sleep(remaining.seconds)
+ self.last_fetch = datetime.datetime.utcnow()
+ url = '%s/%s' % (self.url, suburl)
+ if '?' in url:
+ url += '&filter=1'
+ else:
+ url += '?filter=1'
+ logging.info('read(%s)', suburl)
+ channel = urllib.urlopen(url)
+ data = channel.read()
+ try:
+ return json.loads(data)
+ except ValueError:
+ if channel.getcode() >= 400:
+ # Convert it into an HTTPError for easier processing.
+ raise urllib2.HTTPError(url, channel.getcode(), '%s:\n%s' % (url, data),
+ channel.headers, None)
+ raise
+
+ def _readall(self):
+ return self.read('project')
+
+###############################################################################
+## Controller code
+
+
+def usage(more):
+
+ def hook(fn):
+ fn.func_usage_more = more
+ return fn
+
+ return hook
+
+
+def need_buildbot(fn):
+ """Post-parse args to create a buildbot object."""
+
+ @functools.wraps(fn)
+ def hook(parser, args, *extra_args, **kwargs):
+ old_parse_args = parser.parse_args
+
+ def new_parse_args(args):
+ options, args = old_parse_args(args)
+ if len(args) < 1:
+ parser.error('Need to pass the root url of the buildbot')
+ url = args.pop(0)
+ if not url.startswith('http'):
+ url = 'http://' + url
+ buildbot = Buildbot(url)
+ buildbot.auto_throttle = options.throttle
+ return options, args, buildbot
+
+ parser.parse_args = new_parse_args
+ # Call the original function with the modified parser.
+ return fn(parser, args, *extra_args, **kwargs)
+
+ hook.func_usage_more = '[options] <url>'
+ return hook
+
+
+@need_buildbot
+def CMDpending(parser, args):
+ """Lists pending jobs."""
+ parser.add_option('-b',
+ '--builder',
+ dest='builders',
+ action='append',
+ default=[],
+ help='Builders to filter on')
+ options, args, buildbot = parser.parse_args(args)
+ if args:
+ parser.error('Unrecognized parameters: %s' % ' '.join(args))
+ if not options.builders:
+ options.builders = buildbot.builders.keys
+ for builder in options.builders:
+ builder = buildbot.builders[builder]
+ pending_builds = builder.data.get('pendingBuilds', 0)
+ if not pending_builds:
+ continue
+ print('Builder %s: %d' % (builder.name, pending_builds))
+ if not options.quiet:
+ for pending in builder.pending_builds.data:
+ if 'revision' in pending['source']:
+ print(' revision: %s' % pending['source']['revision'])
+ for change in pending['source']['changes']:
+ print(' change:')
+ print(' comment: %r' % unicode(change['comments'][:50]))
+ print(' who: %s' % change['who'])
+ return 0
+
+
+@usage('[options] <url> [commands] ...')
+@need_buildbot
+def CMDrun(parser, args):
+ """Runs commands passed as parameters.
+
+ When passing commands on the command line, each command will be run as if it
+ was on its own line.
+ """
+ parser.add_option('-f', '--file', help='Read script from file')
+ parser.add_option('-i',
+ dest='use_stdin',
+ action='store_true',
+ help='Read script on stdin')
+ # Variable 'buildbot' is not used directly.
+ # pylint: disable=W0612
+ options, args, buildbot = parser.parse_args(args)
+ if (bool(args) + bool(options.use_stdin) + bool(options.file)) != 1:
+ parser.error('Need to pass only one of: <commands>, -f <file> or -i')
+ if options.use_stdin:
+ cmds = sys.stdin.read()
+ elif options.file:
+ cmds = open(options.file).read()
+ else:
+ cmds = '\n'.join(args)
+ compiled = compile(cmds, '<cmd line>', 'exec')
+ # pylint: disable=eval-used
+ eval(compiled, globals(), locals())
+ return 0
+
+
+@need_buildbot
+def CMDinteractive(parser, args):
+ """Runs an interactive shell to run queries."""
+ _, args, buildbot = parser.parse_args(args)
+ if args:
+ parser.error('Unrecognized parameters: %s' % ' '.join(args))
+ prompt = (
+ 'Buildbot interactive console for "%s".\n'
+ 'Hint: Start with typing: \'buildbot.printable_attributes\' or '
+ '\'print str(buildbot)\' to explore.') % buildbot.url[:-len('/json')]
+ local_vars = {'buildbot': buildbot, 'b': buildbot}
+ code.interact(prompt, None, local_vars)
+
+
+@need_buildbot
+def CMDidle(parser, args):
+ """Lists idle slaves."""
+ return find_idle_busy_slaves(parser, args, True)
+
+
+@need_buildbot
+def CMDbusy(parser, args):
+ """Lists idle slaves."""
+ return find_idle_busy_slaves(parser, args, False)
+
+
+@need_buildbot
+def CMDdisconnected(parser, args):
+ """Lists disconnected slaves."""
+ _, args, buildbot = parser.parse_args(args)
+ if args:
+ parser.error('Unrecognized parameters: %s' % ' '.join(args))
+ for slave in buildbot.slaves:
+ if not slave.connected:
+ print(slave.name)
+ return 0
+
+
+def find_idle_busy_slaves(parser, args, show_idle):
+ parser.add_option('-b',
+ '--builder',
+ dest='builders',
+ action='append',
+ default=[],
+ help='Builders to filter on')
+ parser.add_option('-s',
+ '--slave',
+ dest='slaves',
+ action='append',
+ default=[],
+ help='Slaves to filter on')
+ options, args, buildbot = parser.parse_args(args)
+ if args:
+ parser.error('Unrecognized parameters: %s' % ' '.join(args))
+ if not options.builders:
+ options.builders = buildbot.builders.keys
+ for builder in options.builders:
+ builder = buildbot.builders[builder]
+ if options.slaves:
+ # Only the subset of slaves connected to the builder.
+ slaves = list(set(options.slaves).intersection(set(builder.slaves.names)))
+ if not slaves:
+ continue
+ else:
+ slaves = builder.slaves.names
+ busy_slaves = [build.slave.name for build in builder.current_builds]
+ if show_idle:
+ slaves = natsorted(set(slaves) - set(busy_slaves))
+ else:
+ slaves = natsorted(set(slaves) & set(busy_slaves))
+ if options.quiet:
+ for slave in slaves:
+ print(slave)
+ else:
+ if slaves:
+ print('Builder %s: %s' % (builder.name, ', '.join(slaves)))
+ return 0
+
+
+def last_failure(buildbot,
+ builders=None,
+ slaves=None,
+ steps=None,
+ no_cache=False):
+ """Returns Build object with last failure with the specific filters."""
+ builders = builders or buildbot.builders.keys
+ for builder in builders:
+ builder = buildbot.builders[builder]
+ if slaves:
+ # Only the subset of slaves connected to the builder.
+ builder_slaves = list(set(slaves).intersection(set(builder.slaves.names)))
+ if not builder_slaves:
+ continue
+ else:
+ builder_slaves = builder.slaves.names
+
+ if not no_cache and len(builder.slaves) > 2:
+ # Unless you just want the last few builds, it's often faster to
+ # fetch the whole thing at once, at the cost of a small hickup on
+ # the buildbot.
+ # TODO(maruel): Cache only N last builds or all builds since
+ # datetime.
+ builder.builds.cache()
+
+ found = []
+ for build in builder.builds:
+ if build.slave.name not in builder_slaves or build.slave.name in found:
+ continue
+ # Only add the slave for the first completed build but still look for
+ # incomplete builds.
+ if build.completed:
+ found.append(build.slave.name)
+
+ if steps:
+ if any(build.steps[step].simplified_result is False for step in steps):
+ yield build
+ elif build.simplified_result is False:
+ yield build
+
+ if len(found) == len(builder_slaves):
+ # Found all the slaves, quit.
+ break
+
+
+@need_buildbot
+def CMDlast_failure(parser, args):
+ """Lists all slaves that failed on that step on their last build.
+
+ Example: to find all slaves where their last build was a compile failure,
+ run with --step compile
+ """
+ parser.add_option(
+ '-S',
+ '--step',
+ dest='steps',
+ action='append',
+ default=[],
+ help='List all slaves that failed on that step on their last build')
+ parser.add_option('-b',
+ '--builder',
+ dest='builders',
+ action='append',
+ default=[],
+ help='Builders to filter on')
+ parser.add_option('-s',
+ '--slave',
+ dest='slaves',
+ action='append',
+ default=[],
+ help='Slaves to filter on')
+ parser.add_option('-n',
+ '--no_cache',
+ action='store_true',
+ help='Don\'t load all builds at once')
+ options, args, buildbot = parser.parse_args(args)
+ if args:
+ parser.error('Unrecognized parameters: %s' % ' '.join(args))
+ print_builders = not options.quiet and len(options.builders) != 1
+ last_builder = None
+ for build in last_failure(buildbot,
+ builders=options.builders,
+ slaves=options.slaves,
+ steps=options.steps,
+ no_cache=options.no_cache):
+
+ if print_builders and last_builder != build.builder:
+ print(build.builder.name)
+ last_builder = build.builder
+
+ if options.quiet:
+ if options.slaves:
+ print('%s: %s' % (build.builder.name, build.slave.name))
+ else:
+ print(build.slave.name)
+ else:
+ out = '%d on %s: blame:%s' % (build.number, build.slave.name,
+ ', '.join(build.blame))
+ if print_builders:
+ out = ' ' + out
+ print(out)
+
+ if len(options.steps) != 1:
+ for step in build.steps:
+ if step.simplified_result is False:
+ # Assume the first line is the text name anyway.
+ summary = ', '.join(step.data['text'][1:])[:40]
+ out = ' %s: "%s"' % (step.data['name'], summary)
+ if print_builders:
+ out = ' ' + out
+ print(out)
+ return 0
+
+
+@need_buildbot
+def CMDcurrent(parser, args):
+ """Lists current jobs."""
+ parser.add_option('-b',
+ '--builder',
+ dest='builders',
+ action='append',
+ default=[],
+ help='Builders to filter on')
+ parser.add_option('--blame',
+ action='store_true',
+ help='Only print the blame list')
+ options, args, buildbot = parser.parse_args(args)
+ if args:
+ parser.error('Unrecognized parameters: %s' % ' '.join(args))
+ if not options.builders:
+ options.builders = buildbot.builders.keys
+
+ if options.blame:
+ blame = set()
+ for builder in options.builders:
+ for build in buildbot.builders[builder].current_builds:
+ if build.blame:
+ for blamed in build.blame:
+ blame.add(blamed)
+ print('\n'.join(blame))
+ return 0
+
+ for builder in options.builders:
+ builder = buildbot.builders[builder]
+ if not options.quiet and builder.current_builds:
+ print(builder.name)
+ for build in builder.current_builds:
+ if options.quiet:
+ print(build.slave.name)
+ else:
+ out = '%4d: slave=%10s' % (build.number, build.slave.name)
+ out += ' duration=%5d' % (build.duration or 0)
+ if build.eta:
+ out += ' eta=%5.0f' % build.eta
+ else:
+ out += ' '
+ if build.blame:
+ out += ' blame=' + ', '.join(build.blame)
+ print(out)
+
+ return 0
+
+
+@need_buildbot
+def CMDbuilds(parser, args):
+ """Lists all builds.
+
+ Example: to find all builds on a single slave, run with -b bar -s foo
+ """
+ parser.add_option('-r',
+ '--result',
+ type='int',
+ help='Build result to filter on')
+ parser.add_option('-b',
+ '--builder',
+ dest='builders',
+ action='append',
+ default=[],
+ help='Builders to filter on')
+ parser.add_option('-s',
+ '--slave',
+ dest='slaves',
+ action='append',
+ default=[],
+ help='Slaves to filter on')
+ parser.add_option('-n',
+ '--no_cache',
+ action='store_true',
+ help='Don\'t load all builds at once')
+ options, args, buildbot = parser.parse_args(args)
+ if args:
+ parser.error('Unrecognized parameters: %s' % ' '.join(args))
+ builders = options.builders or buildbot.builders.keys
+ for builder in builders:
+ builder = buildbot.builders[builder]
+ for build in builder.builds:
+ if not options.slaves or build.slave.name in options.slaves:
+ if options.quiet:
+ out = ''
+ if options.builders:
+ out += '%s/' % builder.name
+ if len(options.slaves) != 1:
+ out += '%s/' % build.slave.name
+ out += '%d revision:%s result:%s blame:%s' % (
+ build.number, build.revision, build.result, ','.join(build.blame))
+ print(out)
+ else:
+ print(build)
+ return 0
+
+
+@need_buildbot
+def CMDcount(parser, args):
+ """Count the number of builds that occured during a specific period."""
+ parser.add_option('-o',
+ '--over',
+ type='int',
+ help='Number of seconds to look for')
+ parser.add_option('-b',
+ '--builder',
+ dest='builders',
+ action='append',
+ default=[],
+ help='Builders to filter on')
+ options, args, buildbot = parser.parse_args(args)
+ if args:
+ parser.error('Unrecognized parameters: %s' % ' '.join(args))
+ if not options.over:
+ parser.error(
+ 'Specify the number of seconds, e.g. --over 86400 for the last 24 '
+ 'hours')
+ builders = options.builders or buildbot.builders.keys
+ counts = {}
+ since = time.time() - options.over
+ for builder in builders:
+ builder = buildbot.builders[builder]
+ counts[builder.name] = 0
+ if not options.quiet:
+ print(builder.name)
+ for build in builder.builds.iterall():
+ try:
+ start_time = build.start_time
+ except urllib2.HTTPError:
+ # The build was probably trimmed.
+ print('Failed to fetch build %s/%d' % (builder.name, build.number),
+ file=sys.stderr)
+ continue
+ if start_time >= since:
+ counts[builder.name] += 1
+ else:
+ break
+ if not options.quiet:
+ print('.. %d' % counts[builder.name])
+
+ align_name = max(len(b) for b in counts)
+ align_number = max(len(str(c)) for c in counts.itervalues())
+ for builder in sorted(counts):
+ print('%*s: %*d' % (align_name, builder, align_number, counts[builder]))
+ print('Total: %d' % sum(counts.itervalues()))
+ return 0
+
+
+def gen_parser():
+ """Returns an OptionParser instance with default options.
+
+ It should be then processed with gen_usage() before being used.
+ """
+ parser = optparse.OptionParser(version=__version__)
+ # Remove description formatting
+ parser.format_description = lambda x: parser.description
+ # Add common parsing.
+ old_parser_args = parser.parse_args
+
+ def Parse(*args, **kwargs):
+ options, args = old_parser_args(*args, **kwargs)
+ if options.verbose >= 2:
+ logging.basicConfig(level=logging.DEBUG)
+ elif options.verbose:
+ logging.basicConfig(level=logging.INFO)
+ else:
+ logging.basicConfig(level=logging.WARNING)
+ return options, args
+
+ parser.parse_args = Parse
+
+ parser.add_option('-v',
+ '--verbose',
+ action='count',
+ help='Use multiple times to increase logging leve')
+ parser.add_option(
+ '-q',
+ '--quiet',
+ action='store_true',
+ help='Reduces the output to be parsed by scripts, independent of -v')
+ parser.add_option('--throttle',
+ type='float',
+ help='Minimum delay to sleep between requests')
+ return parser
+
+###############################################################################
+## Generic subcommand handling code
+
+
+def Command(name):
+ return getattr(sys.modules[__name__], 'CMD' + name, None)
+
+
+@usage('<command>')
+def CMDhelp(parser, args):
+ """Print list of commands or use 'help <command>'."""
+ _, args = parser.parse_args(args)
+ if len(args) == 1:
+ return main(args + ['--help'])
+ parser.print_help()
+ return 0
+
+
+def gen_usage(parser, command):
+ """Modifies an OptionParser object with the command's documentation.
+
+ The documentation is taken from the function's docstring.
+ """
+ obj = Command(command)
+ more = getattr(obj, 'func_usage_more')
+ # OptParser.description prefer nicely non-formatted strings.
+ parser.description = obj.__doc__ + '\n'
+ parser.set_usage('usage: %%prog %s %s' % (command, more))
+
+
+def main(args=None):
+ # Do it late so all commands are listed.
+ # pylint: disable=E1101
+ CMDhelp.__doc__ += '\n\nCommands are:\n' + '\n'.join(
+ ' %-12s %s' % (fn[3:], Command(fn[3:]).__doc__.split('\n', 1)[0])
+ for fn in dir(sys.modules[__name__]) if fn.startswith('CMD'))
+
+ parser = gen_parser()
+ if args is None:
+ args = sys.argv[1:]
+ if args:
+ command = Command(args[0])
+ if command:
+ # "fix" the usage and the description now that we know the subcommand.
+ gen_usage(parser, args[0])
+ return command(parser, args[1:])
+
+ # Not a known command. Default to help.
+ gen_usage(parser, 'help')
+ return CMDhelp(parser, args)
+
+
+if __name__ == '__main__':
+ sys.exit(main())
diff --git a/cros_utils/buildbot_utils.py b/cros_utils/buildbot_utils.py
new file mode 100644
index 00000000..d1403557
--- /dev/null
+++ b/cros_utils/buildbot_utils.py
@@ -0,0 +1,385 @@
+# Copyright 2016 The Chromium OS Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+"""Utilities for launching and accessing ChromeOS buildbots."""
+
+from __future__ import print_function
+
+import base64
+import json
+import os
+import time
+import urllib2
+
+# pylint: disable=no-name-in-module
+from oauth2client.service_account import ServiceAccountCredentials
+
+from cros_utils import command_executer
+from cros_utils import logger
+from cros_utils import buildbot_json
+
+INITIAL_SLEEP_TIME = 7200 # 2 hours; wait time before polling buildbot.
+SLEEP_TIME = 600 # 10 minutes; time between polling of buildbot.
+TIME_OUT = 28800 # Decide the build is dead or will never finish
+# after this time (8 hours).
+OK_STATUS = [ # List of result status values that are 'ok'.
+ # This was obtained from:
+ # https://chromium.googlesource.com/chromium/tools/build/+/
+ # master/third_party/buildbot_8_4p1/buildbot/status/results.py
+ 0, # "success"
+ 1, # "warnings"
+ 6, # "retry"
+]
+
+
+class BuildbotTimeout(Exception):
+ """Exception to throw when a buildbot operation timesout."""
+ pass
+
+
+def ParseReportLog(url, build):
+ """Scrape the trybot image name off the Reports log page.
+
+ This takes the URL for a trybot Reports Stage web page,
+ and a trybot build type, such as 'daisy-release'. It
+ opens the web page and parses it looking for the trybot
+ artifact name (e.g. something like
+ 'trybot-daisy-release/R40-6394.0.0-b1389'). It returns the
+ artifact name, if found.
+ """
+ trybot_image = ''
+ url += '/text'
+ newurl = url.replace('uberchromegw', 'chromegw')
+ webpage = urllib2.urlopen(newurl)
+ data = webpage.read()
+ lines = data.split('\n')
+ for l in lines:
+ if l.find('Artifacts') > 0 and l.find('trybot') > 0:
+ trybot_name = 'trybot-%s' % build
+ start_pos = l.find(trybot_name)
+ end_pos = l.find('@https://storage')
+ trybot_image = l[start_pos:end_pos]
+
+ return trybot_image
+
+
+def GetBuildData(buildbot_queue, build_id):
+ """Find the Reports stage web page for a trybot build.
+
+ This takes the name of a buildbot_queue, such as 'daisy-release'
+ and a build id (the build number), and uses the json buildbot api to
+ find the Reports stage web page for that build, if it exists.
+ """
+ builder = buildbot_json.Buildbot(
+ 'http://chromegw/p/tryserver.chromiumos/').builders[buildbot_queue]
+ build_data = builder.builds[build_id].data
+ logs = build_data['logs']
+ for l in logs:
+ fname = l[1]
+ if 'steps/Report/' in fname:
+ return fname
+
+ return ''
+
+
+def FindBuildRecordFromLog(description, build_info):
+ """Find the right build record in the build logs.
+
+ Get the first build record from build log with a reason field
+ that matches 'description'. ('description' is a special tag we
+ created when we launched the buildbot, so we could find it at this
+ point.)
+ """
+ for build_log in build_info:
+ if description in build_log['reason']:
+ return build_log
+ return {}
+
+
+def GetBuildInfo(file_dir, waterfall_builder):
+ """Get all the build records for the trybot builds."""
+
+ builder = ''
+ if waterfall_builder.endswith('-release'):
+ builder = 'release'
+ elif waterfall_builder.endswith('-gcc-toolchain'):
+ builder = 'gcc_toolchain'
+ elif waterfall_builder.endswith('-llvm-toolchain'):
+ builder = 'llvm_toolchain'
+ elif waterfall_builder.endswith('-llvm-next-toolchain'):
+ builder = 'llvm_next_toolchain'
+
+ sa_file = os.path.expanduser(
+ os.path.join(file_dir, 'cros_utils',
+ 'chromeos-toolchain-credentials.json'))
+ scopes = ['https://www.googleapis.com/auth/userinfo.email']
+
+ credentials = ServiceAccountCredentials.from_json_keyfile_name(
+ sa_file, scopes=scopes)
+ url = (
+ 'https://luci-milo.appspot.com/prpc/milo.Buildbot/GetBuildbotBuildsJSON')
+
+ # NOTE: If we want to get build logs for the main waterfall builders, the
+ # 'master' field below should be 'chromeos' instead of 'chromiumos.tryserver'.
+ # Builder would be 'amd64-gcc-toolchain' or 'arm-llvm-toolchain', etc.
+
+ body = json.dumps({
+ 'master': 'chromiumos.tryserver',
+ 'builder': builder,
+ 'include_current': True,
+ 'limit': 100
+ })
+ access_token = credentials.get_access_token()
+ headers = {
+ 'Accept': 'application/json',
+ 'Content-Type': 'application/json',
+ 'Authorization': 'Bearer %s' % access_token.access_token
+ }
+ r = urllib2.Request(url, body, headers)
+ u = urllib2.urlopen(r, timeout=60)
+ u.read(4)
+ o = json.load(u)
+ data = [base64.b64decode(item['data']) for item in o['builds']]
+ result = []
+ for d in data:
+ tmp = json.loads(d)
+ result.append(tmp)
+ return result
+
+
+def FindArchiveImage(chromeos_root, build, build_id):
+ """Returns name of the trybot artifact for board/build_id."""
+ ce = command_executer.GetCommandExecuter()
+ command = ('gsutil ls gs://chromeos-image-archive/trybot-%s/*b%s'
+ '/chromiumos_test_image.tar.xz' % (build, build_id))
+ _, out, _ = ce.ChrootRunCommandWOutput(
+ chromeos_root, command, print_to_console=False)
+ #
+ # If build_id is not unique, there may be multiple archive images
+ # to choose from; sort them & pick the first (newest).
+ #
+ # If there are multiple archive images found, out will look something
+ # like this:
+ #
+ # 'gs://.../R35-5692.0.0-b105/chromiumos_test_image.tar.xz
+ # gs://.../R46-7339.0.0-b105/chromiumos_test_image.tar.xz'
+ #
+ out = out.rstrip('\n')
+ tmp_list = out.split('\n')
+ # After stripping the final '\n' and splitting on any other '\n', we get
+ # something like this:
+ # tmp_list = [ 'gs://.../R35-5692.0.0-b105/chromiumos_test_image.tar.xz' ,
+ # 'gs://.../R46-7339.0.0-b105/chromiumos_test_image.tar.xz' ]
+ #
+ # If we sort this in descending order, we should end up with the most
+ # recent test image first, so that's what we do here.
+ #
+ if len(tmp_list) > 1:
+ tmp_list = sorted(tmp_list, reverse=True)
+ out = tmp_list[0]
+
+ trybot_image = ''
+ trybot_name = 'trybot-%s' % build
+ if out and out.find(trybot_name) > 0:
+ start_pos = out.find(trybot_name)
+ end_pos = out.find('/chromiumos_test_image')
+ trybot_image = out[start_pos:end_pos]
+
+ return trybot_image
+
+
+def GetTrybotImage(chromeos_root,
+ buildbot_name,
+ patch_list,
+ build_tag,
+ other_flags=None,
+ build_toolchain=False,
+ async=False):
+ """Launch buildbot and get resulting trybot artifact name.
+
+ This function launches a buildbot with the appropriate flags to
+ build the test ChromeOS image, with the current ToT mobile compiler. It
+ checks every 10 minutes to see if the trybot has finished. When the trybot
+ has finished, it parses the resulting report logs to find the trybot
+ artifact (if one was created), and returns that artifact name.
+
+ chromeos_root is the path to the ChromeOS root, needed for finding chromite
+ and launching the buildbot.
+
+ buildbot_name is the name of the buildbot queue, such as lumpy-release or
+ daisy-paladin.
+
+ patch_list a python list of the patches, if any, for the buildbot to use.
+
+ build_tag is a (unique) string to be used to look up the buildbot results
+ from among all the build records.
+ """
+ ce = command_executer.GetCommandExecuter()
+ cbuildbot_path = os.path.join(chromeos_root, 'chromite/cbuildbot')
+ base_dir = os.getcwd()
+ patch_arg = ''
+ if patch_list:
+ for p in patch_list:
+ patch_arg = patch_arg + ' -g ' + repr(p)
+ toolchain_flags = ''
+ if build_toolchain:
+ toolchain_flags += '--latest-toolchain'
+ os.chdir(cbuildbot_path)
+ if other_flags:
+ optional_flags = ' '.join(other_flags)
+ else:
+ optional_flags = ''
+
+ # Launch buildbot with appropriate flags.
+ build = buildbot_name
+ description = build_tag
+ command_prefix = ''
+ if not patch_arg:
+ command_prefix = 'yes | '
+ command = ('%s ./cbuildbot --remote --nochromesdk %s'
+ ' --remote-description=%s %s %s %s' % (command_prefix,
+ optional_flags, description,
+ toolchain_flags, patch_arg,
+ build))
+ _, out, _ = ce.RunCommandWOutput(command)
+ if 'Tryjob submitted!' not in out:
+ logger.GetLogger().LogFatal('Error occurred while launching trybot job: '
+ '%s' % command)
+
+ os.chdir(base_dir)
+
+ build_id = 0
+ build_status = None
+ # Wait for buildbot to finish running (check every 10 minutes). Wait
+ # 10 minutes before the first check to give the buildbot time to launch
+ # (so we don't start looking for build data before it's out there).
+ time.sleep(SLEEP_TIME)
+ done = False
+ pending = True
+ # pending_time is the time between when we submit the job and when the
+ # buildbot actually launches the build. running_time is the time between
+ # when the buildbot job launches and when it finishes. The job is
+ # considered 'pending' until we can find an entry for it in the buildbot
+ # logs.
+ pending_time = SLEEP_TIME
+ running_time = 0
+ long_slept = False
+ while not done:
+ done = True
+ build_info = GetBuildInfo(base_dir, build)
+ if not build_info:
+ if pending_time > TIME_OUT:
+ logger.GetLogger().LogFatal('Unable to get build logs for target %s.' %
+ build)
+ else:
+ pending_message = 'Unable to find build log; job may be pending.'
+ done = False
+
+ if done:
+ data_dict = FindBuildRecordFromLog(description, build_info)
+ if not data_dict:
+ # Trybot job may be pending (not actually launched yet).
+ if pending_time > TIME_OUT:
+ logger.GetLogger().LogFatal('Unable to find build record for trybot'
+ ' %s.' % description)
+ else:
+ pending_message = 'Unable to find build record; job may be pending.'
+ done = False
+
+ else:
+ # Now that we have actually found the entry for the build
+ # job in the build log, we know the job is actually
+ # runnning, not pending, so we flip the 'pending' flag. We
+ # still have to wait for the buildbot job to finish running
+ # however.
+ pending = False
+ build_id = data_dict['number']
+
+ if async:
+ # Do not wait for trybot job to finish; return immediately
+ return build_id, ' '
+
+ if not long_slept:
+ # The trybot generally takes more than 2 hours to finish.
+ # Wait two hours before polling the status.
+ long_slept = True
+ time.sleep(INITIAL_SLEEP_TIME)
+ pending_time += INITIAL_SLEEP_TIME
+ if True == data_dict['finished']:
+ build_status = data_dict['results']
+ else:
+ done = False
+
+ if not done:
+ if pending:
+ logger.GetLogger().LogOutput(pending_message)
+ logger.GetLogger().LogOutput('Current pending time: %d minutes.' %
+ (pending_time / 60))
+ pending_time += SLEEP_TIME
+ else:
+ logger.GetLogger().LogOutput('{0} minutes passed.'.format(running_time /
+ 60))
+ logger.GetLogger().LogOutput('Sleeping {0} seconds.'.format(SLEEP_TIME))
+ running_time += SLEEP_TIME
+
+ time.sleep(SLEEP_TIME)
+ if running_time > TIME_OUT:
+ done = True
+
+ trybot_image = ''
+
+ if build.endswith('-toolchain'):
+ # For rotating testers, we don't care about their build_status
+ # result, because if any HWTest failed it will be non-zero.
+ trybot_image = FindArchiveImage(chromeos_root, build, build_id)
+ else:
+ # The nightly performance tests do not run HWTests, so if
+ # their build_status is non-zero, we do care. In this case
+ # non-zero means the image itself probably did not build.
+ if build_status in OK_STATUS:
+ trybot_image = FindArchiveImage(chromeos_root, build, build_id)
+ if not trybot_image:
+ logger.GetLogger().LogError('Trybot job %s failed with status %d;'
+ ' no trybot image generated.' %
+ (description, build_status))
+
+ logger.GetLogger().LogOutput("trybot_image is '%s'" % trybot_image)
+ logger.GetLogger().LogOutput('build_status is %d' % build_status)
+ return build_id, trybot_image
+
+
+def GetGSContent(chromeos_root, path):
+ """gsutil cat path"""
+
+ ce = command_executer.GetCommandExecuter()
+ command = ('gsutil cat gs://chromeos-image-archive/%s' % path)
+ _, out, _ = ce.ChrootRunCommandWOutput(
+ chromeos_root, command, print_to_console=False)
+ return out
+
+
+def DoesImageExist(chromeos_root, build):
+ """Check if the image for the given build exists."""
+
+ ce = command_executer.GetCommandExecuter()
+ command = ('gsutil ls gs://chromeos-image-archive/%s'
+ '/chromiumos_test_image.tar.xz' % (build))
+ ret = ce.ChrootRunCommand(chromeos_root, command, print_to_console=False)
+ return not ret
+
+
+def WaitForImage(chromeos_root, build):
+ """Wait for an image to be ready."""
+
+ elapsed_time = 0
+ while elapsed_time < TIME_OUT:
+ if DoesImageExist(chromeos_root, build):
+ return
+ logger.GetLogger().LogOutput('Image %s not ready, waiting for 10 minutes' %
+ build)
+ time.sleep(SLEEP_TIME)
+ elapsed_time += SLEEP_TIME
+
+ logger.GetLogger().LogOutput('Image %s not found, waited for %d hours' %
+ (build, (TIME_OUT / 3600)))
+ raise BuildbotTimeout('Timeout while waiting for image %s' % build)
diff --git a/cros_utils/chromeos-toolchain-credentials.json b/cros_utils/chromeos-toolchain-credentials.json
new file mode 100644
index 00000000..aed9a527
--- /dev/null
+++ b/cros_utils/chromeos-toolchain-credentials.json
@@ -0,0 +1,12 @@
+{
+ "type": "service_account",
+ "project_id": "chromeos-toolchain-u",
+ "private_key_id": "d0efe593ad39aad4c685273ee80e4c24bb3f2e92",
+ "private_key": "-----BEGIN PRIVATE KEY-----\nMIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQC5Rm6aqSjMNrRp\ntYNc++ec79L3QZ2MxLMYKyhlgGhppVt6p/wiSvLdI19nS5TAkKMjKv71rb9DbQlG\nfQVckiY+MlADJKi29lJrwqqNDCcRgB7CL6hgDfmhWMKonZn2MwvBVROD0gi7sY+A\nipIe92jVeqG8Gvp5kOgsBxCRV5YQok8j1FxE5fIsS2sg93VS1YAzH8uPYadWb/Z5\n9uwc8U7SL0mEPjXjsLEm8Y70zovGVjv7kOLqYBMUmROLvSouG/HrZWy9uTgxFOb5\njOhxKhDcDMPVM3g8lfc0EwPUB1NxXztoST9qBJVqdzQmHpPjeDxgru0A+zaQMkWA\ne8Sn5EQrAgMBAAECggEAUnhbe1SY6G3hWLyHQLiQnHbUPWNjselMnxF25deGoqAM\nXEiyHsGl4XGBYgVurVi0hU76NnmkjWrXmhzEajRT+ZODsiJ7RxXWEkmQiUBDk7Kn\n/mAgXsFZwMw1ucCNa93E+cXY7fBsGsAq1FjaOhZ+/6eanpSTsdEix5ZNdaS7E6Op\n9zIba9EjLIvSl435+eWq0C3aU9nd1RbbRwD6vGpgG8L/r957s+AAALTqdSZGWxJX\nEC9OKT07e76qvwAsq2BoBx5vW0xmeQdZgKrA10LLDWa7UjFbwSDJIBESYtd4rYMj\nAqg5eND0bC1RrgzI+RD/10l6Vj8bBFo/403s0P5LYQKBgQDiVGVFkrw5LSy82CGC\nvSraxPriivEweMfpkp6buMbD2Je0RMR4glc1vW5m0QUJmy+ymiIHVMCmE9xNBwbS\nRyCBnrs2+3FtdnruNdcaGh6sbTlY+qJI0rEZUdbb5OhlHZF47KW66hI6sWJ1YF8O\niLQTokW8ejybprCtl1HvEHhEbwKBgQDRkD/acZrvmcnqqmorqW6mgJEkrRF/i5Th\npDo3WegXA4irX0tNqh5w+wms8r41vUZSCZYvyi0Of9LMObVdB/gA/qVzETE0p5he\ns3Skp/VK8nF53pAUd+4dKlnCvD3TOEkIq+kxuEOs2iHJcvSjmKtMgqfMK/UtieB4\n7+MaOcbyBQKBgHOUndMVyEF6rGoUBaj6abQm++hNBDa4t360fYMQrZC+P1qz85GH\nHno3LvYar/Pj6EvRIqeTxH4LjmlXuUgRQqxvHzRI2/gGlWio3hxaUmfDr5GdDNsb\nnY1MmejZ0UQyAWQ7lbcKahzHEXzXpjOJ5ExShkJmOiVSzs8Xg6QOSRzJAoGAemYs\nRWQxQFysqJlcZaASdsGFBMzo+XwHOzt2nTmv6zEvNBj2nKgOG6MkZZVqL20bk3Lx\n+3u0kVFrR8k0+t9apQoWjHywJrb0setS55EKHfo4+RtbP/lEZFiGEM1ttt6bGat/\nCoE7VcwaC9VOufbDpm5xnzjVfQGY0EocdQbmAhkCgYB/isdqeDyafawr+38fcU1r\nX2+cK5JCrEzHIwg2QN3Z56cRrqrb+kK1H3w/F7ZfrlPSmS8XMwZV73QwieoGNIYL\nie9UZqRoZSG73FzIw5mXhWWA1adFz8HpGG5wRNshnPI2liOPwhnblfadJUfXb2br\n021vPgpsxamLjHSDSmSf6Q==\n-----END PRIVATE KEY-----\n",
+ "client_email": "mobiletc-prebuild-2@chromeos-toolchain-u.iam.gserviceaccount.com",
+ "client_id": "114495086044042319417",
+ "auth_uri": "https://accounts.google.com/o/oauth2/auth",
+ "token_uri": "https://accounts.google.com/o/oauth2/token",
+ "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
+ "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/mobiletc-prebuild-2%40chromeos-toolchain-u.iam.gserviceaccount.com"
+}
diff --git a/cros_utils/command_executer.py b/cros_utils/command_executer.py
new file mode 100644
index 00000000..c5614513
--- /dev/null
+++ b/cros_utils/command_executer.py
@@ -0,0 +1,685 @@
+# Copyright 2011 The Chromium OS Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+"""Utilities to run commands in outside/inside chroot and on the board."""
+
+from __future__ import print_function
+
+import getpass
+import os
+import re
+import select
+import signal
+import subprocess
+import sys
+import tempfile
+import time
+
+import logger
+import misc
+
+mock_default = False
+
+LOG_LEVEL = ('none', 'quiet', 'average', 'verbose')
+
+
+def InitCommandExecuter(mock=False):
+ # pylint: disable=global-statement
+ global mock_default
+ # Whether to default to a mock command executer or not
+ mock_default = mock
+
+
+def GetCommandExecuter(logger_to_set=None, mock=False, log_level='verbose'):
+ # If the default is a mock executer, always return one.
+ if mock_default or mock:
+ return MockCommandExecuter(log_level, logger_to_set)
+ else:
+ return CommandExecuter(log_level, logger_to_set)
+
+
+class CommandExecuter(object):
+ """Provides several methods to execute commands on several environments."""
+
+ def __init__(self, log_level, logger_to_set=None):
+ self.log_level = log_level
+ if log_level == 'none':
+ self.logger = None
+ else:
+ if logger_to_set is not None:
+ self.logger = logger_to_set
+ else:
+ self.logger = logger.GetLogger()
+
+ def GetLogLevel(self):
+ return self.log_level
+
+ def SetLogLevel(self, log_level):
+ self.log_level = log_level
+
+ def RunCommandGeneric(self,
+ cmd,
+ return_output=False,
+ machine=None,
+ username=None,
+ command_terminator=None,
+ command_timeout=None,
+ terminated_timeout=10,
+ print_to_console=True,
+ except_handler=lambda p, e: None):
+ """Run a command.
+
+ Returns triplet (returncode, stdout, stderr).
+ """
+
+ cmd = str(cmd)
+
+ if self.log_level == 'quiet':
+ print_to_console = False
+
+ if self.log_level == 'verbose':
+ self.logger.LogCmd(cmd, machine, username, print_to_console)
+ elif self.logger:
+ self.logger.LogCmdToFileOnly(cmd, machine, username)
+ if command_terminator and command_terminator.IsTerminated():
+ if self.logger:
+ self.logger.LogError('Command was terminated!', print_to_console)
+ return (1, '', '')
+
+ if machine is not None:
+ user = ''
+ if username is not None:
+ user = username + '@'
+ cmd = "ssh -t -t %s%s -- '%s'" % (user, machine, cmd)
+
+ # We use setsid so that the child will have a different session id
+ # and we can easily kill the process group. This is also important
+ # because the child will be disassociated from the parent terminal.
+ # In this way the child cannot mess the parent's terminal.
+ p = None
+ try:
+ p = subprocess.Popen(cmd,
+ stdout=subprocess.PIPE,
+ stderr=subprocess.PIPE,
+ shell=True,
+ preexec_fn=os.setsid)
+
+ full_stdout = ''
+ full_stderr = ''
+
+ # Pull output from pipes, send it to file/stdout/string
+ out = err = None
+ pipes = [p.stdout, p.stderr]
+
+ my_poll = select.poll()
+ my_poll.register(p.stdout, select.POLLIN)
+ my_poll.register(p.stderr, select.POLLIN)
+
+ terminated_time = None
+ started_time = time.time()
+
+ while len(pipes):
+ if command_terminator and command_terminator.IsTerminated():
+ os.killpg(os.getpgid(p.pid), signal.SIGTERM)
+ if self.logger:
+ self.logger.LogError('Command received termination request. '
+ 'Killed child process group.',
+ print_to_console)
+ break
+
+ l = my_poll.poll(100)
+ for (fd, _) in l:
+ if fd == p.stdout.fileno():
+ out = os.read(p.stdout.fileno(), 16384)
+ if return_output:
+ full_stdout += out
+ if self.logger:
+ self.logger.LogCommandOutput(out, print_to_console)
+ if out == '':
+ pipes.remove(p.stdout)
+ my_poll.unregister(p.stdout)
+ if fd == p.stderr.fileno():
+ err = os.read(p.stderr.fileno(), 16384)
+ if return_output:
+ full_stderr += err
+ if self.logger:
+ self.logger.LogCommandError(err, print_to_console)
+ if err == '':
+ pipes.remove(p.stderr)
+ my_poll.unregister(p.stderr)
+
+ if p.poll() is not None:
+ if terminated_time is None:
+ terminated_time = time.time()
+ elif (terminated_timeout is not None and
+ time.time() - terminated_time > terminated_timeout):
+ if self.logger:
+ self.logger.LogWarning('Timeout of %s seconds reached since '
+ 'process termination.' %
+ terminated_timeout,
+ print_to_console)
+ break
+
+ if (command_timeout is not None and
+ time.time() - started_time > command_timeout):
+ os.killpg(os.getpgid(p.pid), signal.SIGTERM)
+ if self.logger:
+ self.logger.LogWarning('Timeout of %s seconds reached since process'
+ 'started. Killed child process group.' %
+ command_timeout, print_to_console)
+ break
+
+ if out == err == '':
+ break
+
+ p.wait()
+ if return_output:
+ return (p.returncode, full_stdout, full_stderr)
+ return (p.returncode, '', '')
+ except BaseException as e:
+ except_handler(p, e)
+ raise
+
+ def RunCommand(self, *args, **kwargs):
+ """Run a command.
+
+ Takes the same arguments as RunCommandGeneric except for return_output.
+ Returns a single value returncode.
+ """
+ # Make sure that args does not overwrite 'return_output'
+ assert len(args) <= 1
+ assert 'return_output' not in kwargs
+ kwargs['return_output'] = False
+ return self.RunCommandGeneric(*args, **kwargs)[0]
+
+ def RunCommandWExceptionCleanup(self, *args, **kwargs):
+ """Run a command and kill process if exception is thrown.
+
+ Takes the same arguments as RunCommandGeneric except for except_handler.
+ Returns same as RunCommandGeneric.
+ """
+
+ def KillProc(proc, _):
+ if proc:
+ os.killpg(os.getpgid(proc.pid), signal.SIGTERM)
+
+ # Make sure that args does not overwrite 'except_handler'
+ assert len(args) <= 8
+ assert 'except_handler' not in kwargs
+ kwargs['except_handler'] = KillProc
+ return self.RunCommandGeneric(*args, **kwargs)
+
+ def RunCommandWOutput(self, *args, **kwargs):
+ """Run a command.
+
+ Takes the same arguments as RunCommandGeneric except for return_output.
+ Returns a triplet (returncode, stdout, stderr).
+ """
+ # Make sure that args does not overwrite 'return_output'
+ assert len(args) <= 1
+ assert 'return_output' not in kwargs
+ kwargs['return_output'] = True
+ return self.RunCommandGeneric(*args, **kwargs)
+
+ def RemoteAccessInitCommand(self, chromeos_root, machine):
+ command = ''
+ command += '\nset -- --remote=' + machine
+ command += '\n. ' + chromeos_root + '/src/scripts/common.sh'
+ command += '\n. ' + chromeos_root + '/src/scripts/remote_access.sh'
+ command += '\nTMP=$(mktemp -d)'
+ command += "\nFLAGS \"$@\" || exit 1"
+ command += '\nremote_access_init'
+ return command
+
+ def WriteToTempShFile(self, contents):
+ handle, command_file = tempfile.mkstemp(prefix=os.uname()[1], suffix='.sh')
+ os.write(handle, '#!/bin/bash\n')
+ os.write(handle, contents)
+ os.close(handle)
+ return command_file
+
+ def CrosLearnBoard(self, chromeos_root, machine):
+ command = self.RemoteAccessInitCommand(chromeos_root, machine)
+ command += '\nlearn_board'
+ command += '\necho ${FLAGS_board}'
+ retval, output, _ = self.RunCommandWOutput(command)
+ if self.logger:
+ self.logger.LogFatalIf(retval, 'learn_board command failed')
+ elif retval:
+ sys.exit(1)
+ return output.split()[-1]
+
+ def CrosRunCommandGeneric(self,
+ cmd,
+ return_output=False,
+ machine=None,
+ command_terminator=None,
+ chromeos_root=None,
+ command_timeout=None,
+ terminated_timeout=10,
+ print_to_console=True):
+ """Run a command on a ChromeOS box.
+
+ Returns triplet (returncode, stdout, stderr).
+ """
+
+ if self.log_level != 'verbose':
+ print_to_console = False
+
+ if self.logger:
+ self.logger.LogCmd(cmd, print_to_console=print_to_console)
+ self.logger.LogFatalIf(not machine, 'No machine provided!')
+ self.logger.LogFatalIf(not chromeos_root, 'chromeos_root not given!')
+ else:
+ if not chromeos_root or not machine:
+ sys.exit(1)
+ chromeos_root = os.path.expanduser(chromeos_root)
+
+ # Write all commands to a file.
+ command_file = self.WriteToTempShFile(cmd)
+ retval = self.CopyFiles(command_file,
+ command_file,
+ dest_machine=machine,
+ command_terminator=command_terminator,
+ chromeos_root=chromeos_root,
+ dest_cros=True,
+ recursive=False,
+ print_to_console=print_to_console)
+ if retval:
+ if self.logger:
+ self.logger.LogError('Could not run remote command on machine.'
+ ' Is the machine up?')
+ return (retval, '', '')
+
+ command = self.RemoteAccessInitCommand(chromeos_root, machine)
+ command += '\nremote_sh bash %s' % command_file
+ command += "\nl_retval=$?; echo \"$REMOTE_OUT\"; exit $l_retval"
+ retval = self.RunCommandGeneric(command,
+ return_output,
+ command_terminator=command_terminator,
+ command_timeout=command_timeout,
+ terminated_timeout=terminated_timeout,
+ print_to_console=print_to_console)
+ if return_output:
+ connect_signature = (
+ 'Initiating first contact with remote host\n' + 'Connection OK\n')
+ connect_signature_re = re.compile(connect_signature)
+ modded_retval = list(retval)
+ modded_retval[1] = connect_signature_re.sub('', retval[1])
+ return modded_retval
+ return retval
+
+ def CrosRunCommand(self, *args, **kwargs):
+ """Run a command on a ChromeOS box.
+
+ Takes the same arguments as CrosRunCommandGeneric except for return_output.
+ Returns a single value returncode.
+ """
+ # Make sure that args does not overwrite 'return_output'
+ assert len(args) <= 1
+ assert 'return_output' not in kwargs
+ kwargs['return_output'] = False
+ return self.CrosRunCommandGeneric(*args, **kwargs)[0]
+
+ def CrosRunCommandWOutput(self, *args, **kwargs):
+ """Run a command on a ChromeOS box.
+
+ Takes the same arguments as CrosRunCommandGeneric except for return_output.
+ Returns a triplet (returncode, stdout, stderr).
+ """
+ # Make sure that args does not overwrite 'return_output'
+ assert len(args) <= 1
+ assert 'return_output' not in kwargs
+ kwargs['return_output'] = True
+ return self.CrosRunCommandGeneric(*args, **kwargs)
+
+ def ChrootRunCommandGeneric(self,
+ chromeos_root,
+ command,
+ return_output=False,
+ command_terminator=None,
+ command_timeout=None,
+ terminated_timeout=10,
+ print_to_console=True,
+ cros_sdk_options=''):
+ """Runs a command within the chroot.
+
+ Returns triplet (returncode, stdout, stderr).
+ """
+
+ if self.log_level != 'verbose':
+ print_to_console = False
+
+ if self.logger:
+ self.logger.LogCmd(command, print_to_console=print_to_console)
+
+ handle, command_file = tempfile.mkstemp(
+ dir=os.path.join(chromeos_root, 'src/scripts'),
+ suffix='.sh',
+ prefix='in_chroot_cmd')
+ os.write(handle, '#!/bin/bash\n')
+ os.write(handle, command)
+ os.write(handle, '\n')
+ os.close(handle)
+
+ os.chmod(command_file, 0777)
+
+ # if return_output is set, run a dummy command first to make sure that
+ # the chroot already exists. We want the final returned output to skip
+ # the output from chroot creation steps.
+ if return_output:
+ ret = self.RunCommand('cd %s; cros_sdk %s -- true' %
+ (chromeos_root, cros_sdk_options))
+ if ret:
+ return (ret, '', '')
+
+ # Run command_file inside the chroot, making sure that any "~" is expanded
+ # by the shell inside the chroot, not outside.
+ command = ("cd %s; cros_sdk %s -- bash -c '%s/%s'" %
+ (chromeos_root, cros_sdk_options, misc.CHROMEOS_SCRIPTS_DIR,
+ os.path.basename(command_file)))
+ ret = self.RunCommandGeneric(command,
+ return_output,
+ command_terminator=command_terminator,
+ command_timeout=command_timeout,
+ terminated_timeout=terminated_timeout,
+ print_to_console=print_to_console)
+ os.remove(command_file)
+ return ret
+
+ def ChrootRunCommand(self, *args, **kwargs):
+ """Runs a command within the chroot.
+
+ Takes the same arguments as ChrootRunCommandGeneric except for
+ return_output.
+ Returns a single value returncode.
+ """
+ # Make sure that args does not overwrite 'return_output'
+ assert len(args) <= 2
+ assert 'return_output' not in kwargs
+ kwargs['return_output'] = False
+ return self.ChrootRunCommandGeneric(*args, **kwargs)[0]
+
+ def ChrootRunCommandWOutput(self, *args, **kwargs):
+ """Runs a command within the chroot.
+
+ Takes the same arguments as ChrootRunCommandGeneric except for
+ return_output.
+ Returns a triplet (returncode, stdout, stderr).
+ """
+ # Make sure that args does not overwrite 'return_output'
+ assert len(args) <= 2
+ assert 'return_output' not in kwargs
+ kwargs['return_output'] = True
+ return self.ChrootRunCommandGeneric(*args, **kwargs)
+
+ def RunCommands(self,
+ cmdlist,
+ machine=None,
+ username=None,
+ command_terminator=None):
+ cmd = ' ;\n'.join(cmdlist)
+ return self.RunCommand(cmd,
+ machine=machine,
+ username=username,
+ command_terminator=command_terminator)
+
+ def CopyFiles(self,
+ src,
+ dest,
+ src_machine=None,
+ dest_machine=None,
+ src_user=None,
+ dest_user=None,
+ recursive=True,
+ command_terminator=None,
+ chromeos_root=None,
+ src_cros=False,
+ dest_cros=False,
+ print_to_console=True):
+ src = os.path.expanduser(src)
+ dest = os.path.expanduser(dest)
+
+ if recursive:
+ src = src + '/'
+ dest = dest + '/'
+
+ if src_cros == True or dest_cros == True:
+ if self.logger:
+ self.logger.LogFatalIf(src_cros == dest_cros,
+ 'Only one of src_cros and desc_cros can '
+ 'be True.')
+ self.logger.LogFatalIf(not chromeos_root, 'chromeos_root not given!')
+ elif src_cros == dest_cros or not chromeos_root:
+ sys.exit(1)
+ if src_cros == True:
+ cros_machine = src_machine
+ else:
+ cros_machine = dest_machine
+
+ command = self.RemoteAccessInitCommand(chromeos_root, cros_machine)
+ ssh_command = (
+ 'ssh -p ${FLAGS_ssh_port}' + ' -o StrictHostKeyChecking=no' +
+ ' -o UserKnownHostsFile=$(mktemp)' + ' -i $TMP_PRIVATE_KEY')
+ rsync_prefix = "\nrsync -r -e \"%s\" " % ssh_command
+ if dest_cros == True:
+ command += rsync_prefix + '%s root@%s:%s' % (src, dest_machine, dest)
+ return self.RunCommand(command,
+ machine=src_machine,
+ username=src_user,
+ command_terminator=command_terminator,
+ print_to_console=print_to_console)
+ else:
+ command += rsync_prefix + 'root@%s:%s %s' % (src_machine, src, dest)
+ return self.RunCommand(command,
+ machine=dest_machine,
+ username=dest_user,
+ command_terminator=command_terminator,
+ print_to_console=print_to_console)
+
+ if dest_machine == src_machine:
+ command = 'rsync -a %s %s' % (src, dest)
+ else:
+ if src_machine is None:
+ src_machine = os.uname()[1]
+ src_user = getpass.getuser()
+ command = 'rsync -a %s@%s:%s %s' % (src_user, src_machine, src, dest)
+ return self.RunCommand(command,
+ machine=dest_machine,
+ username=dest_user,
+ command_terminator=command_terminator,
+ print_to_console=print_to_console)
+
+ def RunCommand2(self,
+ cmd,
+ cwd=None,
+ line_consumer=None,
+ timeout=None,
+ shell=True,
+ join_stderr=True,
+ env=None,
+ except_handler=lambda p, e: None):
+ """Run the command with an extra feature line_consumer.
+
+ This version allow developers to provide a line_consumer which will be
+ fed execution output lines.
+
+ A line_consumer is a callback, which is given a chance to run for each
+ line the execution outputs (either to stdout or stderr). The
+ line_consumer must accept one and exactly one dict argument, the dict
+ argument has these items -
+ 'line' - The line output by the binary. Notice, this string includes
+ the trailing '\n'.
+ 'output' - Whether this is a stdout or stderr output, values are either
+ 'stdout' or 'stderr'. When join_stderr is True, this value
+ will always be 'output'.
+ 'pobject' - The object used to control execution, for example, call
+ pobject.kill().
+
+ Note: As this is written, the stdin for the process executed is
+ not associated with the stdin of the caller of this routine.
+
+ Args:
+ cmd: Command in a single string.
+ cwd: Working directory for execution.
+ line_consumer: A function that will ba called by this function. See above
+ for details.
+ timeout: terminate command after this timeout.
+ shell: Whether to use a shell for execution.
+ join_stderr: Whether join stderr to stdout stream.
+ env: Execution environment.
+ except_handler: Callback for when exception is thrown during command
+ execution. Passed process object and exception.
+
+ Returns:
+ Execution return code.
+
+ Raises:
+ child_exception: if fails to start the command process (missing
+ permission, no such file, etc)
+ """
+
+ class StreamHandler(object):
+ """Internal utility class."""
+
+ def __init__(self, pobject, fd, name, line_consumer):
+ self._pobject = pobject
+ self._fd = fd
+ self._name = name
+ self._buf = ''
+ self._line_consumer = line_consumer
+
+ def read_and_notify_line(self):
+ t = os.read(fd, 1024)
+ self._buf = self._buf + t
+ self.notify_line()
+
+ def notify_line(self):
+ p = self._buf.find('\n')
+ while p >= 0:
+ self._line_consumer(line=self._buf[:p + 1],
+ output=self._name,
+ pobject=self._pobject)
+ if p < len(self._buf) - 1:
+ self._buf = self._buf[p + 1:]
+ p = self._buf.find('\n')
+ else:
+ self._buf = ''
+ p = -1
+ break
+
+ def notify_eos(self):
+ # Notify end of stream. The last line may not end with a '\n'.
+ if self._buf != '':
+ self._line_consumer(line=self._buf,
+ output=self._name,
+ pobject=self._pobject)
+ self._buf = ''
+
+ if self.log_level == 'verbose':
+ self.logger.LogCmd(cmd)
+ elif self.logger:
+ self.logger.LogCmdToFileOnly(cmd)
+
+ # We use setsid so that the child will have a different session id
+ # and we can easily kill the process group. This is also important
+ # because the child will be disassociated from the parent terminal.
+ # In this way the child cannot mess the parent's terminal.
+ pobject = None
+ try:
+ pobject = subprocess.Popen(
+ cmd,
+ cwd=cwd,
+ bufsize=1024,
+ env=env,
+ shell=shell,
+ universal_newlines=True,
+ stdout=subprocess.PIPE,
+ stderr=subprocess.STDOUT if join_stderr else subprocess.PIPE,
+ preexec_fn=os.setsid)
+
+ # We provide a default line_consumer
+ if line_consumer is None:
+ line_consumer = lambda **d: None
+ start_time = time.time()
+ poll = select.poll()
+ outfd = pobject.stdout.fileno()
+ poll.register(outfd, select.POLLIN | select.POLLPRI)
+ handlermap = {outfd:
+ StreamHandler(pobject, outfd, 'stdout', line_consumer)}
+ if not join_stderr:
+ errfd = pobject.stderr.fileno()
+ poll.register(errfd,
+ select.POLLIN | select.POLLPRI)
+ handlermap[errfd] = StreamHandler(pobject,
+ errfd,
+ 'stderr',
+ line_consumer)
+ while len(handlermap):
+ readables = poll.poll(300)
+ for (fd, evt) in readables:
+ handler = handlermap[fd]
+ if evt & (select.POLLPRI | select.POLLIN):
+ handler.read_and_notify_line()
+ elif evt & (select.POLLHUP | select.POLLERR | select.POLLNVAL):
+ handler.notify_eos()
+ poll.unregister(fd)
+ del handlermap[fd]
+
+ if timeout is not None and (time.time() - start_time > timeout):
+ os.killpg(os.getpgid(pobject.pid), signal.SIGTERM)
+
+ return pobject.wait()
+ except BaseException as e:
+ except_handler(pobject, e)
+ raise
+
+
+class MockCommandExecuter(CommandExecuter):
+ """Mock class for class CommandExecuter."""
+
+ def __init__(self, log_level, logger_to_set=None):
+ super(MockCommandExecuter, self).__init__(log_level, logger_to_set)
+
+ def RunCommandGeneric(self,
+ cmd,
+ return_output=False,
+ machine=None,
+ username=None,
+ command_terminator=None,
+ command_timeout=None,
+ terminated_timeout=10,
+ print_to_console=True,
+ except_handler=lambda p, e: None):
+ assert not command_timeout
+ cmd = str(cmd)
+ if machine is None:
+ machine = 'localhost'
+ if username is None:
+ username = 'current'
+ logger.GetLogger().LogCmd('(Mock) ' + cmd, machine, username,
+ print_to_console)
+ return (0, '', '')
+
+ def RunCommand(self, *args, **kwargs):
+ assert 'return_output' not in kwargs
+ kwargs['return_output'] = False
+ return self.RunCommandGeneric(*args, **kwargs)[0]
+
+ def RunCommandWOutput(self, *args, **kwargs):
+ assert 'return_output' not in kwargs
+ kwargs['return_output'] = True
+ return self.RunCommandGeneric(*args, **kwargs)
+
+
+class CommandTerminator(object):
+ """Object to request termination of a command in execution."""
+
+ def __init__(self):
+ self.terminated = False
+
+ def Terminate(self):
+ self.terminated = True
+
+ def IsTerminated(self):
+ return self.terminated
diff --git a/cros_utils/command_executer_unittest.py b/cros_utils/command_executer_unittest.py
new file mode 100755
index 00000000..f039ebc5
--- /dev/null
+++ b/cros_utils/command_executer_unittest.py
@@ -0,0 +1,27 @@
+#!/usr/bin/env python2
+"""Unittest for command_executer.py."""
+
+from __future__ import print_function
+
+import time
+import unittest
+
+import command_executer
+
+
+class CommandExecuterTest(unittest.TestCase):
+ """Test for CommandExecuter class."""
+
+ def testTimeout(self):
+ timeout = 1
+ logging_level = 'average'
+ ce = command_executer.CommandExecuter(logging_level)
+ start = time.time()
+ command = 'sleep 20'
+ ce.RunCommand(command, command_timeout=timeout, terminated_timeout=timeout)
+ end = time.time()
+ self.assertTrue(round(end - start) == timeout)
+
+
+if __name__ == '__main__':
+ unittest.main()
diff --git a/cros_utils/constants.py b/cros_utils/constants.py
new file mode 100644
index 00000000..827e9233
--- /dev/null
+++ b/cros_utils/constants.py
@@ -0,0 +1,10 @@
+# Copyright 2010 Google Inc. All Rights Reserved.
+"""Generic constants used accross modules.
+"""
+
+__author__ = 'shenhan@google.com (Han Shen)'
+
+MOUNTED_TOOLCHAIN_ROOT = '/usr/local/toolchain_root'
+
+# Root directory for night testing run.
+CROSTC_WORKSPACE = '/usr/local/google/crostc'
diff --git a/cros_utils/email_sender.py b/cros_utils/email_sender.py
new file mode 100755
index 00000000..e5a20ad2
--- /dev/null
+++ b/cros_utils/email_sender.py
@@ -0,0 +1,144 @@
+#!/usr/bin/env python2
+
+# Copyright 2011 Google Inc. All Rights Reserved.
+"""Utilities to send email either through SMTP or SendGMR."""
+
+from __future__ import print_function
+
+from email import encoders as Encoders
+from email.mime.base import MIMEBase
+from email.mime.multipart import MIMEMultipart
+from email.mime.text import MIMEText
+import os
+import smtplib
+import tempfile
+
+from cros_utils import command_executer
+
+
+class EmailSender(object):
+ """Utility class to send email through SMTP or SendGMR."""
+
+ class Attachment(object):
+ """Small class to keep track of attachment info."""
+
+ def __init__(self, name, content):
+ self.name = name
+ self.content = content
+
+ def SendEmail(self,
+ email_to,
+ subject,
+ text_to_send,
+ email_cc=None,
+ email_bcc=None,
+ email_from=None,
+ msg_type='plain',
+ attachments=None):
+ """Choose appropriate email method and call it."""
+ if os.path.exists('/usr/bin/sendgmr'):
+ self.SendGMREmail(email_to, subject, text_to_send, email_cc, email_bcc,
+ email_from, msg_type, attachments)
+ else:
+ self.SendSMTPEmail(email_to, subject, text_to_send, email_cc, email_bcc,
+ email_from, msg_type, attachments)
+
+ def SendSMTPEmail(self, email_to, subject, text_to_send, email_cc, email_bcc,
+ email_from, msg_type, attachments):
+ """Send email via standard smtp mail."""
+ # Email summary to the current user.
+ msg = MIMEMultipart()
+
+ if not email_from:
+ email_from = os.path.basename(__file__)
+
+ msg['To'] = ','.join(email_to)
+ msg['Subject'] = subject
+
+ if email_from:
+ msg['From'] = email_from
+ if email_cc:
+ msg['CC'] = ','.join(email_cc)
+ email_to += email_cc
+ if email_bcc:
+ msg['BCC'] = ','.join(email_bcc)
+ email_to += email_bcc
+
+ msg.attach(MIMEText(text_to_send, msg_type))
+ if attachments:
+ for attachment in attachments:
+ part = MIMEBase('application', 'octet-stream')
+ part.set_payload(attachment.content)
+ Encoders.encode_base64(part)
+ part.add_header('Content-Disposition',
+ "attachment; filename=\"%s\"" % attachment.name)
+ msg.attach(part)
+
+ # Send the message via our own SMTP server, but don't include the
+ # envelope header.
+ s = smtplib.SMTP('localhost')
+ s.sendmail(email_from, email_to, msg.as_string())
+ s.quit()
+
+ def SendGMREmail(self, email_to, subject, text_to_send, email_cc, email_bcc,
+ email_from, msg_type, attachments):
+ """Send email via sendgmr program."""
+ ce = command_executer.GetCommandExecuter(log_level='none')
+
+ if not email_from:
+ email_from = os.path.basename(__file__)
+
+ to_list = ','.join(email_to)
+
+ if not text_to_send:
+ text_to_send = 'Empty message body.'
+ body_fd, body_filename = tempfile.mkstemp()
+ to_be_deleted = [body_filename]
+
+ try:
+ os.write(body_fd, text_to_send)
+ os.close(body_fd)
+
+ # Fix single-quotes inside the subject. In bash, to escape a single quote
+ # (e.g 'don't') you need to replace it with '\'' (e.g. 'don'\''t'). To
+ # make Python read the backslash as a backslash rather than an escape
+ # character, you need to double it. So...
+ subject = subject.replace("'", "'\\''")
+
+ if msg_type == 'html':
+ command = ("sendgmr --to='%s' --subject='%s' --html_file='%s' "
+ '--body_file=/dev/null' % (to_list, subject, body_filename))
+ else:
+ command = ("sendgmr --to='%s' --subject='%s' --body_file='%s'" %
+ (to_list, subject, body_filename))
+ if email_from:
+ command += ' --from=%s' % email_from
+ if email_cc:
+ cc_list = ','.join(email_cc)
+ command += " --cc='%s'" % cc_list
+ if email_bcc:
+ bcc_list = ','.join(email_bcc)
+ command += " --bcc='%s'" % bcc_list
+
+ if attachments:
+ attachment_files = []
+ for attachment in attachments:
+ if '<html>' in attachment.content:
+ report_suffix = '_report.html'
+ else:
+ report_suffix = '_report.txt'
+ fd, fname = tempfile.mkstemp(suffix=report_suffix)
+ os.write(fd, attachment.content)
+ os.close(fd)
+ attachment_files.append(fname)
+ files = ','.join(attachment_files)
+ command += " --attachment_files='%s'" % files
+ to_be_deleted += attachment_files
+
+ # Send the message via our own GMR server.
+ status = ce.RunCommand(command)
+ return status
+
+ finally:
+ for f in to_be_deleted:
+ os.remove(f)
diff --git a/cros_utils/file_utils.py b/cros_utils/file_utils.py
new file mode 100644
index 00000000..777e6251
--- /dev/null
+++ b/cros_utils/file_utils.py
@@ -0,0 +1,87 @@
+# Copyright 2011 Google Inc. All Rights Reserved.
+"""Utilities for operations on files."""
+
+from __future__ import print_function
+
+import errno
+import os
+import shutil
+import command_executer
+
+
+class FileUtils(object):
+ """Utilities for operations on files."""
+ _instance = None
+ DRY_RUN = False
+
+ @classmethod
+ def Configure(cls, dry_run):
+ cls.DRY_RUN = dry_run
+
+ def __new__(cls, *args, **kwargs):
+ if not cls._instance:
+ if cls.DRY_RUN:
+ cls._instance = super(FileUtils, cls).__new__(MockFileUtils, *args,
+ **kwargs)
+ else:
+ cls._instance = super(FileUtils, cls).__new__(cls, *args, **kwargs)
+ return cls._instance
+
+ def Md5File(self, filename, log_level='verbose', _block_size=2**10):
+ command = 'md5sum %s' % filename
+ ce = command_executer.GetCommandExecuter(log_level=log_level)
+ ret, out, _ = ce.RunCommandWOutput(command)
+ if ret:
+ raise RuntimeError('Could not run md5sum on: %s' % filename)
+
+ return out.strip().split()[0]
+
+ def CanonicalizeChromeOSRoot(self, chromeos_root):
+ chromeos_root = os.path.expanduser(chromeos_root)
+ if os.path.isdir(os.path.join(chromeos_root, 'chromite')):
+ return chromeos_root
+ else:
+ return None
+
+ def ChromeOSRootFromImage(self, chromeos_image):
+ chromeos_root = os.path.join(
+ os.path.dirname(chromeos_image), '../../../../..')
+ return self.CanonicalizeChromeOSRoot(chromeos_root)
+
+ def MkDirP(self, path):
+ try:
+ os.makedirs(path)
+ except OSError as exc:
+ if exc.errno == errno.EEXIST:
+ pass
+ else:
+ raise
+
+ def RmDir(self, path):
+ shutil.rmtree(path, ignore_errors=True)
+
+ def WriteFile(self, path, contents):
+ with open(path, 'wb') as f:
+ f.write(contents)
+
+
+class MockFileUtils(FileUtils):
+ """Mock class for file utilities."""
+
+ def Md5File(self, filename, log_level='verbose', _block_size=2**10):
+ return 'd41d8cd98f00b204e9800998ecf8427e'
+
+ def CanonicalizeChromeOSRoot(self, chromeos_root):
+ return '/tmp/chromeos_root'
+
+ def ChromeOSRootFromImage(self, chromeos_image):
+ return '/tmp/chromeos_root'
+
+ def RmDir(self, path):
+ pass
+
+ def MkDirP(self, path):
+ pass
+
+ def WriteFile(self, path, contents):
+ pass
diff --git a/cros_utils/html_tools.py b/cros_utils/html_tools.py
new file mode 100644
index 00000000..8ca795bf
--- /dev/null
+++ b/cros_utils/html_tools.py
@@ -0,0 +1,91 @@
+# Copyright 2010 Google Inc. All Rights Reserved.
+"""Utilities for generating html."""
+
+
+def GetPageHeader(page_title):
+ return """<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html>
+<head>
+<style type="text/css">
+table
+{
+border-collapse:collapse;
+}
+table, td, th
+{
+border:1px solid black;
+}
+</style>
+<script type="text/javascript">
+function displayRow(id){
+ var row = document.getElementById("group_"+id);
+ if (row.style.display == '') row.style.display = 'none';
+ else row.style.display = '';
+ }
+</script>
+<title>%s</title>
+</head>
+<body>
+
+""" % page_title
+
+
+def GetListHeader():
+ return '<ul>'
+
+
+def GetListItem(text):
+ return '<li>%s</li>' % text
+
+
+def GetListFooter():
+ return '</ul>'
+
+
+def GetList(items):
+ return '<ul>%s</ul>' % ''.join(['<li>%s</li>' % item for item in items])
+
+
+def GetParagraph(text):
+ return '<p>%s</p>' % text
+
+
+def GetFooter():
+ return '</body>\n</html>'
+
+
+def GetHeader(text, h=1):
+ return '<h%s>%s</h%s>' % (h, text, h)
+
+
+def GetTableHeader(headers):
+ row = ''.join(['<th>%s</th>' % header for header in headers])
+ return '<table><tr>%s</tr>' % row
+
+
+def GetTableFooter():
+ return '</table>'
+
+
+def FormatLineBreaks(text):
+ return text.replace('\n', '<br/>')
+
+
+def GetTableCell(text):
+ return '<td>%s</td>' % FormatLineBreaks(str(text))
+
+
+def GetTableRow(columns):
+ return '<tr>%s</tr>' % '\n'.join([GetTableCell(column) for column in columns])
+
+
+def GetTable(headers, rows):
+ table = [GetTableHeader(headers)]
+ table.extend([GetTableRow(row) for row in rows])
+ table.append(GetTableFooter())
+ return '\n'.join(table)
+
+
+def GetLink(link, text):
+ return "<a href='%s'>%s</a>" % (link, text)
diff --git a/cros_utils/locks.py b/cros_utils/locks.py
new file mode 100644
index 00000000..cb96368e
--- /dev/null
+++ b/cros_utils/locks.py
@@ -0,0 +1,44 @@
+# Copyright 2015 The Chromium OS Authors. All rights reserved.
+"""Utilities for locking machines."""
+
+from __future__ import print_function
+
+import time
+
+import afe_lock_machine
+
+import logger
+
+
+def AcquireLock(machines, chromeos_root, timeout=1200):
+ """Acquire lock for machine(s) with timeout, using AFE server for locking."""
+ start_time = time.time()
+ locked = True
+ sleep_time = min(10, timeout / 10.0)
+ while True:
+ try:
+ afe_lock_machine.AFELockManager(machines, False, chromeos_root,
+ None).UpdateMachines(True)
+ break
+ except Exception as e:
+ if time.time() - start_time > timeout:
+ locked = False
+ logger.GetLogger().LogWarning(
+ 'Could not acquire lock on {0} within {1} seconds: {2}'.format(
+ repr(machines), timeout, str(e)))
+ break
+ time.sleep(sleep_time)
+ return locked
+
+
+def ReleaseLock(machines, chromeos_root):
+ """Release locked machine(s), using AFE server for locking."""
+ unlocked = True
+ try:
+ afe_lock_machine.AFELockManager(machines, False, chromeos_root,
+ None).UpdateMachines(False)
+ except Exception as e:
+ unlocked = False
+ logger.GetLogger().LogWarning('Could not unlock %s. %s' %
+ (repr(machines), str(e)))
+ return unlocked
diff --git a/cros_utils/logger.py b/cros_utils/logger.py
new file mode 100644
index 00000000..364d9c9d
--- /dev/null
+++ b/cros_utils/logger.py
@@ -0,0 +1,369 @@
+# Copyright 2010 Google Inc. All Rights Reserved.
+"""Logging helper module."""
+
+from __future__ import print_function
+
+# System modules
+import os.path
+import sys
+import traceback
+
+
+#TODO(yunlian@google.com): Use GetRoot from misc
+def GetRoot(scr_name):
+ """Break up pathname into (dir+name)."""
+ abs_path = os.path.abspath(scr_name)
+ return (os.path.dirname(abs_path), os.path.basename(abs_path))
+
+
+class Logger(object):
+ """Logging helper class."""
+
+ MAX_LOG_FILES = 10
+
+ def __init__(self, rootdir, basefilename, print_console, subdir='logs'):
+ logdir = os.path.join(rootdir, subdir)
+ basename = os.path.join(logdir, basefilename)
+
+ try:
+ os.makedirs(logdir)
+ except OSError:
+ pass
+ # print("Warning: Logs directory '%s' already exists." % logdir)
+
+ self.print_console = print_console
+
+ self._CreateLogFileHandles(basename)
+
+ self._WriteTo(self.cmdfd, ' '.join(sys.argv), True)
+
+ def _AddSuffix(self, basename, suffix):
+ return '%s%s' % (basename, suffix)
+
+ def _FindSuffix(self, basename):
+ timestamps = []
+ found_suffix = None
+ for i in range(self.MAX_LOG_FILES):
+ suffix = str(i)
+ suffixed_basename = self._AddSuffix(basename, suffix)
+ cmd_file = '%s.cmd' % suffixed_basename
+ if not os.path.exists(cmd_file):
+ found_suffix = suffix
+ break
+ timestamps.append(os.stat(cmd_file).st_mtime)
+
+ if found_suffix:
+ return found_suffix
+
+ # Try to pick the oldest file with the suffix and return that one.
+ suffix = str(timestamps.index(min(timestamps)))
+ # print ("Warning: Overwriting log file: %s" %
+ # self._AddSuffix(basename, suffix))
+ return suffix
+
+ def _CreateLogFileHandle(self, name):
+ fd = None
+ try:
+ fd = open(name, 'w')
+ except IOError:
+ print('Warning: could not open %s for writing.' % name)
+ return fd
+
+ def _CreateLogFileHandles(self, basename):
+ suffix = self._FindSuffix(basename)
+ suffixed_basename = self._AddSuffix(basename, suffix)
+
+ self.cmdfd = self._CreateLogFileHandle('%s.cmd' % suffixed_basename)
+ self.stdout = self._CreateLogFileHandle('%s.out' % suffixed_basename)
+ self.stderr = self._CreateLogFileHandle('%s.err' % suffixed_basename)
+
+ self._CreateLogFileSymlinks(basename, suffixed_basename)
+
+ # Symlink unsuffixed basename to currently suffixed one.
+ def _CreateLogFileSymlinks(self, basename, suffixed_basename):
+ try:
+ for extension in ['cmd', 'out', 'err']:
+ src_file = '%s.%s' % (os.path.basename(suffixed_basename), extension)
+ dest_file = '%s.%s' % (basename, extension)
+ if os.path.exists(dest_file):
+ os.remove(dest_file)
+ os.symlink(src_file, dest_file)
+ except Exception as ex:
+ print('Exception while creating symlinks: %s' % str(ex))
+
+ def _WriteTo(self, fd, msg, flush):
+ if fd:
+ fd.write(msg)
+ if flush:
+ fd.flush()
+
+ def LogStartDots(self, print_to_console=True):
+ term_fd = self._GetStdout(print_to_console)
+ if term_fd:
+ term_fd.flush()
+ term_fd.write('. ')
+ term_fd.flush()
+
+ def LogAppendDot(self, print_to_console=True):
+ term_fd = self._GetStdout(print_to_console)
+ if term_fd:
+ term_fd.write('. ')
+ term_fd.flush()
+
+ def LogEndDots(self, print_to_console=True):
+ term_fd = self._GetStdout(print_to_console)
+ if term_fd:
+ term_fd.write('\n')
+ term_fd.flush()
+
+ def LogMsg(self, file_fd, term_fd, msg, flush=True):
+ if file_fd:
+ self._WriteTo(file_fd, msg, flush)
+ if self.print_console:
+ self._WriteTo(term_fd, msg, flush)
+
+ def _GetStdout(self, print_to_console):
+ if print_to_console:
+ return sys.stdout
+ return None
+
+ def _GetStderr(self, print_to_console):
+ if print_to_console:
+ return sys.stderr
+ return None
+
+ def LogCmdToFileOnly(self, cmd, machine='', user=None):
+ if not self.cmdfd:
+ return
+
+ host = ('%s@%s' % (user, machine)) if user else machine
+ flush = True
+ cmd_string = 'CMD (%s): %s\n' % (host, cmd)
+ self._WriteTo(self.cmdfd, cmd_string, flush)
+
+ def LogCmd(self, cmd, machine='', user=None, print_to_console=True):
+ if user:
+ host = '%s@%s' % (user, machine)
+ else:
+ host = machine
+
+ self.LogMsg(self.cmdfd, self._GetStdout(print_to_console),
+ 'CMD (%s): %s\n' % (host, cmd))
+
+ def LogFatal(self, msg, print_to_console=True):
+ self.LogMsg(self.stderr, self._GetStderr(print_to_console),
+ 'FATAL: %s\n' % msg)
+ self.LogMsg(self.stderr, self._GetStderr(print_to_console),
+ '\n'.join(traceback.format_stack()))
+ sys.exit(1)
+
+ def LogError(self, msg, print_to_console=True):
+ self.LogMsg(self.stderr, self._GetStderr(print_to_console),
+ 'ERROR: %s\n' % msg)
+
+ def LogWarning(self, msg, print_to_console=True):
+ self.LogMsg(self.stderr, self._GetStderr(print_to_console),
+ 'WARNING: %s\n' % msg)
+
+ def LogOutput(self, msg, print_to_console=True):
+ self.LogMsg(self.stdout, self._GetStdout(print_to_console),
+ 'OUTPUT: %s\n' % msg)
+
+ def LogFatalIf(self, condition, msg):
+ if condition:
+ self.LogFatal(msg)
+
+ def LogErrorIf(self, condition, msg):
+ if condition:
+ self.LogError(msg)
+
+ def LogWarningIf(self, condition, msg):
+ if condition:
+ self.LogWarning(msg)
+
+ def LogCommandOutput(self, msg, print_to_console=True):
+ self.LogMsg(self.stdout,
+ self._GetStdout(print_to_console),
+ msg,
+ flush=False)
+
+ def LogCommandError(self, msg, print_to_console=True):
+ self.LogMsg(self.stderr,
+ self._GetStderr(print_to_console),
+ msg,
+ flush=False)
+
+ def Flush(self):
+ self.cmdfd.flush()
+ self.stdout.flush()
+ self.stderr.flush()
+
+
+class MockLogger(object):
+ """Logging helper class."""
+
+ MAX_LOG_FILES = 10
+
+ def __init__(self, *_args, **_kwargs):
+ self.stdout = sys.stdout
+ self.stderr = sys.stderr
+ return None
+
+ def _AddSuffix(self, basename, suffix):
+ return '%s%s' % (basename, suffix)
+
+ def _FindSuffix(self, basename):
+ timestamps = []
+ found_suffix = None
+ for i in range(self.MAX_LOG_FILES):
+ suffix = str(i)
+ suffixed_basename = self._AddSuffix(basename, suffix)
+ cmd_file = '%s.cmd' % suffixed_basename
+ if not os.path.exists(cmd_file):
+ found_suffix = suffix
+ break
+ timestamps.append(os.stat(cmd_file).st_mtime)
+
+ if found_suffix:
+ return found_suffix
+
+ # Try to pick the oldest file with the suffix and return that one.
+ suffix = str(timestamps.index(min(timestamps)))
+ # print ("Warning: Overwriting log file: %s" %
+ # self._AddSuffix(basename, suffix))
+ return suffix
+
+ def _CreateLogFileHandle(self, name):
+ print('MockLogger: creating open file handle for %s (writing)' % name)
+
+ def _CreateLogFileHandles(self, basename):
+ suffix = self._FindSuffix(basename)
+ suffixed_basename = self._AddSuffix(basename, suffix)
+
+ print('MockLogger: opening file %s.cmd' % suffixed_basename)
+ print('MockLogger: opening file %s.out' % suffixed_basename)
+ print('MockLogger: opening file %s.err' % suffixed_basename)
+
+ self._CreateLogFileSymlinks(basename, suffixed_basename)
+
+ # Symlink unsuffixed basename to currently suffixed one.
+ def _CreateLogFileSymlinks(self, basename, suffixed_basename):
+ for extension in ['cmd', 'out', 'err']:
+ src_file = '%s.%s' % (os.path.basename(suffixed_basename), extension)
+ dest_file = '%s.%s' % (basename, extension)
+ print('MockLogger: Calling os.symlink(%s, %s)' % (src_file, dest_file))
+
+ def _WriteTo(self, _fd, msg, _flush):
+ print('MockLogger: %s' % msg)
+
+ def LogStartDots(self, _print_to_console=True):
+ print('. ')
+
+ def LogAppendDot(self, _print_to_console=True):
+ print('. ')
+
+ def LogEndDots(self, _print_to_console=True):
+ print('\n')
+
+ def LogMsg(self, _file_fd, _term_fd, msg, **_kwargs):
+ print('MockLogger: %s' % msg)
+
+ def _GetStdout(self, _print_to_console):
+ return None
+
+ def _GetStderr(self, _print_to_console):
+ return None
+
+ def LogCmdToFileOnly(self, *_args, **_kwargs):
+ return
+
+ # def LogCmdToFileOnly(self, cmd, machine='', user=None):
+ # host = ('%s@%s' % (user, machine)) if user else machine
+ # cmd_string = 'CMD (%s): %s\n' % (host, cmd)
+ # print('MockLogger: Writing to file ONLY: %s' % cmd_string)
+
+ def LogCmd(self, cmd, machine='', user=None, print_to_console=True):
+ if user:
+ host = '%s@%s' % (user, machine)
+ else:
+ host = machine
+
+ self.LogMsg(0, self._GetStdout(print_to_console),
+ 'CMD (%s): %s\n' % (host, cmd))
+
+ def LogFatal(self, msg, print_to_console=True):
+ self.LogMsg(0, self._GetStderr(print_to_console), 'FATAL: %s\n' % msg)
+ self.LogMsg(0, self._GetStderr(print_to_console),
+ '\n'.join(traceback.format_stack()))
+ print('MockLogger: Calling sysexit(1)')
+
+ def LogError(self, msg, print_to_console=True):
+ self.LogMsg(0, self._GetStderr(print_to_console), 'ERROR: %s\n' % msg)
+
+ def LogWarning(self, msg, print_to_console=True):
+ self.LogMsg(0, self._GetStderr(print_to_console), 'WARNING: %s\n' % msg)
+
+ def LogOutput(self, msg, print_to_console=True):
+ self.LogMsg(0, self._GetStdout(print_to_console), 'OUTPUT: %s\n' % msg)
+
+ def LogFatalIf(self, condition, msg):
+ if condition:
+ self.LogFatal(msg)
+
+ def LogErrorIf(self, condition, msg):
+ if condition:
+ self.LogError(msg)
+
+ def LogWarningIf(self, condition, msg):
+ if condition:
+ self.LogWarning(msg)
+
+ def LogCommandOutput(self, msg, print_to_console=True):
+ self.LogMsg(self.stdout,
+ self._GetStdout(print_to_console),
+ msg,
+ flush=False)
+
+ def LogCommandError(self, msg, print_to_console=True):
+ self.LogMsg(self.stderr,
+ self._GetStderr(print_to_console),
+ msg,
+ flush=False)
+
+ def Flush(self):
+ print('MockLogger: Flushing cmdfd, stdout, stderr')
+
+
+main_logger = None
+
+
+def InitLogger(script_name, log_dir, print_console=True, mock=False):
+ """Initialize a global logger. To be called only once."""
+ # pylint: disable=global-statement
+ global main_logger
+ assert not main_logger, 'The logger has already been initialized'
+ rootdir, basefilename = GetRoot(script_name)
+ if not log_dir:
+ log_dir = rootdir
+ if not mock:
+ main_logger = Logger(log_dir, basefilename, print_console)
+ else:
+ main_logger = MockLogger(log_dir, basefilename, print_console)
+
+
+def GetLogger(log_dir='', mock=False):
+ if not main_logger:
+ InitLogger(sys.argv[0], log_dir, mock=mock)
+ return main_logger
+
+
+def HandleUncaughtExceptions(fun):
+ """Catches all exceptions that would go outside decorated fun scope."""
+
+ def _Interceptor(*args, **kwargs):
+ try:
+ return fun(*args, **kwargs)
+ except StandardError:
+ GetLogger().LogFatal('Uncaught exception:\n%s' % traceback.format_exc())
+
+ return _Interceptor
diff --git a/cros_utils/machines.py b/cros_utils/machines.py
new file mode 100644
index 00000000..722df3b8
--- /dev/null
+++ b/cros_utils/machines.py
@@ -0,0 +1,25 @@
+# Copyright 2015 The Chromium OS Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+"""Utilities relating to machine-specific functions."""
+
+from __future__ import print_function
+
+from cros_utils import command_executer
+
+
+def MachineIsPingable(machine, logging_level='average'):
+ """Checks to see if a machine is responding to 'ping'.
+
+ Args:
+ machine: String containing the name or ip address of the machine to check.
+ logging_level: The logging level with which to initialize the
+ command_executer (from command_executor.LOG_LEVEL enum list).
+
+ Returns:
+ Boolean indicating whether machine is responding to ping or not.
+ """
+ ce = command_executer.GetCommandExecuter(log_level=logging_level)
+ cmd = 'ping -c 1 -w 3 %s' % machine
+ status = ce.RunCommand(cmd)
+ return status == 0
diff --git a/cros_utils/manifest_versions.py b/cros_utils/manifest_versions.py
new file mode 100644
index 00000000..52fd700f
--- /dev/null
+++ b/cros_utils/manifest_versions.py
@@ -0,0 +1,97 @@
+# Copyright (c) 2013 The Chromium OS Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+"""Tools for searching/manipulating the manifests repository."""
+
+from __future__ import print_function
+
+__author__ = 'llozano@google.com (Luis Lozano)'
+
+import os
+import re
+import shutil
+import tempfile
+import time
+
+import command_executer
+import logger
+
+
+def IsCrosVersion(version):
+ match = re.search(r'(\d+\.\d+\.\d+\.\d+)', version)
+ return match is not None
+
+
+def IsRFormatCrosVersion(version):
+ match = re.search(r'(R\d+-\d+\.\d+\.\d+)', version)
+ return match is not None
+
+
+def RFormatCrosVersion(version):
+ assert IsCrosVersion(version)
+ tmp_major, tmp_minor = version.split('.', 1)
+ rformat = 'R' + tmp_major + '-' + tmp_minor
+ assert IsRFormatCrosVersion(rformat)
+ return rformat
+
+
+class ManifestVersions(object):
+ """This class handles interactions with the manifests repo."""
+
+ def __init__(self, internal=True):
+ self.internal = internal
+ self.clone_location = tempfile.mkdtemp()
+ self.ce = command_executer.GetCommandExecuter()
+ if internal:
+ versions_git = ('https://chrome-internal.googlesource.com/'
+ 'chromeos/manifest-versions.git')
+ else:
+ versions_git = (
+ 'https://chromium.googlesource.com/chromiumos/manifest-versions.git')
+ commands = ['cd {0}'.format(self.clone_location),
+ 'git clone {0}'.format(versions_git)]
+ ret = self.ce.RunCommands(commands)
+ if ret:
+ logger.GetLogger().LogFatal('Failed to clone manifest-versions.')
+
+ def __del__(self):
+ if self.clone_location:
+ shutil.rmtree(self.clone_location)
+
+ def TimeToVersion(self, my_time):
+ """Convert timestamp to version number."""
+ cur_time = time.mktime(time.gmtime())
+ des_time = float(my_time)
+ if cur_time - des_time > 7000000:
+ logger.GetLogger().LogFatal('The time you specify is too early.')
+ commands = ['cd {0}'.format(self.clone_location), 'cd manifest-versions',
+ 'git checkout -f $(git rev-list' +
+ ' --max-count=1 --before={0} origin/master)'.format(my_time)]
+ ret = self.ce.RunCommands(commands)
+ if ret:
+ logger.GetLogger().LogFatal('Failed to checkout manifest at '
+ 'specified time')
+ path = os.path.realpath('{0}/manifest-versions/LKGM/lkgm.xml'.format(
+ self.clone_location))
+ pp = path.split('/')
+ small = os.path.basename(path).split('.xml')[0]
+ version = pp[-2] + '.' + small
+ commands = ['cd {0}'.format(self.clone_location), 'cd manifest-versions',
+ 'git checkout master']
+ self.ce.RunCommands(commands)
+ return version
+
+ def GetManifest(self, version, to_file):
+ """Get the manifest file from a given chromeos-internal version."""
+ assert not IsRFormatCrosVersion(version)
+ version = version.split('.', 1)[1]
+ os.chdir(self.clone_location)
+ files = [os.path.join(r, f)
+ for r, _, fs in os.walk('.') for f in fs if version in f]
+ if files:
+ command = 'cp {0} {1}'.format(files[0], to_file)
+ ret = self.ce.RunCommand(command)
+ if ret:
+ raise RuntimeError('Cannot copy manifest to {0}'.format(to_file))
+ else:
+ raise RuntimeError('Version {0} is not available.'.format(version))
diff --git a/cros_utils/misc.py b/cros_utils/misc.py
new file mode 100644
index 00000000..6c7d2909
--- /dev/null
+++ b/cros_utils/misc.py
@@ -0,0 +1,569 @@
+# Copyright 2013 The Chromium OS Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+"""Utilities for toolchain build."""
+
+from __future__ import print_function
+
+__author__ = 'asharif@google.com (Ahmad Sharif)'
+
+from contextlib import contextmanager
+import os
+import re
+import shutil
+import sys
+import traceback
+
+import command_executer
+import logger
+
+CHROMEOS_SCRIPTS_DIR = '~/trunk/src/scripts'
+TOOLCHAIN_UTILS_PATH = '~/trunk/src/platform/dev/toolchain_utils.sh'
+
+
+def GetChromeOSVersionFromLSBVersion(lsb_version):
+ """Get Chromeos version from Lsb version."""
+ ce = command_executer.GetCommandExecuter()
+ command = ('git ls-remote '
+ 'https://chromium.googlesource.com/chromiumos/manifest.git')
+ ret, out, _ = ce.RunCommandWOutput(command, print_to_console=False)
+ assert ret == 0, 'Command %s failed' % command
+ lower = []
+ for line in out.splitlines():
+ mo = re.search(r'refs/heads/release-R(\d+)-(\d+)\.B', line)
+ if mo:
+ revision = int(mo.group(1))
+ build = int(mo.group(2))
+ lsb_build = int(lsb_version.split('.')[0])
+ if lsb_build > build:
+ lower.append(revision)
+ lower = sorted(lower)
+ if lower:
+ return 'R%d-%s' % (lower[-1] + 1, lsb_version)
+ else:
+ return 'Unknown'
+
+
+def ApplySubs(string, *substitutions):
+ for pattern, replacement in substitutions:
+ string = re.sub(pattern, replacement, string)
+ return string
+
+
+def UnitToNumber(unit_num, base=1000):
+ """Convert a number with unit to float."""
+ unit_dict = {'kilo': base, 'mega': base**2, 'giga': base**3}
+ unit_num = unit_num.lower()
+ mo = re.search(r'(\d*)(.+)?', unit_num)
+ number = mo.group(1)
+ unit = mo.group(2)
+ if not unit:
+ return float(number)
+ for k, v in unit_dict.items():
+ if k.startswith(unit):
+ return float(number) * v
+ raise RuntimeError('Unit: %s not found in byte: %s!' % (unit, unit_num))
+
+
+def GetFilenameFromString(string):
+ return ApplySubs(string, (r'/', '__'), (r'\s', '_'), (r'[\\$="?^]', ''),)
+
+
+def GetRoot(scr_name):
+ """Break up pathname into (dir+name)."""
+ abs_path = os.path.abspath(scr_name)
+ return (os.path.dirname(abs_path), os.path.basename(abs_path))
+
+
+def GetChromeOSKeyFile(chromeos_root):
+ return os.path.join(chromeos_root, 'src', 'scripts', 'mod_for_test_scripts',
+ 'ssh_keys', 'testing_rsa')
+
+
+def GetChrootPath(chromeos_root):
+ return os.path.join(chromeos_root, 'chroot')
+
+
+def GetInsideChrootPath(chromeos_root, file_path):
+ if not file_path.startswith(GetChrootPath(chromeos_root)):
+ raise RuntimeError("File: %s doesn't seem to be in the chroot: %s" %
+ (file_path, chromeos_root))
+ return file_path[len(GetChrootPath(chromeos_root)):]
+
+
+def GetOutsideChrootPath(chromeos_root, file_path):
+ return os.path.join(GetChrootPath(chromeos_root), file_path.lstrip('/'))
+
+
+def FormatQuotedCommand(command):
+ return ApplySubs(command, ('"', r'\"'))
+
+
+def FormatCommands(commands):
+ return ApplySubs(
+ str(commands), ('&&', '&&\n'), (';', ';\n'), (r'\n+\s*', '\n'))
+
+
+def GetImageDir(chromeos_root, board):
+ return os.path.join(chromeos_root, 'src', 'build', 'images', board)
+
+
+def LabelLatestImage(chromeos_root, board, label, vanilla_path=None):
+ image_dir = GetImageDir(chromeos_root, board)
+ latest_image_dir = os.path.join(image_dir, 'latest')
+ latest_image_dir = os.path.realpath(latest_image_dir)
+ latest_image_dir = os.path.basename(latest_image_dir)
+ retval = 0
+ with WorkingDirectory(image_dir):
+ command = 'ln -sf -T %s %s' % (latest_image_dir, label)
+ ce = command_executer.GetCommandExecuter()
+ retval = ce.RunCommand(command)
+ if retval:
+ return retval
+ if vanilla_path:
+ command = 'ln -sf -T %s %s' % (vanilla_path, 'vanilla')
+ retval2 = ce.RunCommand(command)
+ return retval2
+ return retval
+
+
+def DoesLabelExist(chromeos_root, board, label):
+ image_label = os.path.join(GetImageDir(chromeos_root, board), label)
+ return os.path.exists(image_label)
+
+
+def GetBuildPackagesCommand(board, usepkg=False, debug=False):
+ if usepkg:
+ usepkg_flag = '--usepkg'
+ else:
+ usepkg_flag = '--nousepkg'
+ if debug:
+ withdebug_flag = '--withdebug'
+ else:
+ withdebug_flag = '--nowithdebug'
+ return ('%s/build_packages %s --withdev --withtest --withautotest '
+ '--skip_toolchain_update %s --board=%s '
+ '--accept_licenses=@CHROMEOS' %
+ (CHROMEOS_SCRIPTS_DIR, usepkg_flag, withdebug_flag, board))
+
+
+def GetBuildImageCommand(board, dev=False):
+ dev_args = ''
+ if dev:
+ dev_args = '--noenable_rootfs_verification --disk_layout=2gb-rootfs'
+ return ('%s/build_image --board=%s %s test' %
+ (CHROMEOS_SCRIPTS_DIR, board, dev_args))
+
+
+def GetSetupBoardCommand(board,
+ gcc_version=None,
+ binutils_version=None,
+ usepkg=None,
+ force=None):
+ """Get setup_board command."""
+ options = []
+
+ if gcc_version:
+ options.append('--gcc_version=%s' % gcc_version)
+
+ if binutils_version:
+ options.append('--binutils_version=%s' % binutils_version)
+
+ if usepkg:
+ options.append('--usepkg')
+ else:
+ options.append('--nousepkg')
+
+ if force:
+ options.append('--force')
+
+ options.append('--accept_licenses=@CHROMEOS')
+
+ return ('%s/setup_board --board=%s %s' %
+ (CHROMEOS_SCRIPTS_DIR, board, ' '.join(options)))
+
+
+def CanonicalizePath(path):
+ path = os.path.expanduser(path)
+ path = os.path.realpath(path)
+ return path
+
+
+def GetCtargetFromBoard(board, chromeos_root):
+ """Get Ctarget from board."""
+ base_board = board.split('_')[0]
+ command = ('source %s; get_ctarget_from_board %s' %
+ (TOOLCHAIN_UTILS_PATH, base_board))
+ ce = command_executer.GetCommandExecuter()
+ ret, out, _ = ce.ChrootRunCommandWOutput(chromeos_root, command)
+ if ret != 0:
+ raise ValueError('Board %s is invalid!' % board)
+ # Remove ANSI escape sequences.
+ out = StripANSIEscapeSequences(out)
+ return out.strip()
+
+
+def GetArchFromBoard(board, chromeos_root):
+ """Get Arch from board."""
+ base_board = board.split('_')[0]
+ command = ('source %s; get_board_arch %s' %
+ (TOOLCHAIN_UTILS_PATH, base_board))
+ ce = command_executer.GetCommandExecuter()
+ ret, out, _ = ce.ChrootRunCommandWOutput(chromeos_root, command)
+ if ret != 0:
+ raise ValueError('Board %s is invalid!' % board)
+ # Remove ANSI escape sequences.
+ out = StripANSIEscapeSequences(out)
+ return out.strip()
+
+
+def GetGccLibsDestForBoard(board, chromeos_root):
+ """Get gcc libs destination from board."""
+ arch = GetArchFromBoard(board, chromeos_root)
+ if arch == 'x86':
+ return '/build/%s/usr/lib/gcc/' % board
+ if arch == 'amd64':
+ return '/build/%s/usr/lib64/gcc/' % board
+ if arch == 'arm':
+ return '/build/%s/usr/lib/gcc/' % board
+ if arch == 'arm64':
+ return '/build/%s/usr/lib/gcc/' % board
+ raise ValueError('Arch %s is invalid!' % arch)
+
+
+def StripANSIEscapeSequences(string):
+ string = re.sub(r'\x1b\[[0-9]*[a-zA-Z]', '', string)
+ return string
+
+
+def GetChromeSrcDir():
+ return 'var/cache/distfiles/target/chrome-src/src'
+
+
+def GetEnvStringFromDict(env_dict):
+ return ' '.join(["%s=\"%s\"" % var for var in env_dict.items()])
+
+
+def MergeEnvStringWithDict(env_string, env_dict, prepend=True):
+ """Merge env string with dict."""
+ if not env_string.strip():
+ return GetEnvStringFromDict(env_dict)
+ override_env_list = []
+ ce = command_executer.GetCommandExecuter()
+ for k, v in env_dict.items():
+ v = v.strip("\"'")
+ if prepend:
+ new_env = "%s=\"%s $%s\"" % (k, v, k)
+ else:
+ new_env = "%s=\"$%s %s\"" % (k, k, v)
+ command = '; '.join([env_string, new_env, 'echo $%s' % k])
+ ret, out, _ = ce.RunCommandWOutput(command)
+ override_env_list.append('%s=%r' % (k, out.strip()))
+ ret = env_string + ' ' + ' '.join(override_env_list)
+ return ret.strip()
+
+
+def GetAllImages(chromeos_root, board):
+ ce = command_executer.GetCommandExecuter()
+ command = ('find %s/src/build/images/%s -name chromiumos_test_image.bin' %
+ (chromeos_root, board))
+ ret, out, _ = ce.RunCommandWOutput(command)
+ assert ret == 0, 'Could not run command: %s' % command
+ return out.splitlines()
+
+
+def IsFloat(text):
+ if text is None:
+ return False
+ try:
+ float(text)
+ return True
+ except ValueError:
+ return False
+
+
+def RemoveChromeBrowserObjectFiles(chromeos_root, board):
+ """Remove any object files from all the posible locations."""
+ out_dir = os.path.join(
+ GetChrootPath(chromeos_root),
+ 'var/cache/chromeos-chrome/chrome-src/src/out_%s' % board)
+ if os.path.exists(out_dir):
+ shutil.rmtree(out_dir)
+ logger.GetLogger().LogCmd('rm -rf %s' % out_dir)
+ out_dir = os.path.join(
+ GetChrootPath(chromeos_root),
+ 'var/cache/chromeos-chrome/chrome-src-internal/src/out_%s' % board)
+ if os.path.exists(out_dir):
+ shutil.rmtree(out_dir)
+ logger.GetLogger().LogCmd('rm -rf %s' % out_dir)
+
+
+@contextmanager
+def WorkingDirectory(new_dir):
+ """Get the working directory."""
+ old_dir = os.getcwd()
+ if old_dir != new_dir:
+ msg = 'cd %s' % new_dir
+ logger.GetLogger().LogCmd(msg)
+ os.chdir(new_dir)
+ yield new_dir
+ if old_dir != new_dir:
+ msg = 'cd %s' % old_dir
+ logger.GetLogger().LogCmd(msg)
+ os.chdir(old_dir)
+
+
+def HasGitStagedChanges(git_dir):
+ """Return True if git repository has staged changes."""
+ command = 'cd {0} && git diff --quiet --cached --exit-code HEAD'.format(
+ git_dir)
+ return command_executer.GetCommandExecuter().RunCommand(
+ command,
+ print_to_console=False)
+
+
+def HasGitUnstagedChanges(git_dir):
+ """Return True if git repository has un-staged changes."""
+ command = 'cd {0} && git diff --quiet --exit-code HEAD'.format(git_dir)
+ return command_executer.GetCommandExecuter().RunCommand(
+ command,
+ print_to_console=False)
+
+
+def HasGitUntrackedChanges(git_dir):
+ """Return True if git repository has un-tracked changes."""
+ command = ('cd {0} && test -z '
+ '$(git ls-files --exclude-standard --others)').format(git_dir)
+ return command_executer.GetCommandExecuter().RunCommand(
+ command,
+ print_to_console=False)
+
+
+def GitGetCommitHash(git_dir, commit_symbolic_name):
+ """Return githash for the symbolic git commit.
+
+ For example, commit_symbolic_name could be
+ "cros/gcc.gnu.org/branches/gcc/gcc-4_8-mobile, this function returns the git
+ hash for this symbolic name.
+
+ Args:
+ git_dir: a git working tree.
+ commit_symbolic_name: a symbolic name for a particular git commit.
+
+ Returns:
+ The git hash for the symbolic name or None if fails.
+ """
+
+ command = ('cd {0} && git log -n 1 --pretty="format:%H" {1}').format(
+ git_dir, commit_symbolic_name)
+ rv, out, _ = command_executer.GetCommandExecuter().RunCommandWOutput(
+ command,
+ print_to_console=False)
+ if rv == 0:
+ return out.strip()
+ return None
+
+
+def IsGitTreeClean(git_dir):
+ """Test if git tree has no local changes.
+
+ Args:
+ git_dir: git tree directory.
+
+ Returns:
+ True if git dir is clean.
+ """
+ if HasGitStagedChanges(git_dir):
+ logger.GetLogger().LogWarning('Git tree has staged changes.')
+ return False
+ if HasGitUnstagedChanges(git_dir):
+ logger.GetLogger().LogWarning('Git tree has unstaged changes.')
+ return False
+ if HasGitUntrackedChanges(git_dir):
+ logger.GetLogger().LogWarning('Git tree has un-tracked changes.')
+ return False
+ return True
+
+
+def GetGitChangesAsList(git_dir, path=None, staged=False):
+ """Get changed files as a list.
+
+ Args:
+ git_dir: git tree directory.
+ path: a relative path that is part of the tree directory, could be null.
+ staged: whether to include staged files as well.
+
+ Returns:
+ A list containing all the changed files.
+ """
+ command = 'cd {0} && git diff --name-only'.format(git_dir)
+ if staged:
+ command += ' --cached'
+ if path:
+ command += ' -- ' + path
+ _, out, _ = command_executer.GetCommandExecuter().RunCommandWOutput(
+ command,
+ print_to_console=False)
+ rv = []
+ for line in out.splitlines():
+ rv.append(line)
+ return rv
+
+
+def IsChromeOsTree(chromeos_root):
+ return (os.path.isdir(os.path.join(chromeos_root,
+ 'src/third_party/chromiumos-overlay')) and
+ os.path.isdir(os.path.join(chromeos_root, 'manifest')))
+
+
+def DeleteChromeOsTree(chromeos_root, dry_run=False):
+ """Delete a ChromeOs tree *safely*.
+
+ Args:
+ chromeos_root: dir of the tree, could be a relative one (but be careful)
+ dry_run: only prints out the command if True
+
+ Returns:
+ True if everything is ok.
+ """
+ if not IsChromeOsTree(chromeos_root):
+ logger.GetLogger().LogWarning(
+ '"{0}" does not seem to be a valid chromeos tree, do nothing.'.format(
+ chromeos_root))
+ return False
+ cmd0 = 'cd {0} && cros_sdk --delete'.format(chromeos_root)
+ if dry_run:
+ print(cmd0)
+ else:
+ if command_executer.GetCommandExecuter().RunCommand(
+ cmd0,
+ print_to_console=True) != 0:
+ return False
+
+ cmd1 = ('export CHROMEOSDIRNAME="$(dirname $(cd {0} && pwd))" && '
+ 'export CHROMEOSBASENAME="$(basename $(cd {0} && pwd))" && '
+ 'cd $CHROMEOSDIRNAME && sudo rm -fr $CHROMEOSBASENAME').format(
+ chromeos_root)
+ if dry_run:
+ print(cmd1)
+ return True
+
+ return command_executer.GetCommandExecuter().RunCommand(
+ cmd1,
+ print_to_console=True) == 0
+
+
+def ApplyGerritPatches(chromeos_root,
+ gerrit_patch_string,
+ branch='cros/master'):
+ """Apply gerrit patches on a chromeos tree.
+
+ Args:
+ chromeos_root: chromeos tree path
+ gerrit_patch_string: a patch string just like the one gives to cbuildbot,
+ 'id1 id2 *id3 ... idn'. A prefix of '* means this is an internal patch.
+ branch: the tree based on which to apply the patches.
+
+ Returns:
+ True if success.
+ """
+
+ ### First of all, we need chromite libs
+ sys.path.append(os.path.join(chromeos_root, 'chromite'))
+ # Imports below are ok after modifying path to add chromite.
+ # Pylint cannot detect that and complains.
+ # pylint: disable=import-error
+ from lib import git
+ from lib import gerrit
+ manifest = git.ManifestCheckout(chromeos_root)
+ patch_list = gerrit_patch_string.split(' ')
+ ### This takes time, print log information.
+ logger.GetLogger().LogOutput('Retrieving patch information from server ...')
+ patch_info_list = gerrit.GetGerritPatchInfo(patch_list)
+ for pi in patch_info_list:
+ project_checkout = manifest.FindCheckout(pi.project, strict=False)
+ if not project_checkout:
+ logger.GetLogger().LogError(
+ 'Failed to find patch project "{project}" in manifest.'.format(
+ project=pi.project))
+ return False
+
+ pi_str = '{project}:{ref}'.format(project=pi.project, ref=pi.ref)
+ try:
+ project_git_path = project_checkout.GetPath(absolute=True)
+ logger.GetLogger().LogOutput('Applying patch "{0}" in "{1}" ...'.format(
+ pi_str, project_git_path))
+ pi.Apply(project_git_path, branch, trivial=False)
+ except Exception:
+ traceback.print_exc(file=sys.stdout)
+ logger.GetLogger().LogError('Failed to apply patch "{0}"'.format(pi_str))
+ return False
+ return True
+
+
+def BooleanPrompt(prompt='Do you want to continue?',
+ default=True,
+ true_value='yes',
+ false_value='no',
+ prolog=None):
+ """Helper function for processing boolean choice prompts.
+
+ Args:
+ prompt: The question to present to the user.
+ default: Boolean to return if the user just presses enter.
+ true_value: The text to display that represents a True returned.
+ false_value: The text to display that represents a False returned.
+ prolog: The text to display before prompt.
+
+ Returns:
+ True or False.
+ """
+ true_value, false_value = true_value.lower(), false_value.lower()
+ true_text, false_text = true_value, false_value
+ if true_value == false_value:
+ raise ValueError('true_value and false_value must differ: got %r' %
+ true_value)
+
+ if default:
+ true_text = true_text[0].upper() + true_text[1:]
+ else:
+ false_text = false_text[0].upper() + false_text[1:]
+
+ prompt = ('\n%s (%s/%s)? ' % (prompt, true_text, false_text))
+
+ if prolog:
+ prompt = ('\n%s\n%s' % (prolog, prompt))
+
+ while True:
+ try:
+ response = raw_input(prompt).lower()
+ except EOFError:
+ # If the user hits CTRL+D, or stdin is disabled, use the default.
+ print()
+ response = None
+ except KeyboardInterrupt:
+ # If the user hits CTRL+C, just exit the process.
+ print()
+ print('CTRL+C detected; exiting')
+ sys.exit()
+
+ if not response:
+ return default
+ if true_value.startswith(response):
+ if not false_value.startswith(response):
+ return True
+ # common prefix between the two...
+ elif false_value.startswith(response):
+ return False
+
+def rgb2short(r, g, b):
+ """ Converts RGB values to xterm-256 color. """
+
+ redcolor = [255, 124, 160, 196, 9 ]
+ greencolor = [255, 118, 82, 46, 10 ]
+
+ if g == 0:
+ return redcolor[r/52]
+ if r == 0:
+ return greencolor[g/52]
+ return 4
diff --git a/cros_utils/misc_test.py b/cros_utils/misc_test.py
new file mode 100644
index 00000000..80082207
--- /dev/null
+++ b/cros_utils/misc_test.py
@@ -0,0 +1,51 @@
+# Copyright 2012 Google Inc. All Rights Reserved.
+"""Tests for misc."""
+
+from __future__ import print_function
+
+__author__ = 'asharif@google.com (Ahmad Sharif)'
+
+# System modules
+import unittest
+
+# Local modules
+import misc
+
+
+class UtilsTest(unittest.TestCase):
+ """Tests for misc."""
+
+ def testGetFilenameFromString(self):
+ string = 'a /b=c"d^$?\\'
+ filename = misc.GetFilenameFromString(string)
+ self.assertEqual(filename, 'a___bcd')
+
+ def testPrependMergeEnv(self):
+ var = 'USE'
+ use_flags = 'hello 123'
+ added_use_flags = 'bla bla'
+ env_string = '%s=%r' % (var, use_flags)
+ new_env_string = misc.MergeEnvStringWithDict(env_string,
+ {var: added_use_flags})
+ expected_new_env = '%s=%r' % (var, ' '.join([added_use_flags, use_flags]))
+ self.assertEqual(new_env_string, ' '.join([env_string, expected_new_env]))
+
+ def testGetChromeOSVersionFromLSBVersion(self):
+ versions_dict = {'2630.0.0': '22', '2030.0.0': '19'}
+ f = misc.GetChromeOSVersionFromLSBVersion
+ for k, v in versions_dict.items():
+ self.assertEqual(f(k), 'R%s-%s' % (v, k))
+
+ def testPostpendMergeEnv(self):
+ var = 'USE'
+ use_flags = 'hello 123'
+ added_use_flags = 'bla bla'
+ env_string = '%s=%r' % (var, use_flags)
+ new_env_string = misc.MergeEnvStringWithDict(env_string,
+ {var: added_use_flags}, False)
+ expected_new_env = '%s=%r' % (var, ' '.join([use_flags, added_use_flags]))
+ self.assertEqual(new_env_string, ' '.join([env_string, expected_new_env]))
+
+
+if __name__ == '__main__':
+ unittest.main()
diff --git a/cros_utils/no_pseudo_terminal_test.py b/cros_utils/no_pseudo_terminal_test.py
new file mode 100644
index 00000000..43eabb13
--- /dev/null
+++ b/cros_utils/no_pseudo_terminal_test.py
@@ -0,0 +1,53 @@
+"""Test to ensure we're not touching /dev/ptmx when running commands."""
+
+from __future__ import print_function
+
+import os
+import subprocess
+import tempfile
+import time
+import unittest
+from cros_utils import command_executer
+
+
+class NoPsuedoTerminalTest(unittest.TestCase):
+ """Test to ensure we're not touching /dev/ptmx when running commands."""
+
+ _strace_process = None
+ STRACE_TIMEOUT = 10
+
+ def _AttachStraceToSelf(self, output_file):
+ """Attaches strace to the current process."""
+ args = ['strace', '-o', output_file, '-p', str(os.getpid())]
+ print(args)
+ self._strace_process = subprocess.Popen(args)
+ # Wait until we see some activity.
+ start_time = time.time()
+ while time.time() - start_time < self.STRACE_TIMEOUT:
+ if os.path.isfile(output_file) and open(output_file).read(1):
+ return True
+ time.sleep(1)
+ return False
+
+ def _KillStraceProcess(self):
+ """Kills strace that was started by _AttachStraceToSelf()."""
+ self._strace_process.terminate()
+ self._strace_process.wait()
+ return True
+
+ def testNoPseudoTerminalWhenRunningCommand(self):
+ """Test to make sure we're not touching /dev/ptmx when running commands."""
+ temp_file = tempfile.mktemp()
+ self.assertTrue(self._AttachStraceToSelf(temp_file))
+
+ ce = command_executer.GetCommandExecuter()
+ ce.RunCommand('echo')
+
+ self.assertTrue(self._KillStraceProcess())
+
+ strace_contents = open(temp_file).read()
+ self.assertFalse('/dev/ptmx' in strace_contents)
+
+
+if __name__ == '__main__':
+ unittest.main()
diff --git a/cros_utils/perf_diff.py b/cros_utils/perf_diff.py
new file mode 100755
index 00000000..31cde994
--- /dev/null
+++ b/cros_utils/perf_diff.py
@@ -0,0 +1,332 @@
+#!/usr/bin/env python2
+# Copyright 2012 Google Inc. All Rights Reserved.
+"""One-line documentation for perf_diff module.
+
+A detailed description of perf_diff.
+"""
+
+from __future__ import print_function
+
+__author__ = 'asharif@google.com (Ahmad Sharif)'
+
+import argparse
+import re
+import sys
+
+import misc
+import tabulator
+
+ROWS_TO_SHOW = 'Rows_to_show_in_the_perf_table'
+TOTAL_EVENTS = 'Total_events_of_this_profile'
+
+
+def GetPerfDictFromReport(report_file):
+ output = {}
+ perf_report = PerfReport(report_file)
+ for k, v in perf_report.sections.items():
+ if k not in output:
+ output[k] = {}
+ output[k][ROWS_TO_SHOW] = 0
+ output[k][TOTAL_EVENTS] = 0
+ for function in v.functions:
+ out_key = '%s' % (function.name)
+ output[k][out_key] = function.count
+ output[k][TOTAL_EVENTS] += function.count
+ if function.percent > 1:
+ output[k][ROWS_TO_SHOW] += 1
+ return output
+
+
+def _SortDictionaryByValue(d):
+ l = [(k, v) for (k, v) in d.iteritems()]
+
+ def GetFloat(x):
+ if misc.IsFloat(x):
+ return float(x)
+ else:
+ return x
+
+ sorted_l = sorted(l, key=lambda x: GetFloat(x[1]))
+ sorted_l.reverse()
+ return [f[0] for f in sorted_l]
+
+
+class Tabulator(object):
+ """Make tables."""
+
+ def __init__(self, all_dicts):
+ self._all_dicts = all_dicts
+
+ def PrintTable(self):
+ for dicts in self._all_dicts:
+ self.PrintTableHelper(dicts)
+
+ def PrintTableHelper(self, dicts):
+ """Transfrom dicts to tables."""
+ fields = {}
+ for d in dicts:
+ for f in d.keys():
+ if f not in fields:
+ fields[f] = d[f]
+ else:
+ fields[f] = max(fields[f], d[f])
+ table = []
+ header = ['name']
+ for i in range(len(dicts)):
+ header.append(i)
+
+ table.append(header)
+
+ sorted_fields = _SortDictionaryByValue(fields)
+
+ for f in sorted_fields:
+ row = [f]
+ for d in dicts:
+ if f in d:
+ row.append(d[f])
+ else:
+ row.append('0')
+ table.append(row)
+
+ print(tabulator.GetSimpleTable(table))
+
+
+class Function(object):
+ """Function for formatting."""
+
+ def __init__(self):
+ self.count = 0
+ self.name = ''
+ self.percent = 0
+
+
+class Section(object):
+ """Section formatting."""
+
+ def __init__(self, contents):
+ self.name = ''
+ self.raw_contents = contents
+ self._ParseSection()
+
+ def _ParseSection(self):
+ matches = re.findall(r'Events: (\w+)\s+(.*)', self.raw_contents)
+ assert len(matches) <= 1, 'More than one event found in 1 section'
+ if not matches:
+ return
+ match = matches[0]
+ self.name = match[1]
+ self.count = misc.UnitToNumber(match[0])
+
+ self.functions = []
+ for line in self.raw_contents.splitlines():
+ if not line.strip():
+ continue
+ if '%' not in line:
+ continue
+ if not line.startswith('#'):
+ fields = [f for f in line.split(' ') if f]
+ function = Function()
+ function.percent = float(fields[0].strip('%'))
+ function.count = int(fields[1])
+ function.name = ' '.join(fields[2:])
+ self.functions.append(function)
+
+
+class PerfReport(object):
+ """Get report from raw report."""
+
+ def __init__(self, perf_file):
+ self.perf_file = perf_file
+ self._ReadFile()
+ self.sections = {}
+ self.metadata = {}
+ self._section_contents = []
+ self._section_header = ''
+ self._SplitSections()
+ self._ParseSections()
+ self._ParseSectionHeader()
+
+ def _ParseSectionHeader(self):
+ """Parse a header of a perf report file."""
+ # The "captured on" field is inaccurate - this actually refers to when the
+ # report was generated, not when the data was captured.
+ for line in self._section_header.splitlines():
+ line = line[2:]
+ if ':' in line:
+ key, val = line.strip().split(':', 1)
+ key = key.strip()
+ val = val.strip()
+ self.metadata[key] = val
+
+ def _ReadFile(self):
+ self._perf_contents = open(self.perf_file).read()
+
+ def _ParseSections(self):
+ self.event_counts = {}
+ self.sections = {}
+ for section_content in self._section_contents:
+ section = Section(section_content)
+ section.name = self._GetHumanReadableName(section.name)
+ self.sections[section.name] = section
+
+ # TODO(asharif): Do this better.
+ def _GetHumanReadableName(self, section_name):
+ if not 'raw' in section_name:
+ return section_name
+ raw_number = section_name.strip().split(' ')[-1]
+ for line in self._section_header.splitlines():
+ if raw_number in line:
+ name = line.strip().split(' ')[5]
+ return name
+
+ def _SplitSections(self):
+ self._section_contents = []
+ indices = [m.start() for m in re.finditer('# Events:', self._perf_contents)]
+ indices.append(len(self._perf_contents))
+ for i in range(len(indices) - 1):
+ section_content = self._perf_contents[indices[i]:indices[i + 1]]
+ self._section_contents.append(section_content)
+ self._section_header = ''
+ if indices:
+ self._section_header = self._perf_contents[0:indices[0]]
+
+
+class PerfDiffer(object):
+ """Perf differ class."""
+
+ def __init__(self, reports, num_symbols, common_only):
+ self._reports = reports
+ self._num_symbols = num_symbols
+ self._common_only = common_only
+ self._common_function_names = {}
+
+ def DoDiff(self):
+ """The function that does the diff."""
+ section_names = self._FindAllSections()
+
+ filename_dicts = []
+ summary_dicts = []
+ for report in self._reports:
+ d = {}
+ filename_dicts.append({'file': report.perf_file})
+ for section_name in section_names:
+ if section_name in report.sections:
+ d[section_name] = report.sections[section_name].count
+ summary_dicts.append(d)
+
+ all_dicts = [filename_dicts, summary_dicts]
+
+ for section_name in section_names:
+ function_names = self._GetTopFunctions(section_name, self._num_symbols)
+ self._FindCommonFunctions(section_name)
+ dicts = []
+ for report in self._reports:
+ d = {}
+ if section_name in report.sections:
+ section = report.sections[section_name]
+
+ # Get a common scaling factor for this report.
+ common_scaling_factor = self._GetCommonScalingFactor(section)
+
+ for function in section.functions:
+ if function.name in function_names:
+ key = '%s %s' % (section.name, function.name)
+ d[key] = function.count
+ # Compute a factor to scale the function count by in common_only
+ # mode.
+ if self._common_only and (
+ function.name in self._common_function_names[section.name]):
+ d[key + ' scaled'] = common_scaling_factor * function.count
+ dicts.append(d)
+
+ all_dicts.append(dicts)
+
+ mytabulator = Tabulator(all_dicts)
+ mytabulator.PrintTable()
+
+ def _FindAllSections(self):
+ sections = {}
+ for report in self._reports:
+ for section in report.sections.values():
+ if section.name not in sections:
+ sections[section.name] = section.count
+ else:
+ sections[section.name] = max(sections[section.name], section.count)
+ return _SortDictionaryByValue(sections)
+
+ def _GetCommonScalingFactor(self, section):
+ unique_count = self._GetCount(
+ section, lambda x: x in self._common_function_names[section.name])
+ return 100.0 / unique_count
+
+ def _GetCount(self, section, filter_fun=None):
+ total_count = 0
+ for function in section.functions:
+ if not filter_fun or filter_fun(function.name):
+ total_count += int(function.count)
+ return total_count
+
+ def _FindCommonFunctions(self, section_name):
+ function_names_list = []
+ for report in self._reports:
+ if section_name in report.sections:
+ section = report.sections[section_name]
+ function_names = [f.name for f in section.functions]
+ function_names_list.append(function_names)
+
+ self._common_function_names[section_name] = (
+ reduce(set.intersection, map(set, function_names_list)))
+
+ def _GetTopFunctions(self, section_name, num_functions):
+ all_functions = {}
+ for report in self._reports:
+ if section_name in report.sections:
+ section = report.sections[section_name]
+ for f in section.functions[:num_functions]:
+ if f.name in all_functions:
+ all_functions[f.name] = max(all_functions[f.name], f.count)
+ else:
+ all_functions[f.name] = f.count
+ # FIXME(asharif): Don't really need to sort these...
+ return _SortDictionaryByValue(all_functions)
+
+ def _GetFunctionsDict(self, section, function_names):
+ d = {}
+ for function in section.functions:
+ if function.name in function_names:
+ d[function.name] = function.count
+ return d
+
+
+def Main(argv):
+ """The entry of the main."""
+ parser = argparse.ArgumentParser()
+ parser.add_argument('-n',
+ '--num_symbols',
+ dest='num_symbols',
+ default='5',
+ help='The number of symbols to show.')
+ parser.add_argument('-c',
+ '--common_only',
+ dest='common_only',
+ action='store_true',
+ default=False,
+ help='Diff common symbols only.')
+
+ options, args = parser.parse_known_args(argv)
+
+ try:
+ reports = []
+ for report in args[1:]:
+ report = PerfReport(report)
+ reports.append(report)
+ pd = PerfDiffer(reports, int(options.num_symbols), options.common_only)
+ pd.DoDiff()
+ finally:
+ pass
+
+ return 0
+
+
+if __name__ == '__main__':
+ sys.exit(Main(sys.argv))
diff --git a/cros_utils/pstat.py b/cros_utils/pstat.py
new file mode 100644
index 00000000..602fc0c7
--- /dev/null
+++ b/cros_utils/pstat.py
@@ -0,0 +1,1077 @@
+# We did not author this file nor mantain it. Skip linting it.
+#pylint: skip-file
+# Copyright (c) 1999-2007 Gary Strangman; All Rights Reserved.
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+#
+# Comments and/or additions are welcome (send e-mail to:
+# strang@nmr.mgh.harvard.edu).
+#
+"""pstat.py module
+
+#################################################
+####### Written by: Gary Strangman ###########
+####### Last modified: Dec 18, 2007 ###########
+#################################################
+
+This module provides some useful list and array manipulation routines
+modeled after those found in the |Stat package by Gary Perlman, plus a
+number of other useful list/file manipulation functions. The list-based
+functions include:
+
+ abut (source,*args)
+ simpleabut (source, addon)
+ colex (listoflists,cnums)
+ collapse (listoflists,keepcols,collapsecols,fcn1=None,fcn2=None,cfcn=None)
+ dm (listoflists,criterion)
+ flat (l)
+ linexand (listoflists,columnlist,valuelist)
+ linexor (listoflists,columnlist,valuelist)
+ linedelimited (inlist,delimiter)
+ lineincols (inlist,colsize)
+ lineincustcols (inlist,colsizes)
+ list2string (inlist)
+ makelol(inlist)
+ makestr(x)
+ printcc (lst,extra=2)
+ printincols (listoflists,colsize)
+ pl (listoflists)
+ printl(listoflists)
+ replace (lst,oldval,newval)
+ recode (inlist,listmap,cols='all')
+ remap (listoflists,criterion)
+ roundlist (inlist,num_digits_to_round_floats_to)
+ sortby(listoflists,sortcols)
+ unique (inlist)
+ duplicates(inlist)
+ writedelimited (listoflists, delimiter, file, writetype='w')
+
+Some of these functions have alternate versions which are defined only if
+Numeric (NumPy) can be imported. These functions are generally named as
+above, with an 'a' prefix.
+
+ aabut (source, *args)
+ acolex (a,indices,axis=1)
+ acollapse (a,keepcols,collapsecols,sterr=0,ns=0)
+ adm (a,criterion)
+ alinexand (a,columnlist,valuelist)
+ alinexor (a,columnlist,valuelist)
+ areplace (a,oldval,newval)
+ arecode (a,listmap,col='all')
+ arowcompare (row1, row2)
+ arowsame (row1, row2)
+ asortrows(a,axis=0)
+ aunique(inarray)
+ aduplicates(inarray)
+
+Currently, the code is all but completely un-optimized. In many cases, the
+array versions of functions amount simply to aliases to built-in array
+functions/methods. Their inclusion here is for function name consistency.
+"""
+
+## CHANGE LOG:
+## ==========
+## 07-11-26 ... edited to work with numpy
+## 01-11-15 ... changed list2string() to accept a delimiter
+## 01-06-29 ... converted exec()'s to eval()'s to make compatible with Py2.1
+## 01-05-31 ... added duplicates() and aduplicates() functions
+## 00-12-28 ... license made GPL, docstring and import requirements
+## 99-11-01 ... changed version to 0.3
+## 99-08-30 ... removed get, getstrings, put, aget, aput (into io.py)
+## 03/27/99 ... added areplace function, made replace fcn recursive
+## 12/31/98 ... added writefc function for ouput to fixed column sizes
+## 12/07/98 ... fixed import problem (failed on collapse() fcn)
+## added __version__ variable (now 0.2)
+## 12/05/98 ... updated doc-strings
+## added features to collapse() function
+## added flat() function for lists
+## fixed a broken asortrows()
+## 11/16/98 ... fixed minor bug in aput for 1D arrays
+##
+## 11/08/98 ... fixed aput to output large arrays correctly
+
+import stats # required 3rd party module
+import string, copy
+from types import *
+
+__version__ = 0.4
+
+###=========================== LIST FUNCTIONS ==========================
+###
+### Here are the list functions, DEFINED FOR ALL SYSTEMS.
+### Array functions (for NumPy-enabled computers) appear below.
+###
+
+
+def abut(source, *args):
+ """
+Like the |Stat abut command. It concatenates two lists side-by-side
+and returns the result. '2D' lists are also accomodated for either argument
+(source or addon). CAUTION: If one list is shorter, it will be repeated
+until it is as long as the longest list. If this behavior is not desired,
+use pstat.simpleabut().
+
+Usage: abut(source, args) where args=any # of lists
+Returns: a list of lists as long as the LONGEST list past, source on the
+ 'left', lists in <args> attached consecutively on the 'right'
+"""
+
+ if type(source) not in [ListType, TupleType]:
+ source = [source]
+ for addon in args:
+ if type(addon) not in [ListType, TupleType]:
+ addon = [addon]
+ if len(addon) < len(source): # is source list longer?
+ if len(source) % len(addon) == 0: # are they integer multiples?
+ repeats = len(source) / len(addon) # repeat addon n times
+ origadd = copy.deepcopy(addon)
+ for i in range(repeats - 1):
+ addon = addon + origadd
+ else:
+ repeats = len(source) / len(addon) + 1 # repeat addon x times,
+ origadd = copy.deepcopy(addon) # x is NOT an integer
+ for i in range(repeats - 1):
+ addon = addon + origadd
+ addon = addon[0:len(source)]
+ elif len(source) < len(addon): # is addon list longer?
+ if len(addon) % len(source) == 0: # are they integer multiples?
+ repeats = len(addon) / len(source) # repeat source n times
+ origsour = copy.deepcopy(source)
+ for i in range(repeats - 1):
+ source = source + origsour
+ else:
+ repeats = len(addon) / len(source) + 1 # repeat source x times,
+ origsour = copy.deepcopy(source) # x is NOT an integer
+ for i in range(repeats - 1):
+ source = source + origsour
+ source = source[0:len(addon)]
+
+ source = simpleabut(source, addon)
+ return source
+
+
+def simpleabut(source, addon):
+ """
+Concatenates two lists as columns and returns the result. '2D' lists
+are also accomodated for either argument (source or addon). This DOES NOT
+repeat either list to make the 2 lists of equal length. Beware of list pairs
+with different lengths ... the resulting list will be the length of the
+FIRST list passed.
+
+Usage: simpleabut(source,addon) where source, addon=list (or list-of-lists)
+Returns: a list of lists as long as source, with source on the 'left' and
+ addon on the 'right'
+"""
+ if type(source) not in [ListType, TupleType]:
+ source = [source]
+ if type(addon) not in [ListType, TupleType]:
+ addon = [addon]
+ minlen = min(len(source), len(addon))
+ list = copy.deepcopy(source) # start abut process
+ if type(source[0]) not in [ListType, TupleType]:
+ if type(addon[0]) not in [ListType, TupleType]:
+ for i in range(minlen):
+ list[i] = [source[i]] + [addon[i]] # source/addon = column
+ else:
+ for i in range(minlen):
+ list[i] = [source[i]] + addon[i] # addon=list-of-lists
+ else:
+ if type(addon[0]) not in [ListType, TupleType]:
+ for i in range(minlen):
+ list[i] = source[i] + [addon[i]] # source=list-of-lists
+ else:
+ for i in range(minlen):
+ list[i] = source[i] + addon[i] # source/addon = list-of-lists
+ source = list
+ return source
+
+
+def colex(listoflists, cnums):
+ """
+Extracts from listoflists the columns specified in the list 'cnums'
+(cnums can be an integer, a sequence of integers, or a string-expression that
+corresponds to a slice operation on the variable x ... e.g., 'x[3:]' will colex
+columns 3 onward from the listoflists).
+
+Usage: colex (listoflists,cnums)
+Returns: a list-of-lists corresponding to the columns from listoflists
+ specified by cnums, in the order the column numbers appear in cnums
+"""
+ global index
+ column = 0
+ if type(cnums) in [ListType, TupleType]: # if multiple columns to get
+ index = cnums[0]
+ column = map(lambda x: x[index], listoflists)
+ for col in cnums[1:]:
+ index = col
+ column = abut(column, map(lambda x: x[index], listoflists))
+ elif type(cnums) == StringType: # if an 'x[3:]' type expr.
+ evalstring = 'map(lambda x: x' + cnums + ', listoflists)'
+ column = eval(evalstring)
+ else: # else it's just 1 col to get
+ index = cnums
+ column = map(lambda x: x[index], listoflists)
+ return column
+
+
+def collapse(listoflists,
+ keepcols,
+ collapsecols,
+ fcn1=None,
+ fcn2=None,
+ cfcn=None):
+ """
+Averages data in collapsecol, keeping all unique items in keepcols
+(using unique, which keeps unique LISTS of column numbers), retaining the
+unique sets of values in keepcols, the mean for each. Setting fcn1
+and/or fcn2 to point to a function rather than None (e.g., stats.sterr, len)
+will append those results (e.g., the sterr, N) after each calculated mean.
+cfcn is the collapse function to apply (defaults to mean, defined here in the
+pstat module to avoid circular imports with stats.py, but harmonicmean or
+others could be passed).
+
+Usage: collapse
+(listoflists,keepcols,collapsecols,fcn1=None,fcn2=None,cfcn=None)
+Returns: a list of lists with all unique permutations of entries appearing in
+ columns ("conditions") specified by keepcols, abutted with the result of
+ cfcn (if cfcn=None, defaults to the mean) of each column specified by
+ collapsecols.
+"""
+
+ def collmean(inlist):
+ s = 0
+ for item in inlist:
+ s = s + item
+ return s / float(len(inlist))
+
+ if type(keepcols) not in [ListType, TupleType]:
+ keepcols = [keepcols]
+ if type(collapsecols) not in [ListType, TupleType]:
+ collapsecols = [collapsecols]
+ if cfcn == None:
+ cfcn = collmean
+ if keepcols == []:
+ means = [0] * len(collapsecols)
+ for i in range(len(collapsecols)):
+ avgcol = colex(listoflists, collapsecols[i])
+ means[i] = cfcn(avgcol)
+ if fcn1:
+ try:
+ test = fcn1(avgcol)
+ except:
+ test = 'N/A'
+ means[i] = [means[i], test]
+ if fcn2:
+ try:
+ test = fcn2(avgcol)
+ except:
+ test = 'N/A'
+ try:
+ means[i] = means[i] + [len(avgcol)]
+ except TypeError:
+ means[i] = [means[i], len(avgcol)]
+ return means
+ else:
+ values = colex(listoflists, keepcols)
+ uniques = unique(values)
+ uniques.sort()
+ newlist = []
+ if type(keepcols) not in [ListType, TupleType]:
+ keepcols = [keepcols]
+ for item in uniques:
+ if type(item) not in [ListType, TupleType]:
+ item = [item]
+ tmprows = linexand(listoflists, keepcols, item)
+ for col in collapsecols:
+ avgcol = colex(tmprows, col)
+ item.append(cfcn(avgcol))
+ if fcn1 <> None:
+ try:
+ test = fcn1(avgcol)
+ except:
+ test = 'N/A'
+ item.append(test)
+ if fcn2 <> None:
+ try:
+ test = fcn2(avgcol)
+ except:
+ test = 'N/A'
+ item.append(test)
+ newlist.append(item)
+ return newlist
+
+
+def dm(listoflists, criterion):
+ """
+Returns rows from the passed list of lists that meet the criteria in
+the passed criterion expression (a string as a function of x; e.g., 'x[3]>=9'
+will return all rows where the 4th column>=9 and "x[2]=='N'" will return rows
+with column 2 equal to the string 'N').
+
+Usage: dm (listoflists, criterion)
+Returns: rows from listoflists that meet the specified criterion.
+"""
+ function = 'filter(lambda x: ' + criterion + ',listoflists)'
+ lines = eval(function)
+ return lines
+
+
+def flat(l):
+ """
+Returns the flattened version of a '2D' list. List-correlate to the a.ravel()()
+method of NumPy arrays.
+
+Usage: flat(l)
+"""
+ newl = []
+ for i in range(len(l)):
+ for j in range(len(l[i])):
+ newl.append(l[i][j])
+ return newl
+
+
+def linexand(listoflists, columnlist, valuelist):
+ """
+Returns the rows of a list of lists where col (from columnlist) = val
+(from valuelist) for EVERY pair of values (columnlist[i],valuelists[i]).
+len(columnlist) must equal len(valuelist).
+
+Usage: linexand (listoflists,columnlist,valuelist)
+Returns: the rows of listoflists where columnlist[i]=valuelist[i] for ALL i
+"""
+ if type(columnlist) not in [ListType, TupleType]:
+ columnlist = [columnlist]
+ if type(valuelist) not in [ListType, TupleType]:
+ valuelist = [valuelist]
+ criterion = ''
+ for i in range(len(columnlist)):
+ if type(valuelist[i]) == StringType:
+ critval = '\'' + valuelist[i] + '\''
+ else:
+ critval = str(valuelist[i])
+ criterion = criterion + ' x[' + str(columnlist[
+ i]) + ']==' + critval + ' and'
+ criterion = criterion[0:-3] # remove the "and" after the last crit
+ function = 'filter(lambda x: ' + criterion + ',listoflists)'
+ lines = eval(function)
+ return lines
+
+
+def linexor(listoflists, columnlist, valuelist):
+ """
+Returns the rows of a list of lists where col (from columnlist) = val
+(from valuelist) for ANY pair of values (colunmlist[i],valuelist[i[).
+One value is required for each column in columnlist. If only one value
+exists for columnlist but multiple values appear in valuelist, the
+valuelist values are all assumed to pertain to the same column.
+
+Usage: linexor (listoflists,columnlist,valuelist)
+Returns: the rows of listoflists where columnlist[i]=valuelist[i] for ANY i
+"""
+ if type(columnlist) not in [ListType, TupleType]:
+ columnlist = [columnlist]
+ if type(valuelist) not in [ListType, TupleType]:
+ valuelist = [valuelist]
+ criterion = ''
+ if len(columnlist) == 1 and len(valuelist) > 1:
+ columnlist = columnlist * len(valuelist)
+ for i in range(len(columnlist)): # build an exec string
+ if type(valuelist[i]) == StringType:
+ critval = '\'' + valuelist[i] + '\''
+ else:
+ critval = str(valuelist[i])
+ criterion = criterion + ' x[' + str(columnlist[i]) + ']==' + critval + ' or'
+ criterion = criterion[0:-2] # remove the "or" after the last crit
+ function = 'filter(lambda x: ' + criterion + ',listoflists)'
+ lines = eval(function)
+ return lines
+
+
+def linedelimited(inlist, delimiter):
+ """
+Returns a string composed of elements in inlist, with each element
+separated by 'delimiter.' Used by function writedelimited. Use '\t'
+for tab-delimiting.
+
+Usage: linedelimited (inlist,delimiter)
+"""
+ outstr = ''
+ for item in inlist:
+ if type(item) <> StringType:
+ item = str(item)
+ outstr = outstr + item + delimiter
+ outstr = outstr[0:-1]
+ return outstr
+
+
+def lineincols(inlist, colsize):
+ """
+Returns a string composed of elements in inlist, with each element
+right-aligned in columns of (fixed) colsize.
+
+Usage: lineincols (inlist,colsize) where colsize is an integer
+"""
+ outstr = ''
+ for item in inlist:
+ if type(item) <> StringType:
+ item = str(item)
+ size = len(item)
+ if size <= colsize:
+ for i in range(colsize - size):
+ outstr = outstr + ' '
+ outstr = outstr + item
+ else:
+ outstr = outstr + item[0:colsize + 1]
+ return outstr
+
+
+def lineincustcols(inlist, colsizes):
+ """
+Returns a string composed of elements in inlist, with each element
+right-aligned in a column of width specified by a sequence colsizes. The
+length of colsizes must be greater than or equal to the number of columns
+in inlist.
+
+Usage: lineincustcols (inlist,colsizes)
+Returns: formatted string created from inlist
+"""
+ outstr = ''
+ for i in range(len(inlist)):
+ if type(inlist[i]) <> StringType:
+ item = str(inlist[i])
+ else:
+ item = inlist[i]
+ size = len(item)
+ if size <= colsizes[i]:
+ for j in range(colsizes[i] - size):
+ outstr = outstr + ' '
+ outstr = outstr + item
+ else:
+ outstr = outstr + item[0:colsizes[i] + 1]
+ return outstr
+
+
+def list2string(inlist, delimit=' '):
+ """
+Converts a 1D list to a single long string for file output, using
+the string.join function.
+
+Usage: list2string (inlist,delimit=' ')
+Returns: the string created from inlist
+"""
+ stringlist = map(makestr, inlist)
+ return string.join(stringlist, delimit)
+
+
+def makelol(inlist):
+ """
+Converts a 1D list to a 2D list (i.e., a list-of-lists). Useful when you
+want to use put() to write a 1D list one item per line in the file.
+
+Usage: makelol(inlist)
+Returns: if l = [1,2,'hi'] then returns [[1],[2],['hi']] etc.
+"""
+ x = []
+ for item in inlist:
+ x.append([item])
+ return x
+
+
+def makestr(x):
+ if type(x) <> StringType:
+ x = str(x)
+ return x
+
+
+def printcc(lst, extra=2):
+ """
+Prints a list of lists in columns, customized by the max size of items
+within the columns (max size of items in col, plus 'extra' number of spaces).
+Use 'dashes' or '\\n' in the list-of-lists to print dashes or blank lines,
+respectively.
+
+Usage: printcc (lst,extra=2)
+Returns: None
+"""
+ if type(lst[0]) not in [ListType, TupleType]:
+ lst = [lst]
+ rowstokill = []
+ list2print = copy.deepcopy(lst)
+ for i in range(len(lst)):
+ if lst[i] == [
+ '\n'
+ ] or lst[i] == '\n' or lst[i] == 'dashes' or lst[i] == '' or lst[i] == ['']:
+ rowstokill = rowstokill + [i]
+ rowstokill.reverse() # delete blank rows from the end
+ for row in rowstokill:
+ del list2print[row]
+ maxsize = [0] * len(list2print[0])
+ for col in range(len(list2print[0])):
+ items = colex(list2print, col)
+ items = map(makestr, items)
+ maxsize[col] = max(map(len, items)) + extra
+ for row in lst:
+ if row == ['\n'] or row == '\n' or row == '' or row == ['']:
+ print
+ elif row == ['dashes'] or row == 'dashes':
+ dashes = [0] * len(maxsize)
+ for j in range(len(maxsize)):
+ dashes[j] = '-' * (maxsize[j] - 2)
+ print lineincustcols(dashes, maxsize)
+ else:
+ print lineincustcols(row, maxsize)
+ return None
+
+
+def printincols(listoflists, colsize):
+ """
+Prints a list of lists in columns of (fixed) colsize width, where
+colsize is an integer.
+
+Usage: printincols (listoflists,colsize)
+Returns: None
+"""
+ for row in listoflists:
+ print lineincols(row, colsize)
+ return None
+
+
+def pl(listoflists):
+ """
+Prints a list of lists, 1 list (row) at a time.
+
+Usage: pl(listoflists)
+Returns: None
+"""
+ for row in listoflists:
+ if row[-1] == '\n':
+ print row,
+ else:
+ print row
+ return None
+
+
+def printl(listoflists):
+ """Alias for pl."""
+ pl(listoflists)
+ return
+
+
+def replace(inlst, oldval, newval):
+ """
+Replaces all occurrences of 'oldval' with 'newval', recursively.
+
+Usage: replace (inlst,oldval,newval)
+"""
+ lst = inlst * 1
+ for i in range(len(lst)):
+ if type(lst[i]) not in [ListType, TupleType]:
+ if lst[i] == oldval:
+ lst[i] = newval
+ else:
+ lst[i] = replace(lst[i], oldval, newval)
+ return lst
+
+
+def recode(inlist, listmap, cols=None):
+ """
+Changes the values in a list to a new set of values (useful when
+you need to recode data from (e.g.) strings to numbers. cols defaults
+to None (meaning all columns are recoded).
+
+Usage: recode (inlist,listmap,cols=None) cols=recode cols, listmap=2D list
+Returns: inlist with the appropriate values replaced with new ones
+"""
+ lst = copy.deepcopy(inlist)
+ if cols != None:
+ if type(cols) not in [ListType, TupleType]:
+ cols = [cols]
+ for col in cols:
+ for row in range(len(lst)):
+ try:
+ idx = colex(listmap, 0).index(lst[row][col])
+ lst[row][col] = listmap[idx][1]
+ except ValueError:
+ pass
+ else:
+ for row in range(len(lst)):
+ for col in range(len(lst)):
+ try:
+ idx = colex(listmap, 0).index(lst[row][col])
+ lst[row][col] = listmap[idx][1]
+ except ValueError:
+ pass
+ return lst
+
+
+def remap(listoflists, criterion):
+ """
+Remaps values in a given column of a 2D list (listoflists). This requires
+a criterion as a function of 'x' so that the result of the following is
+returned ... map(lambda x: 'criterion',listoflists).
+
+Usage: remap(listoflists,criterion) criterion=string
+Returns: remapped version of listoflists
+"""
+ function = 'map(lambda x: ' + criterion + ',listoflists)'
+ lines = eval(function)
+ return lines
+
+
+def roundlist(inlist, digits):
+ """
+Goes through each element in a 1D or 2D inlist, and applies the following
+function to all elements of FloatType ... round(element,digits).
+
+Usage: roundlist(inlist,digits)
+Returns: list with rounded floats
+"""
+ if type(inlist[0]) in [IntType, FloatType]:
+ inlist = [inlist]
+ l = inlist * 1
+ for i in range(len(l)):
+ for j in range(len(l[i])):
+ if type(l[i][j]) == FloatType:
+ l[i][j] = round(l[i][j], digits)
+ return l
+
+
+def sortby(listoflists, sortcols):
+ """
+Sorts a list of lists on the column(s) specified in the sequence
+sortcols.
+
+Usage: sortby(listoflists,sortcols)
+Returns: sorted list, unchanged column ordering
+"""
+ newlist = abut(colex(listoflists, sortcols), listoflists)
+ newlist.sort()
+ try:
+ numcols = len(sortcols)
+ except TypeError:
+ numcols = 1
+ crit = '[' + str(numcols) + ':]'
+ newlist = colex(newlist, crit)
+ return newlist
+
+
+def unique(inlist):
+ """
+Returns all unique items in the passed list. If the a list-of-lists
+is passed, unique LISTS are found (i.e., items in the first dimension are
+compared).
+
+Usage: unique (inlist)
+Returns: the unique elements (or rows) in inlist
+"""
+ uniques = []
+ for item in inlist:
+ if item not in uniques:
+ uniques.append(item)
+ return uniques
+
+
+def duplicates(inlist):
+ """
+Returns duplicate items in the FIRST dimension of the passed list.
+
+Usage: duplicates (inlist)
+"""
+ dups = []
+ for i in range(len(inlist)):
+ if inlist[i] in inlist[i + 1:]:
+ dups.append(inlist[i])
+ return dups
+
+
+def nonrepeats(inlist):
+ """
+Returns items that are NOT duplicated in the first dim of the passed list.
+
+Usage: nonrepeats (inlist)
+"""
+ nonrepeats = []
+ for i in range(len(inlist)):
+ if inlist.count(inlist[i]) == 1:
+ nonrepeats.append(inlist[i])
+ return nonrepeats
+
+#=================== PSTAT ARRAY FUNCTIONS =====================
+#=================== PSTAT ARRAY FUNCTIONS =====================
+#=================== PSTAT ARRAY FUNCTIONS =====================
+#=================== PSTAT ARRAY FUNCTIONS =====================
+#=================== PSTAT ARRAY FUNCTIONS =====================
+#=================== PSTAT ARRAY FUNCTIONS =====================
+#=================== PSTAT ARRAY FUNCTIONS =====================
+#=================== PSTAT ARRAY FUNCTIONS =====================
+#=================== PSTAT ARRAY FUNCTIONS =====================
+#=================== PSTAT ARRAY FUNCTIONS =====================
+#=================== PSTAT ARRAY FUNCTIONS =====================
+#=================== PSTAT ARRAY FUNCTIONS =====================
+#=================== PSTAT ARRAY FUNCTIONS =====================
+#=================== PSTAT ARRAY FUNCTIONS =====================
+#=================== PSTAT ARRAY FUNCTIONS =====================
+#=================== PSTAT ARRAY FUNCTIONS =====================
+
+try: # DEFINE THESE *ONLY* IF numpy IS AVAILABLE
+ import numpy as N
+
+ def aabut(source, *args):
+ """
+Like the |Stat abut command. It concatenates two arrays column-wise
+and returns the result. CAUTION: If one array is shorter, it will be
+repeated until it is as long as the other.
+
+Usage: aabut (source, args) where args=any # of arrays
+Returns: an array as long as the LONGEST array past, source appearing on the
+ 'left', arrays in <args> attached on the 'right'.
+"""
+ if len(source.shape) == 1:
+ width = 1
+ source = N.resize(source, [source.shape[0], width])
+ else:
+ width = source.shape[1]
+ for addon in args:
+ if len(addon.shape) == 1:
+ width = 1
+ addon = N.resize(addon, [source.shape[0], width])
+ else:
+ width = source.shape[1]
+ if len(addon) < len(source):
+ addon = N.resize(addon, [source.shape[0], addon.shape[1]])
+ elif len(source) < len(addon):
+ source = N.resize(source, [addon.shape[0], source.shape[1]])
+ source = N.concatenate((source, addon), 1)
+ return source
+
+ def acolex(a, indices, axis=1):
+ """
+Extracts specified indices (a list) from passed array, along passed
+axis (column extraction is default). BEWARE: A 1D array is presumed to be a
+column-array (and that the whole array will be returned as a column).
+
+Usage: acolex (a,indices,axis=1)
+Returns: the columns of a specified by indices
+"""
+ if type(indices) not in [ListType, TupleType, N.ndarray]:
+ indices = [indices]
+ if len(N.shape(a)) == 1:
+ cols = N.resize(a, [a.shape[0], 1])
+ else:
+ # print a[:3]
+ cols = N.take(a, indices, axis)
+# print cols[:3]
+ return cols
+
+ def acollapse(a, keepcols, collapsecols, fcn1=None, fcn2=None, cfcn=None):
+ """
+Averages data in collapsecol, keeping all unique items in keepcols
+(using unique, which keeps unique LISTS of column numbers), retaining
+the unique sets of values in keepcols, the mean for each. If stderror or
+N of the mean are desired, set either or both parameters to 1.
+
+Usage: acollapse (a,keepcols,collapsecols,fcn1=None,fcn2=None,cfcn=None)
+Returns: unique 'conditions' specified by the contents of columns specified
+ by keepcols, abutted with the mean(s) of column(s) specified by
+ collapsecols
+"""
+
+ def acollmean(inarray):
+ return N.sum(N.ravel(inarray))
+
+ if type(keepcols) not in [ListType, TupleType, N.ndarray]:
+ keepcols = [keepcols]
+ if type(collapsecols) not in [ListType, TupleType, N.ndarray]:
+ collapsecols = [collapsecols]
+
+ if cfcn == None:
+ cfcn = acollmean
+ if keepcols == []:
+ avgcol = acolex(a, collapsecols)
+ means = N.sum(avgcol) / float(len(avgcol))
+ if fcn1 <> None:
+ try:
+ test = fcn1(avgcol)
+ except:
+ test = N.array(['N/A'] * len(means))
+ means = aabut(means, test)
+ if fcn2 <> None:
+ try:
+ test = fcn2(avgcol)
+ except:
+ test = N.array(['N/A'] * len(means))
+ means = aabut(means, test)
+ return means
+ else:
+ if type(keepcols) not in [ListType, TupleType, N.ndarray]:
+ keepcols = [keepcols]
+ values = colex(a, keepcols) # so that "item" can be appended (below)
+ uniques = unique(values) # get a LIST, so .sort keeps rows intact
+ uniques.sort()
+ newlist = []
+ for item in uniques:
+ if type(item) not in [ListType, TupleType, N.ndarray]:
+ item = [item]
+ tmprows = alinexand(a, keepcols, item)
+ for col in collapsecols:
+ avgcol = acolex(tmprows, col)
+ item.append(acollmean(avgcol))
+ if fcn1 <> None:
+ try:
+ test = fcn1(avgcol)
+ except:
+ test = 'N/A'
+ item.append(test)
+ if fcn2 <> None:
+ try:
+ test = fcn2(avgcol)
+ except:
+ test = 'N/A'
+ item.append(test)
+ newlist.append(item)
+ try:
+ new_a = N.array(newlist)
+ except TypeError:
+ new_a = N.array(newlist, 'O')
+ return new_a
+
+ def adm(a, criterion):
+ """
+Returns rows from the passed list of lists that meet the criteria in
+the passed criterion expression (a string as a function of x).
+
+Usage: adm (a,criterion) where criterion is like 'x[2]==37'
+"""
+ function = 'filter(lambda x: ' + criterion + ',a)'
+ lines = eval(function)
+ try:
+ lines = N.array(lines)
+ except:
+ lines = N.array(lines, dtype='O')
+ return lines
+
+ def isstring(x):
+ if type(x) == StringType:
+ return 1
+ else:
+ return 0
+
+ def alinexand(a, columnlist, valuelist):
+ """
+Returns the rows of an array where col (from columnlist) = val
+(from valuelist). One value is required for each column in columnlist.
+
+Usage: alinexand (a,columnlist,valuelist)
+Returns: the rows of a where columnlist[i]=valuelist[i] for ALL i
+"""
+ if type(columnlist) not in [ListType, TupleType, N.ndarray]:
+ columnlist = [columnlist]
+ if type(valuelist) not in [ListType, TupleType, N.ndarray]:
+ valuelist = [valuelist]
+ criterion = ''
+ for i in range(len(columnlist)):
+ if type(valuelist[i]) == StringType:
+ critval = '\'' + valuelist[i] + '\''
+ else:
+ critval = str(valuelist[i])
+ criterion = criterion + ' x[' + str(columnlist[
+ i]) + ']==' + critval + ' and'
+ criterion = criterion[0:-3] # remove the "and" after the last crit
+ return adm(a, criterion)
+
+ def alinexor(a, columnlist, valuelist):
+ """
+Returns the rows of an array where col (from columnlist) = val (from
+valuelist). One value is required for each column in columnlist.
+The exception is if either columnlist or valuelist has only 1 value,
+in which case that item will be expanded to match the length of the
+other list.
+
+Usage: alinexor (a,columnlist,valuelist)
+Returns: the rows of a where columnlist[i]=valuelist[i] for ANY i
+"""
+ if type(columnlist) not in [ListType, TupleType, N.ndarray]:
+ columnlist = [columnlist]
+ if type(valuelist) not in [ListType, TupleType, N.ndarray]:
+ valuelist = [valuelist]
+ criterion = ''
+ if len(columnlist) == 1 and len(valuelist) > 1:
+ columnlist = columnlist * len(valuelist)
+ elif len(valuelist) == 1 and len(columnlist) > 1:
+ valuelist = valuelist * len(columnlist)
+ for i in range(len(columnlist)):
+ if type(valuelist[i]) == StringType:
+ critval = '\'' + valuelist[i] + '\''
+ else:
+ critval = str(valuelist[i])
+ criterion = criterion + ' x[' + str(columnlist[
+ i]) + ']==' + critval + ' or'
+ criterion = criterion[0:-2] # remove the "or" after the last crit
+ return adm(a, criterion)
+
+ def areplace(a, oldval, newval):
+ """
+Replaces all occurrences of oldval with newval in array a.
+
+Usage: areplace(a,oldval,newval)
+"""
+ return N.where(a == oldval, newval, a)
+
+ def arecode(a, listmap, col='all'):
+ """
+Remaps the values in an array to a new set of values (useful when
+you need to recode data from (e.g.) strings to numbers as most stats
+packages require. Can work on SINGLE columns, or 'all' columns at once.
+@@@BROKEN 2007-11-26
+
+Usage: arecode (a,listmap,col='all')
+Returns: a version of array a where listmap[i][0] = (instead) listmap[i][1]
+"""
+ ashape = a.shape
+ if col == 'all':
+ work = a.ravel()
+ else:
+ work = acolex(a, col)
+ work = work.ravel()
+ for pair in listmap:
+ if type(pair[
+ 1]) == StringType or work.dtype.char == 'O' or a.dtype.char == 'O':
+ work = N.array(work, dtype='O')
+ a = N.array(a, dtype='O')
+ for i in range(len(work)):
+ if work[i] == pair[0]:
+ work[i] = pair[1]
+ if col == 'all':
+ return N.reshape(work, ashape)
+ else:
+ return N.concatenate(
+ [a[:, 0:col], work[:, N.newaxis], a[:, col + 1:]], 1)
+ else: # must be a non-Object type array and replacement
+ work = N.where(work == pair[0], pair[1], work)
+ return N.concatenate(
+ [a[:, 0:col], work[:, N.newaxis], a[:, col + 1:]], 1)
+
+ def arowcompare(row1, row2):
+ """
+Compares two rows from an array, regardless of whether it is an
+array of numbers or of python objects (which requires the cmp function).
+@@@PURPOSE? 2007-11-26
+
+Usage: arowcompare(row1,row2)
+Returns: an array of equal length containing 1s where the two rows had
+ identical elements and 0 otherwise
+"""
+ return
+ if row1.dtype.char == 'O' or row2.dtype == 'O':
+ cmpvect = N.logical_not(
+ abs(N.array(map(cmp, row1, row2)))) # cmp fcn gives -1,0,1
+ else:
+ cmpvect = N.equal(row1, row2)
+ return cmpvect
+
+ def arowsame(row1, row2):
+ """
+Compares two rows from an array, regardless of whether it is an
+array of numbers or of python objects (which requires the cmp function).
+
+Usage: arowsame(row1,row2)
+Returns: 1 if the two rows are identical, 0 otherwise.
+"""
+ cmpval = N.alltrue(arowcompare(row1, row2))
+ return cmpval
+
+ def asortrows(a, axis=0):
+ """
+Sorts an array "by rows". This differs from the Numeric.sort() function,
+which sorts elements WITHIN the given axis. Instead, this function keeps
+the elements along the given axis intact, but shifts them 'up or down'
+relative to one another.
+
+Usage: asortrows(a,axis=0)
+Returns: sorted version of a
+"""
+ return N.sort(a, axis=axis, kind='mergesort')
+
+ def aunique(inarray):
+ """
+Returns unique items in the FIRST dimension of the passed array. Only
+works on arrays NOT including string items.
+
+Usage: aunique (inarray)
+"""
+ uniques = N.array([inarray[0]])
+ if len(uniques.shape) == 1: # IF IT'S A 1D ARRAY
+ for item in inarray[1:]:
+ if N.add.reduce(N.equal(uniques, item).ravel()) == 0:
+ try:
+ uniques = N.concatenate([uniques, N.array[N.newaxis, :]])
+ except TypeError:
+ uniques = N.concatenate([uniques, N.array([item])])
+ else: # IT MUST BE A 2+D ARRAY
+ if inarray.dtype.char != 'O': # not an Object array
+ for item in inarray[1:]:
+ if not N.sum(N.alltrue(N.equal(uniques, item), 1)):
+ try:
+ uniques = N.concatenate([uniques, item[N.newaxis, :]])
+ except TypeError: # the item to add isn't a list
+ uniques = N.concatenate([uniques, N.array([item])])
+ else:
+ pass # this item is already in the uniques array
+ else: # must be an Object array, alltrue/equal functions don't work
+ for item in inarray[1:]:
+ newflag = 1
+ for unq in uniques: # NOTE: cmp --> 0=same, -1=<, 1=>
+ test = N.sum(abs(N.array(map(cmp, item, unq))))
+ if test == 0: # if item identical to any 1 row in uniques
+ newflag = 0 # then not a novel item to add
+ break
+ if newflag == 1:
+ try:
+ uniques = N.concatenate([uniques, item[N.newaxis, :]])
+ except TypeError: # the item to add isn't a list
+ uniques = N.concatenate([uniques, N.array([item])])
+ return uniques
+
+ def aduplicates(inarray):
+ """
+Returns duplicate items in the FIRST dimension of the passed array. Only
+works on arrays NOT including string items.
+
+Usage: aunique (inarray)
+"""
+ inarray = N.array(inarray)
+ if len(inarray.shape) == 1: # IF IT'S A 1D ARRAY
+ dups = []
+ inarray = inarray.tolist()
+ for i in range(len(inarray)):
+ if inarray[i] in inarray[i + 1:]:
+ dups.append(inarray[i])
+ dups = aunique(dups)
+ else: # IT MUST BE A 2+D ARRAY
+ dups = []
+ aslist = inarray.tolist()
+ for i in range(len(aslist)):
+ if aslist[i] in aslist[i + 1:]:
+ dups.append(aslist[i])
+ dups = unique(dups)
+ dups = N.array(dups)
+ return dups
+
+except ImportError: # IF NUMERIC ISN'T AVAILABLE, SKIP ALL arrayfuncs
+ pass
diff --git a/cros_utils/stats.py b/cros_utils/stats.py
new file mode 100644
index 00000000..0387a076
--- /dev/null
+++ b/cros_utils/stats.py
@@ -0,0 +1,4519 @@
+# We did not author this file nor mantain it. Skip linting it.
+#pylint: skip-file
+# Copyright (c) 1999-2008 Gary Strangman; All Rights Reserved.
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+#
+# Comments and/or additions are welcome (send e-mail to:
+# strang@nmr.mgh.harvard.edu).
+#
+"""stats.py module
+
+(Requires pstat.py module.)
+
+#################################################
+####### Written by: Gary Strangman ###########
+####### Last modified: Oct 31, 2008 ###########
+#################################################
+
+A collection of basic statistical functions for python. The function
+names appear below.
+
+IMPORTANT: There are really *3* sets of functions. The first set has an 'l'
+prefix, which can be used with list or tuple arguments. The second set has
+an 'a' prefix, which can accept NumPy array arguments. These latter
+functions are defined only when NumPy is available on the system. The third
+type has NO prefix (i.e., has the name that appears below). Functions of
+this set are members of a "Dispatch" class, c/o David Ascher. This class
+allows different functions to be called depending on the type of the passed
+arguments. Thus, stats.mean is a member of the Dispatch class and
+stats.mean(range(20)) will call stats.lmean(range(20)) while
+stats.mean(Numeric.arange(20)) will call stats.amean(Numeric.arange(20)).
+This is a handy way to keep consistent function names when different
+argument types require different functions to be called. Having
+implementated the Dispatch class, however, means that to get info on
+a given function, you must use the REAL function name ... that is
+"print stats.lmean.__doc__" or "print stats.amean.__doc__" work fine,
+while "print stats.mean.__doc__" will print the doc for the Dispatch
+class. NUMPY FUNCTIONS ('a' prefix) generally have more argument options
+but should otherwise be consistent with the corresponding list functions.
+
+Disclaimers: The function list is obviously incomplete and, worse, the
+functions are not optimized. All functions have been tested (some more
+so than others), but they are far from bulletproof. Thus, as with any
+free software, no warranty or guarantee is expressed or implied. :-) A
+few extra functions that don't appear in the list below can be found by
+interested treasure-hunters. These functions don't necessarily have
+both list and array versions but were deemed useful
+
+CENTRAL TENDENCY: geometricmean
+ harmonicmean
+ mean
+ median
+ medianscore
+ mode
+
+MOMENTS: moment
+ variation
+ skew
+ kurtosis
+ skewtest (for Numpy arrays only)
+ kurtosistest (for Numpy arrays only)
+ normaltest (for Numpy arrays only)
+
+ALTERED VERSIONS: tmean (for Numpy arrays only)
+ tvar (for Numpy arrays only)
+ tmin (for Numpy arrays only)
+ tmax (for Numpy arrays only)
+ tstdev (for Numpy arrays only)
+ tsem (for Numpy arrays only)
+ describe
+
+FREQUENCY STATS: itemfreq
+ scoreatpercentile
+ percentileofscore
+ histogram
+ cumfreq
+ relfreq
+
+VARIABILITY: obrientransform
+ samplevar
+ samplestdev
+ signaltonoise (for Numpy arrays only)
+ var
+ stdev
+ sterr
+ sem
+ z
+ zs
+ zmap (for Numpy arrays only)
+
+TRIMMING FCNS: threshold (for Numpy arrays only)
+ trimboth
+ trim1
+ round (round all vals to 'n' decimals; Numpy only)
+
+CORRELATION FCNS: covariance (for Numpy arrays only)
+ correlation (for Numpy arrays only)
+ paired
+ pearsonr
+ spearmanr
+ pointbiserialr
+ kendalltau
+ linregress
+
+INFERENTIAL STATS: ttest_1samp
+ ttest_ind
+ ttest_rel
+ chisquare
+ ks_2samp
+ mannwhitneyu
+ ranksums
+ wilcoxont
+ kruskalwallish
+ friedmanchisquare
+
+PROBABILITY CALCS: chisqprob
+ erfcc
+ zprob
+ ksprob
+ fprob
+ betacf
+ gammln
+ betai
+
+ANOVA FUNCTIONS: F_oneway
+ F_value
+
+SUPPORT FUNCTIONS: writecc
+ incr
+ sign (for Numpy arrays only)
+ sum
+ cumsum
+ ss
+ summult
+ sumdiffsquared
+ square_of_sums
+ shellsort
+ rankdata
+ outputpairedstats
+ findwithin
+"""
+## CHANGE LOG:
+## ===========
+## 09-07-21 ... added capability for getting the 'proportion' out of l/amannwhitneyu (but comment-disabled)
+## 08-10-31 ... fixed import LinearAlgebra bug before glm fcns
+## 07-11-26 ... conversion for numpy started
+## 07-05-16 ... added Lin's Concordance Correlation Coefficient (alincc) and acov
+## 05-08-21 ... added "Dice's coefficient"
+## 04-10-26 ... added ap2t(), an ugly fcn for converting p-vals to T-vals
+## 04-04-03 ... added amasslinregress() function to do regression on N-D arrays
+## 03-01-03 ... CHANGED VERSION TO 0.6
+## fixed atsem() to properly handle limits=None case
+## improved histogram and median functions (estbinwidth) and
+## fixed atvar() function (wrong answers for neg numbers?!?)
+## 02-11-19 ... fixed attest_ind and attest_rel for div-by-zero Overflows
+## 02-05-10 ... fixed lchisqprob indentation (failed when df=even)
+## 00-12-28 ... removed aanova() to separate module, fixed licensing to
+## match Python License, fixed doc string & imports
+## 00-04-13 ... pulled all "global" statements, except from aanova()
+## added/fixed lots of documentation, removed io.py dependency
+## changed to version 0.5
+## 99-11-13 ... added asign() function
+## 99-11-01 ... changed version to 0.4 ... enough incremental changes now
+## 99-10-25 ... added acovariance and acorrelation functions
+## 99-10-10 ... fixed askew/akurtosis to avoid divide-by-zero errors
+## added aglm function (crude, but will be improved)
+## 99-10-04 ... upgraded acumsum, ass, asummult, asamplevar, avar, etc. to
+## all handle lists of 'dimension's and keepdims
+## REMOVED ar0, ar2, ar3, ar4 and replaced them with around
+## reinserted fixes for abetai to avoid math overflows
+## 99-09-05 ... rewrote achisqprob/aerfcc/aksprob/afprob/abetacf/abetai to
+## handle multi-dimensional arrays (whew!)
+## 99-08-30 ... fixed l/amoment, l/askew, l/akurtosis per D'Agostino (1990)
+## added anormaltest per same reference
+## re-wrote azprob to calc arrays of probs all at once
+## 99-08-22 ... edited attest_ind printing section so arrays could be rounded
+## 99-08-19 ... fixed amean and aharmonicmean for non-error(!) overflow on
+## short/byte arrays (mean of #s btw 100-300 = -150??)
+## 99-08-09 ... fixed asum so that the None case works for Byte arrays
+## 99-08-08 ... fixed 7/3 'improvement' to handle t-calcs on N-D arrays
+## 99-07-03 ... improved attest_ind, attest_rel (zero-division errortrap)
+## 99-06-24 ... fixed bug(?) in attest_ind (n1=a.shape[0])
+## 04/11/99 ... added asignaltonoise, athreshold functions, changed all
+## max/min in array section to N.maximum/N.minimum,
+## fixed square_of_sums to prevent integer overflow
+## 04/10/99 ... !!! Changed function name ... sumsquared ==> square_of_sums
+## 03/18/99 ... Added ar0, ar2, ar3 and ar4 rounding functions
+## 02/28/99 ... Fixed aobrientransform to return an array rather than a list
+## 01/15/99 ... Essentially ceased updating list-versions of functions (!!!)
+## 01/13/99 ... CHANGED TO VERSION 0.3
+## fixed bug in a/lmannwhitneyu p-value calculation
+## 12/31/98 ... fixed variable-name bug in ldescribe
+## 12/19/98 ... fixed bug in findwithin (fcns needed pstat. prefix)
+## 12/16/98 ... changed amedianscore to return float (not array) for 1 score
+## 12/14/98 ... added atmin and atmax functions
+## removed umath from import line (not needed)
+## l/ageometricmean modified to reduce chance of overflows (take
+## nth root first, then multiply)
+## 12/07/98 ... added __version__variable (now 0.2)
+## removed all 'stats.' from anova() fcn
+## 12/06/98 ... changed those functions (except shellsort) that altered
+## arguments in-place ... cumsum, ranksort, ...
+## updated (and fixed some) doc-strings
+## 12/01/98 ... added anova() function (requires NumPy)
+## incorporated Dispatch class
+## 11/12/98 ... added functionality to amean, aharmonicmean, ageometricmean
+## added 'asum' function (added functionality to N.add.reduce)
+## fixed both moment and amoment (two errors)
+## changed name of skewness and askewness to skew and askew
+## fixed (a)histogram (which sometimes counted points <lowerlimit)
+
+import pstat # required 3rd party module
+import math, string, copy # required python modules
+from types import *
+
+__version__ = 0.6
+
+############# DISPATCH CODE ##############
+
+
+class Dispatch:
+ """
+The Dispatch class, care of David Ascher, allows different functions to
+be called depending on the argument types. This way, there can be one
+function name regardless of the argument type. To access function doc
+in stats.py module, prefix the function with an 'l' or 'a' for list or
+array arguments, respectively. That is, print stats.lmean.__doc__ or
+print stats.amean.__doc__ or whatever.
+"""
+
+ def __init__(self, *tuples):
+ self._dispatch = {}
+ for func, types in tuples:
+ for t in types:
+ if t in self._dispatch.keys():
+ raise ValueError, "can't have two dispatches on " + str(t)
+ self._dispatch[t] = func
+ self._types = self._dispatch.keys()
+
+ def __call__(self, arg1, *args, **kw):
+ if type(arg1) not in self._types:
+ raise TypeError, "don't know how to dispatch %s arguments" % type(arg1)
+ return apply(self._dispatch[type(arg1)], (arg1,) + args, kw)
+
+##########################################################################
+######################## LIST-BASED FUNCTIONS ########################
+##########################################################################
+
+### Define these regardless
+
+####################################
+####### CENTRAL TENDENCY #########
+####################################
+
+
+def lgeometricmean(inlist):
+ """
+Calculates the geometric mean of the values in the passed list.
+That is: n-th root of (x1 * x2 * ... * xn). Assumes a '1D' list.
+
+Usage: lgeometricmean(inlist)
+"""
+ mult = 1.0
+ one_over_n = 1.0 / len(inlist)
+ for item in inlist:
+ mult = mult * pow(item, one_over_n)
+ return mult
+
+
+def lharmonicmean(inlist):
+ """
+Calculates the harmonic mean of the values in the passed list.
+That is: n / (1/x1 + 1/x2 + ... + 1/xn). Assumes a '1D' list.
+
+Usage: lharmonicmean(inlist)
+"""
+ sum = 0
+ for item in inlist:
+ sum = sum + 1.0 / item
+ return len(inlist) / sum
+
+
+def lmean(inlist):
+ """
+Returns the arithematic mean of the values in the passed list.
+Assumes a '1D' list, but will function on the 1st dim of an array(!).
+
+Usage: lmean(inlist)
+"""
+ sum = 0
+ for item in inlist:
+ sum = sum + item
+ return sum / float(len(inlist))
+
+
+def lmedian(inlist, numbins=1000):
+ """
+Returns the computed median value of a list of numbers, given the
+number of bins to use for the histogram (more bins brings the computed value
+closer to the median score, default number of bins = 1000). See G.W.
+Heiman's Basic Stats (1st Edition), or CRC Probability & Statistics.
+
+Usage: lmedian (inlist, numbins=1000)
+"""
+ (hist, smallest, binsize, extras) = histogram(
+ inlist, numbins, [min(inlist), max(inlist)]) # make histog
+ cumhist = cumsum(hist) # make cumulative histogram
+ for i in range(len(cumhist)): # get 1st(!) index holding 50%ile score
+ if cumhist[i] >= len(inlist) / 2.0:
+ cfbin = i
+ break
+ LRL = smallest + binsize * cfbin # get lower read limit of that bin
+ cfbelow = cumhist[cfbin - 1]
+ freq = float(hist[cfbin]) # frequency IN the 50%ile bin
+ median = LRL + (
+ (len(inlist) / 2.0 - cfbelow) / float(freq)) * binsize # median formula
+ return median
+
+
+def lmedianscore(inlist):
+ """
+Returns the 'middle' score of the passed list. If there is an even
+number of scores, the mean of the 2 middle scores is returned.
+
+Usage: lmedianscore(inlist)
+"""
+
+ newlist = copy.deepcopy(inlist)
+ newlist.sort()
+ if len(newlist) % 2 == 0: # if even number of scores, average middle 2
+ index = len(newlist) / 2 # integer division correct
+ median = float(newlist[index] + newlist[index - 1]) / 2
+ else:
+ index = len(newlist) / 2 # int divsion gives mid value when count from 0
+ median = newlist[index]
+ return median
+
+
+def lmode(inlist):
+ """
+Returns a list of the modal (most common) score(s) in the passed
+list. If there is more than one such score, all are returned. The
+bin-count for the mode(s) is also returned.
+
+Usage: lmode(inlist)
+Returns: bin-count for mode(s), a list of modal value(s)
+"""
+
+ scores = pstat.unique(inlist)
+ scores.sort()
+ freq = []
+ for item in scores:
+ freq.append(inlist.count(item))
+ maxfreq = max(freq)
+ mode = []
+ stillmore = 1
+ while stillmore:
+ try:
+ indx = freq.index(maxfreq)
+ mode.append(scores[indx])
+ del freq[indx]
+ del scores[indx]
+ except ValueError:
+ stillmore = 0
+ return maxfreq, mode
+
+####################################
+############ MOMENTS #############
+####################################
+
+
+def lmoment(inlist, moment=1):
+ """
+Calculates the nth moment about the mean for a sample (defaults to
+the 1st moment). Used to calculate coefficients of skewness and kurtosis.
+
+Usage: lmoment(inlist,moment=1)
+Returns: appropriate moment (r) from ... 1/n * SUM((inlist(i)-mean)**r)
+"""
+ if moment == 1:
+ return 0.0
+ else:
+ mn = mean(inlist)
+ n = len(inlist)
+ s = 0
+ for x in inlist:
+ s = s + (x - mn)**moment
+ return s / float(n)
+
+
+def lvariation(inlist):
+ """
+Returns the coefficient of variation, as defined in CRC Standard
+Probability and Statistics, p.6.
+
+Usage: lvariation(inlist)
+"""
+ return 100.0 * samplestdev(inlist) / float(mean(inlist))
+
+
+def lskew(inlist):
+ """
+Returns the skewness of a distribution, as defined in Numerical
+Recipies (alternate defn in CRC Standard Probability and Statistics, p.6.)
+
+Usage: lskew(inlist)
+"""
+ return moment(inlist, 3) / pow(moment(inlist, 2), 1.5)
+
+
+def lkurtosis(inlist):
+ """
+Returns the kurtosis of a distribution, as defined in Numerical
+Recipies (alternate defn in CRC Standard Probability and Statistics, p.6.)
+
+Usage: lkurtosis(inlist)
+"""
+ return moment(inlist, 4) / pow(moment(inlist, 2), 2.0)
+
+
+def ldescribe(inlist):
+ """
+Returns some descriptive statistics of the passed list (assumed to be 1D).
+
+Usage: ldescribe(inlist)
+Returns: n, mean, standard deviation, skew, kurtosis
+"""
+ n = len(inlist)
+ mm = (min(inlist), max(inlist))
+ m = mean(inlist)
+ sd = stdev(inlist)
+ sk = skew(inlist)
+ kurt = kurtosis(inlist)
+ return n, mm, m, sd, sk, kurt
+
+####################################
+####### FREQUENCY STATS ##########
+####################################
+
+
+def litemfreq(inlist):
+ """
+Returns a list of pairs. Each pair consists of one of the scores in inlist
+and it's frequency count. Assumes a 1D list is passed.
+
+Usage: litemfreq(inlist)
+Returns: a 2D frequency table (col [0:n-1]=scores, col n=frequencies)
+"""
+ scores = pstat.unique(inlist)
+ scores.sort()
+ freq = []
+ for item in scores:
+ freq.append(inlist.count(item))
+ return pstat.abut(scores, freq)
+
+
+def lscoreatpercentile(inlist, percent):
+ """
+Returns the score at a given percentile relative to the distribution
+given by inlist.
+
+Usage: lscoreatpercentile(inlist,percent)
+"""
+ if percent > 1:
+ print '\nDividing percent>1 by 100 in lscoreatpercentile().\n'
+ percent = percent / 100.0
+ targetcf = percent * len(inlist)
+ h, lrl, binsize, extras = histogram(inlist)
+ cumhist = cumsum(copy.deepcopy(h))
+ for i in range(len(cumhist)):
+ if cumhist[i] >= targetcf:
+ break
+ score = binsize * (
+ (targetcf - cumhist[i - 1]) / float(h[i])) + (lrl + binsize * i)
+ return score
+
+
+def lpercentileofscore(inlist, score, histbins=10, defaultlimits=None):
+ """
+Returns the percentile value of a score relative to the distribution
+given by inlist. Formula depends on the values used to histogram the data(!).
+
+Usage: lpercentileofscore(inlist,score,histbins=10,defaultlimits=None)
+"""
+
+ h, lrl, binsize, extras = histogram(inlist, histbins, defaultlimits)
+ cumhist = cumsum(copy.deepcopy(h))
+ i = int((score - lrl) / float(binsize))
+ pct = (cumhist[i - 1] + (
+ (score -
+ (lrl + binsize * i)) / float(binsize)) * h[i]) / float(len(inlist)) * 100
+ return pct
+
+
+def lhistogram(inlist, numbins=10, defaultreallimits=None, printextras=0):
+ """
+Returns (i) a list of histogram bin counts, (ii) the smallest value
+of the histogram binning, and (iii) the bin width (the last 2 are not
+necessarily integers). Default number of bins is 10. If no sequence object
+is given for defaultreallimits, the routine picks (usually non-pretty) bins
+spanning all the numbers in the inlist.
+
+Usage: lhistogram (inlist, numbins=10,
+defaultreallimits=None,suppressoutput=0)
+Returns: list of bin values, lowerreallimit, binsize, extrapoints
+"""
+ if (defaultreallimits <> None):
+ if type(defaultreallimits) not in [ListType, TupleType] or len(
+ defaultreallimits) == 1: # only one limit given, assumed to be lower one & upper is calc'd
+ lowerreallimit = defaultreallimits
+ upperreallimit = 1.000001 * max(inlist)
+ else: # assume both limits given
+ lowerreallimit = defaultreallimits[0]
+ upperreallimit = defaultreallimits[1]
+ binsize = (upperreallimit - lowerreallimit) / float(numbins)
+ else: # no limits given for histogram, both must be calc'd
+ estbinwidth = (max(inlist) -
+ min(inlist)) / float(numbins) + 1e-6 #1=>cover all
+ binsize = ((max(inlist) - min(inlist) + estbinwidth)) / float(numbins)
+ lowerreallimit = min(inlist) - binsize / 2 #lower real limit,1st bin
+ bins = [0] * (numbins)
+ extrapoints = 0
+ for num in inlist:
+ try:
+ if (num - lowerreallimit) < 0:
+ extrapoints = extrapoints + 1
+ else:
+ bintoincrement = int((num - lowerreallimit) / float(binsize))
+ bins[bintoincrement] = bins[bintoincrement] + 1
+ except:
+ extrapoints = extrapoints + 1
+ if (extrapoints > 0 and printextras == 1):
+ print '\nPoints outside given histogram range =', extrapoints
+ return (bins, lowerreallimit, binsize, extrapoints)
+
+
+def lcumfreq(inlist, numbins=10, defaultreallimits=None):
+ """
+Returns a cumulative frequency histogram, using the histogram function.
+
+Usage: lcumfreq(inlist,numbins=10,defaultreallimits=None)
+Returns: list of cumfreq bin values, lowerreallimit, binsize, extrapoints
+"""
+ h, l, b, e = histogram(inlist, numbins, defaultreallimits)
+ cumhist = cumsum(copy.deepcopy(h))
+ return cumhist, l, b, e
+
+
+def lrelfreq(inlist, numbins=10, defaultreallimits=None):
+ """
+Returns a relative frequency histogram, using the histogram function.
+
+Usage: lrelfreq(inlist,numbins=10,defaultreallimits=None)
+Returns: list of cumfreq bin values, lowerreallimit, binsize, extrapoints
+"""
+ h, l, b, e = histogram(inlist, numbins, defaultreallimits)
+ for i in range(len(h)):
+ h[i] = h[i] / float(len(inlist))
+ return h, l, b, e
+
+####################################
+##### VARIABILITY FUNCTIONS ######
+####################################
+
+
+def lobrientransform(*args):
+ """
+Computes a transform on input data (any number of columns). Used to
+test for homogeneity of variance prior to running one-way stats. From
+Maxwell and Delaney, p.112.
+
+Usage: lobrientransform(*args)
+Returns: transformed data for use in an ANOVA
+"""
+ TINY = 1e-10
+ k = len(args)
+ n = [0.0] * k
+ v = [0.0] * k
+ m = [0.0] * k
+ nargs = []
+ for i in range(k):
+ nargs.append(copy.deepcopy(args[i]))
+ n[i] = float(len(nargs[i]))
+ v[i] = var(nargs[i])
+ m[i] = mean(nargs[i])
+ for j in range(k):
+ for i in range(n[j]):
+ t1 = (n[j] - 1.5) * n[j] * (nargs[j][i] - m[j])**2
+ t2 = 0.5 * v[j] * (n[j] - 1.0)
+ t3 = (n[j] - 1.0) * (n[j] - 2.0)
+ nargs[j][i] = (t1 - t2) / float(t3)
+ check = 1
+ for j in range(k):
+ if v[j] - mean(nargs[j]) > TINY:
+ check = 0
+ if check <> 1:
+ raise ValueError, 'Problem in obrientransform.'
+ else:
+ return nargs
+
+
+def lsamplevar(inlist):
+ """
+Returns the variance of the values in the passed list using
+N for the denominator (i.e., DESCRIBES the sample variance only).
+
+Usage: lsamplevar(inlist)
+"""
+ n = len(inlist)
+ mn = mean(inlist)
+ deviations = []
+ for item in inlist:
+ deviations.append(item - mn)
+ return ss(deviations) / float(n)
+
+
+def lsamplestdev(inlist):
+ """
+Returns the standard deviation of the values in the passed list using
+N for the denominator (i.e., DESCRIBES the sample stdev only).
+
+Usage: lsamplestdev(inlist)
+"""
+ return math.sqrt(samplevar(inlist))
+
+
+def lcov(x, y, keepdims=0):
+ """
+Returns the estimated covariance of the values in the passed
+array (i.e., N-1). Dimension can equal None (ravel array first), an
+integer (the dimension over which to operate), or a sequence (operate
+over multiple dimensions). Set keepdims=1 to return an array with the
+same number of dimensions as inarray.
+
+Usage: lcov(x,y,keepdims=0)
+"""
+
+ n = len(x)
+ xmn = mean(x)
+ ymn = mean(y)
+ xdeviations = [0] * len(x)
+ ydeviations = [0] * len(y)
+ for i in range(len(x)):
+ xdeviations[i] = x[i] - xmn
+ ydeviations[i] = y[i] - ymn
+ ss = 0.0
+ for i in range(len(xdeviations)):
+ ss = ss + xdeviations[i] * ydeviations[i]
+ return ss / float(n - 1)
+
+
+def lvar(inlist):
+ """
+Returns the variance of the values in the passed list using N-1
+for the denominator (i.e., for estimating population variance).
+
+Usage: lvar(inlist)
+"""
+ n = len(inlist)
+ mn = mean(inlist)
+ deviations = [0] * len(inlist)
+ for i in range(len(inlist)):
+ deviations[i] = inlist[i] - mn
+ return ss(deviations) / float(n - 1)
+
+
+def lstdev(inlist):
+ """
+Returns the standard deviation of the values in the passed list
+using N-1 in the denominator (i.e., to estimate population stdev).
+
+Usage: lstdev(inlist)
+"""
+ return math.sqrt(var(inlist))
+
+
+def lsterr(inlist):
+ """
+Returns the standard error of the values in the passed list using N-1
+in the denominator (i.e., to estimate population standard error).
+
+Usage: lsterr(inlist)
+"""
+ return stdev(inlist) / float(math.sqrt(len(inlist)))
+
+
+def lsem(inlist):
+ """
+Returns the estimated standard error of the mean (sx-bar) of the
+values in the passed list. sem = stdev / sqrt(n)
+
+Usage: lsem(inlist)
+"""
+ sd = stdev(inlist)
+ n = len(inlist)
+ return sd / math.sqrt(n)
+
+
+def lz(inlist, score):
+ """
+Returns the z-score for a given input score, given that score and the
+list from which that score came. Not appropriate for population calculations.
+
+Usage: lz(inlist, score)
+"""
+ z = (score - mean(inlist)) / samplestdev(inlist)
+ return z
+
+
+def lzs(inlist):
+ """
+Returns a list of z-scores, one for each score in the passed list.
+
+Usage: lzs(inlist)
+"""
+ zscores = []
+ for item in inlist:
+ zscores.append(z(inlist, item))
+ return zscores
+
+####################################
+####### TRIMMING FUNCTIONS #######
+####################################
+
+
+def ltrimboth(l, proportiontocut):
+ """
+Slices off the passed proportion of items from BOTH ends of the passed
+list (i.e., with proportiontocut=0.1, slices 'leftmost' 10% AND 'rightmost'
+10% of scores. Assumes list is sorted by magnitude. Slices off LESS if
+proportion results in a non-integer slice index (i.e., conservatively
+slices off proportiontocut).
+
+Usage: ltrimboth (l,proportiontocut)
+Returns: trimmed version of list l
+"""
+ lowercut = int(proportiontocut * len(l))
+ uppercut = len(l) - lowercut
+ return l[lowercut:uppercut]
+
+
+def ltrim1(l, proportiontocut, tail='right'):
+ """
+Slices off the passed proportion of items from ONE end of the passed
+list (i.e., if proportiontocut=0.1, slices off 'leftmost' or 'rightmost'
+10% of scores). Slices off LESS if proportion results in a non-integer
+slice index (i.e., conservatively slices off proportiontocut).
+
+Usage: ltrim1 (l,proportiontocut,tail='right') or set tail='left'
+Returns: trimmed version of list l
+"""
+ if tail == 'right':
+ lowercut = 0
+ uppercut = len(l) - int(proportiontocut * len(l))
+ elif tail == 'left':
+ lowercut = int(proportiontocut * len(l))
+ uppercut = len(l)
+ return l[lowercut:uppercut]
+
+####################################
+##### CORRELATION FUNCTIONS ######
+####################################
+
+
+def lpaired(x, y):
+ """
+Interactively determines the type of data and then runs the
+appropriated statistic for paired group data.
+
+Usage: lpaired(x,y)
+Returns: appropriate statistic name, value, and probability
+"""
+ samples = ''
+ while samples not in ['i', 'r', 'I', 'R', 'c', 'C']:
+ print '\nIndependent or related samples, or correlation (i,r,c): ',
+ samples = raw_input()
+
+ if samples in ['i', 'I', 'r', 'R']:
+ print '\nComparing variances ...',
+ # USE O'BRIEN'S TEST FOR HOMOGENEITY OF VARIANCE, Maxwell & delaney, p.112
+ r = obrientransform(x, y)
+ f, p = F_oneway(pstat.colex(r, 0), pstat.colex(r, 1))
+ if p < 0.05:
+ vartype = 'unequal, p=' + str(round(p, 4))
+ else:
+ vartype = 'equal'
+ print vartype
+ if samples in ['i', 'I']:
+ if vartype[0] == 'e':
+ t, p = ttest_ind(x, y, 0)
+ print '\nIndependent samples t-test: ', round(t, 4), round(p, 4)
+ else:
+ if len(x) > 20 or len(y) > 20:
+ z, p = ranksums(x, y)
+ print '\nRank Sums test (NONparametric, n>20): ', round(z, 4), round(
+ p, 4)
+ else:
+ u, p = mannwhitneyu(x, y)
+ print '\nMann-Whitney U-test (NONparametric, ns<20): ', round(
+ u, 4), round(p, 4)
+
+ else: # RELATED SAMPLES
+ if vartype[0] == 'e':
+ t, p = ttest_rel(x, y, 0)
+ print '\nRelated samples t-test: ', round(t, 4), round(p, 4)
+ else:
+ t, p = ranksums(x, y)
+ print '\nWilcoxon T-test (NONparametric): ', round(t, 4), round(p, 4)
+ else: # CORRELATION ANALYSIS
+ corrtype = ''
+ while corrtype not in ['c', 'C', 'r', 'R', 'd', 'D']:
+ print '\nIs the data Continuous, Ranked, or Dichotomous (c,r,d): ',
+ corrtype = raw_input()
+ if corrtype in ['c', 'C']:
+ m, b, r, p, see = linregress(x, y)
+ print '\nLinear regression for continuous variables ...'
+ lol = [['Slope', 'Intercept', 'r', 'Prob', 'SEestimate'],
+ [round(m, 4), round(b, 4), round(r, 4), round(p, 4), round(see, 4)]
+ ]
+ pstat.printcc(lol)
+ elif corrtype in ['r', 'R']:
+ r, p = spearmanr(x, y)
+ print '\nCorrelation for ranked variables ...'
+ print "Spearman's r: ", round(r, 4), round(p, 4)
+ else: # DICHOTOMOUS
+ r, p = pointbiserialr(x, y)
+ print '\nAssuming x contains a dichotomous variable ...'
+ print 'Point Biserial r: ', round(r, 4), round(p, 4)
+ print '\n\n'
+ return None
+
+
+def lpearsonr(x, y):
+ """
+Calculates a Pearson correlation coefficient and the associated
+probability value. Taken from Heiman's Basic Statistics for the Behav.
+Sci (2nd), p.195.
+
+Usage: lpearsonr(x,y) where x and y are equal-length lists
+Returns: Pearson's r value, two-tailed p-value
+"""
+ TINY = 1.0e-30
+ if len(x) <> len(y):
+ raise ValueError, 'Input values not paired in pearsonr. Aborting.'
+ n = len(x)
+ x = map(float, x)
+ y = map(float, y)
+ xmean = mean(x)
+ ymean = mean(y)
+ r_num = n * (summult(x, y)) - sum(x) * sum(y)
+ r_den = math.sqrt((n * ss(x) - square_of_sums(x)) *
+ (n * ss(y) - square_of_sums(y)))
+ r = (r_num / r_den) # denominator already a float
+ df = n - 2
+ t = r * math.sqrt(df / ((1.0 - r + TINY) * (1.0 + r + TINY)))
+ prob = betai(0.5 * df, 0.5, df / float(df + t * t))
+ return r, prob
+
+
+def llincc(x, y):
+ """
+Calculates Lin's concordance correlation coefficient.
+
+Usage: alincc(x,y) where x, y are equal-length arrays
+Returns: Lin's CC
+"""
+ covar = lcov(x, y) * (len(x) - 1) / float(len(x)) # correct denom to n
+ xvar = lvar(x) * (len(x) - 1) / float(len(x)) # correct denom to n
+ yvar = lvar(y) * (len(y) - 1) / float(len(y)) # correct denom to n
+ lincc = (2 * covar) / ((xvar + yvar) + ((amean(x) - amean(y))**2))
+ return lincc
+
+
+def lspearmanr(x, y):
+ """
+Calculates a Spearman rank-order correlation coefficient. Taken
+from Heiman's Basic Statistics for the Behav. Sci (1st), p.192.
+
+Usage: lspearmanr(x,y) where x and y are equal-length lists
+Returns: Spearman's r, two-tailed p-value
+"""
+ TINY = 1e-30
+ if len(x) <> len(y):
+ raise ValueError, 'Input values not paired in spearmanr. Aborting.'
+ n = len(x)
+ rankx = rankdata(x)
+ ranky = rankdata(y)
+ dsq = sumdiffsquared(rankx, ranky)
+ rs = 1 - 6 * dsq / float(n * (n**2 - 1))
+ t = rs * math.sqrt((n - 2) / ((rs + 1.0) * (1.0 - rs)))
+ df = n - 2
+ probrs = betai(0.5 * df, 0.5, df / (df + t * t)) # t already a float
+ # probability values for rs are from part 2 of the spearman function in
+ # Numerical Recipies, p.510. They are close to tables, but not exact. (?)
+ return rs, probrs
+
+
+def lpointbiserialr(x, y):
+ """
+Calculates a point-biserial correlation coefficient and the associated
+probability value. Taken from Heiman's Basic Statistics for the Behav.
+Sci (1st), p.194.
+
+Usage: lpointbiserialr(x,y) where x,y are equal-length lists
+Returns: Point-biserial r, two-tailed p-value
+"""
+ TINY = 1e-30
+ if len(x) <> len(y):
+ raise ValueError, 'INPUT VALUES NOT PAIRED IN pointbiserialr. ABORTING.'
+ data = pstat.abut(x, y)
+ categories = pstat.unique(x)
+ if len(categories) <> 2:
+ raise ValueError, 'Exactly 2 categories required for pointbiserialr().'
+ else: # there are 2 categories, continue
+ codemap = pstat.abut(categories, range(2))
+ recoded = pstat.recode(data, codemap, 0)
+ x = pstat.linexand(data, 0, categories[0])
+ y = pstat.linexand(data, 0, categories[1])
+ xmean = mean(pstat.colex(x, 1))
+ ymean = mean(pstat.colex(y, 1))
+ n = len(data)
+ adjust = math.sqrt((len(x) / float(n)) * (len(y) / float(n)))
+ rpb = (ymean - xmean) / samplestdev(pstat.colex(data, 1)) * adjust
+ df = n - 2
+ t = rpb * math.sqrt(df / ((1.0 - rpb + TINY) * (1.0 + rpb + TINY)))
+ prob = betai(0.5 * df, 0.5, df / (df + t * t)) # t already a float
+ return rpb, prob
+
+
+def lkendalltau(x, y):
+ """
+Calculates Kendall's tau ... correlation of ordinal data. Adapted
+from function kendl1 in Numerical Recipies. Needs good test-routine.@@@
+
+Usage: lkendalltau(x,y)
+Returns: Kendall's tau, two-tailed p-value
+"""
+ n1 = 0
+ n2 = 0
+ iss = 0
+ for j in range(len(x) - 1):
+ for k in range(j, len(y)):
+ a1 = x[j] - x[k]
+ a2 = y[j] - y[k]
+ aa = a1 * a2
+ if (aa): # neither list has a tie
+ n1 = n1 + 1
+ n2 = n2 + 1
+ if aa > 0:
+ iss = iss + 1
+ else:
+ iss = iss - 1
+ else:
+ if (a1):
+ n1 = n1 + 1
+ else:
+ n2 = n2 + 1
+ tau = iss / math.sqrt(n1 * n2)
+ svar = (4.0 * len(x) + 10.0) / (9.0 * len(x) * (len(x) - 1))
+ z = tau / math.sqrt(svar)
+ prob = erfcc(abs(z) / 1.4142136)
+ return tau, prob
+
+
+def llinregress(x, y):
+ """
+Calculates a regression line on x,y pairs.
+
+Usage: llinregress(x,y) x,y are equal-length lists of x-y coordinates
+Returns: slope, intercept, r, two-tailed prob, sterr-of-estimate
+"""
+ TINY = 1.0e-20
+ if len(x) <> len(y):
+ raise ValueError, 'Input values not paired in linregress. Aborting.'
+ n = len(x)
+ x = map(float, x)
+ y = map(float, y)
+ xmean = mean(x)
+ ymean = mean(y)
+ r_num = float(n * (summult(x, y)) - sum(x) * sum(y))
+ r_den = math.sqrt((n * ss(x) - square_of_sums(x)) *
+ (n * ss(y) - square_of_sums(y)))
+ r = r_num / r_den
+ z = 0.5 * math.log((1.0 + r + TINY) / (1.0 - r + TINY))
+ df = n - 2
+ t = r * math.sqrt(df / ((1.0 - r + TINY) * (1.0 + r + TINY)))
+ prob = betai(0.5 * df, 0.5, df / (df + t * t))
+ slope = r_num / float(n * ss(x) - square_of_sums(x))
+ intercept = ymean - slope * xmean
+ sterrest = math.sqrt(1 - r * r) * samplestdev(y)
+ return slope, intercept, r, prob, sterrest
+
+####################################
+##### INFERENTIAL STATISTICS #####
+####################################
+
+
+def lttest_1samp(a, popmean, printit=0, name='Sample', writemode='a'):
+ """
+Calculates the t-obtained for the independent samples T-test on ONE group
+of scores a, given a population mean. If printit=1, results are printed
+to the screen. If printit='filename', the results are output to 'filename'
+using the given writemode (default=append). Returns t-value, and prob.
+
+Usage: lttest_1samp(a,popmean,Name='Sample',printit=0,writemode='a')
+Returns: t-value, two-tailed prob
+"""
+ x = mean(a)
+ v = var(a)
+ n = len(a)
+ df = n - 1
+ svar = ((n - 1) * v) / float(df)
+ t = (x - popmean) / math.sqrt(svar * (1.0 / n))
+ prob = betai(0.5 * df, 0.5, float(df) / (df + t * t))
+
+ if printit <> 0:
+ statname = 'Single-sample T-test.'
+ outputpairedstats(printit, writemode, 'Population', '--', popmean, 0, 0, 0,
+ name, n, x, v, min(a), max(a), statname, t, prob)
+ return t, prob
+
+
+def lttest_ind(a, b, printit=0, name1='Samp1', name2='Samp2', writemode='a'):
+ """
+Calculates the t-obtained T-test on TWO INDEPENDENT samples of
+scores a, and b. From Numerical Recipies, p.483. If printit=1, results
+are printed to the screen. If printit='filename', the results are output
+to 'filename' using the given writemode (default=append). Returns t-value,
+and prob.
+
+Usage: lttest_ind(a,b,printit=0,name1='Samp1',name2='Samp2',writemode='a')
+Returns: t-value, two-tailed prob
+"""
+ x1 = mean(a)
+ x2 = mean(b)
+ v1 = stdev(a)**2
+ v2 = stdev(b)**2
+ n1 = len(a)
+ n2 = len(b)
+ df = n1 + n2 - 2
+ svar = ((n1 - 1) * v1 + (n2 - 1) * v2) / float(df)
+ if not svar:
+ svar = 1.0e-26
+ t = (x1 - x2) / math.sqrt(svar * (1.0 / n1 + 1.0 / n2))
+ prob = betai(0.5 * df, 0.5, df / (df + t * t))
+
+ if printit <> 0:
+ statname = 'Independent samples T-test.'
+ outputpairedstats(printit, writemode, name1, n1, x1, v1, min(a), max(a),
+ name2, n2, x2, v2, min(b), max(b), statname, t, prob)
+ return t, prob
+
+
+def lttest_rel(a,
+ b,
+ printit=0,
+ name1='Sample1',
+ name2='Sample2',
+ writemode='a'):
+ """
+Calculates the t-obtained T-test on TWO RELATED samples of scores,
+a and b. From Numerical Recipies, p.483. If printit=1, results are
+printed to the screen. If printit='filename', the results are output to
+'filename' using the given writemode (default=append). Returns t-value,
+and prob.
+
+Usage: lttest_rel(a,b,printit=0,name1='Sample1',name2='Sample2',writemode='a')
+Returns: t-value, two-tailed prob
+"""
+ if len(a) <> len(b):
+ raise ValueError, 'Unequal length lists in ttest_rel.'
+ x1 = mean(a)
+ x2 = mean(b)
+ v1 = var(a)
+ v2 = var(b)
+ n = len(a)
+ cov = 0
+ for i in range(len(a)):
+ cov = cov + (a[i] - x1) * (b[i] - x2)
+ df = n - 1
+ cov = cov / float(df)
+ sd = math.sqrt((v1 + v2 - 2.0 * cov) / float(n))
+ t = (x1 - x2) / sd
+ prob = betai(0.5 * df, 0.5, df / (df + t * t))
+
+ if printit <> 0:
+ statname = 'Related samples T-test.'
+ outputpairedstats(printit, writemode, name1, n, x1, v1, min(a), max(a),
+ name2, n, x2, v2, min(b), max(b), statname, t, prob)
+ return t, prob
+
+
+def lchisquare(f_obs, f_exp=None):
+ """
+Calculates a one-way chi square for list of observed frequencies and returns
+the result. If no expected frequencies are given, the total N is assumed to
+be equally distributed across all groups.
+
+Usage: lchisquare(f_obs, f_exp=None) f_obs = list of observed cell freq.
+Returns: chisquare-statistic, associated p-value
+"""
+ k = len(f_obs) # number of groups
+ if f_exp == None:
+ f_exp = [sum(f_obs) / float(k)] * len(f_obs) # create k bins with = freq.
+ chisq = 0
+ for i in range(len(f_obs)):
+ chisq = chisq + (f_obs[i] - f_exp[i])**2 / float(f_exp[i])
+ return chisq, chisqprob(chisq, k - 1)
+
+
+def lks_2samp(data1, data2):
+ """
+Computes the Kolmogorov-Smirnof statistic on 2 samples. From
+Numerical Recipies in C, page 493.
+
+Usage: lks_2samp(data1,data2) data1&2 are lists of values for 2 conditions
+Returns: KS D-value, associated p-value
+"""
+ j1 = 0
+ j2 = 0
+ fn1 = 0.0
+ fn2 = 0.0
+ n1 = len(data1)
+ n2 = len(data2)
+ en1 = n1
+ en2 = n2
+ d = 0.0
+ data1.sort()
+ data2.sort()
+ while j1 < n1 and j2 < n2:
+ d1 = data1[j1]
+ d2 = data2[j2]
+ if d1 <= d2:
+ fn1 = (j1) / float(en1)
+ j1 = j1 + 1
+ if d2 <= d1:
+ fn2 = (j2) / float(en2)
+ j2 = j2 + 1
+ dt = (fn2 - fn1)
+ if math.fabs(dt) > math.fabs(d):
+ d = dt
+ try:
+ en = math.sqrt(en1 * en2 / float(en1 + en2))
+ prob = ksprob((en + 0.12 + 0.11 / en) * abs(d))
+ except:
+ prob = 1.0
+ return d, prob
+
+
+def lmannwhitneyu(x, y):
+ """
+Calculates a Mann-Whitney U statistic on the provided scores and
+returns the result. Use only when the n in each condition is < 20 and
+you have 2 independent samples of ranks. NOTE: Mann-Whitney U is
+significant if the u-obtained is LESS THAN or equal to the critical
+value of U found in the tables. Equivalent to Kruskal-Wallis H with
+just 2 groups.
+
+Usage: lmannwhitneyu(data)
+Returns: u-statistic, one-tailed p-value (i.e., p(z(U)))
+"""
+ n1 = len(x)
+ n2 = len(y)
+ ranked = rankdata(x + y)
+ rankx = ranked[0:n1] # get the x-ranks
+ ranky = ranked[n1:] # the rest are y-ranks
+ u1 = n1 * n2 + (n1 * (n1 + 1)) / 2.0 - sum(rankx) # calc U for x
+ u2 = n1 * n2 - u1 # remainder is U for y
+ bigu = max(u1, u2)
+ smallu = min(u1, u2)
+ proportion = bigu / float(n1 * n2)
+ T = math.sqrt(tiecorrect(ranked)) # correction factor for tied scores
+ if T == 0:
+ raise ValueError, 'All numbers are identical in lmannwhitneyu'
+ sd = math.sqrt(T * n1 * n2 * (n1 + n2 + 1) / 12.0)
+ z = abs((bigu - n1 * n2 / 2.0) / sd) # normal approximation for prob calc
+ return smallu, 1.0 - zprob(z) #, proportion
+
+
+def ltiecorrect(rankvals):
+ """
+Corrects for ties in Mann Whitney U and Kruskal Wallis H tests. See
+Siegel, S. (1956) Nonparametric Statistics for the Behavioral Sciences.
+New York: McGraw-Hill. Code adapted from |Stat rankind.c code.
+
+Usage: ltiecorrect(rankvals)
+Returns: T correction factor for U or H
+"""
+ sorted, posn = shellsort(rankvals)
+ n = len(sorted)
+ T = 0.0
+ i = 0
+ while (i < n - 1):
+ if sorted[i] == sorted[i + 1]:
+ nties = 1
+ while (i < n - 1) and (sorted[i] == sorted[i + 1]):
+ nties = nties + 1
+ i = i + 1
+ T = T + nties**3 - nties
+ i = i + 1
+ T = T / float(n**3 - n)
+ return 1.0 - T
+
+
+def lranksums(x, y):
+ """
+Calculates the rank sums statistic on the provided scores and
+returns the result. Use only when the n in each condition is > 20 and you
+have 2 independent samples of ranks.
+
+Usage: lranksums(x,y)
+Returns: a z-statistic, two-tailed p-value
+"""
+ n1 = len(x)
+ n2 = len(y)
+ alldata = x + y
+ ranked = rankdata(alldata)
+ x = ranked[:n1]
+ y = ranked[n1:]
+ s = sum(x)
+ expected = n1 * (n1 + n2 + 1) / 2.0
+ z = (s - expected) / math.sqrt(n1 * n2 * (n1 + n2 + 1) / 12.0)
+ prob = 2 * (1.0 - zprob(abs(z)))
+ return z, prob
+
+
+def lwilcoxont(x, y):
+ """
+Calculates the Wilcoxon T-test for related samples and returns the
+result. A non-parametric T-test.
+
+Usage: lwilcoxont(x,y)
+Returns: a t-statistic, two-tail probability estimate
+"""
+ if len(x) <> len(y):
+ raise ValueError, 'Unequal N in wilcoxont. Aborting.'
+ d = []
+ for i in range(len(x)):
+ diff = x[i] - y[i]
+ if diff <> 0:
+ d.append(diff)
+ count = len(d)
+ absd = map(abs, d)
+ absranked = rankdata(absd)
+ r_plus = 0.0
+ r_minus = 0.0
+ for i in range(len(absd)):
+ if d[i] < 0:
+ r_minus = r_minus + absranked[i]
+ else:
+ r_plus = r_plus + absranked[i]
+ wt = min(r_plus, r_minus)
+ mn = count * (count + 1) * 0.25
+ se = math.sqrt(count * (count + 1) * (2.0 * count + 1.0) / 24.0)
+ z = math.fabs(wt - mn) / se
+ prob = 2 * (1.0 - zprob(abs(z)))
+ return wt, prob
+
+
+def lkruskalwallish(*args):
+ """
+The Kruskal-Wallis H-test is a non-parametric ANOVA for 3 or more
+groups, requiring at least 5 subjects in each group. This function
+calculates the Kruskal-Wallis H-test for 3 or more independent samples
+and returns the result.
+
+Usage: lkruskalwallish(*args)
+Returns: H-statistic (corrected for ties), associated p-value
+"""
+ args = list(args)
+ n = [0] * len(args)
+ all = []
+ n = map(len, args)
+ for i in range(len(args)):
+ all = all + args[i]
+ ranked = rankdata(all)
+ T = tiecorrect(ranked)
+ for i in range(len(args)):
+ args[i] = ranked[0:n[i]]
+ del ranked[0:n[i]]
+ rsums = []
+ for i in range(len(args)):
+ rsums.append(sum(args[i])**2)
+ rsums[i] = rsums[i] / float(n[i])
+ ssbn = sum(rsums)
+ totaln = sum(n)
+ h = 12.0 / (totaln * (totaln + 1)) * ssbn - 3 * (totaln + 1)
+ df = len(args) - 1
+ if T == 0:
+ raise ValueError, 'All numbers are identical in lkruskalwallish'
+ h = h / float(T)
+ return h, chisqprob(h, df)
+
+
+def lfriedmanchisquare(*args):
+ """
+Friedman Chi-Square is a non-parametric, one-way within-subjects
+ANOVA. This function calculates the Friedman Chi-square test for repeated
+measures and returns the result, along with the associated probability
+value. It assumes 3 or more repeated measures. Only 3 levels requires a
+minimum of 10 subjects in the study. Four levels requires 5 subjects per
+level(??).
+
+Usage: lfriedmanchisquare(*args)
+Returns: chi-square statistic, associated p-value
+"""
+ k = len(args)
+ if k < 3:
+ raise ValueError, 'Less than 3 levels. Friedman test not appropriate.'
+ n = len(args[0])
+ data = apply(pstat.abut, tuple(args))
+ for i in range(len(data)):
+ data[i] = rankdata(data[i])
+ ssbn = 0
+ for i in range(k):
+ ssbn = ssbn + sum(args[i])**2
+ chisq = 12.0 / (k * n * (k + 1)) * ssbn - 3 * n * (k + 1)
+ return chisq, chisqprob(chisq, k - 1)
+
+####################################
+#### PROBABILITY CALCULATIONS ####
+####################################
+
+
+def lchisqprob(chisq, df):
+ """
+Returns the (1-tailed) probability value associated with the provided
+chi-square value and df. Adapted from chisq.c in Gary Perlman's |Stat.
+
+Usage: lchisqprob(chisq,df)
+"""
+ BIG = 20.0
+
+ def ex(x):
+ BIG = 20.0
+ if x < -BIG:
+ return 0.0
+ else:
+ return math.exp(x)
+
+ if chisq <= 0 or df < 1:
+ return 1.0
+ a = 0.5 * chisq
+ if df % 2 == 0:
+ even = 1
+ else:
+ even = 0
+ if df > 1:
+ y = ex(-a)
+ if even:
+ s = y
+ else:
+ s = 2.0 * zprob(-math.sqrt(chisq))
+ if (df > 2):
+ chisq = 0.5 * (df - 1.0)
+ if even:
+ z = 1.0
+ else:
+ z = 0.5
+ if a > BIG:
+ if even:
+ e = 0.0
+ else:
+ e = math.log(math.sqrt(math.pi))
+ c = math.log(a)
+ while (z <= chisq):
+ e = math.log(z) + e
+ s = s + ex(c * z - a - e)
+ z = z + 1.0
+ return s
+ else:
+ if even:
+ e = 1.0
+ else:
+ e = 1.0 / math.sqrt(math.pi) / math.sqrt(a)
+ c = 0.0
+ while (z <= chisq):
+ e = e * (a / float(z))
+ c = c + e
+ z = z + 1.0
+ return (c * y + s)
+ else:
+ return s
+
+
+def lerfcc(x):
+ """
+Returns the complementary error function erfc(x) with fractional
+error everywhere less than 1.2e-7. Adapted from Numerical Recipies.
+
+Usage: lerfcc(x)
+"""
+ z = abs(x)
+ t = 1.0 / (1.0 + 0.5 * z)
+ ans = t * math.exp(-z * z - 1.26551223 + t * (1.00002368 + t * (
+ 0.37409196 + t * (0.09678418 + t * (-0.18628806 + t * (0.27886807 + t * (
+ -1.13520398 + t * (1.48851587 + t * (-0.82215223 + t * 0.17087277)))))
+ ))))
+ if x >= 0:
+ return ans
+ else:
+ return 2.0 - ans
+
+
+def lzprob(z):
+ """
+Returns the area under the normal curve 'to the left of' the given z value.
+Thus,
+ for z<0, zprob(z) = 1-tail probability
+ for z>0, 1.0-zprob(z) = 1-tail probability
+ for any z, 2.0*(1.0-zprob(abs(z))) = 2-tail probability
+Adapted from z.c in Gary Perlman's |Stat.
+
+Usage: lzprob(z)
+"""
+ Z_MAX = 6.0 # maximum meaningful z-value
+ if z == 0.0:
+ x = 0.0
+ else:
+ y = 0.5 * math.fabs(z)
+ if y >= (Z_MAX * 0.5):
+ x = 1.0
+ elif (y < 1.0):
+ w = y * y
+ x = ((
+ ((((((0.000124818987 * w - 0.001075204047) * w + 0.005198775019) * w -
+ 0.019198292004) * w + 0.059054035642) * w - 0.151968751364) * w +
+ 0.319152932694) * w - 0.531923007300) * w + 0.797884560593) * y * 2.0
+ else:
+ y = y - 2.0
+ x = (((((((
+ ((((((-0.000045255659 * y + 0.000152529290) * y - 0.000019538132) * y
+ - 0.000676904986) * y + 0.001390604284) * y - 0.000794620820) * y
+ - 0.002034254874) * y + 0.006549791214) * y - 0.010557625006) * y +
+ 0.011630447319) * y - 0.009279453341) * y + 0.005353579108) * y -
+ 0.002141268741) * y + 0.000535310849) * y + 0.999936657524
+ if z > 0.0:
+ prob = ((x + 1.0) * 0.5)
+ else:
+ prob = ((1.0 - x) * 0.5)
+ return prob
+
+
+def lksprob(alam):
+ """
+Computes a Kolmolgorov-Smirnov t-test significance level. Adapted from
+Numerical Recipies.
+
+Usage: lksprob(alam)
+"""
+ fac = 2.0
+ sum = 0.0
+ termbf = 0.0
+ a2 = -2.0 * alam * alam
+ for j in range(1, 201):
+ term = fac * math.exp(a2 * j * j)
+ sum = sum + term
+ if math.fabs(term) <= (0.001 * termbf) or math.fabs(term) < (1.0e-8 * sum):
+ return sum
+ fac = -fac
+ termbf = math.fabs(term)
+ return 1.0 # Get here only if fails to converge; was 0.0!!
+
+
+def lfprob(dfnum, dfden, F):
+ """
+Returns the (1-tailed) significance level (p-value) of an F
+statistic given the degrees of freedom for the numerator (dfR-dfF) and
+the degrees of freedom for the denominator (dfF).
+
+Usage: lfprob(dfnum, dfden, F) where usually dfnum=dfbn, dfden=dfwn
+"""
+ p = betai(0.5 * dfden, 0.5 * dfnum, dfden / float(dfden + dfnum * F))
+ return p
+
+
+def lbetacf(a, b, x):
+ """
+This function evaluates the continued fraction form of the incomplete
+Beta function, betai. (Adapted from: Numerical Recipies in C.)
+
+Usage: lbetacf(a,b,x)
+"""
+ ITMAX = 200
+ EPS = 3.0e-7
+
+ bm = az = am = 1.0
+ qab = a + b
+ qap = a + 1.0
+ qam = a - 1.0
+ bz = 1.0 - qab * x / qap
+ for i in range(ITMAX + 1):
+ em = float(i + 1)
+ tem = em + em
+ d = em * (b - em) * x / ((qam + tem) * (a + tem))
+ ap = az + d * am
+ bp = bz + d * bm
+ d = -(a + em) * (qab + em) * x / ((qap + tem) * (a + tem))
+ app = ap + d * az
+ bpp = bp + d * bz
+ aold = az
+ am = ap / bpp
+ bm = bp / bpp
+ az = app / bpp
+ bz = 1.0
+ if (abs(az - aold) < (EPS * abs(az))):
+ return az
+ print 'a or b too big, or ITMAX too small in Betacf.'
+
+
+def lgammln(xx):
+ """
+Returns the gamma function of xx.
+ Gamma(z) = Integral(0,infinity) of t^(z-1)exp(-t) dt.
+(Adapted from: Numerical Recipies in C.)
+
+Usage: lgammln(xx)
+"""
+
+ coeff = [76.18009173, -86.50532033, 24.01409822, -1.231739516, 0.120858003e-2,
+ -0.536382e-5]
+ x = xx - 1.0
+ tmp = x + 5.5
+ tmp = tmp - (x + 0.5) * math.log(tmp)
+ ser = 1.0
+ for j in range(len(coeff)):
+ x = x + 1
+ ser = ser + coeff[j] / x
+ return -tmp + math.log(2.50662827465 * ser)
+
+
+def lbetai(a, b, x):
+ """
+Returns the incomplete beta function:
+
+ I-sub-x(a,b) = 1/B(a,b)*(Integral(0,x) of t^(a-1)(1-t)^(b-1) dt)
+
+where a,b>0 and B(a,b) = G(a)*G(b)/(G(a+b)) where G(a) is the gamma
+function of a. The continued fraction formulation is implemented here,
+using the betacf function. (Adapted from: Numerical Recipies in C.)
+
+Usage: lbetai(a,b,x)
+"""
+ if (x < 0.0 or x > 1.0):
+ raise ValueError, 'Bad x in lbetai'
+ if (x == 0.0 or x == 1.0):
+ bt = 0.0
+ else:
+ bt = math.exp(gammln(a + b) - gammln(a) - gammln(b) + a * math.log(x) + b *
+ math.log(1.0 - x))
+ if (x < (a + 1.0) / (a + b + 2.0)):
+ return bt * betacf(a, b, x) / float(a)
+ else:
+ return 1.0 - bt * betacf(b, a, 1.0 - x) / float(b)
+
+####################################
+####### ANOVA CALCULATIONS #######
+####################################
+
+
+def lF_oneway(*lists):
+ """
+Performs a 1-way ANOVA, returning an F-value and probability given
+any number of groups. From Heiman, pp.394-7.
+
+Usage: F_oneway(*lists) where *lists is any number of lists, one per
+ treatment group
+Returns: F value, one-tailed p-value
+"""
+ a = len(lists) # ANOVA on 'a' groups, each in it's own list
+ means = [0] * a
+ vars = [0] * a
+ ns = [0] * a
+ alldata = []
+ tmp = map(N.array, lists)
+ means = map(amean, tmp)
+ vars = map(avar, tmp)
+ ns = map(len, lists)
+ for i in range(len(lists)):
+ alldata = alldata + lists[i]
+ alldata = N.array(alldata)
+ bign = len(alldata)
+ sstot = ass(alldata) - (asquare_of_sums(alldata) / float(bign))
+ ssbn = 0
+ for list in lists:
+ ssbn = ssbn + asquare_of_sums(N.array(list)) / float(len(list))
+ ssbn = ssbn - (asquare_of_sums(alldata) / float(bign))
+ sswn = sstot - ssbn
+ dfbn = a - 1
+ dfwn = bign - a
+ msb = ssbn / float(dfbn)
+ msw = sswn / float(dfwn)
+ f = msb / msw
+ prob = fprob(dfbn, dfwn, f)
+ return f, prob
+
+
+def lF_value(ER, EF, dfnum, dfden):
+ """
+Returns an F-statistic given the following:
+ ER = error associated with the null hypothesis (the Restricted model)
+ EF = error associated with the alternate hypothesis (the Full model)
+ dfR-dfF = degrees of freedom of the numerator
+ dfF = degrees of freedom associated with the denominator/Full model
+
+Usage: lF_value(ER,EF,dfnum,dfden)
+"""
+ return ((ER - EF) / float(dfnum) / (EF / float(dfden)))
+
+####################################
+######## SUPPORT FUNCTIONS #######
+####################################
+
+
+def writecc(listoflists, file, writetype='w', extra=2):
+ """
+Writes a list of lists to a file in columns, customized by the max
+size of items within the columns (max size of items in col, +2 characters)
+to specified file. File-overwrite is the default.
+
+Usage: writecc (listoflists,file,writetype='w',extra=2)
+Returns: None
+"""
+ if type(listoflists[0]) not in [ListType, TupleType]:
+ listoflists = [listoflists]
+ outfile = open(file, writetype)
+ rowstokill = []
+ list2print = copy.deepcopy(listoflists)
+ for i in range(len(listoflists)):
+ if listoflists[i] == [
+ '\n'
+ ] or listoflists[i] == '\n' or listoflists[i] == 'dashes':
+ rowstokill = rowstokill + [i]
+ rowstokill.reverse()
+ for row in rowstokill:
+ del list2print[row]
+ maxsize = [0] * len(list2print[0])
+ for col in range(len(list2print[0])):
+ items = pstat.colex(list2print, col)
+ items = map(pstat.makestr, items)
+ maxsize[col] = max(map(len, items)) + extra
+ for row in listoflists:
+ if row == ['\n'] or row == '\n':
+ outfile.write('\n')
+ elif row == ['dashes'] or row == 'dashes':
+ dashes = [0] * len(maxsize)
+ for j in range(len(maxsize)):
+ dashes[j] = '-' * (maxsize[j] - 2)
+ outfile.write(pstat.lineincustcols(dashes, maxsize))
+ else:
+ outfile.write(pstat.lineincustcols(row, maxsize))
+ outfile.write('\n')
+ outfile.close()
+ return None
+
+
+def lincr(l, cap): # to increment a list up to a max-list of 'cap'
+ """
+Simulate a counting system from an n-dimensional list.
+
+Usage: lincr(l,cap) l=list to increment, cap=max values for each list pos'n
+Returns: next set of values for list l, OR -1 (if overflow)
+"""
+ l[0] = l[0] + 1 # e.g., [0,0,0] --> [2,4,3] (=cap)
+ for i in range(len(l)):
+ if l[i] > cap[i] and i < len(l) - 1: # if carryover AND not done
+ l[i] = 0
+ l[i + 1] = l[i + 1] + 1
+ elif l[i] > cap[i] and i == len(
+ l) - 1: # overflow past last column, must be finished
+ l = -1
+ return l
+
+
+def lsum(inlist):
+ """
+Returns the sum of the items in the passed list.
+
+Usage: lsum(inlist)
+"""
+ s = 0
+ for item in inlist:
+ s = s + item
+ return s
+
+
+def lcumsum(inlist):
+ """
+Returns a list consisting of the cumulative sum of the items in the
+passed list.
+
+Usage: lcumsum(inlist)
+"""
+ newlist = copy.deepcopy(inlist)
+ for i in range(1, len(newlist)):
+ newlist[i] = newlist[i] + newlist[i - 1]
+ return newlist
+
+
+def lss(inlist):
+ """
+Squares each value in the passed list, adds up these squares and
+returns the result.
+
+Usage: lss(inlist)
+"""
+ ss = 0
+ for item in inlist:
+ ss = ss + item * item
+ return ss
+
+
+def lsummult(list1, list2):
+ """
+Multiplies elements in list1 and list2, element by element, and
+returns the sum of all resulting multiplications. Must provide equal
+length lists.
+
+Usage: lsummult(list1,list2)
+"""
+ if len(list1) <> len(list2):
+ raise ValueError, 'Lists not equal length in summult.'
+ s = 0
+ for item1, item2 in pstat.abut(list1, list2):
+ s = s + item1 * item2
+ return s
+
+
+def lsumdiffsquared(x, y):
+ """
+Takes pairwise differences of the values in lists x and y, squares
+these differences, and returns the sum of these squares.
+
+Usage: lsumdiffsquared(x,y)
+Returns: sum[(x[i]-y[i])**2]
+"""
+ sds = 0
+ for i in range(len(x)):
+ sds = sds + (x[i] - y[i])**2
+ return sds
+
+
+def lsquare_of_sums(inlist):
+ """
+Adds the values in the passed list, squares the sum, and returns
+the result.
+
+Usage: lsquare_of_sums(inlist)
+Returns: sum(inlist[i])**2
+"""
+ s = sum(inlist)
+ return float(s) * s
+
+
+def lshellsort(inlist):
+ """
+Shellsort algorithm. Sorts a 1D-list.
+
+Usage: lshellsort(inlist)
+Returns: sorted-inlist, sorting-index-vector (for original list)
+"""
+ n = len(inlist)
+ svec = copy.deepcopy(inlist)
+ ivec = range(n)
+ gap = n / 2 # integer division needed
+ while gap > 0:
+ for i in range(gap, n):
+ for j in range(i - gap, -1, -gap):
+ while j >= 0 and svec[j] > svec[j + gap]:
+ temp = svec[j]
+ svec[j] = svec[j + gap]
+ svec[j + gap] = temp
+ itemp = ivec[j]
+ ivec[j] = ivec[j + gap]
+ ivec[j + gap] = itemp
+ gap = gap / 2 # integer division needed
+# svec is now sorted inlist, and ivec has the order svec[i] = vec[ivec[i]]
+ return svec, ivec
+
+
+def lrankdata(inlist):
+ """
+Ranks the data in inlist, dealing with ties appropritely. Assumes
+a 1D inlist. Adapted from Gary Perlman's |Stat ranksort.
+
+Usage: lrankdata(inlist)
+Returns: a list of length equal to inlist, containing rank scores
+"""
+ n = len(inlist)
+ svec, ivec = shellsort(inlist)
+ sumranks = 0
+ dupcount = 0
+ newlist = [0] * n
+ for i in range(n):
+ sumranks = sumranks + i
+ dupcount = dupcount + 1
+ if i == n - 1 or svec[i] <> svec[i + 1]:
+ averank = sumranks / float(dupcount) + 1
+ for j in range(i - dupcount + 1, i + 1):
+ newlist[ivec[j]] = averank
+ sumranks = 0
+ dupcount = 0
+ return newlist
+
+
+def outputpairedstats(fname, writemode, name1, n1, m1, se1, min1, max1, name2,
+ n2, m2, se2, min2, max2, statname, stat, prob):
+ """
+Prints or write to a file stats for two groups, using the name, n,
+mean, sterr, min and max for each group, as well as the statistic name,
+its value, and the associated p-value.
+
+Usage: outputpairedstats(fname,writemode,
+ name1,n1,mean1,stderr1,min1,max1,
+ name2,n2,mean2,stderr2,min2,max2,
+ statname,stat,prob)
+Returns: None
+"""
+ suffix = '' # for *s after the p-value
+ try:
+ x = prob.shape
+ prob = prob[0]
+ except:
+ pass
+ if prob < 0.001:
+ suffix = ' ***'
+ elif prob < 0.01:
+ suffix = ' **'
+ elif prob < 0.05:
+ suffix = ' *'
+ title = [['Name', 'N', 'Mean', 'SD', 'Min', 'Max']]
+ lofl = title + [[name1, n1, round(m1, 3), round(
+ math.sqrt(se1), 3), min1, max1], [name2, n2, round(m2, 3), round(
+ math.sqrt(se2), 3), min2, max2]]
+ if type(fname) <> StringType or len(fname) == 0:
+ print
+ print statname
+ print
+ pstat.printcc(lofl)
+ print
+ try:
+ if stat.shape == ():
+ stat = stat[0]
+ if prob.shape == ():
+ prob = prob[0]
+ except:
+ pass
+ print 'Test statistic = ', round(stat, 3), ' p = ', round(prob, 3), suffix
+ print
+ else:
+ file = open(fname, writemode)
+ file.write('\n' + statname + '\n\n')
+ file.close()
+ writecc(lofl, fname, 'a')
+ file = open(fname, 'a')
+ try:
+ if stat.shape == ():
+ stat = stat[0]
+ if prob.shape == ():
+ prob = prob[0]
+ except:
+ pass
+ file.write(pstat.list2string(['\nTest statistic = ', round(stat, 4),
+ ' p = ', round(prob, 4), suffix, '\n\n']))
+ file.close()
+ return None
+
+
+def lfindwithin(data):
+ """
+Returns an integer representing a binary vector, where 1=within-
+subject factor, 0=between. Input equals the entire data 2D list (i.e.,
+column 0=random factor, column -1=measured values (those two are skipped).
+Note: input data is in |Stat format ... a list of lists ("2D list") with
+one row per measured value, first column=subject identifier, last column=
+score, one in-between column per factor (these columns contain level
+designations on each factor). See also stats.anova.__doc__.
+
+Usage: lfindwithin(data) data in |Stat format
+"""
+
+ numfact = len(data[0]) - 1
+ withinvec = 0
+ for col in range(1, numfact):
+ examplelevel = pstat.unique(pstat.colex(data, col))[0]
+ rows = pstat.linexand(data, col, examplelevel) # get 1 level of this factor
+ factsubjs = pstat.unique(pstat.colex(rows, 0))
+ allsubjs = pstat.unique(pstat.colex(data, 0))
+ if len(factsubjs) == len(allsubjs): # fewer Ss than scores on this factor?
+ withinvec = withinvec + (1 << col)
+ return withinvec
+
+#########################################################
+#########################################################
+####### DISPATCH LISTS AND TUPLES TO ABOVE FCNS #########
+#########################################################
+#########################################################
+
+## CENTRAL TENDENCY:
+geometricmean = Dispatch((lgeometricmean, (ListType, TupleType)),)
+harmonicmean = Dispatch((lharmonicmean, (ListType, TupleType)),)
+mean = Dispatch((lmean, (ListType, TupleType)),)
+median = Dispatch((lmedian, (ListType, TupleType)),)
+medianscore = Dispatch((lmedianscore, (ListType, TupleType)),)
+mode = Dispatch((lmode, (ListType, TupleType)),)
+
+## MOMENTS:
+moment = Dispatch((lmoment, (ListType, TupleType)),)
+variation = Dispatch((lvariation, (ListType, TupleType)),)
+skew = Dispatch((lskew, (ListType, TupleType)),)
+kurtosis = Dispatch((lkurtosis, (ListType, TupleType)),)
+describe = Dispatch((ldescribe, (ListType, TupleType)),)
+
+## FREQUENCY STATISTICS:
+itemfreq = Dispatch((litemfreq, (ListType, TupleType)),)
+scoreatpercentile = Dispatch((lscoreatpercentile, (ListType, TupleType)),)
+percentileofscore = Dispatch((lpercentileofscore, (ListType, TupleType)),)
+histogram = Dispatch((lhistogram, (ListType, TupleType)),)
+cumfreq = Dispatch((lcumfreq, (ListType, TupleType)),)
+relfreq = Dispatch((lrelfreq, (ListType, TupleType)),)
+
+## VARIABILITY:
+obrientransform = Dispatch((lobrientransform, (ListType, TupleType)),)
+samplevar = Dispatch((lsamplevar, (ListType, TupleType)),)
+samplestdev = Dispatch((lsamplestdev, (ListType, TupleType)),)
+var = Dispatch((lvar, (ListType, TupleType)),)
+stdev = Dispatch((lstdev, (ListType, TupleType)),)
+sterr = Dispatch((lsterr, (ListType, TupleType)),)
+sem = Dispatch((lsem, (ListType, TupleType)),)
+z = Dispatch((lz, (ListType, TupleType)),)
+zs = Dispatch((lzs, (ListType, TupleType)),)
+
+## TRIMMING FCNS:
+trimboth = Dispatch((ltrimboth, (ListType, TupleType)),)
+trim1 = Dispatch((ltrim1, (ListType, TupleType)),)
+
+## CORRELATION FCNS:
+paired = Dispatch((lpaired, (ListType, TupleType)),)
+pearsonr = Dispatch((lpearsonr, (ListType, TupleType)),)
+spearmanr = Dispatch((lspearmanr, (ListType, TupleType)),)
+pointbiserialr = Dispatch((lpointbiserialr, (ListType, TupleType)),)
+kendalltau = Dispatch((lkendalltau, (ListType, TupleType)),)
+linregress = Dispatch((llinregress, (ListType, TupleType)),)
+
+## INFERENTIAL STATS:
+ttest_1samp = Dispatch((lttest_1samp, (ListType, TupleType)),)
+ttest_ind = Dispatch((lttest_ind, (ListType, TupleType)),)
+ttest_rel = Dispatch((lttest_rel, (ListType, TupleType)),)
+chisquare = Dispatch((lchisquare, (ListType, TupleType)),)
+ks_2samp = Dispatch((lks_2samp, (ListType, TupleType)),)
+mannwhitneyu = Dispatch((lmannwhitneyu, (ListType, TupleType)),)
+ranksums = Dispatch((lranksums, (ListType, TupleType)),)
+tiecorrect = Dispatch((ltiecorrect, (ListType, TupleType)),)
+wilcoxont = Dispatch((lwilcoxont, (ListType, TupleType)),)
+kruskalwallish = Dispatch((lkruskalwallish, (ListType, TupleType)),)
+friedmanchisquare = Dispatch((lfriedmanchisquare, (ListType, TupleType)),)
+
+## PROBABILITY CALCS:
+chisqprob = Dispatch((lchisqprob, (IntType, FloatType)),)
+zprob = Dispatch((lzprob, (IntType, FloatType)),)
+ksprob = Dispatch((lksprob, (IntType, FloatType)),)
+fprob = Dispatch((lfprob, (IntType, FloatType)),)
+betacf = Dispatch((lbetacf, (IntType, FloatType)),)
+betai = Dispatch((lbetai, (IntType, FloatType)),)
+erfcc = Dispatch((lerfcc, (IntType, FloatType)),)
+gammln = Dispatch((lgammln, (IntType, FloatType)),)
+
+## ANOVA FUNCTIONS:
+F_oneway = Dispatch((lF_oneway, (ListType, TupleType)),)
+F_value = Dispatch((lF_value, (ListType, TupleType)),)
+
+## SUPPORT FUNCTIONS:
+incr = Dispatch((lincr, (ListType, TupleType)),)
+sum = Dispatch((lsum, (ListType, TupleType)),)
+cumsum = Dispatch((lcumsum, (ListType, TupleType)),)
+ss = Dispatch((lss, (ListType, TupleType)),)
+summult = Dispatch((lsummult, (ListType, TupleType)),)
+square_of_sums = Dispatch((lsquare_of_sums, (ListType, TupleType)),)
+sumdiffsquared = Dispatch((lsumdiffsquared, (ListType, TupleType)),)
+shellsort = Dispatch((lshellsort, (ListType, TupleType)),)
+rankdata = Dispatch((lrankdata, (ListType, TupleType)),)
+findwithin = Dispatch((lfindwithin, (ListType, TupleType)),)
+
+#============= THE ARRAY-VERSION OF THE STATS FUNCTIONS ===============
+#============= THE ARRAY-VERSION OF THE STATS FUNCTIONS ===============
+#============= THE ARRAY-VERSION OF THE STATS FUNCTIONS ===============
+#============= THE ARRAY-VERSION OF THE STATS FUNCTIONS ===============
+#============= THE ARRAY-VERSION OF THE STATS FUNCTIONS ===============
+#============= THE ARRAY-VERSION OF THE STATS FUNCTIONS ===============
+#============= THE ARRAY-VERSION OF THE STATS FUNCTIONS ===============
+#============= THE ARRAY-VERSION OF THE STATS FUNCTIONS ===============
+#============= THE ARRAY-VERSION OF THE STATS FUNCTIONS ===============
+#============= THE ARRAY-VERSION OF THE STATS FUNCTIONS ===============
+#============= THE ARRAY-VERSION OF THE STATS FUNCTIONS ===============
+#============= THE ARRAY-VERSION OF THE STATS FUNCTIONS ===============
+#============= THE ARRAY-VERSION OF THE STATS FUNCTIONS ===============
+#============= THE ARRAY-VERSION OF THE STATS FUNCTIONS ===============
+#============= THE ARRAY-VERSION OF THE STATS FUNCTIONS ===============
+#============= THE ARRAY-VERSION OF THE STATS FUNCTIONS ===============
+#============= THE ARRAY-VERSION OF THE STATS FUNCTIONS ===============
+#============= THE ARRAY-VERSION OF THE STATS FUNCTIONS ===============
+#============= THE ARRAY-VERSION OF THE STATS FUNCTIONS ===============
+
+try: # DEFINE THESE *ONLY* IF NUMERIC IS AVAILABLE
+ import numpy as N
+ import numpy.linalg as LA
+
+ #####################################
+ ######## ACENTRAL TENDENCY ########
+ #####################################
+
+
+ def ageometricmean(inarray, dimension=None, keepdims=0):
+ """
+Calculates the geometric mean of the values in the passed array.
+That is: n-th root of (x1 * x2 * ... * xn). Defaults to ALL values in
+the passed array. Use dimension=None to flatten array first. REMEMBER: if
+dimension=0, it collapses over dimension 0 ('rows' in a 2D array) only, and
+if dimension is a sequence, it collapses over all specified dimensions. If
+keepdims is set to 1, the resulting array will have as many dimensions as
+inarray, with only 1 'level' per dim that was collapsed over.
+
+Usage: ageometricmean(inarray,dimension=None,keepdims=0)
+Returns: geometric mean computed over dim(s) listed in dimension
+"""
+ inarray = N.array(inarray, N.float_)
+ if dimension == None:
+ inarray = N.ravel(inarray)
+ size = len(inarray)
+ mult = N.power(inarray, 1.0 / size)
+ mult = N.multiply.reduce(mult)
+ elif type(dimension) in [IntType, FloatType]:
+ size = inarray.shape[dimension]
+ mult = N.power(inarray, 1.0 / size)
+ mult = N.multiply.reduce(mult, dimension)
+ if keepdims == 1:
+ shp = list(inarray.shape)
+ shp[dimension] = 1
+ sum = N.reshape(sum, shp)
+ else: # must be a SEQUENCE of dims to average over
+ dims = list(dimension)
+ dims.sort()
+ dims.reverse()
+ size = N.array(N.multiply.reduce(N.take(inarray.shape, dims)), N.float_)
+ mult = N.power(inarray, 1.0 / size)
+ for dim in dims:
+ mult = N.multiply.reduce(mult, dim)
+ if keepdims == 1:
+ shp = list(inarray.shape)
+ for dim in dims:
+ shp[dim] = 1
+ mult = N.reshape(mult, shp)
+ return mult
+
+ def aharmonicmean(inarray, dimension=None, keepdims=0):
+ """
+Calculates the harmonic mean of the values in the passed array.
+That is: n / (1/x1 + 1/x2 + ... + 1/xn). Defaults to ALL values in
+the passed array. Use dimension=None to flatten array first. REMEMBER: if
+dimension=0, it collapses over dimension 0 ('rows' in a 2D array) only, and
+if dimension is a sequence, it collapses over all specified dimensions. If
+keepdims is set to 1, the resulting array will have as many dimensions as
+inarray, with only 1 'level' per dim that was collapsed over.
+
+Usage: aharmonicmean(inarray,dimension=None,keepdims=0)
+Returns: harmonic mean computed over dim(s) in dimension
+"""
+ inarray = inarray.astype(N.float_)
+ if dimension == None:
+ inarray = N.ravel(inarray)
+ size = len(inarray)
+ s = N.add.reduce(1.0 / inarray)
+ elif type(dimension) in [IntType, FloatType]:
+ size = float(inarray.shape[dimension])
+ s = N.add.reduce(1.0 / inarray, dimension)
+ if keepdims == 1:
+ shp = list(inarray.shape)
+ shp[dimension] = 1
+ s = N.reshape(s, shp)
+ else: # must be a SEQUENCE of dims to average over
+ dims = list(dimension)
+ dims.sort()
+ nondims = []
+ for i in range(len(inarray.shape)):
+ if i not in dims:
+ nondims.append(i)
+ tinarray = N.transpose(inarray, nondims + dims) # put keep-dims first
+ idx = [0] * len(nondims)
+ if idx == []:
+ size = len(N.ravel(inarray))
+ s = asum(1.0 / inarray)
+ if keepdims == 1:
+ s = N.reshape([s], N.ones(len(inarray.shape)))
+ else:
+ idx[0] = -1
+ loopcap = N.array(tinarray.shape[0:len(nondims)]) - 1
+ s = N.zeros(loopcap + 1, N.float_)
+ while incr(idx, loopcap) <> -1:
+ s[idx] = asum(1.0 / tinarray[idx])
+ size = N.multiply.reduce(N.take(inarray.shape, dims))
+ if keepdims == 1:
+ shp = list(inarray.shape)
+ for dim in dims:
+ shp[dim] = 1
+ s = N.reshape(s, shp)
+ return size / s
+
+ def amean(inarray, dimension=None, keepdims=0):
+ """
+Calculates the arithmatic mean of the values in the passed array.
+That is: 1/n * (x1 + x2 + ... + xn). Defaults to ALL values in the
+passed array. Use dimension=None to flatten array first. REMEMBER: if
+dimension=0, it collapses over dimension 0 ('rows' in a 2D array) only, and
+if dimension is a sequence, it collapses over all specified dimensions. If
+keepdims is set to 1, the resulting array will have as many dimensions as
+inarray, with only 1 'level' per dim that was collapsed over.
+
+Usage: amean(inarray,dimension=None,keepdims=0)
+Returns: arithematic mean calculated over dim(s) in dimension
+"""
+ if inarray.dtype in [N.int_, N.short, N.ubyte]:
+ inarray = inarray.astype(N.float_)
+ if dimension == None:
+ inarray = N.ravel(inarray)
+ sum = N.add.reduce(inarray)
+ denom = float(len(inarray))
+ elif type(dimension) in [IntType, FloatType]:
+ sum = asum(inarray, dimension)
+ denom = float(inarray.shape[dimension])
+ if keepdims == 1:
+ shp = list(inarray.shape)
+ shp[dimension] = 1
+ sum = N.reshape(sum, shp)
+ else: # must be a TUPLE of dims to average over
+ dims = list(dimension)
+ dims.sort()
+ dims.reverse()
+ sum = inarray * 1.0
+ for dim in dims:
+ sum = N.add.reduce(sum, dim)
+ denom = N.array(N.multiply.reduce(N.take(inarray.shape, dims)), N.float_)
+ if keepdims == 1:
+ shp = list(inarray.shape)
+ for dim in dims:
+ shp[dim] = 1
+ sum = N.reshape(sum, shp)
+ return sum / denom
+
+ def amedian(inarray, numbins=1000):
+ """
+Calculates the COMPUTED median value of an array of numbers, given the
+number of bins to use for the histogram (more bins approaches finding the
+precise median value of the array; default number of bins = 1000). From
+G.W. Heiman's Basic Stats, or CRC Probability & Statistics.
+NOTE: THIS ROUTINE ALWAYS uses the entire passed array (flattens it first).
+
+Usage: amedian(inarray,numbins=1000)
+Returns: median calculated over ALL values in inarray
+"""
+ inarray = N.ravel(inarray)
+ (hist, smallest, binsize, extras) = ahistogram(inarray, numbins,
+ [min(inarray), max(inarray)])
+ cumhist = N.cumsum(hist) # make cumulative histogram
+ otherbins = N.greater_equal(cumhist, len(inarray) / 2.0)
+ otherbins = list(otherbins) # list of 0/1s, 1s start at median bin
+ cfbin = otherbins.index(1) # get 1st(!) index holding 50%ile score
+ LRL = smallest + binsize * cfbin # get lower read limit of that bin
+ cfbelow = N.add.reduce(hist[0:cfbin]) # cum. freq. below bin
+ freq = hist[cfbin] # frequency IN the 50%ile bin
+ median = LRL + (
+ (len(inarray) / 2.0 - cfbelow) / float(freq)) * binsize # MEDIAN
+ return median
+
+ def amedianscore(inarray, dimension=None):
+ """
+Returns the 'middle' score of the passed array. If there is an even
+number of scores, the mean of the 2 middle scores is returned. Can function
+with 1D arrays, or on the FIRST dimension of 2D arrays (i.e., dimension can
+be None, to pre-flatten the array, or else dimension must equal 0).
+
+Usage: amedianscore(inarray,dimension=None)
+Returns: 'middle' score of the array, or the mean of the 2 middle scores
+"""
+ if dimension == None:
+ inarray = N.ravel(inarray)
+ dimension = 0
+ inarray = N.sort(inarray, dimension)
+ if inarray.shape[dimension] % 2 == 0: # if even number of elements
+ indx = inarray.shape[dimension] / 2 # integer division correct
+ median = N.asarray(inarray[indx] + inarray[indx - 1]) / 2.0
+ else:
+ indx = inarray.shape[dimension] / 2 # integer division correct
+ median = N.take(inarray, [indx], dimension)
+ if median.shape == (1,):
+ median = median[0]
+ return median
+
+ def amode(a, dimension=None):
+ """
+Returns an array of the modal (most common) score in the passed array.
+If there is more than one such score, ONLY THE FIRST is returned.
+The bin-count for the modal values is also returned. Operates on whole
+array (dimension=None), or on a given dimension.
+
+Usage: amode(a, dimension=None)
+Returns: array of bin-counts for mode(s), array of corresponding modal values
+"""
+
+ if dimension == None:
+ a = N.ravel(a)
+ dimension = 0
+ scores = pstat.aunique(N.ravel(a)) # get ALL unique values
+ testshape = list(a.shape)
+ testshape[dimension] = 1
+ oldmostfreq = N.zeros(testshape)
+ oldcounts = N.zeros(testshape)
+ for score in scores:
+ template = N.equal(a, score)
+ counts = asum(template, dimension, 1)
+ mostfrequent = N.where(counts > oldcounts, score, oldmostfreq)
+ oldcounts = N.where(counts > oldcounts, counts, oldcounts)
+ oldmostfreq = mostfrequent
+ return oldcounts, mostfrequent
+
+ def atmean(a, limits=None, inclusive=(1, 1)):
+ """
+Returns the arithmetic mean of all values in an array, ignoring values
+strictly outside the sequence passed to 'limits'. Note: either limit
+in the sequence, or the value of limits itself, can be set to None. The
+inclusive list/tuple determines whether the lower and upper limiting bounds
+(respectively) are open/exclusive (0) or closed/inclusive (1).
+
+Usage: atmean(a,limits=None,inclusive=(1,1))
+"""
+ if a.dtype in [N.int_, N.short, N.ubyte]:
+ a = a.astype(N.float_)
+ if limits == None:
+ return mean(a)
+ assert type(limits) in [ListType, TupleType, N.ndarray
+ ], 'Wrong type for limits in atmean'
+ if inclusive[0]:
+ lowerfcn = N.greater_equal
+ else:
+ lowerfcn = N.greater
+ if inclusive[1]:
+ upperfcn = N.less_equal
+ else:
+ upperfcn = N.less
+ if limits[0] > N.maximum.reduce(N.ravel(a)) or limits[1] < N.minimum.reduce(
+ N.ravel(a)):
+ raise ValueError, 'No array values within given limits (atmean).'
+ elif limits[0] == None and limits[1] <> None:
+ mask = upperfcn(a, limits[1])
+ elif limits[0] <> None and limits[1] == None:
+ mask = lowerfcn(a, limits[0])
+ elif limits[0] <> None and limits[1] <> None:
+ mask = lowerfcn(a, limits[0]) * upperfcn(a, limits[1])
+ s = float(N.add.reduce(N.ravel(a * mask)))
+ n = float(N.add.reduce(N.ravel(mask)))
+ return s / n
+
+ def atvar(a, limits=None, inclusive=(1, 1)):
+ """
+Returns the sample variance of values in an array, (i.e., using N-1),
+ignoring values strictly outside the sequence passed to 'limits'.
+Note: either limit in the sequence, or the value of limits itself,
+can be set to None. The inclusive list/tuple determines whether the lower
+and upper limiting bounds (respectively) are open/exclusive (0) or
+closed/inclusive (1). ASSUMES A FLAT ARRAY (OR ELSE PREFLATTENS).
+
+Usage: atvar(a,limits=None,inclusive=(1,1))
+"""
+ a = a.astype(N.float_)
+ if limits == None or limits == [None, None]:
+ return avar(a)
+ assert type(limits) in [ListType, TupleType, N.ndarray
+ ], 'Wrong type for limits in atvar'
+ if inclusive[0]:
+ lowerfcn = N.greater_equal
+ else:
+ lowerfcn = N.greater
+ if inclusive[1]:
+ upperfcn = N.less_equal
+ else:
+ upperfcn = N.less
+ if limits[0] > N.maximum.reduce(N.ravel(a)) or limits[1] < N.minimum.reduce(
+ N.ravel(a)):
+ raise ValueError, 'No array values within given limits (atvar).'
+ elif limits[0] == None and limits[1] <> None:
+ mask = upperfcn(a, limits[1])
+ elif limits[0] <> None and limits[1] == None:
+ mask = lowerfcn(a, limits[0])
+ elif limits[0] <> None and limits[1] <> None:
+ mask = lowerfcn(a, limits[0]) * upperfcn(a, limits[1])
+
+ a = N.compress(mask, a) # squish out excluded values
+ return avar(a)
+
+ def atmin(a, lowerlimit=None, dimension=None, inclusive=1):
+ """
+Returns the minimum value of a, along dimension, including only values less
+than (or equal to, if inclusive=1) lowerlimit. If the limit is set to None,
+all values in the array are used.
+
+Usage: atmin(a,lowerlimit=None,dimension=None,inclusive=1)
+"""
+ if inclusive:
+ lowerfcn = N.greater
+ else:
+ lowerfcn = N.greater_equal
+ if dimension == None:
+ a = N.ravel(a)
+ dimension = 0
+ if lowerlimit == None:
+ lowerlimit = N.minimum.reduce(N.ravel(a)) - 11
+ biggest = N.maximum.reduce(N.ravel(a))
+ ta = N.where(lowerfcn(a, lowerlimit), a, biggest)
+ return N.minimum.reduce(ta, dimension)
+
+ def atmax(a, upperlimit, dimension=None, inclusive=1):
+ """
+Returns the maximum value of a, along dimension, including only values greater
+than (or equal to, if inclusive=1) upperlimit. If the limit is set to None,
+a limit larger than the max value in the array is used.
+
+Usage: atmax(a,upperlimit,dimension=None,inclusive=1)
+"""
+ if inclusive:
+ upperfcn = N.less
+ else:
+ upperfcn = N.less_equal
+ if dimension == None:
+ a = N.ravel(a)
+ dimension = 0
+ if upperlimit == None:
+ upperlimit = N.maximum.reduce(N.ravel(a)) + 1
+ smallest = N.minimum.reduce(N.ravel(a))
+ ta = N.where(upperfcn(a, upperlimit), a, smallest)
+ return N.maximum.reduce(ta, dimension)
+
+ def atstdev(a, limits=None, inclusive=(1, 1)):
+ """
+Returns the standard deviation of all values in an array, ignoring values
+strictly outside the sequence passed to 'limits'. Note: either limit
+in the sequence, or the value of limits itself, can be set to None. The
+inclusive list/tuple determines whether the lower and upper limiting bounds
+(respectively) are open/exclusive (0) or closed/inclusive (1).
+
+Usage: atstdev(a,limits=None,inclusive=(1,1))
+"""
+ return N.sqrt(tvar(a, limits, inclusive))
+
+ def atsem(a, limits=None, inclusive=(1, 1)):
+ """
+Returns the standard error of the mean for the values in an array,
+(i.e., using N for the denominator), ignoring values strictly outside
+the sequence passed to 'limits'. Note: either limit in the sequence,
+or the value of limits itself, can be set to None. The inclusive list/tuple
+determines whether the lower and upper limiting bounds (respectively) are
+open/exclusive (0) or closed/inclusive (1).
+
+Usage: atsem(a,limits=None,inclusive=(1,1))
+"""
+ sd = tstdev(a, limits, inclusive)
+ if limits == None or limits == [None, None]:
+ n = float(len(N.ravel(a)))
+ limits = [min(a) - 1, max(a) + 1]
+ assert type(limits) in [ListType, TupleType, N.ndarray
+ ], 'Wrong type for limits in atsem'
+ if inclusive[0]:
+ lowerfcn = N.greater_equal
+ else:
+ lowerfcn = N.greater
+ if inclusive[1]:
+ upperfcn = N.less_equal
+ else:
+ upperfcn = N.less
+ if limits[0] > N.maximum.reduce(N.ravel(a)) or limits[1] < N.minimum.reduce(
+ N.ravel(a)):
+ raise ValueError, 'No array values within given limits (atsem).'
+ elif limits[0] == None and limits[1] <> None:
+ mask = upperfcn(a, limits[1])
+ elif limits[0] <> None and limits[1] == None:
+ mask = lowerfcn(a, limits[0])
+ elif limits[0] <> None and limits[1] <> None:
+ mask = lowerfcn(a, limits[0]) * upperfcn(a, limits[1])
+ term1 = N.add.reduce(N.ravel(a * a * mask))
+ n = float(N.add.reduce(N.ravel(mask)))
+ return sd / math.sqrt(n)
+
+#####################################
+############ AMOMENTS #############
+#####################################
+
+ def amoment(a, moment=1, dimension=None):
+ """
+Calculates the nth moment about the mean for a sample (defaults to the
+1st moment). Generally used to calculate coefficients of skewness and
+kurtosis. Dimension can equal None (ravel array first), an integer
+(the dimension over which to operate), or a sequence (operate over
+multiple dimensions).
+
+Usage: amoment(a,moment=1,dimension=None)
+Returns: appropriate moment along given dimension
+"""
+ if dimension == None:
+ a = N.ravel(a)
+ dimension = 0
+ if moment == 1:
+ return 0.0
+ else:
+ mn = amean(a, dimension, 1) # 1=keepdims
+ s = N.power((a - mn), moment)
+ return amean(s, dimension)
+
+ def avariation(a, dimension=None):
+ """
+Returns the coefficient of variation, as defined in CRC Standard
+Probability and Statistics, p.6. Dimension can equal None (ravel array
+first), an integer (the dimension over which to operate), or a
+sequence (operate over multiple dimensions).
+
+Usage: avariation(a,dimension=None)
+"""
+ return 100.0 * asamplestdev(a, dimension) / amean(a, dimension)
+
+ def askew(a, dimension=None):
+ """
+Returns the skewness of a distribution (normal ==> 0.0; >0 means extra
+weight in left tail). Use askewtest() to see if it's close enough.
+Dimension can equal None (ravel array first), an integer (the
+dimension over which to operate), or a sequence (operate over multiple
+dimensions).
+
+Usage: askew(a, dimension=None)
+Returns: skew of vals in a along dimension, returning ZERO where all vals equal
+"""
+ denom = N.power(amoment(a, 2, dimension), 1.5)
+ zero = N.equal(denom, 0)
+ if type(denom) == N.ndarray and asum(zero) <> 0:
+ print 'Number of zeros in askew: ', asum(zero)
+ denom = denom + zero # prevent divide-by-zero
+ return N.where(zero, 0, amoment(a, 3, dimension) / denom)
+
+ def akurtosis(a, dimension=None):
+ """
+Returns the kurtosis of a distribution (normal ==> 3.0; >3 means
+heavier in the tails, and usually more peaked). Use akurtosistest()
+to see if it's close enough. Dimension can equal None (ravel array
+first), an integer (the dimension over which to operate), or a
+sequence (operate over multiple dimensions).
+
+Usage: akurtosis(a,dimension=None)
+Returns: kurtosis of values in a along dimension, and ZERO where all vals equal
+"""
+ denom = N.power(amoment(a, 2, dimension), 2)
+ zero = N.equal(denom, 0)
+ if type(denom) == N.ndarray and asum(zero) <> 0:
+ print 'Number of zeros in akurtosis: ', asum(zero)
+ denom = denom + zero # prevent divide-by-zero
+ return N.where(zero, 0, amoment(a, 4, dimension) / denom)
+
+ def adescribe(inarray, dimension=None):
+ """
+Returns several descriptive statistics of the passed array. Dimension
+can equal None (ravel array first), an integer (the dimension over
+which to operate), or a sequence (operate over multiple dimensions).
+
+Usage: adescribe(inarray,dimension=None)
+Returns: n, (min,max), mean, standard deviation, skew, kurtosis
+"""
+ if dimension == None:
+ inarray = N.ravel(inarray)
+ dimension = 0
+ n = inarray.shape[dimension]
+ mm = (N.minimum.reduce(inarray), N.maximum.reduce(inarray))
+ m = amean(inarray, dimension)
+ sd = astdev(inarray, dimension)
+ skew = askew(inarray, dimension)
+ kurt = akurtosis(inarray, dimension)
+ return n, mm, m, sd, skew, kurt
+
+#####################################
+######## NORMALITY TESTS ##########
+#####################################
+
+ def askewtest(a, dimension=None):
+ """
+Tests whether the skew is significantly different from a normal
+distribution. Dimension can equal None (ravel array first), an
+integer (the dimension over which to operate), or a sequence (operate
+over multiple dimensions).
+
+Usage: askewtest(a,dimension=None)
+Returns: z-score and 2-tail z-probability
+"""
+ if dimension == None:
+ a = N.ravel(a)
+ dimension = 0
+ b2 = askew(a, dimension)
+ n = float(a.shape[dimension])
+ y = b2 * N.sqrt(((n + 1) * (n + 3)) / (6.0 * (n - 2)))
+ beta2 = (3.0 * (n * n + 27 * n - 70) * (n + 1) *
+ (n + 3)) / ((n - 2.0) * (n + 5) * (n + 7) * (n + 9))
+ W2 = -1 + N.sqrt(2 * (beta2 - 1))
+ delta = 1 / N.sqrt(N.log(N.sqrt(W2)))
+ alpha = N.sqrt(2 / (W2 - 1))
+ y = N.where(y == 0, 1, y)
+ Z = delta * N.log(y / alpha + N.sqrt((y / alpha)**2 + 1))
+ return Z, (1.0 - zprob(Z)) * 2
+
+ def akurtosistest(a, dimension=None):
+ """
+Tests whether a dataset has normal kurtosis (i.e.,
+kurtosis=3(n-1)/(n+1)) Valid only for n>20. Dimension can equal None
+(ravel array first), an integer (the dimension over which to operate),
+or a sequence (operate over multiple dimensions).
+
+Usage: akurtosistest(a,dimension=None)
+Returns: z-score and 2-tail z-probability, returns 0 for bad pixels
+"""
+ if dimension == None:
+ a = N.ravel(a)
+ dimension = 0
+ n = float(a.shape[dimension])
+ if n < 20:
+ print 'akurtosistest only valid for n>=20 ... continuing anyway, n=', n
+ b2 = akurtosis(a, dimension)
+ E = 3.0 * (n - 1) / (n + 1)
+ varb2 = 24.0 * n * (n - 2) * (n - 3) / ((n + 1) * (n + 1) * (n + 3) *
+ (n + 5))
+ x = (b2 - E) / N.sqrt(varb2)
+ sqrtbeta1 = 6.0 * (n * n - 5 * n + 2) / ((n + 7) * (n + 9)) * N.sqrt(
+ (6.0 * (n + 3) * (n + 5)) / (n * (n - 2) * (n - 3)))
+ A = 6.0 + 8.0 / sqrtbeta1 * (2.0 / sqrtbeta1 +
+ N.sqrt(1 + 4.0 / (sqrtbeta1**2)))
+ term1 = 1 - 2 / (9.0 * A)
+ denom = 1 + x * N.sqrt(2 / (A - 4.0))
+ denom = N.where(N.less(denom, 0), 99, denom)
+ term2 = N.where(
+ N.equal(denom, 0), term1, N.power(
+ (1 - 2.0 / A) / denom, 1 / 3.0))
+ Z = (term1 - term2) / N.sqrt(2 / (9.0 * A))
+ Z = N.where(N.equal(denom, 99), 0, Z)
+ return Z, (1.0 - zprob(Z)) * 2
+
+ def anormaltest(a, dimension=None):
+ """
+Tests whether skew and/OR kurtosis of dataset differs from normal
+curve. Can operate over multiple dimensions. Dimension can equal
+None (ravel array first), an integer (the dimension over which to
+operate), or a sequence (operate over multiple dimensions).
+
+Usage: anormaltest(a,dimension=None)
+Returns: z-score and 2-tail probability
+"""
+ if dimension == None:
+ a = N.ravel(a)
+ dimension = 0
+ s, p = askewtest(a, dimension)
+ k, p = akurtosistest(a, dimension)
+ k2 = N.power(s, 2) + N.power(k, 2)
+ return k2, achisqprob(k2, 2)
+
+#####################################
+###### AFREQUENCY FUNCTIONS #######
+#####################################
+
+ def aitemfreq(a):
+ """
+Returns a 2D array of item frequencies. Column 1 contains item values,
+column 2 contains their respective counts. Assumes a 1D array is passed.
+@@@sorting OK?
+
+Usage: aitemfreq(a)
+Returns: a 2D frequency table (col [0:n-1]=scores, col n=frequencies)
+"""
+ scores = pstat.aunique(a)
+ scores = N.sort(scores)
+ freq = N.zeros(len(scores))
+ for i in range(len(scores)):
+ freq[i] = N.add.reduce(N.equal(a, scores[i]))
+ return N.array(pstat.aabut(scores, freq))
+
+ def ascoreatpercentile(inarray, percent):
+ """
+Usage: ascoreatpercentile(inarray,percent) 0<percent<100
+Returns: score at given percentile, relative to inarray distribution
+"""
+ percent = percent / 100.0
+ targetcf = percent * len(inarray)
+ h, lrl, binsize, extras = histogram(inarray)
+ cumhist = cumsum(h * 1)
+ for i in range(len(cumhist)):
+ if cumhist[i] >= targetcf:
+ break
+ score = binsize * (
+ (targetcf - cumhist[i - 1]) / float(h[i])) + (lrl + binsize * i)
+ return score
+
+ def apercentileofscore(inarray, score, histbins=10, defaultlimits=None):
+ """
+Note: result of this function depends on the values used to histogram
+the data(!).
+
+Usage: apercentileofscore(inarray,score,histbins=10,defaultlimits=None)
+Returns: percentile-position of score (0-100) relative to inarray
+"""
+ h, lrl, binsize, extras = histogram(inarray, histbins, defaultlimits)
+ cumhist = cumsum(h * 1)
+ i = int((score - lrl) / float(binsize))
+ pct = (cumhist[i - 1] + ((score - (lrl + binsize * i)) / float(binsize)) *
+ h[i]) / float(len(inarray)) * 100
+ return pct
+
+ def ahistogram(inarray, numbins=10, defaultlimits=None, printextras=1):
+ """
+Returns (i) an array of histogram bin counts, (ii) the smallest value
+of the histogram binning, and (iii) the bin width (the last 2 are not
+necessarily integers). Default number of bins is 10. Defaultlimits
+can be None (the routine picks bins spanning all the numbers in the
+inarray) or a 2-sequence (lowerlimit, upperlimit). Returns all of the
+following: array of bin values, lowerreallimit, binsize, extrapoints.
+
+Usage: ahistogram(inarray,numbins=10,defaultlimits=None,printextras=1)
+Returns: (array of bin counts, bin-minimum, min-width, #-points-outside-range)
+"""
+ inarray = N.ravel(inarray) # flatten any >1D arrays
+ if (defaultlimits <> None):
+ lowerreallimit = defaultlimits[0]
+ upperreallimit = defaultlimits[1]
+ binsize = (upperreallimit - lowerreallimit) / float(numbins)
+ else:
+ Min = N.minimum.reduce(inarray)
+ Max = N.maximum.reduce(inarray)
+ estbinwidth = float(Max - Min) / float(numbins) + 1e-6
+ binsize = (Max - Min + estbinwidth) / float(numbins)
+ lowerreallimit = Min - binsize / 2.0 #lower real limit,1st bin
+ bins = N.zeros(numbins)
+ extrapoints = 0
+ for num in inarray:
+ try:
+ if (num - lowerreallimit) < 0:
+ extrapoints = extrapoints + 1
+ else:
+ bintoincrement = int((num - lowerreallimit) / float(binsize))
+ bins[bintoincrement] = bins[bintoincrement] + 1
+ except: # point outside lower/upper limits
+ extrapoints = extrapoints + 1
+ if (extrapoints > 0 and printextras == 1):
+ print '\nPoints outside given histogram range =', extrapoints
+ return (bins, lowerreallimit, binsize, extrapoints)
+
+ def acumfreq(a, numbins=10, defaultreallimits=None):
+ """
+Returns a cumulative frequency histogram, using the histogram function.
+Defaultreallimits can be None (use all data), or a 2-sequence containing
+lower and upper limits on values to include.
+
+Usage: acumfreq(a,numbins=10,defaultreallimits=None)
+Returns: array of cumfreq bin values, lowerreallimit, binsize, extrapoints
+"""
+ h, l, b, e = histogram(a, numbins, defaultreallimits)
+ cumhist = cumsum(h * 1)
+ return cumhist, l, b, e
+
+ def arelfreq(a, numbins=10, defaultreallimits=None):
+ """
+Returns a relative frequency histogram, using the histogram function.
+Defaultreallimits can be None (use all data), or a 2-sequence containing
+lower and upper limits on values to include.
+
+Usage: arelfreq(a,numbins=10,defaultreallimits=None)
+Returns: array of cumfreq bin values, lowerreallimit, binsize, extrapoints
+"""
+ h, l, b, e = histogram(a, numbins, defaultreallimits)
+ h = N.array(h / float(a.shape[0]))
+ return h, l, b, e
+
+#####################################
+###### AVARIABILITY FUNCTIONS #####
+#####################################
+
+ def aobrientransform(*args):
+ """
+Computes a transform on input data (any number of columns). Used to
+test for homogeneity of variance prior to running one-way stats. Each
+array in *args is one level of a factor. If an F_oneway() run on the
+transformed data and found significant, variances are unequal. From
+Maxwell and Delaney, p.112.
+
+Usage: aobrientransform(*args) *args = 1D arrays, one per level of factor
+Returns: transformed data for use in an ANOVA
+"""
+ TINY = 1e-10
+ k = len(args)
+ n = N.zeros(k, N.float_)
+ v = N.zeros(k, N.float_)
+ m = N.zeros(k, N.float_)
+ nargs = []
+ for i in range(k):
+ nargs.append(args[i].astype(N.float_))
+ n[i] = float(len(nargs[i]))
+ v[i] = var(nargs[i])
+ m[i] = mean(nargs[i])
+ for j in range(k):
+ for i in range(n[j]):
+ t1 = (n[j] - 1.5) * n[j] * (nargs[j][i] - m[j])**2
+ t2 = 0.5 * v[j] * (n[j] - 1.0)
+ t3 = (n[j] - 1.0) * (n[j] - 2.0)
+ nargs[j][i] = (t1 - t2) / float(t3)
+ check = 1
+ for j in range(k):
+ if v[j] - mean(nargs[j]) > TINY:
+ check = 0
+ if check <> 1:
+ raise ValueError, 'Lack of convergence in obrientransform.'
+ else:
+ return N.array(nargs)
+
+ def asamplevar(inarray, dimension=None, keepdims=0):
+ """
+Returns the sample standard deviation of the values in the passed
+array (i.e., using N). Dimension can equal None (ravel array first),
+an integer (the dimension over which to operate), or a sequence
+(operate over multiple dimensions). Set keepdims=1 to return an array
+with the same number of dimensions as inarray.
+
+Usage: asamplevar(inarray,dimension=None,keepdims=0)
+"""
+ if dimension == None:
+ inarray = N.ravel(inarray)
+ dimension = 0
+ if dimension == 1:
+ mn = amean(inarray, dimension)[:, N.NewAxis]
+ else:
+ mn = amean(inarray, dimension, keepdims=1)
+ deviations = inarray - mn
+ if type(dimension) == ListType:
+ n = 1
+ for d in dimension:
+ n = n * inarray.shape[d]
+ else:
+ n = inarray.shape[dimension]
+ svar = ass(deviations, dimension, keepdims) / float(n)
+ return svar
+
+ def asamplestdev(inarray, dimension=None, keepdims=0):
+ """
+Returns the sample standard deviation of the values in the passed
+array (i.e., using N). Dimension can equal None (ravel array first),
+an integer (the dimension over which to operate), or a sequence
+(operate over multiple dimensions). Set keepdims=1 to return an array
+with the same number of dimensions as inarray.
+
+Usage: asamplestdev(inarray,dimension=None,keepdims=0)
+"""
+ return N.sqrt(asamplevar(inarray, dimension, keepdims))
+
+ def asignaltonoise(instack, dimension=0):
+ """
+Calculates signal-to-noise. Dimension can equal None (ravel array
+first), an integer (the dimension over which to operate), or a
+sequence (operate over multiple dimensions).
+
+Usage: asignaltonoise(instack,dimension=0):
+Returns: array containing the value of (mean/stdev) along dimension,
+ or 0 when stdev=0
+"""
+ m = mean(instack, dimension)
+ sd = stdev(instack, dimension)
+ return N.where(sd == 0, 0, m / sd)
+
+ def acov(x, y, dimension=None, keepdims=0):
+ """
+Returns the estimated covariance of the values in the passed
+array (i.e., N-1). Dimension can equal None (ravel array first), an
+integer (the dimension over which to operate), or a sequence (operate
+over multiple dimensions). Set keepdims=1 to return an array with the
+same number of dimensions as inarray.
+
+Usage: acov(x,y,dimension=None,keepdims=0)
+"""
+ if dimension == None:
+ x = N.ravel(x)
+ y = N.ravel(y)
+ dimension = 0
+ xmn = amean(x, dimension, 1) # keepdims
+ xdeviations = x - xmn
+ ymn = amean(y, dimension, 1) # keepdims
+ ydeviations = y - ymn
+ if type(dimension) == ListType:
+ n = 1
+ for d in dimension:
+ n = n * x.shape[d]
+ else:
+ n = x.shape[dimension]
+ covar = N.sum(xdeviations * ydeviations) / float(n - 1)
+ return covar
+
+ def avar(inarray, dimension=None, keepdims=0):
+ """
+Returns the estimated population variance of the values in the passed
+array (i.e., N-1). Dimension can equal None (ravel array first), an
+integer (the dimension over which to operate), or a sequence (operate
+over multiple dimensions). Set keepdims=1 to return an array with the
+same number of dimensions as inarray.
+
+Usage: avar(inarray,dimension=None,keepdims=0)
+"""
+ if dimension == None:
+ inarray = N.ravel(inarray)
+ dimension = 0
+ mn = amean(inarray, dimension, 1)
+ deviations = inarray - mn
+ if type(dimension) == ListType:
+ n = 1
+ for d in dimension:
+ n = n * inarray.shape[d]
+ else:
+ n = inarray.shape[dimension]
+ var = ass(deviations, dimension, keepdims) / float(n - 1)
+ return var
+
+ def astdev(inarray, dimension=None, keepdims=0):
+ """
+Returns the estimated population standard deviation of the values in
+the passed array (i.e., N-1). Dimension can equal None (ravel array
+first), an integer (the dimension over which to operate), or a
+sequence (operate over multiple dimensions). Set keepdims=1 to return
+an array with the same number of dimensions as inarray.
+
+Usage: astdev(inarray,dimension=None,keepdims=0)
+"""
+ return N.sqrt(avar(inarray, dimension, keepdims))
+
+ def asterr(inarray, dimension=None, keepdims=0):
+ """
+Returns the estimated population standard error of the values in the
+passed array (i.e., N-1). Dimension can equal None (ravel array
+first), an integer (the dimension over which to operate), or a
+sequence (operate over multiple dimensions). Set keepdims=1 to return
+an array with the same number of dimensions as inarray.
+
+Usage: asterr(inarray,dimension=None,keepdims=0)
+"""
+ if dimension == None:
+ inarray = N.ravel(inarray)
+ dimension = 0
+ return astdev(inarray, dimension,
+ keepdims) / float(N.sqrt(inarray.shape[dimension]))
+
+ def asem(inarray, dimension=None, keepdims=0):
+ """
+Returns the standard error of the mean (i.e., using N) of the values
+in the passed array. Dimension can equal None (ravel array first), an
+integer (the dimension over which to operate), or a sequence (operate
+over multiple dimensions). Set keepdims=1 to return an array with the
+same number of dimensions as inarray.
+
+Usage: asem(inarray,dimension=None, keepdims=0)
+"""
+ if dimension == None:
+ inarray = N.ravel(inarray)
+ dimension = 0
+ if type(dimension) == ListType:
+ n = 1
+ for d in dimension:
+ n = n * inarray.shape[d]
+ else:
+ n = inarray.shape[dimension]
+ s = asamplestdev(inarray, dimension, keepdims) / N.sqrt(n - 1)
+ return s
+
+ def az(a, score):
+ """
+Returns the z-score of a given input score, given thearray from which
+that score came. Not appropriate for population calculations, nor for
+arrays > 1D.
+
+Usage: az(a, score)
+"""
+ z = (score - amean(a)) / asamplestdev(a)
+ return z
+
+ def azs(a):
+ """
+Returns a 1D array of z-scores, one for each score in the passed array,
+computed relative to the passed array.
+
+Usage: azs(a)
+"""
+ zscores = []
+ for item in a:
+ zscores.append(z(a, item))
+ return N.array(zscores)
+
+ def azmap(scores, compare, dimension=0):
+ """
+Returns an array of z-scores the shape of scores (e.g., [x,y]), compared to
+array passed to compare (e.g., [time,x,y]). Assumes collapsing over dim 0
+of the compare array.
+
+Usage: azs(scores, compare, dimension=0)
+"""
+ mns = amean(compare, dimension)
+ sstd = asamplestdev(compare, 0)
+ return (scores - mns) / sstd
+
+#####################################
+####### ATRIMMING FUNCTIONS #######
+#####################################
+
+## deleted around() as it's in numpy now
+
+ def athreshold(a, threshmin=None, threshmax=None, newval=0):
+ """
+Like Numeric.clip() except that values <threshmid or >threshmax are replaced
+by newval instead of by threshmin/threshmax (respectively).
+
+Usage: athreshold(a,threshmin=None,threshmax=None,newval=0)
+Returns: a, with values <threshmin or >threshmax replaced with newval
+"""
+ mask = N.zeros(a.shape)
+ if threshmin <> None:
+ mask = mask + N.where(a < threshmin, 1, 0)
+ if threshmax <> None:
+ mask = mask + N.where(a > threshmax, 1, 0)
+ mask = N.clip(mask, 0, 1)
+ return N.where(mask, newval, a)
+
+ def atrimboth(a, proportiontocut):
+ """
+Slices off the passed proportion of items from BOTH ends of the passed
+array (i.e., with proportiontocut=0.1, slices 'leftmost' 10% AND
+'rightmost' 10% of scores. You must pre-sort the array if you want
+"proper" trimming. Slices off LESS if proportion results in a
+non-integer slice index (i.e., conservatively slices off
+proportiontocut).
+
+Usage: atrimboth (a,proportiontocut)
+Returns: trimmed version of array a
+"""
+ lowercut = int(proportiontocut * len(a))
+ uppercut = len(a) - lowercut
+ return a[lowercut:uppercut]
+
+ def atrim1(a, proportiontocut, tail='right'):
+ """
+Slices off the passed proportion of items from ONE end of the passed
+array (i.e., if proportiontocut=0.1, slices off 'leftmost' or 'rightmost'
+10% of scores). Slices off LESS if proportion results in a non-integer
+slice index (i.e., conservatively slices off proportiontocut).
+
+Usage: atrim1(a,proportiontocut,tail='right') or set tail='left'
+Returns: trimmed version of array a
+"""
+ if string.lower(tail) == 'right':
+ lowercut = 0
+ uppercut = len(a) - int(proportiontocut * len(a))
+ elif string.lower(tail) == 'left':
+ lowercut = int(proportiontocut * len(a))
+ uppercut = len(a)
+ return a[lowercut:uppercut]
+
+#####################################
+##### ACORRELATION FUNCTIONS ######
+#####################################
+
+ def acovariance(X):
+ """
+Computes the covariance matrix of a matrix X. Requires a 2D matrix input.
+
+Usage: acovariance(X)
+Returns: covariance matrix of X
+"""
+ if len(X.shape) <> 2:
+ raise TypeError, 'acovariance requires 2D matrices'
+ n = X.shape[0]
+ mX = amean(X, 0)
+ return N.dot(N.transpose(X), X) / float(n) - N.multiply.outer(mX, mX)
+
+ def acorrelation(X):
+ """
+Computes the correlation matrix of a matrix X. Requires a 2D matrix input.
+
+Usage: acorrelation(X)
+Returns: correlation matrix of X
+"""
+ C = acovariance(X)
+ V = N.diagonal(C)
+ return C / N.sqrt(N.multiply.outer(V, V))
+
+ def apaired(x, y):
+ """
+Interactively determines the type of data in x and y, and then runs the
+appropriated statistic for paired group data.
+
+Usage: apaired(x,y) x,y = the two arrays of values to be compared
+Returns: appropriate statistic name, value, and probability
+"""
+ samples = ''
+ while samples not in ['i', 'r', 'I', 'R', 'c', 'C']:
+ print '\nIndependent or related samples, or correlation (i,r,c): ',
+ samples = raw_input()
+
+ if samples in ['i', 'I', 'r', 'R']:
+ print '\nComparing variances ...',
+ # USE O'BRIEN'S TEST FOR HOMOGENEITY OF VARIANCE, Maxwell & delaney, p.112
+ r = obrientransform(x, y)
+ f, p = F_oneway(pstat.colex(r, 0), pstat.colex(r, 1))
+ if p < 0.05:
+ vartype = 'unequal, p=' + str(round(p, 4))
+ else:
+ vartype = 'equal'
+ print vartype
+ if samples in ['i', 'I']:
+ if vartype[0] == 'e':
+ t, p = ttest_ind(x, y, None, 0)
+ print '\nIndependent samples t-test: ', round(t, 4), round(p, 4)
+ else:
+ if len(x) > 20 or len(y) > 20:
+ z, p = ranksums(x, y)
+ print '\nRank Sums test (NONparametric, n>20): ', round(
+ z, 4), round(p, 4)
+ else:
+ u, p = mannwhitneyu(x, y)
+ print '\nMann-Whitney U-test (NONparametric, ns<20): ', round(
+ u, 4), round(p, 4)
+
+ else: # RELATED SAMPLES
+ if vartype[0] == 'e':
+ t, p = ttest_rel(x, y, 0)
+ print '\nRelated samples t-test: ', round(t, 4), round(p, 4)
+ else:
+ t, p = ranksums(x, y)
+ print '\nWilcoxon T-test (NONparametric): ', round(t, 4), round(p, 4)
+ else: # CORRELATION ANALYSIS
+ corrtype = ''
+ while corrtype not in ['c', 'C', 'r', 'R', 'd', 'D']:
+ print '\nIs the data Continuous, Ranked, or Dichotomous (c,r,d): ',
+ corrtype = raw_input()
+ if corrtype in ['c', 'C']:
+ m, b, r, p, see = linregress(x, y)
+ print '\nLinear regression for continuous variables ...'
+ lol = [
+ ['Slope', 'Intercept', 'r', 'Prob', 'SEestimate'],
+ [round(m, 4), round(b, 4), round(r, 4), round(p, 4), round(see, 4)]
+ ]
+ pstat.printcc(lol)
+ elif corrtype in ['r', 'R']:
+ r, p = spearmanr(x, y)
+ print '\nCorrelation for ranked variables ...'
+ print "Spearman's r: ", round(r, 4), round(p, 4)
+ else: # DICHOTOMOUS
+ r, p = pointbiserialr(x, y)
+ print '\nAssuming x contains a dichotomous variable ...'
+ print 'Point Biserial r: ', round(r, 4), round(p, 4)
+ print '\n\n'
+ return None
+
+ def dices(x, y):
+ """
+Calculates Dice's coefficient ... (2*number of common terms)/(number of terms in
+x +
+number of terms in y). Returns a value between 0 (orthogonal) and 1.
+
+Usage: dices(x,y)
+"""
+ import sets
+ x = sets.Set(x)
+ y = sets.Set(y)
+ common = len(x.intersection(y))
+ total = float(len(x) + len(y))
+ return 2 * common / total
+
+ def icc(x, y=None, verbose=0):
+ """
+Calculates intraclass correlation coefficients using simple, Type I sums of
+squares.
+If only one variable is passed, assumed it's an Nx2 matrix
+
+Usage: icc(x,y=None,verbose=0)
+Returns: icc rho, prob ####PROB IS A GUESS BASED ON PEARSON
+"""
+ TINY = 1.0e-20
+ if y:
+ all = N.concatenate([x, y], 0)
+ else:
+ all = x + 0
+ x = all[:, 0]
+ y = all[:, 1]
+ totalss = ass(all - mean(all))
+ pairmeans = (x + y) / 2.
+ withinss = ass(x - pairmeans) + ass(y - pairmeans)
+ withindf = float(len(x))
+ betwdf = float(len(x) - 1)
+ withinms = withinss / withindf
+ betweenms = (totalss - withinss) / betwdf
+ rho = (betweenms - withinms) / (withinms + betweenms)
+ t = rho * math.sqrt(betwdf / ((1.0 - rho + TINY) * (1.0 + rho + TINY)))
+ prob = abetai(0.5 * betwdf, 0.5, betwdf / (betwdf + t * t), verbose)
+ return rho, prob
+
+ def alincc(x, y):
+ """
+Calculates Lin's concordance correlation coefficient.
+
+Usage: alincc(x,y) where x, y are equal-length arrays
+Returns: Lin's CC
+"""
+ x = N.ravel(x)
+ y = N.ravel(y)
+ covar = acov(x, y) * (len(x) - 1) / float(len(x)) # correct denom to n
+ xvar = avar(x) * (len(x) - 1) / float(len(x)) # correct denom to n
+ yvar = avar(y) * (len(y) - 1) / float(len(y)) # correct denom to n
+ lincc = (2 * covar) / ((xvar + yvar) + ((amean(x) - amean(y))**2))
+ return lincc
+
+ def apearsonr(x, y, verbose=1):
+ """
+Calculates a Pearson correlation coefficient and returns p. Taken
+from Heiman's Basic Statistics for the Behav. Sci (2nd), p.195.
+
+Usage: apearsonr(x,y,verbose=1) where x,y are equal length arrays
+Returns: Pearson's r, two-tailed p-value
+"""
+ TINY = 1.0e-20
+ n = len(x)
+ xmean = amean(x)
+ ymean = amean(y)
+ r_num = n * (N.add.reduce(x * y)) - N.add.reduce(x) * N.add.reduce(y)
+ r_den = math.sqrt((n * ass(x) - asquare_of_sums(x)) *
+ (n * ass(y) - asquare_of_sums(y)))
+ r = (r_num / r_den)
+ df = n - 2
+ t = r * math.sqrt(df / ((1.0 - r + TINY) * (1.0 + r + TINY)))
+ prob = abetai(0.5 * df, 0.5, df / (df + t * t), verbose)
+ return r, prob
+
+ def aspearmanr(x, y):
+ """
+Calculates a Spearman rank-order correlation coefficient. Taken
+from Heiman's Basic Statistics for the Behav. Sci (1st), p.192.
+
+Usage: aspearmanr(x,y) where x,y are equal-length arrays
+Returns: Spearman's r, two-tailed p-value
+"""
+ TINY = 1e-30
+ n = len(x)
+ rankx = rankdata(x)
+ ranky = rankdata(y)
+ dsq = N.add.reduce((rankx - ranky)**2)
+ rs = 1 - 6 * dsq / float(n * (n**2 - 1))
+ t = rs * math.sqrt((n - 2) / ((rs + 1.0) * (1.0 - rs)))
+ df = n - 2
+ probrs = abetai(0.5 * df, 0.5, df / (df + t * t))
+ # probability values for rs are from part 2 of the spearman function in
+ # Numerical Recipies, p.510. They close to tables, but not exact.(?)
+ return rs, probrs
+
+ def apointbiserialr(x, y):
+ """
+Calculates a point-biserial correlation coefficient and the associated
+probability value. Taken from Heiman's Basic Statistics for the Behav.
+Sci (1st), p.194.
+
+Usage: apointbiserialr(x,y) where x,y are equal length arrays
+Returns: Point-biserial r, two-tailed p-value
+"""
+ TINY = 1e-30
+ categories = pstat.aunique(x)
+ data = pstat.aabut(x, y)
+ if len(categories) <> 2:
+ raise ValueError, ('Exactly 2 categories required (in x) for '
+ 'pointbiserialr().')
+ else: # there are 2 categories, continue
+ codemap = pstat.aabut(categories, N.arange(2))
+ recoded = pstat.arecode(data, codemap, 0)
+ x = pstat.alinexand(data, 0, categories[0])
+ y = pstat.alinexand(data, 0, categories[1])
+ xmean = amean(pstat.acolex(x, 1))
+ ymean = amean(pstat.acolex(y, 1))
+ n = len(data)
+ adjust = math.sqrt((len(x) / float(n)) * (len(y) / float(n)))
+ rpb = (ymean - xmean) / asamplestdev(pstat.acolex(data, 1)) * adjust
+ df = n - 2
+ t = rpb * math.sqrt(df / ((1.0 - rpb + TINY) * (1.0 + rpb + TINY)))
+ prob = abetai(0.5 * df, 0.5, df / (df + t * t))
+ return rpb, prob
+
+ def akendalltau(x, y):
+ """
+Calculates Kendall's tau ... correlation of ordinal data. Adapted
+from function kendl1 in Numerical Recipies. Needs good test-cases.@@@
+
+Usage: akendalltau(x,y)
+Returns: Kendall's tau, two-tailed p-value
+"""
+ n1 = 0
+ n2 = 0
+ iss = 0
+ for j in range(len(x) - 1):
+ for k in range(j, len(y)):
+ a1 = x[j] - x[k]
+ a2 = y[j] - y[k]
+ aa = a1 * a2
+ if (aa): # neither array has a tie
+ n1 = n1 + 1
+ n2 = n2 + 1
+ if aa > 0:
+ iss = iss + 1
+ else:
+ iss = iss - 1
+ else:
+ if (a1):
+ n1 = n1 + 1
+ else:
+ n2 = n2 + 1
+ tau = iss / math.sqrt(n1 * n2)
+ svar = (4.0 * len(x) + 10.0) / (9.0 * len(x) * (len(x) - 1))
+ z = tau / math.sqrt(svar)
+ prob = erfcc(abs(z) / 1.4142136)
+ return tau, prob
+
+ def alinregress(*args):
+ """
+Calculates a regression line on two arrays, x and y, corresponding to x,y
+pairs. If a single 2D array is passed, alinregress finds dim with 2 levels
+and splits data into x,y pairs along that dim.
+
+Usage: alinregress(*args) args=2 equal-length arrays, or one 2D array
+Returns: slope, intercept, r, two-tailed prob, sterr-of-the-estimate, n
+"""
+ TINY = 1.0e-20
+ if len(args) == 1: # more than 1D array?
+ args = args[0]
+ if len(args) == 2:
+ x = args[0]
+ y = args[1]
+ else:
+ x = args[:, 0]
+ y = args[:, 1]
+ else:
+ x = args[0]
+ y = args[1]
+ n = len(x)
+ xmean = amean(x)
+ ymean = amean(y)
+ r_num = n * (N.add.reduce(x * y)) - N.add.reduce(x) * N.add.reduce(y)
+ r_den = math.sqrt((n * ass(x) - asquare_of_sums(x)) *
+ (n * ass(y) - asquare_of_sums(y)))
+ r = r_num / r_den
+ z = 0.5 * math.log((1.0 + r + TINY) / (1.0 - r + TINY))
+ df = n - 2
+ t = r * math.sqrt(df / ((1.0 - r + TINY) * (1.0 + r + TINY)))
+ prob = abetai(0.5 * df, 0.5, df / (df + t * t))
+ slope = r_num / (float(n) * ass(x) - asquare_of_sums(x))
+ intercept = ymean - slope * xmean
+ sterrest = math.sqrt(1 - r * r) * asamplestdev(y)
+ return slope, intercept, r, prob, sterrest, n
+
+ def amasslinregress(*args):
+ """
+Calculates a regression line on one 1D array (x) and one N-D array (y).
+
+Returns: slope, intercept, r, two-tailed prob, sterr-of-the-estimate, n
+"""
+ TINY = 1.0e-20
+ if len(args) == 1: # more than 1D array?
+ args = args[0]
+ if len(args) == 2:
+ x = N.ravel(args[0])
+ y = args[1]
+ else:
+ x = N.ravel(args[:, 0])
+ y = args[:, 1]
+ else:
+ x = args[0]
+ y = args[1]
+ x = x.astype(N.float_)
+ y = y.astype(N.float_)
+ n = len(x)
+ xmean = amean(x)
+ ymean = amean(y, 0)
+ shp = N.ones(len(y.shape))
+ shp[0] = len(x)
+ x.shape = shp
+ print x.shape, y.shape
+ r_num = n * (N.add.reduce(x * y, 0)) - N.add.reduce(x) * N.add.reduce(y, 0)
+ r_den = N.sqrt((n * ass(x) - asquare_of_sums(x)) *
+ (n * ass(y, 0) - asquare_of_sums(y, 0)))
+ zerodivproblem = N.equal(r_den, 0)
+ r_den = N.where(zerodivproblem, 1, r_den
+ ) # avoid zero-division in 1st place
+ r = r_num / r_den # need to do this nicely for matrix division
+ r = N.where(zerodivproblem, 0.0, r)
+ z = 0.5 * N.log((1.0 + r + TINY) / (1.0 - r + TINY))
+ df = n - 2
+ t = r * N.sqrt(df / ((1.0 - r + TINY) * (1.0 + r + TINY)))
+ prob = abetai(0.5 * df, 0.5, df / (df + t * t))
+
+ ss = float(n) * ass(x) - asquare_of_sums(x)
+ s_den = N.where(ss == 0, 1, ss) # avoid zero-division in 1st place
+ slope = r_num / s_den
+ intercept = ymean - slope * xmean
+ sterrest = N.sqrt(1 - r * r) * asamplestdev(y, 0)
+ return slope, intercept, r, prob, sterrest, n
+
+#####################################
+##### AINFERENTIAL STATISTICS #####
+#####################################
+
+ def attest_1samp(a, popmean, printit=0, name='Sample', writemode='a'):
+ """
+Calculates the t-obtained for the independent samples T-test on ONE group
+of scores a, given a population mean. If printit=1, results are printed
+to the screen. If printit='filename', the results are output to 'filename'
+using the given writemode (default=append). Returns t-value, and prob.
+
+Usage: attest_1samp(a,popmean,Name='Sample',printit=0,writemode='a')
+Returns: t-value, two-tailed prob
+"""
+ if type(a) != N.ndarray:
+ a = N.array(a)
+ x = amean(a)
+ v = avar(a)
+ n = len(a)
+ df = n - 1
+ svar = ((n - 1) * v) / float(df)
+ t = (x - popmean) / math.sqrt(svar * (1.0 / n))
+ prob = abetai(0.5 * df, 0.5, df / (df + t * t))
+
+ if printit <> 0:
+ statname = 'Single-sample T-test.'
+ outputpairedstats(printit, writemode, 'Population', '--', popmean, 0, 0,
+ 0, name, n, x, v, N.minimum.reduce(N.ravel(a)),
+ N.maximum.reduce(N.ravel(a)), statname, t, prob)
+ return t, prob
+
+ def attest_ind(a,
+ b,
+ dimension=None,
+ printit=0,
+ name1='Samp1',
+ name2='Samp2',
+ writemode='a'):
+ """
+Calculates the t-obtained T-test on TWO INDEPENDENT samples of scores
+a, and b. From Numerical Recipies, p.483. If printit=1, results are
+printed to the screen. If printit='filename', the results are output
+to 'filename' using the given writemode (default=append). Dimension
+can equal None (ravel array first), or an integer (the dimension over
+which to operate on a and b).
+
+Usage: attest_ind (a,b,dimension=None,printit=0,
+ Name1='Samp1',Name2='Samp2',writemode='a')
+Returns: t-value, two-tailed p-value
+"""
+ if dimension == None:
+ a = N.ravel(a)
+ b = N.ravel(b)
+ dimension = 0
+ x1 = amean(a, dimension)
+ x2 = amean(b, dimension)
+ v1 = avar(a, dimension)
+ v2 = avar(b, dimension)
+ n1 = a.shape[dimension]
+ n2 = b.shape[dimension]
+ df = n1 + n2 - 2
+ svar = ((n1 - 1) * v1 + (n2 - 1) * v2) / float(df)
+ zerodivproblem = N.equal(svar, 0)
+ svar = N.where(zerodivproblem, 1, svar) # avoid zero-division in 1st place
+ t = (x1 - x2) / N.sqrt(svar *
+ (1.0 / n1 + 1.0 / n2)) # N-D COMPUTATION HERE!!!!!!
+ t = N.where(zerodivproblem, 1.0, t) # replace NaN/wrong t-values with 1.0
+ probs = abetai(0.5 * df, 0.5, float(df) / (df + t * t))
+
+ if type(t) == N.ndarray:
+ probs = N.reshape(probs, t.shape)
+ if probs.shape == (1,):
+ probs = probs[0]
+
+ if printit <> 0:
+ if type(t) == N.ndarray:
+ t = t[0]
+ if type(probs) == N.ndarray:
+ probs = probs[0]
+ statname = 'Independent samples T-test.'
+ outputpairedstats(printit, writemode, name1, n1, x1, v1,
+ N.minimum.reduce(N.ravel(a)),
+ N.maximum.reduce(N.ravel(a)), name2, n2, x2, v2,
+ N.minimum.reduce(N.ravel(b)),
+ N.maximum.reduce(N.ravel(b)), statname, t, probs)
+ return
+ return t, probs
+
+ def ap2t(pval, df):
+ """
+Tries to compute a t-value from a p-value (or pval array) and associated df.
+SLOW for large numbers of elements(!) as it re-computes p-values 20 times
+(smaller step-sizes) at which point it decides it's done. Keeps the signs
+of the input array. Returns 1000 (or -1000) if t>100.
+
+Usage: ap2t(pval,df)
+Returns: an array of t-values with the shape of pval
+ """
+ pval = N.array(pval)
+ signs = N.sign(pval)
+ pval = abs(pval)
+ t = N.ones(pval.shape, N.float_) * 50
+ step = N.ones(pval.shape, N.float_) * 25
+ print 'Initial ap2t() prob calc'
+ prob = abetai(0.5 * df, 0.5, float(df) / (df + t * t))
+ print 'ap2t() iter: ',
+ for i in range(10):
+ print i, ' ',
+ t = N.where(pval < prob, t + step, t - step)
+ prob = abetai(0.5 * df, 0.5, float(df) / (df + t * t))
+ step = step / 2
+ print
+ # since this is an ugly hack, we get ugly boundaries
+ t = N.where(t > 99.9, 1000, t) # hit upper-boundary
+ t = t + signs
+ return t #, prob, pval
+
+ def attest_rel(a,
+ b,
+ dimension=None,
+ printit=0,
+ name1='Samp1',
+ name2='Samp2',
+ writemode='a'):
+ """
+Calculates the t-obtained T-test on TWO RELATED samples of scores, a
+and b. From Numerical Recipies, p.483. If printit=1, results are
+printed to the screen. If printit='filename', the results are output
+to 'filename' using the given writemode (default=append). Dimension
+can equal None (ravel array first), or an integer (the dimension over
+which to operate on a and b).
+
+Usage: attest_rel(a,b,dimension=None,printit=0,
+ name1='Samp1',name2='Samp2',writemode='a')
+Returns: t-value, two-tailed p-value
+"""
+ if dimension == None:
+ a = N.ravel(a)
+ b = N.ravel(b)
+ dimension = 0
+ if len(a) <> len(b):
+ raise ValueError, 'Unequal length arrays.'
+ x1 = amean(a, dimension)
+ x2 = amean(b, dimension)
+ v1 = avar(a, dimension)
+ v2 = avar(b, dimension)
+ n = a.shape[dimension]
+ df = float(n - 1)
+ d = (a - b).astype('d')
+
+ denom = N.sqrt(
+ (n * N.add.reduce(d * d, dimension) - N.add.reduce(d, dimension)**2) /
+ df)
+ zerodivproblem = N.equal(denom, 0)
+ denom = N.where(zerodivproblem, 1, denom
+ ) # avoid zero-division in 1st place
+ t = N.add.reduce(d, dimension) / denom # N-D COMPUTATION HERE!!!!!!
+ t = N.where(zerodivproblem, 1.0, t) # replace NaN/wrong t-values with 1.0
+ probs = abetai(0.5 * df, 0.5, float(df) / (df + t * t))
+ if type(t) == N.ndarray:
+ probs = N.reshape(probs, t.shape)
+ if probs.shape == (1,):
+ probs = probs[0]
+
+ if printit <> 0:
+ statname = 'Related samples T-test.'
+ outputpairedstats(printit, writemode, name1, n, x1, v1,
+ N.minimum.reduce(N.ravel(a)),
+ N.maximum.reduce(N.ravel(a)), name2, n, x2, v2,
+ N.minimum.reduce(N.ravel(b)),
+ N.maximum.reduce(N.ravel(b)), statname, t, probs)
+ return
+ return t, probs
+
+ def achisquare(f_obs, f_exp=None):
+ """
+Calculates a one-way chi square for array of observed frequencies and returns
+the result. If no expected frequencies are given, the total N is assumed to
+be equally distributed across all groups.
+@@@NOT RIGHT??
+
+Usage: achisquare(f_obs, f_exp=None) f_obs = array of observed cell freq.
+Returns: chisquare-statistic, associated p-value
+"""
+
+ k = len(f_obs)
+ if f_exp == None:
+ f_exp = N.array([sum(f_obs) / float(k)] * len(f_obs), N.float_)
+ f_exp = f_exp.astype(N.float_)
+ chisq = N.add.reduce((f_obs - f_exp)**2 / f_exp)
+ return chisq, achisqprob(chisq, k - 1)
+
+ def aks_2samp(data1, data2):
+ """
+Computes the Kolmogorov-Smirnof statistic on 2 samples. Modified from
+Numerical Recipies in C, page 493. Returns KS D-value, prob. Not ufunc-
+like.
+
+Usage: aks_2samp(data1,data2) where data1 and data2 are 1D arrays
+Returns: KS D-value, p-value
+"""
+ j1 = 0 # N.zeros(data1.shape[1:]) TRIED TO MAKE THIS UFUNC-LIKE
+ j2 = 0 # N.zeros(data2.shape[1:])
+ fn1 = 0.0 # N.zeros(data1.shape[1:],N.float_)
+ fn2 = 0.0 # N.zeros(data2.shape[1:],N.float_)
+ n1 = data1.shape[0]
+ n2 = data2.shape[0]
+ en1 = n1 * 1
+ en2 = n2 * 1
+ d = N.zeros(data1.shape[1:], N.float_)
+ data1 = N.sort(data1, 0)
+ data2 = N.sort(data2, 0)
+ while j1 < n1 and j2 < n2:
+ d1 = data1[j1]
+ d2 = data2[j2]
+ if d1 <= d2:
+ fn1 = (j1) / float(en1)
+ j1 = j1 + 1
+ if d2 <= d1:
+ fn2 = (j2) / float(en2)
+ j2 = j2 + 1
+ dt = (fn2 - fn1)
+ if abs(dt) > abs(d):
+ d = dt
+# try:
+ en = math.sqrt(en1 * en2 / float(en1 + en2))
+ prob = aksprob((en + 0.12 + 0.11 / en) * N.fabs(d))
+ # except:
+ # prob = 1.0
+ return d, prob
+
+ def amannwhitneyu(x, y):
+ """
+Calculates a Mann-Whitney U statistic on the provided scores and
+returns the result. Use only when the n in each condition is < 20 and
+you have 2 independent samples of ranks. REMEMBER: Mann-Whitney U is
+significant if the u-obtained is LESS THAN or equal to the critical
+value of U.
+
+Usage: amannwhitneyu(x,y) where x,y are arrays of values for 2 conditions
+Returns: u-statistic, one-tailed p-value (i.e., p(z(U)))
+"""
+ n1 = len(x)
+ n2 = len(y)
+ ranked = rankdata(N.concatenate((x, y)))
+ rankx = ranked[0:n1] # get the x-ranks
+ ranky = ranked[n1:] # the rest are y-ranks
+ u1 = n1 * n2 + (n1 * (n1 + 1)) / 2.0 - sum(rankx) # calc U for x
+ u2 = n1 * n2 - u1 # remainder is U for y
+ bigu = max(u1, u2)
+ smallu = min(u1, u2)
+ proportion = bigu / float(n1 * n2)
+ T = math.sqrt(tiecorrect(ranked)) # correction factor for tied scores
+ if T == 0:
+ raise ValueError, 'All numbers are identical in amannwhitneyu'
+ sd = math.sqrt(T * n1 * n2 * (n1 + n2 + 1) / 12.0)
+ z = abs((bigu - n1 * n2 / 2.0) / sd) # normal approximation for prob calc
+ return smallu, 1.0 - azprob(z), proportion
+
+ def atiecorrect(rankvals):
+ """
+Tie-corrector for ties in Mann Whitney U and Kruskal Wallis H tests.
+See Siegel, S. (1956) Nonparametric Statistics for the Behavioral
+Sciences. New York: McGraw-Hill. Code adapted from |Stat rankind.c
+code.
+
+Usage: atiecorrect(rankvals)
+Returns: T correction factor for U or H
+"""
+ sorted, posn = ashellsort(N.array(rankvals))
+ n = len(sorted)
+ T = 0.0
+ i = 0
+ while (i < n - 1):
+ if sorted[i] == sorted[i + 1]:
+ nties = 1
+ while (i < n - 1) and (sorted[i] == sorted[i + 1]):
+ nties = nties + 1
+ i = i + 1
+ T = T + nties**3 - nties
+ i = i + 1
+ T = T / float(n**3 - n)
+ return 1.0 - T
+
+ def aranksums(x, y):
+ """
+Calculates the rank sums statistic on the provided scores and returns
+the result.
+
+Usage: aranksums(x,y) where x,y are arrays of values for 2 conditions
+Returns: z-statistic, two-tailed p-value
+"""
+ n1 = len(x)
+ n2 = len(y)
+ alldata = N.concatenate((x, y))
+ ranked = arankdata(alldata)
+ x = ranked[:n1]
+ y = ranked[n1:]
+ s = sum(x)
+ expected = n1 * (n1 + n2 + 1) / 2.0
+ z = (s - expected) / math.sqrt(n1 * n2 * (n1 + n2 + 1) / 12.0)
+ prob = 2 * (1.0 - azprob(abs(z)))
+ return z, prob
+
+ def awilcoxont(x, y):
+ """
+Calculates the Wilcoxon T-test for related samples and returns the
+result. A non-parametric T-test.
+
+Usage: awilcoxont(x,y) where x,y are equal-length arrays for 2 conditions
+Returns: t-statistic, two-tailed p-value
+"""
+ if len(x) <> len(y):
+ raise ValueError, 'Unequal N in awilcoxont. Aborting.'
+ d = x - y
+ d = N.compress(N.not_equal(d, 0), d) # Keep all non-zero differences
+ count = len(d)
+ absd = abs(d)
+ absranked = arankdata(absd)
+ r_plus = 0.0
+ r_minus = 0.0
+ for i in range(len(absd)):
+ if d[i] < 0:
+ r_minus = r_minus + absranked[i]
+ else:
+ r_plus = r_plus + absranked[i]
+ wt = min(r_plus, r_minus)
+ mn = count * (count + 1) * 0.25
+ se = math.sqrt(count * (count + 1) * (2.0 * count + 1.0) / 24.0)
+ z = math.fabs(wt - mn) / se
+ z = math.fabs(wt - mn) / se
+ prob = 2 * (1.0 - zprob(abs(z)))
+ return wt, prob
+
+ def akruskalwallish(*args):
+ """
+The Kruskal-Wallis H-test is a non-parametric ANOVA for 3 or more
+groups, requiring at least 5 subjects in each group. This function
+calculates the Kruskal-Wallis H and associated p-value for 3 or more
+independent samples.
+
+Usage: akruskalwallish(*args) args are separate arrays for 3+ conditions
+Returns: H-statistic (corrected for ties), associated p-value
+"""
+ assert len(args) == 3, 'Need at least 3 groups in stats.akruskalwallish()'
+ args = list(args)
+ n = [0] * len(args)
+ n = map(len, args)
+ all = []
+ for i in range(len(args)):
+ all = all + args[i].tolist()
+ ranked = rankdata(all)
+ T = tiecorrect(ranked)
+ for i in range(len(args)):
+ args[i] = ranked[0:n[i]]
+ del ranked[0:n[i]]
+ rsums = []
+ for i in range(len(args)):
+ rsums.append(sum(args[i])**2)
+ rsums[i] = rsums[i] / float(n[i])
+ ssbn = sum(rsums)
+ totaln = sum(n)
+ h = 12.0 / (totaln * (totaln + 1)) * ssbn - 3 * (totaln + 1)
+ df = len(args) - 1
+ if T == 0:
+ raise ValueError, 'All numbers are identical in akruskalwallish'
+ h = h / float(T)
+ return h, chisqprob(h, df)
+
+ def afriedmanchisquare(*args):
+ """
+Friedman Chi-Square is a non-parametric, one-way within-subjects
+ANOVA. This function calculates the Friedman Chi-square test for
+repeated measures and returns the result, along with the associated
+probability value. It assumes 3 or more repeated measures. Only 3
+levels requires a minimum of 10 subjects in the study. Four levels
+requires 5 subjects per level(??).
+
+Usage: afriedmanchisquare(*args) args are separate arrays for 2+ conditions
+Returns: chi-square statistic, associated p-value
+"""
+ k = len(args)
+ if k < 3:
+ raise ValueError, ('\nLess than 3 levels. Friedman test not '
+ 'appropriate.\n')
+ n = len(args[0])
+ data = apply(pstat.aabut, args)
+ data = data.astype(N.float_)
+ for i in range(len(data)):
+ data[i] = arankdata(data[i])
+ ssbn = asum(asum(args, 1)**2)
+ chisq = 12.0 / (k * n * (k + 1)) * ssbn - 3 * n * (k + 1)
+ return chisq, achisqprob(chisq, k - 1)
+
+#####################################
+#### APROBABILITY CALCULATIONS ####
+#####################################
+
+ def achisqprob(chisq, df):
+ """
+Returns the (1-tail) probability value associated with the provided chi-square
+value and df. Heavily modified from chisq.c in Gary Perlman's |Stat. Can
+handle multiple dimensions.
+
+Usage: achisqprob(chisq,df) chisq=chisquare stat., df=degrees of freedom
+"""
+ BIG = 200.0
+
+ def ex(x):
+ BIG = 200.0
+ exponents = N.where(N.less(x, -BIG), -BIG, x)
+ return N.exp(exponents)
+
+ if type(chisq) == N.ndarray:
+ arrayflag = 1
+ else:
+ arrayflag = 0
+ chisq = N.array([chisq])
+ if df < 1:
+ return N.ones(chisq.shape, N.float)
+ probs = N.zeros(chisq.shape, N.float_)
+ probs = N.where(
+ N.less_equal(chisq, 0), 1.0, probs) # set prob=1 for chisq<0
+ a = 0.5 * chisq
+ if df > 1:
+ y = ex(-a)
+ if df % 2 == 0:
+ even = 1
+ s = y * 1
+ s2 = s * 1
+ else:
+ even = 0
+ s = 2.0 * azprob(-N.sqrt(chisq))
+ s2 = s * 1
+ if (df > 2):
+ chisq = 0.5 * (df - 1.0)
+ if even:
+ z = N.ones(probs.shape, N.float_)
+ else:
+ z = 0.5 * N.ones(probs.shape, N.float_)
+ if even:
+ e = N.zeros(probs.shape, N.float_)
+ else:
+ e = N.log(N.sqrt(N.pi)) * N.ones(probs.shape, N.float_)
+ c = N.log(a)
+ mask = N.zeros(probs.shape)
+ a_big = N.greater(a, BIG)
+ a_big_frozen = -1 * N.ones(probs.shape, N.float_)
+ totalelements = N.multiply.reduce(N.array(probs.shape))
+ while asum(mask) <> totalelements:
+ e = N.log(z) + e
+ s = s + ex(c * z - a - e)
+ z = z + 1.0
+ # print z, e, s
+ newmask = N.greater(z, chisq)
+ a_big_frozen = N.where(newmask * N.equal(mask, 0) * a_big, s,
+ a_big_frozen)
+ mask = N.clip(newmask + mask, 0, 1)
+ if even:
+ z = N.ones(probs.shape, N.float_)
+ e = N.ones(probs.shape, N.float_)
+ else:
+ z = 0.5 * N.ones(probs.shape, N.float_)
+ e = 1.0 / N.sqrt(N.pi) / N.sqrt(a) * N.ones(probs.shape, N.float_)
+ c = 0.0
+ mask = N.zeros(probs.shape)
+ a_notbig_frozen = -1 * N.ones(probs.shape, N.float_)
+ while asum(mask) <> totalelements:
+ e = e * (a / z.astype(N.float_))
+ c = c + e
+ z = z + 1.0
+ # print '#2', z, e, c, s, c*y+s2
+ newmask = N.greater(z, chisq)
+ a_notbig_frozen = N.where(newmask * N.equal(mask, 0) * (1 - a_big),
+ c * y + s2, a_notbig_frozen)
+ mask = N.clip(newmask + mask, 0, 1)
+ probs = N.where(
+ N.equal(probs, 1), 1, N.where(
+ N.greater(a, BIG), a_big_frozen, a_notbig_frozen))
+ return probs
+ else:
+ return s
+
+ def aerfcc(x):
+ """
+Returns the complementary error function erfc(x) with fractional error
+everywhere less than 1.2e-7. Adapted from Numerical Recipies. Can
+handle multiple dimensions.
+
+Usage: aerfcc(x)
+"""
+ z = abs(x)
+ t = 1.0 / (1.0 + 0.5 * z)
+ ans = t * N.exp(-z * z - 1.26551223 + t * (1.00002368 + t * (
+ 0.37409196 + t * (0.09678418 + t * (-0.18628806 + t * (
+ 0.27886807 + t * (-1.13520398 + t * (1.48851587 + t * (
+ -0.82215223 + t * 0.17087277)))))))))
+ return N.where(N.greater_equal(x, 0), ans, 2.0 - ans)
+
+ def azprob(z):
+ """
+Returns the area under the normal curve 'to the left of' the given z value.
+Thus,
+ for z<0, zprob(z) = 1-tail probability
+ for z>0, 1.0-zprob(z) = 1-tail probability
+ for any z, 2.0*(1.0-zprob(abs(z))) = 2-tail probability
+Adapted from z.c in Gary Perlman's |Stat. Can handle multiple dimensions.
+
+Usage: azprob(z) where z is a z-value
+"""
+
+ def yfunc(y):
+ x = (((((((
+ ((((((-0.000045255659 * y + 0.000152529290) * y - 0.000019538132) * y
+ - 0.000676904986) * y + 0.001390604284) * y - 0.000794620820) * y
+ - 0.002034254874) * y + 0.006549791214) * y - 0.010557625006) * y +
+ 0.011630447319) * y - 0.009279453341) * y + 0.005353579108) * y -
+ 0.002141268741) * y + 0.000535310849) * y + 0.999936657524
+ return x
+
+ def wfunc(w):
+ x = ((((((((0.000124818987 * w - 0.001075204047) * w + 0.005198775019) * w
+ - 0.019198292004) * w + 0.059054035642) * w - 0.151968751364) *
+ w + 0.319152932694) * w - 0.531923007300) * w +
+ 0.797884560593) * N.sqrt(w) * 2.0
+ return x
+
+ Z_MAX = 6.0 # maximum meaningful z-value
+ x = N.zeros(z.shape, N.float_) # initialize
+ y = 0.5 * N.fabs(z)
+ x = N.where(N.less(y, 1.0), wfunc(y * y), yfunc(y - 2.0)) # get x's
+ x = N.where(N.greater(y, Z_MAX * 0.5), 1.0, x) # kill those with big Z
+ prob = N.where(N.greater(z, 0), (x + 1) * 0.5, (1 - x) * 0.5)
+ return prob
+
+ def aksprob(alam):
+ """
+Returns the probability value for a K-S statistic computed via ks_2samp.
+Adapted from Numerical Recipies. Can handle multiple dimensions.
+
+Usage: aksprob(alam)
+"""
+ if type(alam) == N.ndarray:
+ frozen = -1 * N.ones(alam.shape, N.float64)
+ alam = alam.astype(N.float64)
+ arrayflag = 1
+ else:
+ frozen = N.array(-1.)
+ alam = N.array(alam, N.float64)
+ arrayflag = 1
+ mask = N.zeros(alam.shape)
+ fac = 2.0 * N.ones(alam.shape, N.float_)
+ sum = N.zeros(alam.shape, N.float_)
+ termbf = N.zeros(alam.shape, N.float_)
+ a2 = N.array(-2.0 * alam * alam, N.float64)
+ totalelements = N.multiply.reduce(N.array(mask.shape))
+ for j in range(1, 201):
+ if asum(mask) == totalelements:
+ break
+ exponents = (a2 * j * j)
+ overflowmask = N.less(exponents, -746)
+ frozen = N.where(overflowmask, 0, frozen)
+ mask = mask + overflowmask
+ term = fac * N.exp(exponents)
+ sum = sum + term
+ newmask = N.where(
+ N.less_equal(
+ abs(term), (0.001 * termbf)) + N.less(
+ abs(term), 1.0e-8 * sum), 1, 0)
+ frozen = N.where(newmask * N.equal(mask, 0), sum, frozen)
+ mask = N.clip(mask + newmask, 0, 1)
+ fac = -fac
+ termbf = abs(term)
+ if arrayflag:
+ return N.where(
+ N.equal(frozen, -1), 1.0, frozen) # 1.0 if doesn't converge
+ else:
+ return N.where(
+ N.equal(frozen, -1), 1.0, frozen)[0] # 1.0 if doesn't converge
+
+ def afprob(dfnum, dfden, F):
+ """
+Returns the 1-tailed significance level (p-value) of an F statistic
+given the degrees of freedom for the numerator (dfR-dfF) and the degrees
+of freedom for the denominator (dfF). Can handle multiple dims for F.
+
+Usage: afprob(dfnum, dfden, F) where usually dfnum=dfbn, dfden=dfwn
+"""
+ if type(F) == N.ndarray:
+ return abetai(0.5 * dfden, 0.5 * dfnum, dfden / (1.0 * dfden + dfnum * F))
+ else:
+ return abetai(0.5 * dfden, 0.5 * dfnum, dfden / float(dfden + dfnum * F))
+
+ def abetacf(a, b, x, verbose=1):
+ """
+Evaluates the continued fraction form of the incomplete Beta function,
+betai. (Adapted from: Numerical Recipies in C.) Can handle multiple
+dimensions for x.
+
+Usage: abetacf(a,b,x,verbose=1)
+"""
+ ITMAX = 200
+ EPS = 3.0e-7
+
+ arrayflag = 1
+ if type(x) == N.ndarray:
+ frozen = N.ones(x.shape,
+ N.float_) * -1 #start out w/ -1s, should replace all
+ else:
+ arrayflag = 0
+ frozen = N.array([-1])
+ x = N.array([x])
+ mask = N.zeros(x.shape)
+ bm = az = am = 1.0
+ qab = a + b
+ qap = a + 1.0
+ qam = a - 1.0
+ bz = 1.0 - qab * x / qap
+ for i in range(ITMAX + 1):
+ if N.sum(N.ravel(N.equal(frozen, -1))) == 0:
+ break
+ em = float(i + 1)
+ tem = em + em
+ d = em * (b - em) * x / ((qam + tem) * (a + tem))
+ ap = az + d * am
+ bp = bz + d * bm
+ d = -(a + em) * (qab + em) * x / ((qap + tem) * (a + tem))
+ app = ap + d * az
+ bpp = bp + d * bz
+ aold = az * 1
+ am = ap / bpp
+ bm = bp / bpp
+ az = app / bpp
+ bz = 1.0
+ newmask = N.less(abs(az - aold), EPS * abs(az))
+ frozen = N.where(newmask * N.equal(mask, 0), az, frozen)
+ mask = N.clip(mask + newmask, 0, 1)
+ noconverge = asum(N.equal(frozen, -1))
+ if noconverge <> 0 and verbose:
+ print 'a or b too big, or ITMAX too small in Betacf for ', noconverge, ' elements'
+ if arrayflag:
+ return frozen
+ else:
+ return frozen[0]
+
+ def agammln(xx):
+ """
+Returns the gamma function of xx.
+ Gamma(z) = Integral(0,infinity) of t^(z-1)exp(-t) dt.
+Adapted from: Numerical Recipies in C. Can handle multiple dims ... but
+probably doesn't normally have to.
+
+Usage: agammln(xx)
+"""
+ coeff = [76.18009173, -86.50532033, 24.01409822, -1.231739516,
+ 0.120858003e-2, -0.536382e-5]
+ x = xx - 1.0
+ tmp = x + 5.5
+ tmp = tmp - (x + 0.5) * N.log(tmp)
+ ser = 1.0
+ for j in range(len(coeff)):
+ x = x + 1
+ ser = ser + coeff[j] / x
+ return -tmp + N.log(2.50662827465 * ser)
+
+ def abetai(a, b, x, verbose=1):
+ """
+Returns the incomplete beta function:
+
+ I-sub-x(a,b) = 1/B(a,b)*(Integral(0,x) of t^(a-1)(1-t)^(b-1) dt)
+
+where a,b>0 and B(a,b) = G(a)*G(b)/(G(a+b)) where G(a) is the gamma
+function of a. The continued fraction formulation is implemented
+here, using the betacf function. (Adapted from: Numerical Recipies in
+C.) Can handle multiple dimensions.
+
+Usage: abetai(a,b,x,verbose=1)
+"""
+ TINY = 1e-15
+ if type(a) == N.ndarray:
+ if asum(N.less(x, 0) + N.greater(x, 1)) <> 0:
+ raise ValueError, 'Bad x in abetai'
+ x = N.where(N.equal(x, 0), TINY, x)
+ x = N.where(N.equal(x, 1.0), 1 - TINY, x)
+
+ bt = N.where(N.equal(x, 0) + N.equal(x, 1), 0, -1)
+ exponents = (gammln(a + b) - gammln(a) - gammln(b) + a * N.log(x) + b *
+ N.log(1.0 - x))
+ # 746 (below) is the MAX POSSIBLE BEFORE OVERFLOW
+ exponents = N.where(N.less(exponents, -740), -740, exponents)
+ bt = N.exp(exponents)
+ if type(x) == N.ndarray:
+ ans = N.where(
+ N.less(x, (a + 1) / (a + b + 2.0)), bt * abetacf(a, b, x, verbose) /
+ float(a), 1.0 - bt * abetacf(b, a, 1.0 - x, verbose) / float(b))
+ else:
+ if x < (a + 1) / (a + b + 2.0):
+ ans = bt * abetacf(a, b, x, verbose) / float(a)
+ else:
+ ans = 1.0 - bt * abetacf(b, a, 1.0 - x, verbose) / float(b)
+ return ans
+
+#####################################
+####### AANOVA CALCULATIONS #######
+#####################################
+
+ import numpy.linalg, operator
+ LA = numpy.linalg
+
+ def aglm(data, para):
+ """
+Calculates a linear model fit ... anova/ancova/lin-regress/t-test/etc. Taken
+from:
+ Peterson et al. Statistical limitations in functional neuroimaging
+ I. Non-inferential methods and statistical models. Phil Trans Royal Soc
+ Lond B 354: 1239-1260.
+
+Usage: aglm(data,para)
+Returns: statistic, p-value ???
+"""
+ if len(para) <> len(data):
+ print 'data and para must be same length in aglm'
+ return
+ n = len(para)
+ p = pstat.aunique(para)
+ x = N.zeros((n, len(p))) # design matrix
+ for l in range(len(p)):
+ x[:, l] = N.equal(para, p[l])
+ b = N.dot(
+ N.dot(
+ LA.inv(N.dot(
+ N.transpose(x), x)), # i.e., b=inv(X'X)X'Y
+ N.transpose(x)),
+ data)
+ diffs = (data - N.dot(x, b))
+ s_sq = 1. / (n - len(p)) * N.dot(N.transpose(diffs), diffs)
+
+ if len(p) == 2: # ttest_ind
+ c = N.array([1, -1])
+ df = n - 2
+ fact = asum(1.0 / asum(x, 0)) # i.e., 1/n1 + 1/n2 + 1/n3 ...
+ t = N.dot(c, b) / N.sqrt(s_sq * fact)
+ probs = abetai(0.5 * df, 0.5, float(df) / (df + t * t))
+ return t, probs
+
+ def aF_oneway(*args):
+ """
+Performs a 1-way ANOVA, returning an F-value and probability given
+any number of groups. From Heiman, pp.394-7.
+
+Usage: aF_oneway (*args) where *args is 2 or more arrays, one per
+ treatment group
+Returns: f-value, probability
+"""
+ na = len(args) # ANOVA on 'na' groups, each in it's own array
+ means = [0] * na
+ vars = [0] * na
+ ns = [0] * na
+ alldata = []
+ tmp = map(N.array, args)
+ means = map(amean, tmp)
+ vars = map(avar, tmp)
+ ns = map(len, args)
+ alldata = N.concatenate(args)
+ bign = len(alldata)
+ sstot = ass(alldata) - (asquare_of_sums(alldata) / float(bign))
+ ssbn = 0
+ for a in args:
+ ssbn = ssbn + asquare_of_sums(N.array(a)) / float(len(a))
+ ssbn = ssbn - (asquare_of_sums(alldata) / float(bign))
+ sswn = sstot - ssbn
+ dfbn = na - 1
+ dfwn = bign - na
+ msb = ssbn / float(dfbn)
+ msw = sswn / float(dfwn)
+ f = msb / msw
+ prob = fprob(dfbn, dfwn, f)
+ return f, prob
+
+ def aF_value(ER, EF, dfR, dfF):
+ """
+Returns an F-statistic given the following:
+ ER = error associated with the null hypothesis (the Restricted model)
+ EF = error associated with the alternate hypothesis (the Full model)
+ dfR = degrees of freedom the Restricted model
+ dfF = degrees of freedom associated with the Restricted model
+"""
+ return ((ER - EF) / float(dfR - dfF) / (EF / float(dfF)))
+
+ def outputfstats(Enum, Eden, dfnum, dfden, f, prob):
+ Enum = round(Enum, 3)
+ Eden = round(Eden, 3)
+ dfnum = round(Enum, 3)
+ dfden = round(dfden, 3)
+ f = round(f, 3)
+ prob = round(prob, 3)
+ suffix = '' # for *s after the p-value
+ if prob < 0.001:
+ suffix = ' ***'
+ elif prob < 0.01:
+ suffix = ' **'
+ elif prob < 0.05:
+ suffix = ' *'
+ title = [['EF/ER', 'DF', 'Mean Square', 'F-value', 'prob', '']]
+ lofl = title + [[Enum, dfnum, round(Enum / float(dfnum), 3), f, prob, suffix
+ ], [Eden, dfden, round(Eden / float(dfden), 3), '', '', '']]
+ pstat.printcc(lofl)
+ return
+
+ def F_value_multivariate(ER, EF, dfnum, dfden):
+ """
+Returns an F-statistic given the following:
+ ER = error associated with the null hypothesis (the Restricted model)
+ EF = error associated with the alternate hypothesis (the Full model)
+ dfR = degrees of freedom the Restricted model
+ dfF = degrees of freedom associated with the Restricted model
+where ER and EF are matrices from a multivariate F calculation.
+"""
+ if type(ER) in [IntType, FloatType]:
+ ER = N.array([[ER]])
+ if type(EF) in [IntType, FloatType]:
+ EF = N.array([[EF]])
+ n_um = (LA.det(ER) - LA.det(EF)) / float(dfnum)
+ d_en = LA.det(EF) / float(dfden)
+ return n_um / d_en
+
+#####################################
+####### ASUPPORT FUNCTIONS ########
+#####################################
+
+ def asign(a):
+ """
+Usage: asign(a)
+Returns: array shape of a, with -1 where a<0 and +1 where a>=0
+"""
+ a = N.asarray(a)
+ if ((type(a) == type(1.4)) or (type(a) == type(1))):
+ return a - a - N.less(a, 0) + N.greater(a, 0)
+ else:
+ return N.zeros(N.shape(a)) - N.less(a, 0) + N.greater(a, 0)
+
+ def asum(a, dimension=None, keepdims=0):
+ """
+An alternative to the Numeric.add.reduce function, which allows one to
+(1) collapse over multiple dimensions at once, and/or (2) to retain
+all dimensions in the original array (squashing one down to size.
+Dimension can equal None (ravel array first), an integer (the
+dimension over which to operate), or a sequence (operate over multiple
+dimensions). If keepdims=1, the resulting array will have as many
+dimensions as the input array.
+
+Usage: asum(a, dimension=None, keepdims=0)
+Returns: array summed along 'dimension'(s), same _number_ of dims if keepdims=1
+"""
+ if type(a) == N.ndarray and a.dtype in [N.int_, N.short, N.ubyte]:
+ a = a.astype(N.float_)
+ if dimension == None:
+ s = N.sum(N.ravel(a))
+ elif type(dimension) in [IntType, FloatType]:
+ s = N.add.reduce(a, dimension)
+ if keepdims == 1:
+ shp = list(a.shape)
+ shp[dimension] = 1
+ s = N.reshape(s, shp)
+ else: # must be a SEQUENCE of dims to sum over
+ dims = list(dimension)
+ dims.sort()
+ dims.reverse()
+ s = a * 1.0
+ for dim in dims:
+ s = N.add.reduce(s, dim)
+ if keepdims == 1:
+ shp = list(a.shape)
+ for dim in dims:
+ shp[dim] = 1
+ s = N.reshape(s, shp)
+ return s
+
+ def acumsum(a, dimension=None):
+ """
+Returns an array consisting of the cumulative sum of the items in the
+passed array. Dimension can equal None (ravel array first), an
+integer (the dimension over which to operate), or a sequence (operate
+over multiple dimensions, but this last one just barely makes sense).
+
+Usage: acumsum(a,dimension=None)
+"""
+ if dimension == None:
+ a = N.ravel(a)
+ dimension = 0
+ if type(dimension) in [ListType, TupleType, N.ndarray]:
+ dimension = list(dimension)
+ dimension.sort()
+ dimension.reverse()
+ for d in dimension:
+ a = N.add.accumulate(a, d)
+ return a
+ else:
+ return N.add.accumulate(a, dimension)
+
+ def ass(inarray, dimension=None, keepdims=0):
+ """
+Squares each value in the passed array, adds these squares & returns
+the result. Unfortunate function name. :-) Defaults to ALL values in
+the array. Dimension can equal None (ravel array first), an integer
+(the dimension over which to operate), or a sequence (operate over
+multiple dimensions). Set keepdims=1 to maintain the original number
+of dimensions.
+
+Usage: ass(inarray, dimension=None, keepdims=0)
+Returns: sum-along-'dimension' for (inarray*inarray)
+"""
+ if dimension == None:
+ inarray = N.ravel(inarray)
+ dimension = 0
+ return asum(inarray * inarray, dimension, keepdims)
+
+ def asummult(array1, array2, dimension=None, keepdims=0):
+ """
+Multiplies elements in array1 and array2, element by element, and
+returns the sum (along 'dimension') of all resulting multiplications.
+Dimension can equal None (ravel array first), an integer (the
+dimension over which to operate), or a sequence (operate over multiple
+dimensions). A trivial function, but included for completeness.
+
+Usage: asummult(array1,array2,dimension=None,keepdims=0)
+"""
+ if dimension == None:
+ array1 = N.ravel(array1)
+ array2 = N.ravel(array2)
+ dimension = 0
+ return asum(array1 * array2, dimension, keepdims)
+
+ def asquare_of_sums(inarray, dimension=None, keepdims=0):
+ """
+Adds the values in the passed array, squares that sum, and returns the
+result. Dimension can equal None (ravel array first), an integer (the
+dimension over which to operate), or a sequence (operate over multiple
+dimensions). If keepdims=1, the returned array will have the same
+NUMBER of dimensions as the original.
+
+Usage: asquare_of_sums(inarray, dimension=None, keepdims=0)
+Returns: the square of the sum over dim(s) in dimension
+"""
+ if dimension == None:
+ inarray = N.ravel(inarray)
+ dimension = 0
+ s = asum(inarray, dimension, keepdims)
+ if type(s) == N.ndarray:
+ return s.astype(N.float_) * s
+ else:
+ return float(s) * s
+
+ def asumdiffsquared(a, b, dimension=None, keepdims=0):
+ """
+Takes pairwise differences of the values in arrays a and b, squares
+these differences, and returns the sum of these squares. Dimension
+can equal None (ravel array first), an integer (the dimension over
+which to operate), or a sequence (operate over multiple dimensions).
+keepdims=1 means the return shape = len(a.shape) = len(b.shape)
+
+Usage: asumdiffsquared(a,b)
+Returns: sum[ravel(a-b)**2]
+"""
+ if dimension == None:
+ inarray = N.ravel(a)
+ dimension = 0
+ return asum((a - b)**2, dimension, keepdims)
+
+ def ashellsort(inarray):
+ """
+Shellsort algorithm. Sorts a 1D-array.
+
+Usage: ashellsort(inarray)
+Returns: sorted-inarray, sorting-index-vector (for original array)
+"""
+ n = len(inarray)
+ svec = inarray * 1.0
+ ivec = range(n)
+ gap = n / 2 # integer division needed
+ while gap > 0:
+ for i in range(gap, n):
+ for j in range(i - gap, -1, -gap):
+ while j >= 0 and svec[j] > svec[j + gap]:
+ temp = svec[j]
+ svec[j] = svec[j + gap]
+ svec[j + gap] = temp
+ itemp = ivec[j]
+ ivec[j] = ivec[j + gap]
+ ivec[j + gap] = itemp
+ gap = gap / 2 # integer division needed
+# svec is now sorted input vector, ivec has the order svec[i] = vec[ivec[i]]
+ return svec, ivec
+
+ def arankdata(inarray):
+ """
+Ranks the data in inarray, dealing with ties appropritely. Assumes
+a 1D inarray. Adapted from Gary Perlman's |Stat ranksort.
+
+Usage: arankdata(inarray)
+Returns: array of length equal to inarray, containing rank scores
+"""
+ n = len(inarray)
+ svec, ivec = ashellsort(inarray)
+ sumranks = 0
+ dupcount = 0
+ newarray = N.zeros(n, N.float_)
+ for i in range(n):
+ sumranks = sumranks + i
+ dupcount = dupcount + 1
+ if i == n - 1 or svec[i] <> svec[i + 1]:
+ averank = sumranks / float(dupcount) + 1
+ for j in range(i - dupcount + 1, i + 1):
+ newarray[ivec[j]] = averank
+ sumranks = 0
+ dupcount = 0
+ return newarray
+
+ def afindwithin(data):
+ """
+Returns a binary vector, 1=within-subject factor, 0=between. Input
+equals the entire data array (i.e., column 1=random factor, last
+column = measured values.
+
+Usage: afindwithin(data) data in |Stat format
+"""
+ numfact = len(data[0]) - 2
+ withinvec = [0] * numfact
+ for col in range(1, numfact + 1):
+ rows = pstat.linexand(data, col, pstat.unique(pstat.colex(data, 1))[0]
+ ) # get 1 level of this factor
+ if len(pstat.unique(pstat.colex(rows, 0))) < len(
+ rows): # if fewer subjects than scores on this factor
+ withinvec[col - 1] = 1
+ return withinvec
+
+ #########################################################
+ #########################################################
+ ###### RE-DEFINE DISPATCHES TO INCLUDE ARRAYS #########
+ #########################################################
+ #########################################################
+
+ ## CENTRAL TENDENCY:
+ geometricmean = Dispatch(
+ (lgeometricmean, (ListType, TupleType)), (ageometricmean, (N.ndarray,)))
+ harmonicmean = Dispatch(
+ (lharmonicmean, (ListType, TupleType)), (aharmonicmean, (N.ndarray,)))
+ mean = Dispatch((lmean, (ListType, TupleType)), (amean, (N.ndarray,)))
+ median = Dispatch((lmedian, (ListType, TupleType)), (amedian, (N.ndarray,)))
+ medianscore = Dispatch(
+ (lmedianscore, (ListType, TupleType)), (amedianscore, (N.ndarray,)))
+ mode = Dispatch((lmode, (ListType, TupleType)), (amode, (N.ndarray,)))
+ tmean = Dispatch((atmean, (N.ndarray,)))
+ tvar = Dispatch((atvar, (N.ndarray,)))
+ tstdev = Dispatch((atstdev, (N.ndarray,)))
+ tsem = Dispatch((atsem, (N.ndarray,)))
+
+ ## VARIATION:
+ moment = Dispatch((lmoment, (ListType, TupleType)), (amoment, (N.ndarray,)))
+ variation = Dispatch(
+ (lvariation, (ListType, TupleType)), (avariation, (N.ndarray,)))
+ skew = Dispatch((lskew, (ListType, TupleType)), (askew, (N.ndarray,)))
+ kurtosis = Dispatch(
+ (lkurtosis, (ListType, TupleType)), (akurtosis, (N.ndarray,)))
+ describe = Dispatch(
+ (ldescribe, (ListType, TupleType)), (adescribe, (N.ndarray,)))
+
+ ## DISTRIBUTION TESTS
+
+ skewtest = Dispatch(
+ (askewtest, (ListType, TupleType)), (askewtest, (N.ndarray,)))
+ kurtosistest = Dispatch(
+ (akurtosistest, (ListType, TupleType)), (akurtosistest, (N.ndarray,)))
+ normaltest = Dispatch(
+ (anormaltest, (ListType, TupleType)), (anormaltest, (N.ndarray,)))
+
+ ## FREQUENCY STATS:
+ itemfreq = Dispatch(
+ (litemfreq, (ListType, TupleType)), (aitemfreq, (N.ndarray,)))
+ scoreatpercentile = Dispatch(
+ (lscoreatpercentile, (ListType, TupleType)), (ascoreatpercentile,
+ (N.ndarray,)))
+ percentileofscore = Dispatch(
+ (lpercentileofscore, (ListType, TupleType)), (apercentileofscore,
+ (N.ndarray,)))
+ histogram = Dispatch(
+ (lhistogram, (ListType, TupleType)), (ahistogram, (N.ndarray,)))
+ cumfreq = Dispatch(
+ (lcumfreq, (ListType, TupleType)), (acumfreq, (N.ndarray,)))
+ relfreq = Dispatch(
+ (lrelfreq, (ListType, TupleType)), (arelfreq, (N.ndarray,)))
+
+ ## VARIABILITY:
+ obrientransform = Dispatch(
+ (lobrientransform, (ListType, TupleType)), (aobrientransform,
+ (N.ndarray,)))
+ samplevar = Dispatch(
+ (lsamplevar, (ListType, TupleType)), (asamplevar, (N.ndarray,)))
+ samplestdev = Dispatch(
+ (lsamplestdev, (ListType, TupleType)), (asamplestdev, (N.ndarray,)))
+ signaltonoise = Dispatch((asignaltonoise, (N.ndarray,)),)
+ var = Dispatch((lvar, (ListType, TupleType)), (avar, (N.ndarray,)))
+ stdev = Dispatch((lstdev, (ListType, TupleType)), (astdev, (N.ndarray,)))
+ sterr = Dispatch((lsterr, (ListType, TupleType)), (asterr, (N.ndarray,)))
+ sem = Dispatch((lsem, (ListType, TupleType)), (asem, (N.ndarray,)))
+ z = Dispatch((lz, (ListType, TupleType)), (az, (N.ndarray,)))
+ zs = Dispatch((lzs, (ListType, TupleType)), (azs, (N.ndarray,)))
+
+ ## TRIMMING FCNS:
+ threshold = Dispatch((athreshold, (N.ndarray,)),)
+ trimboth = Dispatch(
+ (ltrimboth, (ListType, TupleType)), (atrimboth, (N.ndarray,)))
+ trim1 = Dispatch((ltrim1, (ListType, TupleType)), (atrim1, (N.ndarray,)))
+
+ ## CORRELATION FCNS:
+ paired = Dispatch((lpaired, (ListType, TupleType)), (apaired, (N.ndarray,)))
+ lincc = Dispatch((llincc, (ListType, TupleType)), (alincc, (N.ndarray,)))
+ pearsonr = Dispatch(
+ (lpearsonr, (ListType, TupleType)), (apearsonr, (N.ndarray,)))
+ spearmanr = Dispatch(
+ (lspearmanr, (ListType, TupleType)), (aspearmanr, (N.ndarray,)))
+ pointbiserialr = Dispatch(
+ (lpointbiserialr, (ListType, TupleType)), (apointbiserialr, (N.ndarray,)))
+ kendalltau = Dispatch(
+ (lkendalltau, (ListType, TupleType)), (akendalltau, (N.ndarray,)))
+ linregress = Dispatch(
+ (llinregress, (ListType, TupleType)), (alinregress, (N.ndarray,)))
+
+ ## INFERENTIAL STATS:
+ ttest_1samp = Dispatch(
+ (lttest_1samp, (ListType, TupleType)), (attest_1samp, (N.ndarray,)))
+ ttest_ind = Dispatch(
+ (lttest_ind, (ListType, TupleType)), (attest_ind, (N.ndarray,)))
+ ttest_rel = Dispatch(
+ (lttest_rel, (ListType, TupleType)), (attest_rel, (N.ndarray,)))
+ chisquare = Dispatch(
+ (lchisquare, (ListType, TupleType)), (achisquare, (N.ndarray,)))
+ ks_2samp = Dispatch(
+ (lks_2samp, (ListType, TupleType)), (aks_2samp, (N.ndarray,)))
+ mannwhitneyu = Dispatch(
+ (lmannwhitneyu, (ListType, TupleType)), (amannwhitneyu, (N.ndarray,)))
+ tiecorrect = Dispatch(
+ (ltiecorrect, (ListType, TupleType)), (atiecorrect, (N.ndarray,)))
+ ranksums = Dispatch(
+ (lranksums, (ListType, TupleType)), (aranksums, (N.ndarray,)))
+ wilcoxont = Dispatch(
+ (lwilcoxont, (ListType, TupleType)), (awilcoxont, (N.ndarray,)))
+ kruskalwallish = Dispatch(
+ (lkruskalwallish, (ListType, TupleType)), (akruskalwallish, (N.ndarray,)))
+ friedmanchisquare = Dispatch(
+ (lfriedmanchisquare, (ListType, TupleType)), (afriedmanchisquare,
+ (N.ndarray,)))
+
+ ## PROBABILITY CALCS:
+ chisqprob = Dispatch(
+ (lchisqprob, (IntType, FloatType)), (achisqprob, (N.ndarray,)))
+ zprob = Dispatch((lzprob, (IntType, FloatType)), (azprob, (N.ndarray,)))
+ ksprob = Dispatch((lksprob, (IntType, FloatType)), (aksprob, (N.ndarray,)))
+ fprob = Dispatch((lfprob, (IntType, FloatType)), (afprob, (N.ndarray,)))
+ betacf = Dispatch((lbetacf, (IntType, FloatType)), (abetacf, (N.ndarray,)))
+ betai = Dispatch((lbetai, (IntType, FloatType)), (abetai, (N.ndarray,)))
+ erfcc = Dispatch((lerfcc, (IntType, FloatType)), (aerfcc, (N.ndarray,)))
+ gammln = Dispatch((lgammln, (IntType, FloatType)), (agammln, (N.ndarray,)))
+
+ ## ANOVA FUNCTIONS:
+ F_oneway = Dispatch(
+ (lF_oneway, (ListType, TupleType)), (aF_oneway, (N.ndarray,)))
+ F_value = Dispatch(
+ (lF_value, (ListType, TupleType)), (aF_value, (N.ndarray,)))
+
+ ## SUPPORT FUNCTIONS:
+ incr = Dispatch((lincr, (ListType, TupleType, N.ndarray)),)
+ sum = Dispatch((lsum, (ListType, TupleType)), (asum, (N.ndarray,)))
+ cumsum = Dispatch((lcumsum, (ListType, TupleType)), (acumsum, (N.ndarray,)))
+ ss = Dispatch((lss, (ListType, TupleType)), (ass, (N.ndarray,)))
+ summult = Dispatch(
+ (lsummult, (ListType, TupleType)), (asummult, (N.ndarray,)))
+ square_of_sums = Dispatch(
+ (lsquare_of_sums, (ListType, TupleType)), (asquare_of_sums, (N.ndarray,)))
+ sumdiffsquared = Dispatch(
+ (lsumdiffsquared, (ListType, TupleType)), (asumdiffsquared, (N.ndarray,)))
+ shellsort = Dispatch(
+ (lshellsort, (ListType, TupleType)), (ashellsort, (N.ndarray,)))
+ rankdata = Dispatch(
+ (lrankdata, (ListType, TupleType)), (arankdata, (N.ndarray,)))
+ findwithin = Dispatch(
+ (lfindwithin, (ListType, TupleType)), (afindwithin, (N.ndarray,)))
+
+###################### END OF NUMERIC FUNCTION BLOCK #####################
+
+###################### END OF STATISTICAL FUNCTIONS ######################
+
+except ImportError:
+ pass
diff --git a/cros_utils/tabulator.py b/cros_utils/tabulator.py
new file mode 100644
index 00000000..98f126bc
--- /dev/null
+++ b/cros_utils/tabulator.py
@@ -0,0 +1,1245 @@
+# Copyright (c) 2013 The Chromium OS Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+"""Table generating, analyzing and printing functions.
+
+This defines several classes that are used to generate, analyze and print
+tables.
+
+Example usage:
+
+ from cros_utils import tabulator
+
+ data = [["benchmark1", "33", "44"],["benchmark2", "44", "33"]]
+ tabulator.GetSimpleTable(data)
+
+You could also use it to generate more complex tables with analysis such as
+p-values, custom colors, etc. Tables are generated by TableGenerator and
+analyzed/formatted by TableFormatter. TableFormatter can take in a list of
+columns with custom result computation and coloring, and will compare values in
+each row according to taht scheme. Here is a complex example on printing a
+table:
+
+ from cros_utils import tabulator
+
+ runs = [[{"k1": "10", "k2": "12", "k5": "40", "k6": "40",
+ "ms_1": "20", "k7": "FAIL", "k8": "PASS", "k9": "PASS",
+ "k10": "0"},
+ {"k1": "13", "k2": "14", "k3": "15", "ms_1": "10", "k8": "PASS",
+ "k9": "FAIL", "k10": "0"}],
+ [{"k1": "50", "k2": "51", "k3": "52", "k4": "53", "k5": "35", "k6":
+ "45", "ms_1": "200", "ms_2": "20", "k7": "FAIL", "k8": "PASS", "k9":
+ "PASS"}]]
+ labels = ["vanilla", "modified"]
+ tg = TableGenerator(runs, labels, TableGenerator.SORT_BY_VALUES_DESC)
+ table = tg.GetTable()
+ columns = [Column(LiteralResult(),
+ Format(),
+ "Literal"),
+ Column(AmeanResult(),
+ Format()),
+ Column(StdResult(),
+ Format()),
+ Column(CoeffVarResult(),
+ CoeffVarFormat()),
+ Column(NonEmptyCountResult(),
+ Format()),
+ Column(AmeanRatioResult(),
+ PercentFormat()),
+ Column(AmeanRatioResult(),
+ RatioFormat()),
+ Column(GmeanRatioResult(),
+ RatioFormat()),
+ Column(PValueResult(),
+ PValueFormat()),
+ ]
+ tf = TableFormatter(table, columns)
+ cell_table = tf.GetCellTable()
+ tp = TablePrinter(cell_table, out_to)
+ print tp.Print()
+
+"""
+
+from __future__ import print_function
+
+import getpass
+import math
+import sys
+import numpy
+
+from email_sender import EmailSender
+import misc
+
+
+def _AllFloat(values):
+ return all([misc.IsFloat(v) for v in values])
+
+
+def _GetFloats(values):
+ return [float(v) for v in values]
+
+
+def _StripNone(results):
+ res = []
+ for result in results:
+ if result is not None:
+ res.append(result)
+ return res
+
+
+class TableGenerator(object):
+ """Creates a table from a list of list of dicts.
+
+ The main public function is called GetTable().
+ """
+ SORT_BY_KEYS = 0
+ SORT_BY_KEYS_DESC = 1
+ SORT_BY_VALUES = 2
+ SORT_BY_VALUES_DESC = 3
+
+ MISSING_VALUE = 'x'
+
+ def __init__(self, d, l, sort=SORT_BY_KEYS, key_name='keys'):
+ self._runs = d
+ self._labels = l
+ self._sort = sort
+ self._key_name = key_name
+
+ def _AggregateKeys(self):
+ keys = set([])
+ for run_list in self._runs:
+ for run in run_list:
+ keys = keys.union(run.keys())
+ return keys
+
+ def _GetHighestValue(self, key):
+ values = []
+ for run_list in self._runs:
+ for run in run_list:
+ if key in run:
+ values.append(run[key])
+ values = _StripNone(values)
+ if _AllFloat(values):
+ values = _GetFloats(values)
+ return max(values)
+
+ def _GetLowestValue(self, key):
+ values = []
+ for run_list in self._runs:
+ for run in run_list:
+ if key in run:
+ values.append(run[key])
+ values = _StripNone(values)
+ if _AllFloat(values):
+ values = _GetFloats(values)
+ return min(values)
+
+ def _SortKeys(self, keys):
+ if self._sort == self.SORT_BY_KEYS:
+ return sorted(keys)
+ elif self._sort == self.SORT_BY_VALUES:
+ # pylint: disable=unnecessary-lambda
+ return sorted(keys, key=lambda x: self._GetLowestValue(x))
+ elif self._sort == self.SORT_BY_VALUES_DESC:
+ # pylint: disable=unnecessary-lambda
+ return sorted(keys, key=lambda x: self._GetHighestValue(x), reverse=True)
+ else:
+ assert 0, 'Unimplemented sort %s' % self._sort
+
+ def _GetKeys(self):
+ keys = self._AggregateKeys()
+ return self._SortKeys(keys)
+
+ def GetTable(self, number_of_rows=sys.maxint):
+ """Returns a table from a list of list of dicts.
+
+ The list of list of dicts is passed into the constructor of TableGenerator.
+ This method converts that into a canonical list of lists which represents a
+ table of values.
+
+ Args:
+ number_of_rows: Maximum number of rows to return from the table.
+
+ Returns:
+ A list of lists which is the table.
+
+ Example:
+ We have the following runs:
+ [[{"k1": "v1", "k2": "v2"}, {"k1": "v3"}],
+ [{"k1": "v4", "k4": "v5"}]]
+ and the following labels:
+ ["vanilla", "modified"]
+ it will return:
+ [["Key", "vanilla", "modified"]
+ ["k1", ["v1", "v3"], ["v4"]]
+ ["k2", ["v2"], []]
+ ["k4", [], ["v5"]]]
+ The returned table can then be processed further by other classes in this
+ module.
+ """
+ keys = self._GetKeys()
+ header = [self._key_name] + self._labels
+ table = [header]
+ rows = 0
+ for k in keys:
+ row = [k]
+ unit = None
+ for run_list in self._runs:
+ v = []
+ for run in run_list:
+ if k in run:
+ if type(run[k]) is list:
+ val = run[k][0]
+ unit = run[k][1]
+ else:
+ val = run[k]
+ v.append(val)
+ else:
+ v.append(None)
+ row.append(v)
+ # If we got a 'unit' value, append the units name to the key name.
+ if unit:
+ keyname = row[0] + ' (%s) ' % unit
+ row[0] = keyname
+ table.append(row)
+ rows += 1
+ if rows == number_of_rows:
+ break
+ return table
+
+
+class Result(object):
+ """A class that respresents a single result.
+
+ This single result is obtained by condensing the information from a list of
+ runs and a list of baseline runs.
+ """
+
+ def __init__(self):
+ pass
+
+ def _AllStringsSame(self, values):
+ values_set = set(values)
+ return len(values_set) == 1
+
+ def NeedsBaseline(self):
+ return False
+
+ # pylint: disable=unused-argument
+ def _Literal(self, cell, values, baseline_values):
+ cell.value = ' '.join([str(v) for v in values])
+
+ def _ComputeFloat(self, cell, values, baseline_values):
+ self._Literal(cell, values, baseline_values)
+
+ def _ComputeString(self, cell, values, baseline_values):
+ self._Literal(cell, values, baseline_values)
+
+ def _InvertIfLowerIsBetter(self, cell):
+ pass
+
+ def _GetGmean(self, values):
+ if not values:
+ return float('nan')
+ if any([v < 0 for v in values]):
+ return float('nan')
+ if any([v == 0 for v in values]):
+ return 0.0
+ log_list = [math.log(v) for v in values]
+ gmean_log = sum(log_list) / len(log_list)
+ return math.exp(gmean_log)
+
+ def Compute(self, cell, values, baseline_values):
+ """Compute the result given a list of values and baseline values.
+
+ Args:
+ cell: A cell data structure to populate.
+ values: List of values.
+ baseline_values: List of baseline values. Can be none if this is the
+ baseline itself.
+ """
+ all_floats = True
+ values = _StripNone(values)
+ if not values:
+ cell.value = ''
+ return
+ if _AllFloat(values):
+ float_values = _GetFloats(values)
+ else:
+ all_floats = False
+ if baseline_values:
+ baseline_values = _StripNone(baseline_values)
+ if baseline_values:
+ if _AllFloat(baseline_values):
+ float_baseline_values = _GetFloats(baseline_values)
+ else:
+ all_floats = False
+ else:
+ if self.NeedsBaseline():
+ cell.value = ''
+ return
+ float_baseline_values = None
+ if all_floats:
+ self._ComputeFloat(cell, float_values, float_baseline_values)
+ self._InvertIfLowerIsBetter(cell)
+ else:
+ self._ComputeString(cell, values, baseline_values)
+
+
+class LiteralResult(Result):
+ """A literal result."""
+
+ def __init__(self, iteration=0):
+ super(LiteralResult, self).__init__()
+ self.iteration = iteration
+
+ def Compute(self, cell, values, baseline_values):
+ try:
+ cell.value = values[self.iteration]
+ except IndexError:
+ cell.value = '-'
+
+
+class NonEmptyCountResult(Result):
+ """A class that counts the number of non-empty results.
+
+ The number of non-empty values will be stored in the cell.
+ """
+
+ def Compute(self, cell, values, baseline_values):
+ """Put the number of non-empty values in the cell result.
+
+ Args:
+ cell: Put the result in cell.value.
+ values: A list of values for the row.
+ baseline_values: A list of baseline values for the row.
+ """
+ cell.value = len(_StripNone(values))
+ if not baseline_values:
+ return
+ base_value = len(_StripNone(baseline_values))
+ if cell.value == base_value:
+ return
+ f = ColorBoxFormat()
+ len_values = len(values)
+ len_baseline_values = len(baseline_values)
+ tmp_cell = Cell()
+ tmp_cell.value = 1.0 + (float(cell.value - base_value) /
+ (max(len_values, len_baseline_values)))
+ f.Compute(tmp_cell)
+ cell.bgcolor = tmp_cell.bgcolor
+
+
+class StringMeanResult(Result):
+ """Mean of string values."""
+
+ def _ComputeString(self, cell, values, baseline_values):
+ if self._AllStringsSame(values):
+ cell.value = str(values[0])
+ else:
+ cell.value = '?'
+
+
+class AmeanResult(StringMeanResult):
+ """Arithmetic mean."""
+
+ def _ComputeFloat(self, cell, values, baseline_values):
+ cell.value = numpy.mean(values)
+
+
+class RawResult(Result):
+ """Raw result."""
+ pass
+
+
+class MinResult(Result):
+ """Minimum."""
+
+ def _ComputeFloat(self, cell, values, baseline_values):
+ cell.value = min(values)
+
+ def _ComputeString(self, cell, values, baseline_values):
+ if values:
+ cell.value = min(values)
+ else:
+ cell.value = ''
+
+
+class MaxResult(Result):
+ """Maximum."""
+
+ def _ComputeFloat(self, cell, values, baseline_values):
+ cell.value = max(values)
+
+ def _ComputeString(self, cell, values, baseline_values):
+ if values:
+ cell.value = max(values)
+ else:
+ cell.value = ''
+
+
+class NumericalResult(Result):
+ """Numerical result."""
+
+ def _ComputeString(self, cell, values, baseline_values):
+ cell.value = '?'
+
+
+class StdResult(NumericalResult):
+ """Standard deviation."""
+
+ def _ComputeFloat(self, cell, values, baseline_values):
+ cell.value = numpy.std(values)
+
+
+class CoeffVarResult(NumericalResult):
+ """Standard deviation / Mean"""
+
+ def _ComputeFloat(self, cell, values, baseline_values):
+ if numpy.mean(values) != 0.0:
+ noise = numpy.abs(numpy.std(values) / numpy.mean(values))
+ else:
+ noise = 0.0
+ cell.value = noise
+
+
+class ComparisonResult(Result):
+ """Same or Different."""
+
+ def NeedsBaseline(self):
+ return True
+
+ def _ComputeString(self, cell, values, baseline_values):
+ value = None
+ baseline_value = None
+ if self._AllStringsSame(values):
+ value = values[0]
+ if self._AllStringsSame(baseline_values):
+ baseline_value = baseline_values[0]
+ if value is not None and baseline_value is not None:
+ if value == baseline_value:
+ cell.value = 'SAME'
+ else:
+ cell.value = 'DIFFERENT'
+ else:
+ cell.value = '?'
+
+
+class PValueResult(ComparisonResult):
+ """P-value."""
+
+ def _ComputeFloat(self, cell, values, baseline_values):
+ if len(values) < 2 or len(baseline_values) < 2:
+ cell.value = float('nan')
+ return
+ import stats
+ _, cell.value = stats.lttest_ind(values, baseline_values)
+
+ def _ComputeString(self, cell, values, baseline_values):
+ return float('nan')
+
+
+class KeyAwareComparisonResult(ComparisonResult):
+ """Automatic key aware comparison."""
+
+ def _IsLowerBetter(self, key):
+ # TODO(llozano): Trying to guess direction by looking at the name of the
+ # test does not seem like a good idea. Test frameworks should provide this
+ # info explicitly. I believe Telemetry has this info. Need to find it out.
+ #
+ # Below are some test names for which we are not sure what the
+ # direction is.
+ #
+ # For these we dont know what the direction is. But, since we dont
+ # specify anything, crosperf will assume higher is better:
+ # --percent_impl_scrolled--percent_impl_scrolled--percent
+ # --solid_color_tiles_analyzed--solid_color_tiles_analyzed--count
+ # --total_image_cache_hit_count--total_image_cache_hit_count--count
+ # --total_texture_upload_time_by_url
+ #
+ # About these we are doubtful but we made a guess:
+ # --average_num_missing_tiles_by_url--*--units (low is good)
+ # --experimental_mean_frame_time_by_url--*--units (low is good)
+ # --experimental_median_frame_time_by_url--*--units (low is good)
+ # --texture_upload_count--texture_upload_count--count (high is good)
+ # --total_deferred_image_decode_count--count (low is good)
+ # --total_tiles_analyzed--total_tiles_analyzed--count (high is good)
+ lower_is_better_keys = ['milliseconds', 'ms_', 'seconds_', 'KB', 'rdbytes',
+ 'wrbytes', 'dropped_percent', '(ms)', '(seconds)',
+ '--ms', '--average_num_missing_tiles',
+ '--experimental_jank', '--experimental_mean_frame',
+ '--experimental_median_frame_time',
+ '--total_deferred_image_decode_count', '--seconds']
+
+ return any([l in key for l in lower_is_better_keys])
+
+ def _InvertIfLowerIsBetter(self, cell):
+ if self._IsLowerBetter(cell.name):
+ if cell.value:
+ cell.value = 1.0 / cell.value
+
+
+class AmeanRatioResult(KeyAwareComparisonResult):
+ """Ratio of arithmetic means of values vs. baseline values."""
+
+ def _ComputeFloat(self, cell, values, baseline_values):
+ if numpy.mean(baseline_values) != 0:
+ cell.value = numpy.mean(values) / numpy.mean(baseline_values)
+ elif numpy.mean(values) != 0:
+ cell.value = 0.00
+ # cell.value = 0 means the values and baseline_values have big difference
+ else:
+ cell.value = 1.00
+ # no difference if both values and baseline_values are 0
+
+
+class GmeanRatioResult(KeyAwareComparisonResult):
+ """Ratio of geometric means of values vs. baseline values."""
+
+ def _ComputeFloat(self, cell, values, baseline_values):
+ if self._GetGmean(baseline_values) != 0:
+ cell.value = self._GetGmean(values) / self._GetGmean(baseline_values)
+ elif self._GetGmean(values) != 0:
+ cell.value = 0.00
+ else:
+ cell.value = 1.00
+
+
+class Color(object):
+ """Class that represents color in RGBA format."""
+
+ def __init__(self, r=0, g=0, b=0, a=0):
+ self.r = r
+ self.g = g
+ self.b = b
+ self.a = a
+
+ def __str__(self):
+ return 'r: %s g: %s: b: %s: a: %s' % (self.r, self.g, self.b, self.a)
+
+ def Round(self):
+ """Round RGBA values to the nearest integer."""
+ self.r = int(self.r)
+ self.g = int(self.g)
+ self.b = int(self.b)
+ self.a = int(self.a)
+
+ def GetRGB(self):
+ """Get a hex representation of the color."""
+ return '%02x%02x%02x' % (self.r, self.g, self.b)
+
+ @classmethod
+ def Lerp(cls, ratio, a, b):
+ """Perform linear interpolation between two colors.
+
+ Args:
+ ratio: The ratio to use for linear polation.
+ a: The first color object (used when ratio is 0).
+ b: The second color object (used when ratio is 1).
+
+ Returns:
+ Linearly interpolated color.
+ """
+ ret = cls()
+ ret.r = (b.r - a.r) * ratio + a.r
+ ret.g = (b.g - a.g) * ratio + a.g
+ ret.b = (b.b - a.b) * ratio + a.b
+ ret.a = (b.a - a.a) * ratio + a.a
+ return ret
+
+
+class Format(object):
+ """A class that represents the format of a column."""
+
+ def __init__(self):
+ pass
+
+ def Compute(self, cell):
+ """Computes the attributes of a cell based on its value.
+
+ Attributes typically are color, width, etc.
+
+ Args:
+ cell: The cell whose attributes are to be populated.
+ """
+ if cell.value is None:
+ cell.string_value = ''
+ if isinstance(cell.value, float):
+ self._ComputeFloat(cell)
+ else:
+ self._ComputeString(cell)
+
+ def _ComputeFloat(self, cell):
+ cell.string_value = '{0:.2f}'.format(cell.value)
+
+ def _ComputeString(self, cell):
+ cell.string_value = str(cell.value)
+
+ def _GetColor(self, value, low, mid, high, power=6, mid_value=1.0):
+ min_value = 0.0
+ max_value = 2.0
+ if math.isnan(value):
+ return mid
+ if value > mid_value:
+ value = max_value - mid_value / value
+
+ return self._GetColorBetweenRange(value, min_value, mid_value, max_value,
+ low, mid, high, power)
+
+ def _GetColorBetweenRange(self, value, min_value, mid_value, max_value,
+ low_color, mid_color, high_color, power):
+ assert value <= max_value
+ assert value >= min_value
+ if value > mid_value:
+ value = (max_value - value) / (max_value - mid_value)
+ value **= power
+ ret = Color.Lerp(value, high_color, mid_color)
+ else:
+ value = (value - min_value) / (mid_value - min_value)
+ value **= power
+ ret = Color.Lerp(value, low_color, mid_color)
+ ret.Round()
+ return ret
+
+
+class PValueFormat(Format):
+ """Formatting for p-value."""
+
+ def _ComputeFloat(self, cell):
+ cell.string_value = '%0.2f' % float(cell.value)
+ if float(cell.value) < 0.05:
+ cell.bgcolor = self._GetColor(cell.value,
+ Color(255, 255, 0, 0),
+ Color(255, 255, 255, 0),
+ Color(255, 255, 255, 0),
+ mid_value=0.05,
+ power=1)
+
+
+class StorageFormat(Format):
+ """Format the cell as a storage number.
+
+ Example:
+ If the cell contains a value of 1024, the string_value will be 1.0K.
+ """
+
+ def _ComputeFloat(self, cell):
+ base = 1024
+ suffices = ['K', 'M', 'G']
+ v = float(cell.value)
+ current = 0
+ while v >= base**(current + 1) and current < len(suffices):
+ current += 1
+
+ if current:
+ divisor = base**current
+ cell.string_value = '%1.1f%s' % ((v / divisor), suffices[current - 1])
+ else:
+ cell.string_value = str(cell.value)
+
+
+class CoeffVarFormat(Format):
+ """Format the cell as a percent.
+
+ Example:
+ If the cell contains a value of 1.5, the string_value will be +150%.
+ """
+
+ def _ComputeFloat(self, cell):
+ cell.string_value = '%1.1f%%' % (float(cell.value) * 100)
+ cell.color = self._GetColor(cell.value,
+ Color(0, 255, 0, 0),
+ Color(0, 0, 0, 0),
+ Color(255, 0, 0, 0),
+ mid_value=0.02,
+ power=1)
+
+
+class PercentFormat(Format):
+ """Format the cell as a percent.
+
+ Example:
+ If the cell contains a value of 1.5, the string_value will be +50%.
+ """
+
+ def _ComputeFloat(self, cell):
+ cell.string_value = '%+1.1f%%' % ((float(cell.value) - 1) * 100)
+ cell.color = self._GetColor(cell.value, Color(255, 0, 0, 0),
+ Color(0, 0, 0, 0), Color(0, 255, 0, 0))
+
+
+class RatioFormat(Format):
+ """Format the cell as a ratio.
+
+ Example:
+ If the cell contains a value of 1.5642, the string_value will be 1.56.
+ """
+
+ def _ComputeFloat(self, cell):
+ cell.string_value = '%+1.1f%%' % ((cell.value - 1) * 100)
+ cell.color = self._GetColor(cell.value, Color(255, 0, 0, 0),
+ Color(0, 0, 0, 0), Color(0, 255, 0, 0))
+
+
+class ColorBoxFormat(Format):
+ """Format the cell as a color box.
+
+ Example:
+ If the cell contains a value of 1.5, it will get a green color.
+ If the cell contains a value of 0.5, it will get a red color.
+ The intensity of the green/red will be determined by how much above or below
+ 1.0 the value is.
+ """
+
+ def _ComputeFloat(self, cell):
+ cell.string_value = '--'
+ bgcolor = self._GetColor(cell.value, Color(255, 0, 0, 0),
+ Color(255, 255, 255, 0), Color(0, 255, 0, 0))
+ cell.bgcolor = bgcolor
+ cell.color = bgcolor
+
+
+class Cell(object):
+ """A class to represent a cell in a table.
+
+ Attributes:
+ value: The raw value of the cell.
+ color: The color of the cell.
+ bgcolor: The background color of the cell.
+ string_value: The string value of the cell.
+ suffix: A string suffix to be attached to the value when displaying.
+ prefix: A string prefix to be attached to the value when displaying.
+ color_row: Indicates whether the whole row is to inherit this cell's color.
+ bgcolor_row: Indicates whether the whole row is to inherit this cell's
+ bgcolor.
+ width: Optional specifier to make a column narrower than the usual width.
+ The usual width of a column is the max of all its cells widths.
+ colspan: Set the colspan of the cell in the HTML table, this is used for
+ table headers. Default value is 1.
+ name: the test name of the cell.
+ header: Whether this is a header in html.
+ """
+
+ def __init__(self):
+ self.value = None
+ self.color = None
+ self.bgcolor = None
+ self.string_value = None
+ self.suffix = None
+ self.prefix = None
+ # Entire row inherits this color.
+ self.color_row = False
+ self.bgcolor_row = False
+ self.width = None
+ self.colspan = 1
+ self.name = None
+ self.header = False
+
+ def __str__(self):
+ l = []
+ l.append('value: %s' % self.value)
+ l.append('string_value: %s' % self.string_value)
+ return ' '.join(l)
+
+
+class Column(object):
+ """Class representing a column in a table.
+
+ Attributes:
+ result: an object of the Result class.
+ fmt: an object of the Format class.
+ """
+
+ def __init__(self, result, fmt, name=''):
+ self.result = result
+ self.fmt = fmt
+ self.name = name
+
+
+# Takes in:
+# ["Key", "Label1", "Label2"]
+# ["k", ["v", "v2"], [v3]]
+# etc.
+# Also takes in a format string.
+# Returns a table like:
+# ["Key", "Label1", "Label2"]
+# ["k", avg("v", "v2"), stddev("v", "v2"), etc.]]
+# according to format string
+class TableFormatter(object):
+ """Class to convert a plain table into a cell-table.
+
+ This class takes in a table generated by TableGenerator and a list of column
+ formats to apply to the table and returns a table of cells.
+ """
+
+ def __init__(self, table, columns):
+ """The constructor takes in a table and a list of columns.
+
+ Args:
+ table: A list of lists of values.
+ columns: A list of column containing what to produce and how to format it.
+ """
+ self._table = table
+ self._columns = columns
+ self._table_columns = []
+ self._out_table = []
+
+ def GenerateCellTable(self, table_type):
+ row_index = 0
+ all_failed = False
+
+ for row in self._table[1:]:
+ # It does not make sense to put retval in the summary table.
+ if str(row[0]) == 'retval' and table_type == 'summary':
+ # Check to see if any runs passed, and update all_failed.
+ all_failed = True
+ for values in row[1:]:
+ if 0 in values:
+ all_failed = False
+ continue
+ key = Cell()
+ key.string_value = str(row[0])
+ out_row = [key]
+ baseline = None
+ for values in row[1:]:
+ for column in self._columns:
+ cell = Cell()
+ cell.name = key.string_value
+ if column.result.NeedsBaseline():
+ if baseline is not None:
+ column.result.Compute(cell, values, baseline)
+ column.fmt.Compute(cell)
+ out_row.append(cell)
+ if not row_index:
+ self._table_columns.append(column)
+ else:
+ column.result.Compute(cell, values, baseline)
+ column.fmt.Compute(cell)
+ out_row.append(cell)
+ if not row_index:
+ self._table_columns.append(column)
+
+ if baseline is None:
+ baseline = values
+ self._out_table.append(out_row)
+ row_index += 1
+
+ # If this is a summary table, and the only row in it is 'retval', and
+ # all the test runs failed, we need to a 'Results' row to the output
+ # table.
+ if table_type == 'summary' and all_failed and len(self._table) == 2:
+ labels_row = self._table[0]
+ key = Cell()
+ key.string_value = 'Results'
+ out_row = [key]
+ baseline = None
+ for _ in labels_row[1:]:
+ for column in self._columns:
+ cell = Cell()
+ cell.name = key.string_value
+ column.result.Compute(cell, ['Fail'], baseline)
+ column.fmt.Compute(cell)
+ out_row.append(cell)
+ if not row_index:
+ self._table_columns.append(column)
+ self._out_table.append(out_row)
+
+ def AddColumnName(self):
+ """Generate Column name at the top of table."""
+ key = Cell()
+ key.header = True
+ key.string_value = 'Keys'
+ header = [key]
+ for column in self._table_columns:
+ cell = Cell()
+ cell.header = True
+ if column.name:
+ cell.string_value = column.name
+ else:
+ result_name = column.result.__class__.__name__
+ format_name = column.fmt.__class__.__name__
+
+ cell.string_value = '%s %s' % (result_name.replace('Result', ''),
+ format_name.replace('Format', ''))
+
+ header.append(cell)
+
+ self._out_table = [header] + self._out_table
+
+ def AddHeader(self, s):
+ """Put additional string on the top of the table."""
+ cell = Cell()
+ cell.header = True
+ cell.string_value = str(s)
+ header = [cell]
+ colspan = max(1, max(len(row) for row in self._table))
+ cell.colspan = colspan
+ self._out_table = [header] + self._out_table
+
+ def GetPassesAndFails(self, values):
+ passes = 0
+ fails = 0
+ for val in values:
+ if val == 0:
+ passes = passes + 1
+ else:
+ fails = fails + 1
+ return passes, fails
+
+ def AddLabelName(self):
+ """Put label on the top of the table."""
+ top_header = []
+ base_colspan = len([c for c in self._columns if not c.result.NeedsBaseline()
+ ])
+ compare_colspan = len(self._columns)
+ # Find the row with the key 'retval', if it exists. This
+ # will be used to calculate the number of iterations that passed and
+ # failed for each image label.
+ retval_row = None
+ for row in self._table:
+ if row[0] == 'retval':
+ retval_row = row
+ # The label is organized as follows
+ # "keys" label_base, label_comparison1, label_comparison2
+ # The first cell has colspan 1, the second is base_colspan
+ # The others are compare_colspan
+ column_position = 0
+ for label in self._table[0]:
+ cell = Cell()
+ cell.header = True
+ # Put the number of pass/fail iterations in the image label header.
+ if column_position > 0 and retval_row:
+ retval_values = retval_row[column_position]
+ if type(retval_values) is list:
+ passes, fails = self.GetPassesAndFails(retval_values)
+ cell.string_value = str(label) + ' (pass:%d fail:%d)' % (passes,
+ fails)
+ else:
+ cell.string_value = str(label)
+ else:
+ cell.string_value = str(label)
+ if top_header:
+ cell.colspan = base_colspan
+ if len(top_header) > 1:
+ cell.colspan = compare_colspan
+ top_header.append(cell)
+ column_position = column_position + 1
+ self._out_table = [top_header] + self._out_table
+
+ def _PrintOutTable(self):
+ o = ''
+ for row in self._out_table:
+ for cell in row:
+ o += str(cell) + ' '
+ o += '\n'
+ print(o)
+
+ def GetCellTable(self, table_type='full', headers=True):
+ """Function to return a table of cells.
+
+ The table (list of lists) is converted into a table of cells by this
+ function.
+
+ Args:
+ table_type: Can be 'full' or 'summary'
+ headers: A boolean saying whether we want default headers
+
+ Returns:
+ A table of cells with each cell having the properties and string values as
+ requiested by the columns passed in the constructor.
+ """
+ # Generate the cell table, creating a list of dynamic columns on the fly.
+ if not self._out_table:
+ self.GenerateCellTable(table_type)
+ if headers:
+ self.AddColumnName()
+ self.AddLabelName()
+ return self._out_table
+
+
+class TablePrinter(object):
+ """Class to print a cell table to the console, file or html."""
+ PLAIN = 0
+ CONSOLE = 1
+ HTML = 2
+ TSV = 3
+ EMAIL = 4
+
+ def __init__(self, table, output_type):
+ """Constructor that stores the cell table and output type."""
+ self._table = table
+ self._output_type = output_type
+ self._row_styles = []
+ self._column_styles = []
+
+ # Compute whole-table properties like max-size, etc.
+ def _ComputeStyle(self):
+ self._row_styles = []
+ for row in self._table:
+ row_style = Cell()
+ for cell in row:
+ if cell.color_row:
+ assert cell.color, 'Cell color not set but color_row set!'
+ assert not row_style.color, 'Multiple row_style.colors found!'
+ row_style.color = cell.color
+ if cell.bgcolor_row:
+ assert cell.bgcolor, 'Cell bgcolor not set but bgcolor_row set!'
+ assert not row_style.bgcolor, 'Multiple row_style.bgcolors found!'
+ row_style.bgcolor = cell.bgcolor
+ self._row_styles.append(row_style)
+
+ self._column_styles = []
+ if len(self._table) < 2:
+ return
+
+ for i in range(max(len(row) for row in self._table)):
+ column_style = Cell()
+ for row in self._table:
+ if not any([cell.colspan != 1 for cell in row]):
+ column_style.width = max(column_style.width, len(row[i].string_value))
+ self._column_styles.append(column_style)
+
+ def _GetBGColorFix(self, color):
+ if self._output_type == self.CONSOLE:
+ prefix = misc.rgb2short(color.r, color.g, color.b)
+ # pylint: disable=anomalous-backslash-in-string
+ prefix = '\033[48;5;%sm' % prefix
+ suffix = '\033[0m'
+ elif self._output_type in [self.EMAIL, self.HTML]:
+ rgb = color.GetRGB()
+ prefix = ("<FONT style=\"BACKGROUND-COLOR:#{0}\">".format(rgb))
+ suffix = '</FONT>'
+ elif self._output_type in [self.PLAIN, self.TSV]:
+ prefix = ''
+ suffix = ''
+ return prefix, suffix
+
+ def _GetColorFix(self, color):
+ if self._output_type == self.CONSOLE:
+ prefix = misc.rgb2short(color.r, color.g, color.b)
+ # pylint: disable=anomalous-backslash-in-string
+ prefix = '\033[38;5;%sm' % prefix
+ suffix = '\033[0m'
+ elif self._output_type in [self.EMAIL, self.HTML]:
+ rgb = color.GetRGB()
+ prefix = '<FONT COLOR=#{0}>'.format(rgb)
+ suffix = '</FONT>'
+ elif self._output_type in [self.PLAIN, self.TSV]:
+ prefix = ''
+ suffix = ''
+ return prefix, suffix
+
+ def Print(self):
+ """Print the table to a console, html, etc.
+
+ Returns:
+ A string that contains the desired representation of the table.
+ """
+ self._ComputeStyle()
+ return self._GetStringValue()
+
+ def _GetCellValue(self, i, j):
+ cell = self._table[i][j]
+ out = cell.string_value
+ raw_width = len(out)
+
+ if cell.color:
+ p, s = self._GetColorFix(cell.color)
+ out = '%s%s%s' % (p, out, s)
+
+ if cell.bgcolor:
+ p, s = self._GetBGColorFix(cell.bgcolor)
+ out = '%s%s%s' % (p, out, s)
+
+ if self._output_type in [self.PLAIN, self.CONSOLE, self.EMAIL]:
+ if cell.width:
+ width = cell.width
+ else:
+ if self._column_styles:
+ width = self._column_styles[j].width
+ else:
+ width = len(cell.string_value)
+ if cell.colspan > 1:
+ width = 0
+ start = 0
+ for k in range(j):
+ start += self._table[i][k].colspan
+ for k in range(cell.colspan):
+ width += self._column_styles[start + k].width
+ if width > raw_width:
+ padding = ('%' + str(width - raw_width) + 's') % ''
+ out = padding + out
+
+ if self._output_type == self.HTML:
+ if cell.header:
+ tag = 'th'
+ else:
+ tag = 'td'
+ out = "<{0} colspan = \"{2}\"> {1} </{0}>".format(tag, out, cell.colspan)
+
+ return out
+
+ def _GetHorizontalSeparator(self):
+ if self._output_type in [self.CONSOLE, self.PLAIN, self.EMAIL]:
+ return ' '
+ if self._output_type == self.HTML:
+ return ''
+ if self._output_type == self.TSV:
+ return '\t'
+
+ def _GetVerticalSeparator(self):
+ if self._output_type in [self.PLAIN, self.CONSOLE, self.TSV, self.EMAIL]:
+ return '\n'
+ if self._output_type == self.HTML:
+ return '</tr>\n<tr>'
+
+ def _GetPrefix(self):
+ if self._output_type in [self.PLAIN, self.CONSOLE, self.TSV, self.EMAIL]:
+ return ''
+ if self._output_type == self.HTML:
+ return "<p></p><table id=\"box-table-a\">\n<tr>"
+
+ def _GetSuffix(self):
+ if self._output_type in [self.PLAIN, self.CONSOLE, self.TSV, self.EMAIL]:
+ return ''
+ if self._output_type == self.HTML:
+ return '</tr>\n</table>'
+
+ def _GetStringValue(self):
+ o = ''
+ o += self._GetPrefix()
+ for i in range(len(self._table)):
+ row = self._table[i]
+ # Apply row color and bgcolor.
+ p = s = bgp = bgs = ''
+ if self._row_styles[i].bgcolor:
+ bgp, bgs = self._GetBGColorFix(self._row_styles[i].bgcolor)
+ if self._row_styles[i].color:
+ p, s = self._GetColorFix(self._row_styles[i].color)
+ o += p + bgp
+ for j in range(len(row)):
+ out = self._GetCellValue(i, j)
+ o += out + self._GetHorizontalSeparator()
+ o += s + bgs
+ o += self._GetVerticalSeparator()
+ o += self._GetSuffix()
+ return o
+
+
+# Some common drivers
+def GetSimpleTable(table, out_to=TablePrinter.CONSOLE):
+ """Prints a simple table.
+
+ This is used by code that has a very simple list-of-lists and wants to produce
+ a table with ameans, a percentage ratio of ameans and a colorbox.
+
+ Args:
+ table: a list of lists.
+ out_to: specify the fomat of output. Currently it supports HTML and CONSOLE.
+
+ Returns:
+ A string version of the table that can be printed to the console.
+
+ Example:
+ GetSimpleConsoleTable([["binary", "b1", "b2"],["size", "300", "400"]])
+ will produce a colored table that can be printed to the console.
+ """
+ columns = [
+ Column(AmeanResult(), Format()),
+ Column(AmeanRatioResult(), PercentFormat()),
+ Column(AmeanRatioResult(), ColorBoxFormat()),
+ ]
+ our_table = [table[0]]
+ for row in table[1:]:
+ our_row = [row[0]]
+ for v in row[1:]:
+ our_row.append([v])
+ our_table.append(our_row)
+
+ tf = TableFormatter(our_table, columns)
+ cell_table = tf.GetCellTable()
+ tp = TablePrinter(cell_table, out_to)
+ return tp.Print()
+
+
+# pylint: disable=redefined-outer-name
+def GetComplexTable(runs, labels, out_to=TablePrinter.CONSOLE):
+ """Prints a complex table.
+
+ This can be used to generate a table with arithmetic mean, standard deviation,
+ coefficient of variation, p-values, etc.
+
+ Args:
+ runs: A list of lists with data to tabulate.
+ labels: A list of labels that correspond to the runs.
+ out_to: specifies the format of the table (example CONSOLE or HTML).
+
+ Returns:
+ A string table that can be printed to the console or put in an HTML file.
+ """
+ tg = TableGenerator(runs, labels, TableGenerator.SORT_BY_VALUES_DESC)
+ table = tg.GetTable()
+ columns = [Column(LiteralResult(), Format(), 'Literal'),
+ Column(AmeanResult(), Format()), Column(StdResult(), Format()),
+ Column(CoeffVarResult(), CoeffVarFormat()),
+ Column(NonEmptyCountResult(), Format()),
+ Column(AmeanRatioResult(), PercentFormat()),
+ Column(AmeanRatioResult(), RatioFormat()),
+ Column(GmeanRatioResult(), RatioFormat()),
+ Column(PValueResult(), PValueFormat())]
+ tf = TableFormatter(table, columns)
+ cell_table = tf.GetCellTable()
+ tp = TablePrinter(cell_table, out_to)
+ return tp.Print()
+
+
+if __name__ == '__main__':
+ # Run a few small tests here.
+ runs = [[{'k1': '10',
+ 'k2': '12',
+ 'k5': '40',
+ 'k6': '40',
+ 'ms_1': '20',
+ 'k7': 'FAIL',
+ 'k8': 'PASS',
+ 'k9': 'PASS',
+ 'k10': '0'}, {'k1': '13',
+ 'k2': '14',
+ 'k3': '15',
+ 'ms_1': '10',
+ 'k8': 'PASS',
+ 'k9': 'FAIL',
+ 'k10': '0'}], [{'k1': '50',
+ 'k2': '51',
+ 'k3': '52',
+ 'k4': '53',
+ 'k5': '35',
+ 'k6': '45',
+ 'ms_1': '200',
+ 'ms_2': '20',
+ 'k7': 'FAIL',
+ 'k8': 'PASS',
+ 'k9': 'PASS'}]]
+ labels = ['vanilla', 'modified']
+ t = GetComplexTable(runs, labels, TablePrinter.CONSOLE)
+ print(t)
+ email = GetComplexTable(runs, labels, TablePrinter.EMAIL)
+
+ runs = [[{'k1': '1'}, {'k1': '1.1'}, {'k1': '1.2'}],
+ [{'k1': '5'}, {'k1': '5.1'}, {'k1': '5.2'}]]
+ t = GetComplexTable(runs, labels, TablePrinter.CONSOLE)
+ print(t)
+
+ simple_table = [
+ ['binary', 'b1', 'b2', 'b3'],
+ ['size', 100, 105, 108],
+ ['rodata', 100, 80, 70],
+ ['data', 100, 100, 100],
+ ['debug', 100, 140, 60],
+ ]
+ t = GetSimpleTable(simple_table)
+ print(t)
+ email += GetSimpleTable(simple_table, TablePrinter.HTML)
+ email_to = [getpass.getuser()]
+ email = "<pre style='font-size: 13px'>%s</pre>" % email
+ EmailSender().SendEmail(email_to, 'SimpleTableTest', email, msg_type='html')
diff --git a/cros_utils/tabulator_test.py b/cros_utils/tabulator_test.py
new file mode 100644
index 00000000..21cd1e73
--- /dev/null
+++ b/cros_utils/tabulator_test.py
@@ -0,0 +1,141 @@
+# Copyright 2012 Google Inc. All Rights Reserved.
+"""Tests for the tabulator module."""
+
+from __future__ import print_function
+
+__author__ = 'asharif@google.com (Ahmad Sharif)'
+
+# System modules
+import unittest
+
+# Local modules
+import tabulator
+
+
+class TabulatorTest(unittest.TestCase):
+ """Tests for the Tabulator class."""
+
+ def testResult(self):
+ table = ['k1', ['1', '3'], ['55']]
+ result = tabulator.Result()
+ cell = tabulator.Cell()
+ result.Compute(cell, table[2], table[1])
+ expected = ' '.join([str(float(v)) for v in table[2]])
+ self.assertTrue(cell.value == expected)
+
+ result = tabulator.AmeanResult()
+ cell = tabulator.Cell()
+ result.Compute(cell, table[2], table[1])
+ self.assertTrue(cell.value == float(table[2][0]))
+
+ def testStringMean(self):
+ smr = tabulator.StringMeanResult()
+ cell = tabulator.Cell()
+ value = 'PASS'
+ values = [value for _ in range(3)]
+ smr.Compute(cell, values, None)
+ self.assertTrue(cell.value == value)
+ values.append('FAIL')
+ smr.Compute(cell, values, None)
+ self.assertTrue(cell.value == '?')
+
+ def testStorageFormat(self):
+ sf = tabulator.StorageFormat()
+ cell = tabulator.Cell()
+ base = 1024.0
+ cell.value = base
+ sf.Compute(cell)
+ self.assertTrue(cell.string_value == '1.0K')
+ cell.value = base**2
+ sf.Compute(cell)
+ self.assertTrue(cell.string_value == '1.0M')
+ cell.value = base**3
+ sf.Compute(cell)
+ self.assertTrue(cell.string_value == '1.0G')
+
+ def testLerp(self):
+ c1 = tabulator.Color(0, 0, 0, 0)
+ c2 = tabulator.Color(255, 0, 0, 0)
+ c3 = tabulator.Color.Lerp(0.5, c1, c2)
+ self.assertTrue(c3.r == 127.5)
+ self.assertTrue(c3.g == 0)
+ self.assertTrue(c3.b == 0)
+ self.assertTrue(c3.a == 0)
+ c3.Round()
+ self.assertTrue(c3.r == 127)
+
+ def testGmean(self):
+ a = [1.0e+308] * 3
+ # pylint: disable=protected-access
+ b = tabulator.Result()._GetGmean(a)
+ self.assertTrue(b >= 0.99e+308 and b <= 1.01e+308)
+
+ def testTableGenerator(self):
+ runs = [[{'k1': '10',
+ 'k2': '12'}, {'k1': '13',
+ 'k2': '14',
+ 'k3': '15'}], [{'k1': '50',
+ 'k2': '51',
+ 'k3': '52',
+ 'k4': '53'}]]
+ labels = ['vanilla', 'modified']
+ tg = tabulator.TableGenerator(runs, labels)
+ table = tg.GetTable()
+ header = table.pop(0)
+
+ self.assertTrue(header == ['keys', 'vanilla', 'modified'])
+ row = table.pop(0)
+ self.assertTrue(row == ['k1', ['10', '13'], ['50']])
+ row = table.pop(0)
+ self.assertTrue(row == ['k2', ['12', '14'], ['51']])
+ row = table.pop(0)
+ self.assertTrue(row == ['k3', [None, '15'], ['52']])
+ row = table.pop(0)
+ self.assertTrue(row == ['k4', [None, None], ['53']])
+
+ table = tg.GetTable()
+ columns = [
+ tabulator.Column(tabulator.AmeanResult(), tabulator.Format()),
+ tabulator.Column(tabulator.AmeanRatioResult(),
+ tabulator.PercentFormat()),
+ ]
+ tf = tabulator.TableFormatter(table, columns)
+ table = tf.GetCellTable()
+ self.assertTrue(table)
+
+ def testColspan(self):
+ simple_table = [
+ ['binary', 'b1', 'b2', 'b3'],
+ ['size', 100, 105, 108],
+ ['rodata', 100, 80, 70],
+ ['data', 100, 100, 100],
+ ['debug', 100, 140, 60],
+ ]
+ columns = [
+ tabulator.Column(tabulator.AmeanResult(), tabulator.Format()),
+ tabulator.Column(tabulator.MinResult(), tabulator.Format()),
+ tabulator.Column(tabulator.AmeanRatioResult(),
+ tabulator.PercentFormat()),
+ tabulator.Column(tabulator.AmeanRatioResult(),
+ tabulator.ColorBoxFormat()),
+ ]
+ our_table = [simple_table[0]]
+ for row in simple_table[1:]:
+ our_row = [row[0]]
+ for v in row[1:]:
+ our_row.append([v])
+ our_table.append(our_row)
+
+ tf = tabulator.TableFormatter(our_table, columns)
+ cell_table = tf.GetCellTable()
+ self.assertTrue(cell_table[0][0].colspan == 1)
+ self.assertTrue(cell_table[0][1].colspan == 2)
+ self.assertTrue(cell_table[0][2].colspan == 4)
+ self.assertTrue(cell_table[0][3].colspan == 4)
+ for row in cell_table[1:]:
+ for cell in row:
+ self.assertTrue(cell.colspan == 1)
+
+
+if __name__ == '__main__':
+ unittest.main()
diff --git a/cros_utils/timeline.py b/cros_utils/timeline.py
new file mode 100644
index 00000000..873aaa30
--- /dev/null
+++ b/cros_utils/timeline.py
@@ -0,0 +1,52 @@
+# Copyright 2012 Google Inc. All Rights Reserved.
+#
+"""Tools for recording and reporting timeline of benchmark_run."""
+
+from __future__ import print_function
+
+__author__ = 'yunlian@google.com (Yunlian Jiang)'
+
+import time
+
+
+class Event(object):
+ """One event on the timeline."""
+
+ def __init__(self, name='', cur_time=0):
+ self.name = name
+ self.timestamp = cur_time
+
+
+class Timeline(object):
+ """Use a dict to store the timeline."""
+
+ def __init__(self):
+ self.events = []
+
+ def Record(self, event):
+ for e in self.events:
+ assert e.name != event, ('The event {0} is already recorded.'
+ .format(event))
+ cur_event = Event(name=event, cur_time=time.time())
+ self.events.append(cur_event)
+
+ def GetEvents(self):
+ return ([e.name for e in self.events])
+
+ def GetEventDict(self):
+ tl = {}
+ for e in self.events:
+ tl[e.name] = e.timestamp
+ return tl
+
+ def GetEventTime(self, event):
+ for e in self.events:
+ if e.name == event:
+ return e.timestamp
+ raise IndexError, 'The event {0} is not recorded'.format(event)
+
+ def GetLastEventTime(self):
+ return self.events[-1].timestamp
+
+ def GetLastEvent(self):
+ return self.events[-1].name
diff --git a/cros_utils/timeline_test.py b/cros_utils/timeline_test.py
new file mode 100644
index 00000000..c93a1274
--- /dev/null
+++ b/cros_utils/timeline_test.py
@@ -0,0 +1,57 @@
+# Copyright 2012 Google Inc. All Rights Reserved.
+"""Tests for time_line.py."""
+
+from __future__ import print_function
+
+__author__ = 'yunlian@google.com (Yunlian Jiang)'
+
+import time
+import unittest
+
+import timeline
+
+
+class TimeLineTest(unittest.TestCase):
+ """Tests for the Timeline class."""
+
+ def testRecord(self):
+ tl = timeline.Timeline()
+ tl.Record('A')
+ t = time.time()
+ t1 = tl.events[0].timestamp
+ self.assertEqual(int(t1 - t), 0)
+ self.assertRaises(AssertionError, tl.Record, 'A')
+
+ def testGetEvents(self):
+ tl = timeline.Timeline()
+ tl.Record('A')
+ e = tl.GetEvents()
+ self.assertEqual(e, ['A'])
+ tl.Record('B')
+ e = tl.GetEvents()
+ self.assertEqual(e, ['A', 'B'])
+
+ def testGetEventTime(self):
+ tl = timeline.Timeline()
+ tl.Record('A')
+ t = time.time()
+ t1 = tl.GetEventTime('A')
+ self.assertEqual(int(t1 - t), 0)
+ self.assertRaises(IndexError, tl.GetEventTime, 'B')
+
+ def testGetLastEventTime(self):
+ tl = timeline.Timeline()
+ self.assertRaises(IndexError, tl.GetLastEventTime)
+ tl.Record('A')
+ t = time.time()
+ t1 = tl.GetLastEventTime()
+ self.assertEqual(int(t1 - t), 0)
+ time.sleep(2)
+ tl.Record('B')
+ t = time.time()
+ t1 = tl.GetLastEventTime()
+ self.assertEqual(int(t1 - t), 0)
+
+
+if __name__ == '__main__':
+ unittest.main()
diff --git a/crosperf/benchmark.py b/crosperf/benchmark.py
new file mode 100644
index 00000000..a2a34bca
--- /dev/null
+++ b/crosperf/benchmark.py
@@ -0,0 +1,45 @@
+
+# Copyright (c) 2013 The Chromium OS Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+"""Define a type that wraps a Benchmark instance."""
+
+class Benchmark(object):
+ """Class representing a benchmark to be run.
+
+ Contains details of the benchmark suite, arguments to pass to the suite,
+ iterations to run the benchmark suite and so on. Note that the benchmark name
+ can be different to the test suite name. For example, you may want to have
+ two different benchmarks which run the same test_name with different
+ arguments.
+ """
+
+ def __init__(self,
+ name,
+ test_name,
+ test_args,
+ iterations,
+ rm_chroot_tmp,
+ perf_args,
+ suite='',
+ show_all_results=False,
+ retries=0,
+ run_local=False):
+ self.name = name
+ #For telemetry, this is the benchmark name.
+ self.test_name = test_name
+ #For telemetry, this is the data.
+ self.test_args = test_args
+ self.iterations = iterations
+ self.perf_args = perf_args
+ self.rm_chroot_tmp = rm_chroot_tmp
+ self.iteration_adjusted = False
+ self.suite = suite
+ self.show_all_results = show_all_results
+ self.retries = retries
+ if self.suite == 'telemetry':
+ self.show_all_results = True
+ if run_local and self.suite != 'telemetry_Crosperf':
+ raise RuntimeError('run_local is only supported by telemetry_Crosperf.')
+ self.run_local = run_local
diff --git a/crosperf/benchmark_run.py b/crosperf/benchmark_run.py
new file mode 100644
index 00000000..e53187e2
--- /dev/null
+++ b/crosperf/benchmark_run.py
@@ -0,0 +1,265 @@
+
+# Copyright (c) 2013 The Chromium OS Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+"""Module of benchmark runs."""
+from __future__ import print_function
+
+import datetime
+import threading
+import time
+import traceback
+
+from cros_utils import command_executer
+from cros_utils import timeline
+
+from suite_runner import SuiteRunner
+from results_cache import MockResult
+from results_cache import MockResultsCache
+from results_cache import Result
+from results_cache import ResultsCache
+
+STATUS_FAILED = 'FAILED'
+STATUS_SUCCEEDED = 'SUCCEEDED'
+STATUS_IMAGING = 'IMAGING'
+STATUS_RUNNING = 'RUNNING'
+STATUS_WAITING = 'WAITING'
+STATUS_PENDING = 'PENDING'
+
+
+class BenchmarkRun(threading.Thread):
+ """The benchmarkrun class."""
+ def __init__(self, name, benchmark, label, iteration, cache_conditions,
+ machine_manager, logger_to_use, log_level, share_cache):
+ threading.Thread.__init__(self)
+ self.name = name
+ self._logger = logger_to_use
+ self.log_level = log_level
+ self.benchmark = benchmark
+ self.iteration = iteration
+ self.label = label
+ self.result = None
+ self.terminated = False
+ self.retval = None
+ self.run_completed = False
+ self.machine_manager = machine_manager
+ self.suite_runner = SuiteRunner(self._logger, self.log_level)
+ self.machine = None
+ self.cache_conditions = cache_conditions
+ self.runs_complete = 0
+ self.cache_hit = False
+ self.failure_reason = ''
+ self.test_args = benchmark.test_args
+ self.cache = None
+ self.profiler_args = self.GetExtraAutotestArgs()
+ self._ce = command_executer.GetCommandExecuter(self._logger,
+ log_level=self.log_level)
+ self.timeline = timeline.Timeline()
+ self.timeline.Record(STATUS_PENDING)
+ self.share_cache = share_cache
+ self.cache_has_been_read = False
+
+ # This is used by schedv2.
+ self.owner_thread = None
+
+ def ReadCache(self):
+ # Just use the first machine for running the cached version,
+ # without locking it.
+ self.cache = ResultsCache()
+ self.cache.Init(self.label.chromeos_image, self.label.chromeos_root,
+ self.benchmark.test_name, self.iteration, self.test_args,
+ self.profiler_args, self.machine_manager, self.machine,
+ self.label.board, self.cache_conditions, self._logger,
+ self.log_level, self.label, self.share_cache,
+ self.benchmark.suite, self.benchmark.show_all_results,
+ self.benchmark.run_local)
+
+ self.result = self.cache.ReadResult()
+ self.cache_hit = (self.result is not None)
+ self.cache_has_been_read = True
+
+ def run(self):
+ try:
+ if not self.cache_has_been_read:
+ self.ReadCache()
+
+ if self.result:
+ self._logger.LogOutput('%s: Cache hit.' % self.name)
+ self._logger.LogOutput(self.result.out, print_to_console=False)
+ self._logger.LogError(self.result.err, print_to_console=False)
+
+ elif self.label.cache_only:
+ self._logger.LogOutput('%s: No cache hit.' % self.name)
+ output = '%s: No Cache hit.' % self.name
+ retval = 1
+ err = 'No cache hit.'
+ self.result = Result.CreateFromRun(
+ self._logger, self.log_level, self.label, self.machine, output, err,
+ retval, self.benchmark.test_name,
+ self.benchmark.suite)
+
+ else:
+ self._logger.LogOutput('%s: No cache hit.' % self.name)
+ self.timeline.Record(STATUS_WAITING)
+ # Try to acquire a machine now.
+ self.machine = self.AcquireMachine()
+ self.cache.machine = self.machine
+ self.result = self.RunTest(self.machine)
+
+ self.cache.remote = self.machine.name
+ self.label.chrome_version = self.machine_manager.GetChromeVersion(
+ self.machine)
+ self.cache.StoreResult(self.result)
+
+ if not self.label.chrome_version:
+ if self.machine:
+ self.label.chrome_version = self.machine_manager.GetChromeVersion(
+ self.machine)
+ elif self.result.chrome_version:
+ self.label.chrome_version = self.result.chrome_version
+
+ if self.terminated:
+ return
+
+ if not self.result.retval:
+ self.timeline.Record(STATUS_SUCCEEDED)
+ else:
+ if self.timeline.GetLastEvent() != STATUS_FAILED:
+ self.failure_reason = 'Return value of test suite was non-zero.'
+ self.timeline.Record(STATUS_FAILED)
+
+ except Exception, e:
+ self._logger.LogError("Benchmark run: '%s' failed: %s" % (self.name, e))
+ traceback.print_exc()
+ if self.timeline.GetLastEvent() != STATUS_FAILED:
+ self.timeline.Record(STATUS_FAILED)
+ self.failure_reason = str(e)
+ finally:
+ if self.owner_thread is not None:
+ # In schedv2 mode, we do not lock machine locally. So noop here.
+ pass
+ elif self.machine:
+ if not self.machine.IsReachable():
+ self._logger.LogOutput('Machine %s is not reachable, removing it.' %
+ self.machine.name)
+ self.machine_manager.RemoveMachine(self.machine.name)
+ self._logger.LogOutput('Releasing machine: %s' % self.machine.name)
+ self.machine_manager.ReleaseMachine(self.machine)
+ self._logger.LogOutput('Released machine: %s' % self.machine.name)
+
+ def Terminate(self):
+ self.terminated = True
+ self.suite_runner.Terminate()
+ if self.timeline.GetLastEvent() != STATUS_FAILED:
+ self.timeline.Record(STATUS_FAILED)
+ self.failure_reason = 'Thread terminated.'
+
+ def AcquireMachine(self):
+ if self.owner_thread is not None:
+ # No need to lock machine locally, DutWorker, which is a thread, is
+ # responsible for running br.
+ return self.owner_thread.dut()
+ while True:
+ machine = None
+ if self.terminated:
+ raise RuntimeError('Thread terminated while trying to acquire machine.')
+
+ machine = self.machine_manager.AcquireMachine(self.label)
+
+ if machine:
+ self._logger.LogOutput('%s: Machine %s acquired at %s' %
+ (self.name, machine.name,
+ datetime.datetime.now()))
+ break
+ time.sleep(10)
+ return machine
+
+ def GetExtraAutotestArgs(self):
+ if self.benchmark.perf_args and self.benchmark.suite == 'telemetry':
+ self._logger.LogError('Telemetry does not support profiler.')
+ self.benchmark.perf_args = ''
+
+ if self.benchmark.perf_args and self.benchmark.suite == 'test_that':
+ self._logger.LogError('test_that does not support profiler.')
+ self.benchmark.perf_args = ''
+
+ if self.benchmark.perf_args:
+ perf_args_list = self.benchmark.perf_args.split(' ')
+ perf_args_list = [perf_args_list[0]] + ['-a'] + perf_args_list[1:]
+ perf_args = ' '.join(perf_args_list)
+ if not perf_args_list[0] in ['record', 'stat']:
+ raise SyntaxError('perf_args must start with either record or stat')
+ extra_test_args = ['--profiler=custom_perf',
+ ("--profiler_args='perf_options=\"%s\"'" % perf_args)]
+ return ' '.join(extra_test_args)
+ else:
+ return ''
+
+ def RunTest(self, machine):
+ self.timeline.Record(STATUS_IMAGING)
+ if self.owner_thread is not None:
+ # In schedv2 mode, do not even call ImageMachine. Machine image is
+ # guarenteed.
+ pass
+ else:
+ self.machine_manager.ImageMachine(machine, self.label)
+ self.timeline.Record(STATUS_RUNNING)
+ retval, out, err = self.suite_runner.Run(machine.name, self.label,
+ self.benchmark, self.test_args,
+ self.profiler_args)
+ self.run_completed = True
+ return Result.CreateFromRun(self._logger, self.log_level, self.label,
+ self.machine, out, err, retval,
+ self.benchmark.test_name, self.benchmark.suite)
+
+ def SetCacheConditions(self, cache_conditions):
+ self.cache_conditions = cache_conditions
+
+ def logger(self):
+ """Return the logger, only used by unittest.
+
+ Returns:
+ self._logger
+ """
+
+ return self._logger
+
+ def __str__(self):
+ """For better debugging."""
+
+ return 'BenchmarkRun[name="{}"]'.format(self.name)
+
+
+class MockBenchmarkRun(BenchmarkRun):
+ """Inherited from BenchmarkRun."""
+
+ def ReadCache(self):
+ # Just use the first machine for running the cached version,
+ # without locking it.
+ self.cache = MockResultsCache()
+ self.cache.Init(self.label.chromeos_image, self.label.chromeos_root,
+ self.benchmark.test_name, self.iteration, self.test_args,
+ self.profiler_args, self.machine_manager, self.machine,
+ self.label.board, self.cache_conditions, self._logger,
+ self.log_level, self.label, self.share_cache,
+ self.benchmark.suite, self.benchmark.show_all_results,
+ self.benchmark.run_local)
+
+ self.result = self.cache.ReadResult()
+ self.cache_hit = (self.result is not None)
+
+ def RunTest(self, machine):
+ """Remove Result.CreateFromRun for testing."""
+ self.timeline.Record(STATUS_IMAGING)
+ self.machine_manager.ImageMachine(machine, self.label)
+ self.timeline.Record(STATUS_RUNNING)
+ [retval, out, err] = self.suite_runner.Run(machine.name, self.label,
+ self.benchmark, self.test_args,
+ self.profiler_args)
+ self.run_completed = True
+ rr = MockResult('logger', self.label, self.log_level, machine)
+ rr.out = out
+ rr.err = err
+ rr.retval = retval
+ return rr
diff --git a/crosperf/benchmark_run_unittest.py b/crosperf/benchmark_run_unittest.py
new file mode 100755
index 00000000..9af66a33
--- /dev/null
+++ b/crosperf/benchmark_run_unittest.py
@@ -0,0 +1,430 @@
+#!/usr/bin/env python2
+
+# Copyright (c) 2013 The Chromium OS Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+"""Testing of benchmark_run."""
+
+from __future__ import print_function
+
+import mock
+import unittest
+import inspect
+
+from cros_utils import logger
+
+import benchmark_run
+
+from suite_runner import MockSuiteRunner
+from suite_runner import SuiteRunner
+from label import MockLabel
+from benchmark import Benchmark
+from machine_manager import MockMachineManager
+from machine_manager import MachineManager
+from machine_manager import MockCrosMachine
+from results_cache import MockResultsCache
+from results_cache import CacheConditions
+from results_cache import Result
+from results_cache import ResultsCache
+
+
+class BenchmarkRunTest(unittest.TestCase):
+ """Unit tests for the BenchmarkRun class and all of its methods."""
+
+ def setUp(self):
+ self.status = []
+ self.called_ReadCache = None
+ self.log_error = []
+ self.log_output = []
+ self.err_msg = None
+ self.test_benchmark = Benchmark(
+ 'page_cycler.netsim.top_10', # name
+ 'page_cycler.netsim.top_10', # test_name
+ '', # test_args
+ 1, # iterations
+ False, # rm_chroot_tmp
+ '', # perf_args
+ suite='telemetry_Crosperf') # suite
+
+ self.test_label = MockLabel(
+ 'test1',
+ 'image1',
+ 'autotest_dir',
+ '/tmp/test_benchmark_run',
+ 'x86-alex',
+ 'chromeos2-row1-rack4-host9.cros',
+ image_args='',
+ cache_dir='',
+ cache_only=False,
+ log_level='average',
+ compiler='gcc')
+
+ self.test_cache_conditions = [
+ CacheConditions.CACHE_FILE_EXISTS, CacheConditions.CHECKSUMS_MATCH
+ ]
+
+ self.mock_logger = logger.GetLogger(log_dir='', mock=True)
+
+ self.mock_machine_manager = mock.Mock(spec=MachineManager)
+
+ def testDryRun(self):
+ my_label = MockLabel(
+ 'test1',
+ 'image1',
+ 'autotest_dir',
+ '/tmp/test_benchmark_run',
+ 'x86-alex',
+ 'chromeos2-row1-rack4-host9.cros',
+ image_args='',
+ cache_dir='',
+ cache_only=False,
+ log_level='average',
+ compiler='gcc')
+
+ logging_level = 'average'
+ m = MockMachineManager('/tmp/chromeos_root', 0, logging_level, '')
+ m.AddMachine('chromeos2-row1-rack4-host9.cros')
+ bench = Benchmark(
+ 'page_cycler.netsim.top_10', # name
+ 'page_cycler.netsim.top_10', # test_name
+ '', # test_args
+ 1, # iterations
+ False, # rm_chroot_tmp
+ '', # perf_args
+ suite='telemetry_Crosperf') # suite
+ b = benchmark_run.MockBenchmarkRun('test run', bench, my_label, 1, [], m,
+ logger.GetLogger(), logging_level, '')
+ b.cache = MockResultsCache()
+ b.suite_runner = MockSuiteRunner()
+ b.start()
+
+ # Make sure the arguments to BenchmarkRun.__init__ have not changed
+ # since the last time this test was updated:
+ args_list = [
+ 'self', 'name', 'benchmark', 'label', 'iteration', 'cache_conditions',
+ 'machine_manager', 'logger_to_use', 'log_level', 'share_cache'
+ ]
+ arg_spec = inspect.getargspec(benchmark_run.BenchmarkRun.__init__)
+ self.assertEqual(len(arg_spec.args), len(args_list))
+ self.assertEqual(arg_spec.args, args_list)
+
+ def test_init(self):
+ # Nothing really worth testing here; just field assignments.
+ pass
+
+ def test_read_cache(self):
+ # Nothing really worth testing here, either.
+ pass
+
+ def test_run(self):
+ br = benchmark_run.BenchmarkRun('test_run', self.test_benchmark,
+ self.test_label, 1,
+ self.test_cache_conditions,
+ self.mock_machine_manager, self.mock_logger,
+ 'average', '')
+
+ def MockLogOutput(msg, print_to_console=False):
+ 'Helper function for test_run.'
+ del print_to_console
+ self.log_output.append(msg)
+
+ def MockLogError(msg, print_to_console=False):
+ 'Helper function for test_run.'
+ del print_to_console
+ self.log_error.append(msg)
+
+ def MockRecordStatus(msg):
+ 'Helper function for test_run.'
+ self.status.append(msg)
+
+ def FakeReadCache():
+ 'Helper function for test_run.'
+ br.cache = mock.Mock(spec=ResultsCache)
+ self.called_ReadCache = True
+ return 0
+
+ def FakeReadCacheSucceed():
+ 'Helper function for test_run.'
+ br.cache = mock.Mock(spec=ResultsCache)
+ br.result = mock.Mock(spec=Result)
+ br.result.out = 'result.out stuff'
+ br.result.err = 'result.err stuff'
+ br.result.retval = 0
+ self.called_ReadCache = True
+ return 0
+
+ def FakeReadCacheException():
+ 'Helper function for test_run.'
+ raise RuntimeError('This is an exception test; it is supposed to happen')
+
+ def FakeAcquireMachine():
+ 'Helper function for test_run.'
+ mock_machine = MockCrosMachine('chromeos1-row3-rack5-host7.cros',
+ 'chromeos', 'average')
+ return mock_machine
+
+ def FakeRunTest(_machine):
+ 'Helper function for test_run.'
+ mock_result = mock.Mock(spec=Result)
+ mock_result.retval = 0
+ return mock_result
+
+ def FakeRunTestFail(_machine):
+ 'Helper function for test_run.'
+ mock_result = mock.Mock(spec=Result)
+ mock_result.retval = 1
+ return mock_result
+
+ def ResetTestValues():
+ 'Helper function for test_run.'
+ self.log_output = []
+ self.log_error = []
+ self.status = []
+ br.result = None
+ self.called_ReadCache = False
+
+ # Assign all the fake functions to the appropriate objects.
+ br.logger().LogOutput = MockLogOutput
+ br.logger().LogError = MockLogError
+ br.timeline.Record = MockRecordStatus
+ br.ReadCache = FakeReadCache
+ br.RunTest = FakeRunTest
+ br.AcquireMachine = FakeAcquireMachine
+
+ # First test: No cache hit, all goes well.
+ ResetTestValues()
+ br.run()
+ self.assertTrue(self.called_ReadCache)
+ self.assertEqual(self.log_output, [
+ 'test_run: No cache hit.',
+ 'Releasing machine: chromeos1-row3-rack5-host7.cros',
+ 'Released machine: chromeos1-row3-rack5-host7.cros'
+ ])
+ self.assertEqual(len(self.log_error), 0)
+ self.assertEqual(self.status, ['WAITING', 'SUCCEEDED'])
+
+ # Second test: No cached result found; test run was "terminated" for some
+ # reason.
+ ResetTestValues()
+ br.terminated = True
+ br.run()
+ self.assertTrue(self.called_ReadCache)
+ self.assertEqual(self.log_output, [
+ 'test_run: No cache hit.',
+ 'Releasing machine: chromeos1-row3-rack5-host7.cros',
+ 'Released machine: chromeos1-row3-rack5-host7.cros'
+ ])
+ self.assertEqual(len(self.log_error), 0)
+ self.assertEqual(self.status, ['WAITING'])
+
+ # Third test. No cached result found; RunTest failed for some reason.
+ ResetTestValues()
+ br.terminated = False
+ br.RunTest = FakeRunTestFail
+ br.run()
+ self.assertTrue(self.called_ReadCache)
+ self.assertEqual(self.log_output, [
+ 'test_run: No cache hit.',
+ 'Releasing machine: chromeos1-row3-rack5-host7.cros',
+ 'Released machine: chromeos1-row3-rack5-host7.cros'
+ ])
+ self.assertEqual(len(self.log_error), 0)
+ self.assertEqual(self.status, ['WAITING', 'FAILED'])
+
+ # Fourth test: ReadCache found a cached result.
+ ResetTestValues()
+ br.RunTest = FakeRunTest
+ br.ReadCache = FakeReadCacheSucceed
+ br.run()
+ self.assertTrue(self.called_ReadCache)
+ self.assertEqual(self.log_output, [
+ 'test_run: Cache hit.', 'result.out stuff',
+ 'Releasing machine: chromeos1-row3-rack5-host7.cros',
+ 'Released machine: chromeos1-row3-rack5-host7.cros'
+ ])
+ self.assertEqual(self.log_error, ['result.err stuff'])
+ self.assertEqual(self.status, ['SUCCEEDED'])
+
+ # Fifth test: ReadCache generates an exception; does the try/finally block
+ # work?
+ ResetTestValues()
+ br.ReadCache = FakeReadCacheException
+ br.machine = FakeAcquireMachine()
+ br.run()
+ self.assertEqual(self.log_error, [
+ "Benchmark run: 'test_run' failed: This is an exception test; it is "
+ 'supposed to happen'
+ ])
+ self.assertEqual(self.status, ['FAILED'])
+
+ def test_terminate_pass(self):
+ br = benchmark_run.BenchmarkRun('test_run', self.test_benchmark,
+ self.test_label, 1,
+ self.test_cache_conditions,
+ self.mock_machine_manager, self.mock_logger,
+ 'average', '')
+
+ def GetLastEventPassed():
+ 'Helper function for test_terminate_pass'
+ return benchmark_run.STATUS_SUCCEEDED
+
+ def RecordStub(status):
+ 'Helper function for test_terminate_pass'
+ self.status = status
+
+ self.status = benchmark_run.STATUS_SUCCEEDED
+ self.assertFalse(br.terminated)
+ self.assertFalse(br.suite_runner.CommandTerminator().IsTerminated())
+
+ br.timeline.GetLastEvent = GetLastEventPassed
+ br.timeline.Record = RecordStub
+
+ br.Terminate()
+
+ self.assertTrue(br.terminated)
+ self.assertTrue(br.suite_runner.CommandTerminator().IsTerminated())
+ self.assertEqual(self.status, benchmark_run.STATUS_FAILED)
+
+ def test_terminate_fail(self):
+ br = benchmark_run.BenchmarkRun('test_run', self.test_benchmark,
+ self.test_label, 1,
+ self.test_cache_conditions,
+ self.mock_machine_manager, self.mock_logger,
+ 'average', '')
+
+ def GetLastEventFailed():
+ 'Helper function for test_terminate_fail'
+ return benchmark_run.STATUS_FAILED
+
+ def RecordStub(status):
+ 'Helper function for test_terminate_fail'
+ self.status = status
+
+ self.status = benchmark_run.STATUS_SUCCEEDED
+ self.assertFalse(br.terminated)
+ self.assertFalse(br.suite_runner.CommandTerminator().IsTerminated())
+
+ br.timeline.GetLastEvent = GetLastEventFailed
+ br.timeline.Record = RecordStub
+
+ br.Terminate()
+
+ self.assertTrue(br.terminated)
+ self.assertTrue(br.suite_runner.CommandTerminator().IsTerminated())
+ self.assertEqual(self.status, benchmark_run.STATUS_SUCCEEDED)
+
+ def test_acquire_machine(self):
+ br = benchmark_run.BenchmarkRun('test_run', self.test_benchmark,
+ self.test_label, 1,
+ self.test_cache_conditions,
+ self.mock_machine_manager, self.mock_logger,
+ 'average', '')
+
+ br.terminated = True
+ self.assertRaises(Exception, br.AcquireMachine)
+
+ br.terminated = False
+ mock_machine = MockCrosMachine('chromeos1-row3-rack5-host7.cros',
+ 'chromeos', 'average')
+ self.mock_machine_manager.AcquireMachine.return_value = mock_machine
+
+ machine = br.AcquireMachine()
+ self.assertEqual(machine.name, 'chromeos1-row3-rack5-host7.cros')
+
+ def test_get_extra_autotest_args(self):
+ br = benchmark_run.BenchmarkRun('test_run', self.test_benchmark,
+ self.test_label, 1,
+ self.test_cache_conditions,
+ self.mock_machine_manager, self.mock_logger,
+ 'average', '')
+
+ def MockLogError(err_msg):
+ 'Helper function for test_get_extra_autotest_args'
+ self.err_msg = err_msg
+
+ self.mock_logger.LogError = MockLogError
+
+ result = br.GetExtraAutotestArgs()
+ self.assertEqual(result, '')
+
+ self.test_benchmark.perf_args = 'record -e cycles'
+ result = br.GetExtraAutotestArgs()
+ self.assertEqual(
+ result,
+ "--profiler=custom_perf --profiler_args='perf_options=\"record -a -e "
+ "cycles\"'")
+
+ self.test_benchmark.suite = 'telemetry'
+ result = br.GetExtraAutotestArgs()
+ self.assertEqual(result, '')
+ self.assertEqual(self.err_msg, 'Telemetry does not support profiler.')
+
+ self.test_benchmark.perf_args = 'record -e cycles'
+ self.test_benchmark.suite = 'test_that'
+ result = br.GetExtraAutotestArgs()
+ self.assertEqual(result, '')
+ self.assertEqual(self.err_msg, 'test_that does not support profiler.')
+
+ self.test_benchmark.perf_args = 'junk args'
+ self.test_benchmark.suite = 'telemetry_Crosperf'
+ self.assertRaises(Exception, br.GetExtraAutotestArgs)
+
+ @mock.patch.object(SuiteRunner, 'Run')
+ @mock.patch.object(Result, 'CreateFromRun')
+ def test_run_test(self, mock_result, mock_runner):
+ br = benchmark_run.BenchmarkRun('test_run', self.test_benchmark,
+ self.test_label, 1,
+ self.test_cache_conditions,
+ self.mock_machine_manager, self.mock_logger,
+ 'average', '')
+
+ self.status = []
+
+ def MockRecord(status):
+ self.status.append(status)
+
+ br.timeline.Record = MockRecord
+ mock_machine = MockCrosMachine('chromeos1-row3-rack5-host7.cros',
+ 'chromeos', 'average')
+ mock_runner.return_value = [0, "{'Score':100}", '']
+
+ br.RunTest(mock_machine)
+
+ self.assertTrue(br.run_completed)
+ self.assertEqual(
+ self.status,
+ [benchmark_run.STATUS_IMAGING, benchmark_run.STATUS_RUNNING])
+
+ self.assertEqual(br.machine_manager.ImageMachine.call_count, 1)
+ br.machine_manager.ImageMachine.assert_called_with(mock_machine,
+ self.test_label)
+ self.assertEqual(mock_runner.call_count, 1)
+ mock_runner.assert_called_with(mock_machine.name, br.label, br.benchmark,
+ '', br.profiler_args)
+
+ self.assertEqual(mock_result.call_count, 1)
+ mock_result.assert_called_with(self.mock_logger, 'average', self.test_label,
+ None, "{'Score':100}", '', 0,
+ 'page_cycler.netsim.top_10',
+ 'telemetry_Crosperf')
+
+ def test_set_cache_conditions(self):
+ br = benchmark_run.BenchmarkRun('test_run', self.test_benchmark,
+ self.test_label, 1,
+ self.test_cache_conditions,
+ self.mock_machine_manager, self.mock_logger,
+ 'average', '')
+
+ phony_cache_conditions = [123, 456, True, False]
+
+ self.assertEqual(br.cache_conditions, self.test_cache_conditions)
+
+ br.SetCacheConditions(phony_cache_conditions)
+ self.assertEqual(br.cache_conditions, phony_cache_conditions)
+
+ br.SetCacheConditions(self.test_cache_conditions)
+ self.assertEqual(br.cache_conditions, self.test_cache_conditions)
+
+
+if __name__ == '__main__':
+ unittest.main()
diff --git a/crosperf/benchmark_unittest.py b/crosperf/benchmark_unittest.py
new file mode 100755
index 00000000..320ede65
--- /dev/null
+++ b/crosperf/benchmark_unittest.py
@@ -0,0 +1,63 @@
+#!/usr/bin/env python2
+#
+# Copyright 2014 Google Inc. All Rights Reserved
+"""Unit tests for the Crosperf Benchmark class."""
+
+from __future__ import print_function
+
+import inspect
+from benchmark import Benchmark
+
+import unittest
+
+
+class BenchmarkTestCase(unittest.TestCase):
+ """Individual tests for the Benchmark class."""
+
+ def test_benchmark(self):
+ # Test creating a benchmark with all the fields filled out.
+ b1 = Benchmark('b1_test', # name
+ 'octane', # test_name
+ '', # test_args
+ 3, # iterations
+ False, # rm_chroot_tmp
+ 'record -e cycles', # perf_args
+ 'telemetry_Crosperf', # suite
+ True) # show_all_results
+ self.assertTrue(b1.suite, 'telemetry_Crosperf')
+
+ # Test creating a benchmark field with default fields left out.
+ b2 = Benchmark('b2_test', # name
+ 'octane', # test_name
+ '', # test_args
+ 3, # iterations
+ False, # rm_chroot_tmp
+ 'record -e cycles') # perf_args
+ self.assertEqual(b2.suite, '')
+ self.assertFalse(b2.show_all_results)
+
+ # Test explicitly creating 'suite=Telemetry' and 'show_all_results=False"
+ # and see what happens.
+ b3 = Benchmark('b3_test', # name
+ 'octane', # test_name
+ '', # test_args
+ 3, # iterations
+ False, # rm_chroot_tmp
+ 'record -e cycles', # perf_args
+ 'telemetry', # suite
+ False) # show_all_results
+ self.assertTrue(b3.show_all_results)
+
+ # Check to see if the args to Benchmark have changed since the last time
+ # this test was updated.
+ args_list = ['self', 'name', 'test_name', 'test_args', 'iterations',
+ 'rm_chroot_tmp', 'perf_args', 'suite', 'show_all_results',
+ 'retries', 'run_local']
+ arg_spec = inspect.getargspec(Benchmark.__init__)
+ self.assertEqual(len(arg_spec.args), len(args_list))
+ for arg in args_list:
+ self.assertIn(arg, arg_spec.args)
+
+
+if __name__ == '__main__':
+ unittest.main()
diff --git a/crosperf/column_chart.py b/crosperf/column_chart.py
new file mode 100644
index 00000000..7e6821d0
--- /dev/null
+++ b/crosperf/column_chart.py
@@ -0,0 +1,59 @@
+# Copyright 2011 Google Inc. All Rights Reserved.
+"""Module to draw column chart."""
+
+
+class ColumnChart(object):
+ """class to draw column chart."""
+
+ def __init__(self, title, width, height):
+ self.title = title
+ self.chart_div = filter(str.isalnum, title)
+ self.width = width
+ self.height = height
+ self.columns = []
+ self.rows = []
+ self.series = []
+
+ def AddSeries(self, column_name, series_type, color):
+ for i in range(len(self.columns)):
+ if column_name == self.columns[i][1]:
+ self.series.append((i - 1, series_type, color))
+ break
+
+ def AddColumn(self, name, column_type):
+ self.columns.append((column_type, name))
+
+ def AddRow(self, row):
+ self.rows.append(row)
+
+ def GetJavascript(self):
+ res = 'var data = new google.visualization.DataTable();\n'
+ for column in self.columns:
+ res += "data.addColumn('%s', '%s');\n" % column
+ res += 'data.addRows(%s);\n' % len(self.rows)
+ for row in range(len(self.rows)):
+ for column in range(len(self.columns)):
+ val = self.rows[row][column]
+ if isinstance(val, str):
+ val = "'%s'" % val
+ res += 'data.setValue(%s, %s, %s);\n' % (row, column, val)
+
+ series_javascript = ''
+ for series in self.series:
+ series_javascript += "%s: {type: '%s', color: '%s'}, " % series
+
+ chart_add_javascript = """
+var chart_%s = new google.visualization.ComboChart(
+ document.getElementById('%s'));
+chart_%s.draw(data, {width: %s, height: %s, title: '%s', legend: 'none',
+ seriesType: "bars", lineWidth: 0, pointSize: 5, series: {%s},
+ vAxis: {minValue: 0}})
+"""
+
+ res += chart_add_javascript % (self.chart_div, self.chart_div,
+ self.chart_div, self.width, self.height,
+ self.title, series_javascript)
+ return res
+
+ def GetDiv(self):
+ return "<div id='%s' class='chart'></div>" % self.chart_div
diff --git a/crosperf/compare_machines.py b/crosperf/compare_machines.py
new file mode 100644
index 00000000..0a61eeb9
--- /dev/null
+++ b/crosperf/compare_machines.py
@@ -0,0 +1,64 @@
+# Copyright 2014 The Chromium OS Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+"""Module to compare two machines."""
+
+from __future__ import print_function
+
+import os.path
+import sys
+import argparse
+
+from machine_manager import CrosMachine
+
+
+def PrintUsage(msg):
+ print(msg)
+ print('Usage: ')
+ print('\n compare_machines.py --chromeos_root=/path/to/chroot/ '
+ 'machine1 machine2 ...')
+
+
+def Main(argv):
+
+ parser = argparse.ArgumentParser()
+ parser.add_argument('--chromeos_root',
+ default='/path/to/chromeos',
+ dest='chromeos_root',
+ help='ChromeOS root checkout directory')
+ parser.add_argument('remotes', nargs=argparse.REMAINDER)
+
+ options = parser.parse_args(argv)
+
+ machine_list = options.remotes
+ if len(machine_list) < 2:
+ PrintUsage('ERROR: Must specify at least two machines.')
+ return 1
+ elif not os.path.exists(options.chromeos_root):
+ PrintUsage('Error: chromeos_root does not exist %s' % options.chromeos_root)
+ return 1
+
+ chroot = options.chromeos_root
+ cros_machines = []
+ test_machine_checksum = None
+ for m in machine_list:
+ cm = CrosMachine(m, chroot, 'average')
+ cros_machines = cros_machines + [cm]
+ test_machine_checksum = cm.machine_checksum
+
+ ret = 0
+ for cm in cros_machines:
+ print('checksum for %s : %s' % (cm.name, cm.machine_checksum))
+ if cm.machine_checksum != test_machine_checksum:
+ ret = 1
+ print('Machine checksums do not all match')
+
+ if ret == 0:
+ print('Machines all match.')
+
+ return ret
+
+
+if __name__ == '__main__':
+ retval = Main(sys.argv[1:])
+ sys.exit(retval)
diff --git a/crosperf/config.py b/crosperf/config.py
new file mode 100644
index 00000000..76175660
--- /dev/null
+++ b/crosperf/config.py
@@ -0,0 +1,13 @@
+# Copyright 2011 The Chromium OS Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+"""A configure file."""
+config = {}
+
+
+def GetConfig(key):
+ return config.get(key)
+
+
+def AddConfig(key, value):
+ config[key] = value
diff --git a/crosperf/config_unittest.py b/crosperf/config_unittest.py
new file mode 100755
index 00000000..637dae9e
--- /dev/null
+++ b/crosperf/config_unittest.py
@@ -0,0 +1,50 @@
+#!/usr/bin/env python2
+#
+# Copyright 2014 Google Inc. All Rights Reserved.
+"""Unit tests for config.py"""
+
+from __future__ import print_function
+
+import config
+
+import unittest
+
+
+class ConfigTestCase(unittest.TestCase):
+ """Class for the config unit tests."""
+
+ def test_config(self):
+ # Verify that config exists, that it's a dictionary, and that it's
+ # empty.
+ self.assertTrue(type(config.config) is dict)
+ self.assertEqual(len(config.config), 0)
+
+ # Verify that attempting to get a non-existant key out of the
+ # dictionary returns None.
+ self.assertIsNone(config.GetConfig('rabbit'))
+ self.assertIsNone(config.GetConfig('key1'))
+
+ config.AddConfig('key1', 16)
+ config.AddConfig('key2', 32)
+ config.AddConfig('key3', 'third value')
+
+ # Verify that after 3 calls to AddConfig we have 3 values in the
+ # dictionary.
+ self.assertEqual(len(config.config), 3)
+
+ # Verify that GetConfig works and gets the expected values.
+ self.assertIs(config.GetConfig('key2'), 32)
+ self.assertIs(config.GetConfig('key3'), 'third value')
+ self.assertIs(config.GetConfig('key1'), 16)
+
+ # Re-set config.
+ config.config.clear()
+
+ # Verify that config exists, that it's a dictionary, and that it's
+ # empty.
+ self.assertTrue(type(config.config) is dict)
+ self.assertEqual(len(config.config), 0)
+
+
+if __name__ == '__main__':
+ unittest.main()
diff --git a/crosperf/crosperf b/crosperf/crosperf
new file mode 100755
index 00000000..a29dcbfa
--- /dev/null
+++ b/crosperf/crosperf
@@ -0,0 +1,2 @@
+#!/bin/bash
+PYTHONPATH=$(dirname $0)/..:$PYTHONPATH exec python $(dirname $0)/crosperf.py "$@"
diff --git a/crosperf/crosperf.py b/crosperf/crosperf.py
new file mode 100755
index 00000000..b78c8b9e
--- /dev/null
+++ b/crosperf/crosperf.py
@@ -0,0 +1,144 @@
+#!/usr/bin/env python2
+
+# Copyright 2011 Google Inc. All Rights Reserved.
+"""The driver script for running performance benchmarks on ChromeOS."""
+
+from __future__ import print_function
+
+import atexit
+import argparse
+import os
+import signal
+import sys
+from experiment_runner import ExperimentRunner
+from experiment_runner import MockExperimentRunner
+from experiment_factory import ExperimentFactory
+from experiment_file import ExperimentFile
+from settings_factory import GlobalSettings
+
+# This import causes pylint to warn about "No name 'logger' in module
+# 'cros_utils'". I do not understand why. The import works fine in python.
+# pylint: disable=no-name-in-module
+from cros_utils import logger
+
+import test_flag
+
+
+def SetupParserOptions(parser):
+ """Add all options to the parser."""
+ parser.add_argument(
+ '--dry_run',
+ dest='dry_run',
+ help=('Parse the experiment file and '
+ 'show what will be done'),
+ action='store_true',
+ default=False)
+ # Allow each of the global fields to be overridden by passing in
+ # options. Add each global field as an option.
+ option_settings = GlobalSettings('')
+ for field_name in option_settings.fields:
+ field = option_settings.fields[field_name]
+ parser.add_argument(
+ '--%s' % field.name,
+ dest=field.name,
+ help=field.description,
+ action='store')
+
+
+def ConvertOptionsToSettings(options):
+ """Convert options passed in into global settings."""
+ option_settings = GlobalSettings('option_settings')
+ for option_name in options.__dict__:
+ if (options.__dict__[option_name] is not None and
+ option_name in option_settings.fields):
+ option_settings.SetField(option_name, options.__dict__[option_name])
+ return option_settings
+
+
+def Cleanup(experiment):
+ """Handler function which is registered to the atexit handler."""
+ experiment.Cleanup()
+
+
+def CallExitHandler(signum, _):
+ """Signal handler that transforms a signal into a call to exit.
+
+ This is useful because functionality registered by "atexit" will
+ be called. It also means you can "catch" the signal by catching
+ the SystemExit exception.
+ """
+ sys.exit(128 + signum)
+
+
+def RunCrosperf(argv):
+ parser = argparse.ArgumentParser()
+
+ parser.add_argument(
+ '--noschedv2',
+ dest='noschedv2',
+ default=False,
+ action='store_true',
+ help=('Do not use new scheduler. '
+ 'Use original scheduler instead.'))
+ parser.add_argument(
+ '-l',
+ '--log_dir',
+ dest='log_dir',
+ default='',
+ help='The log_dir, default is under <crosperf_logs>/logs')
+
+ SetupParserOptions(parser)
+ options, args = parser.parse_known_args(argv)
+
+ # Convert the relevant options that are passed in into a settings
+ # object which will override settings in the experiment file.
+ option_settings = ConvertOptionsToSettings(options)
+ log_dir = os.path.abspath(os.path.expanduser(options.log_dir))
+ logger.GetLogger(log_dir)
+
+ if len(args) == 2:
+ experiment_filename = args[1]
+ else:
+ parser.error('Invalid number arguments.')
+
+ working_directory = os.getcwd()
+ if options.dry_run:
+ test_flag.SetTestMode(True)
+
+ experiment_file = ExperimentFile(
+ open(experiment_filename, 'rb'), option_settings)
+ if not experiment_file.GetGlobalSettings().GetField('name'):
+ experiment_name = os.path.basename(experiment_filename)
+ experiment_file.GetGlobalSettings().SetField('name', experiment_name)
+ experiment = ExperimentFactory().GetExperiment(experiment_file,
+ working_directory, log_dir)
+
+ json_report = experiment_file.GetGlobalSettings().GetField('json_report')
+
+ signal.signal(signal.SIGTERM, CallExitHandler)
+ atexit.register(Cleanup, experiment)
+
+ if options.dry_run:
+ runner = MockExperimentRunner(experiment, json_report)
+ else:
+ runner = ExperimentRunner(
+ experiment, json_report, using_schedv2=(not options.noschedv2))
+
+ runner.Run()
+
+
+def Main(argv):
+ try:
+ RunCrosperf(argv)
+ except Exception as ex:
+ # Flush buffers before exiting to avoid out of order printing
+ sys.stdout.flush()
+ sys.stderr.flush()
+ print('Crosperf error: %s' % repr(ex))
+ sys.stdout.flush()
+ sys.stderr.flush()
+ sys.exit(1)
+
+
+if __name__ == '__main__':
+ Main(sys.argv)
diff --git a/crosperf/crosperf_test.py b/crosperf/crosperf_test.py
new file mode 100755
index 00000000..085efafe
--- /dev/null
+++ b/crosperf/crosperf_test.py
@@ -0,0 +1,44 @@
+#!/usr/bin/env python2
+
+# Copyright 2011 Google Inc. All Rights Reserved.
+"""Test for crosperf."""
+
+from __future__ import print_function
+
+import os
+import tempfile
+import unittest
+import crosperf
+from cros_utils.file_utils import FileUtils
+
+EXPERIMENT_FILE_1 = """
+ board: x86-alex
+ remote: chromeos-alex3
+
+ benchmark: PageCycler {
+ iterations: 3
+ }
+
+ image1 {
+ chromeos_image: /usr/local/google/cros_image1.bin
+ }
+
+ image2 {
+ chromeos_image: /usr/local/google/cros_image2.bin
+ }
+ """
+
+
+class CrosPerfTest(unittest.TestCase):
+ """Class to test Crosperf."""
+
+ def testDryRun(self):
+ filehandle, filename = tempfile.mkstemp()
+ os.write(filehandle, EXPERIMENT_FILE_1)
+ crosperf.Main(['', filename, '--dry_run'])
+ os.remove(filename)
+
+
+if __name__ == '__main__':
+ FileUtils.Configure(True)
+ unittest.main()
diff --git a/crosperf/crosperf_unittest.py b/crosperf/crosperf_unittest.py
new file mode 100755
index 00000000..4a468967
--- /dev/null
+++ b/crosperf/crosperf_unittest.py
@@ -0,0 +1,66 @@
+#!/usr/bin/env python2
+#
+# Copyright 2014 Google Inc. All Rights Reserved.
+"""Unittest for crosperf."""
+
+from __future__ import print_function
+
+import argparse
+import StringIO
+
+import unittest
+
+import crosperf
+import settings_factory
+import experiment_file
+
+EXPERIMENT_FILE_1 = """
+ board: x86-alex
+ remote: chromeos-alex3
+ perf_args: record -a -e cycles
+ benchmark: PageCycler {
+ iterations: 3
+ }
+
+ image1 {
+ chromeos_image: /usr/local/google/cros_image1.bin
+ }
+
+ image2 {
+ remote: chromeos-lumpy1
+ chromeos_image: /usr/local/google/cros_image2.bin
+ }
+ """
+
+
+class CrosperfTest(unittest.TestCase):
+ """Crosperf test class."""
+
+ def setUp(self):
+ input_file = StringIO.StringIO(EXPERIMENT_FILE_1)
+ self.exp_file = experiment_file.ExperimentFile(input_file)
+
+ def test_convert_options_to_settings(self):
+ parser = argparse.ArgumentParser()
+ parser.add_argument('-l',
+ '--log_dir',
+ dest='log_dir',
+ default='',
+ help='The log_dir, default is under '
+ '<crosperf_logs>/logs')
+ crosperf.SetupParserOptions(parser)
+ argv = ['crosperf/crosperf.py', 'temp.exp', '--rerun=True']
+ options, _ = parser.parse_known_args(argv)
+ settings = crosperf.ConvertOptionsToSettings(options)
+ self.assertIsNotNone(settings)
+ self.assertIsInstance(settings, settings_factory.GlobalSettings)
+ self.assertEqual(len(settings.fields), 25)
+ self.assertTrue(settings.GetField('rerun'))
+ argv = ['crosperf/crosperf.py', 'temp.exp']
+ options, _ = parser.parse_known_args(argv)
+ settings = crosperf.ConvertOptionsToSettings(options)
+ self.assertFalse(settings.GetField('rerun'))
+
+
+if __name__ == '__main__':
+ unittest.main()
diff --git a/crosperf/default-telemetry-results.json b/crosperf/default-telemetry-results.json
new file mode 100644
index 00000000..7099ac7c
--- /dev/null
+++ b/crosperf/default-telemetry-results.json
@@ -0,0 +1,174 @@
+{
+ "peacekeeper.html": [
+ "Total__Score",
+ "workerContrast01__Score",
+ "workerContrast02__Score"
+ ],
+ "page_cycler_v2.intl_hi_ru": [
+ "cold_times__page_load_time",
+ "warm_times__page_load_time",
+ "pcv1-warm@@timeToOnload_avg__summary",
+ "pcv1-cold@@timeToOnload_avg__summary"
+ ],
+ "smoothness.tough_webgl_cases": [
+ "percentage_smooth__percentage_smooth",
+ "percentage_smooth__summary"
+ ],
+ "page_cycler_v2.intl_es_fr_pt-BR": [
+ "cold_times__page_load_time",
+ "warm_times__page_load_time",
+ "pcv1-warm@@timeToOnload_avg__summary",
+ "pcv1-cold@@timeToOnload_avg__summary"
+ ],
+ "dromaeo.jslibeventjquery": [
+ "jslib_event_jquery__jslib_event_jquery"
+ ],
+ "browsermark": [
+ "Score__Score"
+ ],
+ "smoothness.top_25": [
+ "frame_times__frame_times",
+ "mean_frame_time__mean_frame_time"
+ ],
+ "page_cycler_v2.morejs": [
+ "warm_times__page_load_time",
+ "cold_times__page_load_time",
+ "pcv1-warm@@timeToOnload_avg__summary",
+ "pcv1-cold@@timeToOnload_avg__summary"
+ ],
+ "page_cycler_v2.dhtml": [
+ "warm_times__page_load_time",
+ "cold_times__page_load_time",
+ "pcv1-warm@@timeToOnload_avg__summary",
+ "pcv1-cold@@timeToOnload_avg__summary"
+ ],
+ "page_cycler_v2.bloat": [
+ "warm_times__page_load_time",
+ "cold_times__page_load_time",
+ "pcv1-warm@@timeToOnload_avg__summary",
+ "pcv1-cold@@timeToOnload_avg__summary"
+ ],
+ "dromaeo.jslibstyleprototype": [
+ "jslib_style_prototype__jslib_style_prototype"
+ ],
+ "dromaeo.jslibstylejquery": [
+ "jslib_style_jquery__jslib_style_jquery"
+ ],
+ "dromaeo.jslibeventprototype": [
+ "jslib_event_prototype__jslib_event_prototype"
+ ],
+ "page_cycler_v2.moz": [
+ "warm_times__page_load_time",
+ "cold_times__page_load_time",
+ "pcv1-warm@@timeToOnload_avg__summary",
+ "pcv1-cold@@timeToOnload_avg__summary"
+ ],
+ "speedometer": [
+ "Total__Total",
+ "Total__summary"
+ ],
+ "octane": [
+ "Total__Score"
+ ],
+ "jsgamebench": [
+ "Score__Score"
+ ],
+ "page_cycler_v2.indexed_db.basic_insert": [
+ "warm_times__page_load_time",
+ "cold_times__page_load_time",
+ "pcv1-warm@@timeToOnload_avg__summary",
+ "pcv1-cold@@timeToOnload_avg__summary"
+ ],
+ "spaceport": [
+ "Score__Score"
+ ],
+ "dromaeo.jslibtraverseprototype": [
+ "jslib_traverse_prototype__jslib_traverse_prototype"
+ ],
+ "page_cycler_v2.netsim.top_10": [
+ "cold_times__page_load_time",
+ "warm_times__page_load_time",
+ "pcv1-warm@@timeToOnload_avg__summary",
+ "pcv1-cold@@timeToOnload_avg__summary"
+ ],
+ "robohornet_pro": [
+ "Total__Total",
+ "Total__summary"
+ ],
+ "dromaeo.domcoreattr": [
+ "dom_attr__dom_attr",
+ "dom__summary"
+ ],
+ "dromaeo.jslibattrprototype": [
+ "jslib_attr_prototype__jslib_attr_prototype"
+ ],
+ "sunspider": [
+ "Total__Total",
+ "Total__summary"
+ ],
+ "dromaeo.jslibattrjquery": [
+ "jslib_attr_jquery__jslib_attr_jquery"
+ ],
+ "page_cycler_v2.typical_25": [
+ "warm_times-page_load_time__warm_times-page_load_time",
+ "cold_times-page_load_time__cold_times-page_load_time",
+ "pcv1-warm@@timeToOnload_avg__summary",
+ "pcv1-cold@@timeToOnload_avg__summary"
+ ],
+ "dromaeo.domcoretraverse": [
+ "dom_traverse__dom_traverse",
+ "dom__summary"
+ ],
+ "dromaeo.domcoremodify": [
+ "dom_modify__dom_modify",
+ "dom__summary"
+ ],
+ "page_cycler_v2.intl_ar_fa_he": [
+ "warm_times__page_load_time",
+ "cold_times__page_load_time",
+ "pcv1-warm@@timeToOnload_avg__summary",
+ "pcv1-cold@@timeToOnload_avg__summary"
+ ],
+ "page_cycler_v2.intl_ja_zh": [
+ "warm_times__page_load_time",
+ "cold_times__page_load_time",
+ "pcv1-warm@@timeToOnload_avg__summary",
+ "pcv1-cold@@timeToOnload_avg__summary"
+ ],
+ "graphics_WebGLAquarium": [
+ "avg_fps_1000_fishes",
+ "avg_fps_1000_fishes__summary"
+ ],
+ "page_cycler_v2.intl_ko_th_vi": [
+ "warm_times__page_load_time",
+ "cold_times__page_load_time",
+ "pcv1-warm@@timeToOnload_avg__summary",
+ "pcv1-cold@@timeToOnload_avg__summary"
+ ],
+ "canvasmark": [
+ "Score__Score"
+ ],
+ "dromaeo.domcorequery": [
+ "dom_query__dom_query",
+ "dom__summary"
+ ],
+ "dromaeo.jslibtraversejquery": [
+ "jslib_traverse_jquery__jslib_traverse_jquery"
+ ],
+ "dromaeo.jslibmodifyprototype": [
+ "jslib_modify_prototype__jslib_modify_prototype"
+ ],
+ "page_cycler_v2.tough_layout_cases": [
+ "warm_times__page_load_time",
+ "cold_times__page_load_time",
+ "pcv1-warm@@timeToOnload_avg__summary",
+ "pcv1-cold@@timeToOnload_avg__summary"
+ ],
+ "kraken": [
+ "Total__Total",
+ "Total__summary"
+ ],
+ "dromaeo.jslibmodifyjquery": [
+ "jslib_modify_jquery__jslib_modify_jquery"
+ ]
+}
diff --git a/crosperf/default_remotes b/crosperf/default_remotes
new file mode 100644
index 00000000..619068f8
--- /dev/null
+++ b/crosperf/default_remotes
@@ -0,0 +1,8 @@
+x86-alex : chromeos2-row9-rack10-host1.cros chromeos2-row9-rack10-host3.cros chromeos2-row9-rack10-host5.cros
+lumpy : chromeos2-row9-rack9-host9.cros chromeos2-row9-rack9-host11.cros chromeos2-row9-rack9-host13.cros
+parrot : chromeos2-row9-rack9-host15.cros chromeos2-row9-rack9-host17.cros chromeos2-row9-rack9-host19.cros
+daisy : chromeos2-row9-rack9-host3.cros chromeos2-row9-rack9-host5.cros chromeos2-row9-rack9-host7.cros
+peach_pit : chromeos2-row9-rack10-host13.cros chromeos2-row9-rack10-host15.cros chromeos2-row9-rack10-host17.cros
+peppy : chromeos2-row9-rack10-host19.cros chromeos2-row9-rack10-host21.cros chromeos2-row9-rack9-host1.cros
+squawks : chromeos2-row9-rack10-host7.cros chromeos2-row9-rack10-host9.cros chromeos2-row9-rack10-host11.cros
+elm : chromeos2-row9-rack8-host19.cros chromeos2-row9-rack8-host21.cros
diff --git a/crosperf/download_images.py b/crosperf/download_images.py
new file mode 100644
index 00000000..8ceaa874
--- /dev/null
+++ b/crosperf/download_images.py
@@ -0,0 +1,286 @@
+# Copyright (c) 2014-2015 The Chromium OS Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+"""Download images from Cloud Storage."""
+
+from __future__ import print_function
+
+import ast
+import os
+
+import test_flag
+
+from cros_utils import command_executer
+
+GS_UTIL = 'chromium/tools/depot_tools/gsutil.py'
+
+
+class MissingImage(Exception):
+ """Raised when the requested image does not exist in gs://"""
+
+
+class MissingFile(Exception):
+ """Raised when the requested file does not exist in gs://"""
+
+
+class RunCommandExceptionHandler(object):
+ """Handle Exceptions from calls to RunCommand"""
+
+ def __init__(self, logger_to_use, log_level, cmd_exec, command):
+ self.logger = logger_to_use
+ self.log_level = log_level
+ self.ce = cmd_exec
+ self.cleanup_command = command
+
+ def HandleException(self, _, e):
+ # Exception handler, Run specified command
+ if self.log_level != 'verbose' and self.cleanup_command is not None:
+ self.logger.LogOutput('CMD: %s' % self.cleanup_command)
+ if self.cleanup_command is not None:
+ _ = self.ce.RunCommand(self.cleanup_command)
+ # Raise exception again
+ raise e
+
+
+class ImageDownloader(object):
+ """Download images from Cloud Storage."""
+
+ def __init__(self, logger_to_use=None, log_level='verbose', cmd_exec=None):
+ self._logger = logger_to_use
+ self.log_level = log_level
+ self._ce = cmd_exec or command_executer.GetCommandExecuter(
+ self._logger, log_level=self.log_level)
+
+ def GetBuildID(self, chromeos_root, xbuddy_label):
+ # Get the translation of the xbuddy_label into the real Google Storage
+ # image name.
+ command = ('cd ~/trunk/src/third_party/toolchain-utils/crosperf; '
+ "python translate_xbuddy.py '%s'" % xbuddy_label)
+ _, build_id_tuple_str, _ = self._ce.ChrootRunCommandWOutput(chromeos_root,
+ command)
+ if not build_id_tuple_str:
+ raise MissingImage("Unable to find image for '%s'" % xbuddy_label)
+
+ build_id_tuple = ast.literal_eval(build_id_tuple_str)
+ build_id = build_id_tuple[0]
+
+ return build_id
+
+ def DownloadImage(self, chromeos_root, build_id, image_name):
+ if self.log_level == 'average':
+ self._logger.LogOutput('Preparing to download %s image to local '
+ 'directory.' % build_id)
+
+ # Make sure the directory for downloading the image exists.
+ download_path = os.path.join(chromeos_root, 'chroot/tmp', build_id)
+ image_path = os.path.join(download_path, 'chromiumos_test_image.bin')
+ if not os.path.exists(download_path):
+ os.makedirs(download_path)
+
+ # Check to see if the image has already been downloaded. If not,
+ # download the image.
+ if not os.path.exists(image_path):
+ gsutil_cmd = os.path.join(chromeos_root, GS_UTIL)
+ command = '%s cp %s %s' % (gsutil_cmd, image_name, download_path)
+
+ if self.log_level != 'verbose':
+ self._logger.LogOutput('CMD: %s' % command)
+ status = self._ce.RunCommand(command)
+ downloaded_image_name = os.path.join(download_path,
+ 'chromiumos_test_image.tar.xz')
+ if status != 0 or not os.path.exists(downloaded_image_name):
+ raise MissingImage('Cannot download image: %s.' % downloaded_image_name)
+
+ return image_path
+
+ def UncompressImage(self, chromeos_root, build_id):
+ # Check to see if the file has already been uncompresssed, etc.
+ if os.path.exists(
+ os.path.join(chromeos_root, 'chroot/tmp', build_id,
+ 'chromiumos_test_image.bin')):
+ return
+
+ # Uncompress and untar the downloaded image.
+ download_path = os.path.join(chromeos_root, 'chroot/tmp', build_id)
+ command = ('cd %s ; tar -Jxf chromiumos_test_image.tar.xz ' % download_path)
+ # Cleanup command for exception handler
+ clean_cmd = ('cd %s ; rm -f chromiumos_test_image.bin ' % download_path)
+ exception_handler = RunCommandExceptionHandler(self._logger, self.log_level,
+ self._ce, clean_cmd)
+ if self.log_level != 'verbose':
+ self._logger.LogOutput('CMD: %s' % command)
+ print('(Uncompressing and un-tarring may take a couple of minutes...'
+ 'please be patient.)')
+ retval = self._ce.RunCommand(
+ command, except_handler=exception_handler.HandleException)
+ if retval != 0:
+ if self.log_level != 'verbose':
+ self._logger.LogOutput('CMD: %s' % clean_cmd)
+ print('(Removing file chromiumos_test_image.bin.)')
+ # Remove partially uncompressed file
+ _ = self._ce.RunCommand(clean_cmd)
+ # Raise exception for failure to uncompress
+ raise MissingImage('Cannot uncompress image: %s.' % build_id)
+
+ # Remove compressed image
+ command = ('cd %s ; rm -f chromiumos_test_image.tar.xz; ' % download_path)
+ if self.log_level != 'verbose':
+ self._logger.LogOutput('CMD: %s' % command)
+ print('(Removing file chromiumos_test_image.tar.xz.)')
+ # try removing file, its ok to have an error, print if encountered
+ retval = self._ce.RunCommand(command)
+ if retval != 0:
+ print('(Warning: Could not remove file chromiumos_test_image.tar.xz .)')
+
+ def DownloadSingleAutotestFile(self, chromeos_root, build_id,
+ package_file_name):
+ # Verify if package files exist
+ status = 0
+ gs_package_name = ('gs://chromeos-image-archive/%s/%s' %
+ (build_id, package_file_name))
+ gsutil_cmd = os.path.join(chromeos_root, GS_UTIL)
+ if not test_flag.GetTestMode():
+ cmd = '%s ls %s' % (gsutil_cmd, gs_package_name)
+ status = self._ce.RunCommand(cmd)
+ if status != 0:
+ raise MissingFile('Cannot find autotest package file: %s.' %
+ package_file_name)
+
+ if self.log_level == 'average':
+ self._logger.LogOutput('Preparing to download %s package to local '
+ 'directory.' % package_file_name)
+
+ # Make sure the directory for downloading the package exists.
+ download_path = os.path.join(chromeos_root, 'chroot/tmp', build_id)
+ package_path = os.path.join(download_path, package_file_name)
+ if not os.path.exists(download_path):
+ os.makedirs(download_path)
+
+ # Check to see if the package file has already been downloaded. If not,
+ # download it.
+ if not os.path.exists(package_path):
+ command = '%s cp %s %s' % (gsutil_cmd, gs_package_name, download_path)
+
+ if self.log_level != 'verbose':
+ self._logger.LogOutput('CMD: %s' % command)
+ status = self._ce.RunCommand(command)
+ if status != 0 or not os.path.exists(package_path):
+ raise MissingFile('Cannot download package: %s .' % package_path)
+
+ def UncompressSingleAutotestFile(self, chromeos_root, build_id,
+ package_file_name, uncompress_cmd):
+ # Uncompress file
+ download_path = os.path.join(chromeos_root, 'chroot/tmp', build_id)
+ command = ('cd %s ; %s %s' %
+ (download_path, uncompress_cmd, package_file_name))
+
+ if self.log_level != 'verbose':
+ self._logger.LogOutput('CMD: %s' % command)
+ print('(Uncompressing autotest file %s .)' % package_file_name)
+ retval = self._ce.RunCommand(command)
+ if retval != 0:
+ raise MissingFile('Cannot uncompress file: %s.' % package_file_name)
+ # Remove uncompressed downloaded file
+ command = ('cd %s ; rm -f %s' % (download_path, package_file_name))
+ if self.log_level != 'verbose':
+ self._logger.LogOutput('CMD: %s' % command)
+ print('(Removing processed autotest file %s .)' % package_file_name)
+ # try removing file, its ok to have an error, print if encountered
+ retval = self._ce.RunCommand(command)
+ if retval != 0:
+ print('(Warning: Could not remove file %s .)' % package_file_name)
+
+ def VerifyAutotestFilesExist(self, chromeos_root, build_id, package_file):
+ # Quickly verify if the files are there
+ status = 0
+ gs_package_name = ('gs://chromeos-image-archive/%s/%s' %
+ (build_id, package_file))
+ gsutil_cmd = os.path.join(chromeos_root, GS_UTIL)
+ if not test_flag.GetTestMode():
+ cmd = '%s ls %s' % (gsutil_cmd, gs_package_name)
+ if self.log_level != 'verbose':
+ self._logger.LogOutput('CMD: %s' % cmd)
+ status = self._ce.RunCommand(cmd)
+ if status != 0:
+ print('(Warning: Could not find file %s )' % gs_package_name)
+ return 1
+ # Package exists on server
+ return 0
+
+ def DownloadAutotestFiles(self, chromeos_root, build_id):
+ # Download autest package files (3 files)
+ autotest_packages_name = ('autotest_packages.tar')
+ autotest_server_package_name = ('autotest_server_package.tar.bz2')
+ autotest_control_files_name = ('control_files.tar')
+
+ download_path = os.path.join(chromeos_root, 'chroot/tmp', build_id)
+ # Autotest directory relative path wrt chroot
+ autotest_rel_path = os.path.join('/tmp', build_id, 'autotest_files')
+ # Absolute Path to download files
+ autotest_path = os.path.join(chromeos_root, 'chroot/tmp', build_id,
+ 'autotest_files')
+
+ if not os.path.exists(autotest_path):
+ # Quickly verify if the files are present on server
+ # If not, just exit with warning
+ status = self.VerifyAutotestFilesExist(chromeos_root, build_id,
+ autotest_packages_name)
+ if status != 0:
+ default_autotest_dir = '~/trunk/src/third_party/autotest/files'
+ print('(Warning: Could not find autotest packages .)\n'
+ '(Warning: Defaulting autotest path to %s .' %
+ default_autotest_dir)
+ return default_autotest_dir
+
+ # Files exist on server, download and uncompress them
+ self.DownloadSingleAutotestFile(chromeos_root, build_id,
+ autotest_packages_name)
+ self.DownloadSingleAutotestFile(chromeos_root, build_id,
+ autotest_server_package_name)
+ self.DownloadSingleAutotestFile(chromeos_root, build_id,
+ autotest_control_files_name)
+
+ self.UncompressSingleAutotestFile(chromeos_root, build_id,
+ autotest_packages_name, 'tar -xvf ')
+ self.UncompressSingleAutotestFile(chromeos_root, build_id,
+ autotest_server_package_name,
+ 'tar -jxvf ')
+ self.UncompressSingleAutotestFile(chromeos_root, build_id,
+ autotest_control_files_name,
+ 'tar -xvf ')
+ # Rename created autotest directory to autotest_files
+ command = ('cd %s ; mv autotest autotest_files' % download_path)
+ if self.log_level != 'verbose':
+ self._logger.LogOutput('CMD: %s' % command)
+ print('(Moving downloaded autotest files to autotest_files)')
+ retval = self._ce.RunCommand(command)
+ if retval != 0:
+ raise MissingFile('Could not create directory autotest_files')
+
+ return autotest_rel_path
+
+ def Run(self, chromeos_root, xbuddy_label, autotest_path):
+ build_id = self.GetBuildID(chromeos_root, xbuddy_label)
+ image_name = ('gs://chromeos-image-archive/%s/chromiumos_test_image.tar.xz'
+ % build_id)
+
+ # Verify that image exists for build_id, before attempting to
+ # download it.
+ status = 0
+ if not test_flag.GetTestMode():
+ gsutil_cmd = os.path.join(chromeos_root, GS_UTIL)
+ cmd = '%s ls %s' % (gsutil_cmd, image_name)
+ status = self._ce.RunCommand(cmd)
+ if status != 0:
+ raise MissingImage('Cannot find official image: %s.' % image_name)
+
+ image_path = self.DownloadImage(chromeos_root, build_id, image_name)
+ self.UncompressImage(chromeos_root, build_id)
+
+ if self.log_level != 'quiet':
+ self._logger.LogOutput('Using image from %s.' % image_path)
+
+ if autotest_path == '':
+ autotest_path = self.DownloadAutotestFiles(chromeos_root, build_id)
+
+ return image_path, autotest_path
diff --git a/crosperf/download_images_buildid_test.py b/crosperf/download_images_buildid_test.py
new file mode 100755
index 00000000..3e7f00c1
--- /dev/null
+++ b/crosperf/download_images_buildid_test.py
@@ -0,0 +1,111 @@
+#!/usr/bin/env python2
+#
+# Copyright 2014 Google Inc. All Rights Reserved
+"""Test translation of xbuddy names."""
+
+from __future__ import print_function
+
+import argparse
+import sys
+
+import download_images
+
+#On May 1, 2014:
+#latest : lumpy-release/R34-5500.132.0
+#latest-beta : lumpy-release/R35-5712.43.0
+#latest-official: lumpy-release/R36-5814.0.0
+#latest-dev : lumpy-release/R36-5814.0.0
+#latest-canary : lumpy-release/R36-5814.0.0
+
+
+class ImageDownloaderBuildIDTest(object):
+ """Test translation of xbuddy names."""
+
+ def __init__(self):
+ parser = argparse.ArgumentParser()
+ parser.add_argument(
+ '-c',
+ '--chromeos_root',
+ dest='chromeos_root',
+ help='Directory containing ChromeOS root.')
+
+ options = parser.parse_known_args(sys.argv[1:])[0]
+ if options.chromeos_root is None:
+ self._usage(parser, '--chromeos_root must be set')
+ self.chromeos_root = options.chromeos_root
+ self.tests_passed = 0
+ self.tests_run = 0
+ self.tests_failed = 0
+
+ def _usage(self, parser, message):
+ print('ERROR: ' + message)
+ parser.print_help()
+ sys.exit(0)
+
+ def print_test_status(self):
+ print('----------------------------------------\n')
+ print('Tests attempted: %d' % self.tests_run)
+ print('Tests passed: %d' % self.tests_passed)
+ print('Tests failed: %d' % self.tests_failed)
+ print('\n----------------------------------------')
+
+ def assert_failure(self, msg):
+ print('Assert failure: %s' % msg)
+ self.print_test_status()
+ sys.exit(1)
+
+ def assertIsNotNone(self, arg, arg_name):
+ if arg == None:
+ self.tests_failed = self.tests_failed + 1
+ self.assert_failure('%s is not None' % arg_name)
+
+ def assertNotEqual(self, arg1, arg2, arg1_name, arg2_name):
+ if arg1 == arg2:
+ self.tests_failed = self.tests_failed + 1
+ self.assert_failure('%s is not NotEqual to %s' % (arg1_name, arg2_name))
+
+ def assertEqual(self, arg1, arg2, arg1_name, arg2_name):
+ if arg1 != arg2:
+ self.tests_failed = self.tests_failed + 1
+ self.assert_failure('%s is not Equal to %s' % (arg1_name, arg2_name))
+
+ def test_one_id(self, downloader, test_id, result_string, exact_match):
+ print("Translating '%s'" % test_id)
+ self.tests_run = self.tests_run + 1
+
+ result = downloader.GetBuildID(self.chromeos_root, test_id)
+ # Verify that we got a build id back.
+ self.assertIsNotNone(result, 'result')
+
+ # Verify that the result either contains or exactly matches the
+ # result_string, depending on the exact_match argument.
+ if exact_match:
+ self.assertEqual(result, result_string, 'result', result_string)
+ else:
+ self.assertNotEqual(result.find(result_string), -1, 'result.find', '-1')
+ self.tests_passed = self.tests_passed + 1
+
+ def test_get_build_id(self):
+ """Test that the actual translating of xbuddy names is working properly."""
+ downloader = download_images.ImageDownloader(log_level='quiet')
+
+ self.test_one_id(downloader, 'remote/lumpy/latest-dev', 'lumpy-release/R',
+ False)
+ self.test_one_id(downloader,
+ 'remote/trybot-lumpy-release-afdo-use/R35-5672.0.0-b86',
+ 'trybot-lumpy-release-afdo-use/R35-5672.0.0-b86', True)
+ self.test_one_id(downloader, 'remote/lumpy-release/R35-5672.0.0',
+ 'lumpy-release/R35-5672.0.0', True)
+ self.test_one_id(downloader, 'remote/lumpy/latest-dev', 'lumpy-release/R',
+ False)
+ self.test_one_id(downloader, 'remote/lumpy/latest-official',
+ 'lumpy-release/R', False)
+ self.test_one_id(downloader, 'remote/lumpy/latest-beta', 'lumpy-release/R',
+ False)
+
+ self.print_test_status()
+
+
+if __name__ == '__main__':
+ tester = ImageDownloaderBuildIDTest()
+ tester.test_get_build_id()
diff --git a/crosperf/download_images_unittest.py b/crosperf/download_images_unittest.py
new file mode 100755
index 00000000..7a4f3850
--- /dev/null
+++ b/crosperf/download_images_unittest.py
@@ -0,0 +1,251 @@
+#!/usr/bin/env python2
+#
+# Copyright 2014 Google Inc. All Rights Reserved
+"""Download image unittest."""
+
+from __future__ import print_function
+
+import os
+import mock
+import unittest
+
+import download_images
+from cros_utils import command_executer
+from cros_utils import logger
+
+import test_flag
+
+MOCK_LOGGER = logger.GetLogger(log_dir='', mock=True)
+
+
+class ImageDownloaderTestcast(unittest.TestCase):
+ """The image downloader test class."""
+
+ def __init__(self, *args, **kwargs):
+ super(ImageDownloaderTestcast, self).__init__(*args, **kwargs)
+ self.called_download_image = False
+ self.called_uncompress_image = False
+ self.called_get_build_id = False
+ self.called_download_autotest_files = False
+
+ @mock.patch.object(os, 'makedirs')
+ @mock.patch.object(os.path, 'exists')
+ def test_download_image(self, mock_path_exists, mock_mkdirs):
+
+ # Set mock and test values.
+ mock_cmd_exec = mock.Mock(spec=command_executer.CommandExecuter)
+ test_chroot = '/usr/local/home/chromeos'
+ test_build_id = 'lumpy-release/R36-5814.0.0'
+ image_path = ('gs://chromeos-image-archive/%s/chromiumos_test_image.tar.xz'
+ % test_build_id)
+
+ downloader = download_images.ImageDownloader(
+ logger_to_use=MOCK_LOGGER, cmd_exec=mock_cmd_exec)
+
+ # Set os.path.exists to always return False and run downloader
+ mock_path_exists.return_value = False
+ test_flag.SetTestMode(True)
+ self.assertRaises(download_images.MissingImage, downloader.DownloadImage,
+ test_chroot, test_build_id, image_path)
+
+ # Verify os.path.exists was called twice, with proper arguments.
+ self.assertEqual(mock_path_exists.call_count, 2)
+ mock_path_exists.assert_called_with(
+ '/usr/local/home/chromeos/chroot/tmp/lumpy-release/'
+ 'R36-5814.0.0/chromiumos_test_image.bin')
+ mock_path_exists.assert_any_call(
+ '/usr/local/home/chromeos/chroot/tmp/lumpy-release/R36-5814.0.0')
+
+ # Verify we called os.mkdirs
+ self.assertEqual(mock_mkdirs.call_count, 1)
+ mock_mkdirs.assert_called_with(
+ '/usr/local/home/chromeos/chroot/tmp/lumpy-release/R36-5814.0.0')
+
+ # Verify we called RunCommand once, with proper arguments.
+ self.assertEqual(mock_cmd_exec.RunCommand.call_count, 1)
+ expected_args = (
+ '/usr/local/home/chromeos/chromium/tools/depot_tools/gsutil.py '
+ 'cp gs://chromeos-image-archive/lumpy-release/R36-5814.0.0/'
+ 'chromiumos_test_image.tar.xz '
+ '/usr/local/home/chromeos/chroot/tmp/lumpy-release/R36-5814.0.0')
+
+ mock_cmd_exec.RunCommand.assert_called_with(expected_args)
+
+ # Reset the velues in the mocks; set os.path.exists to always return True.
+ mock_path_exists.reset_mock()
+ mock_cmd_exec.reset_mock()
+ mock_path_exists.return_value = True
+
+ # Run downloader
+ downloader.DownloadImage(test_chroot, test_build_id, image_path)
+
+ # Verify os.path.exists was called twice, with proper arguments.
+ self.assertEqual(mock_path_exists.call_count, 2)
+ mock_path_exists.assert_called_with(
+ '/usr/local/home/chromeos/chroot/tmp/lumpy-release/'
+ 'R36-5814.0.0/chromiumos_test_image.bin')
+ mock_path_exists.assert_any_call(
+ '/usr/local/home/chromeos/chroot/tmp/lumpy-release/R36-5814.0.0')
+
+ # Verify we made no RunCommand or ChrootRunCommand calls (since
+ # os.path.exists returned True, there was no work do be done).
+ self.assertEqual(mock_cmd_exec.RunCommand.call_count, 0)
+ self.assertEqual(mock_cmd_exec.ChrootRunCommand.call_count, 0)
+
+ @mock.patch.object(os.path, 'exists')
+ def test_uncompress_image(self, mock_path_exists):
+
+ # set mock and test values.
+ mock_cmd_exec = mock.Mock(spec=command_executer.CommandExecuter)
+ test_chroot = '/usr/local/home/chromeos'
+ test_build_id = 'lumpy-release/R36-5814.0.0'
+
+ downloader = download_images.ImageDownloader(
+ logger_to_use=MOCK_LOGGER, cmd_exec=mock_cmd_exec)
+
+ # Set os.path.exists to always return False and run uncompress.
+ mock_path_exists.return_value = False
+ self.assertRaises(download_images.MissingImage, downloader.UncompressImage,
+ test_chroot, test_build_id)
+
+ # Verify os.path.exists was called once, with correct arguments.
+ self.assertEqual(mock_path_exists.call_count, 1)
+ mock_path_exists.assert_called_with(
+ '/usr/local/home/chromeos/chroot/tmp/lumpy-release/'
+ 'R36-5814.0.0/chromiumos_test_image.bin')
+
+ # Verify RunCommand was called twice with correct arguments.
+ self.assertEqual(mock_cmd_exec.RunCommand.call_count, 2)
+ # Call 1, should have 2 arguments
+ self.assertEqual(len(mock_cmd_exec.RunCommand.call_args_list[0]), 2)
+ actual_arg = mock_cmd_exec.RunCommand.call_args_list[0][0]
+ expected_arg = (
+ 'cd /usr/local/home/chromeos/chroot/tmp/lumpy-release/R36-5814.0.0 ; '
+ 'tar -Jxf chromiumos_test_image.tar.xz ',)
+ self.assertEqual(expected_arg, actual_arg)
+ # 2nd arg must be exception handler
+ except_handler_string = 'RunCommandExceptionHandler.HandleException'
+ self.assertTrue(
+ except_handler_string in
+ repr(mock_cmd_exec.RunCommand.call_args_list[0][1]))
+
+ # Call 2, should have 2 arguments
+ self.assertEqual(len(mock_cmd_exec.RunCommand.call_args_list[1]), 2)
+ actual_arg = mock_cmd_exec.RunCommand.call_args_list[1][0]
+ expected_arg = (
+ 'cd /usr/local/home/chromeos/chroot/tmp/lumpy-release/R36-5814.0.0 ; '
+ 'rm -f chromiumos_test_image.bin ',)
+ self.assertEqual(expected_arg, actual_arg)
+ # 2nd arg must be empty
+ self.assertTrue('{}' in repr(mock_cmd_exec.RunCommand.call_args_list[1][1]))
+
+ # Set os.path.exists to always return True and run uncompress.
+ mock_path_exists.reset_mock()
+ mock_cmd_exec.reset_mock()
+ mock_path_exists.return_value = True
+ downloader.UncompressImage(test_chroot, test_build_id)
+
+ # Verify os.path.exists was called once, with correct arguments.
+ self.assertEqual(mock_path_exists.call_count, 1)
+ mock_path_exists.assert_called_with(
+ '/usr/local/home/chromeos/chroot/tmp/lumpy-release/'
+ 'R36-5814.0.0/chromiumos_test_image.bin')
+
+ # Verify RunCommand was not called.
+ self.assertEqual(mock_cmd_exec.RunCommand.call_count, 0)
+
+ def test_run(self):
+
+ # Set test arguments
+ test_chroot = '/usr/local/home/chromeos'
+ test_build_id = 'remote/lumpy/latest-dev'
+ test_empty_autotest_path = ''
+ test_autotest_path = '/tmp/autotest'
+
+ # Set values to test/check.
+ self.called_download_image = False
+ self.called_uncompress_image = False
+ self.called_get_build_id = False
+ self.called_download_autotest_files = False
+
+ # Define fake stub functions for Run to call
+ def FakeGetBuildID(unused_root, unused_xbuddy_label):
+ self.called_get_build_id = True
+ return 'lumpy-release/R36-5814.0.0'
+
+ def GoodDownloadImage(root, build_id, image_path):
+ if root or build_id or image_path:
+ pass
+ self.called_download_image = True
+ return 'chromiumos_test_image.bin'
+
+ def BadDownloadImage(root, build_id, image_path):
+ if root or build_id or image_path:
+ pass
+ self.called_download_image = True
+ raise download_images.MissingImage('Could not download image')
+
+ def FakeUncompressImage(root, build_id):
+ if root or build_id:
+ pass
+ self.called_uncompress_image = True
+ return 0
+
+ def FakeDownloadAutotestFiles(root, build_id):
+ if root or build_id:
+ pass
+ self.called_download_autotest_files = True
+ return 'autotest'
+
+ # Initialize downloader
+ downloader = download_images.ImageDownloader(logger_to_use=MOCK_LOGGER)
+
+ # Set downloader to call fake stubs.
+ downloader.GetBuildID = FakeGetBuildID
+ downloader.UncompressImage = FakeUncompressImage
+ downloader.DownloadImage = GoodDownloadImage
+ downloader.DownloadAutotestFiles = FakeDownloadAutotestFiles
+
+ # Call Run.
+ image_path, autotest_path = downloader.Run(test_chroot, test_build_id,
+ test_empty_autotest_path)
+
+ # Make sure it called both _DownloadImage and _UncompressImage
+ self.assertTrue(self.called_download_image)
+ self.assertTrue(self.called_uncompress_image)
+ # Make sure it called DownloadAutotestFiles
+ self.assertTrue(self.called_download_autotest_files)
+ # Make sure it returned an image and autotest path returned from this call
+ self.assertTrue(image_path == 'chromiumos_test_image.bin')
+ self.assertTrue(autotest_path == 'autotest')
+
+ # Call Run with a non-empty autotest path
+ self.called_download_autotest_files = False
+
+ image_path, autotest_path = downloader.Run(test_chroot, test_build_id,
+ test_autotest_path)
+
+ # Verify that downloadAutotestFiles was not called
+ self.assertFalse(self.called_download_autotest_files)
+ # Make sure it returned the specified autotest path returned from this call
+ self.assertTrue(autotest_path == test_autotest_path)
+
+ # Reset values; Now use fake stub that simulates DownloadImage failing.
+ self.called_download_image = False
+ self.called_uncompress_image = False
+ self.called_download_autotest_files = False
+ downloader.DownloadImage = BadDownloadImage
+
+ # Call Run again.
+ self.assertRaises(download_images.MissingImage, downloader.Run, test_chroot,
+ test_autotest_path, test_build_id)
+
+ # Verify that UncompressImage and downloadAutotestFiles were not called,
+ # since _DownloadImage "failed"
+ self.assertTrue(self.called_download_image)
+ self.assertFalse(self.called_uncompress_image)
+ self.assertFalse(self.called_download_autotest_files)
+
+
+if __name__ == '__main__':
+ unittest.main()
diff --git a/crosperf/experiment.py b/crosperf/experiment.py
new file mode 100644
index 00000000..dbcde213
--- /dev/null
+++ b/crosperf/experiment.py
@@ -0,0 +1,212 @@
+# Copyright (c) 2013 The Chromium OS Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+"""The experiment setting module."""
+
+from __future__ import print_function
+
+import os
+import time
+
+import afe_lock_machine
+from threading import Lock
+
+from cros_utils import logger
+from cros_utils import misc
+
+import benchmark_run
+from machine_manager import BadChecksum
+from machine_manager import MachineManager
+from machine_manager import MockMachineManager
+import test_flag
+
+
+class Experiment(object):
+ """Class representing an Experiment to be run."""
+
+ def __init__(self, name, remote, working_directory, chromeos_root,
+ cache_conditions, labels, benchmarks, experiment_file, email_to,
+ acquire_timeout, log_dir, log_level, share_cache,
+ results_directory, locks_directory):
+ self.name = name
+ self.working_directory = working_directory
+ self.remote = remote
+ self.chromeos_root = chromeos_root
+ self.cache_conditions = cache_conditions
+ self.experiment_file = experiment_file
+ self.email_to = email_to
+ if not results_directory:
+ self.results_directory = os.path.join(self.working_directory,
+ self.name + '_results')
+ else:
+ self.results_directory = misc.CanonicalizePath(results_directory)
+ self.log_dir = log_dir
+ self.log_level = log_level
+ self.labels = labels
+ self.benchmarks = benchmarks
+ self.num_complete = 0
+ self.num_run_complete = 0
+ self.share_cache = share_cache
+ self.active_threads = []
+ # If locks_directory (self.lock_dir) not blank, we will use the file
+ # locking mechanism; if it is blank then we will use the AFE server
+ # locking mechanism.
+ self.locks_dir = locks_directory
+ self.locked_machines = []
+
+ if not remote:
+ raise RuntimeError('No remote hosts specified')
+ if not self.benchmarks:
+ raise RuntimeError('No benchmarks specified')
+ if not self.labels:
+ raise RuntimeError('No labels specified')
+
+ # We need one chromeos_root to run the benchmarks in, but it doesn't
+ # matter where it is, unless the ABIs are different.
+ if not chromeos_root:
+ for label in self.labels:
+ if label.chromeos_root:
+ chromeos_root = label.chromeos_root
+ break
+ if not chromeos_root:
+ raise RuntimeError('No chromeos_root given and could not determine '
+ 'one from the image path.')
+
+ machine_manager_fn = MachineManager
+ if test_flag.GetTestMode():
+ machine_manager_fn = MockMachineManager
+ self.machine_manager = machine_manager_fn(chromeos_root, acquire_timeout,
+ log_level, locks_directory)
+ self.l = logger.GetLogger(log_dir)
+
+ for machine in self.remote:
+ # machine_manager.AddMachine only adds reachable machines.
+ self.machine_manager.AddMachine(machine)
+ # Now machine_manager._all_machines contains a list of reachable
+ # machines. This is a subset of self.remote. We make both lists the same.
+ self.remote = [m.name for m in self.machine_manager.GetAllMachines()]
+ if not self.remote:
+ raise RuntimeError('No machine available for running experiment.')
+
+ for label in labels:
+ # We filter out label remotes that are not reachable (not in
+ # self.remote). So each label.remote is a sublist of experiment.remote.
+ label.remote = [r for r in label.remote if r in self.remote]
+ try:
+ self.machine_manager.ComputeCommonCheckSum(label)
+ except BadChecksum:
+ # Force same image on all machines, then we do checksum again. No
+ # bailout if checksums still do not match.
+ self.machine_manager.ForceSameImageToAllMachines(label)
+ self.machine_manager.ComputeCommonCheckSum(label)
+
+ self.machine_manager.ComputeCommonCheckSumString(label)
+
+ self.start_time = None
+ self.benchmark_runs = self._GenerateBenchmarkRuns()
+
+ self._schedv2 = None
+ self._internal_counter_lock = Lock()
+
+ def set_schedv2(self, schedv2):
+ self._schedv2 = schedv2
+
+ def schedv2(self):
+ return self._schedv2
+
+ def _GenerateBenchmarkRuns(self):
+ """Generate benchmark runs from labels and benchmark defintions."""
+ benchmark_runs = []
+ for label in self.labels:
+ for benchmark in self.benchmarks:
+ for iteration in xrange(1, benchmark.iterations + 1):
+
+ benchmark_run_name = '%s: %s (%s)' % (label.name, benchmark.name,
+ iteration)
+ full_name = '%s_%s_%s' % (label.name, benchmark.name, iteration)
+ logger_to_use = logger.Logger(self.log_dir, 'run.%s' % (full_name),
+ True)
+ benchmark_runs.append(benchmark_run.BenchmarkRun(
+ benchmark_run_name, benchmark, label, iteration,
+ self.cache_conditions, self.machine_manager, logger_to_use,
+ self.log_level, self.share_cache))
+
+ return benchmark_runs
+
+ def Build(self):
+ pass
+
+ def Terminate(self):
+ if self._schedv2 is not None:
+ self._schedv2.terminate()
+ else:
+ for t in self.benchmark_runs:
+ if t.isAlive():
+ self.l.LogError("Terminating run: '%s'." % t.name)
+ t.Terminate()
+
+ def IsComplete(self):
+ if self._schedv2:
+ return self._schedv2.is_complete()
+ if self.active_threads:
+ for t in self.active_threads:
+ if t.isAlive():
+ t.join(0)
+ if not t.isAlive():
+ self.num_complete += 1
+ if not t.cache_hit:
+ self.num_run_complete += 1
+ self.active_threads.remove(t)
+ return False
+ return True
+
+ def BenchmarkRunFinished(self, br):
+ """Update internal counters after br finishes.
+
+ Note this is only used by schedv2 and is called by multiple threads.
+ Never throw any exception here.
+ """
+
+ assert self._schedv2 is not None
+ with self._internal_counter_lock:
+ self.num_complete += 1
+ if not br.cache_hit:
+ self.num_run_complete += 1
+
+ def Run(self):
+ self.start_time = time.time()
+ if self._schedv2 is not None:
+ self._schedv2.run_sched()
+ else:
+ self.active_threads = []
+ for run in self.benchmark_runs:
+ # Set threads to daemon so program exits when ctrl-c is pressed.
+ run.daemon = True
+ run.start()
+ self.active_threads.append(run)
+
+ def SetCacheConditions(self, cache_conditions):
+ for run in self.benchmark_runs:
+ run.SetCacheConditions(cache_conditions)
+
+ def Cleanup(self):
+ """Make sure all machines are unlocked."""
+ if self.locks_dir:
+ # We are using the file locks mechanism, so call machine_manager.Cleanup
+ # to unlock everything.
+ self.machine_manager.Cleanup()
+ else:
+ if test_flag.GetTestMode():
+ return
+
+ all_machines = self.locked_machines
+ if not all_machines:
+ return
+
+ # If we locked any machines earlier, make sure we unlock them now.
+ lock_mgr = afe_lock_machine.AFELockManager(
+ all_machines, '', self.labels[0].chromeos_root, None)
+ machine_states = lock_mgr.GetMachineStates('unlock')
+ for k, state in machine_states.iteritems():
+ if state['locked']:
+ lock_mgr.UpdateLockInAFE(False, k)
diff --git a/crosperf/experiment_factory.py b/crosperf/experiment_factory.py
new file mode 100644
index 00000000..2278015b
--- /dev/null
+++ b/crosperf/experiment_factory.py
@@ -0,0 +1,331 @@
+# Copyright (c) 2013 The Chromium OS Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+"""A module to generate experiments."""
+
+from __future__ import print_function
+import os
+import re
+import socket
+
+from benchmark import Benchmark
+import config
+from experiment import Experiment
+from label import Label
+from label import MockLabel
+from results_cache import CacheConditions
+import test_flag
+import file_lock_machine
+
+# Users may want to run Telemetry tests either individually, or in
+# specified sets. Here we define sets of tests that users may want
+# to run together.
+
+telemetry_perfv2_tests = [
+ 'dromaeo.domcoreattr', 'dromaeo.domcoremodify', 'dromaeo.domcorequery',
+ 'dromaeo.domcoretraverse', 'kraken', 'octane', 'robohornet_pro', 'sunspider'
+]
+
+telemetry_pagecycler_tests = [
+ 'page_cycler_v2.intl_ar_fa_he',
+ 'page_cycler_v2.intl_es_fr_pt-BR',
+ 'page_cycler_v2.intl_hi_ru',
+ 'page_cycler_v2.intl_ja_zh',
+ 'page_cycler_v2.intl_ko_th_vi',
+ # 'page_cycler_v2.morejs',
+ # 'page_cycler_v2.moz',
+ # 'page_cycler_v2.netsim.top_10',
+ 'page_cycler_v2.tough_layout_cases',
+ 'page_cycler_v2.typical_25'
+]
+
+telemetry_toolchain_old_perf_tests = [
+ 'dromaeo.domcoremodify', 'page_cycler_v2.intl_es_fr_pt-BR',
+ 'page_cycler_v2.intl_hi_ru', 'page_cycler_v2.intl_ja_zh',
+ 'page_cycler_v2.intl_ko_th_vi', 'page_cycler_v2.netsim.top_10',
+ 'page_cycler_v2.typical_25', 'robohornet_pro', 'spaceport',
+ 'tab_switching.top_10'
+]
+telemetry_toolchain_perf_tests = [
+ 'octane',
+ 'kraken',
+ 'speedometer',
+ 'dromaeo.domcoreattr',
+ 'dromaeo.domcoremodify',
+ 'smoothness.tough_webgl_cases',
+]
+graphics_perf_tests = [
+ 'graphics_GLBench',
+ 'graphics_GLMark2',
+ 'graphics_SanAngeles',
+ 'graphics_WebGLAquarium',
+ 'graphics_WebGLPerformance',
+]
+telemetry_crosbolt_perf_tests = [
+ 'octane',
+ 'kraken',
+ 'speedometer',
+ 'jetstream',
+ 'startup.cold.blank_page',
+ 'smoothness.top_25_smooth',
+]
+crosbolt_perf_tests = [
+ 'graphics_WebGLAquarium',
+ 'video_PlaybackPerf.h264',
+ 'video_PlaybackPerf.vp9',
+ 'video_WebRtcPerf',
+ 'BootPerfServerCrosPerf',
+ 'power_Resume',
+ 'video_PlaybackPerf.h264',
+ 'build_RootFilesystemSize',
+# 'cheets_AntutuTest',
+# 'cheets_PerfBootServer',
+# 'cheets_CandyCrushTest',
+# 'cheets_LinpackTest',
+]
+
+
+class ExperimentFactory(object):
+ """Factory class for building an Experiment, given an ExperimentFile as input.
+
+ This factory is currently hardcoded to produce an experiment for running
+ ChromeOS benchmarks, but the idea is that in the future, other types
+ of experiments could be produced.
+ """
+
+ def AppendBenchmarkSet(self, benchmarks, benchmark_list, test_args,
+ iterations, rm_chroot_tmp, perf_args, suite,
+ show_all_results, retries, run_local):
+ """Add all the tests in a set to the benchmarks list."""
+ for test_name in benchmark_list:
+ telemetry_benchmark = Benchmark(test_name, test_name, test_args,
+ iterations, rm_chroot_tmp, perf_args,
+ suite, show_all_results, retries,
+ run_local)
+ benchmarks.append(telemetry_benchmark)
+
+ def GetExperiment(self, experiment_file, working_directory, log_dir):
+ """Construct an experiment from an experiment file."""
+ global_settings = experiment_file.GetGlobalSettings()
+ experiment_name = global_settings.GetField('name')
+ board = global_settings.GetField('board')
+ remote = global_settings.GetField('remote')
+ # This is used to remove the ",' from the remote if user
+ # add them to the remote string.
+ new_remote = []
+ if remote:
+ for i in remote:
+ c = re.sub('["\']', '', i)
+ new_remote.append(c)
+ remote = new_remote
+ chromeos_root = global_settings.GetField('chromeos_root')
+ rm_chroot_tmp = global_settings.GetField('rm_chroot_tmp')
+ perf_args = global_settings.GetField('perf_args')
+ acquire_timeout = global_settings.GetField('acquire_timeout')
+ cache_dir = global_settings.GetField('cache_dir')
+ cache_only = global_settings.GetField('cache_only')
+ config.AddConfig('no_email', global_settings.GetField('no_email'))
+ share_cache = global_settings.GetField('share_cache')
+ results_dir = global_settings.GetField('results_dir')
+ use_file_locks = global_settings.GetField('use_file_locks')
+ locks_dir = global_settings.GetField('locks_dir')
+ # If we pass a blank locks_dir to the Experiment, it will use the AFE server
+ # lock mechanism. So if the user specified use_file_locks, but did not
+ # specify a locks dir, set the locks dir to the default locks dir in
+ # file_lock_machine.
+ if use_file_locks and not locks_dir:
+ locks_dir = file_lock_machine.Machine.LOCKS_DIR
+ chrome_src = global_settings.GetField('chrome_src')
+ show_all_results = global_settings.GetField('show_all_results')
+ log_level = global_settings.GetField('logging_level')
+ if log_level not in ('quiet', 'average', 'verbose'):
+ log_level = 'verbose'
+ # Default cache hit conditions. The image checksum in the cache and the
+ # computed checksum of the image must match. Also a cache file must exist.
+ cache_conditions = [
+ CacheConditions.CACHE_FILE_EXISTS, CacheConditions.CHECKSUMS_MATCH
+ ]
+ if global_settings.GetField('rerun_if_failed'):
+ cache_conditions.append(CacheConditions.RUN_SUCCEEDED)
+ if global_settings.GetField('rerun'):
+ cache_conditions.append(CacheConditions.FALSE)
+ if global_settings.GetField('same_machine'):
+ cache_conditions.append(CacheConditions.SAME_MACHINE_MATCH)
+ if global_settings.GetField('same_specs'):
+ cache_conditions.append(CacheConditions.MACHINES_MATCH)
+
+ # Construct benchmarks.
+ # Some fields are common with global settings. The values are
+ # inherited and/or merged with the global settings values.
+ benchmarks = []
+ all_benchmark_settings = experiment_file.GetSettings('benchmark')
+ for benchmark_settings in all_benchmark_settings:
+ benchmark_name = benchmark_settings.name
+ test_name = benchmark_settings.GetField('test_name')
+ if not test_name:
+ test_name = benchmark_name
+ test_args = benchmark_settings.GetField('test_args')
+ iterations = benchmark_settings.GetField('iterations')
+ suite = benchmark_settings.GetField('suite')
+ retries = benchmark_settings.GetField('retries')
+ run_local = benchmark_settings.GetField('run_local')
+
+ if suite == 'telemetry_Crosperf':
+ if test_name == 'all_perfv2':
+ self.AppendBenchmarkSet(benchmarks, telemetry_perfv2_tests, test_args,
+ iterations, rm_chroot_tmp, perf_args, suite,
+ show_all_results, retries, run_local)
+ elif test_name == 'all_pagecyclers':
+ self.AppendBenchmarkSet(benchmarks, telemetry_pagecycler_tests,
+ test_args, iterations, rm_chroot_tmp,
+ perf_args, suite, show_all_results, retries,
+ run_local)
+ elif test_name == 'all_toolchain_perf':
+ self.AppendBenchmarkSet(benchmarks, telemetry_toolchain_perf_tests,
+ test_args, iterations, rm_chroot_tmp,
+ perf_args, suite, show_all_results, retries,
+ run_local)
+ # Add non-telemetry toolchain-perf benchmarks:
+ benchmarks.append(
+ Benchmark(
+ 'graphics_WebGLAquarium',
+ 'graphics_WebGLAquarium',
+ '',
+ iterations,
+ rm_chroot_tmp,
+ perf_args,
+ '',
+ show_all_results,
+ retries,
+ run_local=False))
+ elif test_name == 'all_toolchain_perf_old':
+ self.AppendBenchmarkSet(benchmarks,
+ telemetry_toolchain_old_perf_tests, test_args,
+ iterations, rm_chroot_tmp, perf_args, suite,
+ show_all_results, retries, run_local)
+ else:
+ benchmark = Benchmark(test_name, test_name, test_args, iterations,
+ rm_chroot_tmp, perf_args, suite,
+ show_all_results, retries, run_local)
+ benchmarks.append(benchmark)
+ else:
+ if test_name == 'all_graphics_perf':
+ self.AppendBenchmarkSet(benchmarks,
+ graphics_perf_tests, '',
+ iterations, rm_chroot_tmp, perf_args, '',
+ show_all_results, retries, run_local=False)
+ elif test_name == 'all_crosbolt_perf':
+ self.AppendBenchmarkSet(benchmarks,
+ telemetry_crosbolt_perf_tests, test_args,
+ iterations, rm_chroot_tmp, perf_args,
+ 'telemetry_Crosperf', show_all_results,
+ retries, run_local)
+ self.AppendBenchmarkSet(benchmarks,
+ crosbolt_perf_tests, '',
+ iterations, rm_chroot_tmp, perf_args, '',
+ show_all_results, retries, run_local=False)
+ else:
+ # Add the single benchmark.
+ benchmark = Benchmark(
+ benchmark_name,
+ test_name,
+ test_args,
+ iterations,
+ rm_chroot_tmp,
+ perf_args,
+ suite,
+ show_all_results,
+ retries,
+ run_local=False)
+ benchmarks.append(benchmark)
+
+ if not benchmarks:
+ raise RuntimeError('No benchmarks specified')
+
+ # Construct labels.
+ # Some fields are common with global settings. The values are
+ # inherited and/or merged with the global settings values.
+ labels = []
+ all_label_settings = experiment_file.GetSettings('label')
+ all_remote = list(remote)
+ for label_settings in all_label_settings:
+ label_name = label_settings.name
+ image = label_settings.GetField('chromeos_image')
+ autotest_path = label_settings.GetField('autotest_path')
+ chromeos_root = label_settings.GetField('chromeos_root')
+ my_remote = label_settings.GetField('remote')
+ compiler = label_settings.GetField('compiler')
+ new_remote = []
+ if my_remote:
+ for i in my_remote:
+ c = re.sub('["\']', '', i)
+ new_remote.append(c)
+ my_remote = new_remote
+ if image == '':
+ build = label_settings.GetField('build')
+ if len(build) == 0:
+ raise RuntimeError("Can not have empty 'build' field!")
+ image, autotest_path = label_settings.GetXbuddyPath(build,
+ autotest_path,
+ board,
+ chromeos_root,
+ log_level)
+
+ cache_dir = label_settings.GetField('cache_dir')
+ chrome_src = label_settings.GetField('chrome_src')
+
+ # TODO(yunlian): We should consolidate code in machine_manager.py
+ # to derermine whether we are running from within google or not
+ if ('corp.google.com' in socket.gethostname() and
+ (not my_remote or my_remote == remote and
+ global_settings.GetField('board') != board)):
+ my_remote = self.GetDefaultRemotes(board)
+ if global_settings.GetField('same_machine') and len(my_remote) > 1:
+ raise RuntimeError('Only one remote is allowed when same_machine '
+ 'is turned on')
+ all_remote += my_remote
+ image_args = label_settings.GetField('image_args')
+ if test_flag.GetTestMode():
+ # pylint: disable=too-many-function-args
+ label = MockLabel(label_name, image, autotest_path, chromeos_root,
+ board, my_remote, image_args, cache_dir, cache_only,
+ log_level, compiler, chrome_src)
+ else:
+ label = Label(label_name, image, autotest_path, chromeos_root, board,
+ my_remote, image_args, cache_dir, cache_only, log_level,
+ compiler, chrome_src)
+ labels.append(label)
+
+ if not labels:
+ raise RuntimeError('No labels specified')
+
+ email = global_settings.GetField('email')
+ all_remote += list(set(my_remote))
+ all_remote = list(set(all_remote))
+ experiment = Experiment(experiment_name, all_remote, working_directory,
+ chromeos_root, cache_conditions, labels, benchmarks,
+ experiment_file.Canonicalize(), email,
+ acquire_timeout, log_dir, log_level, share_cache,
+ results_dir, locks_dir)
+
+ return experiment
+
+ def GetDefaultRemotes(self, board):
+ default_remotes_file = os.path.join(
+ os.path.dirname(__file__), 'default_remotes')
+ try:
+ with open(default_remotes_file) as f:
+ for line in f:
+ key, v = line.split(':')
+ if key.strip() == board:
+ remotes = v.strip().split()
+ if remotes:
+ return remotes
+ else:
+ raise RuntimeError('There is no remote for {0}'.format(board))
+ except IOError:
+ # TODO: rethrow instead of throwing different exception.
+ raise RuntimeError('IOError while reading file {0}'
+ .format(default_remotes_file))
+ else:
+ raise RuntimeError('There is not remote for {0}'.format(board))
diff --git a/crosperf/experiment_factory_unittest.py b/crosperf/experiment_factory_unittest.py
new file mode 100755
index 00000000..02bfd0a1
--- /dev/null
+++ b/crosperf/experiment_factory_unittest.py
@@ -0,0 +1,242 @@
+#!/usr/bin/env python2
+
+# Copyright (c) 2013 The Chromium OS Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+"""Unit test for experiment_factory.py"""
+
+from __future__ import print_function
+
+import StringIO
+import socket
+import mock
+import unittest
+
+from cros_utils.file_utils import FileUtils
+
+from experiment_factory import ExperimentFactory
+from experiment_file import ExperimentFile
+import test_flag
+import benchmark
+import experiment_factory
+import settings_factory
+
+EXPERIMENT_FILE_1 = """
+ board: x86-alex
+ remote: chromeos-alex3
+
+ benchmark: PageCycler {
+ iterations: 3
+ }
+
+ image1 {
+ chromeos_image: /usr/local/google/cros_image1.bin
+ }
+
+ image2 {
+ chromeos_image: /usr/local/google/cros_image2.bin
+ }
+ """
+
+# pylint: disable=too-many-function-args
+
+
+class ExperimentFactoryTest(unittest.TestCase):
+ """Class for running experiment factory unittests."""
+
+ def setUp(self):
+ self.append_benchmark_call_args = []
+
+ def testLoadExperimentFile1(self):
+ experiment_file = ExperimentFile(StringIO.StringIO(EXPERIMENT_FILE_1))
+ exp = ExperimentFactory().GetExperiment(
+ experiment_file, working_directory='', log_dir='')
+ self.assertEqual(exp.remote, ['chromeos-alex3'])
+
+ self.assertEqual(len(exp.benchmarks), 1)
+ self.assertEqual(exp.benchmarks[0].name, 'PageCycler')
+ self.assertEqual(exp.benchmarks[0].test_name, 'PageCycler')
+ self.assertEqual(exp.benchmarks[0].iterations, 3)
+
+ self.assertEqual(len(exp.labels), 2)
+ self.assertEqual(exp.labels[0].chromeos_image,
+ '/usr/local/google/cros_image1.bin')
+ self.assertEqual(exp.labels[0].board, 'x86-alex')
+
+ def test_append_benchmark_set(self):
+ ef = ExperimentFactory()
+
+ bench_list = []
+ ef.AppendBenchmarkSet(bench_list, experiment_factory.telemetry_perfv2_tests,
+ '', 1, False, '', 'telemetry_Crosperf', False, 0,
+ False)
+ self.assertEqual(
+ len(bench_list), len(experiment_factory.telemetry_perfv2_tests))
+ self.assertTrue(type(bench_list[0]) is benchmark.Benchmark)
+
+ bench_list = []
+ ef.AppendBenchmarkSet(bench_list,
+ experiment_factory.telemetry_pagecycler_tests, '', 1,
+ False, '', 'telemetry_Crosperf', False, 0, False)
+ self.assertEqual(
+ len(bench_list), len(experiment_factory.telemetry_pagecycler_tests))
+ self.assertTrue(type(bench_list[0]) is benchmark.Benchmark)
+
+ bench_list = []
+ ef.AppendBenchmarkSet(bench_list,
+ experiment_factory.telemetry_toolchain_perf_tests, '',
+ 1, False, '', 'telemetry_Crosperf', False, 0, False)
+ self.assertEqual(
+ len(bench_list), len(experiment_factory.telemetry_toolchain_perf_tests))
+ self.assertTrue(type(bench_list[0]) is benchmark.Benchmark)
+
+ @mock.patch.object(socket, 'gethostname')
+ def test_get_experiment(self, mock_socket):
+
+ test_flag.SetTestMode(False)
+ self.append_benchmark_call_args = []
+
+ def FakeAppendBenchmarkSet(bench_list, set_list, args, iters, rm_ch,
+ perf_args, suite, show_all):
+ 'Helper function for test_get_experiment'
+ arg_list = [
+ bench_list, set_list, args, iters, rm_ch, perf_args, suite, show_all
+ ]
+ self.append_benchmark_call_args.append(arg_list)
+
+ def FakeGetDefaultRemotes(board):
+ if not board:
+ return []
+ return ['fake_chromeos_machine1.cros', 'fake_chromeos_machine2.cros']
+
+ def FakeGetXbuddyPath(build, autotest_dir, board, chroot, log_level):
+ autotest_path = autotest_dir
+ if not autotest_path:
+ autotest_path = 'fake_autotest_path'
+ if not build or not board or not chroot or not log_level:
+ return '', autotest_path
+ return 'fake_image_path', autotest_path
+
+ ef = ExperimentFactory()
+ ef.AppendBenchmarkSet = FakeAppendBenchmarkSet
+ ef.GetDefaultRemotes = FakeGetDefaultRemotes
+
+ label_settings = settings_factory.LabelSettings('image_label')
+ benchmark_settings = settings_factory.BenchmarkSettings('bench_test')
+ global_settings = settings_factory.GlobalSettings('test_name')
+
+ label_settings.GetXbuddyPath = FakeGetXbuddyPath
+
+ mock_experiment_file = ExperimentFile(StringIO.StringIO(''))
+ mock_experiment_file.all_settings = []
+
+ test_flag.SetTestMode(True)
+ # Basic test.
+ global_settings.SetField('name', 'unittest_test')
+ global_settings.SetField('board', 'lumpy')
+ global_settings.SetField('remote', '123.45.67.89 123.45.76.80')
+ benchmark_settings.SetField('test_name', 'kraken')
+ benchmark_settings.SetField('suite', 'telemetry_Crosperf')
+ benchmark_settings.SetField('iterations', 1)
+ label_settings.SetField(
+ 'chromeos_image',
+ 'chromeos/src/build/images/lumpy/latest/chromiumos_test_image.bin')
+ label_settings.SetField('chrome_src', '/usr/local/google/home/chrome-top')
+ label_settings.SetField('autotest_path', '/tmp/autotest')
+
+ mock_experiment_file.global_settings = global_settings
+ mock_experiment_file.all_settings.append(label_settings)
+ mock_experiment_file.all_settings.append(benchmark_settings)
+ mock_experiment_file.all_settings.append(global_settings)
+
+ mock_socket.return_value = ''
+
+ # First test. General test.
+ exp = ef.GetExperiment(mock_experiment_file, '', '')
+ self.assertEqual(exp.remote, ['123.45.67.89', '123.45.76.80'])
+ self.assertEqual(exp.cache_conditions, [0, 2, 1])
+ self.assertEqual(exp.log_level, 'average')
+
+ self.assertEqual(len(exp.benchmarks), 1)
+ self.assertEqual(exp.benchmarks[0].name, 'kraken')
+ self.assertEqual(exp.benchmarks[0].test_name, 'kraken')
+ self.assertEqual(exp.benchmarks[0].iterations, 1)
+ self.assertEqual(exp.benchmarks[0].suite, 'telemetry_Crosperf')
+ self.assertFalse(exp.benchmarks[0].show_all_results)
+
+ self.assertEqual(len(exp.labels), 1)
+ self.assertEqual(exp.labels[0].chromeos_image,
+ 'chromeos/src/build/images/lumpy/latest/'
+ 'chromiumos_test_image.bin')
+ self.assertEqual(exp.labels[0].autotest_path, '/tmp/autotest')
+ self.assertEqual(exp.labels[0].board, 'lumpy')
+
+ # Second test: Remotes listed in labels.
+ test_flag.SetTestMode(True)
+ label_settings.SetField('remote', 'chromeos1.cros chromeos2.cros')
+ exp = ef.GetExperiment(mock_experiment_file, '', '')
+ self.assertEqual(
+ exp.remote,
+ ['chromeos1.cros', 'chromeos2.cros', '123.45.67.89', '123.45.76.80'])
+
+ # Third test: Automatic fixing of bad logging_level param:
+ global_settings.SetField('logging_level', 'really loud!')
+ exp = ef.GetExperiment(mock_experiment_file, '', '')
+ self.assertEqual(exp.log_level, 'verbose')
+
+ # Fourth test: Setting cache conditions; only 1 remote with "same_machine"
+ global_settings.SetField('rerun_if_failed', 'true')
+ global_settings.SetField('rerun', 'true')
+ global_settings.SetField('same_machine', 'true')
+ global_settings.SetField('same_specs', 'true')
+
+ self.assertRaises(Exception, ef.GetExperiment, mock_experiment_file, '', '')
+ label_settings.SetField('remote', '')
+ global_settings.SetField('remote', '123.45.67.89')
+ exp = ef.GetExperiment(mock_experiment_file, '', '')
+ self.assertEqual(exp.cache_conditions, [0, 2, 3, 4, 6, 1])
+
+ # Fifth Test: Adding a second label; calling GetXbuddyPath; omitting all
+ # remotes (Call GetDefaultRemotes).
+ mock_socket.return_value = 'test.corp.google.com'
+ global_settings.SetField('remote', '')
+ global_settings.SetField('same_machine', 'false')
+
+ label_settings_2 = settings_factory.LabelSettings('official_image_label')
+ label_settings_2.SetField('chromeos_root', 'chromeos')
+ label_settings_2.SetField('build', 'official-dev')
+ label_settings_2.SetField('autotest_path', '')
+ label_settings_2.GetXbuddyPath = FakeGetXbuddyPath
+
+ mock_experiment_file.all_settings.append(label_settings_2)
+ exp = ef.GetExperiment(mock_experiment_file, '', '')
+ self.assertEqual(len(exp.labels), 2)
+ self.assertEqual(exp.labels[1].chromeos_image, 'fake_image_path')
+ self.assertEqual(exp.labels[1].autotest_path, 'fake_autotest_path')
+ self.assertEqual(
+ exp.remote,
+ ['fake_chromeos_machine1.cros', 'fake_chromeos_machine2.cros'])
+
+ def test_get_default_remotes(self):
+ board_list = [
+ 'x86-alex', 'lumpy', 'elm', 'parrot', 'daisy', 'peach_pit', 'peppy',
+ 'squawks'
+ ]
+
+ ef = ExperimentFactory()
+ self.assertRaises(Exception, ef.GetDefaultRemotes, 'bad-board')
+
+ # Verify that we have entries for every board, and that we get three
+ # machines back for each board.
+ for b in board_list:
+ remotes = ef.GetDefaultRemotes(b)
+ if b == 'elm':
+ self.assertEqual(len(remotes), 2)
+ else:
+ self.assertEqual(len(remotes), 3)
+
+
+if __name__ == '__main__':
+ FileUtils.Configure(True)
+ test_flag.SetTestMode(True)
+ unittest.main()
diff --git a/crosperf/experiment_file.py b/crosperf/experiment_file.py
new file mode 100644
index 00000000..016e9d86
--- /dev/null
+++ b/crosperf/experiment_file.py
@@ -0,0 +1,205 @@
+# Copyright (c) 2011 The Chromium OS Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+"""The experiment file module. It manages the input file of crosperf."""
+
+from __future__ import print_function
+import os.path
+import re
+from settings_factory import SettingsFactory
+
+
+class ExperimentFile(object):
+ """Class for parsing the experiment file format.
+
+ The grammar for this format is:
+
+ experiment = { _FIELD_VALUE_RE | settings }
+ settings = _OPEN_SETTINGS_RE
+ { _FIELD_VALUE_RE }
+ _CLOSE_SETTINGS_RE
+
+ Where the regexes are terminals defined below. This results in an format
+ which looks something like:
+
+ field_name: value
+ settings_type: settings_name {
+ field_name: value
+ field_name: value
+ }
+ """
+
+ # Field regex, e.g. "iterations: 3"
+ _FIELD_VALUE_RE = re.compile(r'(\+)?\s*(\w+?)(?:\.(\S+))?\s*:\s*(.*)')
+ # Open settings regex, e.g. "label {"
+ _OPEN_SETTINGS_RE = re.compile(r'(?:([\w.-]+):)?\s*([\w.-]+)\s*{')
+ # Close settings regex.
+ _CLOSE_SETTINGS_RE = re.compile(r'}')
+
+ def __init__(self, experiment_file, overrides=None):
+ """Construct object from file-like experiment_file.
+
+ Args:
+ experiment_file: file-like object with text description of experiment.
+ overrides: A settings object that will override fields in other settings.
+
+ Raises:
+ Exception: if invalid build type or description is invalid.
+ """
+ self.all_settings = []
+ self.global_settings = SettingsFactory().GetSettings('global', 'global')
+ self.all_settings.append(self.global_settings)
+
+ self._Parse(experiment_file)
+
+ for settings in self.all_settings:
+ settings.Inherit()
+ settings.Validate()
+ if overrides:
+ settings.Override(overrides)
+
+ def GetSettings(self, settings_type):
+ """Return nested fields from the experiment file."""
+ res = []
+ for settings in self.all_settings:
+ if settings.settings_type == settings_type:
+ res.append(settings)
+ return res
+
+ def GetGlobalSettings(self):
+ """Return the global fields from the experiment file."""
+ return self.global_settings
+
+ def _ParseField(self, reader):
+ """Parse a key/value field."""
+ line = reader.CurrentLine().strip()
+ match = ExperimentFile._FIELD_VALUE_RE.match(line)
+ append, name, _, text_value = match.groups()
+ return (name, text_value, append)
+
+ def _ParseSettings(self, reader):
+ """Parse a settings block."""
+ line = reader.CurrentLine().strip()
+ match = ExperimentFile._OPEN_SETTINGS_RE.match(line)
+ settings_type = match.group(1)
+ if settings_type is None:
+ settings_type = ''
+ settings_name = match.group(2)
+ settings = SettingsFactory().GetSettings(settings_name, settings_type)
+ settings.SetParentSettings(self.global_settings)
+
+ while reader.NextLine():
+ line = reader.CurrentLine().strip()
+
+ if not line:
+ continue
+ elif ExperimentFile._FIELD_VALUE_RE.match(line):
+ field = self._ParseField(reader)
+ settings.SetField(field[0], field[1], field[2])
+ elif ExperimentFile._CLOSE_SETTINGS_RE.match(line):
+ return settings
+
+ raise EOFError('Unexpected EOF while parsing settings block.')
+
+ def _Parse(self, experiment_file):
+ """Parse experiment file and create settings."""
+ reader = ExperimentFileReader(experiment_file)
+ settings_names = {}
+ try:
+ while reader.NextLine():
+ line = reader.CurrentLine().strip()
+
+ if not line:
+ continue
+ elif ExperimentFile._OPEN_SETTINGS_RE.match(line):
+ new_settings = self._ParseSettings(reader)
+ if new_settings.name in settings_names:
+ raise SyntaxError("Duplicate settings name: '%s'." %
+ new_settings.name)
+ settings_names[new_settings.name] = True
+ self.all_settings.append(new_settings)
+ elif ExperimentFile._FIELD_VALUE_RE.match(line):
+ field = self._ParseField(reader)
+ self.global_settings.SetField(field[0], field[1], field[2])
+ else:
+ raise IOError('Unexpected line.')
+ except Exception, err:
+ raise RuntimeError('Line %d: %s\n==> %s' % (reader.LineNo(), str(err),
+ reader.CurrentLine(False)))
+
+ def Canonicalize(self):
+ """Convert parsed experiment file back into an experiment file."""
+ res = ''
+ board = ''
+ for field_name in self.global_settings.fields:
+ field = self.global_settings.fields[field_name]
+ if field.assigned:
+ res += '%s: %s\n' % (field.name, field.GetString())
+ if field.name == 'board':
+ board = field.GetString()
+ res += '\n'
+
+ for settings in self.all_settings:
+ if settings.settings_type != 'global':
+ res += '%s: %s {\n' % (settings.settings_type, settings.name)
+ for field_name in settings.fields:
+ field = settings.fields[field_name]
+ if field.assigned:
+ res += '\t%s: %s\n' % (field.name, field.GetString())
+ if field.name == 'chromeos_image':
+ real_file = (
+ os.path.realpath(os.path.expanduser(field.GetString())))
+ if real_file != field.GetString():
+ res += '\t#actual_image: %s\n' % real_file
+ if field.name == 'build':
+ chromeos_root_field = settings.fields['chromeos_root']
+ if chromeos_root_field:
+ chromeos_root = chromeos_root_field.GetString()
+ value = field.GetString()
+ autotest_field = settings.fields['autotest_path']
+ autotest_path = ''
+ if autotest_field.assigned:
+ autotest_path = autotest_field.GetString()
+ image_path, autotest_path = settings.GetXbuddyPath(value,
+ autotest_path,
+ board,
+ chromeos_root,
+ 'quiet')
+ res += '\t#actual_image: %s\n' % image_path
+ if not autotest_field.assigned:
+ res += '\t#actual_autotest_path: %s\n' % autotest_path
+
+ res += '}\n\n'
+
+ return res
+
+
+class ExperimentFileReader(object):
+ """Handle reading lines from an experiment file."""
+
+ def __init__(self, file_object):
+ self.file_object = file_object
+ self.current_line = None
+ self.current_line_no = 0
+
+ def CurrentLine(self, strip_comment=True):
+ """Return the next line from the file, without advancing the iterator."""
+ if strip_comment:
+ return self._StripComment(self.current_line)
+ return self.current_line
+
+ def NextLine(self, strip_comment=True):
+ """Advance the iterator and return the next line of the file."""
+ self.current_line_no += 1
+ self.current_line = self.file_object.readline()
+ return self.CurrentLine(strip_comment)
+
+ def _StripComment(self, line):
+ """Strip comments starting with # from a line."""
+ if '#' in line:
+ line = line[:line.find('#')] + line[-1]
+ return line
+
+ def LineNo(self):
+ """Return the current line number."""
+ return self.current_line_no
diff --git a/crosperf/experiment_file_unittest.py b/crosperf/experiment_file_unittest.py
new file mode 100755
index 00000000..ed1f176c
--- /dev/null
+++ b/crosperf/experiment_file_unittest.py
@@ -0,0 +1,135 @@
+#!/usr/bin/env python2
+
+# Copyright (c) 2011 The Chromium OS Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+"""The unittest of experiment_file."""
+from __future__ import print_function
+import StringIO
+import unittest
+from experiment_file import ExperimentFile
+
+EXPERIMENT_FILE_1 = """
+ board: x86-alex
+ remote: chromeos-alex3
+ perf_args: record -a -e cycles
+ benchmark: PageCycler {
+ iterations: 3
+ }
+
+ image1 {
+ chromeos_image: /usr/local/google/cros_image1.bin
+ }
+
+ image2 {
+ remote: chromeos-lumpy1
+ chromeos_image: /usr/local/google/cros_image2.bin
+ }
+ """
+
+EXPERIMENT_FILE_2 = """
+ board: x86-alex
+ remote: chromeos-alex3
+ iterations: 3
+
+ benchmark: PageCycler {
+ }
+
+ benchmark: AndroidBench {
+ iterations: 2
+ }
+
+ image1 {
+ chromeos_image:/usr/local/google/cros_image1.bin
+ }
+
+ image2 {
+ chromeos_image: /usr/local/google/cros_image2.bin
+ }
+ """
+
+EXPERIMENT_FILE_3 = """
+ board: x86-alex
+ remote: chromeos-alex3
+ iterations: 3
+
+ benchmark: PageCycler {
+ }
+
+ image1 {
+ chromeos_image:/usr/local/google/cros_image1.bin
+ }
+
+ image1 {
+ chromeos_image: /usr/local/google/cros_image2.bin
+ }
+ """
+
+OUTPUT_FILE = """board: x86-alex
+remote: chromeos-alex3
+perf_args: record -a -e cycles
+
+benchmark: PageCycler {
+\titerations: 3
+}
+
+label: image1 {
+\tremote: chromeos-alex3
+\tchromeos_image: /usr/local/google/cros_image1.bin
+}
+
+label: image2 {
+\tremote: chromeos-lumpy1
+\tchromeos_image: /usr/local/google/cros_image2.bin
+}\n\n"""
+
+
+class ExperimentFileTest(unittest.TestCase):
+ """The main class for Experiment File test."""
+ def testLoadExperimentFile1(self):
+ input_file = StringIO.StringIO(EXPERIMENT_FILE_1)
+ experiment_file = ExperimentFile(input_file)
+ global_settings = experiment_file.GetGlobalSettings()
+ self.assertEqual(global_settings.GetField('remote'), ['chromeos-alex3'])
+ self.assertEqual(
+ global_settings.GetField('perf_args'), 'record -a -e cycles')
+ benchmark_settings = experiment_file.GetSettings('benchmark')
+ self.assertEqual(len(benchmark_settings), 1)
+ self.assertEqual(benchmark_settings[0].name, 'PageCycler')
+ self.assertEqual(benchmark_settings[0].GetField('iterations'), 3)
+
+ label_settings = experiment_file.GetSettings('label')
+ self.assertEqual(len(label_settings), 2)
+ self.assertEqual(label_settings[0].name, 'image1')
+ self.assertEqual(label_settings[0].GetField('chromeos_image'),
+ '/usr/local/google/cros_image1.bin')
+ self.assertEqual(label_settings[1].GetField('remote'), ['chromeos-lumpy1'])
+ self.assertEqual(label_settings[0].GetField('remote'), ['chromeos-alex3'])
+
+ def testOverrideSetting(self):
+ input_file = StringIO.StringIO(EXPERIMENT_FILE_2)
+ experiment_file = ExperimentFile(input_file)
+ global_settings = experiment_file.GetGlobalSettings()
+ self.assertEqual(global_settings.GetField('remote'), ['chromeos-alex3'])
+
+ benchmark_settings = experiment_file.GetSettings('benchmark')
+ self.assertEqual(len(benchmark_settings), 2)
+ self.assertEqual(benchmark_settings[0].name, 'PageCycler')
+ self.assertEqual(benchmark_settings[0].GetField('iterations'), 3)
+ self.assertEqual(benchmark_settings[1].name, 'AndroidBench')
+ self.assertEqual(benchmark_settings[1].GetField('iterations'), 2)
+
+ def testDuplicateLabel(self):
+ input_file = StringIO.StringIO(EXPERIMENT_FILE_3)
+ self.assertRaises(Exception, ExperimentFile, input_file)
+
+ def testCanonicalize(self):
+ input_file = StringIO.StringIO(EXPERIMENT_FILE_1)
+ experiment_file = ExperimentFile(input_file)
+ res = experiment_file.Canonicalize()
+ self.assertEqual(res, OUTPUT_FILE)
+
+
+if __name__ == '__main__':
+ unittest.main()
diff --git a/crosperf/experiment_files/README b/crosperf/experiment_files/README
new file mode 100644
index 00000000..d9c96870
--- /dev/null
+++ b/crosperf/experiment_files/README
@@ -0,0 +1,34 @@
+To use these experiment files, replace the board, remote and images
+placeholders and run crosperf on them.
+
+Further information about crosperf:
+https://sites.google.com/a/google.com/chromeos-toolchain-team-home2/home/team-tools-and-scripts/crosperf-cros-image-performance-comparison-tool
+
+The final experiment file should look something like the following (but with
+different actual values for the fields):
+
+board: lumpy
+remote: 123.45.67.089
+
+# Add images you want to test:
+my_image {
+ chromeos_image: /usr/local/chromeos/src/build/images/lumpy/chromiumos_test_image.bin
+}
+
+vanilla_image {
+ chromeos_root: /usr/local/chromeos
+ build: lumpy-release/R35-5672.0.0
+}
+
+# Paste experiment benchmarks here. Example, I pasted
+# page_cycler_v2.morejs here.
+
+# This experiment just runs a short autotest which measures the performance of
+# Telemetry's page_cycler_v2.morejs. In addition, it profiles
+
+perg_args: record -e cycles
+
+benchmark: page_cycler_v2.morejs {
+ suite: telemetry_Crosperf
+ iterations: 1
+}
diff --git a/crosperf/experiment_files/aes_perf.exp b/crosperf/experiment_files/aes_perf.exp
new file mode 100644
index 00000000..063c74be
--- /dev/null
+++ b/crosperf/experiment_files/aes_perf.exp
@@ -0,0 +1,21 @@
+# This experiment just runs a short autotest which measures the performance of
+# aes encryption.
+#
+# You should replace all the placeholders, marked by angle-brackets, with the
+# appropriate actual values.
+
+name: aes_example
+board: <your-board-goes-here>
+
+# Note: You can specify multiple remotes, to run your tests in parallel on
+# multiple machines. e.g. "remote: test-machine-1.com test-machine2.come
+# test-machine3.com"
+remote: <your-remote-goes-here>
+
+benchmark: platform_AesThroughput {
+}
+
+# Replace the chromeos image below with the actual path to your test image.
+test_image {
+ chromeos_image:<path-to-your-chroot>/src/build/images/<board>/test-image/chromiumos_test_image.bin
+}
diff --git a/crosperf/experiment_files/bloat_perf.exp b/crosperf/experiment_files/bloat_perf.exp
new file mode 100644
index 00000000..14681778
--- /dev/null
+++ b/crosperf/experiment_files/bloat_perf.exp
@@ -0,0 +1,25 @@
+# This experiment just runs a short telemety autotest which measures
+# the performance of the page_cycler_v2.bloat test.
+#
+# You should replace all the placeholders, marked by angle-brackets, with the
+# appropriate actual values.
+
+name: bloat_perf_example
+board: <your-board-goes-here>
+
+# Note: You can specify multiple remotes, to run your tests in parallel on
+# multiple machines. e.g. "remote: test-machine-1.com test-machine2.come
+# test-machine3.com"
+remote: <your-remote-goes-here>
+
+perf_args: record -e cycles
+
+benchmark: page_cycler_v2.bloat {
+ suite: telemetry_Crosperf
+ iterations:1
+}
+
+# Replace the chromeos image below with the actual path to your test image.
+test_image {
+ chromeos_image:<path-to-your-chroot>/src/build/images/<board>/test-image/chromiumos_test_image.bin
+}
diff --git a/crosperf/experiment_files/morejs_perf.exp b/crosperf/experiment_files/morejs_perf.exp
new file mode 100644
index 00000000..ebc54753
--- /dev/null
+++ b/crosperf/experiment_files/morejs_perf.exp
@@ -0,0 +1,25 @@
+# This experiment just runs a short telemety autotest which measures
+# the performance of the page_cycler_v2.morejs test.
+#
+# You should replace all the placeholders, marked by angle-brackets, with the
+# appropriate actual values.
+
+name: morejs_perf_example
+board: <your-board-goes-here>
+
+# Note: You can specify multiple remotes, to run your tests in parallel on
+# multiple machines. e.g. "remote: test-machine-1.com test-machine2.come
+# test-machine3.com"
+remote: <your-remote-goes-here>
+
+perf_args: record -e cycles
+
+benchmark: page_cycler_v2.morejs {
+ suite: telemetry_Crosperf
+ iterations: 1
+}
+
+# Replace the chromeos image below with the actual path to your test image.
+test_image {
+ chromeos_image:<path-to-your-chroot>/src/build/images/<board>/test-image/chromiumos_test_image.bin
+}
diff --git a/crosperf/experiment_files/non-telemetry-tests.exp b/crosperf/experiment_files/non-telemetry-tests.exp
new file mode 100644
index 00000000..0ad1fe5c
--- /dev/null
+++ b/crosperf/experiment_files/non-telemetry-tests.exp
@@ -0,0 +1,31 @@
+# This example experiment file showa how to run some basic non-Telemetry
+# autotest tests.
+#
+# You should replace all the placeholders, marked by angle-brackets,
+# with the appropriate actual values.
+
+name: non_telemetry_tests_example
+board: <your-board-goes-here>
+
+# Note: You can specify multiple remotes, to run your tests in parallel on
+# multiple machines. e.g. "remote: test-machine-1.com test-machine2.come
+# test-machine3.com"
+remote: <your-remote-goes-here>
+
+benchmark: BootPerfServer {
+ test_name: BootPerfServer
+ iterations: 1
+}
+
+benchmark: bvt {
+ test_name: suite:bvt
+}
+
+benchmark: login_LoginSuccess {
+ test_name: login_LoginSuccess
+}
+
+# Replace the chromeos image below with the actual path to your test image.
+test_image {
+ chromeos_image:<path-to-your-chroot>/src/build/images/<board>/test-image/chromiumos_test_image.bin
+}
diff --git a/crosperf/experiment_files/official-image.exp b/crosperf/experiment_files/official-image.exp
new file mode 100644
index 00000000..bce7d6a3
--- /dev/null
+++ b/crosperf/experiment_files/official-image.exp
@@ -0,0 +1,41 @@
+# This example experiment file shows how to run a basic test, using
+# official images.
+#
+# You should replace all the placeholders, marked by angle-brackets,
+# with the appropriate actual values.
+
+name: official_image_example
+
+board: <your-board-goes-here>
+
+# Note: You can specify multiple remotes, to run your tests in parallel on
+# multiple machines. e.g. "remote: test-machine-1.com test-machine2.come
+# test-machine3.com"
+remote: <your-remote-goes-here>
+
+benchmark: canvasmark {
+ suite:telemetry_Crosperf
+ iterations: 1
+}
+
+
+# Replace <path-to-your-chroot-goes-here> with the actual directory path
+# to the top of your ChromimumOS chroot.
+first_official_image {
+ chromeos_root:<path-to-your-chroot-goes-here>
+ # Replace "latest-official" with the appropriate xbuddy version alias
+ # for the official image you want to use (see
+ # http://www.chromium.org/chromium-os/how-tos-and-troubleshooting/using-the-dev-server/xbuddy-for-devserver#TOC-XBuddy-Paths
+ # for xbuddy syntax).
+ build: latest-official
+}
+
+second_official_image {
+ # Replace <path-to-your-chroot-goes-here> with actual path.
+ chromeos_root:<path-to-your-chroot-goes-here>
+ # Replace "lumpy-release/R35-5672.0.0" with the official image you want
+ # to use.
+ build:lumpy-release/R35-5672.0.0
+}
+
+
diff --git a/crosperf/experiment_files/page_cycler.exp b/crosperf/experiment_files/page_cycler.exp
new file mode 100644
index 00000000..6cb6166d
--- /dev/null
+++ b/crosperf/experiment_files/page_cycler.exp
@@ -0,0 +1,28 @@
+# This experiment file shows how to run all of the Telemetry
+# page_cycler tests.
+#
+# You should replace all the placeholders, marked by angle-brackets,
+# with the appropriate actual values.
+
+name: all_page_cyclers_example
+board: <your-board-goes-here>
+
+# Note: You can specify multiple remotes, to run your tests in
+# parallel on multiple machines. e.g. "remote: test-machine-1.com
+# test-machine2.come test-machine3.com"
+
+remote: <your-remote-goes-here>
+
+
+# NOTE: all_pagecyclers is a Crosperf alias that will cause all of the
+# Telemetry page_cycler benchmark tests to be run.
+benchmark: all_pagecyclers {
+ suite: telemetry_Crosperf
+ iterations: 2
+}
+
+# Replace the chromeos image below with the actual path to your test
+# image.
+test_image {
+ chromeos_image:<path-to-your-chroot>/src/build/images/<board>/test-image/chromiumos_test_image.bin
+}
diff --git a/crosperf/experiment_files/page_cycler_perf.exp b/crosperf/experiment_files/page_cycler_perf.exp
new file mode 100644
index 00000000..cd661737
--- /dev/null
+++ b/crosperf/experiment_files/page_cycler_perf.exp
@@ -0,0 +1,45 @@
+# This experiment profiles some of the Telemetry page cycler tests,
+# uisng 'perf' on the remotes to get performance profiles.
+#
+# You should replace all the placeholders, marked by angle-brackets,
+# with the appropriate actual values.
+
+name: aes_example
+board: <your-board-goes-here>
+
+# Note: You can specify multiple remotes, to run your tests in parallel on
+# multiple machines. e.g. "remote: test-machine-1.com test-machine2.come
+# test-machine3.com"
+remote: <your-remote-goes-here>
+
+perf_args: record -e cycles,instructions
+
+benchmark: page_cycler_v2.morejs {
+ suite: telemetry_Crosperf
+ iterations: 10
+}
+
+benchmark: page_cycler_v2.bloat {
+ suite: telemetry_Crosperf
+ iterations: 10
+}
+
+benchmark: page_cycler_v2.dhtml {
+ suite: telemetry_Crosperf
+ iterations: 10
+}
+
+benchmark: page_cycler_v2.intl_ar_fa_he {
+ suite: telemetry_Crosperf
+ iterations: 10
+}
+
+benchmark: page_cycler_v2.moz {
+ suite: telemetry_Crosperf
+ iterations: 10
+}
+
+# Replace the chromeos image below with the actual path to your test image.
+test_image {
+ chromeos_image:<path-to-your-chroot>/src/build/images/<board>/test-image/chromiumos_test_image.bin
+}
diff --git a/crosperf/experiment_files/telemetry-crosperf-suites.exp b/crosperf/experiment_files/telemetry-crosperf-suites.exp
new file mode 100644
index 00000000..2caa588d
--- /dev/null
+++ b/crosperf/experiment_files/telemetry-crosperf-suites.exp
@@ -0,0 +1,54 @@
+# This example experiment file shows how to invoke sets of tests (a
+# set is a group of tests that can be invoked by a single alias).
+# There are currently three sets defined for crosperf_Telemetry:
+# all_perfv2, all_pagecyclers, and all_toolchain_perf.
+#
+# You should replace all the placeholders, marked by angle-brackets,
+# with the appropriate actual values.
+
+
+name: telemetry_crosperf_suites_example
+board: <your-board-goes-here>
+
+# Note: You can specify multiple remotes, to run your tests in parallel on
+# multiple machines. e.g. "remote: test-machine-1.com test-machine2.come
+# test-machine3.com"
+remote: <your-remote-goes-here>
+
+# The example below will run all the benchmarks in the perf_v2 suite.
+# The exact list of benchmarks that will be run can be seen in
+# crosperf/experiment_factory.py
+benchmark: all_perfv2 {
+ suite:telemetry_Crosperf
+ iterations: 2
+}
+
+# The example below will run all the Telemetry page_cycler benchmarks.
+# The exact list of benchmarks that will be run can be seen in
+# crosperf/experiment_factory.py
+benchmark: all_pagecyclers {
+ suite:telemetry_Crosperf
+ iterations: 1
+}
+
+# The example below will run all the Telemetry page_cycler benchmarks.
+# The exact list of benchmarks that will be run can be seen in
+# crosperf/experiment_factory.py
+benchmark: all_toolchain_perf {
+ suite:telemetry_Crosperf
+ iterations: 1
+}
+
+# Replace the chromeos image below with the actual path to your test image.
+test_image_1 {
+ chromeos_image:<path-to-your-chroot>/src/build/images/<board>/test-image/chromiumos_test_image.bin
+}
+
+# Replace the chromeos image below with the actual path to your second
+# test image (if desired).
+new_image {
+ chromeos_image:<path-to-your-other-chroot-goes-here>/src/build/images/<board-goes-here>/latest/chromiumos_test_image.bin
+}
+
+
+
diff --git a/crosperf/experiment_files/telemetry-crosperf-with-external-chrome-src.exp b/crosperf/experiment_files/telemetry-crosperf-with-external-chrome-src.exp
new file mode 100644
index 00000000..517c13f1
--- /dev/null
+++ b/crosperf/experiment_files/telemetry-crosperf-with-external-chrome-src.exp
@@ -0,0 +1,31 @@
+# This example experiment file showings how to specify an external
+# chrome source tree (rather than using the one inside the chroot).
+# The Telemetry tests will be run from the external Chrome source
+# tree.
+#
+# You should replace all the placeholders, marked by angle-brackets,
+# with the appropriate actual values.
+
+name: telemetry_crosperf_external_src_example
+
+board: <your-board-goes-here>
+
+# Note: You can specify multiple remotes, to run your tests in parallel on
+# multiple machines. e.g. "remote: test-machine-1.com test-machine2.come
+# test-machine3.com"
+remote: <your-remote-goes-here>
+
+benchmark: octane {
+ suite: telemetry_Crosperf
+ iterations: 1
+}
+
+# Replace the chromeos image below with the actual path to your test imnage.
+test_image {
+ chromeos_image:<path-to-your-chroot>/src/build/images/<board>/test-image/chromiumos_test_image.bin
+ # Replace '/usr/local/google/chrome-top' with the path to the
+ # top of your Chrome source tree. From that directory
+ # "./src/tools/perf/run_benchmark" should be a valid file path.
+ chrome_src:/usr/local/google/chrome-top
+}
+
diff --git a/crosperf/experiment_files/telemetry-crosperf-with-profiler.exp b/crosperf/experiment_files/telemetry-crosperf-with-profiler.exp
new file mode 100644
index 00000000..4c2b88fc
--- /dev/null
+++ b/crosperf/experiment_files/telemetry-crosperf-with-profiler.exp
@@ -0,0 +1,35 @@
+# This example experiment file shows how to invoke the profiler (via
+# the perf_args above the benchmark).
+#
+# You should replace all the placeholders, marked by angle-brackets,
+# with the appropriate actual values.
+
+
+name: telemetry_crosperf_profiler_example
+
+board: <your-board-goes-here>
+
+# Note: You can specify multiple remotes, to run your tests in parallel on
+# multiple machines. e.g. "remote: test-machine-1.com test-machine2.come
+# test-machine3.com"
+remote: <your-remote-goes-here>
+
+# Below is the line that causes the profiler to run. Currently the
+# only profiler option is running 'perf' on the remote machine. If
+# you want you can replace 'record' with 'stat'. You would also need
+# to change the other args accordingly. Crosperf automatically
+# inserts a '-a' if you use 'record' for you perf_args. The results
+# of the perf run (perf.data and perf.report files) will be available
+# with the rest of the Crosperf results.
+perf_args: record -e cycles,instructions
+
+benchmark: page_cycler_v2.dhtml {
+ suite: telemetry_Crosperf
+ iterations: 1
+}
+
+# Replace the chromeos image below with the actual path to your test imnage.
+test_image {
+ chromeos_image:<path-to-your-chroot>/src/build/images/<board>/test-image/chromiumos_test_image.bin
+}
+
diff --git a/crosperf/experiment_files/telemetry-crosperf.exp b/crosperf/experiment_files/telemetry-crosperf.exp
new file mode 100644
index 00000000..111001d4
--- /dev/null
+++ b/crosperf/experiment_files/telemetry-crosperf.exp
@@ -0,0 +1,32 @@
+# This example experiment file shows how to run a Telemetry test,
+# using autotest (via "suite: telemetry_Crosperf"). This runs the
+# Telemetry's "run_benchmark" for the specified test.
+#
+# You should replace all the placeholders, marked by angle-brackets,
+# with the appropriate actual values.
+
+name: basic_telemetry_crosperf_example
+board: <your-board-goes-here>
+
+# Note: You can specify multiple remotes, to run your tests in parallel on
+# multiple machines. e.g. "remote: test-machine-1.com test-machine2.come
+# test-machine3.com"
+remote: <your-remote-goes-here>
+
+# Replace "octane" below with the name of the Telemetry benchmark you
+# want to run.
+benchmark: octane {
+ suite: telemetry_Crosperf
+ iterations: 1
+}
+
+# NOTE: You must specify at least one image; you may specify more than one.
+# Replace <path-to-your-chroot-goes-here> and <board-goes-here> below.
+vanilla_image {
+ chromeos_image:<path-to-your-chroot>/src/build/images/<board>/vanilla-image/chromiumos_test_image.bin
+}
+
+# Replace the chromeos image below with the actual path to your test image.
+test_image {
+ chromeos_image:<path-to-your-chroot>/src/build/images/<board>/test-image/chromiumos_test_image.bin
+}
diff --git a/crosperf/experiment_files/telemetry-without-autotest.exp b/crosperf/experiment_files/telemetry-without-autotest.exp
new file mode 100644
index 00000000..ce3f207e
--- /dev/null
+++ b/crosperf/experiment_files/telemetry-without-autotest.exp
@@ -0,0 +1,31 @@
+# This example experiment file shows how to run a Telemetry test
+# directly, bypassing autotest. This runs the "run_measurement"
+# script. You need to supply both the name of the Telemetry test and
+# the page_set (via the test_args argument).
+#
+# You should replace all the placeholders, marked by angle-brackets,
+# with the appropriate actual values.
+
+name: telemetry_without_autotest_example
+board: <your-board-goes-here>
+
+# Note: You can specify multiple remotes, to run your tests in parallel on
+# multiple machines. e.g. "remote: test-machine-1.com test-machine2.come
+# test-machine3.com"
+remote: <your-remote-goes-here>
+
+# Replace "page_cycler_dhtml" below with the name of the Telemetry test
+# that you want run_measurement to run. Also replace the page set below
+# (in the test_args field) with the appropriate page set for your test.
+# N.B. The key to running telemetry without autotest is the 'suite' field.
+# Make sure your suite is 'telemtry', NOT 'telemetry_Crosperf'.
+benchmark: page_cycler_dhtml {
+ suite: telemetry
+ iterations: 1
+ test_args: ./page_sets/page_cycler/dhtml.json
+}
+
+# Replace the chromeos image below with the actual path to your test image.
+test_image {
+ chromeos_image:<path-to-your-chroot>/src/build/images/<board>/test-image/chromiumos_test_image.bin
+}
diff --git a/crosperf/experiment_files/telemetry_perf_perf b/crosperf/experiment_files/telemetry_perf_perf
new file mode 100755
index 00000000..acdf96d0
--- /dev/null
+++ b/crosperf/experiment_files/telemetry_perf_perf
@@ -0,0 +1,77 @@
+#!/bin/bash
+# Copyright 2016 The Chromium OS Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+#
+# Script for generating and running telemetry benchmarkes via crosperf with
+# different perf command lines in order to measure the impact of the perf
+# commands on performance. Crosperf cannot run the same benchmark multiple
+# times, so this script runs crosperf multpilpe times instead. Unfortunately,
+# this means you must compare the results yourself.
+#
+# Perf will run for the entire benchmark run, so results should be interpreted
+# in that context. i.e, if this shows a 3% overhead for a particular perf
+# command, that overhead would only be seen during the 2 seconds of measurement
+# during a Chrome OS Wide Profiling collection.
+set -e
+
+board=xxx #<you-board-here>
+remote=xxx #<your-remote-here>
+iterations=5
+chromeos_root=~/chromiumos
+chrome_src=~/chromium
+
+
+function GenerateExperiment() {
+ local perf_args="${1:+perf_args: $1}"
+ local track="$2" # stable, beta, dev
+
+ cat <<_EOF
+$perf_args
+benchmark: page_cycler_v2.typical_25 {
+ suite: telemetry_Crosperf
+}
+
+$track {
+ build: latest-$track
+}
+_EOF
+}
+
+function RunExperiment() {
+ local name="$1"
+ local perf_command="$2"
+ GenerateExperiment "$perf_command" "stable" > /tmp/crosperf.exp
+ ./crosperf /tmp/crosperf.exp \
+ --name telemetry_perf_perf_${name} \
+ --board="${board}" \
+ --remote="${remote}" \
+ --iterations="${iterations}" \
+ --chromeos_root="${chromeos_root}" \
+ --chrome_src="${chrome_src}" \
+ --rerun=true \
+ --use_file_locks=true \
+ --locks_dir=/tmp/crosperf.locks
+}
+
+if [ "$board" = "xxx" -o "$remote" = "xxx" ]; then
+ echo "Please set board and remote at the top of this script before running."
+ exit -1
+fi
+
+
+# Note that "-a" is automatically inserted in the perf command line.
+
+# Control: No profiling.
+RunExperiment 'control' ''
+# This is our baseline standard 'cycles' perf command.
+RunExperiment 'cycles.flat' \
+ 'record -e cycles -c 1000003'
+# Callgraph profiling.
+RunExperiment 'cycles.callgraph' \
+ 'record -g -e cycles -c 4000037'
+# Memory bandwidth profiling. As a perf stat command, we expect imperceptible
+# overhead.
+RunExperiment 'memory.bandwidth' \
+ 'stat -e cycles -e instructions -e uncore_imc/data_reads/ -e uncore_imc/data_writes/ -e cpu/event=0xD0,umask=0x11,name=MEM_UOPS_RETIRED-STLB_MISS_LOADS/ -e cpu/event=0xD0,umask=0x12,name=MEM_UOPS_RETIRED-STLB_MISS_STORES/'
+
diff --git a/crosperf/experiment_files/trybot-image.exp b/crosperf/experiment_files/trybot-image.exp
new file mode 100644
index 00000000..a261e08c
--- /dev/null
+++ b/crosperf/experiment_files/trybot-image.exp
@@ -0,0 +1,33 @@
+# This example experiment shows how to run a basic test, using a
+# (previously made) trybot image.
+
+#
+# You should replace all the placeholders, marked by angle-brackets,
+# with the appropriate actual values.
+
+name: trybot_example
+board: <your-board-goes-here>
+
+# Note: You can specify multiple remotes, to run your tests in parallel on
+# multiple machines. e.g. "remote: test-machine-1.com test-machine2.come
+# test-machine3.com"
+remote: <your-remote-goes-here>
+
+
+benchmark: canvasmark {
+ suite:telemetry_Crosperf
+ iterations: 1
+}
+
+
+# Replace <path-to-your-chroot-goes-here> with the actual directory path
+# to the top of your ChromimumOS chroot.
+trybot_image {
+ chromeos_root:<path-to-your-chroot-goes-here>
+ # Replace "trybot-lumpy-paladin/R34-5417.0.0-b1506" with the name of the
+ # trybot image that you wish to use. You can find this by going to the
+ # trybot build log, going to the 'Report' stage, and looking for 'Build
+ # Artifacts' at the bottom. You can extract the trybot image name from that.
+ build:trybot-lumpy-paladin/R34-5417.0.0-b1506
+}
+
diff --git a/crosperf/experiment_runner.py b/crosperf/experiment_runner.py
new file mode 100644
index 00000000..b30c8bd5
--- /dev/null
+++ b/crosperf/experiment_runner.py
@@ -0,0 +1,309 @@
+# Copyright (c) 2011 The Chromium OS Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+"""The experiment runner module."""
+from __future__ import print_function
+
+import getpass
+import os
+import shutil
+import time
+
+import afe_lock_machine
+import test_flag
+
+from cros_utils import command_executer
+from cros_utils import logger
+from cros_utils.email_sender import EmailSender
+from cros_utils.file_utils import FileUtils
+
+import config
+from experiment_status import ExperimentStatus
+from results_cache import CacheConditions
+from results_cache import ResultsCache
+from results_report import HTMLResultsReport
+from results_report import TextResultsReport
+from results_report import JSONResultsReport
+from schedv2 import Schedv2
+
+def _WriteJSONReportToFile(experiment, results_dir, json_report):
+ """Writes a JSON report to a file in results_dir."""
+ has_llvm = any('llvm' in l.compiler for l in experiment.labels)
+ compiler_string = 'llvm' if has_llvm else 'gcc'
+ board = experiment.labels[0].board
+ filename = 'report_%s_%s_%s.%s.json' % (
+ board, json_report.date, json_report.time.replace(':', '.'),
+ compiler_string)
+ fullname = os.path.join(results_dir, filename)
+ report_text = json_report.GetReport()
+ with open(fullname, 'w') as out_file:
+ out_file.write(report_text)
+
+
+class ExperimentRunner(object):
+ """ExperimentRunner Class."""
+
+ STATUS_TIME_DELAY = 30
+ THREAD_MONITOR_DELAY = 2
+
+ def __init__(self,
+ experiment,
+ json_report,
+ using_schedv2=False,
+ log=None,
+ cmd_exec=None):
+ self._experiment = experiment
+ self.l = log or logger.GetLogger(experiment.log_dir)
+ self._ce = cmd_exec or command_executer.GetCommandExecuter(self.l)
+ self._terminated = False
+ self.json_report = json_report
+ self.locked_machines = []
+ if experiment.log_level != 'verbose':
+ self.STATUS_TIME_DELAY = 10
+
+ # Setting this to True will use crosperf sched v2 (feature in progress).
+ self._using_schedv2 = using_schedv2
+
+ def _GetMachineList(self):
+ """Return a list of all requested machines.
+
+ Create a list of all the requested machines, both global requests and
+ label-specific requests, and return the list.
+ """
+ machines = self._experiment.remote
+ # All Label.remote is a sublist of experiment.remote.
+ for l in self._experiment.labels:
+ for r in l.remote:
+ assert r in machines
+ return machines
+
+ def _UpdateMachineList(self, locked_machines):
+ """Update machines lists to contain only locked machines.
+
+ Go through all the lists of requested machines, both global and
+ label-specific requests, and remove any machine that we were not
+ able to lock.
+
+ Args:
+ locked_machines: A list of the machines we successfully locked.
+ """
+ for m in self._experiment.remote:
+ if m not in locked_machines:
+ self._experiment.remote.remove(m)
+
+ for l in self._experiment.labels:
+ for m in l.remote:
+ if m not in locked_machines:
+ l.remote.remove(m)
+
+ def _LockAllMachines(self, experiment):
+ """Attempt to globally lock all of the machines requested for run.
+
+ This method will use the AFE server to globally lock all of the machines
+ requested for this crosperf run, to prevent any other crosperf runs from
+ being able to update/use the machines while this experiment is running.
+ """
+ if test_flag.GetTestMode():
+ self.locked_machines = self._GetMachineList()
+ self._experiment.locked_machines = self.locked_machines
+ else:
+ lock_mgr = afe_lock_machine.AFELockManager(
+ self._GetMachineList(),
+ '',
+ experiment.labels[0].chromeos_root,
+ None,
+ log=self.l,)
+ for m in lock_mgr.machines:
+ if not lock_mgr.MachineIsKnown(m):
+ lock_mgr.AddLocalMachine(m)
+ machine_states = lock_mgr.GetMachineStates('lock')
+ lock_mgr.CheckMachineLocks(machine_states, 'lock')
+ self.locked_machines = lock_mgr.UpdateMachines(True)
+ self._experiment.locked_machines = self.locked_machines
+ self._UpdateMachineList(self.locked_machines)
+ self._experiment.machine_manager.RemoveNonLockedMachines(
+ self.locked_machines)
+ if len(self.locked_machines) == 0:
+ raise RuntimeError('Unable to lock any machines.')
+
+ def _UnlockAllMachines(self, experiment):
+ """Attempt to globally unlock all of the machines requested for run.
+
+ The method will use the AFE server to globally unlock all of the machines
+ requested for this crosperf run.
+ """
+ if not self.locked_machines or test_flag.GetTestMode():
+ return
+
+ lock_mgr = afe_lock_machine.AFELockManager(
+ self.locked_machines,
+ '',
+ experiment.labels[0].chromeos_root,
+ None,
+ log=self.l,)
+ machine_states = lock_mgr.GetMachineStates('unlock')
+ lock_mgr.CheckMachineLocks(machine_states, 'unlock')
+ lock_mgr.UpdateMachines(False)
+
+ def _ClearCacheEntries(self, experiment):
+ for br in experiment.benchmark_runs:
+ cache = ResultsCache()
+ cache.Init(br.label.chromeos_image, br.label.chromeos_root,
+ br.benchmark.test_name, br.iteration, br.test_args,
+ br.profiler_args, br.machine_manager, br.machine,
+ br.label.board, br.cache_conditions, br._logger, br.log_level,
+ br.label, br.share_cache, br.benchmark.suite,
+ br.benchmark.show_all_results, br.benchmark.run_local)
+ cache_dir = cache.GetCacheDirForWrite()
+ if os.path.exists(cache_dir):
+ self.l.LogOutput('Removing cache dir: %s' % cache_dir)
+ shutil.rmtree(cache_dir)
+
+ def _Run(self, experiment):
+ try:
+ if not experiment.locks_dir:
+ self._LockAllMachines(experiment)
+ if self._using_schedv2:
+ schedv2 = Schedv2(experiment)
+ experiment.set_schedv2(schedv2)
+ if CacheConditions.FALSE in experiment.cache_conditions:
+ self._ClearCacheEntries(experiment)
+ status = ExperimentStatus(experiment)
+ experiment.Run()
+ last_status_time = 0
+ last_status_string = ''
+ try:
+ if experiment.log_level != 'verbose':
+ self.l.LogStartDots()
+ while not experiment.IsComplete():
+ if last_status_time + self.STATUS_TIME_DELAY < time.time():
+ last_status_time = time.time()
+ border = '=============================='
+ if experiment.log_level == 'verbose':
+ self.l.LogOutput(border)
+ self.l.LogOutput(status.GetProgressString())
+ self.l.LogOutput(status.GetStatusString())
+ self.l.LogOutput(border)
+ else:
+ current_status_string = status.GetStatusString()
+ if current_status_string != last_status_string:
+ self.l.LogEndDots()
+ self.l.LogOutput(border)
+ self.l.LogOutput(current_status_string)
+ self.l.LogOutput(border)
+ last_status_string = current_status_string
+ else:
+ self.l.LogAppendDot()
+ time.sleep(self.THREAD_MONITOR_DELAY)
+ except KeyboardInterrupt:
+ self._terminated = True
+ self.l.LogError('Ctrl-c pressed. Cleaning up...')
+ experiment.Terminate()
+ raise
+ except SystemExit:
+ self._terminated = True
+ self.l.LogError('Unexpected exit. Cleaning up...')
+ experiment.Terminate()
+ raise
+ finally:
+ if not experiment.locks_dir:
+ self._UnlockAllMachines(experiment)
+
+ def _PrintTable(self, experiment):
+ self.l.LogOutput(TextResultsReport.FromExperiment(experiment).GetReport())
+
+ def _Email(self, experiment):
+ # Only email by default if a new run was completed.
+ send_mail = False
+ for benchmark_run in experiment.benchmark_runs:
+ if not benchmark_run.cache_hit:
+ send_mail = True
+ break
+ if (not send_mail and not experiment.email_to or
+ config.GetConfig('no_email')):
+ return
+
+ label_names = []
+ for label in experiment.labels:
+ label_names.append(label.name)
+ subject = '%s: %s' % (experiment.name, ' vs. '.join(label_names))
+
+ text_report = TextResultsReport.FromExperiment(experiment, True).GetReport()
+ text_report += ('\nResults are stored in %s.\n' %
+ experiment.results_directory)
+ text_report = "<pre style='font-size: 13px'>%s</pre>" % text_report
+ html_report = HTMLResultsReport.FromExperiment(experiment).GetReport()
+ attachment = EmailSender.Attachment('report.html', html_report)
+ email_to = experiment.email_to or []
+ email_to.append(getpass.getuser())
+ EmailSender().SendEmail(email_to,
+ subject,
+ text_report,
+ attachments=[attachment],
+ msg_type='html')
+
+ def _StoreResults(self, experiment):
+ if self._terminated:
+ return
+ results_directory = experiment.results_directory
+ FileUtils().RmDir(results_directory)
+ FileUtils().MkDirP(results_directory)
+ self.l.LogOutput('Storing experiment file in %s.' % results_directory)
+ experiment_file_path = os.path.join(results_directory, 'experiment.exp')
+ FileUtils().WriteFile(experiment_file_path, experiment.experiment_file)
+
+ self.l.LogOutput('Storing results report in %s.' % results_directory)
+ results_table_path = os.path.join(results_directory, 'results.html')
+ report = HTMLResultsReport.FromExperiment(experiment).GetReport()
+ if self.json_report:
+ json_report = JSONResultsReport.FromExperiment(experiment,
+ json_args={'indent': 2})
+ _WriteJSONReportToFile(experiment, results_directory, json_report)
+
+ FileUtils().WriteFile(results_table_path, report)
+
+ self.l.LogOutput('Storing email message body in %s.' % results_directory)
+ msg_file_path = os.path.join(results_directory, 'msg_body.html')
+ text_report = TextResultsReport.FromExperiment(experiment, True).GetReport()
+ text_report += ('\nResults are stored in %s.\n' %
+ experiment.results_directory)
+ msg_body = "<pre style='font-size: 13px'>%s</pre>" % text_report
+ FileUtils().WriteFile(msg_file_path, msg_body)
+
+ self.l.LogOutput('Storing results of each benchmark run.')
+ for benchmark_run in experiment.benchmark_runs:
+ if benchmark_run.result:
+ benchmark_run_name = filter(str.isalnum, benchmark_run.name)
+ benchmark_run_path = os.path.join(results_directory, benchmark_run_name)
+ benchmark_run.result.CopyResultsTo(benchmark_run_path)
+ benchmark_run.result.CleanUp(benchmark_run.benchmark.rm_chroot_tmp)
+
+ def Run(self):
+ try:
+ self._Run(self._experiment)
+ finally:
+ # Always print the report at the end of the run.
+ self._PrintTable(self._experiment)
+ if not self._terminated:
+ self._StoreResults(self._experiment)
+ self._Email(self._experiment)
+
+
+class MockExperimentRunner(ExperimentRunner):
+ """Mocked ExperimentRunner for testing."""
+
+ def __init__(self, experiment, json_report):
+ super(MockExperimentRunner, self).__init__(experiment, json_report)
+
+ def _Run(self, experiment):
+ self.l.LogOutput("Would run the following experiment: '%s'." %
+ experiment.name)
+
+ def _PrintTable(self, experiment):
+ self.l.LogOutput('Would print the experiment table.')
+
+ def _Email(self, experiment):
+ self.l.LogOutput('Would send result email.')
+
+ def _StoreResults(self, experiment):
+ self.l.LogOutput('Would store the results.')
diff --git a/crosperf/experiment_runner_unittest.py b/crosperf/experiment_runner_unittest.py
new file mode 100755
index 00000000..38ac3874
--- /dev/null
+++ b/crosperf/experiment_runner_unittest.py
@@ -0,0 +1,450 @@
+#!/usr/bin/env python2
+#
+# Copyright (c) 2014 The Chromium OS Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+"""Tests for the experiment runner module."""
+
+from __future__ import print_function
+
+import StringIO
+import getpass
+import os
+
+import mock
+import unittest
+
+import experiment_runner
+import experiment_status
+import machine_manager
+import config
+import test_flag
+
+from experiment_factory import ExperimentFactory
+from experiment_file import ExperimentFile
+from results_cache import Result
+from results_report import HTMLResultsReport
+from results_report import TextResultsReport
+
+from cros_utils import command_executer
+from cros_utils.email_sender import EmailSender
+from cros_utils.file_utils import FileUtils
+
+EXPERIMENT_FILE_1 = """
+ board: parrot
+ remote: chromeos-parrot1.cros chromreos-parrot2.cros
+
+ benchmark: kraken {
+ suite: telemetry_Crosperf
+ iterations: 3
+ }
+
+ image1 {
+ chromeos_root: /usr/local/google/chromeos
+ chromeos_image: /usr/local/google/chromeos/src/build/images/parrot/latest/cros_image1.bin
+ }
+
+ image2 {
+ chromeos_image: /usr/local/google/chromeos/src/build/imaages/parrot/latest/cros_image2.bin
+ }
+ """
+
+# pylint: disable=protected-access
+
+
+class FakeLogger(object):
+ """Fake logger for tests."""
+
+ def __init__(self):
+ self.LogOutputCount = 0
+ self.LogErrorCount = 0
+ self.output_msgs = []
+ self.error_msgs = []
+ self.dot_count = 0
+ self.LogStartDotsCount = 0
+ self.LogEndDotsCount = 0
+ self.LogAppendDotCount = 0
+
+ def LogOutput(self, msg):
+ self.LogOutputCount += 1
+ self.output_msgs.append(msg)
+
+ def LogError(self, msg):
+ self.LogErrorCount += 1
+ self.error_msgs.append(msg)
+
+ def LogStartDots(self):
+ self.LogStartDotsCount += 1
+ self.dot_count += 1
+
+ def LogAppendDot(self):
+ self.LogAppendDotCount += 1
+ self.dot_count += 1
+
+ def LogEndDots(self):
+ self.LogEndDotsCount += 1
+
+ def Reset(self):
+ self.LogOutputCount = 0
+ self.LogErrorCount = 0
+ self.output_msgs = []
+ self.error_msgs = []
+ self.dot_count = 0
+ self.LogStartDotsCount = 0
+ self.LogEndDotsCount = 0
+ self.LogAppendDotCount = 0
+
+
+class ExperimentRunnerTest(unittest.TestCase):
+ """Test for experiment runner class."""
+
+ run_count = 0
+ is_complete_count = 0
+ mock_logger = FakeLogger()
+ mock_cmd_exec = mock.Mock(spec=command_executer.CommandExecuter)
+
+ def make_fake_experiment(self):
+ test_flag.SetTestMode(True)
+ experiment_file = ExperimentFile(StringIO.StringIO(EXPERIMENT_FILE_1))
+ experiment = ExperimentFactory().GetExperiment(experiment_file,
+ working_directory='',
+ log_dir='')
+ return experiment
+
+ @mock.patch.object(machine_manager.MachineManager, 'AddMachine')
+ @mock.patch.object(os.path, 'isfile')
+
+ # pylint: disable=arguments-differ
+ def setUp(self, mock_isfile, _mock_addmachine):
+ mock_isfile.return_value = True
+ self.exp = self.make_fake_experiment()
+
+ def test_init(self):
+ er = experiment_runner.ExperimentRunner(self.exp,
+ json_report=False,
+ using_schedv2=False,
+ log=self.mock_logger,
+ cmd_exec=self.mock_cmd_exec)
+ self.assertFalse(er._terminated)
+ self.assertEqual(er.STATUS_TIME_DELAY, 10)
+
+ self.exp.log_level = 'verbose'
+ er = experiment_runner.ExperimentRunner(self.exp,
+ json_report=False,
+ using_schedv2=False,
+ log=self.mock_logger,
+ cmd_exec=self.mock_cmd_exec)
+ self.assertEqual(er.STATUS_TIME_DELAY, 30)
+
+ @mock.patch.object(experiment_status.ExperimentStatus, 'GetStatusString')
+ @mock.patch.object(experiment_status.ExperimentStatus, 'GetProgressString')
+ def test_run(self, mock_progress_string, mock_status_string):
+
+ self.run_count = 0
+ self.is_complete_count = 0
+
+ def reset():
+ self.run_count = 0
+ self.is_complete_count = 0
+
+ def FakeRun():
+ self.run_count += 1
+ return 0
+
+ def FakeIsComplete():
+ self.is_complete_count += 1
+ if self.is_complete_count < 3:
+ return False
+ else:
+ return True
+
+ self.mock_logger.Reset()
+ self.exp.Run = FakeRun
+ self.exp.IsComplete = FakeIsComplete
+
+ # Test 1: log_level == "quiet"
+ self.exp.log_level = 'quiet'
+ er = experiment_runner.ExperimentRunner(self.exp,
+ json_report=False,
+ using_schedv2=False,
+ log=self.mock_logger,
+ cmd_exec=self.mock_cmd_exec)
+ er.STATUS_TIME_DELAY = 2
+ mock_status_string.return_value = 'Fake status string'
+ er._Run(self.exp)
+ self.assertEqual(self.run_count, 1)
+ self.assertTrue(self.is_complete_count > 0)
+ self.assertEqual(self.mock_logger.LogStartDotsCount, 1)
+ self.assertEqual(self.mock_logger.LogAppendDotCount, 1)
+ self.assertEqual(self.mock_logger.LogEndDotsCount, 1)
+ self.assertEqual(self.mock_logger.dot_count, 2)
+ self.assertEqual(mock_progress_string.call_count, 0)
+ self.assertEqual(mock_status_string.call_count, 2)
+ self.assertEqual(self.mock_logger.output_msgs,
+ ['==============================', 'Fake status string',
+ '=============================='])
+ self.assertEqual(len(self.mock_logger.error_msgs), 0)
+
+ # Test 2: log_level == "average"
+ self.mock_logger.Reset()
+ reset()
+ self.exp.log_level = 'average'
+ mock_status_string.call_count = 0
+ er = experiment_runner.ExperimentRunner(self.exp,
+ json_report=False,
+ using_schedv2=False,
+ log=self.mock_logger,
+ cmd_exec=self.mock_cmd_exec)
+ er.STATUS_TIME_DELAY = 2
+ mock_status_string.return_value = 'Fake status string'
+ er._Run(self.exp)
+ self.assertEqual(self.run_count, 1)
+ self.assertTrue(self.is_complete_count > 0)
+ self.assertEqual(self.mock_logger.LogStartDotsCount, 1)
+ self.assertEqual(self.mock_logger.LogAppendDotCount, 1)
+ self.assertEqual(self.mock_logger.LogEndDotsCount, 1)
+ self.assertEqual(self.mock_logger.dot_count, 2)
+ self.assertEqual(mock_progress_string.call_count, 0)
+ self.assertEqual(mock_status_string.call_count, 2)
+ self.assertEqual(self.mock_logger.output_msgs,
+ ['==============================', 'Fake status string',
+ '=============================='])
+ self.assertEqual(len(self.mock_logger.error_msgs), 0)
+
+ # Test 3: log_level == "verbose"
+ self.mock_logger.Reset()
+ reset()
+ self.exp.log_level = 'verbose'
+ mock_status_string.call_count = 0
+ er = experiment_runner.ExperimentRunner(self.exp,
+ json_report=False,
+ using_schedv2=False,
+ log=self.mock_logger,
+ cmd_exec=self.mock_cmd_exec)
+ er.STATUS_TIME_DELAY = 2
+ mock_status_string.return_value = 'Fake status string'
+ mock_progress_string.return_value = 'Fake progress string'
+ er._Run(self.exp)
+ self.assertEqual(self.run_count, 1)
+ self.assertTrue(self.is_complete_count > 0)
+ self.assertEqual(self.mock_logger.LogStartDotsCount, 0)
+ self.assertEqual(self.mock_logger.LogAppendDotCount, 0)
+ self.assertEqual(self.mock_logger.LogEndDotsCount, 0)
+ self.assertEqual(self.mock_logger.dot_count, 0)
+ self.assertEqual(mock_progress_string.call_count, 2)
+ self.assertEqual(mock_status_string.call_count, 2)
+ self.assertEqual(self.mock_logger.output_msgs,
+ ['==============================', 'Fake progress string',
+ 'Fake status string', '==============================',
+ '==============================', 'Fake progress string',
+ 'Fake status string', '=============================='])
+ self.assertEqual(len(self.mock_logger.error_msgs), 0)
+
+ @mock.patch.object(TextResultsReport, 'GetReport')
+ def test_print_table(self, mock_report):
+ self.mock_logger.Reset()
+ mock_report.return_value = 'This is a fake experiment report.'
+ er = experiment_runner.ExperimentRunner(self.exp,
+ json_report=False,
+ using_schedv2=False,
+ log=self.mock_logger,
+ cmd_exec=self.mock_cmd_exec)
+ er._PrintTable(self.exp)
+ self.assertEqual(mock_report.call_count, 1)
+ self.assertEqual(self.mock_logger.output_msgs,
+ ['This is a fake experiment report.'])
+
+ @mock.patch.object(HTMLResultsReport, 'GetReport')
+ @mock.patch.object(TextResultsReport, 'GetReport')
+ @mock.patch.object(EmailSender, 'Attachment')
+ @mock.patch.object(EmailSender, 'SendEmail')
+ @mock.patch.object(getpass, 'getuser')
+ def test_email(self, mock_getuser, mock_emailer, mock_attachment,
+ mock_text_report, mock_html_report):
+
+ mock_getuser.return_value = 'john.smith@google.com'
+ mock_text_report.return_value = 'This is a fake text report.'
+ mock_html_report.return_value = 'This is a fake html report.'
+
+ self.mock_logger.Reset()
+ config.AddConfig('no_email', True)
+ self.exp.email_to = ['jane.doe@google.com']
+ er = experiment_runner.ExperimentRunner(self.exp,
+ json_report=False,
+ using_schedv2=False,
+ log=self.mock_logger,
+ cmd_exec=self.mock_cmd_exec)
+ # Test 1. Config:no_email; exp.email_to set ==> no email sent
+ er._Email(self.exp)
+ self.assertEqual(mock_getuser.call_count, 0)
+ self.assertEqual(mock_emailer.call_count, 0)
+ self.assertEqual(mock_attachment.call_count, 0)
+ self.assertEqual(mock_text_report.call_count, 0)
+ self.assertEqual(mock_html_report.call_count, 0)
+
+ # Test 2. Config: email. exp.email_to set; cache hit. => send email
+ self.mock_logger.Reset()
+ config.AddConfig('no_email', False)
+ for r in self.exp.benchmark_runs:
+ r.cache_hit = True
+ er._Email(self.exp)
+ self.assertEqual(mock_getuser.call_count, 1)
+ self.assertEqual(mock_emailer.call_count, 1)
+ self.assertEqual(mock_attachment.call_count, 1)
+ self.assertEqual(mock_text_report.call_count, 1)
+ self.assertEqual(mock_html_report.call_count, 1)
+ self.assertEqual(len(mock_emailer.call_args), 2)
+ self.assertEqual(mock_emailer.call_args[0],
+ (['jane.doe@google.com', 'john.smith@google.com'],
+ ': image1 vs. image2',
+ "<pre style='font-size: 13px'>This is a fake text "
+ 'report.\nResults are stored in _results.\n</pre>'))
+ self.assertTrue(type(mock_emailer.call_args[1]) is dict)
+ self.assertEqual(len(mock_emailer.call_args[1]), 2)
+ self.assertTrue('attachments' in mock_emailer.call_args[1].keys())
+ self.assertEqual(mock_emailer.call_args[1]['msg_type'], 'html')
+
+ mock_attachment.assert_called_with('report.html',
+ 'This is a fake html report.')
+
+ # Test 3. Config: email; exp.mail_to set; no cache hit. => send email
+ self.mock_logger.Reset()
+ mock_getuser.reset_mock()
+ mock_emailer.reset_mock()
+ mock_attachment.reset_mock()
+ mock_text_report.reset_mock()
+ mock_html_report.reset_mock()
+ config.AddConfig('no_email', False)
+ for r in self.exp.benchmark_runs:
+ r.cache_hit = False
+ er._Email(self.exp)
+ self.assertEqual(mock_getuser.call_count, 1)
+ self.assertEqual(mock_emailer.call_count, 1)
+ self.assertEqual(mock_attachment.call_count, 1)
+ self.assertEqual(mock_text_report.call_count, 1)
+ self.assertEqual(mock_html_report.call_count, 1)
+ self.assertEqual(len(mock_emailer.call_args), 2)
+ self.assertEqual(mock_emailer.call_args[0],
+ (['jane.doe@google.com', 'john.smith@google.com',
+ 'john.smith@google.com'], ': image1 vs. image2',
+ "<pre style='font-size: 13px'>This is a fake text "
+ 'report.\nResults are stored in _results.\n</pre>'))
+ self.assertTrue(type(mock_emailer.call_args[1]) is dict)
+ self.assertEqual(len(mock_emailer.call_args[1]), 2)
+ self.assertTrue('attachments' in mock_emailer.call_args[1].keys())
+ self.assertEqual(mock_emailer.call_args[1]['msg_type'], 'html')
+
+ mock_attachment.assert_called_with('report.html',
+ 'This is a fake html report.')
+
+ # Test 4. Config: email; exp.mail_to = None; no cache hit. => send email
+ self.mock_logger.Reset()
+ mock_getuser.reset_mock()
+ mock_emailer.reset_mock()
+ mock_attachment.reset_mock()
+ mock_text_report.reset_mock()
+ mock_html_report.reset_mock()
+ self.exp.email_to = []
+ er._Email(self.exp)
+ self.assertEqual(mock_getuser.call_count, 1)
+ self.assertEqual(mock_emailer.call_count, 1)
+ self.assertEqual(mock_attachment.call_count, 1)
+ self.assertEqual(mock_text_report.call_count, 1)
+ self.assertEqual(mock_html_report.call_count, 1)
+ self.assertEqual(len(mock_emailer.call_args), 2)
+ self.assertEqual(mock_emailer.call_args[0],
+ (['john.smith@google.com'], ': image1 vs. image2',
+ "<pre style='font-size: 13px'>This is a fake text "
+ 'report.\nResults are stored in _results.\n</pre>'))
+ self.assertTrue(type(mock_emailer.call_args[1]) is dict)
+ self.assertEqual(len(mock_emailer.call_args[1]), 2)
+ self.assertTrue('attachments' in mock_emailer.call_args[1].keys())
+ self.assertEqual(mock_emailer.call_args[1]['msg_type'], 'html')
+
+ mock_attachment.assert_called_with('report.html',
+ 'This is a fake html report.')
+
+ # Test 5. Config: email; exp.mail_to = None; cache hit => no email sent
+ self.mock_logger.Reset()
+ mock_getuser.reset_mock()
+ mock_emailer.reset_mock()
+ mock_attachment.reset_mock()
+ mock_text_report.reset_mock()
+ mock_html_report.reset_mock()
+ for r in self.exp.benchmark_runs:
+ r.cache_hit = True
+ er._Email(self.exp)
+ self.assertEqual(mock_getuser.call_count, 0)
+ self.assertEqual(mock_emailer.call_count, 0)
+ self.assertEqual(mock_attachment.call_count, 0)
+ self.assertEqual(mock_text_report.call_count, 0)
+ self.assertEqual(mock_html_report.call_count, 0)
+
+ @mock.patch.object(FileUtils, 'RmDir')
+ @mock.patch.object(FileUtils, 'MkDirP')
+ @mock.patch.object(FileUtils, 'WriteFile')
+ @mock.patch.object(HTMLResultsReport, 'FromExperiment')
+ @mock.patch.object(TextResultsReport, 'FromExperiment')
+ @mock.patch.object(Result, 'CopyResultsTo')
+ @mock.patch.object(Result, 'CleanUp')
+ def test_store_results(self, mock_cleanup, mock_copy, _mock_text_report,
+ mock_report, mock_writefile, mock_mkdir, mock_rmdir):
+
+ self.mock_logger.Reset()
+ self.exp.results_directory = '/usr/local/crosperf-results'
+ bench_run = self.exp.benchmark_runs[5]
+ bench_path = '/usr/local/crosperf-results/' + filter(str.isalnum,
+ bench_run.name)
+ self.assertEqual(len(self.exp.benchmark_runs), 6)
+
+ er = experiment_runner.ExperimentRunner(self.exp,
+ json_report=False,
+ using_schedv2=False,
+ log=self.mock_logger,
+ cmd_exec=self.mock_cmd_exec)
+
+ # Test 1. Make sure nothing is done if _terminated is true.
+ er._terminated = True
+ er._StoreResults(self.exp)
+ self.assertEqual(mock_cleanup.call_count, 0)
+ self.assertEqual(mock_copy.call_count, 0)
+ self.assertEqual(mock_report.call_count, 0)
+ self.assertEqual(mock_writefile.call_count, 0)
+ self.assertEqual(mock_mkdir.call_count, 0)
+ self.assertEqual(mock_rmdir.call_count, 0)
+ self.assertEqual(self.mock_logger.LogOutputCount, 0)
+
+ # Test 2. _terminated is false; everything works properly.
+ fake_result = Result(self.mock_logger, self.exp.labels[0], 'average',
+ 'daisy1')
+ for r in self.exp.benchmark_runs:
+ r.result = fake_result
+ er._terminated = False
+ er._StoreResults(self.exp)
+ self.assertEqual(mock_cleanup.call_count, 6)
+ mock_cleanup.called_with(bench_run.benchmark.rm_chroot_tmp)
+ self.assertEqual(mock_copy.call_count, 6)
+ mock_copy.called_with(bench_path)
+ self.assertEqual(mock_writefile.call_count, 3)
+ self.assertEqual(len(mock_writefile.call_args_list), 3)
+ first_args = mock_writefile.call_args_list[0]
+ second_args = mock_writefile.call_args_list[1]
+ self.assertEqual(first_args[0][0],
+ '/usr/local/crosperf-results/experiment.exp')
+ self.assertEqual(second_args[0][0],
+ '/usr/local/crosperf-results/results.html')
+ self.assertEqual(mock_mkdir.call_count, 1)
+ mock_mkdir.called_with('/usr/local/crosperf-results')
+ self.assertEqual(mock_rmdir.call_count, 1)
+ mock_rmdir.called_with('/usr/local/crosperf-results')
+ self.assertEqual(self.mock_logger.LogOutputCount, 4)
+ self.assertEqual(
+ self.mock_logger.output_msgs,
+ ['Storing experiment file in /usr/local/crosperf-results.',
+ 'Storing results report in /usr/local/crosperf-results.',
+ 'Storing email message body in /usr/local/crosperf-results.',
+ 'Storing results of each benchmark run.'])
+
+
+if __name__ == '__main__':
+ unittest.main()
diff --git a/crosperf/experiment_status.py b/crosperf/experiment_status.py
new file mode 100644
index 00000000..627db99e
--- /dev/null
+++ b/crosperf/experiment_status.py
@@ -0,0 +1,145 @@
+# Copyright 2011 The Chromium OS Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+"""The class to show the banner."""
+
+from __future__ import print_function
+
+import collections
+import datetime
+import time
+
+
+class ExperimentStatus(object):
+ """The status class."""
+
+ def __init__(self, experiment):
+ self.experiment = experiment
+ self.num_total = len(self.experiment.benchmark_runs)
+ self.completed = 0
+ self.new_job_start_time = time.time()
+ self.log_level = experiment.log_level
+
+ def _GetProgressBar(self, num_complete, num_total):
+ ret = 'Done: %s%%' % int(100.0 * num_complete / num_total)
+ bar_length = 50
+ done_char = '>'
+ undone_char = ' '
+ num_complete_chars = bar_length * num_complete / num_total
+ num_undone_chars = bar_length - num_complete_chars
+ ret += ' [%s%s]' % (num_complete_chars * done_char,
+ num_undone_chars * undone_char)
+ return ret
+
+ def GetProgressString(self):
+ """Get the elapsed_time, ETA."""
+ current_time = time.time()
+ if self.experiment.start_time:
+ elapsed_time = current_time - self.experiment.start_time
+ else:
+ elapsed_time = 0
+ try:
+ if self.completed != self.experiment.num_complete:
+ self.completed = self.experiment.num_complete
+ self.new_job_start_time = current_time
+ time_completed_jobs = (elapsed_time -
+ (current_time - self.new_job_start_time))
+ # eta is calculated as:
+ # ETA = (num_jobs_not_yet_started * estimated_time_per_job)
+ # + time_left_for_current_job
+ #
+ # where
+ # num_jobs_not_yet_started = (num_total - num_complete - 1)
+ #
+ # estimated_time_per_job = time_completed_jobs / num_run_complete
+ #
+ # time_left_for_current_job = estimated_time_per_job -
+ # time_spent_so_far_on_current_job
+ #
+ # The biggest problem with this calculation is its assumption that
+ # all jobs have roughly the same running time (blatantly false!).
+ #
+ # ETA can come out negative if the time spent on the current job is
+ # greater than the estimated time per job (e.g. you're running the
+ # first long job, after a series of short jobs). For now, if that
+ # happens, we set the ETA to "Unknown."
+ #
+ eta_seconds = (float(self.num_total - self.experiment.num_complete - 1) *
+ time_completed_jobs / self.experiment.num_run_complete +
+ (time_completed_jobs / self.experiment.num_run_complete -
+ (current_time - self.new_job_start_time)))
+
+ eta_seconds = int(eta_seconds)
+ if eta_seconds > 0:
+ eta = datetime.timedelta(seconds=eta_seconds)
+ else:
+ eta = 'Unknown'
+ except ZeroDivisionError:
+ eta = 'Unknown'
+ strings = []
+ strings.append('Current time: %s Elapsed: %s ETA: %s' %
+ (datetime.datetime.now(),
+ datetime.timedelta(seconds=int(elapsed_time)), eta))
+ strings.append(self._GetProgressBar(self.experiment.num_complete,
+ self.num_total))
+ return '\n'.join(strings)
+
+ def GetStatusString(self):
+ """Get the status string of all the benchmark_runs."""
+ status_bins = collections.defaultdict(list)
+ for benchmark_run in self.experiment.benchmark_runs:
+ status_bins[benchmark_run.timeline.GetLastEvent()].append(benchmark_run)
+
+ status_strings = []
+ for key, val in status_bins.iteritems():
+ if key == 'RUNNING':
+ get_description = self._GetNamesAndIterations
+ else:
+ get_description = self._GetCompactNamesAndIterations
+ status_strings.append('%s: %s' % (key, get_description(val)))
+
+ thread_status = ''
+ thread_status_format = 'Thread Status: \n{}\n'
+ if (self.experiment.schedv2() is None and
+ self.experiment.log_level == 'verbose'):
+ # Add the machine manager status.
+ thread_status = thread_status_format.format(
+ self.experiment.machine_manager.AsString())
+ elif self.experiment.schedv2():
+ # In schedv2 mode, we always print out thread status.
+ thread_status = thread_status_format.format(self.experiment.schedv2(
+ ).threads_status_as_string())
+
+ result = '{}{}'.format(thread_status, '\n'.join(status_strings))
+
+ return result
+
+ def _GetNamesAndIterations(self, benchmark_runs):
+ strings = []
+ t = time.time()
+ for benchmark_run in benchmark_runs:
+ t_last = benchmark_run.timeline.GetLastEventTime()
+ elapsed = str(datetime.timedelta(seconds=int(t - t_last)))
+ strings.append("'{0}' {1}".format(benchmark_run.name, elapsed))
+ return ' %s (%s)' % (len(strings), ', '.join(strings))
+
+ def _GetCompactNamesAndIterations(self, benchmark_runs):
+ grouped_benchmarks = collections.defaultdict(list)
+ for benchmark_run in benchmark_runs:
+ grouped_benchmarks[benchmark_run.label.name].append(benchmark_run)
+
+ output_segs = []
+ for label_name, label_runs in grouped_benchmarks.iteritems():
+ strings = []
+ benchmark_iterations = collections.defaultdict(list)
+ for benchmark_run in label_runs:
+ assert benchmark_run.label.name == label_name
+ benchmark_name = benchmark_run.benchmark.name
+ benchmark_iterations[benchmark_name].append(benchmark_run.iteration)
+ for key, val in benchmark_iterations.iteritems():
+ val.sort()
+ iterations = ','.join(map(str, val))
+ strings.append('{} [{}]'.format(key, iterations))
+ output_segs.append(' ' + label_name + ': ' + ', '.join(strings) + '\n')
+
+ return ' %s \n%s' % (len(benchmark_runs), ''.join(output_segs))
diff --git a/crosperf/field.py b/crosperf/field.py
new file mode 100644
index 00000000..bc92e2cc
--- /dev/null
+++ b/crosperf/field.py
@@ -0,0 +1,152 @@
+# Copyright 2011 Google Inc. All Rights Reserved.
+"""Module to represent a Field in an experiment file."""
+
+
+class Field(object):
+ """Class representing a Field in an experiment file."""
+
+ def __init__(self, name, required, default, inheritable, description):
+ self.name = name
+ self.required = required
+ self.assigned = False
+ self.default = default
+ self._value = default
+ self.inheritable = inheritable
+ self.description = description
+
+ def Set(self, value, parse=True):
+ if parse:
+ self._value = self._Parse(value)
+ else:
+ self._value = value
+ self.assigned = True
+
+ def Append(self, value):
+ self._value += self._Parse(value)
+ self.assigned = True
+
+ def _Parse(self, value):
+ return value
+
+ def Get(self):
+ return self._value
+
+ def GetString(self):
+ return str(self._value)
+
+
+class TextField(Field):
+ """Class of text field."""
+
+ def __init__(self,
+ name,
+ required=False,
+ default='',
+ inheritable=False,
+ description=''):
+ super(TextField, self).__init__(name, required, default, inheritable,
+ description)
+
+ def _Parse(self, value):
+ return str(value)
+
+
+class BooleanField(Field):
+ """Class of boolean field."""
+
+ def __init__(self,
+ name,
+ required=False,
+ default=False,
+ inheritable=False,
+ description=''):
+ super(BooleanField, self).__init__(name, required, default, inheritable,
+ description)
+
+ def _Parse(self, value):
+ if value.lower() == 'true':
+ return True
+ elif value.lower() == 'false':
+ return False
+ raise TypeError("Invalid value for '%s'. Must be true or false." %
+ self.name)
+
+
+class IntegerField(Field):
+ """Class of integer field."""
+
+ def __init__(self,
+ name,
+ required=False,
+ default=0,
+ inheritable=False,
+ description=''):
+ super(IntegerField, self).__init__(name, required, default, inheritable,
+ description)
+
+ def _Parse(self, value):
+ return int(value)
+
+
+class FloatField(Field):
+ """Class of float field."""
+
+ def __init__(self,
+ name,
+ required=False,
+ default=0,
+ inheritable=False,
+ description=''):
+ super(FloatField, self).__init__(name, required, default, inheritable,
+ description)
+
+ def _Parse(self, value):
+ return float(value)
+
+
+class ListField(Field):
+ """Class of list field."""
+
+ def __init__(self,
+ name,
+ required=False,
+ default=None,
+ inheritable=False,
+ description=''):
+ super(ListField, self).__init__(name, required, default, inheritable,
+ description)
+
+ def _Parse(self, value):
+ return value.split()
+
+ def GetString(self):
+ return ' '.join(self._value)
+
+ def Append(self, value):
+ v = self._Parse(value)
+ if not self._value:
+ self._value = v
+ else:
+ self._value += v
+ self.assigned = True
+
+
+class EnumField(Field):
+ """Class of enum field."""
+
+ def __init__(self,
+ name,
+ options,
+ required=False,
+ default='',
+ inheritable=False,
+ description=''):
+ super(EnumField, self).__init__(name, required, default, inheritable,
+ description)
+ self.options = options
+
+ def _Parse(self, value):
+ if value not in self.options:
+ raise TypeError("Invalid enum value for field '%s'. Must be one of (%s)" %
+ (self.name, ', '.join(self.options)))
+ return str(value)
diff --git a/crosperf/flag_test_unittest.py b/crosperf/flag_test_unittest.py
new file mode 100755
index 00000000..9f2a7136
--- /dev/null
+++ b/crosperf/flag_test_unittest.py
@@ -0,0 +1,41 @@
+#!/usr/bin/env python2
+#
+# Copyright 2014 Google Inc. All Rights Reserved.
+
+"""The unittest of flags."""
+
+from __future__ import print_function
+import test_flag
+
+import unittest
+
+
+class FlagTestCase(unittest.TestCase):
+ """The unittest class."""
+ def test_test_flag(self):
+ # Verify that test_flag.is_test exists, that it is a list,
+ # and that it contains 1 element.
+ self.assertTrue(type(test_flag.is_test) is list)
+ self.assertEqual(len(test_flag.is_test), 1)
+
+ # Verify that the getting the flag works and that the flag
+ # contains False, its starting value.
+ save_flag = test_flag.GetTestMode()
+ self.assertFalse(save_flag)
+
+ # Verify that setting the flat to True, then getting it, works.
+ test_flag.SetTestMode(True)
+ self.assertTrue(test_flag.GetTestMode())
+
+ # Verify that setting the flag to False, then getting it, works.
+ test_flag.SetTestMode(save_flag)
+ self.assertFalse(test_flag.GetTestMode())
+
+ # Verify that test_flag.is_test still exists, that it still is a
+ # list, and that it still contains 1 element.
+ self.assertTrue(type(test_flag.is_test) is list)
+ self.assertEqual(len(test_flag.is_test), 1)
+
+
+if __name__ == '__main__':
+ unittest.main()
diff --git a/crosperf/generate_report.py b/crosperf/generate_report.py
new file mode 100755
index 00000000..e0add994
--- /dev/null
+++ b/crosperf/generate_report.py
@@ -0,0 +1,277 @@
+#!/usr/bin/env python2
+#
+# Copyright 2016 The Chromium OS Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+"""Given a specially-formatted JSON object, generates results report(s).
+
+The JSON object should look like:
+{"data": BenchmarkData, "platforms": BenchmarkPlatforms}
+
+BenchmarkPlatforms is a [str], each of which names a platform the benchmark
+ was run on (e.g. peppy, shamu, ...). Note that the order of this list is
+ related with the order of items in BenchmarkData.
+
+BenchmarkData is a {str: [PlatformData]}. The str is the name of the benchmark,
+and a PlatformData is a set of data for a given platform. There must be one
+PlatformData for each benchmark, for each element in BenchmarkPlatforms.
+
+A PlatformData is a [{str: float}], where each str names a metric we recorded,
+and the float is the value for that metric. Each element is considered to be
+the metrics collected from an independent run of this benchmark. NOTE: Each
+PlatformData is expected to have a "retval" key, with the return value of
+the benchmark. If the benchmark is successful, said return value should be 0.
+Otherwise, this will break some of our JSON functionality.
+
+Putting it all together, a JSON object will end up looking like:
+ { "platforms": ["peppy", "peppy-new-crosstool"],
+ "data": {
+ "bench_draw_line": [
+ [{"time (ms)": 1.321, "memory (mb)": 128.1, "retval": 0},
+ {"time (ms)": 1.920, "memory (mb)": 128.4, "retval": 0}],
+ [{"time (ms)": 1.221, "memory (mb)": 124.3, "retval": 0},
+ {"time (ms)": 1.423, "memory (mb)": 123.9, "retval": 0}]
+ ]
+ }
+ }
+
+Which says that we ran a benchmark on platforms named peppy, and
+ peppy-new-crosstool.
+We ran one benchmark, named bench_draw_line.
+It was run twice on each platform.
+Peppy's runs took 1.321ms and 1.920ms, while peppy-new-crosstool's took 1.221ms
+ and 1.423ms. None of the runs failed to complete.
+"""
+
+from __future__ import division
+from __future__ import print_function
+
+import argparse
+import functools
+import json
+import os
+import sys
+import traceback
+
+from results_report import BenchmarkResults
+from results_report import HTMLResultsReport
+from results_report import JSONResultsReport
+from results_report import TextResultsReport
+
+
+def CountBenchmarks(benchmark_runs):
+ """Counts the number of iterations for each benchmark in benchmark_runs."""
+ # Example input for benchmark_runs:
+ # {"bench": [[run1, run2, run3], [run1, run2, run3, run4]]}
+ def _MaxLen(results):
+ return 0 if not results else max(len(r) for r in results)
+ return [(name, _MaxLen(results))
+ for name, results in benchmark_runs.iteritems()]
+
+
+def CutResultsInPlace(results, max_keys=50, complain_on_update=True):
+ """Limits the given benchmark results to max_keys keys in-place.
+
+ This takes the `data` field from the benchmark input, and mutates each
+ benchmark run to contain `max_keys` elements (ignoring special elements, like
+ "retval"). At the moment, it just selects the first `max_keys` keyvals,
+ alphabetically.
+
+ If complain_on_update is true, this will print a message noting that a
+ truncation occurred.
+
+ This returns the `results` object that was passed in, for convenience.
+
+ e.g.
+ >>> benchmark_data = {
+ ... "bench_draw_line": [
+ ... [{"time (ms)": 1.321, "memory (mb)": 128.1, "retval": 0},
+ ... {"time (ms)": 1.920, "memory (mb)": 128.4, "retval": 0}],
+ ... [{"time (ms)": 1.221, "memory (mb)": 124.3, "retval": 0},
+ ... {"time (ms)": 1.423, "memory (mb)": 123.9, "retval": 0}]
+ ... ]
+ ... }
+ >>> CutResultsInPlace(benchmark_data, max_keys=1, complain_on_update=False)
+ {
+ 'bench_draw_line': [
+ [{'memory (mb)': 128.1, 'retval': 0},
+ {'memory (mb)': 128.4, 'retval': 0}],
+ [{'memory (mb)': 124.3, 'retval': 0},
+ {'memory (mb)': 123.9, 'retval': 0}]
+ ]
+ }
+ """
+ actually_updated = False
+ for bench_results in results.itervalues():
+ for platform_results in bench_results:
+ for i, result in enumerate(platform_results):
+ # Keep the keys that come earliest when sorted alphabetically.
+ # Forcing alphabetical order is arbitrary, but necessary; otherwise,
+ # the keyvals we'd emit would depend on our iteration order through a
+ # map.
+ removable_keys = sorted(k for k in result if k != 'retval')
+ retained_keys = removable_keys[:max_keys]
+ platform_results[i] = {k: result[k] for k in retained_keys}
+ # retval needs to be passed through all of the time.
+ retval = result.get('retval')
+ if retval is not None:
+ platform_results[i]['retval'] = retval
+ actually_updated = actually_updated or \
+ len(retained_keys) != len(removable_keys)
+
+ if actually_updated and complain_on_update:
+ print("Warning: Some benchmark keyvals have been truncated.",
+ file=sys.stderr)
+ return results
+
+
+def _ConvertToASCII(obj):
+ """Convert an object loaded from JSON to ASCII; JSON gives us unicode."""
+
+ # Using something like `object_hook` is insufficient, since it only fires on
+ # actual JSON objects. `encoding` fails, too, since the default decoder always
+ # uses unicode() to decode strings.
+ if isinstance(obj, unicode):
+ return str(obj)
+ if isinstance(obj, dict):
+ return {_ConvertToASCII(k): _ConvertToASCII(v) for k, v in obj.iteritems()}
+ if isinstance(obj, list):
+ return [_ConvertToASCII(v) for v in obj]
+ return obj
+
+
+def _PositiveInt(s):
+ i = int(s)
+ if i < 0:
+ raise argparse.ArgumentTypeError('%d is not a positive integer.' % (i, ))
+ return i
+
+
+def _AccumulateActions(args):
+ """Given program arguments, determines what actions we want to run.
+
+ Returns [(ResultsReportCtor, str)], where ResultsReportCtor can construct a
+ ResultsReport, and the str is the file extension for the given report.
+ """
+ results = []
+ # The order of these is arbitrary.
+ if args.json:
+ results.append((JSONResultsReport, 'json'))
+ if args.text:
+ results.append((TextResultsReport, 'txt'))
+ if args.email:
+ email_ctor = functools.partial(TextResultsReport, email=True)
+ results.append((email_ctor, 'email'))
+ # We emit HTML if nothing else was specified.
+ if args.html or not results:
+ results.append((HTMLResultsReport, 'html'))
+ return results
+
+
+# Note: get_contents is a function, because it may be expensive (generating some
+# HTML reports takes O(seconds) on my machine, depending on the size of the
+# input data).
+def WriteFile(output_prefix, extension, get_contents, overwrite, verbose):
+ """Writes `contents` to a file named "${output_prefix}.${extension}".
+
+ get_contents should be a zero-args function that returns a string (of the
+ contents to write).
+ If output_prefix == '-', this writes to stdout.
+ If overwrite is False, this will not overwrite files.
+ """
+ if output_prefix == '-':
+ if verbose:
+ print('Writing %s report to stdout' % (extension, ), file=sys.stderr)
+ sys.stdout.write(get_contents())
+ return
+
+ file_name = '%s.%s' % (output_prefix, extension)
+ if not overwrite and os.path.exists(file_name):
+ raise IOError('Refusing to write %s -- it already exists' % (file_name, ))
+
+ with open(file_name, 'w') as out_file:
+ if verbose:
+ print('Writing %s report to %s' % (extension, file_name), file=sys.stderr)
+ out_file.write(get_contents())
+
+
+def RunActions(actions, benchmark_results, output_prefix, overwrite, verbose):
+ """Runs `actions`, returning True if all succeeded."""
+ failed = False
+
+ report_ctor = None # Make the linter happy
+ for report_ctor, extension in actions:
+ try:
+ get_contents = lambda: report_ctor(benchmark_results).GetReport()
+ WriteFile(output_prefix, extension, get_contents, overwrite, verbose)
+ except Exception:
+ # Complain and move along; we may have more actions that might complete
+ # successfully.
+ failed = True
+ traceback.print_exc()
+ return not failed
+
+
+def PickInputFile(input_name):
+ """Given program arguments, returns file to read for benchmark input."""
+ return sys.stdin if input_name == '-' else open(input_name)
+
+
+def _NoPerfReport(_label_name, _benchmark_name, _benchmark_iteration):
+ return {}
+
+
+def _ParseArgs(argv):
+ parser = argparse.ArgumentParser(description='Turns JSON into results '
+ 'report(s).')
+ parser.add_argument('-v', '--verbose', action='store_true',
+ help='Be a tiny bit more verbose.')
+ parser.add_argument('-f', '--force', action='store_true',
+ help='Overwrite existing results files.')
+ parser.add_argument('-o', '--output', default='report', type=str,
+ help='Prefix of the output filename (default: report). '
+ '- means stdout.')
+ parser.add_argument('-i', '--input', required=True, type=str,
+ help='Where to read the JSON from. - means stdin.')
+ parser.add_argument('-l', '--statistic-limit', default=0, type=_PositiveInt,
+ help='The maximum number of benchmark statistics to '
+ 'display from a single run. 0 implies unlimited.')
+ parser.add_argument('--json', action='store_true',
+ help='Output a JSON report.')
+ parser.add_argument('--text', action='store_true',
+ help='Output a text report.')
+ parser.add_argument('--email', action='store_true',
+ help='Output a text report suitable for email.')
+ parser.add_argument('--html', action='store_true',
+ help='Output an HTML report (this is the default if no '
+ 'other output format is specified).')
+ return parser.parse_args(argv)
+
+
+def Main(argv):
+ args = _ParseArgs(argv)
+ # JSON likes to load UTF-8; our results reporter *really* doesn't like
+ # UTF-8.
+ with PickInputFile(args.input) as in_file:
+ raw_results = _ConvertToASCII(json.load(in_file))
+
+ platform_names = raw_results['platforms']
+ results = raw_results['data']
+ if args.statistic_limit:
+ results = CutResultsInPlace(results, max_keys=args.statistic_limit)
+ benches = CountBenchmarks(results)
+ # In crosperf, a label is essentially a platform+configuration. So, a name of
+ # a label and a name of a platform are equivalent for our purposes.
+ bench_results = BenchmarkResults(label_names=platform_names,
+ benchmark_names_and_iterations=benches,
+ run_keyvals=results,
+ read_perf_report=_NoPerfReport)
+ actions = _AccumulateActions(args)
+ ok = RunActions(actions, bench_results, args.output, args.force,
+ args.verbose)
+ return 0 if ok else 1
+
+
+if __name__ == '__main__':
+ sys.exit(Main(sys.argv[1:]))
diff --git a/crosperf/generate_report_unittest.py b/crosperf/generate_report_unittest.py
new file mode 100755
index 00000000..a5d00635
--- /dev/null
+++ b/crosperf/generate_report_unittest.py
@@ -0,0 +1,146 @@
+#!/usr/bin/env python2
+#
+# Copyright 2016 The Chromium OS Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+"""Test for generate_report.py."""
+
+from __future__ import division
+from __future__ import print_function
+
+from StringIO import StringIO
+
+import copy
+import json
+import mock
+import test_flag
+import unittest
+
+import generate_report
+import results_report
+
+class _ContextualStringIO(StringIO):
+ """StringIO that can be used in `with` statements."""
+ def __init__(self, *args):
+ StringIO.__init__(self, *args)
+
+ def __enter__(self):
+ return self
+
+ def __exit__(self, _type, _value, _traceback):
+ pass
+
+
+class GenerateReportTests(unittest.TestCase):
+ """Tests for generate_report.py."""
+ def testCountBenchmarks(self):
+ runs = {
+ 'foo': [[{}, {}, {}], [{}, {}, {}, {}]],
+ 'bar': [],
+ 'baz': [[], [{}], [{}, {}, {}]]
+ }
+ results = generate_report.CountBenchmarks(runs)
+ expected_results = [('foo', 4), ('bar', 0), ('baz', 3)]
+ self.assertItemsEqual(expected_results, results)
+
+ def testCutResultsInPlace(self):
+ bench_data = {
+ 'foo': [[{'a': 1, 'b': 2, 'c': 3}, {'a': 3, 'b': 2.5, 'c': 1}]],
+ 'bar': [[{'d': 11, 'e': 12, 'f': 13}]],
+ 'baz': [[{'g': 12, 'h': 13}]],
+ 'qux': [[{'i': 11}]],
+ }
+ original_bench_data = copy.deepcopy(bench_data)
+
+ max_keys = 2
+ results = generate_report.CutResultsInPlace(bench_data, max_keys=max_keys,
+ complain_on_update=False)
+ # Cuts should be in-place.
+ self.assertIs(results, bench_data)
+ self.assertItemsEqual(original_bench_data.keys(), bench_data.keys())
+ for bench_name, original_runs in original_bench_data.iteritems():
+ bench_runs = bench_data[bench_name]
+ self.assertEquals(len(original_runs), len(bench_runs))
+ # Order of these sub-lists shouldn't have changed.
+ for original_list, new_list in zip(original_runs, bench_runs):
+ self.assertEqual(len(original_list), len(new_list))
+ for original_keyvals, sub_keyvals in zip(original_list, new_list):
+ # sub_keyvals must be a subset of original_keyvals
+ self.assertDictContainsSubset(sub_keyvals, original_keyvals)
+
+
+ def testCutResultsInPlaceLeavesRetval(self):
+ bench_data = {
+ 'foo': [[{'retval': 0, 'a': 1}]],
+ 'bar': [[{'retval': 1}]],
+ 'baz': [[{'RETVAL': 1}]],
+ }
+ results = generate_report.CutResultsInPlace(bench_data, max_keys=0,
+ complain_on_update=False)
+ # Just reach into results assuming we know it otherwise outputs things
+ # sanely. If it doesn't, testCutResultsInPlace should give an indication as
+ # to what, exactly, is broken.
+ self.assertEqual(results['foo'][0][0].items(), [('retval', 0)])
+ self.assertEqual(results['bar'][0][0].items(), [('retval', 1)])
+ self.assertEqual(results['baz'][0][0].items(), [])
+
+ def _RunMainWithInput(self, args, input_obj):
+ assert '-i' not in args
+ args += ['-i', '-']
+ input_buf = _ContextualStringIO(json.dumps(input_obj))
+ with mock.patch('generate_report.PickInputFile', return_value=input_buf) \
+ as patched_pick:
+ result = generate_report.Main(args)
+ patched_pick.assert_called_once_with('-')
+ return result
+
+ @mock.patch('generate_report.RunActions')
+ def testMain(self, mock_run_actions):
+ # Email is left out because it's a bit more difficult to test, and it'll be
+ # mildly obvious if it's failing.
+ args = ['--json', '--html', '--text']
+ return_code = self._RunMainWithInput(args, {'platforms': [], 'data': {}})
+ self.assertEqual(0, return_code)
+ self.assertEqual(mock_run_actions.call_count, 1)
+ ctors = [ctor for ctor, _ in mock_run_actions.call_args[0][0]]
+ self.assertItemsEqual(ctors, [
+ results_report.JSONResultsReport,
+ results_report.TextResultsReport,
+ results_report.HTMLResultsReport,
+ ])
+
+ @mock.patch('generate_report.RunActions')
+ def testMainSelectsHTMLIfNoReportsGiven(self, mock_run_actions):
+ args = []
+ return_code = self._RunMainWithInput(args, {'platforms': [], 'data': {}})
+ self.assertEqual(0, return_code)
+ self.assertEqual(mock_run_actions.call_count, 1)
+ ctors = [ctor for ctor, _ in mock_run_actions.call_args[0][0]]
+ self.assertItemsEqual(ctors, [results_report.HTMLResultsReport])
+
+ # We only mock print_exc so we don't have exception info printed to stdout.
+ @mock.patch('generate_report.WriteFile', side_effect=ValueError('Oh noo'))
+ @mock.patch('traceback.print_exc')
+ def testRunActionsRunsAllActionsRegardlessOfExceptions(self, mock_print_exc,
+ mock_write_file):
+ actions = [(None, 'json'), (None, 'html'), (None, 'text'), (None, 'email')]
+ output_prefix = '-'
+ ok = generate_report.RunActions(actions, {}, output_prefix, overwrite=False,
+ verbose=False)
+ self.assertFalse(ok)
+ self.assertEqual(mock_write_file.call_count, len(actions))
+ self.assertEqual(mock_print_exc.call_count, len(actions))
+
+ @mock.patch('generate_report.WriteFile')
+ def testRunActionsReturnsTrueIfAllActionsSucceed(self, mock_write_file):
+ actions = [(None, 'json'), (None, 'html'), (None, 'text')]
+ output_prefix = '-'
+ ok = generate_report.RunActions(actions, {}, output_prefix, overwrite=False,
+ verbose=False)
+ self.assertEqual(mock_write_file.call_count, len(actions))
+ self.assertTrue(ok)
+
+
+if __name__ == '__main__':
+ test_flag.SetTestMode(True)
+ unittest.main()
diff --git a/crosperf/help.py b/crosperf/help.py
new file mode 100644
index 00000000..61ed8ea2
--- /dev/null
+++ b/crosperf/help.py
@@ -0,0 +1,114 @@
+# Copyright 2011 Google Inc. All Rights Reserved.
+"""Module to print help message."""
+
+from __future__ import print_function
+
+import sys
+import textwrap
+from settings_factory import BenchmarkSettings
+from settings_factory import GlobalSettings
+from settings_factory import LabelSettings
+
+
+class Help(object):
+ """The help class."""
+
+ def GetUsage(self):
+ return """%s [OPTIONS] EXPERIMENT_FILE""" % (sys.argv[0])
+
+ def _WrapLine(self, line):
+ return '\n'.join(textwrap.wrap(line, 80))
+
+ def _GetFieldDescriptions(self, fields):
+ res = ''
+ for field_name in fields:
+ field = fields[field_name]
+ res += 'Field:\t\t%s\n' % field.name
+ res += self._WrapLine('Description:\t%s' % field.description) + '\n'
+ res += 'Type:\t\t%s\n' % type(field).__name__.replace('Field', '')
+ res += 'Required:\t%s\n' % field.required
+ if field.default:
+ res += 'Default:\t%s\n' % field.default
+ res += '\n'
+ return res
+
+ def GetHelp(self):
+ global_fields = self._GetFieldDescriptions(GlobalSettings('').fields)
+ benchmark_fields = self._GetFieldDescriptions(BenchmarkSettings('').fields)
+ label_fields = self._GetFieldDescriptions(LabelSettings('').fields)
+
+ return """%s is a script for running performance experiments on
+ChromeOS. It allows one to run ChromeOS Autotest benchmarks over
+several images and compare the results to determine whether there
+is a performance difference.
+
+Comparing several images using %s is referred to as running an
+"experiment". An "experiment file" is a configuration file which holds
+all the information that describes the experiment and how it should be
+run. An example of a simple experiment file is below:
+
+--------------------------------- test.exp ---------------------------------
+name: my_experiment
+board: x86-alex
+remote: chromeos2-row1-rack4-host7.cros 172.18.122.132
+
+benchmark: page_cycler_v2.morejs {
+ suite: telemetry_Crosperf
+ iterations: 3
+}
+
+my_first_image {
+ chromeos_image: /usr/local/chromeos-1/chromiumos_image.bin
+}
+
+my_second_image {
+ chromeos_image: /usr/local/chromeos-2/chromiumos_image.bin
+}
+----------------------------------------------------------------------------
+
+This experiment file names the experiment "my_experiment". It will be
+run on the board x86-alex. Benchmarks will be run using two remote
+devices, one is a device specified by a hostname and the other is a
+device specified by it's IP address. Benchmarks will be run in
+parallel across these devices. There is currently no way to specify
+which benchmark will run on each device.
+
+We define one "benchmark" that will be run, page_cycler_v2.morejs. This
+benchmark has two "fields", one which specifies that this benchmark is
+part of the telemetry_Crosperf suite (this is the common way to run
+most Telemetry benchmarks), and the other which specifies how many
+iterations it will run for.
+
+We specify one or more "labels" or images which will be compared. The
+page_cycler_v2.morejs benchmark will be run on each of these images 3
+times and a result table will be output which compares them for all
+the images specified.
+
+The full list of fields that can be specified in the experiment file
+are as follows:
+=================
+Global Fields
+=================
+%s
+=================
+Benchmark Fields
+=================
+%s
+=================
+Label Fields
+=================
+%s
+
+Note that global fields are overidden by label or benchmark fields, if
+they can be specified in both places. Fields that are specified as
+arguments override fields specified in experiment files.
+
+%s is invoked by passing it a path to an experiment file,
+as well as any options (in addition to those specified in the
+experiment file). Crosperf runs the experiment and caches the results
+(or reads the previously cached experiment results out of the cache),
+generates and displays a report based on the run, and emails the
+report to the user. If the results were all read out of the cache,
+then by default no email is generated.
+""" % (sys.argv[0], sys.argv[0], global_fields, benchmark_fields, label_fields,
+ sys.argv[0])
diff --git a/crosperf/image_checksummer.py b/crosperf/image_checksummer.py
new file mode 100644
index 00000000..e330084e
--- /dev/null
+++ b/crosperf/image_checksummer.py
@@ -0,0 +1,69 @@
+# Copyright 2011 Google Inc. All Rights Reserved.
+"""Compute image checksum."""
+
+from __future__ import print_function
+
+import os
+import threading
+
+from cros_utils import logger
+from cros_utils.file_utils import FileUtils
+
+
+class ImageChecksummer(object):
+ """Compute image checksum."""
+
+ class PerImageChecksummer(object):
+ """Compute checksum for an image."""
+
+ def __init__(self, label, log_level):
+ self._lock = threading.Lock()
+ self.label = label
+ self._checksum = None
+ self.log_level = log_level
+
+ def Checksum(self):
+ with self._lock:
+ if not self._checksum:
+ logger.GetLogger().LogOutput("Acquiring checksum for '%s'." %
+ self.label.name)
+ self._checksum = None
+ if self.label.image_type != 'local':
+ raise RuntimeError('Called Checksum on non-local image!')
+ if self.label.chromeos_image:
+ if os.path.exists(self.label.chromeos_image):
+ self._checksum = FileUtils().Md5File(
+ self.label.chromeos_image, log_level=self.log_level)
+ logger.GetLogger().LogOutput('Computed checksum is '
+ ': %s' % self._checksum)
+ if not self._checksum:
+ raise RuntimeError('Checksum computing error.')
+ logger.GetLogger().LogOutput('Checksum is: %s' % self._checksum)
+ return self._checksum
+
+ _instance = None
+ _lock = threading.Lock()
+ _per_image_checksummers = {}
+
+ def __new__(cls, *args, **kwargs):
+ with cls._lock:
+ if not cls._instance:
+ cls._instance = super(ImageChecksummer, cls).__new__(cls, *args,
+ **kwargs)
+ return cls._instance
+
+ def Checksum(self, label, log_level):
+ if label.image_type != 'local':
+ raise RuntimeError('Attempt to call Checksum on non-local image.')
+ with self._lock:
+ if label.name not in self._per_image_checksummers:
+ self._per_image_checksummers[label.name] = (
+ ImageChecksummer.PerImageChecksummer(label, log_level))
+ checksummer = self._per_image_checksummers[label.name]
+
+ try:
+ return checksummer.Checksum()
+ except:
+ logger.GetLogger().LogError('Could not compute checksum of image in label'
+ " '%s'." % label.name)
+ raise
diff --git a/crosperf/label.py b/crosperf/label.py
new file mode 100644
index 00000000..d993c15c
--- /dev/null
+++ b/crosperf/label.py
@@ -0,0 +1,159 @@
+# Copyright (c) 2013 The Chromium OS Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+"""The label of benchamrks."""
+
+from __future__ import print_function
+
+import hashlib
+import os
+
+from image_checksummer import ImageChecksummer
+from cros_utils.file_utils import FileUtils
+from cros_utils import misc
+
+
+class Label(object):
+ """The label class."""
+
+ def __init__(self,
+ name,
+ chromeos_image,
+ autotest_path,
+ chromeos_root,
+ board,
+ remote,
+ image_args,
+ cache_dir,
+ cache_only,
+ log_level,
+ compiler,
+ chrome_src=None):
+
+ self.image_type = self._GetImageType(chromeos_image)
+
+ # Expand ~
+ chromeos_root = os.path.expanduser(chromeos_root)
+ if self.image_type == 'local':
+ chromeos_image = os.path.expanduser(chromeos_image)
+
+ self.name = name
+ self.chromeos_image = chromeos_image
+ self.autotest_path = autotest_path
+ self.board = board
+ self.remote = remote
+ self.image_args = image_args
+ self.cache_dir = cache_dir
+ self.cache_only = cache_only
+ self.log_level = log_level
+ self.chrome_version = ''
+ self.compiler = compiler
+
+ if not chromeos_root:
+ if self.image_type == 'local':
+ chromeos_root = FileUtils().ChromeOSRootFromImage(chromeos_image)
+ if not chromeos_root:
+ raise RuntimeError("No ChromeOS root given for label '%s' and could "
+ "not determine one from image path: '%s'." %
+ (name, chromeos_image))
+ else:
+ chromeos_root = FileUtils().CanonicalizeChromeOSRoot(chromeos_root)
+ if not chromeos_root:
+ raise RuntimeError("Invalid ChromeOS root given for label '%s': '%s'." %
+ (name, chromeos_root))
+
+ self.chromeos_root = chromeos_root
+ if not chrome_src:
+ self.chrome_src = os.path.join(
+ self.chromeos_root, '.cache/distfiles/target/chrome-src-internal')
+ if not os.path.exists(self.chrome_src):
+ self.chrome_src = os.path.join(self.chromeos_root,
+ '.cache/distfiles/target/chrome-src')
+ else:
+ chromeos_src = misc.CanonicalizePath(chrome_src)
+ if not chromeos_src:
+ raise RuntimeError("Invalid Chrome src given for label '%s': '%s'." %
+ (name, chrome_src))
+ self.chrome_src = chromeos_src
+
+ self._SetupChecksum()
+
+ def _SetupChecksum(self):
+ """Compute label checksum only once."""
+
+ self.checksum = None
+ if self.image_type == 'local':
+ self.checksum = ImageChecksummer().Checksum(self, self.log_level)
+ elif self.image_type == 'trybot':
+ self.checksum = hashlib.md5(self.chromeos_image).hexdigest()
+
+ def _GetImageType(self, chromeos_image):
+ image_type = None
+ if chromeos_image.find('xbuddy://') < 0:
+ image_type = 'local'
+ elif chromeos_image.find('trybot') >= 0:
+ image_type = 'trybot'
+ else:
+ image_type = 'official'
+ return image_type
+
+ def __hash__(self):
+ """Label objects are used in a map, so provide "hash" and "equal"."""
+
+ return hash(self.name)
+
+ def __eq__(self, other):
+ """Label objects are used in a map, so provide "hash" and "equal"."""
+
+ return isinstance(other, Label) and other.name == self.name
+
+ def __str__(self):
+ """For better debugging."""
+
+ return 'label[name="{}"]'.format(self.name)
+
+
+class MockLabel(object):
+ """The mock label class."""
+
+ def __init__(self,
+ name,
+ chromeos_image,
+ autotest_path,
+ chromeos_root,
+ board,
+ remote,
+ image_args,
+ cache_dir,
+ cache_only,
+ log_level,
+ compiler,
+ chrome_src=None):
+ self.name = name
+ self.chromeos_image = chromeos_image
+ self.autotest_path = autotest_path
+ self.board = board
+ self.remote = remote
+ self.cache_dir = cache_dir
+ self.cache_only = cache_only
+ if not chromeos_root:
+ self.chromeos_root = '/tmp/chromeos_root'
+ else:
+ self.chromeos_root = chromeos_root
+ self.image_args = image_args
+ self.chrome_src = chrome_src
+ self.image_type = self._GetImageType(chromeos_image)
+ self.checksum = ''
+ self.log_level = log_level
+ self.compiler = compiler
+ self.chrome_version = 'Fake Chrome Version 50'
+
+ def _GetImageType(self, chromeos_image):
+ image_type = None
+ if chromeos_image.find('xbuddy://') < 0:
+ image_type = 'local'
+ elif chromeos_image.find('trybot') >= 0:
+ image_type = 'trybot'
+ else:
+ image_type = 'official'
+ return image_type
diff --git a/crosperf/machine_image_manager.py b/crosperf/machine_image_manager.py
new file mode 100644
index 00000000..3cc464bb
--- /dev/null
+++ b/crosperf/machine_image_manager.py
@@ -0,0 +1,304 @@
+
+# Copyright 2015 The Chromium OS Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+"""MachineImageManager allocates images to duts."""
+
+class MachineImageManager(object):
+ """Management of allocating images to duts.
+
+ * Data structure we have -
+
+ duts_ - list of duts, for each duts, we assume the following 2 properties
+ exist - label_ (the current label the duts_ carries or None, if it has an
+ alien image) and name (a string)
+
+ labels_ - a list of labels, for each label, we assume these properties
+ exist - remote (a set/vector/list of dut names (not dut object), to each
+ of which this image is compatible), remote could be none, which means
+ universal compatible.
+
+ label_duts_ - for each label, we maintain a list of duts, onto which the
+ label is imaged. Note this is an array of lists. Each element of each list
+ is an integer which is dut oridnal. We access this array using label
+ ordinal.
+
+ allocate_log_ - a list of allocation record. For example, if we allocate
+ l1 to d1, then l2 to d2, then allocate_log_ would be [(1, 1), (2, 2)].
+ This is used for debug/log, etc. All tuples in the list are integer pairs
+ (label_ordinal, dut_ordinal).
+
+ n_duts_ - number of duts.
+
+ n_labels_ - number of labels.
+
+ dut_name_ordinal_ - mapping from dut name (a string) to an integer,
+ starting from 0. So that duts_[dut_name_ordinal_[a_dut.name]]= a_dut.
+
+ * Problem abstraction -
+
+ Assume we have the following matrix - label X machine (row X col). A 'X'
+ in (i, j) in the matrix means machine and lable is not compatible, or that
+ we cannot image li to Mj.
+
+ M1 M2 M3
+ L1 X
+
+ L2 X
+
+ L3 X X
+
+ Now that we'll try to find a way to fill Ys in the matrix so that -
+
+ a) - each row at least get a Y, this ensures that each label get imaged
+ at least once, an apparent prerequiste.
+
+ b) - each column get at most N Ys. This make sure we can successfully
+ finish all tests by re-image each machine at most N times. That being
+ said, we could *OPTIONALLY* reimage some machines more than N times to
+ *accelerate* the test speed.
+
+ How to choose initial N for b) -
+ If number of duts (nd) is equal to or more than that of labels (nl), we
+ start from N == 1. Else we start from N = nl - nd + 1.
+
+ We will begin the search with pre-defined N, if we fail to find such a
+ solution for such N, we increase N by 1 and continue the search till we
+ get N == nl, at this case we fails.
+
+ Such a solution ensures minimal number of reimages.
+
+ * Solution representation
+
+ The solution will be placed inside the matrix, like below
+
+ M1 M2 M3 M4
+ L1 X X Y
+
+ L2 Y X
+
+ L3 X Y X
+
+ * Allocation algorithm
+
+ When Mj asks for a image, we check column j, pick the first cell that
+ contains a 'Y', and mark the cell '_'. If no such 'Y' exists (like M4 in
+ the above solution matrix), we just pick an image that the minimal reimage
+ number.
+
+ After allocate for M3
+ M1 M2 M3 M4
+ L1 X X _
+
+ L2 Y X
+
+ L3 X Y X
+
+ After allocate for M4
+ M1 M2 M3 M4
+ L1 X X _
+
+ L2 Y X _
+
+ L3 X Y X
+
+ After allocate for M2
+ M1 M2 M3 M4
+ L1 X X _
+
+ L2 Y X _
+
+ L3 X _ X
+
+ After allocate for M1
+ M1 M2 M3 M4
+ L1 X X _
+
+ L2 _ X _
+
+ L3 X _ X
+
+ After allocate for M2
+ M1 M2 M3 M4
+ L1 X X _
+
+ L2 _ _ X _
+
+ L3 X _ X
+
+ If we try to allocate for M1 or M2 or M3 again, we get None.
+
+ * Special / common case to handle seperately
+
+ We have only 1 dut or if we have only 1 label, that's simple enough.
+
+ """
+
+ def __init__(self, labels, duts):
+ self.labels_ = labels
+ self.duts_ = duts
+ self.n_labels_ = len(labels)
+ self.n_duts_ = len(duts)
+ self.dut_name_ordinal_ = dict()
+ for idx, dut in enumerate(self.duts_):
+ self.dut_name_ordinal_[dut.name] = idx
+
+ # Generate initial matrix containg 'X' or ' '.
+ self.matrix_ = [['X' if (l.remote and len(l.remote)) else ' ' \
+ for _ in range(self.n_duts_)] for l in self.labels_]
+ for ol, l in enumerate(self.labels_):
+ if l.remote:
+ for r in l.remote:
+ self.matrix_[ol][self.dut_name_ordinal_[r]] = ' '
+
+ self.label_duts_ = [[] for _ in range(self.n_labels_)]
+ self.allocate_log_ = []
+
+ def compute_initial_allocation(self):
+ """Compute the initial label-dut allocation.
+
+ This method finds the most efficient way that every label gets imaged at
+ least once.
+
+ Returns:
+ False, only if not all labels could be imaged to a certain machine,
+ otherwise True.
+ """
+
+ if self.n_duts_ == 1:
+ for i, v in self.matrix_vertical_generator(0):
+ if v != 'X':
+ self.matrix_[i][0] = 'Y'
+ return
+
+ if self.n_labels_ == 1:
+ for j, v in self.matrix_horizontal_generator(0):
+ if v != 'X':
+ self.matrix_[0][j] = 'Y'
+ return
+
+ if self.n_duts_ >= self.n_labels_:
+ n = 1
+ else:
+ n = self.n_labels_ - self.n_duts_ + 1
+ while n <= self.n_labels_:
+ if self._compute_initial_allocation_internal(0, n):
+ break
+ n += 1
+
+ return n <= self.n_labels_
+
+ def _record_allocate_log(self, label_i, dut_j):
+ self.allocate_log_.append((label_i, dut_j))
+ self.label_duts_[label_i].append(dut_j)
+
+ def allocate(self, dut, schedv2=None):
+ """Allocate a label for dut.
+
+ Args:
+ dut: the dut that asks for a new image.
+ schedv2: the scheduling instance, we need the benchmark run
+ information with schedv2 for a better allocation.
+
+ Returns:
+ a label to image onto the dut or None if no more available images for
+ the dut.
+ """
+ j = self.dut_name_ordinal_[dut.name]
+ # 'can_' prefix means candidate label's.
+ can_reimage_number = 999
+ can_i = 999
+ can_label = None
+ can_pending_br_num = 0
+ for i, v in self.matrix_vertical_generator(j):
+ label = self.labels_[i]
+
+ # 2 optimizations here regarding allocating label to dut.
+ # Note schedv2 might be None in case we do not need this
+ # optimization or we are in testing mode.
+ if schedv2 is not None:
+ pending_br_num = len(schedv2.get_label_map()[label])
+ if pending_br_num == 0:
+ # (A) - we have finished all br of this label,
+ # apparently, we do not want to reimaeg dut to
+ # this label.
+ continue
+ else:
+ # In case we do not have a schedv2 instance, mark
+ # pending_br_num as 0, so pending_br_num >=
+ # can_pending_br_num is always True.
+ pending_br_num = 0
+
+ # For this time being, I just comment this out until we have a
+ # better estimation how long each benchmarkrun takes.
+ # if (pending_br_num <= 5 and
+ # len(self.label_duts_[i]) >= 1):
+ # # (B) this is heuristic - if there are just a few test cases
+ # # (say <5) left undone for this label, and there is at least
+ # # 1 other machine working on this lable, we probably not want
+ # # to bother to reimage this dut to help with these 5 test
+ # # cases
+ # continue
+
+ if v == 'Y':
+ self.matrix_[i][j] = '_'
+ self._record_allocate_log(i, j)
+ return label
+ if v == ' ':
+ label_reimage_number = len(self.label_duts_[i])
+ if ((can_label is None) or
+ (label_reimage_number < can_reimage_number or
+ (label_reimage_number == can_reimage_number and
+ pending_br_num >= can_pending_br_num))):
+ can_reimage_number = label_reimage_number
+ can_i = i
+ can_label = label
+ can_pending_br_num = pending_br_num
+
+ # All labels are marked either '_' (already taken) or 'X' (not
+ # compatible), so return None to notify machine thread to quit.
+ if can_label is None:
+ return None
+
+ # At this point, we don't find any 'Y' for the machine, so we go the
+ # 'min' approach.
+ self.matrix_[can_i][j] = '_'
+ self._record_allocate_log(can_i, j)
+ return can_label
+
+ def matrix_vertical_generator(self, col):
+ """Iterate matrix vertically at column 'col'.
+
+ Yield row number i and value at matrix_[i][col].
+ """
+ for i, _ in enumerate(self.labels_):
+ yield i, self.matrix_[i][col]
+
+ def matrix_horizontal_generator(self, row):
+ """Iterate matrix horizontally at row 'row'.
+
+ Yield col number j and value at matrix_[row][j].
+ """
+ for j, _ in enumerate(self.duts_):
+ yield j, self.matrix_[row][j]
+
+ def _compute_initial_allocation_internal(self, level, N):
+ """Search matrix for d with N."""
+
+ if level == self.n_labels_:
+ return True
+
+ for j, v in self.matrix_horizontal_generator(level):
+ if v == ' ':
+ # Before we put a 'Y', we check how many Y column 'j' has.
+ # Note y[0] is row idx, y[1] is the cell value.
+ ny = reduce(lambda x, y: x + 1 if (y[1] == 'Y') else x,
+ self.matrix_vertical_generator(j), 0)
+ if ny < N:
+ self.matrix_[level][j] = 'Y'
+ if self._compute_initial_allocation_internal(level + 1, N):
+ return True
+ self.matrix_[level][j] = ' '
+
+ return False
diff --git a/crosperf/machine_image_manager_unittest.py b/crosperf/machine_image_manager_unittest.py
new file mode 100755
index 00000000..fe41dc09
--- /dev/null
+++ b/crosperf/machine_image_manager_unittest.py
@@ -0,0 +1,290 @@
+#!/usr/bin/env python2
+
+# Copyright 2015 Google Inc. All Rights Reserved.
+
+"""Unit tests for the MachineImageManager class."""
+
+from __future__ import print_function
+
+import random
+import unittest
+
+from machine_image_manager import MachineImageManager
+
+
+class MockLabel(object):
+ """Class for generating a mock Label."""
+
+ def __init__(self, name, remotes=None):
+ self.name = name
+ self.remote = remotes
+
+ def __hash__(self):
+ """Provide hash function for label.
+
+ This is required because Label object is used inside a dict as key.
+ """
+ return hash(self.name)
+
+ def __eq__(self, other):
+ """Provide eq function for label.
+
+ This is required because Label object is used inside a dict as key.
+ """
+ return isinstance(other, MockLabel) and other.name == self.name
+
+
+class MockDut(object):
+ """Class for creating a mock Device-Under-Test (DUT)."""
+
+ def __init__(self, name, label=None):
+ self.name = name
+ self.label_ = label
+
+
+class MachineImageManagerTester(unittest.TestCase):
+ """Class for testing MachineImageManager."""
+
+ def gen_duts_by_name(self, *names):
+ duts = []
+ for n in names:
+ duts.append(MockDut(n))
+ return duts
+
+ def print_matrix(self, matrix):
+ for r in matrix:
+ for v in r:
+ print('{} '.format('.' if v == ' ' else v)),
+ print('')
+
+ def create_labels_and_duts_from_pattern(self, pattern):
+ labels = []
+ duts = []
+ for i, r in enumerate(pattern):
+ l = MockLabel('l{}'.format(i), [])
+ for j, v in enumerate(r.split()):
+ if v == '.':
+ l.remote.append('m{}'.format(j))
+ if i == 0:
+ duts.append(MockDut('m{}'.format(j)))
+ labels.append(l)
+ return labels, duts
+
+ def check_matrix_against_pattern(self, matrix, pattern):
+ for i, s in enumerate(pattern):
+ for j, v in enumerate(s.split()):
+ self.assertTrue(v == '.' and matrix[i][j] == ' ' or v == matrix[i][j])
+
+ def pattern_based_test(self, inp, output):
+ labels, duts = self.create_labels_and_duts_from_pattern(inp)
+ mim = MachineImageManager(labels, duts)
+ self.assertTrue(mim.compute_initial_allocation())
+ self.check_matrix_against_pattern(mim.matrix_, output)
+ return mim
+
+ def test_single_dut(self):
+ labels = [MockLabel('l1'), MockLabel('l2'), MockLabel('l3')]
+ dut = MockDut('m1')
+ mim = MachineImageManager(labels, [dut])
+ mim.compute_initial_allocation()
+ self.assertTrue(mim.matrix_ == [['Y'], ['Y'], ['Y']])
+
+ def test_single_label(self):
+ labels = [MockLabel('l1')]
+ duts = self.gen_duts_by_name('m1', 'm2', 'm3')
+ mim = MachineImageManager(labels, duts)
+ mim.compute_initial_allocation()
+ self.assertTrue(mim.matrix_ == [['Y', 'Y', 'Y']])
+
+ def test_case1(self):
+ labels = [MockLabel('l1', ['m1', 'm2']), MockLabel('l2', ['m2', 'm3']),
+ MockLabel('l3', ['m1'])]
+ duts = [MockDut('m1'), MockDut('m2'), MockDut('m3')]
+ mim = MachineImageManager(labels, duts)
+ self.assertTrue(mim.matrix_ == [[' ', ' ', 'X'], ['X', ' ', ' '], [' ', 'X',
+ 'X']])
+ mim.compute_initial_allocation()
+ self.assertTrue(mim.matrix_ == [[' ', 'Y', 'X'], ['X', ' ', 'Y'], ['Y', 'X',
+ 'X']])
+
+ def test_case2(self):
+ labels = [MockLabel('l1', ['m1', 'm2']), MockLabel('l2', ['m2', 'm3']),
+ MockLabel('l3', ['m1'])]
+ duts = [MockDut('m1'), MockDut('m2'), MockDut('m3')]
+ mim = MachineImageManager(labels, duts)
+ self.assertTrue(mim.matrix_ == [[' ', ' ', 'X'], ['X', ' ', ' '], [' ', 'X',
+ 'X']])
+ mim.compute_initial_allocation()
+ self.assertTrue(mim.matrix_ == [[' ', 'Y', 'X'], ['X', ' ', 'Y'], ['Y', 'X',
+ 'X']])
+
+ def test_case3(self):
+ labels = [MockLabel('l1', ['m1', 'm2']), MockLabel('l2', ['m2', 'm3']),
+ MockLabel('l3', ['m1'])]
+ duts = [MockDut('m1', labels[0]), MockDut('m2'), MockDut('m3')]
+ mim = MachineImageManager(labels, duts)
+ mim.compute_initial_allocation()
+ self.assertTrue(mim.matrix_ == [[' ', 'Y', 'X'], ['X', ' ', 'Y'], ['Y', 'X',
+ 'X']])
+
+ def test_case4(self):
+ labels = [MockLabel('l1', ['m1', 'm2']), MockLabel('l2', ['m2', 'm3']),
+ MockLabel('l3', ['m1'])]
+ duts = [MockDut('m1'), MockDut('m2', labels[0]), MockDut('m3')]
+ mim = MachineImageManager(labels, duts)
+ mim.compute_initial_allocation()
+ self.assertTrue(mim.matrix_ == [[' ', 'Y', 'X'], ['X', ' ', 'Y'], ['Y', 'X',
+ 'X']])
+
+ def test_case5(self):
+ labels = [MockLabel('l1', ['m3']), MockLabel('l2', ['m3']),
+ MockLabel('l3', ['m1'])]
+ duts = self.gen_duts_by_name('m1', 'm2', 'm3')
+ mim = MachineImageManager(labels, duts)
+ self.assertTrue(mim.compute_initial_allocation())
+ self.assertTrue(mim.matrix_ == [['X', 'X', 'Y'], ['X', 'X', 'Y'], ['Y', 'X',
+ 'X']])
+
+ def test_2x2_with_allocation(self):
+ labels = [MockLabel('l0'), MockLabel('l1')]
+ duts = [MockDut('m0'), MockDut('m1')]
+ mim = MachineImageManager(labels, duts)
+ self.assertTrue(mim.compute_initial_allocation())
+ self.assertTrue(mim.allocate(duts[0]) == labels[0])
+ self.assertTrue(mim.allocate(duts[0]) == labels[1])
+ self.assertTrue(mim.allocate(duts[0]) is None)
+ self.assertTrue(mim.matrix_[0][0] == '_')
+ self.assertTrue(mim.matrix_[1][0] == '_')
+ self.assertTrue(mim.allocate(duts[1]) == labels[1])
+
+ def test_10x10_general(self):
+ """Gen 10x10 matrix."""
+ n = 10
+ labels = []
+ duts = []
+ for i in range(n):
+ labels.append(MockLabel('l{}'.format(i)))
+ duts.append(MockDut('m{}'.format(i)))
+ mim = MachineImageManager(labels, duts)
+ self.assertTrue(mim.compute_initial_allocation())
+ for i in range(n):
+ for j in range(n):
+ if i == j:
+ self.assertTrue(mim.matrix_[i][j] == 'Y')
+ else:
+ self.assertTrue(mim.matrix_[i][j] == ' ')
+ self.assertTrue(mim.allocate(duts[3]).name == 'l3')
+
+ def test_random_generated(self):
+ n = 10
+ labels = []
+ duts = []
+ for i in range(10):
+ # generate 3-5 machines that is compatible with this label
+ l = MockLabel('l{}'.format(i), [])
+ r = random.random()
+ for _ in range(4):
+ t = int(r * 10) % n
+ r *= 10
+ l.remote.append('m{}'.format(t))
+ labels.append(l)
+ duts.append(MockDut('m{}'.format(i)))
+ mim = MachineImageManager(labels, duts)
+ self.assertTrue(mim.compute_initial_allocation())
+
+ def test_10x10_fully_random(self):
+ inp = ['X . . . X X . X X .', 'X X . X . X . X X .',
+ 'X X X . . X . X . X', 'X . X X . . X X . X',
+ 'X X X X . . . X . .', 'X X . X . X . . X .',
+ '. X . X . X X X . .', '. X . X X . X X . .',
+ 'X X . . . X X X . .', '. X X X X . . . . X']
+ output = ['X Y . . X X . X X .', 'X X Y X . X . X X .',
+ 'X X X Y . X . X . X', 'X . X X Y . X X . X',
+ 'X X X X . Y . X . .', 'X X . X . X Y . X .',
+ 'Y X . X . X X X . .', '. X . X X . X X Y .',
+ 'X X . . . X X X . Y', '. X X X X . . Y . X']
+ self.pattern_based_test(inp, output)
+
+ def test_10x10_fully_random2(self):
+ inp = ['X . X . . X . X X X', 'X X X X X X . . X .',
+ 'X . X X X X X . . X', 'X X X . X . X X . .',
+ '. X . X . X X X X X', 'X X X X X X X . . X',
+ 'X . X X X X X . . X', 'X X X . X X X X . .',
+ 'X X X . . . X X X X', '. X X . X X X . X X']
+ output = ['X . X Y . X . X X X', 'X X X X X X Y . X .',
+ 'X Y X X X X X . . X', 'X X X . X Y X X . .',
+ '. X Y X . X X X X X', 'X X X X X X X Y . X',
+ 'X . X X X X X . Y X', 'X X X . X X X X . Y',
+ 'X X X . Y . X X X X', 'Y X X . X X X . X X']
+ self.pattern_based_test(inp, output)
+
+ def test_3x4_with_allocation(self):
+ inp = ['X X . .', '. . X .', 'X . X .']
+ output = ['X X Y .', 'Y . X .', 'X Y X .']
+ mim = self.pattern_based_test(inp, output)
+ self.assertTrue(mim.allocate(mim.duts_[2]) == mim.labels_[0])
+ self.assertTrue(mim.allocate(mim.duts_[3]) == mim.labels_[2])
+ self.assertTrue(mim.allocate(mim.duts_[0]) == mim.labels_[1])
+ self.assertTrue(mim.allocate(mim.duts_[1]) == mim.labels_[2])
+ self.assertTrue(mim.allocate(mim.duts_[3]) == mim.labels_[1])
+ self.assertTrue(mim.allocate(mim.duts_[3]) == mim.labels_[0])
+ self.assertTrue(mim.allocate(mim.duts_[3]) is None)
+ self.assertTrue(mim.allocate(mim.duts_[2]) is None)
+ self.assertTrue(mim.allocate(mim.duts_[1]) == mim.labels_[1])
+ self.assertTrue(mim.allocate(mim.duts_[1]) == None)
+ self.assertTrue(mim.allocate(mim.duts_[0]) == None)
+ self.assertTrue(mim.label_duts_[0] == [2, 3])
+ self.assertTrue(mim.label_duts_[1] == [0, 3, 1])
+ self.assertTrue(mim.label_duts_[2] == [3, 1])
+ self.assertTrue(mim.allocate_log_ == [(0, 2), (2, 3), (1, 0), (2, 1),
+ (1, 3), (0, 3), (1, 1)])
+
+ def test_cornercase_1(self):
+ """This corner case is brought up by Caroline.
+
+ The description is -
+
+ If you have multiple labels and multiple machines, (so we don't
+ automatically fall into the 1 dut or 1 label case), but all of the
+ labels specify the same 1 remote, then instead of assigning the same
+ machine to all the labels, your algorithm fails to assign any...
+
+ So first step is to create an initial matrix like below, l0, l1 and l2
+ all specify the same 1 remote - m0.
+
+ m0 m1 m2
+ l0 . X X
+
+ l1 . X X
+
+ l2 . X X
+
+ The search process will be like this -
+ a) try to find a solution with at most 1 'Y's per column (but ensure at
+ least 1 Y per row), fail
+ b) try to find a solution with at most 2 'Y's per column (but ensure at
+ least 1 Y per row), fail
+ c) try to find a solution with at most 3 'Y's per column (but ensure at
+ least 1 Y per row), succeed, so we end up having this solution
+
+ m0 m1 m2
+ l0 Y X X
+
+ l1 Y X X
+
+ l2 Y X X
+ """
+
+ inp = ['. X X', '. X X', '. X X']
+ output = ['Y X X', 'Y X X', 'Y X X']
+ mim = self.pattern_based_test(inp, output)
+ self.assertTrue(mim.allocate(mim.duts_[1]) is None)
+ self.assertTrue(mim.allocate(mim.duts_[2]) is None)
+ self.assertTrue(mim.allocate(mim.duts_[0]) == mim.labels_[0])
+ self.assertTrue(mim.allocate(mim.duts_[0]) == mim.labels_[1])
+ self.assertTrue(mim.allocate(mim.duts_[0]) == mim.labels_[2])
+ self.assertTrue(mim.allocate(mim.duts_[0]) is None)
+
+
+if __name__ == '__main__':
+ unittest.main()
diff --git a/crosperf/machine_manager.py b/crosperf/machine_manager.py
new file mode 100644
index 00000000..2fdf141b
--- /dev/null
+++ b/crosperf/machine_manager.py
@@ -0,0 +1,709 @@
+# Copyright (c) 2013 The Chromium OS Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+"""Machine Manager module."""
+
+from __future__ import print_function
+
+import collections
+import file_lock_machine
+import hashlib
+import image_chromeos
+import math
+import os.path
+import re
+import sys
+import threading
+import time
+
+import test_flag
+from cros_utils import command_executer
+from cros_utils import logger
+
+CHECKSUM_FILE = '/usr/local/osimage_checksum_file'
+
+
+class BadChecksum(Exception):
+ """Raised if all machines for a label don't have the same checksum."""
+ pass
+
+
+class BadChecksumString(Exception):
+ """Raised if all machines for a label don't have the same checksum string."""
+ pass
+
+
+class MissingLocksDirectory(Exception):
+ """Raised when cannot find/access the machine locks directory."""
+
+
+class CrosCommandError(Exception):
+ """Raised when an error occurs running command on DUT."""
+
+
+class CrosMachine(object):
+ """The machine class."""
+
+ def __init__(self, name, chromeos_root, log_level, cmd_exec=None):
+ self.name = name
+ self.image = None
+ # We relate a dut with a label if we reimage the dut using label or we
+ # detect at the very beginning that the dut is running this label.
+ self.label = None
+ self.checksum = None
+ self.locked = False
+ self.released_time = time.time()
+ self.test_run = None
+ self.chromeos_root = chromeos_root
+ self.log_level = log_level
+ self.cpuinfo = None
+ self.machine_id = None
+ self.checksum_string = None
+ self.meminfo = None
+ self.phys_kbytes = None
+ self.ce = cmd_exec or command_executer.GetCommandExecuter(
+ log_level=self.log_level)
+ self.SetUpChecksumInfo()
+
+ def SetUpChecksumInfo(self):
+ if not self.IsReachable():
+ self.machine_checksum = None
+ return
+ self._GetMemoryInfo()
+ self._GetCPUInfo()
+ self._ComputeMachineChecksumString()
+ self._GetMachineID()
+ self.machine_checksum = self._GetMD5Checksum(self.checksum_string)
+ self.machine_id_checksum = self._GetMD5Checksum(self.machine_id)
+
+ def IsReachable(self):
+ command = 'ls'
+ ret = self.ce.CrosRunCommand(command,
+ machine=self.name,
+ chromeos_root=self.chromeos_root)
+ if ret:
+ return False
+ return True
+
+ def _ParseMemoryInfo(self):
+ line = self.meminfo.splitlines()[0]
+ usable_kbytes = int(line.split()[1])
+ # This code is from src/third_party/test/files/client/bin/base_utils.py
+ # usable_kbytes is system's usable DRAM in kbytes,
+ # as reported by memtotal() from device /proc/meminfo memtotal
+ # after Linux deducts 1.5% to 9.5% for system table overhead
+ # Undo the unknown actual deduction by rounding up
+ # to next small multiple of a big power-of-two
+ # eg 12GB - 5.1% gets rounded back up to 12GB
+ mindeduct = 0.005 # 0.5 percent
+ maxdeduct = 0.095 # 9.5 percent
+ # deduction range 1.5% .. 9.5% supports physical mem sizes
+ # 6GB .. 12GB in steps of .5GB
+ # 12GB .. 24GB in steps of 1 GB
+ # 24GB .. 48GB in steps of 2 GB ...
+ # Finer granularity in physical mem sizes would require
+ # tighter spread between min and max possible deductions
+
+ # increase mem size by at least min deduction, without rounding
+ min_kbytes = int(usable_kbytes / (1.0 - mindeduct))
+ # increase mem size further by 2**n rounding, by 0..roundKb or more
+ round_kbytes = int(usable_kbytes / (1.0 - maxdeduct)) - min_kbytes
+ # find least binary roundup 2**n that covers worst-cast roundKb
+ mod2n = 1 << int(math.ceil(math.log(round_kbytes, 2)))
+ # have round_kbytes <= mod2n < round_kbytes*2
+ # round min_kbytes up to next multiple of mod2n
+ phys_kbytes = min_kbytes + mod2n - 1
+ phys_kbytes -= phys_kbytes % mod2n # clear low bits
+ self.phys_kbytes = phys_kbytes
+
+ def _GetMemoryInfo(self):
+ #TODO yunlian: when the machine in rebooting, it will not return
+ #meminfo, the assert does not catch it either
+ command = 'cat /proc/meminfo'
+ ret, self.meminfo, _ = self.ce.CrosRunCommandWOutput(
+ command,
+ machine=self.name,
+ chromeos_root=self.chromeos_root)
+ assert ret == 0, 'Could not get meminfo from machine: %s' % self.name
+ if ret == 0:
+ self._ParseMemoryInfo()
+
+ def _GetCPUInfo(self):
+ command = 'cat /proc/cpuinfo'
+ ret, self.cpuinfo, _ = self.ce.CrosRunCommandWOutput(
+ command,
+ machine=self.name,
+ chromeos_root=self.chromeos_root)
+ assert ret == 0, 'Could not get cpuinfo from machine: %s' % self.name
+
+ def _ComputeMachineChecksumString(self):
+ self.checksum_string = ''
+ exclude_lines_list = ['MHz', 'BogoMIPS', 'bogomips']
+ for line in self.cpuinfo.splitlines():
+ if not any(e in line for e in exclude_lines_list):
+ self.checksum_string += line
+ self.checksum_string += ' ' + str(self.phys_kbytes)
+
+ def _GetMD5Checksum(self, ss):
+ if ss:
+ return hashlib.md5(ss).hexdigest()
+ else:
+ return ''
+
+ def _GetMachineID(self):
+ command = 'dump_vpd_log --full --stdout'
+ _, if_out, _ = self.ce.CrosRunCommandWOutput(
+ command,
+ machine=self.name,
+ chromeos_root=self.chromeos_root)
+ b = if_out.splitlines()
+ a = [l for l in b if 'Product' in l]
+ if len(a):
+ self.machine_id = a[0]
+ return
+ command = 'ifconfig'
+ _, if_out, _ = self.ce.CrosRunCommandWOutput(
+ command,
+ machine=self.name,
+ chromeos_root=self.chromeos_root)
+ b = if_out.splitlines()
+ a = [l for l in b if 'HWaddr' in l]
+ if len(a):
+ self.machine_id = '_'.join(a)
+ return
+ a = [l for l in b if 'ether' in l]
+ if len(a):
+ self.machine_id = '_'.join(a)
+ return
+ assert 0, 'Could not get machine_id from machine: %s' % self.name
+
+ def __str__(self):
+ l = []
+ l.append(self.name)
+ l.append(str(self.image))
+ l.append(str(self.checksum))
+ l.append(str(self.locked))
+ l.append(str(self.released_time))
+ return ', '.join(l)
+
+
+class MachineManager(object):
+ """Lock, image and unlock machines locally for benchmark runs.
+
+ This class contains methods and calls to lock, unlock and image
+ machines and distribute machines to each benchmark run. The assumption is
+ that all of the machines for the experiment have been globally locked
+ (using an AFE server) in the ExperimentRunner, but the machines still need
+ to be locally locked/unlocked (allocated to benchmark runs) to prevent
+ multiple benchmark runs within the same experiment from trying to use the
+ same machine at the same time.
+ """
+
+ def __init__(self,
+ chromeos_root,
+ acquire_timeout,
+ log_level,
+ locks_dir,
+ cmd_exec=None,
+ lgr=None):
+ self._lock = threading.RLock()
+ self._all_machines = []
+ self._machines = []
+ self.image_lock = threading.Lock()
+ self.num_reimages = 0
+ self.chromeos_root = None
+ self.machine_checksum = {}
+ self.machine_checksum_string = {}
+ self.acquire_timeout = acquire_timeout
+ self.log_level = log_level
+ self.locks_dir = locks_dir
+ self.ce = cmd_exec or command_executer.GetCommandExecuter(
+ log_level=self.log_level)
+ self.logger = lgr or logger.GetLogger()
+
+ if self.locks_dir and not os.path.isdir(self.locks_dir):
+ raise MissingLocksDirectory('Cannot access locks directory: %s' %
+ self.locks_dir)
+
+ self._initialized_machines = []
+ self.chromeos_root = chromeos_root
+
+ def RemoveNonLockedMachines(self, locked_machines):
+ for m in self._all_machines:
+ if m.name not in locked_machines:
+ self._all_machines.remove(m)
+
+ for m in self._machines:
+ if m.name not in locked_machines:
+ self._machines.remove(m)
+
+ def GetChromeVersion(self, machine):
+ """Get the version of Chrome running on the DUT."""
+
+ cmd = '/opt/google/chrome/chrome --version'
+ ret, version, _ = self.ce.CrosRunCommandWOutput(
+ cmd,
+ machine=machine.name,
+ chromeos_root=self.chromeos_root)
+ if ret != 0:
+ raise CrosCommandError("Couldn't get Chrome version from %s." %
+ machine.name)
+
+ if ret != 0:
+ version = ''
+ return version.rstrip()
+
+ def ImageMachine(self, machine, label):
+ checksum = label.checksum
+
+ if checksum and (machine.checksum == checksum):
+ return
+ chromeos_root = label.chromeos_root
+ if not chromeos_root:
+ chromeos_root = self.chromeos_root
+ image_chromeos_args = [image_chromeos.__file__, '--no_lock',
+ '--chromeos_root=%s' % chromeos_root,
+ '--image=%s' % label.chromeos_image,
+ '--image_args=%s' % label.image_args, '--remote=%s' %
+ machine.name, '--logging_level=%s' % self.log_level]
+ if label.board:
+ image_chromeos_args.append('--board=%s' % label.board)
+
+ # Currently can't image two machines at once.
+ # So have to serialized on this lock.
+ save_ce_log_level = self.ce.log_level
+ if self.log_level != 'verbose':
+ self.ce.log_level = 'average'
+
+ with self.image_lock:
+ if self.log_level != 'verbose':
+ self.logger.LogOutput('Pushing image onto machine.')
+ self.logger.LogOutput('Running image_chromeos.DoImage with %s' %
+ ' '.join(image_chromeos_args))
+ retval = 0
+ if not test_flag.GetTestMode():
+ retval = image_chromeos.DoImage(image_chromeos_args)
+ if retval:
+ cmd = 'reboot && exit'
+ if self.log_level != 'verbose':
+ self.logger.LogOutput('reboot & exit.')
+ self.ce.CrosRunCommand(cmd,
+ machine=machine.name,
+ chromeos_root=self.chromeos_root)
+ time.sleep(60)
+ if self.log_level != 'verbose':
+ self.logger.LogOutput('Pushing image onto machine.')
+ self.logger.LogOutput('Running image_chromeos.DoImage with %s' %
+ ' '.join(image_chromeos_args))
+ retval = image_chromeos.DoImage(image_chromeos_args)
+ if retval:
+ raise RuntimeError("Could not image machine: '%s'." % machine.name)
+ else:
+ self.num_reimages += 1
+ machine.checksum = checksum
+ machine.image = label.chromeos_image
+ machine.label = label
+
+ if not label.chrome_version:
+ label.chrome_version = self.GetChromeVersion(machine)
+
+ self.ce.log_level = save_ce_log_level
+ return retval
+
+ def ComputeCommonCheckSum(self, label):
+ # Since this is used for cache lookups before the machines have been
+ # compared/verified, check here to make sure they all have the same
+ # checksum (otherwise the cache lookup may not be valid).
+ common_checksum = None
+ for machine in self.GetMachines(label):
+ # Make sure the machine's checksums are calculated.
+ if not machine.machine_checksum:
+ machine.SetUpChecksumInfo()
+ cs = machine.machine_checksum
+ # If this is the first machine we've examined, initialize
+ # common_checksum.
+ if not common_checksum:
+ common_checksum = cs
+ # Make sure this machine's checksum matches our 'common' checksum.
+ if cs != common_checksum:
+ raise BadChecksum('Machine checksums do not match!')
+ self.machine_checksum[label.name] = common_checksum
+
+ def ComputeCommonCheckSumString(self, label):
+ # The assumption is that this function is only called AFTER
+ # ComputeCommonCheckSum, so there is no need to verify the machines
+ # are the same here. If this is ever changed, this function should be
+ # modified to verify that all the machines for a given label are the
+ # same.
+ for machine in self.GetMachines(label):
+ if machine.checksum_string:
+ self.machine_checksum_string[label.name] = machine.checksum_string
+ break
+
+ def _TryToLockMachine(self, cros_machine):
+ with self._lock:
+ assert cros_machine, "Machine can't be None"
+ for m in self._machines:
+ if m.name == cros_machine.name:
+ return
+ locked = True
+ if self.locks_dir:
+ locked = file_lock_machine.Machine(cros_machine.name,
+ self.locks_dir).Lock(True,
+ sys.argv[0])
+ if locked:
+ self._machines.append(cros_machine)
+ command = 'cat %s' % CHECKSUM_FILE
+ ret, out, _ = self.ce.CrosRunCommandWOutput(
+ command,
+ chromeos_root=self.chromeos_root,
+ machine=cros_machine.name)
+ if ret == 0:
+ cros_machine.checksum = out.strip()
+ elif self.locks_dir:
+ self.logger.LogOutput("Couldn't lock: %s" % cros_machine.name)
+
+ # This is called from single threaded mode.
+ def AddMachine(self, machine_name):
+ with self._lock:
+ for m in self._all_machines:
+ assert m.name != machine_name, 'Tried to double-add %s' % machine_name
+
+ if self.log_level != 'verbose':
+ self.logger.LogOutput('Setting up remote access to %s' % machine_name)
+ self.logger.LogOutput('Checking machine characteristics for %s' %
+ machine_name)
+ cm = CrosMachine(machine_name, self.chromeos_root, self.log_level)
+ if cm.machine_checksum:
+ self._all_machines.append(cm)
+
+ def RemoveMachine(self, machine_name):
+ with self._lock:
+ self._machines = [m for m in self._machines if m.name != machine_name]
+ if self.locks_dir:
+ res = file_lock_machine.Machine(machine_name,
+ self.locks_dir).Unlock(True)
+ if not res:
+ self.logger.LogError("Could not unlock machine: '%s'." % machine_name)
+
+ def ForceSameImageToAllMachines(self, label):
+ machines = self.GetMachines(label)
+ for m in machines:
+ self.ImageMachine(m, label)
+ m.SetUpChecksumInfo()
+
+ def AcquireMachine(self, label):
+ image_checksum = label.checksum
+ machines = self.GetMachines(label)
+ check_interval_time = 120
+ with self._lock:
+ # Lazily external lock machines
+ while self.acquire_timeout >= 0:
+ for m in machines:
+ new_machine = m not in self._all_machines
+ self._TryToLockMachine(m)
+ if new_machine:
+ m.released_time = time.time()
+ if self.GetAvailableMachines(label):
+ break
+ sleep_time = max(1, min(self.acquire_timeout, check_interval_time))
+ time.sleep(sleep_time)
+ self.acquire_timeout -= sleep_time
+
+ if self.acquire_timeout < 0:
+ self.logger.LogFatal('Could not acquire any of the '
+ "following machines: '%s'" %
+ ', '.join(machine.name for machine in machines))
+
+### for m in self._machines:
+### if (m.locked and time.time() - m.released_time < 10 and
+### m.checksum == image_checksum):
+### return None
+ unlocked_machines = [machine
+ for machine in self.GetAvailableMachines(label)
+ if not machine.locked]
+ for m in unlocked_machines:
+ if image_checksum and m.checksum == image_checksum:
+ m.locked = True
+ m.test_run = threading.current_thread()
+ return m
+ for m in unlocked_machines:
+ if not m.checksum:
+ m.locked = True
+ m.test_run = threading.current_thread()
+ return m
+ # This logic ensures that threads waiting on a machine will get a machine
+ # with a checksum equal to their image over other threads. This saves time
+ # when crosperf initially assigns the machines to threads by minimizing
+ # the number of re-images.
+ # TODO(asharif): If we centralize the thread-scheduler, we wont need this
+ # code and can implement minimal reimaging code more cleanly.
+ for m in unlocked_machines:
+ if time.time() - m.released_time > 15:
+ # The release time gap is too large, so it is probably in the start
+ # stage, we need to reset the released_time.
+ m.released_time = time.time()
+ elif time.time() - m.released_time > 8:
+ m.locked = True
+ m.test_run = threading.current_thread()
+ return m
+ return None
+
+ def GetAvailableMachines(self, label=None):
+ if not label:
+ return self._machines
+ return [m for m in self._machines if m.name in label.remote]
+
+ def GetMachines(self, label=None):
+ if not label:
+ return self._all_machines
+ return [m for m in self._all_machines if m.name in label.remote]
+
+ def ReleaseMachine(self, machine):
+ with self._lock:
+ for m in self._machines:
+ if machine.name == m.name:
+ assert m.locked, 'Tried to double-release %s' % m.name
+ m.released_time = time.time()
+ m.locked = False
+ m.status = 'Available'
+ break
+
+ def Cleanup(self):
+ with self._lock:
+ # Unlock all machines (via file lock)
+ for m in self._machines:
+ res = file_lock_machine.Machine(m.name, self.locks_dir).Unlock(True)
+
+ if not res:
+ self.logger.LogError("Could not unlock machine: '%s'." % m.name)
+
+ def __str__(self):
+ with self._lock:
+ l = ['MachineManager Status:'] + [str(m) for m in self._machines]
+ return '\n'.join(l)
+
+ def AsString(self):
+ with self._lock:
+ stringify_fmt = '%-30s %-10s %-4s %-25s %-32s'
+ header = stringify_fmt % ('Machine', 'Thread', 'Lock', 'Status',
+ 'Checksum')
+ table = [header]
+ for m in self._machines:
+ if m.test_run:
+ test_name = m.test_run.name
+ test_status = m.test_run.timeline.GetLastEvent()
+ else:
+ test_name = ''
+ test_status = ''
+
+ try:
+ machine_string = stringify_fmt % (m.name, test_name, m.locked,
+ test_status, m.checksum)
+ except ValueError:
+ machine_string = ''
+ table.append(machine_string)
+ return 'Machine Status:\n%s' % '\n'.join(table)
+
+ def GetAllCPUInfo(self, labels):
+ """Get cpuinfo for labels, merge them if their cpuinfo are the same."""
+ dic = collections.defaultdict(list)
+ for label in labels:
+ for machine in self._all_machines:
+ if machine.name in label.remote:
+ dic[machine.cpuinfo].append(label.name)
+ break
+ output_segs = []
+ for key, v in dic.iteritems():
+ output = ' '.join(v)
+ output += '\n-------------------\n'
+ output += key
+ output += '\n\n\n'
+ output_segs.append(output)
+ return ''.join(output_segs)
+
+ def GetAllMachines(self):
+ return self._all_machines
+
+
+class MockCrosMachine(CrosMachine):
+ """Mock cros machine class."""
+ # pylint: disable=super-init-not-called
+
+ MEMINFO_STRING = """MemTotal: 3990332 kB
+MemFree: 2608396 kB
+Buffers: 147168 kB
+Cached: 811560 kB
+SwapCached: 0 kB
+Active: 503480 kB
+Inactive: 628572 kB
+Active(anon): 174532 kB
+Inactive(anon): 88576 kB
+Active(file): 328948 kB
+Inactive(file): 539996 kB
+Unevictable: 0 kB
+Mlocked: 0 kB
+SwapTotal: 5845212 kB
+SwapFree: 5845212 kB
+Dirty: 9384 kB
+Writeback: 0 kB
+AnonPages: 173408 kB
+Mapped: 146268 kB
+Shmem: 89676 kB
+Slab: 188260 kB
+SReclaimable: 169208 kB
+SUnreclaim: 19052 kB
+KernelStack: 2032 kB
+PageTables: 7120 kB
+NFS_Unstable: 0 kB
+Bounce: 0 kB
+WritebackTmp: 0 kB
+CommitLimit: 7840376 kB
+Committed_AS: 1082032 kB
+VmallocTotal: 34359738367 kB
+VmallocUsed: 364980 kB
+VmallocChunk: 34359369407 kB
+DirectMap4k: 45824 kB
+DirectMap2M: 4096000 kB
+"""
+
+ CPUINFO_STRING = """processor: 0
+vendor_id: GenuineIntel
+cpu family: 6
+model: 42
+model name: Intel(R) Celeron(R) CPU 867 @ 1.30GHz
+stepping: 7
+microcode: 0x25
+cpu MHz: 1300.000
+cache size: 2048 KB
+physical id: 0
+siblings: 2
+core id: 0
+cpu cores: 2
+apicid: 0
+initial apicid: 0
+fpu: yes
+fpu_exception: yes
+cpuid level: 13
+wp: yes
+flags: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic popcnt tsc_deadline_timer xsave lahf_lm arat epb xsaveopt pln pts dts tpr_shadow vnmi flexpriority ept vpid
+bogomips: 2594.17
+clflush size: 64
+cache_alignment: 64
+address sizes: 36 bits physical, 48 bits virtual
+power management:
+
+processor: 1
+vendor_id: GenuineIntel
+cpu family: 6
+model: 42
+model name: Intel(R) Celeron(R) CPU 867 @ 1.30GHz
+stepping: 7
+microcode: 0x25
+cpu MHz: 1300.000
+cache size: 2048 KB
+physical id: 0
+siblings: 2
+core id: 1
+cpu cores: 2
+apicid: 2
+initial apicid: 2
+fpu: yes
+fpu_exception: yes
+cpuid level: 13
+wp: yes
+flags: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic popcnt tsc_deadline_timer xsave lahf_lm arat epb xsaveopt pln pts dts tpr_shadow vnmi flexpriority ept vpid
+bogomips: 2594.17
+clflush size: 64
+cache_alignment: 64
+address sizes: 36 bits physical, 48 bits virtual
+power management:
+"""
+
+ def __init__(self, name, chromeos_root, log_level):
+ self.name = name
+ self.image = None
+ self.checksum = None
+ self.locked = False
+ self.released_time = time.time()
+ self.test_run = None
+ self.chromeos_root = chromeos_root
+ self.checksum_string = re.sub(r'\d', '', name)
+ #In test, we assume "lumpy1", "lumpy2" are the same machine.
+ self.machine_checksum = self._GetMD5Checksum(self.checksum_string)
+ self.log_level = log_level
+ self.label = None
+ self.ce = command_executer.GetCommandExecuter(log_level=self.log_level)
+ self._GetCPUInfo()
+
+ def IsReachable(self):
+ return True
+
+ def _GetMemoryInfo(self):
+ self.meminfo = self.MEMINFO_STRING
+ self._ParseMemoryInfo()
+
+ def _GetCPUInfo(self):
+ self.cpuinfo = self.CPUINFO_STRING
+
+
+class MockMachineManager(MachineManager):
+ """Mock machine manager class."""
+
+ def __init__(self, chromeos_root, acquire_timeout, log_level, locks_dir):
+ super(MockMachineManager, self).__init__(
+ chromeos_root, acquire_timeout, log_level, locks_dir)
+
+ def _TryToLockMachine(self, cros_machine):
+ self._machines.append(cros_machine)
+ cros_machine.checksum = ''
+
+ def AddMachine(self, machine_name):
+ with self._lock:
+ for m in self._all_machines:
+ assert m.name != machine_name, 'Tried to double-add %s' % machine_name
+ cm = MockCrosMachine(machine_name, self.chromeos_root, self.log_level)
+ assert cm.machine_checksum, ('Could not find checksum for machine %s' %
+ machine_name)
+ # In Original MachineManager, the test is 'if cm.machine_checksum:' - if a
+ # machine is unreachable, then its machine_checksum is None. Here we
+ # cannot do this, because machine_checksum is always faked, so we directly
+ # test cm.IsReachable, which is properly mocked.
+ if cm.IsReachable():
+ self._all_machines.append(cm)
+
+ def GetChromeVersion(self, machine):
+ return 'Mock Chrome Version R50'
+
+ def AcquireMachine(self, label):
+ for machine in self._all_machines:
+ if not machine.locked:
+ machine.locked = True
+ return machine
+ return None
+
+ def ImageMachine(self, machine_name, label):
+ if machine_name or label:
+ return 0
+ return 1
+
+ def ReleaseMachine(self, machine):
+ machine.locked = False
+
+ def GetMachines(self, label=None):
+ return self._all_machines
+
+ def GetAvailableMachines(self, label=None):
+ return self._all_machines
+
+ def ForceSameImageToAllMachines(self, label=None):
+ return 0
+
+ def ComputeCommonCheckSum(self, label=None):
+ common_checksum = 12345
+ for machine in self.GetMachines(label):
+ machine.machine_checksum = common_checksum
+ self.machine_checksum[label.name] = common_checksum
+
+ def GetAllMachines(self):
+ return self._all_machines
diff --git a/crosperf/machine_manager_unittest.py b/crosperf/machine_manager_unittest.py
new file mode 100755
index 00000000..8652f171
--- /dev/null
+++ b/crosperf/machine_manager_unittest.py
@@ -0,0 +1,845 @@
+#!/usr/bin/env python2
+
+# Copyright 2012 Google Inc. All Rights Reserved.
+"""Unittest for machine_manager."""
+
+from __future__ import print_function
+
+import os.path
+import time
+import hashlib
+
+import mock
+import unittest
+
+import label
+import machine_manager
+import image_checksummer
+import test_flag
+
+from benchmark import Benchmark
+from benchmark_run import MockBenchmarkRun
+from cros_utils import command_executer
+from cros_utils import logger
+
+# pylint: disable=protected-access
+
+
+class MyMachineManager(machine_manager.MachineManager):
+ """Machine manager for test."""
+
+ def __init__(self, chromeos_root):
+ super(MyMachineManager, self).__init__(chromeos_root, 0, 'average', '')
+
+ def _TryToLockMachine(self, cros_machine):
+ self._machines.append(cros_machine)
+ cros_machine.checksum = ''
+
+ def AddMachine(self, machine_name):
+ with self._lock:
+ for m in self._all_machines:
+ assert m.name != machine_name, 'Tried to double-add %s' % machine_name
+ cm = machine_manager.MockCrosMachine(machine_name, self.chromeos_root,
+ 'average')
+ assert cm.machine_checksum, ('Could not find checksum for machine %s' %
+ machine_name)
+ self._all_machines.append(cm)
+
+
+CHROMEOS_ROOT = '/tmp/chromeos-root'
+MACHINE_NAMES = ['lumpy1', 'lumpy2', 'lumpy3', 'daisy1', 'daisy2']
+LABEL_LUMPY = label.MockLabel('lumpy', 'lumpy_chromeos_image', 'autotest_dir',
+ CHROMEOS_ROOT, 'lumpy',
+ ['lumpy1', 'lumpy2', 'lumpy3', 'lumpy4'], '', '',
+ False, 'average,'
+ 'gcc', None)
+LABEL_MIX = label.MockLabel('mix', 'chromeos_image', 'autotest_dir',
+ CHROMEOS_ROOT, 'mix',
+ ['daisy1', 'daisy2', 'lumpy3', 'lumpy4'], '', '',
+ False, 'average', 'gcc', None)
+
+
+class MachineManagerTest(unittest.TestCase):
+ """Test for machine manager class."""
+
+ msgs = []
+ image_log = []
+ log_fatal_msgs = []
+ fake_logger_count = 0
+ fake_logger_msgs = []
+
+ mock_cmd_exec = mock.Mock(spec=command_executer.CommandExecuter)
+
+ mock_logger = mock.Mock(spec=logger.Logger)
+
+ mock_lumpy1 = mock.Mock(spec=machine_manager.CrosMachine)
+ mock_lumpy2 = mock.Mock(spec=machine_manager.CrosMachine)
+ mock_lumpy3 = mock.Mock(spec=machine_manager.CrosMachine)
+ mock_lumpy4 = mock.Mock(spec=machine_manager.CrosMachine)
+ mock_daisy1 = mock.Mock(spec=machine_manager.CrosMachine)
+ mock_daisy2 = mock.Mock(spec=machine_manager.CrosMachine)
+
+ @mock.patch.object(os.path, 'isdir')
+
+ # pylint: disable=arguments-differ
+ def setUp(self, mock_isdir):
+
+ mock_isdir.return_value = True
+ self.mm = machine_manager.MachineManager('/usr/local/chromeos', 0,
+ 'average', None,
+ self.mock_cmd_exec,
+ self.mock_logger)
+
+ self.mock_lumpy1.name = 'lumpy1'
+ self.mock_lumpy2.name = 'lumpy2'
+ self.mock_lumpy3.name = 'lumpy3'
+ self.mock_lumpy4.name = 'lumpy4'
+ self.mock_daisy1.name = 'daisy1'
+ self.mock_daisy2.name = 'daisy2'
+ self.mock_lumpy1.machine_checksum = 'lumpy123'
+ self.mock_lumpy2.machine_checksum = 'lumpy123'
+ self.mock_lumpy3.machine_checksum = 'lumpy123'
+ self.mock_lumpy4.machine_checksum = 'lumpy123'
+ self.mock_daisy1.machine_checksum = 'daisy12'
+ self.mock_daisy2.machine_checksum = 'daisy12'
+ self.mock_lumpy1.checksum_string = 'lumpy_checksum_str'
+ self.mock_lumpy2.checksum_string = 'lumpy_checksum_str'
+ self.mock_lumpy3.checksum_string = 'lumpy_checksum_str'
+ self.mock_lumpy4.checksum_string = 'lumpy_checksum_str'
+ self.mock_daisy1.checksum_string = 'daisy_checksum_str'
+ self.mock_daisy2.checksum_string = 'daisy_checksum_str'
+ self.mock_lumpy1.cpuinfo = 'lumpy_cpu_info'
+ self.mock_lumpy2.cpuinfo = 'lumpy_cpu_info'
+ self.mock_lumpy3.cpuinfo = 'lumpy_cpu_info'
+ self.mock_lumpy4.cpuinfo = 'lumpy_cpu_info'
+ self.mock_daisy1.cpuinfo = 'daisy_cpu_info'
+ self.mock_daisy2.cpuinfo = 'daisy_cpu_info'
+ self.mm._all_machines.append(self.mock_daisy1)
+ self.mm._all_machines.append(self.mock_daisy2)
+ self.mm._all_machines.append(self.mock_lumpy1)
+ self.mm._all_machines.append(self.mock_lumpy2)
+ self.mm._all_machines.append(self.mock_lumpy3)
+
+ def testGetMachines(self):
+ manager = MyMachineManager(CHROMEOS_ROOT)
+ for m in MACHINE_NAMES:
+ manager.AddMachine(m)
+ names = [m.name for m in manager.GetMachines(LABEL_LUMPY)]
+ self.assertEqual(names, ['lumpy1', 'lumpy2', 'lumpy3'])
+
+ def testGetAvailableMachines(self):
+ manager = MyMachineManager(CHROMEOS_ROOT)
+ for m in MACHINE_NAMES:
+ manager.AddMachine(m)
+ for m in manager._all_machines:
+ if int(m.name[-1]) % 2:
+ manager._TryToLockMachine(m)
+ names = [m.name for m in manager.GetAvailableMachines(LABEL_LUMPY)]
+ self.assertEqual(names, ['lumpy1', 'lumpy3'])
+
+ @mock.patch.object(time, 'sleep')
+ @mock.patch.object(command_executer.CommandExecuter, 'RunCommand')
+ @mock.patch.object(command_executer.CommandExecuter, 'CrosRunCommand')
+ @mock.patch.object(image_checksummer.ImageChecksummer, 'Checksum')
+ def test_image_machine(self, mock_checksummer, mock_run_croscmd, mock_run_cmd,
+ mock_sleep):
+
+ def FakeMD5Checksum(_input_str):
+ return 'machine_fake_md5_checksum'
+
+ self.fake_logger_count = 0
+ self.fake_logger_msgs = []
+
+ def FakeLogOutput(msg):
+ self.fake_logger_count += 1
+ self.fake_logger_msgs.append(msg)
+
+ def ResetValues():
+ self.fake_logger_count = 0
+ self.fake_logger_msgs = []
+ mock_run_cmd.reset_mock()
+ mock_run_croscmd.reset_mock()
+ mock_checksummer.reset_mock()
+ mock_sleep.reset_mock()
+ machine.checksum = 'fake_md5_checksum'
+ self.mm.checksum = None
+ self.mm.num_reimages = 0
+
+ self.mock_cmd_exec.CrosRunCommand = mock_run_croscmd
+ self.mock_cmd_exec.RunCommand = mock_run_cmd
+
+ self.mm.logger.LogOutput = FakeLogOutput
+ machine = self.mock_lumpy1
+ machine._GetMD5Checksum = FakeMD5Checksum
+ machine.checksum = 'fake_md5_checksum'
+ mock_checksummer.return_value = 'fake_md5_checksum'
+ self.mock_cmd_exec.log_level = 'verbose'
+
+ test_flag.SetTestMode(True)
+ # Test 1: label.image_type == "local"
+ LABEL_LUMPY.image_type = 'local'
+ self.mm.ImageMachine(machine, LABEL_LUMPY)
+ self.assertEqual(mock_run_cmd.call_count, 0)
+ self.assertEqual(mock_run_croscmd.call_count, 0)
+
+ #Test 2: label.image_type == "trybot"
+ ResetValues()
+ LABEL_LUMPY.image_type = 'trybot'
+ mock_run_cmd.return_value = 0
+ self.mm.ImageMachine(machine, LABEL_LUMPY)
+ self.assertEqual(mock_run_croscmd.call_count, 0)
+ self.assertEqual(mock_checksummer.call_count, 0)
+
+ # Test 3: label.image_type is neither local nor trybot; retval from
+ # RunCommand is 1, i.e. image_chromeos fails...
+ ResetValues()
+ LABEL_LUMPY.image_type = 'other'
+ mock_run_cmd.return_value = 1
+ try:
+ self.mm.ImageMachine(machine, LABEL_LUMPY)
+ except RuntimeError:
+ self.assertEqual(mock_checksummer.call_count, 0)
+ self.assertEqual(mock_run_cmd.call_count, 2)
+ self.assertEqual(mock_run_croscmd.call_count, 1)
+ self.assertEqual(mock_sleep.call_count, 1)
+ image_call_args_str = mock_run_cmd.call_args[0][0]
+ image_call_args = image_call_args_str.split(' ')
+ self.assertEqual(image_call_args[0], 'python')
+ self.assertEqual(image_call_args[1].split('/')[-1], 'image_chromeos.pyc')
+ image_call_args = image_call_args[2:]
+ self.assertEqual(image_call_args, [
+ '--chromeos_root=/tmp/chromeos-root', '--image=lumpy_chromeos_image',
+ '--image_args=', '--remote=lumpy1', '--logging_level=average',
+ '--board=lumpy'
+ ])
+ self.assertEqual(mock_run_croscmd.call_args[0][0], 'reboot && exit')
+
+ # Test 4: Everything works properly. Trybot image type.
+ ResetValues()
+ LABEL_LUMPY.image_type = 'trybot'
+ mock_run_cmd.return_value = 0
+ self.mm.ImageMachine(machine, LABEL_LUMPY)
+ self.assertEqual(mock_checksummer.call_count, 0)
+ self.assertEqual(mock_run_croscmd.call_count, 0)
+ self.assertEqual(mock_sleep.call_count, 0)
+
+ def test_compute_common_checksum(self):
+
+ self.mm.machine_checksum = {}
+ self.mm.ComputeCommonCheckSum(LABEL_LUMPY)
+ self.assertEqual(self.mm.machine_checksum['lumpy'], 'lumpy123')
+ self.assertEqual(len(self.mm.machine_checksum), 1)
+
+ self.mm.machine_checksum = {}
+ self.assertRaises(machine_manager.BadChecksum,
+ self.mm.ComputeCommonCheckSum, LABEL_MIX)
+
+ def test_compute_common_checksum_string(self):
+ self.mm.machine_checksum_string = {}
+ self.mm.ComputeCommonCheckSumString(LABEL_LUMPY)
+ self.assertEqual(len(self.mm.machine_checksum_string), 1)
+ self.assertEqual(self.mm.machine_checksum_string['lumpy'],
+ 'lumpy_checksum_str')
+
+ self.mm.machine_checksum_string = {}
+ self.mm.ComputeCommonCheckSumString(LABEL_MIX)
+ self.assertEqual(len(self.mm.machine_checksum_string), 1)
+ self.assertEqual(self.mm.machine_checksum_string['mix'],
+ 'daisy_checksum_str')
+
+ @mock.patch.object(command_executer.CommandExecuter, 'CrosRunCommandWOutput')
+ def test_try_to_lock_machine(self, mock_cros_runcmd):
+ self.assertRaises(self.mm._TryToLockMachine, None)
+
+ mock_cros_runcmd.return_value = [0, 'false_lock_checksum', '']
+ self.mock_cmd_exec.CrosRunCommandWOutput = mock_cros_runcmd
+ self.mm._machines = []
+ self.mm._TryToLockMachine(self.mock_lumpy1)
+ self.assertEqual(len(self.mm._machines), 1)
+ self.assertEqual(self.mm._machines[0], self.mock_lumpy1)
+ self.assertEqual(self.mock_lumpy1.checksum, 'false_lock_checksum')
+ self.assertEqual(mock_cros_runcmd.call_count, 1)
+ cmd_str = mock_cros_runcmd.call_args[0][0]
+ self.assertEqual(cmd_str, 'cat /usr/local/osimage_checksum_file')
+ args_dict = mock_cros_runcmd.call_args[1]
+ self.assertEqual(len(args_dict), 2)
+ self.assertEqual(args_dict['machine'], self.mock_lumpy1.name)
+ self.assertEqual(args_dict['chromeos_root'], '/usr/local/chromeos')
+
+ @mock.patch.object(machine_manager, 'CrosMachine')
+ def test_add_machine(self, mock_machine):
+
+ mock_machine.machine_checksum = 'daisy123'
+ self.assertEqual(len(self.mm._all_machines), 5)
+ self.mm.AddMachine('daisy3')
+ self.assertEqual(len(self.mm._all_machines), 6)
+
+ self.assertRaises(Exception, self.mm.AddMachine, 'lumpy1')
+
+ def test_remove_machine(self):
+ self.mm._machines = self.mm._all_machines
+ self.assertTrue(self.mock_lumpy2 in self.mm._machines)
+ self.mm.RemoveMachine(self.mock_lumpy2.name)
+ self.assertFalse(self.mock_lumpy2 in self.mm._machines)
+
+ def test_force_same_image_to_all_machines(self):
+ self.image_log = []
+
+ def FakeImageMachine(machine, label_arg):
+ image = label_arg.chromeos_image
+ self.image_log.append('Pushed %s onto %s' % (image, machine.name))
+
+ def FakeSetUpChecksumInfo():
+ pass
+
+ self.mm.ImageMachine = FakeImageMachine
+ self.mock_lumpy1.SetUpChecksumInfo = FakeSetUpChecksumInfo
+ self.mock_lumpy2.SetUpChecksumInfo = FakeSetUpChecksumInfo
+ self.mock_lumpy3.SetUpChecksumInfo = FakeSetUpChecksumInfo
+
+ self.mm.ForceSameImageToAllMachines(LABEL_LUMPY)
+ self.assertEqual(len(self.image_log), 3)
+ self.assertEqual(self.image_log[0],
+ 'Pushed lumpy_chromeos_image onto lumpy1')
+ self.assertEqual(self.image_log[1],
+ 'Pushed lumpy_chromeos_image onto lumpy2')
+ self.assertEqual(self.image_log[2],
+ 'Pushed lumpy_chromeos_image onto lumpy3')
+
+ @mock.patch.object(image_checksummer.ImageChecksummer, 'Checksum')
+ @mock.patch.object(hashlib, 'md5')
+ def test_acquire_machine(self, mock_md5, mock_checksum):
+
+ self.msgs = []
+ self.log_fatal_msgs = []
+
+ def FakeLock(machine):
+ self.msgs.append('Tried to lock %s' % machine.name)
+
+ def FakeLogFatal(msg):
+ self.log_fatal_msgs.append(msg)
+
+ self.mm._TryToLockMachine = FakeLock
+ self.mm.logger.LogFatal = FakeLogFatal
+
+ mock_md5.return_value = '123456'
+ mock_checksum.return_value = 'fake_md5_checksum'
+
+ self.mm._machines = self.mm._all_machines
+ self.mock_lumpy1.locked = True
+ self.mock_lumpy2.locked = True
+ self.mock_lumpy3.locked = False
+ self.mock_lumpy3.checksum = 'fake_md5_checksum'
+ self.mock_daisy1.locked = True
+ self.mock_daisy2.locked = False
+ self.mock_daisy2.checksum = 'fake_md5_checksum'
+
+ self.mock_lumpy1.released_time = time.time()
+ self.mock_lumpy2.released_time = time.time()
+ self.mock_lumpy3.released_time = time.time()
+ self.mock_daisy1.released_time = time.time()
+ self.mock_daisy2.released_time = time.time()
+
+ # Test 1. Basic test. Acquire lumpy3.
+ self.mm.AcquireMachine(LABEL_LUMPY)
+ m = self.mock_lumpy1
+ self.assertEqual(m, self.mock_lumpy1)
+ self.assertTrue(self.mock_lumpy1.locked)
+ self.assertEqual(mock_md5.call_count, 0)
+ self.assertEqual(self.msgs, [
+ 'Tried to lock lumpy1', 'Tried to lock lumpy2', 'Tried to lock lumpy3'
+ ])
+
+ # Test the second return statment (machine is unlocked, has no checksum)
+ save_locked = self.mock_lumpy1.locked
+ self.mock_lumpy1.locked = False
+ self.mock_lumpy1.checksum = None
+ m = self.mm.AcquireMachine(LABEL_LUMPY)
+ self.assertEqual(m, self.mock_lumpy1)
+ self.assertTrue(self.mock_lumpy1.locked)
+
+ # Test the third return statement:
+ # - machine is unlocked
+ # - checksums don't match
+ # - current time minus release time is > 20.
+ self.mock_lumpy1.locked = False
+ self.mock_lumpy1.checksum = '123'
+ self.mock_lumpy1.released_time = time.time() - 8
+ m = self.mm.AcquireMachine(LABEL_LUMPY)
+ self.assertEqual(m, self.mock_lumpy1)
+ self.assertTrue(self.mock_lumpy1.locked)
+
+ # Test all machines are already locked.
+ m = self.mm.AcquireMachine(LABEL_LUMPY)
+ self.assertIsNone(m)
+
+ # Restore values of mock_lumpy1, so other tests succeed.
+ self.mock_lumpy1.locked = save_locked
+ self.mock_lumpy1.checksum = '123'
+
+ def test_get_available_machines(self):
+ self.mm._machines = self.mm._all_machines
+
+ machine_list = self.mm.GetAvailableMachines()
+ self.assertEqual(machine_list, self.mm._all_machines)
+
+ machine_list = self.mm.GetAvailableMachines(LABEL_MIX)
+ self.assertEqual(machine_list,
+ [self.mock_daisy1, self.mock_daisy2, self.mock_lumpy3])
+
+ machine_list = self.mm.GetAvailableMachines(LABEL_LUMPY)
+ self.assertEqual(machine_list,
+ [self.mock_lumpy1, self.mock_lumpy2, self.mock_lumpy3])
+
+ def test_get_machines(self):
+ machine_list = self.mm.GetMachines()
+ self.assertEqual(machine_list, self.mm._all_machines)
+
+ machine_list = self.mm.GetMachines(LABEL_MIX)
+ self.assertEqual(machine_list,
+ [self.mock_daisy1, self.mock_daisy2, self.mock_lumpy3])
+
+ machine_list = self.mm.GetMachines(LABEL_LUMPY)
+ self.assertEqual(machine_list,
+ [self.mock_lumpy1, self.mock_lumpy2, self.mock_lumpy3])
+
+ def test_release_machines(self):
+
+ self.mm._machines = [self.mock_lumpy1, self.mock_daisy2]
+
+ self.mock_lumpy1.locked = True
+ self.mock_daisy2.locked = True
+
+ self.assertTrue(self.mock_lumpy1.locked)
+ self.mm.ReleaseMachine(self.mock_lumpy1)
+ self.assertFalse(self.mock_lumpy1.locked)
+ self.assertEqual(self.mock_lumpy1.status, 'Available')
+
+ self.assertTrue(self.mock_daisy2.locked)
+ self.mm.ReleaseMachine(self.mock_daisy2)
+ self.assertFalse(self.mock_daisy2.locked)
+ self.assertEqual(self.mock_daisy2.status, 'Available')
+
+ # Test double-relase...
+ self.assertRaises(AssertionError, self.mm.ReleaseMachine, self.mock_lumpy1)
+
+ def test_cleanup(self):
+ self.mock_logger.reset_mock()
+ self.mm.Cleanup()
+ self.assertEqual(self.mock_logger.call_count, 0)
+
+ OUTPUT_STR = ('Machine Status:\nMachine Thread '
+ 'Lock Status Checksum'
+ ' \nlumpy1 test '
+ 'run True PENDING 123'
+ ' \nlumpy2 '
+ 'test run False PENDING 123'
+ ' \nlumpy3 '
+ 'test run False PENDING 123'
+ ' \ndaisy1 '
+ 'test run False PENDING 678'
+ ' \ndaisy2 '
+ 'test run True PENDING 678'
+ ' ')
+
+ def test_as_string(self):
+
+ mock_logger = mock.Mock(spec=logger.Logger)
+
+ bench = Benchmark(
+ 'page_cycler_v2.netsim.top_10', # name
+ 'page_cycler_v2.netsim.top_10', # test_name
+ '', # test_args
+ 1, # iteratins
+ False, # rm_chroot_tmp
+ '', # perf_args
+ suite='telemetry_Crosperf') # suite
+
+ test_run = MockBenchmarkRun('test run', bench, LABEL_LUMPY, 1, [], self.mm,
+ mock_logger, 'verbose', '')
+
+ self.mm._machines = [
+ self.mock_lumpy1, self.mock_lumpy2, self.mock_lumpy3, self.mock_daisy1,
+ self.mock_daisy2
+ ]
+
+ self.mock_lumpy1.test_run = test_run
+ self.mock_lumpy2.test_run = test_run
+ self.mock_lumpy3.test_run = test_run
+ self.mock_daisy1.test_run = test_run
+ self.mock_daisy2.test_run = test_run
+
+ self.mock_lumpy1.locked = True
+ self.mock_lumpy2.locked = False
+ self.mock_lumpy3.locked = False
+ self.mock_daisy1.locked = False
+ self.mock_daisy2.locked = True
+
+ self.mock_lumpy1.checksum = '123'
+ self.mock_lumpy2.checksum = '123'
+ self.mock_lumpy3.checksum = '123'
+ self.mock_daisy1.checksum = '678'
+ self.mock_daisy2.checksum = '678'
+
+ output = self.mm.AsString()
+ self.assertEqual(output, self.OUTPUT_STR)
+
+ def test_get_all_cpu_info(self):
+ info = self.mm.GetAllCPUInfo([LABEL_LUMPY, LABEL_MIX])
+ self.assertEqual(info,
+ 'lumpy\n-------------------\nlumpy_cpu_info\n\n\nmix\n-'
+ '------------------\ndaisy_cpu_info\n\n\n')
+
+
+MEMINFO_STRING = """MemTotal: 3990332 kB
+MemFree: 2608396 kB
+Buffers: 147168 kB
+Cached: 811560 kB
+SwapCached: 0 kB
+Active: 503480 kB
+Inactive: 628572 kB
+Active(anon): 174532 kB
+Inactive(anon): 88576 kB
+Active(file): 328948 kB
+Inactive(file): 539996 kB
+Unevictable: 0 kB
+Mlocked: 0 kB
+SwapTotal: 5845212 kB
+SwapFree: 5845212 kB
+Dirty: 9384 kB
+Writeback: 0 kB
+AnonPages: 173408 kB
+Mapped: 146268 kB
+Shmem: 89676 kB
+Slab: 188260 kB
+SReclaimable: 169208 kB
+SUnreclaim: 19052 kB
+KernelStack: 2032 kB
+PageTables: 7120 kB
+NFS_Unstable: 0 kB
+Bounce: 0 kB
+WritebackTmp: 0 kB
+CommitLimit: 7840376 kB
+Committed_AS: 1082032 kB
+VmallocTotal: 34359738367 kB
+VmallocUsed: 364980 kB
+VmallocChunk: 34359369407 kB
+DirectMap4k: 45824 kB
+DirectMap2M: 4096000 kB
+"""
+
+CPUINFO_STRING = """processor: 0
+vendor_id: GenuineIntel
+cpu family: 6
+model: 42
+model name: Intel(R) Celeron(R) CPU 867 @ 1.30GHz
+stepping: 7
+microcode: 0x25
+cpu MHz: 1300.000
+cache size: 2048 KB
+physical id: 0
+siblings: 2
+core id: 0
+cpu cores: 2
+apicid: 0
+initial apicid: 0
+fpu: yes
+fpu_exception: yes
+cpuid level: 13
+wp: yes
+flags: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic popcnt tsc_deadline_timer xsave lahf_lm arat epb xsaveopt pln pts dts tpr_shadow vnmi flexpriority ept vpid
+bogomips: 2594.17
+clflush size: 64
+cache_alignment: 64
+address sizes: 36 bits physical, 48 bits virtual
+power management:
+
+processor: 1
+vendor_id: GenuineIntel
+cpu family: 6
+model: 42
+model name: Intel(R) Celeron(R) CPU 867 @ 1.30GHz
+stepping: 7
+microcode: 0x25
+cpu MHz: 1300.000
+cache size: 2048 KB
+physical id: 0
+siblings: 2
+core id: 1
+cpu cores: 2
+apicid: 2
+initial apicid: 2
+fpu: yes
+fpu_exception: yes
+cpuid level: 13
+wp: yes
+flags: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic popcnt tsc_deadline_timer xsave lahf_lm arat epb xsaveopt pln pts dts tpr_shadow vnmi flexpriority ept vpid
+bogomips: 2594.17
+clflush size: 64
+cache_alignment: 64
+address sizes: 36 bits physical, 48 bits virtual
+power management:
+"""
+
+CHECKSUM_STRING = ('processor: 0vendor_id: GenuineIntelcpu family: 6model: '
+ '42model name: Intel(R) Celeron(R) CPU 867 @ '
+ '1.30GHzstepping: 7microcode: 0x25cache size: 2048 '
+ 'KBphysical id: 0siblings: 2core id: 0cpu cores: 2apicid: '
+ '0initial apicid: 0fpu: yesfpu_exception: yescpuid level: '
+ '13wp: yesflags: fpu vme de pse tsc msr pae mce cx8 apic sep'
+ ' mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse '
+ 'sse2 ss ht tm pbe syscall nx rdtscp lm constant_tsc '
+ 'arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc '
+ 'aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx est tm2 '
+ 'ssse3 cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic popcnt '
+ 'tsc_deadline_timer xsave lahf_lm arat epb xsaveopt pln pts '
+ 'dts tpr_shadow vnmi flexpriority ept vpidclflush size: '
+ '64cache_alignment: 64address sizes: 36 bits physical, 48 '
+ 'bits virtualpower management:processor: 1vendor_id: '
+ 'GenuineIntelcpu family: 6model: 42model name: Intel(R) '
+ 'Celeron(R) CPU 867 @ 1.30GHzstepping: 7microcode: 0x25cache'
+ ' size: 2048 KBphysical id: 0siblings: 2core id: 1cpu cores:'
+ ' 2apicid: 2initial apicid: 2fpu: yesfpu_exception: yescpuid'
+ ' level: 13wp: yesflags: fpu vme de pse tsc msr pae mce cx8 '
+ 'apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx '
+ 'fxsr sse sse2 ss ht tm pbe syscall nx rdtscp lm '
+ 'constant_tsc arch_perfmon pebs bts rep_good nopl xtopology '
+ 'nonstop_tsc aperfmperf pni pclmulqdq dtes64 monitor ds_cpl '
+ 'vmx est tm2 ssse3 cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic '
+ 'popcnt tsc_deadline_timer xsave lahf_lm arat epb xsaveopt '
+ 'pln pts dts tpr_shadow vnmi flexpriority ept vpidclflush '
+ 'size: 64cache_alignment: 64address sizes: 36 bits physical,'
+ ' 48 bits virtualpower management: 4194304')
+
+DUMP_VPD_STRING = """
+"PBA_SN"="Pba.txt"
+"Product_S/N"="HT4L91SC300208"
+"serial_number"="HT4L91SC300208Z"
+"System_UUID"="12153006-1755-4f66-b410-c43758a71127"
+"shipping_country"="US"
+"initial_locale"="en-US"
+"keyboard_layout"="xkb:us::eng"
+"initial_timezone"="America/Los_Angeles"
+"MACAddress"=""
+"System_UUID"="29dd9c61-7fa1-4c83-b89a-502e7eb08afe"
+"ubind_attribute"="0c433ce7585f486730b682bb05626a12ce2d896e9b57665387f8ce2ccfdcc56d2e2f1483"
+"gbind_attribute"="7e9a851324088e269319347c6abb8d1572ec31022fa07e28998229afe8acb45c35a89b9d"
+"ActivateDate"="2013-38"
+"""
+
+IFCONFIG_STRING = """
+eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
+ inet 172.17.129.247 netmask 255.255.254.0 broadcast 172.17.129.255
+ inet6 2620:0:1000:3002:143:fed4:3ff6:279d prefixlen 64 scopeid 0x0<global>
+ inet6 2620:0:1000:3002:4459:1399:1f02:9e4c prefixlen 64 scopeid 0x0<global>
+ inet6 2620:0:1000:3002:d9e4:87b:d4ec:9a0e prefixlen 64 scopeid 0x0<global>
+ inet6 2620:0:1000:3002:7d45:23f1:ea8a:9604 prefixlen 64 scopeid 0x0<global>
+ inet6 2620:0:1000:3002:250:b6ff:fe63:db65 prefixlen 64 scopeid 0x0<global>
+ inet6 fe80::250:b6ff:fe63:db65 prefixlen 64 scopeid 0x20<link>
+ ether 00:50:b6:63:db:65 txqueuelen 1000 (Ethernet)
+ RX packets 9817166 bytes 10865181708 (10.1 GiB)
+ RX errors 194 dropped 0 overruns 0 frame 194
+ TX packets 0 bytes 2265811903 (2.1 GiB)
+ TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
+
+eth1: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
+ ether e8:03:9a:9c:50:3d txqueuelen 1000 (Ethernet)
+ RX packets 0 bytes 0 (0.0 B)
+ RX errors 0 dropped 0 overruns 0 frame 0
+ TX packets 0 bytes 0 (0.0 B)
+ TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
+
+lo: flags=73<UP,LOOPBACK,RUNNING> mtu 16436
+ inet 127.0.0.1 netmask 255.0.0.0
+ inet6 ::1 prefixlen 128 scopeid 0x10<host>
+ loop txqueuelen 0 (Local Loopback)
+ RX packets 981004 bytes 1127468524 (1.0 GiB)
+ RX errors 0 dropped 0 overruns 0 frame 0
+ TX packets 981004 bytes 1127468524 (1.0 GiB)
+ TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
+
+wlan0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
+ ether 44:6d:57:20:4a:c5 txqueuelen 1000 (Ethernet)
+ RX packets 0 bytes 0 (0.0 B)
+ RX errors 0 dropped 0 overruns 0 frame 0
+ TX packets 0 bytes 0 (0.0 B)
+ TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
+"""
+
+
+class CrosMachineTest(unittest.TestCase):
+ """Test for CrosMachine class."""
+
+ mock_cmd_exec = mock.Mock(spec=command_executer.CommandExecuter)
+
+ @mock.patch.object(machine_manager.CrosMachine, 'SetUpChecksumInfo')
+ def test_init(self, mock_setup):
+
+ cm = machine_manager.CrosMachine('daisy.cros', '/usr/local/chromeos',
+ 'average', self.mock_cmd_exec)
+ self.assertEqual(mock_setup.call_count, 1)
+ self.assertEqual(cm.chromeos_root, '/usr/local/chromeos')
+ self.assertEqual(cm.log_level, 'average')
+
+ @mock.patch.object(machine_manager.CrosMachine, 'IsReachable')
+ @mock.patch.object(machine_manager.CrosMachine, '_GetMemoryInfo')
+ @mock.patch.object(machine_manager.CrosMachine, '_GetCPUInfo')
+ @mock.patch.object(machine_manager.CrosMachine,
+ '_ComputeMachineChecksumString')
+ @mock.patch.object(machine_manager.CrosMachine, '_GetMachineID')
+ @mock.patch.object(machine_manager.CrosMachine, '_GetMD5Checksum')
+ def test_setup_checksum_info(self, mock_md5sum, mock_machineid,
+ mock_checkstring, mock_cpuinfo, mock_meminfo,
+ mock_isreachable):
+
+ # Test 1. Machine is not reachable; SetUpChecksumInfo is called via
+ # __init__.
+ mock_isreachable.return_value = False
+ mock_md5sum.return_value = 'md5_checksum'
+ cm = machine_manager.CrosMachine('daisy.cros', '/usr/local/chromeos',
+ 'average', self.mock_cmd_exec)
+ cm.checksum_string = 'This is a checksum string.'
+ cm.machine_id = 'machine_id1'
+ self.assertEqual(mock_isreachable.call_count, 1)
+ self.assertIsNone(cm.machine_checksum)
+ self.assertEqual(mock_meminfo.call_count, 0)
+
+ # Test 2. Machine is reachable. Call explicitly.
+ mock_isreachable.return_value = True
+ cm.checksum_string = 'This is a checksum string.'
+ cm.machine_id = 'machine_id1'
+ cm.SetUpChecksumInfo()
+ self.assertEqual(mock_isreachable.call_count, 2)
+ self.assertEqual(mock_meminfo.call_count, 1)
+ self.assertEqual(mock_cpuinfo.call_count, 1)
+ self.assertEqual(mock_checkstring.call_count, 1)
+ self.assertEqual(mock_machineid.call_count, 1)
+ self.assertEqual(mock_md5sum.call_count, 2)
+ self.assertEqual(cm.machine_checksum, 'md5_checksum')
+ self.assertEqual(cm.machine_id_checksum, 'md5_checksum')
+ self.assertEqual(mock_md5sum.call_args_list[0][0][0],
+ 'This is a checksum string.')
+ self.assertEqual(mock_md5sum.call_args_list[1][0][0], 'machine_id1')
+
+ @mock.patch.object(command_executer.CommandExecuter, 'CrosRunCommand')
+ @mock.patch.object(machine_manager.CrosMachine, 'SetUpChecksumInfo')
+ def test_is_reachable(self, mock_setup, mock_run_cmd):
+
+ cm = machine_manager.CrosMachine('daisy.cros', '/usr/local/chromeos',
+ 'average', self.mock_cmd_exec)
+ self.mock_cmd_exec.CrosRunCommand = mock_run_cmd
+
+ # Test 1. CrosRunCommand returns 1 (fail)
+ mock_run_cmd.return_value = 1
+ result = cm.IsReachable()
+ self.assertFalse(result)
+ self.assertEqual(mock_setup.call_count, 1)
+ self.assertEqual(mock_run_cmd.call_count, 1)
+
+ # Test 2. CrosRunCommand returns 0 (success)
+ mock_run_cmd.return_value = 0
+ result = cm.IsReachable()
+ self.assertTrue(result)
+ self.assertEqual(mock_run_cmd.call_count, 2)
+ first_args = mock_run_cmd.call_args_list[0]
+ second_args = mock_run_cmd.call_args_list[1]
+ self.assertEqual(first_args[0], second_args[0])
+ self.assertEqual(first_args[1], second_args[1])
+ self.assertEqual(len(first_args[0]), 1)
+ self.assertEqual(len(first_args[1]), 2)
+ self.assertEqual(first_args[0][0], 'ls')
+ args_dict = first_args[1]
+ self.assertEqual(args_dict['machine'], 'daisy.cros')
+ self.assertEqual(args_dict['chromeos_root'], '/usr/local/chromeos')
+
+ @mock.patch.object(machine_manager.CrosMachine, 'SetUpChecksumInfo')
+ def test_parse_memory_info(self, _mock_setup):
+ cm = machine_manager.CrosMachine('daisy.cros', '/usr/local/chromeos',
+ 'average', self.mock_cmd_exec)
+ cm.meminfo = MEMINFO_STRING
+ cm._ParseMemoryInfo()
+ self.assertEqual(cm.phys_kbytes, 4194304)
+
+ @mock.patch.object(command_executer.CommandExecuter, 'CrosRunCommandWOutput')
+ @mock.patch.object(machine_manager.CrosMachine, 'SetUpChecksumInfo')
+ def test_get_memory_info(self, _mock_setup, mock_run_cmd):
+ cm = machine_manager.CrosMachine('daisy.cros', '/usr/local/chromeos',
+ 'average', self.mock_cmd_exec)
+ self.mock_cmd_exec.CrosRunCommandWOutput = mock_run_cmd
+ mock_run_cmd.return_value = [0, MEMINFO_STRING, '']
+ cm._GetMemoryInfo()
+ self.assertEqual(mock_run_cmd.call_count, 1)
+ call_args = mock_run_cmd.call_args_list[0]
+ self.assertEqual(call_args[0][0], 'cat /proc/meminfo')
+ args_dict = call_args[1]
+ self.assertEqual(args_dict['machine'], 'daisy.cros')
+ self.assertEqual(args_dict['chromeos_root'], '/usr/local/chromeos')
+ self.assertEqual(cm.meminfo, MEMINFO_STRING)
+ self.assertEqual(cm.phys_kbytes, 4194304)
+
+ mock_run_cmd.return_value = [1, MEMINFO_STRING, '']
+ self.assertRaises(cm._GetMemoryInfo)
+
+ @mock.patch.object(command_executer.CommandExecuter, 'CrosRunCommandWOutput')
+ @mock.patch.object(machine_manager.CrosMachine, 'SetUpChecksumInfo')
+ def test_get_cpu_info(self, _mock_setup, mock_run_cmd):
+ cm = machine_manager.CrosMachine('daisy.cros', '/usr/local/chromeos',
+ 'average', self.mock_cmd_exec)
+ self.mock_cmd_exec.CrosRunCommandWOutput = mock_run_cmd
+ mock_run_cmd.return_value = [0, CPUINFO_STRING, '']
+ cm._GetCPUInfo()
+ self.assertEqual(mock_run_cmd.call_count, 1)
+ call_args = mock_run_cmd.call_args_list[0]
+ self.assertEqual(call_args[0][0], 'cat /proc/cpuinfo')
+ args_dict = call_args[1]
+ self.assertEqual(args_dict['machine'], 'daisy.cros')
+ self.assertEqual(args_dict['chromeos_root'], '/usr/local/chromeos')
+ self.assertEqual(cm.cpuinfo, CPUINFO_STRING)
+
+ @mock.patch.object(machine_manager.CrosMachine, 'SetUpChecksumInfo')
+ def test_compute_machine_checksum_string(self, _mock_setup):
+ cm = machine_manager.CrosMachine('daisy.cros', '/usr/local/chromeos',
+ 'average', self.mock_cmd_exec)
+ cm.cpuinfo = CPUINFO_STRING
+ cm.meminfo = MEMINFO_STRING
+ cm._ParseMemoryInfo()
+ cm._ComputeMachineChecksumString()
+ self.assertEqual(cm.checksum_string, CHECKSUM_STRING)
+
+ @mock.patch.object(machine_manager.CrosMachine, 'SetUpChecksumInfo')
+ def test_get_md5_checksum(self, _mock_setup):
+ cm = machine_manager.CrosMachine('daisy.cros', '/usr/local/chromeos',
+ 'average', self.mock_cmd_exec)
+ temp_str = 'abcde'
+ checksum_str = cm._GetMD5Checksum(temp_str)
+ self.assertEqual(checksum_str, 'ab56b4d92b40713acc5af89985d4b786')
+
+ temp_str = ''
+ checksum_str = cm._GetMD5Checksum(temp_str)
+ self.assertEqual(checksum_str, '')
+
+ @mock.patch.object(command_executer.CommandExecuter, 'CrosRunCommandWOutput')
+ @mock.patch.object(machine_manager.CrosMachine, 'SetUpChecksumInfo')
+ def test_get_machine_id(self, _mock_setup, mock_run_cmd):
+ cm = machine_manager.CrosMachine('daisy.cros', '/usr/local/chromeos',
+ 'average', self.mock_cmd_exec)
+ self.mock_cmd_exec.CrosRunCommandWOutput = mock_run_cmd
+ mock_run_cmd.return_value = [0, DUMP_VPD_STRING, '']
+
+ cm._GetMachineID()
+ self.assertEqual(cm.machine_id, '"Product_S/N"="HT4L91SC300208"')
+
+ mock_run_cmd.return_value = [0, IFCONFIG_STRING, '']
+ cm._GetMachineID()
+ self.assertEqual(
+ cm.machine_id,
+ ' ether 00:50:b6:63:db:65 txqueuelen 1000 (Ethernet)_ '
+ 'ether e8:03:9a:9c:50:3d txqueuelen 1000 (Ethernet)_ ether '
+ '44:6d:57:20:4a:c5 txqueuelen 1000 (Ethernet)')
+
+ mock_run_cmd.return_value = [0, 'invalid hardware config', '']
+ self.assertRaises(cm._GetMachineID)
+
+
+if __name__ == '__main__':
+ unittest.main()
diff --git a/crosperf/mock_instance.py b/crosperf/mock_instance.py
new file mode 100644
index 00000000..758108fa
--- /dev/null
+++ b/crosperf/mock_instance.py
@@ -0,0 +1,143 @@
+# Copyright (c) 2013 The Chromium OS Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+"""This contains some mock instances for testing."""
+
+from __future__ import print_function
+
+from benchmark import Benchmark
+from label import MockLabel
+
+perf_args = 'record -a -e cycles'
+label1 = MockLabel(
+ 'test1',
+ 'image1',
+ 'autotest_dir',
+ '/tmp/test_benchmark_run',
+ 'x86-alex',
+ 'chromeos-alex1',
+ image_args='',
+ cache_dir='',
+ cache_only=False,
+ log_level='average',
+ compiler='gcc')
+
+label2 = MockLabel(
+ 'test2',
+ 'image2',
+ 'autotest_dir',
+ '/tmp/test_benchmark_run_2',
+ 'x86-alex',
+ 'chromeos-alex2',
+ image_args='',
+ cache_dir='',
+ cache_only=False,
+ log_level='average',
+ compiler='gcc')
+
+benchmark1 = Benchmark('benchmark1', 'autotest_name_1', 'autotest_args', 2, '',
+ perf_args, '', '')
+
+benchmark2 = Benchmark('benchmark2', 'autotest_name_2', 'autotest_args', 2, '',
+ perf_args, '', '')
+
+keyval = {}
+keyval[0] = {
+ '': 'PASS',
+ 'milliseconds_1': '1',
+ 'milliseconds_2': '8',
+ 'milliseconds_3': '9.2',
+ 'test{1}': '2',
+ 'test{2}': '4',
+ 'ms_1': '2.1',
+ 'total': '5',
+ 'bool': 'True'
+}
+
+keyval[1] = {
+ '': 'PASS',
+ 'milliseconds_1': '3',
+ 'milliseconds_2': '5',
+ 'ms_1': '2.2',
+ 'total': '6',
+ 'test{1}': '3',
+ 'test{2}': '4',
+ 'bool': 'FALSE'
+}
+
+keyval[2] = {
+ '': 'PASS',
+ 'milliseconds_4': '30',
+ 'milliseconds_5': '50',
+ 'ms_1': '2.23',
+ 'total': '6',
+ 'test{1}': '5',
+ 'test{2}': '4',
+ 'bool': 'FALSE'
+}
+
+keyval[3] = {
+ '': 'PASS',
+ 'milliseconds_1': '3',
+ 'milliseconds_6': '7',
+ 'ms_1': '2.3',
+ 'total': '7',
+ 'test{1}': '2',
+ 'test{2}': '6',
+ 'bool': 'FALSE'
+}
+
+keyval[4] = {
+ '': 'PASS',
+ 'milliseconds_1': '3',
+ 'milliseconds_8': '6',
+ 'ms_1': '2.3',
+ 'total': '7',
+ 'test{1}': '2',
+ 'test{2}': '6',
+ 'bool': 'TRUE'
+}
+
+keyval[5] = {
+ '': 'PASS',
+ 'milliseconds_1': '3',
+ 'milliseconds_8': '6',
+ 'ms_1': '2.2',
+ 'total': '7',
+ 'test{1}': '2',
+ 'test{2}': '2',
+ 'bool': 'TRUE'
+}
+
+keyval[6] = {
+ '': 'PASS',
+ 'milliseconds_1': '3',
+ 'milliseconds_8': '6',
+ 'ms_1': '2',
+ 'total': '7',
+ 'test{1}': '2',
+ 'test{2}': '4',
+ 'bool': 'TRUE'
+}
+
+keyval[7] = {
+ '': 'PASS',
+ 'milliseconds_1': '3',
+ 'milliseconds_8': '6',
+ 'ms_1': '1',
+ 'total': '7',
+ 'test{1}': '1',
+ 'test{2}': '6',
+ 'bool': 'TRUE'
+}
+
+keyval[8] = {
+ '': 'PASS',
+ 'milliseconds_1': '3',
+ 'milliseconds_8': '6',
+ 'ms_1': '3.3',
+ 'total': '7',
+ 'test{1}': '2',
+ 'test{2}': '8',
+ 'bool': 'TRUE'
+}
diff --git a/crosperf/perf_files/perf.data.report.0 b/crosperf/perf_files/perf.data.report.0
new file mode 100644
index 00000000..910fdc44
--- /dev/null
+++ b/crosperf/perf_files/perf.data.report.0
@@ -0,0 +1,734 @@
+# To display the perf.data header info, please use --header/--header-only options.
+#
+# NOTE: this file has been manually cut into arbitrary tiny pieces. The original
+# was > 100,000 lines, and took Python a few seconds to run through. This one
+# takes almost no time, and should work just as well.
+#
+# Samples: 292K of event 'cycles'
+# Event count (approx.): 106521626675
+#
+# Overhead Samples Command Shared Object Symbol
+# ........ ............ ............... .............................. ......................
+#
+ 0.66% 3539 swapper [kernel.kallsyms] [k] 0xffffffffa4a1f1c9
+ 0.61% 1703 chrome [kernel.kallsyms] [k] 0xffffffffa4eca110
+ 0.50% 1402 chrome [kernel.kallsyms] [k] 0xffffffffa4beea47
+ 0.48% 1297 chrome perf-24199.map [.] 0x0000115bb6c35d7a
+ 0.47% 1286 chrome perf-24199.map [.] 0x0000115bb7ba9b54
+ 0.42% 1149 lsusb lsusb [.] 0x0000000000010e60
+ 0.37% 1029 chrome chrome [.] 0x0000000000e45a2b
+ 0.37% 991 chrome perf-24199.map [.] 0x0000115bb6c35d72
+ 0.28% 762 chrome perf-24199.map [.] 0x0000115bb6c35d76
+ 0.27% 735 chrome perf-24199.map [.] 0x0000115bb6aa463a
+ 0.22% 608 chrome perf-24199.map [.] 0x0000115bb7ba9ebf
+ 0.17% 468 chrome perf-24199.map [.] 0x0000115bb6a7afc3
+ 0.17% 503 chrome [kernel.kallsyms] [k] 0xffffffffa4bf4c3d
+ 0.17% 450 chrome perf-24199.map [.] 0x0000115bb6af7457
+ 0.16% 444 chrome perf-24199.map [.] 0x0000115bb7c6edd1
+ 0.16% 438 chrome perf-24199.map [.] 0x0000115bb7c6f93d
+ 0.15% 420 chrome perf-24199.map [.] 0x0000115bb6af744b
+ 0.15% 414 chrome perf-24199.map [.] 0x0000115bb7c6fa42
+ 0.15% 405 chrome perf-24199.map [.] 0x0000115bb6af7430
+ 0.15% 398 chrome perf-24199.map [.] 0x0000115bb6af7421
+ 0.15% 396 chrome perf-24199.map [.] 0x0000115bb6af7438
+ 0.15% 396 chrome perf-24199.map [.] 0x0000115bb6af742b
+ 0.14% 437 chrome chrome [.] 0x0000000005d10b64
+ 0.14% 385 chrome perf-24199.map [.] 0x0000115bb7c6f9e5
+ 0.14% 371 chrome perf-24199.map [.] 0x0000115bb6af7418
+ 0.14% 369 chrome perf-24199.map [.] 0x0000115bb6af73f9
+ 0.14% 369 chrome perf-24199.map [.] 0x0000115bb5d21648
+ 0.13% 363 chrome perf-24199.map [.] 0x0000115bb6af7428
+ 0.13% 358 chrome perf-24199.map [.] 0x0000115bb6b80e03
+ 0.13% 343 chrome perf-24199.map [.] 0x0000115bb6af73fc
+ 0.13% 344 chrome chrome [.] 0x0000000000e55b20
+ 0.12% 338 chrome chrome [.] 0x00000000011d1cb0
+ 0.12% 317 chrome perf-24199.map [.] 0x0000115bb6aa469c
+ 0.11% 311 chrome perf-24199.map [.] 0x0000115bb6af73f6
+ 0.11% 315 chrome chrome [.] 0x0000000000e48e65
+ 0.11% 310 chrome perf-24199.map [.] 0x0000115bb6af73dc
+ 0.11% 309 chrome perf-24199.map [.] 0x0000115bb6af73cc
+ 0.11% 303 chrome perf-24199.map [.] 0x0000115bb5d21662
+ 0.11% 302 chrome perf-24199.map [.] 0x0000115bb5d29f6a
+ 0.11% 295 chrome perf-24199.map [.] 0x0000115bb6af7382
+ 0.11% 295 chrome perf-24199.map [.] 0x0000115bb6c35d1d
+ 0.11% 294 chrome perf-24199.map [.] 0x0000115bb6c35d99
+ 0.11% 293 chrome perf-24199.map [.] 0x0000115bb6c35cec
+ 0.11% 292 chrome perf-24199.map [.] 0x0000115bb6af73bc
+ 0.10% 285 chrome chrome [.] 0x0000000000e46990
+ 0.10% 283 chrome perf-24199.map [.] 0x0000115bb6af7465
+ 0.10% 282 chrome perf-24199.map [.] 0x0000115bb6aa4699
+ 0.10% 276 chrome perf-24199.map [.] 0x0000115bb6c35d2e
+ 0.10% 274 chrome perf-24199.map [.] 0x0000115bb6c35d6e
+ 0.10% 273 chrome perf-24199.map [.] 0x0000115bb6af73f0
+ 0.10% 268 chrome perf-24199.map [.] 0x0000115bb7ba9ecb
+ 0.10% 266 chrome perf-24199.map [.] 0x0000115bb6af73a1
+ 0.10% 262 chrome perf-24199.map [.] 0x0000115bb6c35d57
+ 0.09% 286 chrome [kernel.kallsyms] [k] 0xffffffffa4bef022
+ 0.09% 256 chrome chrome [.] 0x0000000000e6fa2b
+ 0.09% 249 chrome perf-24199.map [.] 0x0000115bb6c35d47
+ 0.09% 248 chrome perf-24199.map [.] 0x0000115bb6af73e6
+ 0.09% 247 chrome perf-24199.map [.] 0x0000115bb6c35d8d
+ 0.09% 240 chrome perf-24199.map [.] 0x0000115bb6a7b6e7
+ 0.09% 240 chrome perf-24199.map [.] 0x0000115bb6c35d81
+ 0.09% 233 chrome perf-24199.map [.] 0x0000115bb7ba9e8c
+ 0.09% 233 chrome perf-24199.map [.] 0x0000115bb6c35d02
+ 0.08% 230 chrome perf-24199.map [.] 0x0000115bb5d09f68
+ 0.08% 228 chrome chrome [.] 0x0000000000e45adc
+ 0.08% 232 swapper [kernel.kallsyms] [k] 0xffffffffa4dccf94
+ 0.08% 222 chrome perf-24199.map [.] 0x0000115bb7bed938
+ 0.08% 222 chrome perf-24199.map [.] 0x0000115bb5d0a372
+ 0.08% 338 python [kernel.kallsyms] [k] 0xffffffffa4eca110
+ 0.08% 218 chrome perf-24199.map [.] 0x0000115bb7ba9b5d
+ 0.08% 215 chrome perf-24199.map [.] 0x0000115bb7ba9ea8
+ 0.08% 246 python [kernel.kallsyms] [k] 0xffffffffa4ad6f19
+ 0.08% 216 swapper [kernel.kallsyms] [k] 0xffffffffa4dccfa1
+ 0.08% 206 lsusb lsusb [.] 0x0000000000010e63
+ 0.08% 207 chrome chrome [.] 0x0000000000e4596c
+ 0.07% 204 chrome perf-24199.map [.] 0x0000115bb5d29dd4
+ 0.07% 202 chrome perf-24199.map [.] 0x0000115bb6b25330
+ 0.07% 199 chrome perf-24199.map [.] 0x0000115bb6b25338
+ 0.07% 198 chrome perf-24199.map [.] 0x0000115bb5d1726d
+ 0.07% 194 chrome perf-24199.map [.] 0x0000115bb6a7b07c
+ 0.07% 214 chrome chrome [.] 0x0000000005d10e5e
+ 0.07% 187 chrome perf-24199.map [.] 0x0000115bb7ba9b69
+ 0.07% 188 chrome perf-24199.map [.] 0x0000115bb5d1728e
+ 0.07% 187 chrome perf-24199.map [.] 0x0000115bb6b80dfe
+ 0.07% 179 chrome perf-24199.map [.] 0x0000115bb7bed940
+ 0.07% 179 chrome perf-24199.map [.] 0x0000115bb5d0a36e
+ 0.06% 176 chrome chrome [.] 0x0000000000e75fe4
+ 0.06% 181 chrome chrome [.] 0x00000000023fd480
+ 0.06% 172 chrome perf-24199.map [.] 0x0000115bb6af73e9
+ 0.06% 170 chrome perf-24199.map [.] 0x0000115bb6a7b6fe
+ 0.06% 177 swapper [kernel.kallsyms] [k] 0xffffffffa4dccf9b
+ 0.06% 168 chrome chrome [.] 0x0000000000e45aff
+ 0.06% 166 chrome perf-24199.map [.] 0x0000115bb6b25340
+ 0.06% 175 chrome [kernel.kallsyms] [k] 0xffffffffa4ac31c3
+ 0.06% 163 chrome chrome [.] 0x0000000000e4fcb8
+ 0.06% 160 chrome perf-24199.map [.] 0x0000115bb6a7afbb
+ 0.06% 160 chrome chrome [.] 0x0000000000e54d5c
+ 0.06% 156 chrome perf-24199.map [.] 0x0000115bb6a7af9f
+ 0.06% 157 chrome perf-24199.map [.] 0x0000115bb5d29daf
+ 0.06% 156 chrome perf-24199.map [.] 0x0000115bb5d21656
+ 0.06% 172 chrome chrome [.] 0x0000000005d10b5b
+ 0.06% 156 chrome perf-24199.map [.] 0x0000115bb6aa4662
+ 0.06% 155 chrome perf-24199.map [.] 0x0000115bb7bed932
+ 0.06% 155 chrome perf-24199.map [.] 0x0000115bb6b82327
+ 0.05% 149 chrome perf-24199.map [.] 0x0000115bb7ba9ede
+ 0.05% 146 chrome perf-24199.map [.] 0x0000115bb6aa45f8
+ 0.05% 145 chrome perf-24199.map [.] 0x0000115bb6aa460e
+ 0.05% 153 chrome chrome [.] 0x0000000000cb7030
+ 0.05% 142 chrome perf-24199.map [.] 0x0000115bb7ba9b18
+ 0.05% 143 chrome chrome [.] 0x0000000000f13e9c
+ 0.05% 143 chrome perf-24199.map [.] 0x0000115bb6b2530a
+ 0.05% 141 chrome chrome [.] 0x0000000000e18c45
+ 0.05% 138 chrome perf-24199.map [.] 0x0000115bb6ca5090
+ 0.05% 211 python [kernel.kallsyms] [k] 0xffffffffa4ae14fd
+ 0.05% 137 chrome perf-24199.map [.] 0x0000115bb6aa4692
+ 0.05% 137 chrome perf-24199.map [.] 0x0000115bb6aa4626
+ 0.05% 136 chrome perf-24199.map [.] 0x0000115bb7ba9ed2
+ 0.05% 196 python [kernel.kallsyms] [k] 0xffffffffa4beeac5
+ 0.05% 133 chrome perf-24199.map [.] 0x0000115bb6ca5109
+ 0.05% 132 chrome perf-24199.map [.] 0x0000115bb7ba9b42
+ 0.05% 132 chrome perf-24199.map [.] 0x0000115bb6b8230f
+ 0.05% 132 chrome perf-24199.map [.] 0x0000115bb5d215e5
+ 0.05% 131 chrome perf-24199.map [.] 0x0000115bb7c6fa0a
+ 0.05% 149 chrome libpthread-2.19.so [.] 0x000000000000b471
+ 0.05% 130 chrome perf-24199.map [.] 0x0000115bb6aa4678
+ 0.05% 133 chrome libc-2.19.so [.] 0x0000000000088b72
+ 0.01% 16 chrome perf-24199.map [.] 0x0000115bb6c4c692
+ 0.01% 16 chrome perf-24199.map [.] 0x0000115bb6a7b4bc
+ 0.01% 16 chrome perf-24199.map [.] 0x0000115bb7bba146
+ 0.01% 16 chrome perf-24199.map [.] 0x0000115bb7ba9e83
+ 0.01% 16 chrome perf-24199.map [.] 0x0000115bb7ba9dde
+ 0.01% 16 chrome perf-24199.map [.] 0x0000115bb6c4c713
+ 0.01% 16 chrome perf-24199.map [.] 0x0000115bb6a7b197
+ 0.01% 16 keygen libfreebl3.so [.] 0x000000000005bc62
+ 0.01% 16 chrome perf-24199.map [.] 0x0000115bb6ae766b
+ 0.01% 16 chrome perf-24199.map [.] 0x0000115bb6c4c6ef
+ 0.01% 16 chrome perf-24199.map [.] 0x0000115bb6c4e9ef
+ 0.01% 16 chrome perf-24199.map [.] 0x0000115bb6c4c0ba
+ 0.01% 16 chrome perf-24199.map [.] 0x0000115bb6a78053
+ 0.01% 16 chrome chrome [.] 0x0000000000e73bb0
+ 0.01% 16 chrome perf-24199.map [.] 0x0000115bb6c36bee
+ 0.01% 16 chrome perf-24199.map [.] 0x0000115bb6c3979b
+ 0.01% 16 chrome perf-24199.map [.] 0x0000115bb6c4e93b
+ 0.01% 16 chrome perf-24199.map [.] 0x0000115bb6af73bf
+ 0.01% 16 chrome perf-24199.map [.] 0x0000115bb6b814a7
+ 0.01% 16 chrome perf-24199.map [.] 0x0000115bb6a7b6cd
+ 0.01% 16 chrome perf-24199.map [.] 0x0000115bb6af73c5
+ 0.01% 16 chrome perf-24199.map [.] 0x0000115bb6b8147d
+ 0.01% 16 chrome perf-24199.map [.] 0x0000115bb6b8216b
+ 0.01% 16 chrome perf-24199.map [.] 0x0000115bb6b80dc6
+ 0.01% 16 chrome perf-24199.map [.] 0x0000115bb6ba1724
+ 0.01% 16 chrome chrome [.] 0x000000000254788e
+ 0.01% 16 chrome perf-24199.map [.] 0x0000115bb6b81ed9
+ 0.01% 16 chrome perf-24199.map [.] 0x0000115bb5d27a01
+ 0.00% 1 swapper [kernel.kallsyms] [k] 0xffffffffa4a09503
+ 0.00% 1 rcu_sched [kernel.kallsyms] [k] 0xffffffffa4a63d39
+ 0.00% 1 swapper [kernel.kallsyms] [k] 0xffffffffa4a65090
+ 0.00% 1 swapper [kernel.kallsyms] [k] 0xffffffffa4dcd1c3
+ 0.00% 1 swapper [kernel.kallsyms] [k] 0xffffffffa4a544b0
+ 0.00% 1 swapper [kernel.kallsyms] [k] 0xffffffffa4a54f5b
+ 0.00% 1 chrome [kernel.kallsyms] [k] 0xffffffffa4ec8bec
+ 0.00% 1 swapper [kernel.kallsyms] [k] 0xffffffffa4c532e4
+ 0.00% 1 chrome [kernel.kallsyms] [k] 0xffffffffa4a00e4c
+ 0.00% 1 chrome [kernel.kallsyms] [k] 0xffffffffa4a63e67
+ 0.00% 1 chrome [kernel.kallsyms] [k] 0xffffffffa4ec855a
+ 0.00% 1 mtpd [kernel.kallsyms] [k] 0xffffffffa4a0cb13
+ 0.00% 1 chrome [kernel.kallsyms] [k] 0xffffffffa4a00dee
+ 0.00% 1 swapper [kernel.kallsyms] [k] 0xffffffffa4a5d3a2
+ 0.00% 1 swapper [kernel.kallsyms] [k] 0xffffffffa4a66eba
+ 0.00% 1 swapper [kernel.kallsyms] [k] 0xffffffffa4bea29e
+ 0.00% 1 swapper [kernel.kallsyms] [k] 0xffffffffa4a545c4
+ 0.00% 1 chrome [kernel.kallsyms] [k] 0xffffffffa4a62fcf
+ 0.00% 1 chrome [kernel.kallsyms] [k] 0xffffffffa4cc8948
+ 0.00% 1 swapper [kernel.kallsyms] [k] 0xffffffffa4ec9b33
+ 0.00% 1 swapper [kernel.kallsyms] [k] 0xffffffffa4ec8911
+ 0.00% 1 chrome [kernel.kallsyms] [k] 0xffffffffa4a64bf8
+ 0.00% 1 swapper [kernel.kallsyms] [k] 0xffffffffa4a00e4c
+ 0.00% 1 rcu_sched [kernel.kallsyms] [k] 0xffffffffa4a63d0c
+ 0.00% 1 swapper [kernel.kallsyms] [k] 0xffffffffa4bea29a
+ 0.00% 1 swapper [kernel.kallsyms] [k] 0xffffffffa4a75623
+ 0.00% 1 chrome [kernel.kallsyms] [k] 0xffffffffa4a5d435
+ 0.00% 1 chrome [kernel.kallsyms] [k] 0xffffffffa4a546cf
+ 0.00% 1 chrome [kernel.kallsyms] [k] 0xffffffffa4bec12d
+ 0.00% 1 rcu_sched [kernel.kallsyms] [k] 0xffffffffa4a66db1
+ 0.00% 1 chrome [kernel.kallsyms] [k] 0xffffffffa4ec855b
+ 0.00% 1 swapper [kernel.kallsyms] [k] 0xffffffffa4a6394d
+ 0.00% 1 dbus-daemon [kernel.kallsyms] [k] 0xffffffffa4ded832
+ 0.00% 1 swapper [kernel.kallsyms] [k] 0xffffffffa4a638c4
+ 0.00% 1 swapper [kernel.kallsyms] [k] 0xffffffffa4a1fc16
+ 0.00% 1 swapper [kernel.kallsyms] [k] 0xffffffffa4a75810
+ 0.00% 1 swapper [kernel.kallsyms] [k] 0xffffffffa4a92368
+ 0.00% 1 swapper [kernel.kallsyms] [k] 0xffffffffa4a23893
+ 0.00% 1 chrome [kernel.kallsyms] [k] 0xffffffffa4a00e17
+ 0.00% 1 rcu_sched [kernel.kallsyms] [k] 0xffffffffa4a679aa
+ 0.00% 1 swapper [kernel.kallsyms] [k] 0xffffffffa4a6e743
+ 0.00% 1 disks  [.] 0x00000000000e9fc7
+ 0.00% 1 swapper [kernel.kallsyms] [k] 0xffffffffa4a55032
+ 0.00% 1 swapper [kernel.kallsyms] [k] 0xffffffffa4a58dc9
+ 0.00% 1 rcu_sched [kernel.kallsyms] [k] 0xffffffffa4a6646c
+ 0.00% 1 swapper [kernel.kallsyms] [k] 0xffffffffa4a65163
+ 0.00% 1 chrome [kernel.kallsyms] [k] 0xffffffffa4ec84f8
+ 0.00% 1 chrome [kernel.kallsyms] [k] 0xffffffffa4a54e31
+ 0.00% 1 rcu_sched [kernel.kallsyms] [k] 0xffffffffa4a63e17
+ 0.00% 1 chrome [kernel.kallsyms] [k] 0xffffffffa4ec8435
+ 0.00% 1 rcu_sched [kernel.kallsyms] [k] 0xffffffffa4bf4d14
+ 0.00% 1 swapper [kernel.kallsyms] [k] 0xffffffffa4a3909e
+ 0.00% 1 dbus-daemon [kernel.kallsyms] [k] 0xffffffffa4bef0f0
+ 0.00% 1 disks  [.] 0x0000000000082e08
+ 0.00% 1 swapper [kernel.kallsyms] [k] 0xffffffffa4dce5a5
+ 0.00% 1 swapper [kernel.kallsyms] [k] 0xffffffffa4a66a5c
+ 0.00% 1 rsync [kernel.kallsyms] [k] 0xffffffffa4bbaa3c
+ 0.00% 1 swapper [kernel.kallsyms] [k] 0xffffffffa4a1feea
+ 0.00% 1 swapper [kernel.kallsyms] [k] 0xffffffffa4a5de3a
+ 0.00% 1 swapper [kernel.kallsyms] [k] 0xffffffffa4a38e6b
+ 0.00% 1 swapper [kernel.kallsyms] [k] 0xffffffffa4a2cb16
+ 0.00% 1 swapper [kernel.kallsyms] [k] 0xffffffffa4a7a32f
+ 0.00% 5 perf [kernel.kallsyms] [k] 0xffffffffa4a13e63
+
+
+# Samples: 266K of event 'instructions'
+# Event count (approx.): 154627854320
+#
+# Overhead Samples Command Shared Object Symbol
+# ........ ............ ............... .......................... ......................
+#
+ 1.65% 2882 chrome perf-24199.map [.] 0x0000115bb6c35d7a
+ 0.67% 987 chrome perf-24199.map [.] 0x0000115bb7ba9b54
+ 0.51% 663 chrome perf-24199.map [.] 0x0000115bb6af7457
+ 0.45% 592 chrome perf-24199.map [.] 0x0000115bb6af744b
+ 0.45% 660 chrome perf-24199.map [.] 0x0000115bb7ba9ebf
+ 0.44% 581 chrome perf-24199.map [.] 0x0000115bb6af7438
+ 0.39% 576 chrome perf-24199.map [.] 0x0000115bb7c6f9e5
+ 0.37% 488 chrome perf-24199.map [.] 0x0000115bb6af7430
+ 0.34% 499 chrome perf-24199.map [.] 0x0000115bb7c6f93d
+ 0.33% 575 chrome perf-24199.map [.] 0x0000115bb6c35d81
+ 0.33% 573 chrome perf-24199.map [.] 0x0000115bb6c35d99
+ 0.32% 420 chrome perf-24199.map [.] 0x0000115bb6af742b
+ 0.30% 391 chrome perf-24199.map [.] 0x0000115bb6af7465
+ 0.29% 503 chrome perf-24199.map [.] 0x0000115bb6c35d76
+ 0.29% 377 chrome perf-24199.map [.] 0x0000115bb6af73f0
+ 0.28% 492 chrome perf-24199.map [.] 0x0000115bb6a7afc3
+ 0.28% 373 chrome perf-24199.map [.] 0x0000115bb6af7428
+ 0.27% 361 chrome perf-24199.map [.] 0x0000115bb6af7382
+ 0.27% 361 chrome perf-24199.map [.] 0x0000115bb6af73f9
+ 0.27% 360 chrome perf-24199.map [.] 0x0000115bb6af73a1
+ 0.27% 464 chrome perf-24199.map [.] 0x0000115bb6c35d8d
+ 0.24% 318 chrome perf-24199.map [.] 0x0000115bb6af7421
+ 0.24% 425 chrome perf-24199.map [.] 0x0000115bb6b80e03
+ 0.24% 314 chrome perf-24199.map [.] 0x0000115bb6af73f6
+ 0.24% 345 chrome perf-24199.map [.] 0x0000115bb7c6fa42
+ 0.23% 338 chrome perf-24199.map [.] 0x0000115bb7c6edd1
+ 0.21% 315 chrome perf-24199.map [.] 0x0000115bb7ba9ecb
+ 0.21% 279 chrome perf-24199.map [.] 0x0000115bb6af7418
+ 0.21% 277 chrome perf-24199.map [.] 0x0000115bb6af73bc
+ 0.21% 304 chrome perf-24199.map [.] 0x0000115bb7ba9ea8
+ 0.20% 534 chrome perf-24199.map [.] 0x0000115bb5d21648
+ 0.18% 238 chrome perf-24199.map [.] 0x0000115bb6af73e6
+ 0.17% 227 chrome perf-24199.map [.] 0x0000115bb6af73fc
+ 0.17% 241 chrome perf-24199.map [.] 0x0000115bb7ba9b5d
+ 0.16% 240 chrome perf-24199.map [.] 0x0000115bb7ba9b10
+ 0.16% 285 chrome perf-24199.map [.] 0x0000115bb6a7b07c
+ 0.15% 205 chrome perf-24199.map [.] 0x0000115bb6af73dc
+ 0.15% 290 chrome perf-24199.map [.] 0x0000115bb6aa460e
+ 0.15% 223 chrome perf-24199.map [.] 0x0000115bb7ba9b69
+ 0.15% 194 chrome perf-24199.map [.] 0x0000115bb6af73cc
+ 0.15% 191 chrome perf-24199.map [.] 0x0000115bb6af974c
+ 0.14% 185 chrome perf-24199.map [.] 0x0000115bb6af7461
+ 0.14% 204 chrome perf-24199.map [.] 0x0000115bb7bed940
+ 0.14% 368 chrome perf-24199.map [.] 0x0000115bb5d21662
+ 0.14% 230 chrome perf-24199.map [.] 0x0000115bb6a7b412
+ 0.14% 199 chrome perf-24199.map [.] 0x0000115bb7ba9ed2
+ 0.13% 197 chrome perf-24199.map [.] 0x0000115bb7ba9ede
+ 0.13% 255 chrome perf-24199.map [.] 0x0000115bb6aa463a
+ 0.13% 191 chrome perf-24199.map [.] 0x0000115bb7ba9e8c
+ 0.13% 187 chrome perf-24199.map [.] 0x0000115bb7c6f9cb
+ 0.13% 242 chrome perf-24199.map [.] 0x0000115bb6aa4678
+ 0.13% 165 chrome perf-24199.map [.] 0x0000115bb6af975e
+ 0.13% 222 chrome perf-24199.map [.] 0x0000115bb6b80dfe
+ 0.12% 163 chrome perf-24199.map [.] 0x0000115bb6af9746
+ 0.12% 234 chrome perf-24199.map [.] 0x0000115bb6aa4692
+ 0.12% 178 chrome perf-24199.map [.] 0x0000115bb7c6ed55
+ 0.12% 157 chrome perf-24199.map [.] 0x0000115bb6af96f4
+ 0.12% 154 chrome perf-24199.map [.] 0x0000115bb6af9737
+ 0.12% 173 chrome perf-24199.map [.] 0x0000115bb7c6fa73
+ 0.12% 171 chrome perf-24199.map [.] 0x0000115bb7c6fa5e
+ 0.12% 200 chrome perf-24199.map [.] 0x0000115bb6a7afbb
+ 0.12% 199 chrome perf-24199.map [.] 0x0000115bb6a7b6fe
+ 0.12% 169 chrome perf-24199.map [.] 0x0000115bb7c6f8f2
+ 0.11% 148 chrome perf-24199.map [.] 0x0000115bb6af737e
+ 0.11% 205 chrome libc-2.19.so [.] 0x0000000000088b72
+ 0.11% 212 chrome perf-24199.map [.] 0x0000115bb6aa469c
+ 0.11% 160 chrome perf-24199.map [.] 0x0000115bb7c6f8d0
+ 0.11% 204 chrome perf-24199.map [.] 0x0000115bb6aa4626
+ 0.11% 160 chrome perf-24199.map [.] 0x0000115bb7bed932
+ 0.11% 154 chrome perf-24199.map [.] 0x0000115bb7ba9b18
+ 0.11% 137 chrome perf-24199.map [.] 0x0000115bb6af972f
+ 0.10% 153 chrome perf-24199.map [.] 0x0000115bb7c6f9f9
+ 0.10% 136 chrome perf-24199.map [.] 0x0000115bb6af7394
+ 0.10% 238 chrome chrome [.] 0x0000000000e45adc
+ 0.10% 131 chrome perf-24199.map [.] 0x0000115bb6af977d
+ 0.10% 146 chrome perf-24199.map [.] 0x0000115bb7c6f907
+ 0.10% 171 chrome perf-24199.map [.] 0x0000115bb6a7b6e7
+ 0.10% 144 chrome perf-24199.map [.] 0x0000115bb7c6f9e1
+ 0.10% 128 chrome perf-24199.map [.] 0x0000115bb6af9732
+ 0.10% 256 chrome perf-24199.map [.] 0x0000115bb5d21656
+ 0.10% 142 chrome perf-24199.map [.] 0x0000115bb7c6f9b1
+ 0.10% 181 chrome perf-24199.map [.] 0x0000115bb6aa464e
+ 0.10% 147 chrome perf-24199.map [.] 0x0000115bb7bf5700
+ 0.10% 181 chrome perf-24199.map [.] 0x0000115bb6aa4662
+ 0.09% 161 chrome perf-24199.map [.] 0x0000115bb6a7af9f
+ 0.09% 136 chrome perf-24199.map [.] 0x0000115bb7c6f216
+ 0.09% 159 chrome perf-24199.map [.] 0x0000115bb6a7b377
+ 0.09% 228 chrome perf-24199.map [.] 0x0000115bb5d0a372
+ 0.09% 118 chrome perf-24199.map [.] 0x0000115bb6af9769
+ 0.09% 117 chrome perf-24199.map [.] 0x0000115bb6af96f2
+ 0.09% 336 chrome perf-24199.map [.] 0x0000115bb5d1726d
+ 0.09% 193 chrome chrome [.] 0x0000000000e76562
+ 0.09% 117 chrome perf-24199.map [.] 0x0000115bb6add6ed
+ 0.09% 219 chrome chrome [.] 0x0000000000e45a2b
+ 0.09% 148 chrome perf-24199.map [.] 0x0000115bb6a7afc9
+ 0.08% 111 chrome perf-24199.map [.] 0x0000115bb6af972a
+ 0.08% 158 chrome perf-24199.map [.] 0x0000115bb6aa45f8
+ 0.08% 145 chrome perf-24199.map [.] 0x0000115bb6a7afed
+ 0.08% 112 chrome perf-24199.map [.] 0x0000115bb6af73b8
+ 0.08% 107 chrome perf-24199.map [.] 0x0000115bb6af9707
+ 0.08% 118 chrome perf-24199.map [.] 0x0000115bb7ba9b3a
+ 0.08% 138 chrome perf-24199.map [.] 0x0000115bb6a785c9
+ 0.08% 117 chrome perf-24199.map [.] 0x0000115bb7c6ed3e
+ 0.08% 142 chrome perf-24199.map [.] 0x0000115bb6b81e10
+ 0.08% 106 chrome perf-24199.map [.] 0x0000115bb6af73e3
+ 0.08% 154 chrome chrome [.] 0x0000000000eb5472
+ 0.08% 116 chrome perf-24199.map [.] 0x0000115bb7bed9b6
+ 0.08% 287 chrome perf-24199.map [.] 0x0000115bb5d29f6a
+ 0.08% 199 chrome chrome [.] 0x0000000000e6fa2b
+ 0.08% 218 chrome chrome [.] 0x0000000000e55b20
+ 0.08% 110 chrome perf-24199.map [.] 0x0000115bb7c6f925
+ 0.07% 112 chrome perf-24199.map [.] 0x0000115bb7bb53c2
+ 0.07% 107 chrome perf-24199.map [.] 0x0000115bb7c6f92d
+ 0.07% 155 chrome perf-24199.map [.] 0x0000115bb5d2640e
+ 0.07% 127 chrome perf-24199.map [.] 0x0000115bb6c35d72
+ 0.07% 124 chrome perf-24199.map [.] 0x0000115bb6a78284
+ 0.07% 107 chrome perf-24199.map [.] 0x0000115bb7bed990
+ 0.07% 421 python [kernel.kallsyms] [k] 0xffffffffa4ae14fd
+ 0.07% 93 chrome perf-24199.map [.] 0x0000115bb6af73e9
+ 0.07% 104 chrome perf-24199.map [.] 0x0000115bb7bed938
+ 0.07% 158 chrome perf-24199.map [.] 0x0000115bb6b57933
+ 0.07% 100 chrome perf-24199.map [.] 0x0000115bb7c6f96b
+ 0.07% 123 chrome perf-24199.map [.] 0x0000115bb6b8230f
+ 0.07% 101 chrome perf-24199.map [.] 0x0000115bb7bed9bf
+ 0.07% 102 chrome perf-24199.map [.] 0x0000115bb7bb53df
+ 0.07% 144 chrome perf-24199.map [.] 0x0000115bb6b2530a
+ 0.07% 91 chrome perf-24199.map [.] 0x0000115bb6add73f
+ 0.07% 89 chrome perf-24199.map [.] 0x0000115bb6add762
+ 0.07% 98 chrome perf-24199.map [.] 0x0000115bb7bed926
+ 0.06% 85 chrome perf-24199.map [.] 0x0000115bb6af96a7
+ 0.06% 129 chrome perf-24199.map [.] 0x0000115bb6aa4699
+ 0.06% 112 chrome perf-24199.map [.] 0x0000115bb6c35d47
+ 0.06% 295 chrome chrome [.] 0x00000000011d1cb0
+ 0.06% 114 chrome perf-24199.map [.] 0x0000115bb6b822b1
+ 0.06% 94 chrome perf-24199.map [.] 0x0000115bb7bed99d
+ 0.06% 94 chrome perf-24199.map [.] 0x0000115bb7bb53f2
+ 0.06% 92 chrome perf-24199.map [.] 0x0000115bb7ba9b86
+ 0.06% 92 chrome perf-24199.map [.] 0x0000115bb7ba9b29
+ 0.06% 88 chrome perf-24199.map [.] 0x0000115bb6e14f87
+ 0.06% 80 chrome perf-24199.map [.] 0x0000115bb6af9722
+ 0.06% 109 chrome perf-24199.map [.] 0x0000115bb6b8238a
+ 0.06% 93 chrome perf-24199.map [.] 0x0000115bb7ba71a3
+ 0.06% 80 chrome perf-24199.map [.] 0x0000115bb6af747f
+ 0.06% 107 chrome perf-24199.map [.] 0x0000115bb6b80e22
+ 0.06% 104 chrome perf-24199.map [.] 0x0000115bb6a72466
+ 0.06% 78 chrome perf-24199.map [.] 0x0000115bb6add757
+ 0.06% 80 chrome perf-24199.map [.] 0x0000115bb6add745
+ 0.06% 102 chrome perf-24199.map [.] 0x0000115bb6c35cec
+ 0.06% 202 chrome chrome [.] 0x0000000000f13e9c
+ 0.06% 166 chrome chrome [.] 0x0000000000e46989
+ 0.06% 318 python [kernel.kallsyms] [k] 0xffffffffa4ad6f19
+ 0.06% 83 chrome perf-24199.map [.] 0x0000115bb7c6f97d
+ 0.06% 77 chrome perf-24199.map [.] 0x0000115bb6add730
+ 0.06% 82 chrome perf-24199.map [.] 0x0000115bb7c6f992
+ 0.06% 132 chrome perf-24199.map [.] 0x0000115bb5d417f2
+ 0.06% 76 chrome perf-24199.map [.] 0x0000115bb6add728
+ 0.06% 72 chrome perf-24199.map [.] 0x0000115bb6af9702
+ 0.06% 94 chrome perf-24199.map [.] 0x0000115bb6c4ea18
+ 0.06% 321 chrome [kernel.kallsyms] [k] 0xffffffffa4bf4c3d
+ 0.06% 139 chrome perf-24199.map [.] 0x0000115bb5d21666
+ 0.06% 72 chrome perf-24199.map [.] 0x0000115bb6af9684
+ 0.06% 78 chrome perf-24199.map [.] 0x0000115bb6add6a0
+ 0.05% 72 chrome perf-24199.map [.] 0x0000115bb6af73c8
+ 0.05% 137 chrome perf-24199.map [.] 0x0000115bb5d0a36e
+ 0.05% 97 chrome perf-24199.map [.] 0x0000115bb6b82327
+ 0.05% 70 chrome perf-24199.map [.] 0x0000115bb6b06516
+ 0.05% 137 chrome chrome [.] 0x0000000000e6fa1c
+ 0.05% 132 chrome perf-24199.map [.] 0x0000115bb5d21629
+ 0.05% 130 chrome chrome [.] 0x0000000000e54d5c
+ 0.05% 122 chrome chrome [.] 0x0000000000e48e5f
+ 0.05% 839 lsusb lsusb [.] 0x0000000000010e60
+ 0.05% 133 chrome perf-24199.map [.] 0x0000115bb5d215dd
+ 0.05% 130 chrome perf-24199.map [.] 0x0000115bb5d215c9
+ 0.05% 130 chrome perf-24199.map [.] 0x0000115bb78d3895
+ 0.05% 76 chrome perf-24199.map [.] 0x0000115bb7c6f174
+ 0.01% 46 chrome chrome [.] 0x0000000005d109a9
+ 0.01% 15 chrome perf-24199.map [.] 0x0000115bb6aa5665
+ 0.01% 17 chrome chrome [.] 0x0000000000ec6b13
+ 0.01% 18 chrome perf-24199.map [.] 0x0000115bb5d417ea
+ 0.01% 13 chrome perf-24199.map [.] 0x0000115bb6c3581e
+ 0.01% 10 chrome perf-24199.map [.] 0x0000115bb6af94fb
+ 0.01% 29 chrome libc-2.19.so [.] 0x000000000009a8d5
+ 0.01% 25 chrome chrome [.] 0x0000000000e57849
+ 0.01% 40 chrome chrome [.] 0x0000000005d1101d
+ 0.01% 11 chrome perf-24199.map [.] 0x0000115bb6e1502e
+ 0.01% 20 chrome perf-24199.map [.] 0x0000115bb7c9f11d
+ 0.01% 18 chrome perf-24199.map [.] 0x0000115bb6b577c8
+ 0.01% 30 chrome [kernel.kallsyms] [k] 0xffffffffa4acff4a
+ 0.01% 38 python libpython2.7.so.1.0 [.] 0x000000000011ad14
+ 0.01% 14 chrome perf-24199.map [.] 0x0000115bb6b8221e
+ 0.01% 59 chrome i965_dri.so [.] 0x0000000000483802
+ 0.01% 13 chrome perf-24199.map [.] 0x0000115bb6a7d197
+ 0.01% 19 chrome perf-24199.map [.] 0x0000115bb6b51f6a
+ 0.01% 31 chrome libpthread-2.19.so [.] 0x0000000000009e71
+ 0.01% 13 chrome perf-24199.map [.] 0x0000115bb6c4eac4
+ 0.01% 12 chrome perf-24199.map [.] 0x0000115bb7bea5c2
+ 0.01% 38 chrome chrome [.] 0x0000000000d3e821
+ 0.01% 12 chrome perf-24199.map [.] 0x0000115bb7c78e2c
+ 0.01% 22 chrome perf-24199.map [.] 0x0000115bb5d67f0f
+ 0.01% 30 chrome chrome [.] 0x0000000000ec4b08
+ 0.01% 15 chrome perf-24199.map [.] 0x0000115bb5d2793b
+ 0.01% 28 chrome chrome [.] 0x0000000000f38669
+ 0.01% 43 chrome chrome [.] 0x0000000001bfb240
+ 0.01% 20 chrome perf-24199.map [.] 0x0000115bb5d09f8e
+ 0.01% 30 chrome perf-24199.map [.] 0x0000115bb5e3f9b2
+ 0.01% 18 chrome perf-24199.map [.] 0x0000115bb5d072d7
+ 0.01% 32 chrome ld-2.19.so [.] 0x000000000000bcc7
+ 0.01% 14 chrome perf-24199.map [.] 0x0000115bb6a786b6
+ 0.01% 36 chrome chrome [.] 0x00000000024366f0
+ 0.01% 17 chrome perf-24199.map [.] 0x0000115bb6b5a6bf
+ 0.01% 14 chrome perf-24199.map [.] 0x0000115bb6a78024
+ 0.01% 16 sshd sshd [.] 0x0000000000075c37
+ 0.01% 10 chrome perf-24199.map [.] 0x0000115bb6adec72
+ 0.01% 15 chrome perf-24199.map [.] 0x0000115bb6ba0a78
+ 0.01% 14 chrome perf-24199.map [.] 0x0000115bb6a7b373
+ 0.01% 13 chrome perf-24199.map [.] 0x0000115bb6c3256e
+ 0.01% 11 chrome perf-24199.map [.] 0x0000115bb6e14f74
+ 0.01% 10 chrome perf-24199.map [.] 0x0000115bb6af95ac
+ 0.01% 26 python libpython2.7.so.1.0 [.] 0x0000000000095f32
+ 0.01% 19 chrome perf-24199.map [.] 0x0000115bb5d215e1
+ 0.01% 10 chrome perf-24199.map [.] 0x0000115bb6adeb55
+ 0.01% 16 chrome perf-24199.map [.] 0x0000115bb6b2c7db
+ 0.01% 11 chrome perf-24199.map [.] 0x0000115bb7ba9e3d
+ 0.01% 10 chrome perf-24199.map [.] 0x0000115bb6af5a62
+ 0.01% 25 chrome chrome [.] 0x0000000000e1654e
+ 0.01% 24 chrome perf-24199.map [.] 0x0000115bb6ca75f2
+ 0.01% 11 chrome perf-24199.map [.] 0x0000115bb7c6ef16
+ 0.01% 17 chrome chrome [.] 0x0000000000ed5a9a
+ 0.01% 14 chrome perf-24199.map [.] 0x0000115bb6b810f4
+ 0.01% 30 chrome chrome [.] 0x0000000000e543e9
+ 0.01% 17 chrome perf-24199.map [.] 0x0000115bb6b5a5e2
+ 0.01% 14 chrome perf-24199.map [.] 0x0000115bb6ab0afa
+ 0.01% 11 chrome perf-24199.map [.] 0x0000115bb7c6f24e
+ 0.01% 16 chrome perf-24199.map [.] 0x0000115bb6b2ca81
+ 0.01% 14 chrome perf-24199.map [.] 0x0000115bb6aa471b
+ 0.01% 37 chrome chrome [.] 0x0000000000eb4d31
+ 0.01% 11 chrome perf-24199.map [.] 0x0000115bb6e1f80f
+ 0.01% 11 chrome perf-24199.map [.] 0x0000115bb7c6f5d9
+ 0.01% 31 chrome chrome [.] 0x0000000000e18aa9
+ 0.01% 18 chrome chrome [.] 0x0000000000e4907d
+ 0.01% 58 chrome i965_dri.so [.] 0x0000000000483806
+ 0.01% 13 chrome perf-24199.map [.] 0x0000115bb6a7b69b
+ 0.01% 13 chrome perf-24199.map [.] 0x0000115bb6b81edd
+ 0.01% 11 chrome perf-24199.map [.] 0x0000115bb7c6f5b3
+ 0.01% 41 chrome chrome [.] 0x0000000000d1e411
+ 0.01% 17 chrome perf-24199.map [.] 0x0000115bb7b0a72f
+ 0.01% 23 lsof [kernel.kallsyms] [k] 0xffffffffa4bf4c3d
+ 0.01% 16 chrome chrome [.] 0x0000000000e7656e
+ 0.01% 16 chrome perf-24199.map [.] 0x0000115bb6b24dbd
+ 0.01% 14 chrome perf-24199.map [.] 0x0000115bb6aa5672
+ 0.01% 11 chrome perf-24199.map [.] 0x0000115bb7ba9d29
+ 0.01% 16 chrome perf-24199.map [.] 0x0000115bb6cb5bbd
+ 0.01% 16 chrome perf-24199.map [.] 0x0000115bb6b2ca2a
+ 0.01% 12 chrome perf-24199.map [.] 0x0000115bb6a72710
+ 0.01% 13 chrome perf-24199.map [.] 0x0000115bb6c35d84
+ 0.01% 19 chrome chrome [.] 0x0000000000e45ac6
+ 0.01% 38 python libpython2.7.so.1.0 [.] 0x00000000000a8c9e
+ 0.01% 16 chrome perf-24199.map [.] 0x0000115bb6b2c989
+ 0.01% 16 chrome perf-24199.map [.] 0x0000115bb6b2ca71
+ 0.01% 14 chrome perf-24199.map [.] 0x0000115bb6aa5666
+ 0.01% 20 chrome perf-24199.map [.] 0x0000115bb5d2165e
+ 0.01% 14 chrome perf-24199.map [.] 0x0000115bb6aa4729
+ 0.01% 13 chrome perf-24199.map [.] 0x0000115bb6b80feb
+ 0.01% 27 python libpython2.7.so.1.0 [.] 0x00000000000a8bf8
+ 0.01% 23 chrome chrome [.] 0x0000000000eea37a
+ 0.01% 11 chrome perf-24199.map [.] 0x0000115bb7c6f25f
+ 0.01% 11 chrome perf-24199.map [.] 0x0000115bb6e1fc56
+ 0.01% 16 chrome perf-24199.map [.] 0x0000115bb6b315b4
+ 0.01% 24 chrome chrome [.] 0x0000000000f16081
+ 0.01% 26 chrome [kernel.kallsyms] [k] 0xffffffffa4ad9a67
+ 0.01% 12 chrome perf-24199.map [.] 0x0000115bb5d2177a
+ 0.01% 30 chrome libc-2.19.so [.] 0x000000000009a991
+ 0.01% 13 chrome perf-24199.map [.] 0x0000115bb6a7b687
+ 0.01% 32 chrome chrome [.] 0x0000000000f9f3c0
+ 0.01% 25 chrome chrome [.] 0x0000000000f13e73
+ 0.01% 17 chrome chrome [.] 0x0000000000e48e41
+ 0.01% 25 chrome chrome [.] 0x0000000000f19e4e
+ 0.01% 17 chrome perf-24199.map [.] 0x0000115bb6b557dd
+ 0.01% 28 chrome chrome [.] 0x0000000000e18b99
+ 0.01% 17 chrome perf-24199.map [.] 0x0000115bb7c9f0c6
+ 0.01% 30 python libpython2.7.so.1.0 [.] 0x00000000000e8dc7
+ 0.01% 13 chrome perf-24199.map [.] 0x0000115bb6ad9163
+ 0.01% 17 chrome perf-24199.map [.] 0x0000115bb6b5c652
+ 0.01% 18 chrome chrome [.] 0x0000000000e45abc
+ 0.01% 12 chrome perf-24199.map [.] 0x0000115bb6a7d0d7
+ 0.01% 37 chrome chrome [.] 0x0000000000ce74f6
+ 0.01% 15 chrome chrome [.] 0x0000000000f13df8
+ 0.01% 14 chrome perf-24199.map [.] 0x0000115bb6bc7d01
+ 0.01% 20 chrome perf-24199.map [.] 0x0000115bb5d265fa
+ 0.01% 38 chrome chrome [.] 0x00000000011dc830
+ 0.01% 27 chrome perf-24199.map [.] 0x0000115bb5d17263
+ 0.01% 12 chrome perf-24199.map [.] 0x0000115bb6c36bc0
+ 0.01% 24 chrome chrome [.] 0x0000000000e18b9d
+ 0.01% 10 chrome perf-24199.map [.] 0x0000115bb6ad4877
+ 0.01% 27 chrome chrome [.] 0x0000000000f15f92
+ 0.01% 31 chrome chrome [.] 0x0000000000cf4525
+ 0.01% 10 chrome perf-24199.map [.] 0x0000115bb6aded45
+ 0.01% 12 chrome perf-24199.map [.] 0x0000115bb6c36bee
+ 0.01% 10 chrome perf-24199.map [.] 0x0000115bb6af5ac8
+ 0.01% 14 chrome perf-24199.map [.] 0x0000115bb6aac55f
+ 0.01% 16 chrome perf-24199.map [.] 0x0000115bb5d07a9c
+ 0.01% 15 chrome chrome [.] 0x0000000000e520df
+ 0.01% 13 chrome perf-24199.map [.] 0x0000115bb6b80f05
+ 0.01% 14 chrome perf-24199.map [.] 0x0000115bb6ac669f
+ 0.01% 29 chrome libc-2.19.so [.] 0x000000000008e2bb
+ 0.01% 13 chrome perf-24199.map [.] 0x0000115bb6b81f43
+ 0.01% 32 chrome ld-2.19.so [.] 0x000000000000bca3
+ 0.01% 23 chrome perf-24199.map [.] 0x0000115bb6ca738d
+ 0.01% 10 chrome perf-24199.map [.] 0x0000115bb6e1fb74
+ 0.01% 14 chrome perf-24199.map [.] 0x0000115bb6abcae7
+ 0.01% 33 chrome chrome [.] 0x0000000000e10fd9
+ 0.01% 11 chrome perf-24199.map [.] 0x0000115bb7beaa06
+ 0.01% 10 chrome perf-24199.map [.] 0x0000115bb6e150b1
+ 0.01% 27 chrome perf-24199.map [.] 0x0000115bb7e1e828
+ 0.01% 23 chrome chrome [.] 0x0000000000f1608a
+ 0.01% 12 chrome perf-24199.map [.] 0x0000115bb6a7b4f3
+ 0.01% 18 chrome perf-24199.map [.] 0x0000115bb6b57760
+ 0.01% 11 chrome perf-24199.map [.] 0x0000115bb7bf5036
+ 0.01% 13 chrome perf-24199.map [.] 0x0000115bb6b814d1
+ 0.01% 14 chrome perf-24199.map [.] 0x0000115bb6ba4ea1
+ 0.01% 14 chrome perf-24199.map [.] 0x0000115bb6aaca3e
+ 0.01% 11 chrome perf-24199.map [.] 0x0000115bb7bf5678
+ 0.01% 13 chrome perf-24199.map [.] 0x0000115bb6a7d202
+ 0.01% 24 chrome ld-2.19.so [.] 0x000000000000967a
+ 0.01% 14 chrome perf-24199.map [.] 0x0000115bb706289d
+ 0.01% 16 chrome perf-24199.map [.] 0x0000115bb6b252a0
+ 0.01% 10 chrome perf-24199.map [.] 0x0000115bb6e1fbb7
+ 0.01% 23 chrome chrome [.] 0x0000000000f15f6a
+ 0.01% 27 chrome chrome [.] 0x0000000000f19e57
+ 0.01% 20 chrome chrome [.] 0x0000000000e5752d
+ 0.01% 14 chrome perf-24199.map [.] 0x0000115bb6a9f27e
+ 0.01% 24 ps [kernel.kallsyms] [k] 0xffffffffa4bee3ef
+ 0.01% 18 chrome chrome [.] 0x0000000000ed5ad3
+ 0.01% 12 chrome perf-24199.map [.] 0x0000115bb6c4e9e3
+ 0.01% 16 chrome perf-24199.map [.] 0x0000115bb6b5a2e0
+ 0.01% 25 chrome chrome [.] 0x0000000000eb696b
+ 0.01% 13 chrome perf-24199.map [.] 0x0000115bb6b8213f
+ 0.01% 12 chrome perf-24199.map [.] 0x0000115bb6c35d37
+ 0.01% 12 chrome perf-24199.map [.] 0x0000115bb6a7b399
+ 0.01% 21 chrome chrome [.] 0x0000000000e4722f
+ 0.01% 20 chrome chrome [.] 0x0000000000dbec48
+ 0.01% 15 chrome perf-24199.map [.] 0x0000115bb6b358f7
+ 0.01% 13 chrome perf-24199.map [.] 0x0000115bb6b8215a
+ 0.01% 21 chrome libc-2.19.so [.] 0x000000000008d855
+ 0.01% 10 chrome perf-24199.map [.] 0x0000115bb6af5abf
+ 0.01% 36 chrome chrome [.] 0x0000000005d10df6
+ 0.01% 16 chrome perf-24199.map [.] 0x0000115bb6b5c716
+ 0.01% 18 chrome chrome [.] 0x0000000000e45c20
+ 0.01% 26 chrome chrome [.] 0x0000000000f1606e
+ 0.01% 22 chrome chrome [.] 0x0000000000f1419e
+ 0.01% 11 chrome perf-24199.map [.] 0x0000115bb7c8ad93
+ 0.01% 12 chrome perf-24199.map [.] 0x0000115bb6a784f8
+ 0.01% 17 chrome perf-24199.map [.] 0x0000115bb7cdc597
+ 0.01% 12 chrome perf-24199.map [.] 0x0000115bb6b810d3
+ 0.01% 10 chrome perf-24199.map [.] 0x0000115bb7ba9bae
+ 0.01% 19 chrome chrome [.] 0x0000000000e48dd8
+ 0.01% 19 chrome chrome [.] 0x0000000000eb4de8
+ 0.01% 10 chrome perf-24199.map [.] 0x0000115bb6e41577
+ 0.01% 12 chrome perf-24199.map [.] 0x0000115bb6b7d7f6
+ 0.01% 12 chrome perf-24199.map [.] 0x0000115bb6b794d1
+ 0.01% 9 chrome perf-24199.map [.] 0x0000115bb6af95d5
+ 0.01% 17 chrome chrome [.] 0x0000000000e6fa00
+ 0.01% 11 chrome perf-24199.map [.] 0x0000115bb7c8b961
+ 0.01% 15 chrome perf-24199.map [.] 0x0000115bb6b315c5
+ 0.00% 1 swapper [kernel.kallsyms] [k] 0xffffffffa4a549b6
+ 0.00% 1 swapper [kernel.kallsyms] [k] 0xffffffffa4a923d2
+ 0.00% 1 python [kernel.kallsyms] [k] 0xffffffffa4b03afa
+ 0.00% 1 tcsd [kernel.kallsyms] [k] 0xffffffffa4a5c294
+ 0.00% 1 kworker/0:1H [kernel.kallsyms] [k] 0xffffffffa4cef732
+ 0.00% 1 swapper [kernel.kallsyms] [k] 0xffffffffa4a00c88
+ 0.00% 1 kworker/u:5 [kernel.kallsyms] [k] 0xffffffffa4a8ac8a
+ 0.00% 1 lsof [kernel.kallsyms] [k] 0xffffffffa4a51a55
+ 0.00% 1 swapper [kernel.kallsyms] [k] 0xffffffffa4a3a27c
+ 0.00% 1 swapper [kernel.kallsyms] [k] 0xffffffffa4a58dff
+ 0.00% 1 swapper [kernel.kallsyms] [k] 0xffffffffa4a66016
+ 0.00% 1 swapper [kernel.kallsyms] [k] 0xffffffffa4a92359
+ 0.00% 1 rcu_sched [kernel.kallsyms] [k] 0xffffffffa4a93347
+ 0.00% 1 sh libc-2.19.so [.] 0x0000000000082a06
+ 0.00% 1 swapper [kernel.kallsyms] [k] 0xffffffffa4a38e4d
+ 0.00% 1 powerd  [.] 0x00000000000a0930
+ 0.00% 1 python [kernel.kallsyms] [k] 0xffffffffa4ec8d72
+ 0.00% 1 powerd [kernel.kallsyms] [k] 0xffffffffa4a408c8
+ 0.00% 1 swapper [kernel.kallsyms] [k] 0xffffffffa4ab35a2
+ 0.00% 1 swapper [kernel.kallsyms] [k] 0xffffffffa4a5fda6
+ 0.00% 1 swapper [kernel.kallsyms] [k] 0xffffffffa4a5fed2
+ 0.00% 1 swapper [kernel.kallsyms] [k] 0xffffffffa4a543e8
+ 0.00% 1 dhcpcd  [.] 0x00000000000280a3
+ 0.00% 1 swapper [kernel.kallsyms] [k] 0xffffffffa4a54db9
+ 0.00% 1 swapper [kernel.kallsyms] [k] 0xffffffffa4a00e21
+ 0.00% 1 python [kernel.kallsyms] [k] 0xffffffffa4a65ea8
+ 0.00% 1 python [kernel.kallsyms] [k] 0xffffffffa4adde99
+ 0.00% 1 swapper [kernel.kallsyms] [k] 0xffffffffa4a5655b
+ 0.00% 1 swapper [kernel.kallsyms] [k] 0xffffffffa4a40550
+ 0.00% 1 swapper [kernel.kallsyms] [k] 0xffffffffa4a54a89
+ 0.00% 1 python libpython2.7.so.1.0 [.] 0x000000000008f1be
+ 0.00% 1 rcu_sched [kernel.kallsyms] [k] 0xffffffffa4a64ade
+ 0.00% 1 python [kernel.kallsyms] [k] 0xffffffffa4bbaa30
+ 0.00% 1 swapper [kernel.kallsyms] [k] 0xffffffffa4a00c06
+ 0.00% 1 swapper [kernel.kallsyms] [k] 0xffffffffa4a66bfe
+ 0.00% 1 swapper [kernel.kallsyms] [k] 0xffffffffa4a63bf9
+ 0.00% 1 swapper [kernel.kallsyms] [k] 0xffffffffa4a5fe01
+ 0.00% 1 tcsd [kernel.kallsyms] [k] 0xffffffffa4a5f308
+ 0.00% 1 chrome [kernel.kallsyms] [k] 0xffffffffa4be56c1
+ 0.00% 1 swapper [kernel.kallsyms] [k] 0xffffffffa4a40596
+ 0.00% 1 swapper [kernel.kallsyms] [k] 0xffffffffa4a9381f
+ 0.00% 1 swapper [kernel.kallsyms] [k] 0xffffffffa4a757c5
+ 0.00% 1 rcu_sched [kernel.kallsyms] [k] 0xffffffffa4a65ea3
+ 0.00% 1 rsyslogd [kernel.kallsyms] [k] 0xffffffffa4bee6b7
+ 0.00% 1 swapper [kernel.kallsyms] [k] 0xffffffffa4a2d72a
+ 0.00% 1 swapper [kernel.kallsyms] [k] 0xffffffffa4a63d00
+ 0.00% 1 chrome chrome [.] 0x0000000000cd3879
+ 0.00% 1 python libc-2.19.so [.] 0x00000000000e9fc7
+ 0.00% 1 rcu_sched [kernel.kallsyms] [k] 0xffffffffa4a58e03
+ 0.00% 1 rcu_sched [kernel.kallsyms] [k] 0xffffffffa4a65f0b
+ 0.00% 1 rcu_sched [kernel.kallsyms] [k] 0xffffffffa4ec89d8
+ 0.00% 1 rcu_sched [kernel.kallsyms] [k] 0xffffffffa4ec90d6
+ 0.00% 1 swapper [kernel.kallsyms] [k] 0xffffffffa4a548c8
+ 0.00% 1 python [kernel.kallsyms] [k] 0xffffffffa4a38453
+ 0.00% 1 python [kernel.kallsyms] [k] 0xffffffffa4a66335
+ 0.00% 1 chrome chrome [.] 0x0000000000cc75d8
+ 0.00% 1 swapper [kernel.kallsyms] [k] 0xffffffffa4a2058f
+ 0.00% 1 chrome [kernel.kallsyms] [k] 0xffffffffa4e0f293
+ 0.00% 1 kworker/u:0 [ath9k] [k] 0x0000000000008126
+ 0.00% 1 jbd2/sda1-8 [kernel.kallsyms] [k] 0xffffffffa4a08ab7
+ 0.00% 1 swapper [kernel.kallsyms] [k] 0xffffffffa4a2388e
+ 0.00% 1 powerd  [.] 0x000000000007dca0
+ 0.00% 1 python [kernel.kallsyms] [k] 0xffffffffa4a2c97c
+ 0.00% 1 swapper [kernel.kallsyms] [k] 0xffffffffa4a0659b
+ 0.00% 1 chrome chrome [.] 0x0000000000d0e3bd
+ 0.00% 1 cryptohomed  [.] 0x000000000001dcd0
+ 0.00% 1 swapper [kernel.kallsyms] [k] 0xffffffffa4bec0c0
+ 0.00% 1 rcu_sched [kernel.kallsyms] [k] 0xffffffffa4a62145
+ 0.00% 1 rcu_sched [kernel.kallsyms] [k] 0xffffffffa4bf3318
+ 0.00% 1 swapper [kernel.kallsyms] [k] 0xffffffffa4a5fd33
+ 0.00% 1 swapper [kernel.kallsyms] [k] 0xffffffffa4a2d71a
+ 0.00% 1 kworker/u:0 [kernel.kallsyms] [k] 0xffffffffa4ad29f3
+ 0.00% 1 tcsd [kernel.kallsyms] [k] 0xffffffffa4a67997
+ 0.00% 1 swapper [kernel.kallsyms] [k] 0xffffffffa4a548a8
+ 0.00% 1 python libc-2.19.so [.] 0x0000000000082bb3
+ 0.00% 1 dhcpcd  [.] 0x0000000000024f56
+ 0.00% 1 rcu_sched [kernel.kallsyms] [k] 0xffffffffa4bf334e
+ 0.00% 1 rcu_sched [kernel.kallsyms] [k] 0xffffffffa4a65e88
+ 0.00% 1 swapper [kernel.kallsyms] [k] 0xffffffffa4a41578
+ 0.00% 1 swapper [kernel.kallsyms] [k] 0xffffffffa4a65a87
+ 0.00% 1 python [kernel.kallsyms] [k] 0xffffffffa4a66d95
+ 0.00% 1 swapper [kernel.kallsyms] [k] 0xffffffffa4ec89cf
+ 0.00% 1 powerd [kernel.kallsyms] [k] 0xffffffffa4c6a22e
+ 0.00% 1 swapper [kernel.kallsyms] [k] 0xffffffffa4a91b84
+ 0.00% 1 rcu_sched [kernel.kallsyms] [k] 0xffffffffa4a4073d
+ 0.00% 1 swapper [kernel.kallsyms] [k] 0xffffffffa4a408c2
+ 0.00% 1 swapper [kernel.kallsyms] [k] 0xffffffffa4a66a84
+ 0.00% 1 rcu_sched [kernel.kallsyms] [k] 0xffffffffa4a61b9f
+ 0.00% 1 rcu_sched [kernel.kallsyms] [k] 0xffffffffa4ec8c7f
+ 0.00% 1 swapper [kernel.kallsyms] [k] 0xffffffffa4a40a1d
+ 0.00% 1 rcu_sched [kernel.kallsyms] [k] 0xffffffffa4ec8b7c
+ 0.00% 1 swapper [kernel.kallsyms] [k] 0xffffffffa4a6646c
+ 0.00% 1 swapper [kernel.kallsyms] [k] 0xffffffffa4a3a6d4
+ 0.00% 1 swapper [kernel.kallsyms] [k] 0xffffffffa4a41623
+ 0.00% 1 swapper [kernel.kallsyms] [k] 0xffffffffa4a75d98
+ 0.00% 1 swapper [kernel.kallsyms] [k] 0xffffffffa4bf32fd
+ 0.00% 1 chrome chrome [.] 0x00000000022ad6a0
+ 0.00% 1 rcu_sched [kernel.kallsyms] [k] 0xffffffffa4a62152
+ 0.00% 1 dbus-daemon [kernel.kallsyms] [k] 0xffffffffa4b0d38b
+ 0.00% 1 swapper [kernel.kallsyms] [k] 0xffffffffa4a58d66
+ 0.00% 1 swapper [kernel.kallsyms] [k] 0xffffffffa4ecb3ed
+ 0.00% 1 swapper [kernel.kallsyms] [k] 0xffffffffa4a54eca
+ 0.00% 1 periodic_schedu [kernel.kallsyms] [k] 0xffffffffa4a92b1a
+ 0.00% 1 periodic_schedu [kernel.kallsyms] [k] 0xffffffffa4bec2e9
+ 0.00% 1 sh [kernel.kallsyms] [k] 0xffffffffa4a92a06
+ 0.00% 1 swapper [kernel.kallsyms] [k] 0xffffffffa4a65b67
+ 0.00% 1 swapper [kernel.kallsyms] [k] 0xffffffffa4a66ce5
+ 0.00% 1 python [kernel.kallsyms] [k] 0xffffffffa4b06121
+ 0.00% 1 swapper [kernel.kallsyms] [k] 0xffffffffa4a54418
+ 0.00% 1 rcu_sched [kernel.kallsyms] [k] 0xffffffffa4a65cc5
+ 0.00% 1 swapper [kernel.kallsyms] [k] 0xffffffffa4a547ee
+ 0.00% 1 rcu_sched [kernel.kallsyms] [k] 0xffffffffa4a64c99
+ 0.00% 1 rcu_sched [kernel.kallsyms] [k] 0xffffffffa4a5adda
+ 0.00% 1 swapper [kernel.kallsyms] [k] 0xffffffffa4a923ac
+ 0.00% 1 swapper [kernel.kallsyms] [k] 0xffffffffa4a91ec6
+ 0.00% 1 swapper [kernel.kallsyms] [k] 0xffffffffa4a63269
+ 0.00% 1 swapper [kernel.kallsyms] [k] 0xffffffffa4a62f53
+ 0.00% 1 rcu_sched [kernel.kallsyms] [k] 0xffffffffa4a621ff
+ 0.00% 1 chrome [kernel.kallsyms] [k] 0xffffffffa4a65d8b
+ 0.00% 1 swapper [kernel.kallsyms] [k] 0xffffffffa4a5de41
+ 0.00% 1 chrome [kernel.kallsyms] [k] 0xffffffffa4a56f3d
+ 0.00% 1 rcu_sched [kernel.kallsyms] [k] 0xffffffffa4be56c6
+ 0.00% 1 swapper [kernel.kallsyms] [k] 0xffffffffa4a5d828
+ 0.00% 1 rcu_sched [kernel.kallsyms] [k] 0xffffffffa4a65ccf
+ 0.00% 1 sh [kernel.kallsyms] [k] 0xffffffffa4b06cb5
+ 0.00% 1 perf [kernel.kallsyms] [k] 0xffffffffa4ab0a38
+ 0.00% 1 swapper [kernel.kallsyms] [k] 0xffffffffa4a1ff32
+ 0.00% 1 swapper [kernel.kallsyms] [k] 0xffffffffa4a7aac4
+ 0.00% 8 swapper [kernel.kallsyms] [k] 0xffffffffa4a0ee03
+ 0.00% 4 perf [kernel.kallsyms] [k] 0xffffffffa4a0ee03
+
+#
+# (For a higher level overview, try: perf report --sort comm,dso)
+#
diff --git a/crosperf/results_cache.py b/crosperf/results_cache.py
new file mode 100644
index 00000000..29e118e8
--- /dev/null
+++ b/crosperf/results_cache.py
@@ -0,0 +1,758 @@
+# Copyright (c) 2013 The Chromium OS Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+"""Module to deal with result cache."""
+
+from __future__ import print_function
+
+import glob
+import hashlib
+import os
+import pickle
+import re
+import tempfile
+import json
+import sys
+
+from cros_utils import command_executer
+from cros_utils import misc
+
+from image_checksummer import ImageChecksummer
+
+import results_report
+import test_flag
+
+SCRATCH_DIR = os.path.expanduser('~/cros_scratch')
+RESULTS_FILE = 'results.txt'
+MACHINE_FILE = 'machine.txt'
+AUTOTEST_TARBALL = 'autotest.tbz2'
+PERF_RESULTS_FILE = 'perf-results.txt'
+CACHE_KEYS_FILE = 'cache_keys.txt'
+
+
+class Result(object):
+ """Class for holding the results of a single test run.
+
+ This class manages what exactly is stored inside the cache without knowing
+ what the key of the cache is. For runs with perf, it stores perf.data,
+ perf.report, etc. The key generation is handled by the ResultsCache class.
+ """
+
+ def __init__(self, logger, label, log_level, machine, cmd_exec=None):
+ self.chromeos_root = label.chromeos_root
+ self._logger = logger
+ self.ce = cmd_exec or command_executer.GetCommandExecuter(
+ self._logger, log_level=log_level)
+ self.temp_dir = None
+ self.label = label
+ self.results_dir = None
+ self.log_level = log_level
+ self.machine = machine
+ self.perf_data_files = []
+ self.perf_report_files = []
+ self.results_file = []
+ self.chrome_version = ''
+ self.err = None
+ self.chroot_results_dir = ''
+ self.test_name = ''
+ self.keyvals = None
+ self.board = None
+ self.suite = None
+ self.retval = None
+ self.out = None
+
+ def CopyFilesTo(self, dest_dir, files_to_copy):
+ file_index = 0
+ for file_to_copy in files_to_copy:
+ if not os.path.isdir(dest_dir):
+ command = 'mkdir -p %s' % dest_dir
+ self.ce.RunCommand(command)
+ dest_file = os.path.join(dest_dir,
+ ('%s.%s' % (os.path.basename(file_to_copy),
+ file_index)))
+ ret = self.ce.CopyFiles(file_to_copy, dest_file, recursive=False)
+ if ret:
+ raise IOError('Could not copy results file: %s' % file_to_copy)
+
+ def CopyResultsTo(self, dest_dir):
+ self.CopyFilesTo(dest_dir, self.perf_data_files)
+ self.CopyFilesTo(dest_dir, self.perf_report_files)
+ if len(self.perf_data_files) or len(self.perf_report_files):
+ self._logger.LogOutput('Perf results files stored in %s.' % dest_dir)
+
+ def GetNewKeyvals(self, keyvals_dict):
+ # Initialize 'units' dictionary.
+ units_dict = {}
+ for k in keyvals_dict:
+ units_dict[k] = ''
+ results_files = self.GetDataMeasurementsFiles()
+ for f in results_files:
+ # Make sure we can find the results file
+ if os.path.exists(f):
+ data_filename = f
+ else:
+ # Otherwise get the base filename and create the correct
+ # path for it.
+ _, f_base = misc.GetRoot(f)
+ data_filename = os.path.join(self.chromeos_root, 'chroot/tmp',
+ self.temp_dir, f_base)
+ if data_filename.find('.json') > 0:
+ raw_dict = dict()
+ if os.path.exists(data_filename):
+ with open(data_filename, 'r') as data_file:
+ raw_dict = json.load(data_file)
+
+ if 'charts' in raw_dict:
+ raw_dict = raw_dict['charts']
+ for k1 in raw_dict:
+ field_dict = raw_dict[k1]
+ for k2 in field_dict:
+ result_dict = field_dict[k2]
+ key = k1 + '__' + k2
+ if 'value' in result_dict:
+ keyvals_dict[key] = result_dict['value']
+ elif 'values' in result_dict:
+ values = result_dict['values']
+ if ('type' in result_dict and
+ result_dict['type'] == 'list_of_scalar_values' and values and
+ values != 'null'):
+ keyvals_dict[key] = sum(values) / float(len(values))
+ else:
+ keyvals_dict[key] = values
+ units_dict[key] = result_dict['units']
+ else:
+ if os.path.exists(data_filename):
+ with open(data_filename, 'r') as data_file:
+ lines = data_file.readlines()
+ for line in lines:
+ tmp_dict = json.loads(line)
+ graph_name = tmp_dict['graph']
+ graph_str = (graph_name + '__') if graph_name else ''
+ key = graph_str + tmp_dict['description']
+ keyvals_dict[key] = tmp_dict['value']
+ units_dict[key] = tmp_dict['units']
+
+ return keyvals_dict, units_dict
+
+ def AppendTelemetryUnits(self, keyvals_dict, units_dict):
+ """keyvals_dict is the dict of key-value used to generate Crosperf reports.
+
+ units_dict is a dictionary of the units for the return values in
+ keyvals_dict. We need to associate the units with the return values,
+ for Telemetry tests, so that we can include the units in the reports.
+ This function takes each value in keyvals_dict, finds the corresponding
+ unit in the units_dict, and replaces the old value with a list of the
+ old value and the units. This later gets properly parsed in the
+ ResultOrganizer class, for generating the reports.
+ """
+
+ results_dict = {}
+ for k in keyvals_dict:
+ # We don't want these lines in our reports; they add no useful data.
+ if k == '' or k == 'telemetry_Crosperf':
+ continue
+ val = keyvals_dict[k]
+ units = units_dict[k]
+ new_val = [val, units]
+ results_dict[k] = new_val
+ return results_dict
+
+ def GetKeyvals(self):
+ results_in_chroot = os.path.join(self.chromeos_root, 'chroot', 'tmp')
+ if not self.temp_dir:
+ self.temp_dir = tempfile.mkdtemp(dir=results_in_chroot)
+ command = 'cp -r {0}/* {1}'.format(self.results_dir, self.temp_dir)
+ self.ce.RunCommand(command, print_to_console=False)
+
+ command = ('python generate_test_report --no-color --csv %s' %
+ (os.path.join('/tmp', os.path.basename(self.temp_dir))))
+ _, out, _ = self.ce.ChrootRunCommandWOutput(
+ self.chromeos_root, command, print_to_console=False)
+ keyvals_dict = {}
+ tmp_dir_in_chroot = misc.GetInsideChrootPath(self.chromeos_root,
+ self.temp_dir)
+ for line in out.splitlines():
+ tokens = re.split('=|,', line)
+ key = tokens[-2]
+ if key.startswith(tmp_dir_in_chroot):
+ key = key[len(tmp_dir_in_chroot) + 1:]
+ value = tokens[-1]
+ keyvals_dict[key] = value
+
+ # Check to see if there is a perf_measurements file and get the
+ # data from it if so.
+ keyvals_dict, units_dict = self.GetNewKeyvals(keyvals_dict)
+ if self.suite == 'telemetry_Crosperf':
+ # For telemtry_Crosperf results, append the units to the return
+ # results, for use in generating the reports.
+ keyvals_dict = self.AppendTelemetryUnits(keyvals_dict, units_dict)
+ return keyvals_dict
+
+ def GetResultsDir(self):
+ mo = re.search(r'Results placed in (\S+)', self.out)
+ if mo:
+ result = mo.group(1)
+ return result
+ raise RuntimeError('Could not find results directory.')
+
+ def FindFilesInResultsDir(self, find_args):
+ if not self.results_dir:
+ return None
+
+ command = 'find %s %s' % (self.results_dir, find_args)
+ ret, out, _ = self.ce.RunCommandWOutput(command, print_to_console=False)
+ if ret:
+ raise RuntimeError('Could not run find command!')
+ return out
+
+ def GetResultsFile(self):
+ return self.FindFilesInResultsDir('-name results-chart.json').splitlines()
+
+ def GetPerfDataFiles(self):
+ return self.FindFilesInResultsDir('-name perf.data').splitlines()
+
+ def GetPerfReportFiles(self):
+ return self.FindFilesInResultsDir('-name perf.data.report').splitlines()
+
+ def GetDataMeasurementsFiles(self):
+ result = self.FindFilesInResultsDir('-name perf_measurements').splitlines()
+ if not result:
+ result = \
+ self.FindFilesInResultsDir('-name results-chart.json').splitlines()
+ return result
+
+ def GeneratePerfReportFiles(self):
+ perf_report_files = []
+ for perf_data_file in self.perf_data_files:
+ # Generate a perf.report and store it side-by-side with the perf.data
+ # file.
+ chroot_perf_data_file = misc.GetInsideChrootPath(self.chromeos_root,
+ perf_data_file)
+ perf_report_file = '%s.report' % perf_data_file
+ if os.path.exists(perf_report_file):
+ raise RuntimeError('Perf report file already exists: %s' %
+ perf_report_file)
+ chroot_perf_report_file = misc.GetInsideChrootPath(self.chromeos_root,
+ perf_report_file)
+ perf_path = os.path.join(self.chromeos_root, 'chroot', 'usr/bin/perf')
+
+ perf_file = '/usr/sbin/perf'
+ if os.path.exists(perf_path):
+ perf_file = '/usr/bin/perf'
+
+ command = ('%s report '
+ '-n '
+ '--symfs /build/%s '
+ '--vmlinux /build/%s/usr/lib/debug/boot/vmlinux '
+ '--kallsyms /build/%s/boot/System.map-* '
+ '-i %s --stdio '
+ '> %s' % (perf_file, self.board, self.board, self.board,
+ chroot_perf_data_file, chroot_perf_report_file))
+ self.ce.ChrootRunCommand(self.chromeos_root, command)
+
+ # Add a keyval to the dictionary for the events captured.
+ perf_report_files.append(
+ misc.GetOutsideChrootPath(self.chromeos_root,
+ chroot_perf_report_file))
+ return perf_report_files
+
+ def GatherPerfResults(self):
+ report_id = 0
+ for perf_report_file in self.perf_report_files:
+ with open(perf_report_file, 'r') as f:
+ report_contents = f.read()
+ for group in re.findall(r'Events: (\S+) (\S+)', report_contents):
+ num_events = group[0]
+ event_name = group[1]
+ key = 'perf_%s_%s' % (report_id, event_name)
+ value = str(misc.UnitToNumber(num_events))
+ self.keyvals[key] = value
+
+ def PopulateFromRun(self, out, err, retval, test, suite):
+ self.board = self.label.board
+ self.out = out
+ self.err = err
+ self.retval = retval
+ self.test_name = test
+ self.suite = suite
+ self.chroot_results_dir = self.GetResultsDir()
+ self.results_dir = misc.GetOutsideChrootPath(self.chromeos_root,
+ self.chroot_results_dir)
+ self.results_file = self.GetResultsFile()
+ self.perf_data_files = self.GetPerfDataFiles()
+ # Include all perf.report data in table.
+ self.perf_report_files = self.GeneratePerfReportFiles()
+ # TODO(asharif): Do something similar with perf stat.
+
+ # Grab keyvals from the directory.
+ self.ProcessResults()
+
+ def ProcessJsonResults(self):
+ # Open and parse the json results file generated by telemetry/test_that.
+ if not self.results_file:
+ raise IOError('No results file found.')
+ filename = self.results_file[0]
+ if not filename.endswith('.json'):
+ raise IOError('Attempt to call json on non-json file: %s' % filename)
+
+ if not os.path.exists(filename):
+ return {}
+
+ keyvals = {}
+ with open(filename, 'r') as f:
+ raw_dict = json.load(f)
+ if 'charts' in raw_dict:
+ raw_dict = raw_dict['charts']
+ for k, field_dict in raw_dict.iteritems():
+ for item in field_dict:
+ keyname = k + '__' + item
+ value_dict = field_dict[item]
+ if 'value' in value_dict:
+ result = value_dict['value']
+ elif 'values' in value_dict:
+ values = value_dict['values']
+ if not values:
+ continue
+ if ('type' in value_dict and
+ value_dict['type'] == 'list_of_scalar_values' and
+ values != 'null'):
+ result = sum(values) / float(len(values))
+ else:
+ result = values
+ units = value_dict['units']
+ new_value = [result, units]
+ keyvals[keyname] = new_value
+ return keyvals
+
+ def ProcessResults(self, use_cache=False):
+ # Note that this function doesn't know anything about whether there is a
+ # cache hit or miss. It should process results agnostic of the cache hit
+ # state.
+ if self.results_file and self.results_file[0].find(
+ 'results-chart.json') != -1:
+ self.keyvals = self.ProcessJsonResults()
+ else:
+ if not use_cache:
+ print('\n ** WARNING **: Had to use deprecated output-method to '
+ 'collect results.\n')
+ self.keyvals = self.GetKeyvals()
+ self.keyvals['retval'] = self.retval
+ # Generate report from all perf.data files.
+ # Now parse all perf report files and include them in keyvals.
+ self.GatherPerfResults()
+
+ def GetChromeVersionFromCache(self, cache_dir):
+ # Read chrome_version from keys file, if present.
+ chrome_version = ''
+ keys_file = os.path.join(cache_dir, CACHE_KEYS_FILE)
+ if os.path.exists(keys_file):
+ with open(keys_file, 'r') as f:
+ lines = f.readlines()
+ for l in lines:
+ if l.startswith('Google Chrome '):
+ chrome_version = l
+ if chrome_version.endswith('\n'):
+ chrome_version = chrome_version[:-1]
+ break
+ return chrome_version
+
+ def PopulateFromCacheDir(self, cache_dir, test, suite):
+ self.test_name = test
+ self.suite = suite
+ # Read in everything from the cache directory.
+ with open(os.path.join(cache_dir, RESULTS_FILE), 'r') as f:
+ self.out = pickle.load(f)
+ self.err = pickle.load(f)
+ self.retval = pickle.load(f)
+
+ # Untar the tarball to a temporary directory
+ self.temp_dir = tempfile.mkdtemp(
+ dir=os.path.join(self.chromeos_root, 'chroot', 'tmp'))
+
+ command = ('cd %s && tar xf %s' %
+ (self.temp_dir, os.path.join(cache_dir, AUTOTEST_TARBALL)))
+ ret = self.ce.RunCommand(command, print_to_console=False)
+ if ret:
+ raise RuntimeError('Could not untar cached tarball')
+ self.results_dir = self.temp_dir
+ self.results_file = self.GetDataMeasurementsFiles()
+ self.perf_data_files = self.GetPerfDataFiles()
+ self.perf_report_files = self.GetPerfReportFiles()
+ self.chrome_version = self.GetChromeVersionFromCache(cache_dir)
+ self.ProcessResults(use_cache=True)
+
+ def CleanUp(self, rm_chroot_tmp):
+ if rm_chroot_tmp and self.results_dir:
+ dirname, basename = misc.GetRoot(self.results_dir)
+ if basename.find('test_that_results_') != -1:
+ command = 'rm -rf %s' % self.results_dir
+ else:
+ command = 'rm -rf %s' % dirname
+ self.ce.RunCommand(command)
+ if self.temp_dir:
+ command = 'rm -rf %s' % self.temp_dir
+ self.ce.RunCommand(command)
+
+ def StoreToCacheDir(self, cache_dir, machine_manager, key_list):
+ # Create the dir if it doesn't exist.
+ temp_dir = tempfile.mkdtemp()
+
+ # Store to the temp directory.
+ with open(os.path.join(temp_dir, RESULTS_FILE), 'w') as f:
+ pickle.dump(self.out, f)
+ pickle.dump(self.err, f)
+ pickle.dump(self.retval, f)
+
+ if not test_flag.GetTestMode():
+ with open(os.path.join(temp_dir, CACHE_KEYS_FILE), 'w') as f:
+ f.write('%s\n' % self.label.name)
+ f.write('%s\n' % self.label.chrome_version)
+ f.write('%s\n' % self.machine.checksum_string)
+ for k in key_list:
+ f.write(k)
+ f.write('\n')
+
+ if self.results_dir:
+ tarball = os.path.join(temp_dir, AUTOTEST_TARBALL)
+ command = ('cd %s && '
+ 'tar '
+ '--exclude=var/spool '
+ '--exclude=var/log '
+ '-cjf %s .' % (self.results_dir, tarball))
+ ret = self.ce.RunCommand(command)
+ if ret:
+ raise RuntimeError("Couldn't store autotest output directory.")
+ # Store machine info.
+ # TODO(asharif): Make machine_manager a singleton, and don't pass it into
+ # this function.
+ with open(os.path.join(temp_dir, MACHINE_FILE), 'w') as f:
+ f.write(machine_manager.machine_checksum_string[self.label.name])
+
+ if os.path.exists(cache_dir):
+ command = 'rm -rf {0}'.format(cache_dir)
+ self.ce.RunCommand(command)
+
+ command = 'mkdir -p {0} && '.format(os.path.dirname(cache_dir))
+ command += 'chmod g+x {0} && '.format(temp_dir)
+ command += 'mv {0} {1}'.format(temp_dir, cache_dir)
+ ret = self.ce.RunCommand(command)
+ if ret:
+ command = 'rm -rf {0}'.format(temp_dir)
+ self.ce.RunCommand(command)
+ raise RuntimeError('Could not move dir %s to dir %s' %
+ (temp_dir, cache_dir))
+
+ @classmethod
+ def CreateFromRun(cls,
+ logger,
+ log_level,
+ label,
+ machine,
+ out,
+ err,
+ retval,
+ test,
+ suite='telemetry_Crosperf'):
+ if suite == 'telemetry':
+ result = TelemetryResult(logger, label, log_level, machine)
+ else:
+ result = cls(logger, label, log_level, machine)
+ result.PopulateFromRun(out, err, retval, test, suite)
+ return result
+
+ @classmethod
+ def CreateFromCacheHit(cls,
+ logger,
+ log_level,
+ label,
+ machine,
+ cache_dir,
+ test,
+ suite='telemetry_Crosperf'):
+ if suite == 'telemetry':
+ result = TelemetryResult(logger, label, log_level, machine)
+ else:
+ result = cls(logger, label, log_level, machine)
+ try:
+ result.PopulateFromCacheDir(cache_dir, test, suite)
+
+ except RuntimeError as e:
+ logger.LogError('Exception while using cache: %s' % e)
+ return None
+ return result
+
+
+class TelemetryResult(Result):
+ """Class to hold the results of a single Telemetry run."""
+
+ def __init__(self, logger, label, log_level, machine, cmd_exec=None):
+ super(TelemetryResult, self).__init__(logger, label, log_level, machine,
+ cmd_exec)
+
+ def PopulateFromRun(self, out, err, retval, test, suite):
+ self.out = out
+ self.err = err
+ self.retval = retval
+
+ self.ProcessResults()
+
+ # pylint: disable=arguments-differ
+ def ProcessResults(self):
+ # The output is:
+ # url,average_commit_time (ms),...
+ # www.google.com,33.4,21.2,...
+ # We need to convert to this format:
+ # {"www.google.com:average_commit_time (ms)": "33.4",
+ # "www.google.com:...": "21.2"}
+ # Added note: Occasionally the output comes back
+ # with "JSON.stringify(window.automation.GetResults())" on
+ # the first line, and then the rest of the output as
+ # described above.
+
+ lines = self.out.splitlines()
+ self.keyvals = {}
+
+ if lines:
+ if lines[0].startswith('JSON.stringify'):
+ lines = lines[1:]
+
+ if not lines:
+ return
+ labels = lines[0].split(',')
+ for line in lines[1:]:
+ fields = line.split(',')
+ if len(fields) != len(labels):
+ continue
+ for i in xrange(1, len(labels)):
+ key = '%s %s' % (fields[0], labels[i])
+ value = fields[i]
+ self.keyvals[key] = value
+ self.keyvals['retval'] = self.retval
+
+ def PopulateFromCacheDir(self, cache_dir, test, suite):
+ self.test_name = test
+ self.suite = suite
+ with open(os.path.join(cache_dir, RESULTS_FILE), 'r') as f:
+ self.out = pickle.load(f)
+ self.err = pickle.load(f)
+ self.retval = pickle.load(f)
+
+ self.chrome_version = \
+ super(TelemetryResult, self).GetChromeVersionFromCache(cache_dir)
+ self.ProcessResults()
+
+
+class CacheConditions(object):
+ """Various Cache condition values, for export."""
+
+ # Cache hit only if the result file exists.
+ CACHE_FILE_EXISTS = 0
+
+ # Cache hit if the checksum of cpuinfo and totalmem of
+ # the cached result and the new run match.
+ MACHINES_MATCH = 1
+
+ # Cache hit if the image checksum of the cached result and the new run match.
+ CHECKSUMS_MATCH = 2
+
+ # Cache hit only if the cached result was successful
+ RUN_SUCCEEDED = 3
+
+ # Never a cache hit.
+ FALSE = 4
+
+ # Cache hit if the image path matches the cached image path.
+ IMAGE_PATH_MATCH = 5
+
+ # Cache hit if the uuid of hard disk mataches the cached one
+
+ SAME_MACHINE_MATCH = 6
+
+
+class ResultsCache(object):
+ """Class to handle the cache for storing/retrieving test run results.
+
+ This class manages the key of the cached runs without worrying about what
+ is exactly stored (value). The value generation is handled by the Results
+ class.
+ """
+ CACHE_VERSION = 6
+
+ def __init__(self):
+ # Proper initialization happens in the Init function below.
+ self.chromeos_image = None
+ self.chromeos_root = None
+ self.test_name = None
+ self.iteration = None
+ self.test_args = None
+ self.profiler_args = None
+ self.board = None
+ self.cache_conditions = None
+ self.machine_manager = None
+ self.machine = None
+ self._logger = None
+ self.ce = None
+ self.label = None
+ self.share_cache = None
+ self.suite = None
+ self.log_level = None
+ self.show_all = None
+ self.run_local = None
+
+ def Init(self, chromeos_image, chromeos_root, test_name, iteration, test_args,
+ profiler_args, machine_manager, machine, board, cache_conditions,
+ logger_to_use, log_level, label, share_cache, suite,
+ show_all_results, run_local):
+ self.chromeos_image = chromeos_image
+ self.chromeos_root = chromeos_root
+ self.test_name = test_name
+ self.iteration = iteration
+ self.test_args = test_args
+ self.profiler_args = profiler_args
+ self.board = board
+ self.cache_conditions = cache_conditions
+ self.machine_manager = machine_manager
+ self.machine = machine
+ self._logger = logger_to_use
+ self.ce = command_executer.GetCommandExecuter(
+ self._logger, log_level=log_level)
+ self.label = label
+ self.share_cache = share_cache
+ self.suite = suite
+ self.log_level = log_level
+ self.show_all = show_all_results
+ self.run_local = run_local
+
+ def GetCacheDirForRead(self):
+ matching_dirs = []
+ for glob_path in self.FormCacheDir(self.GetCacheKeyList(True)):
+ matching_dirs += glob.glob(glob_path)
+
+ if matching_dirs:
+ # Cache file found.
+ return matching_dirs[0]
+ return None
+
+ def GetCacheDirForWrite(self, get_keylist=False):
+ cache_path = self.FormCacheDir(self.GetCacheKeyList(False))[0]
+ if get_keylist:
+ args_str = '%s_%s_%s' % (self.test_args, self.profiler_args,
+ self.run_local)
+ version, image = results_report.ParseChromeosImage(
+ self.label.chromeos_image)
+ keylist = [
+ version, image, self.label.board, self.machine.name, self.test_name,
+ str(self.iteration), args_str
+ ]
+ return cache_path, keylist
+ return cache_path
+
+ def FormCacheDir(self, list_of_strings):
+ cache_key = ' '.join(list_of_strings)
+ cache_dir = misc.GetFilenameFromString(cache_key)
+ if self.label.cache_dir:
+ cache_home = os.path.abspath(os.path.expanduser(self.label.cache_dir))
+ cache_path = [os.path.join(cache_home, cache_dir)]
+ else:
+ cache_path = [os.path.join(SCRATCH_DIR, cache_dir)]
+
+ if len(self.share_cache):
+ for path in [x.strip() for x in self.share_cache.split(',')]:
+ if os.path.exists(path):
+ cache_path.append(os.path.join(path, cache_dir))
+ else:
+ self._logger.LogFatal('Unable to find shared cache: %s' % path)
+
+ return cache_path
+
+ def GetCacheKeyList(self, read):
+ if read and CacheConditions.MACHINES_MATCH not in self.cache_conditions:
+ machine_checksum = '*'
+ else:
+ machine_checksum = self.machine_manager.machine_checksum[self.label.name]
+ if read and CacheConditions.CHECKSUMS_MATCH not in self.cache_conditions:
+ checksum = '*'
+ elif self.label.image_type == 'trybot':
+ checksum = hashlib.md5(self.label.chromeos_image).hexdigest()
+ elif self.label.image_type == 'official':
+ checksum = '*'
+ else:
+ checksum = ImageChecksummer().Checksum(self.label, self.log_level)
+
+ if read and CacheConditions.IMAGE_PATH_MATCH not in self.cache_conditions:
+ image_path_checksum = '*'
+ else:
+ image_path_checksum = hashlib.md5(self.chromeos_image).hexdigest()
+
+ machine_id_checksum = ''
+ if read and CacheConditions.SAME_MACHINE_MATCH not in self.cache_conditions:
+ machine_id_checksum = '*'
+ else:
+ if self.machine and self.machine.name in self.label.remote:
+ machine_id_checksum = self.machine.machine_id_checksum
+ else:
+ for machine in self.machine_manager.GetMachines(self.label):
+ if machine.name == self.label.remote[0]:
+ machine_id_checksum = machine.machine_id_checksum
+ break
+
+ temp_test_args = '%s %s %s' % (self.test_args, self.profiler_args,
+ self.run_local)
+ test_args_checksum = hashlib.md5(temp_test_args).hexdigest()
+ return (image_path_checksum, self.test_name, str(self.iteration),
+ test_args_checksum, checksum, machine_checksum, machine_id_checksum,
+ str(self.CACHE_VERSION))
+
+ def ReadResult(self):
+ if CacheConditions.FALSE in self.cache_conditions:
+ cache_dir = self.GetCacheDirForWrite()
+ command = 'rm -rf %s' % (cache_dir,)
+ self.ce.RunCommand(command)
+ return None
+ cache_dir = self.GetCacheDirForRead()
+
+ if not cache_dir:
+ return None
+
+ if not os.path.isdir(cache_dir):
+ return None
+
+ if self.log_level == 'verbose':
+ self._logger.LogOutput('Trying to read from cache dir: %s' % cache_dir)
+ result = Result.CreateFromCacheHit(self._logger, self.log_level, self.label,
+ self.machine, cache_dir, self.test_name,
+ self.suite)
+ if not result:
+ return None
+
+ if (result.retval == 0 or
+ CacheConditions.RUN_SUCCEEDED not in self.cache_conditions):
+ return result
+
+ return None
+
+ def StoreResult(self, result):
+ cache_dir, keylist = self.GetCacheDirForWrite(get_keylist=True)
+ result.StoreToCacheDir(cache_dir, self.machine_manager, keylist)
+
+
+class MockResultsCache(ResultsCache):
+ """Class for mock testing, corresponding to ResultsCache class."""
+
+ def Init(self, *args):
+ pass
+
+ def ReadResult(self):
+ return None
+
+ def StoreResult(self, result):
+ pass
+
+
+class MockResult(Result):
+ """Class for mock testing, corresponding to Result class."""
+
+ def PopulateFromRun(self, out, err, retval, test, suite):
+ self.out = out
+ self.err = err
+ self.retval = retval
diff --git a/crosperf/results_cache_unittest.py b/crosperf/results_cache_unittest.py
new file mode 100755
index 00000000..9e97c9b1
--- /dev/null
+++ b/crosperf/results_cache_unittest.py
@@ -0,0 +1,1178 @@
+#!/usr/bin/env python2
+
+# Copyright (c) 2011 The Chromium OS Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+"""Module of result cache unittest."""
+
+from __future__ import print_function
+
+import mock
+import os
+import tempfile
+import unittest
+
+import image_checksummer
+import machine_manager
+import test_flag
+
+from label import MockLabel
+from results_cache import CacheConditions
+from results_cache import Result
+from results_cache import ResultsCache
+from results_cache import TelemetryResult
+from cros_utils import command_executer
+from cros_utils import logger
+from cros_utils import misc
+
+OUTPUT = """CMD (True): ./test_that.sh\
+ --remote=172.17.128.241 --board=lumpy LibCBench
+CMD (None): cd /usr/local/google/home/yunlian/gd/src/build/images/lumpy/latest/../../../../..; cros_sdk -- ./in_chroot_cmd6X7Cxu.sh
+Identity added: /tmp/test_that.PO1234567/autotest_key (/tmp/test_that.PO1234567/autotest_key)
+INFO : Using emerged autotests already installed at /build/lumpy/usr/local/autotest.
+
+INFO : Running the following control files 1 times:
+INFO : * 'client/site_tests/platform_LibCBench/control'
+
+INFO : Running client test client/site_tests/platform_LibCBench/control
+./server/autoserv -m 172.17.128.241 --ssh-port 22 -c client/site_tests/platform_LibCBench/control -r /tmp/test_that.PO1234567/platform_LibCBench --test-retry=0 --args
+ERROR:root:import statsd failed, no stats will be reported.
+14:20:22 INFO | Results placed in /tmp/test_that.PO1234567/platform_LibCBench
+14:20:22 INFO | Processing control file
+14:20:23 INFO | Starting master ssh connection '/usr/bin/ssh -a -x -N -o ControlMaster=yes -o ControlPath=/tmp/_autotmp_VIIP67ssh-master/socket -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o BatchMode=yes -o ConnectTimeout=30 -o ServerAliveInterval=180 -o ServerAliveCountMax=3 -o ConnectionAttempts=4 -o Protocol=2 -l root -p 22 172.17.128.241'
+14:20:23 ERROR| [stderr] Warning: Permanently added '172.17.128.241' (RSA) to the list of known hosts.
+14:20:23 INFO | INFO ---- ---- kernel=3.8.11 localtime=May 22 14:20:23 timestamp=1369257623
+14:20:23 INFO | Installing autotest on 172.17.128.241
+14:20:23 INFO | Using installation dir /usr/local/autotest
+14:20:23 WARNI| No job_repo_url for <remote host: 172.17.128.241>
+14:20:23 INFO | Could not install autotest using the packaging system: No repos to install an autotest client from. Trying other methods
+14:20:23 INFO | Installation of autotest completed
+14:20:24 WARNI| No job_repo_url for <remote host: 172.17.128.241>
+14:20:24 INFO | Executing /usr/local/autotest/bin/autotest /usr/local/autotest/control phase 0
+14:20:24 INFO | Entered autotestd_monitor.
+14:20:24 INFO | Finished launching tail subprocesses.
+14:20:24 INFO | Finished waiting on autotestd to start.
+14:20:26 INFO | START ---- ---- timestamp=1369257625 localtime=May 22 14:20:25
+14:20:26 INFO | START platform_LibCBench platform_LibCBench timestamp=1369257625 localtime=May 22 14:20:25
+14:20:30 INFO | GOOD platform_LibCBench platform_LibCBench timestamp=1369257630 localtime=May 22 14:20:30 completed successfully
+14:20:30 INFO | END GOOD platform_LibCBench platform_LibCBench timestamp=1369257630 localtime=May 22 14:20:30
+14:20:31 INFO | END GOOD ---- ---- timestamp=1369257630 localtime=May 22 14:20:30
+14:20:31 INFO | Got lock of exit_code_file.
+14:20:31 INFO | Released lock of exit_code_file and closed it.
+OUTPUT: ==============================
+OUTPUT: Current time: 2013-05-22 14:20:32.818831 Elapsed: 0:01:30 ETA: Unknown
+Done: 0% [ ]
+OUTPUT: Thread Status:
+RUNNING: 1 ('ttt: LibCBench (1)' 0:01:21)
+Machine Status:
+Machine Thread Lock Status Checksum
+172.17.128.241 ttt: LibCBench (1) True RUNNING 3ba9f2ecbb222f20887daea5583d86ba
+
+OUTPUT: ==============================
+14:20:33 INFO | Killing child processes.
+14:20:33 INFO | Client complete
+14:20:33 INFO | Finished processing control file
+14:20:33 INFO | Starting master ssh connection '/usr/bin/ssh -a -x -N -o ControlMaster=yes -o ControlPath=/tmp/_autotmp_aVJUgmssh-master/socket -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o BatchMode=yes -o ConnectTimeout=30 -o ServerAliveInterval=180 -o ServerAliveCountMax=3 -o ConnectionAttempts=4 -o Protocol=2 -l root -p 22 172.17.128.241'
+14:20:33 ERROR| [stderr] Warning: Permanently added '172.17.128.241' (RSA) to the list of known hosts.
+
+INFO : Test results:
+-------------------------------------------------------------------
+platform_LibCBench [ PASSED ]
+platform_LibCBench/platform_LibCBench [ PASSED ]
+platform_LibCBench/platform_LibCBench b_malloc_big1__0_ 0.00375231466667
+platform_LibCBench/platform_LibCBench b_malloc_big2__0_ 0.002951359
+platform_LibCBench/platform_LibCBench b_malloc_bubble__0_ 0.015066374
+platform_LibCBench/platform_LibCBench b_malloc_sparse__0_ 0.015053784
+platform_LibCBench/platform_LibCBench b_malloc_thread_local__0_ 0.01138439
+platform_LibCBench/platform_LibCBench b_malloc_thread_stress__0_ 0.0367894733333
+platform_LibCBench/platform_LibCBench b_malloc_tiny1__0_ 0.000768474333333
+platform_LibCBench/platform_LibCBench b_malloc_tiny2__0_ 0.000581407333333
+platform_LibCBench/platform_LibCBench b_pthread_create_serial1__0_ 0.0291785246667
+platform_LibCBench/platform_LibCBench b_pthread_createjoin_serial1__0_ 0.031907936
+platform_LibCBench/platform_LibCBench b_pthread_createjoin_serial2__0_ 0.043485347
+platform_LibCBench/platform_LibCBench b_pthread_uselesslock__0_ 0.0294113346667
+platform_LibCBench/platform_LibCBench b_regex_compile____a_b_c__d_b__ 0.00529833933333
+platform_LibCBench/platform_LibCBench b_regex_search____a_b_c__d_b__ 0.00165455066667
+platform_LibCBench/platform_LibCBench b_regex_search___a_25_b__ 0.0496191923333
+platform_LibCBench/platform_LibCBench b_stdio_putcgetc__0_ 0.100005711667
+platform_LibCBench/platform_LibCBench b_stdio_putcgetc_unlocked__0_ 0.0371443833333
+platform_LibCBench/platform_LibCBench b_string_memset__0_ 0.00275405066667
+platform_LibCBench/platform_LibCBench b_string_strchr__0_ 0.00456903
+platform_LibCBench/platform_LibCBench b_string_strlen__0_ 0.044893587
+platform_LibCBench/platform_LibCBench b_string_strstr___aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaac__ 0.118360778
+platform_LibCBench/platform_LibCBench b_string_strstr___aaaaaaaaaaaaaaaaaaaaaaaaac__ 0.068957325
+platform_LibCBench/platform_LibCBench b_string_strstr___aaaaaaaaaaaaaacccccccccccc__ 0.0135694476667
+platform_LibCBench/platform_LibCBench b_string_strstr___abcdefghijklmnopqrstuvwxyz__ 0.0134553343333
+platform_LibCBench/platform_LibCBench b_string_strstr___azbycxdwevfugthsirjqkplomn__ 0.0133123556667
+platform_LibCBench/platform_LibCBench b_utf8_bigbuf__0_ 0.0473772253333
+platform_LibCBench/platform_LibCBench b_utf8_onebyone__0_ 0.130938538333
+-------------------------------------------------------------------
+Total PASS: 2/2 (100%)
+
+INFO : Elapsed time: 0m16s
+"""
+
+error = """
+ERROR: Identity added: /tmp/test_that.Z4Ld/autotest_key (/tmp/test_that.Z4Ld/autotest_key)
+INFO : Using emerged autotests already installed at /build/lumpy/usr/local/autotest.
+INFO : Running the following control files 1 times:
+INFO : * 'client/site_tests/platform_LibCBench/control'
+INFO : Running client test client/site_tests/platform_LibCBench/control
+INFO : Test results:
+INFO : Elapsed time: 0m18s
+"""
+
+keyvals = {
+ '': 'PASS',
+ 'b_stdio_putcgetc__0_': '0.100005711667',
+ 'b_string_strstr___azbycxdwevfugthsirjqkplomn__': '0.0133123556667',
+ 'b_malloc_thread_local__0_': '0.01138439',
+ 'b_string_strlen__0_': '0.044893587',
+ 'b_malloc_sparse__0_': '0.015053784',
+ 'b_string_memset__0_': '0.00275405066667',
+ 'platform_LibCBench': 'PASS',
+ 'b_pthread_uselesslock__0_': '0.0294113346667',
+ 'b_string_strchr__0_': '0.00456903',
+ 'b_pthread_create_serial1__0_': '0.0291785246667',
+ 'b_string_strstr___aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaac__': '0.118360778',
+ 'b_string_strstr___aaaaaaaaaaaaaacccccccccccc__': '0.0135694476667',
+ 'b_pthread_createjoin_serial1__0_': '0.031907936',
+ 'b_malloc_thread_stress__0_': '0.0367894733333',
+ 'b_regex_search____a_b_c__d_b__': '0.00165455066667',
+ 'b_malloc_bubble__0_': '0.015066374',
+ 'b_malloc_big2__0_': '0.002951359',
+ 'b_stdio_putcgetc_unlocked__0_': '0.0371443833333',
+ 'b_pthread_createjoin_serial2__0_': '0.043485347',
+ 'b_regex_search___a_25_b__': '0.0496191923333',
+ 'b_utf8_bigbuf__0_': '0.0473772253333',
+ 'b_malloc_big1__0_': '0.00375231466667',
+ 'b_regex_compile____a_b_c__d_b__': '0.00529833933333',
+ 'b_string_strstr___aaaaaaaaaaaaaaaaaaaaaaaaac__': '0.068957325',
+ 'b_malloc_tiny2__0_': '0.000581407333333',
+ 'b_utf8_onebyone__0_': '0.130938538333',
+ 'b_malloc_tiny1__0_': '0.000768474333333',
+ 'b_string_strstr___abcdefghijklmnopqrstuvwxyz__': '0.0134553343333'
+}
+
+TMP_DIR1 = '/tmp/tmpAbcXyz'
+
+
+class MockResult(Result):
+ """Mock result class."""
+
+ def __init__(self, mylogger, label, logging_level, machine):
+ super(MockResult, self).__init__(mylogger, label, logging_level, machine)
+
+ def FindFilesInResultsDir(self, find_args):
+ return ''
+
+ # pylint: disable=arguments-differ
+ def GetKeyvals(self, temp=False):
+ if temp:
+ pass
+ return keyvals
+
+
+class ResultTest(unittest.TestCase):
+ """Result test class."""
+
+ def __init__(self, *args, **kwargs):
+ super(ResultTest, self).__init__(*args, **kwargs)
+ self.callFakeProcessResults = False
+ self.fakeCacheReturnResult = None
+ self.callGetResultsDir = False
+ self.callProcessResults = False
+ self.callGetPerfReportFiles = False
+ self.kv_dict = None
+ self.tmpdir = ''
+ self.callGetNewKeyvals = False
+ self.callGetResultsFile = False
+ self.callGetPerfDataFiles = False
+ self.args = None
+ self.callGatherPerfResults = False
+ self.mock_logger = mock.Mock(spec=logger.Logger)
+ self.mock_cmd_exec = mock.Mock(spec=command_executer.CommandExecuter)
+ self.mock_label = MockLabel('mock_label', 'chromeos_image', 'autotest_dir',
+ '/tmp', 'lumpy', 'remote', 'image_args',
+ 'cache_dir', 'average', 'gcc', None)
+
+ def testCreateFromRun(self):
+ result = MockResult.CreateFromRun(logger.GetLogger(), 'average',
+ self.mock_label, 'remote1', OUTPUT, error,
+ 0, True, 0)
+ self.assertEqual(result.keyvals, keyvals)
+ self.assertEqual(result.chroot_results_dir,
+ '/tmp/test_that.PO1234567/platform_LibCBench')
+ self.assertEqual(result.results_dir,
+ '/tmp/chroot/tmp/test_that.PO1234567/platform_LibCBench')
+ self.assertEqual(result.retval, 0)
+
+ def setUp(self):
+ self.result = Result(self.mock_logger, self.mock_label, 'average',
+ self.mock_cmd_exec)
+
+ @mock.patch.object(os.path, 'isdir')
+ @mock.patch.object(command_executer.CommandExecuter, 'RunCommand')
+ @mock.patch.object(command_executer.CommandExecuter, 'CopyFiles')
+ def test_copy_files_to(self, mock_copyfiles, mock_runcmd, mock_isdir):
+
+ files = ['src_file_1', 'src_file_2', 'src_file_3']
+ dest_dir = '/tmp/test'
+ self.mock_cmd_exec.RunCommand = mock_runcmd
+ self.mock_cmd_exec.CopyFiles = mock_copyfiles
+
+ mock_copyfiles.return_value = 0
+
+ #test 1. dest_dir exists; CopyFiles returns 0.
+ mock_isdir.return_value = True
+ self.result.CopyFilesTo(dest_dir, files)
+ self.assertEqual(mock_runcmd.call_count, 0)
+ self.assertEqual(mock_copyfiles.call_count, 3)
+ first_args = mock_copyfiles.call_args_list[0][0]
+ second_args = mock_copyfiles.call_args_list[1][0]
+ third_args = mock_copyfiles.call_args_list[2][0]
+ self.assertEqual(first_args, ('src_file_1', '/tmp/test/src_file_1.0'))
+ self.assertEqual(second_args, ('src_file_2', '/tmp/test/src_file_2.0'))
+ self.assertEqual(third_args, ('src_file_3', '/tmp/test/src_file_3.0'))
+
+ mock_runcmd.reset_mock()
+ mock_copyfiles.reset_mock()
+ #test 2. dest_dir does not exist; CopyFiles returns 0.
+ mock_isdir.return_value = False
+ self.result.CopyFilesTo(dest_dir, files)
+ self.assertEqual(mock_runcmd.call_count, 3)
+ self.assertEqual(mock_copyfiles.call_count, 3)
+ self.assertEqual(mock_runcmd.call_args_list[0],
+ mock_runcmd.call_args_list[1])
+ self.assertEqual(mock_runcmd.call_args_list[0],
+ mock_runcmd.call_args_list[2])
+ self.assertEqual(mock_runcmd.call_args_list[0][0], ('mkdir -p /tmp/test',))
+
+ #test 3. CopyFiles returns 1 (fails).
+ mock_copyfiles.return_value = 1
+ self.assertRaises(Exception, self.result.CopyFilesTo, dest_dir, files)
+
+ @mock.patch.object(Result, 'CopyFilesTo')
+ def test_copy_results_to(self, mockCopyFilesTo):
+ perf_data_files = [
+ '/tmp/perf.data.0', '/tmp/perf.data.1', '/tmp/perf.data.2'
+ ]
+ perf_report_files = [
+ '/tmp/perf.report.0', '/tmp/perf.report.1', '/tmp/perf.report.2'
+ ]
+
+ self.result.perf_data_files = perf_data_files
+ self.result.perf_report_files = perf_report_files
+
+ self.result.CopyFilesTo = mockCopyFilesTo
+ self.result.CopyResultsTo('/tmp/results/')
+ self.assertEqual(mockCopyFilesTo.call_count, 2)
+ self.assertEqual(len(mockCopyFilesTo.call_args_list), 2)
+ self.assertEqual(mockCopyFilesTo.call_args_list[0][0],
+ ('/tmp/results/', perf_data_files))
+ self.assertEqual(mockCopyFilesTo.call_args_list[1][0],
+ ('/tmp/results/', perf_report_files))
+
+ def test_get_new_keyvals(self):
+ kv_dict = {}
+
+ def FakeGetDataMeasurementsFiles():
+ filename = os.path.join(os.getcwd(), 'unittest_keyval_file.txt')
+ return [filename]
+
+ self.result.GetDataMeasurementsFiles = FakeGetDataMeasurementsFiles
+ kv_dict2, udict = self.result.GetNewKeyvals(kv_dict)
+ self.assertEqual(kv_dict2, {
+ u'Box2D__Box2D': 4775,
+ u'Mandreel__Mandreel': 6620,
+ u'Gameboy__Gameboy': 9901,
+ u'Crypto__Crypto': 8737,
+ u'telemetry_page_measurement_results__num_errored': 0,
+ u'telemetry_page_measurement_results__num_failed': 0,
+ u'PdfJS__PdfJS': 6455,
+ u'Total__Score': 7918,
+ u'EarleyBoyer__EarleyBoyer': 14340,
+ u'MandreelLatency__MandreelLatency': 5188,
+ u'CodeLoad__CodeLoad': 6271,
+ u'DeltaBlue__DeltaBlue': 14401,
+ u'Typescript__Typescript': 9815,
+ u'SplayLatency__SplayLatency': 7653,
+ u'zlib__zlib': 16094,
+ u'Richards__Richards': 10358,
+ u'RegExp__RegExp': 1765,
+ u'NavierStokes__NavierStokes': 9815,
+ u'Splay__Splay': 4425,
+ u'RayTrace__RayTrace': 16600
+ })
+ self.assertEqual(udict, {
+ u'Box2D__Box2D': u'score',
+ u'Mandreel__Mandreel': u'score',
+ u'Gameboy__Gameboy': u'score',
+ u'Crypto__Crypto': u'score',
+ u'telemetry_page_measurement_results__num_errored': u'count',
+ u'telemetry_page_measurement_results__num_failed': u'count',
+ u'PdfJS__PdfJS': u'score',
+ u'Total__Score': u'score',
+ u'EarleyBoyer__EarleyBoyer': u'score',
+ u'MandreelLatency__MandreelLatency': u'score',
+ u'CodeLoad__CodeLoad': u'score',
+ u'DeltaBlue__DeltaBlue': u'score',
+ u'Typescript__Typescript': u'score',
+ u'SplayLatency__SplayLatency': u'score',
+ u'zlib__zlib': u'score',
+ u'Richards__Richards': u'score',
+ u'RegExp__RegExp': u'score',
+ u'NavierStokes__NavierStokes': u'score',
+ u'Splay__Splay': u'score',
+ u'RayTrace__RayTrace': u'score'
+ })
+
+ def test_append_telemetry_units(self):
+ kv_dict = {
+ u'Box2D__Box2D': 4775,
+ u'Mandreel__Mandreel': 6620,
+ u'Gameboy__Gameboy': 9901,
+ u'Crypto__Crypto': 8737,
+ u'PdfJS__PdfJS': 6455,
+ u'Total__Score': 7918,
+ u'EarleyBoyer__EarleyBoyer': 14340,
+ u'MandreelLatency__MandreelLatency': 5188,
+ u'CodeLoad__CodeLoad': 6271,
+ u'DeltaBlue__DeltaBlue': 14401,
+ u'Typescript__Typescript': 9815,
+ u'SplayLatency__SplayLatency': 7653,
+ u'zlib__zlib': 16094,
+ u'Richards__Richards': 10358,
+ u'RegExp__RegExp': 1765,
+ u'NavierStokes__NavierStokes': 9815,
+ u'Splay__Splay': 4425,
+ u'RayTrace__RayTrace': 16600
+ }
+ units_dict = {
+ u'Box2D__Box2D': u'score',
+ u'Mandreel__Mandreel': u'score',
+ u'Gameboy__Gameboy': u'score',
+ u'Crypto__Crypto': u'score',
+ u'PdfJS__PdfJS': u'score',
+ u'Total__Score': u'score',
+ u'EarleyBoyer__EarleyBoyer': u'score',
+ u'MandreelLatency__MandreelLatency': u'score',
+ u'CodeLoad__CodeLoad': u'score',
+ u'DeltaBlue__DeltaBlue': u'score',
+ u'Typescript__Typescript': u'score',
+ u'SplayLatency__SplayLatency': u'score',
+ u'zlib__zlib': u'score',
+ u'Richards__Richards': u'score',
+ u'RegExp__RegExp': u'score',
+ u'NavierStokes__NavierStokes': u'score',
+ u'Splay__Splay': u'score',
+ u'RayTrace__RayTrace': u'score'
+ }
+
+ results_dict = self.result.AppendTelemetryUnits(kv_dict, units_dict)
+ self.assertEqual(results_dict, {
+ u'Box2D__Box2D': [4775, u'score'],
+ u'Splay__Splay': [4425, u'score'],
+ u'Gameboy__Gameboy': [9901, u'score'],
+ u'Crypto__Crypto': [8737, u'score'],
+ u'PdfJS__PdfJS': [6455, u'score'],
+ u'Total__Score': [7918, u'score'],
+ u'EarleyBoyer__EarleyBoyer': [14340, u'score'],
+ u'MandreelLatency__MandreelLatency': [5188, u'score'],
+ u'DeltaBlue__DeltaBlue': [14401, u'score'],
+ u'SplayLatency__SplayLatency': [7653, u'score'],
+ u'Mandreel__Mandreel': [6620, u'score'],
+ u'Richards__Richards': [10358, u'score'],
+ u'zlib__zlib': [16094, u'score'],
+ u'CodeLoad__CodeLoad': [6271, u'score'],
+ u'Typescript__Typescript': [9815, u'score'],
+ u'RegExp__RegExp': [1765, u'score'],
+ u'RayTrace__RayTrace': [16600, u'score'],
+ u'NavierStokes__NavierStokes': [9815, u'score']
+ })
+
+ @mock.patch.object(misc, 'GetInsideChrootPath')
+ @mock.patch.object(tempfile, 'mkdtemp')
+ @mock.patch.object(command_executer.CommandExecuter, 'RunCommand')
+ @mock.patch.object(command_executer.CommandExecuter,
+ 'ChrootRunCommandWOutput')
+ def test_get_keyvals(self, mock_chrootruncmd, mock_runcmd, mock_mkdtemp,
+ mock_getpath):
+
+ self.kv_dict = {}
+ self.callGetNewKeyvals = False
+
+ def reset():
+ self.kv_dict = {}
+ self.callGetNewKeyvals = False
+ mock_chrootruncmd.reset_mock()
+ mock_runcmd.reset_mock()
+ mock_mkdtemp.reset_mock()
+ mock_getpath.reset_mock()
+
+ def FakeGetNewKeyvals(kv_dict):
+ self.kv_dict = kv_dict
+ self.callGetNewKeyvals = True
+ return_kvdict = {'first_time': 680, 'Total': 10}
+ return_udict = {'first_time': 'ms', 'Total': 'score'}
+ return return_kvdict, return_udict
+
+ mock_mkdtemp.return_value = TMP_DIR1
+ mock_chrootruncmd.return_value = [
+ '', ('%s,PASS\n%s/telemetry_Crosperf,PASS\n') % (TMP_DIR1, TMP_DIR1), ''
+ ]
+ mock_getpath.return_value = TMP_DIR1
+ self.result.ce.ChrootRunCommandWOutput = mock_chrootruncmd
+ self.result.ce.RunCommand = mock_runcmd
+ self.result.GetNewKeyvals = FakeGetNewKeyvals
+ self.result.suite = 'telemetry_Crosperf'
+ self.result.results_dir = '/tmp/test_that_resultsNmq'
+
+ # Test 1. no self.temp_dir.
+ res = self.result.GetKeyvals()
+ self.assertTrue(self.callGetNewKeyvals)
+ self.assertEqual(self.kv_dict, {'': 'PASS', 'telemetry_Crosperf': 'PASS'})
+ self.assertEqual(mock_runcmd.call_count, 1)
+ self.assertEqual(mock_runcmd.call_args_list[0][0],
+ ('cp -r /tmp/test_that_resultsNmq/* %s' % TMP_DIR1,))
+ self.assertEqual(mock_chrootruncmd.call_count, 1)
+ self.assertEqual(mock_chrootruncmd.call_args_list[0][0], (
+ '/tmp', ('python generate_test_report --no-color --csv %s') % TMP_DIR1))
+ self.assertEqual(mock_getpath.call_count, 1)
+ self.assertEqual(mock_mkdtemp.call_count, 1)
+ self.assertEqual(res, {'Total': [10, 'score'], 'first_time': [680, 'ms']})
+
+ # Test 2. self.temp_dir
+ reset()
+ mock_chrootruncmd.return_value = [
+ '', ('/tmp/tmpJCajRG,PASS\n/tmp/tmpJCajRG/'
+ 'telemetry_Crosperf,PASS\n'), ''
+ ]
+ mock_getpath.return_value = '/tmp/tmpJCajRG'
+ self.result.temp_dir = '/tmp/tmpJCajRG'
+ res = self.result.GetKeyvals()
+ self.assertEqual(mock_runcmd.call_count, 0)
+ self.assertEqual(mock_mkdtemp.call_count, 0)
+ self.assertEqual(mock_chrootruncmd.call_count, 1)
+ self.assertTrue(self.callGetNewKeyvals)
+ self.assertEqual(self.kv_dict, {'': 'PASS', 'telemetry_Crosperf': 'PASS'})
+ self.assertEqual(res, {'Total': [10, 'score'], 'first_time': [680, 'ms']})
+
+ # Test 3. suite != telemetry_Crosperf. Normally this would be for
+ # running non-Telemetry autotests, such as BootPerfServer. In this test
+ # case, the keyvals we have set up were returned from a Telemetry test run;
+ # so this pass is basically testing that we don't append the units to the
+ # test results (which we do for Telemetry autotest runs).
+ reset()
+ self.result.suite = ''
+ res = self.result.GetKeyvals()
+ self.assertEqual(res, {'Total': 10, 'first_time': 680})
+
+ def test_get_results_dir(self):
+
+ self.result.out = ''
+ self.assertRaises(Exception, self.result.GetResultsDir)
+
+ self.result.out = OUTPUT
+ resdir = self.result.GetResultsDir()
+ self.assertEqual(resdir, '/tmp/test_that.PO1234567/platform_LibCBench')
+
+ @mock.patch.object(command_executer.CommandExecuter, 'RunCommandGeneric')
+ def test_find_files_in_results_dir(self, mock_runcmd):
+
+ self.result.results_dir = None
+ res = self.result.FindFilesInResultsDir('-name perf.data')
+ self.assertIsNone(res)
+
+ self.result.ce.RunCommand = mock_runcmd
+ self.result.results_dir = '/tmp/test_results'
+ mock_runcmd.return_value = [0, '/tmp/test_results/perf.data', '']
+ res = self.result.FindFilesInResultsDir('-name perf.data')
+ self.assertEqual(mock_runcmd.call_count, 1)
+ self.assertEqual(mock_runcmd.call_args_list[0][0],
+ ('find /tmp/test_results -name perf.data',))
+ self.assertEqual(res, '/tmp/test_results/perf.data')
+
+ mock_runcmd.reset_mock()
+ mock_runcmd.return_value = [1, '', '']
+ self.assertRaises(Exception, self.result.FindFilesInResultsDir,
+ '-name perf.data')
+
+ @mock.patch.object(Result, 'FindFilesInResultsDir')
+ def test_get_perf_data_files(self, mock_findfiles):
+ self.args = None
+
+ mock_findfiles.return_value = 'line1\nline1\n'
+ self.result.FindFilesInResultsDir = mock_findfiles
+ res = self.result.GetPerfDataFiles()
+ self.assertEqual(res, ['line1', 'line1'])
+ self.assertEqual(mock_findfiles.call_args_list[0][0], ('-name perf.data',))
+
+ def test_get_perf_report_files(self):
+ self.args = None
+
+ def FakeFindFiles(find_args):
+ self.args = find_args
+ return 'line1\nline1\n'
+
+ self.result.FindFilesInResultsDir = FakeFindFiles
+ res = self.result.GetPerfReportFiles()
+ self.assertEqual(res, ['line1', 'line1'])
+ self.assertEqual(self.args, '-name perf.data.report')
+
+ def test_get_data_measurement_files(self):
+ self.args = None
+
+ def FakeFindFiles(find_args):
+ self.args = find_args
+ return 'line1\nline1\n'
+
+ self.result.FindFilesInResultsDir = FakeFindFiles
+ res = self.result.GetDataMeasurementsFiles()
+ self.assertEqual(res, ['line1', 'line1'])
+ self.assertEqual(self.args, '-name perf_measurements')
+
+ @mock.patch.object(misc, 'GetInsideChrootPath')
+ @mock.patch.object(command_executer.CommandExecuter, 'ChrootRunCommand')
+ def test_generate_perf_report_files(self, mock_chrootruncmd, mock_getpath):
+ fake_file = '/usr/chromeos/chroot/tmp/results/fake_file'
+ self.result.perf_data_files = ['/tmp/results/perf.data']
+ self.result.board = 'lumpy'
+ mock_getpath.return_value = fake_file
+ self.result.ce.ChrootRunCommand = mock_chrootruncmd
+ tmp = self.result.GeneratePerfReportFiles()
+ self.assertEqual(tmp, ['/tmp/chroot%s' % fake_file])
+ self.assertEqual(mock_chrootruncmd.call_args_list[0][0],
+ ('/tmp',
+ ('/usr/sbin/perf report -n --symfs /build/lumpy '
+ '--vmlinux /build/lumpy/usr/lib/debug/boot/vmlinux '
+ '--kallsyms /build/lumpy/boot/System.map-* -i '
+ '%s --stdio > %s') % (fake_file, fake_file)))
+
+ @mock.patch.object(misc, 'GetOutsideChrootPath')
+ def test_populate_from_run(self, mock_getpath):
+
+ def FakeGetResultsDir():
+ self.callGetResultsDir = True
+ return '/tmp/results_dir'
+
+ def FakeGetResultsFile():
+ self.callGetResultsFile = True
+ return []
+
+ def FakeGetPerfDataFiles():
+ self.callGetPerfDataFiles = True
+ return []
+
+ def FakeGetPerfReportFiles():
+ self.callGetPerfReportFiles = True
+ return []
+
+ def FakeProcessResults(show_results=False):
+ if show_results:
+ pass
+ self.callProcessResults = True
+
+ if mock_getpath:
+ pass
+ mock.get_path = '/tmp/chromeos/tmp/results_dir'
+ self.result.chromeos_root = '/tmp/chromeos'
+
+ self.callGetResultsDir = False
+ self.callGetResultsFile = False
+ self.callGetPerfDataFiles = False
+ self.callGetPerfReportFiles = False
+ self.callProcessResults = False
+
+ self.result.GetResultsDir = FakeGetResultsDir
+ self.result.GetResultsFile = FakeGetResultsFile
+ self.result.GetPerfDataFiles = FakeGetPerfDataFiles
+ self.result.GeneratePerfReportFiles = FakeGetPerfReportFiles
+ self.result.ProcessResults = FakeProcessResults
+
+ self.result.PopulateFromRun(OUTPUT, '', 0, 'test', 'telemetry_Crosperf')
+ self.assertTrue(self.callGetResultsDir)
+ self.assertTrue(self.callGetResultsFile)
+ self.assertTrue(self.callGetPerfDataFiles)
+ self.assertTrue(self.callGetPerfReportFiles)
+ self.assertTrue(self.callProcessResults)
+
+ def test_process_results(self):
+
+ def FakeGetKeyvals(show_all=False):
+ if show_all:
+ return {'first_time': 680, 'Total': 10}
+ else:
+ return {'Total': 10}
+
+ def FakeGatherPerfResults():
+ self.callGatherPerfResults = True
+
+ self.callGatherPerfResults = False
+
+ self.result.GetKeyvals = FakeGetKeyvals
+ self.result.GatherPerfResults = FakeGatherPerfResults
+
+ self.result.retval = 0
+ self.result.ProcessResults()
+ self.assertTrue(self.callGatherPerfResults)
+ self.assertEqual(len(self.result.keyvals), 2)
+ self.assertEqual(self.result.keyvals, {'Total': 10, 'retval': 0})
+
+ self.result.retval = 1
+ self.result.ProcessResults()
+ self.assertEqual(len(self.result.keyvals), 2)
+ self.assertEqual(self.result.keyvals, {'Total': 10, 'retval': 1})
+
+ @mock.patch.object(misc, 'GetInsideChrootPath')
+ @mock.patch.object(command_executer.CommandExecuter,
+ 'ChrootRunCommandWOutput')
+ def test_populate_from_cache_dir(self, mock_runchrootcmd, mock_getpath):
+
+ # pylint: disable=redefined-builtin
+ def FakeMkdtemp(dir=None):
+ if dir:
+ pass
+ return self.tmpdir
+
+ current_path = os.getcwd()
+ cache_dir = os.path.join(current_path, 'test_cache/test_input')
+ self.result.ce = command_executer.GetCommandExecuter(log_level='average')
+ self.result.ce.ChrootRunCommandWOutput = mock_runchrootcmd
+ mock_runchrootcmd.return_value = [
+ '', ('%s,PASS\n%s/\telemetry_Crosperf,PASS\n') % (TMP_DIR1, TMP_DIR1),
+ ''
+ ]
+ mock_getpath.return_value = TMP_DIR1
+ self.tmpdir = tempfile.mkdtemp()
+ save_real_mkdtemp = tempfile.mkdtemp
+ tempfile.mkdtemp = FakeMkdtemp
+
+ self.result.PopulateFromCacheDir(cache_dir, 'sunspider',
+ 'telemetry_Crosperf')
+ self.assertEqual(self.result.keyvals, {
+ u'Total__Total': [444.0, u'ms'],
+ u'regexp-dna__regexp-dna': [16.2, u'ms'],
+ u'telemetry_page_measurement_results__num_failed': [0, u'count'],
+ u'telemetry_page_measurement_results__num_errored': [0, u'count'],
+ u'string-fasta__string-fasta': [23.2, u'ms'],
+ u'crypto-sha1__crypto-sha1': [11.6, u'ms'],
+ u'bitops-3bit-bits-in-byte__bitops-3bit-bits-in-byte': [3.2, u'ms'],
+ u'access-nsieve__access-nsieve': [7.9, u'ms'],
+ u'bitops-nsieve-bits__bitops-nsieve-bits': [9.4, u'ms'],
+ u'string-validate-input__string-validate-input': [19.3, u'ms'],
+ u'3d-raytrace__3d-raytrace': [24.7, u'ms'],
+ u'3d-cube__3d-cube': [28.0, u'ms'],
+ u'string-unpack-code__string-unpack-code': [46.7, u'ms'],
+ u'date-format-tofte__date-format-tofte': [26.3, u'ms'],
+ u'math-partial-sums__math-partial-sums': [22.0, u'ms'],
+ '\telemetry_Crosperf': ['PASS', ''],
+ u'crypto-aes__crypto-aes': [15.2, u'ms'],
+ u'bitops-bitwise-and__bitops-bitwise-and': [8.4, u'ms'],
+ u'crypto-md5__crypto-md5': [10.5, u'ms'],
+ u'string-tagcloud__string-tagcloud': [52.8, u'ms'],
+ u'access-nbody__access-nbody': [8.5, u'ms'],
+ 'retval': 0,
+ u'math-spectral-norm__math-spectral-norm': [6.6, u'ms'],
+ u'math-cordic__math-cordic': [8.7, u'ms'],
+ u'access-binary-trees__access-binary-trees': [4.5, u'ms'],
+ u'controlflow-recursive__controlflow-recursive': [4.4, u'ms'],
+ u'access-fannkuch__access-fannkuch': [17.8, u'ms'],
+ u'string-base64__string-base64': [16.0, u'ms'],
+ u'date-format-xparb__date-format-xparb': [20.9, u'ms'],
+ u'3d-morph__3d-morph': [22.1, u'ms'],
+ u'bitops-bits-in-byte__bitops-bits-in-byte': [9.1, u'ms']
+ })
+
+ # Clean up after test.
+ tempfile.mkdtemp = save_real_mkdtemp
+ command = 'rm -Rf %s' % self.tmpdir
+ self.result.ce.RunCommand(command)
+
+ @mock.patch.object(misc, 'GetRoot')
+ @mock.patch.object(command_executer.CommandExecuter, 'RunCommand')
+ def test_cleanup(self, mock_runcmd, mock_getroot):
+
+ # Test 1. 'rm_chroot_tmp' is True; self.results_dir exists;
+ # self.temp_dir exists; results_dir name contains 'test_that_results_'.
+ mock_getroot.return_value = ['/tmp/tmp_AbcXyz', 'test_that_results_fake']
+ self.result.ce.RunCommand = mock_runcmd
+ self.result.results_dir = 'test_results_dir'
+ self.result.temp_dir = 'testtemp_dir'
+ self.result.CleanUp(True)
+ self.assertEqual(mock_getroot.call_count, 1)
+ self.assertEqual(mock_runcmd.call_count, 2)
+ self.assertEqual(mock_runcmd.call_args_list[0][0],
+ ('rm -rf test_results_dir',))
+ self.assertEqual(mock_runcmd.call_args_list[1][0], ('rm -rf testtemp_dir',))
+
+ # Test 2. Same, except ath results_dir name does not contain
+ # 'test_that_results_'
+ mock_getroot.reset_mock()
+ mock_runcmd.reset_mock()
+ mock_getroot.return_value = ['/tmp/tmp_AbcXyz', 'other_results_fake']
+ self.result.ce.RunCommand = mock_runcmd
+ self.result.results_dir = 'test_results_dir'
+ self.result.temp_dir = 'testtemp_dir'
+ self.result.CleanUp(True)
+ self.assertEqual(mock_getroot.call_count, 1)
+ self.assertEqual(mock_runcmd.call_count, 2)
+ self.assertEqual(mock_runcmd.call_args_list[0][0],
+ ('rm -rf /tmp/tmp_AbcXyz',))
+ self.assertEqual(mock_runcmd.call_args_list[1][0], ('rm -rf testtemp_dir',))
+
+ # Test 3. mock_getroot returns nothing; 'rm_chroot_tmp' is False.
+ mock_getroot.reset_mock()
+ mock_runcmd.reset_mock()
+ self.result.CleanUp(False)
+ self.assertEqual(mock_getroot.call_count, 0)
+ self.assertEqual(mock_runcmd.call_count, 1)
+ self.assertEqual(mock_runcmd.call_args_list[0][0], ('rm -rf testtemp_dir',))
+
+ # Test 4. 'rm_chroot_tmp' is True, but result_dir & temp_dir are None.
+ mock_getroot.reset_mock()
+ mock_runcmd.reset_mock()
+ self.result.results_dir = None
+ self.result.temp_dir = None
+ self.result.CleanUp(True)
+ self.assertEqual(mock_getroot.call_count, 0)
+ self.assertEqual(mock_runcmd.call_count, 0)
+
+ @mock.patch.object(misc, 'GetInsideChrootPath')
+ @mock.patch.object(command_executer.CommandExecuter, 'ChrootRunCommand')
+ def test_store_to_cache_dir(self, mock_chrootruncmd, mock_getpath):
+
+ def FakeMkdtemp(directory=''):
+ if directory:
+ pass
+ return self.tmpdir
+
+ if mock_chrootruncmd or mock_getpath:
+ pass
+ current_path = os.getcwd()
+ cache_dir = os.path.join(current_path, 'test_cache/test_output')
+
+ self.result.ce = command_executer.GetCommandExecuter(log_level='average')
+ self.result.out = OUTPUT
+ self.result.err = error
+ self.result.retval = 0
+ self.tmpdir = tempfile.mkdtemp()
+ if not os.path.exists(self.tmpdir):
+ os.makedirs(self.tmpdir)
+ self.result.results_dir = os.path.join(os.getcwd(), 'test_cache')
+ save_real_mkdtemp = tempfile.mkdtemp
+ tempfile.mkdtemp = FakeMkdtemp
+
+ mock_mm = machine_manager.MockMachineManager('/tmp/chromeos_root', 0,
+ 'average', '')
+ mock_mm.machine_checksum_string['mock_label'] = 'fake_machine_checksum123'
+
+ mock_keylist = ['key1', 'key2', 'key3']
+ test_flag.SetTestMode(True)
+ self.result.StoreToCacheDir(cache_dir, mock_mm, mock_keylist)
+
+ # Check that the correct things were written to the 'cache'.
+ test_dir = os.path.join(os.getcwd(), 'test_cache/test_output')
+ base_dir = os.path.join(os.getcwd(), 'test_cache/compare_output')
+ self.assertTrue(os.path.exists(os.path.join(test_dir, 'autotest.tbz2')))
+ self.assertTrue(os.path.exists(os.path.join(test_dir, 'machine.txt')))
+ self.assertTrue(os.path.exists(os.path.join(test_dir, 'results.txt')))
+
+ f1 = os.path.join(test_dir, 'machine.txt')
+ f2 = os.path.join(base_dir, 'machine.txt')
+ cmd = 'diff %s %s' % (f1, f2)
+ [_, out, _] = self.result.ce.RunCommandWOutput(cmd)
+ self.assertEqual(len(out), 0)
+
+ f1 = os.path.join(test_dir, 'results.txt')
+ f2 = os.path.join(base_dir, 'results.txt')
+ cmd = 'diff %s %s' % (f1, f2)
+ [_, out, _] = self.result.ce.RunCommandWOutput(cmd)
+ self.assertEqual(len(out), 0)
+
+ # Clean up after test.
+ tempfile.mkdtemp = save_real_mkdtemp
+ command = 'rm %s/*' % test_dir
+ self.result.ce.RunCommand(command)
+
+
+TELEMETRY_RESULT_KEYVALS = {
+ 'http://www.webkit.org/perf/sunspider-1.0.2/sunspider-1.0.2/driver.html '
+ 'math-cordic (ms)':
+ '11.4',
+ 'http://www.webkit.org/perf/sunspider-1.0.2/sunspider-1.0.2/driver.html '
+ 'access-nbody (ms)':
+ '6.9',
+ 'http://www.webkit.org/perf/sunspider-1.0.2/sunspider-1.0.2/driver.html '
+ 'access-fannkuch (ms)':
+ '26.3',
+ 'http://www.webkit.org/perf/sunspider-1.0.2/sunspider-1.0.2/driver.html '
+ 'math-spectral-norm (ms)':
+ '6.3',
+ 'http://www.webkit.org/perf/sunspider-1.0.2/sunspider-1.0.2/driver.html '
+ 'bitops-nsieve-bits (ms)':
+ '9.3',
+ 'http://www.webkit.org/perf/sunspider-1.0.2/sunspider-1.0.2/driver.html '
+ 'math-partial-sums (ms)':
+ '32.8',
+ 'http://www.webkit.org/perf/sunspider-1.0.2/sunspider-1.0.2/driver.html '
+ 'regexp-dna (ms)':
+ '16.1',
+ 'http://www.webkit.org/perf/sunspider-1.0.2/sunspider-1.0.2/driver.html '
+ '3d-cube (ms)':
+ '42.7',
+ 'http://www.webkit.org/perf/sunspider-1.0.2/sunspider-1.0.2/driver.html '
+ 'crypto-md5 (ms)':
+ '10.8',
+ 'http://www.webkit.org/perf/sunspider-1.0.2/sunspider-1.0.2/driver.html '
+ 'crypto-sha1 (ms)':
+ '12.4',
+ 'http://www.webkit.org/perf/sunspider-1.0.2/sunspider-1.0.2/driver.html '
+ 'string-tagcloud (ms)':
+ '47.2',
+ 'http://www.webkit.org/perf/sunspider-1.0.2/sunspider-1.0.2/driver.html '
+ 'string-fasta (ms)':
+ '36.3',
+ 'http://www.webkit.org/perf/sunspider-1.0.2/sunspider-1.0.2/driver.html '
+ 'access-binary-trees (ms)':
+ '7.3',
+ 'http://www.webkit.org/perf/sunspider-1.0.2/sunspider-1.0.2/driver.html '
+ 'date-format-xparb (ms)':
+ '138.1',
+ 'http://www.webkit.org/perf/sunspider-1.0.2/sunspider-1.0.2/driver.html '
+ 'crypto-aes (ms)':
+ '19.2',
+ 'http://www.webkit.org/perf/sunspider-1.0.2/sunspider-1.0.2/driver.html '
+ 'Total (ms)':
+ '656.5',
+ 'http://www.webkit.org/perf/sunspider-1.0.2/sunspider-1.0.2/driver.html '
+ 'string-base64 (ms)':
+ '17.5',
+ 'http://www.webkit.org/perf/sunspider-1.0.2/sunspider-1.0.2/driver.html '
+ 'string-validate-input (ms)':
+ '24.8',
+ 'http://www.webkit.org/perf/sunspider-1.0.2/sunspider-1.0.2/driver.html '
+ '3d-raytrace (ms)':
+ '28.7',
+ 'http://www.webkit.org/perf/sunspider-1.0.2/sunspider-1.0.2/driver.html '
+ 'controlflow-recursive (ms)':
+ '5.3',
+ 'http://www.webkit.org/perf/sunspider-1.0.2/sunspider-1.0.2/driver.html '
+ 'bitops-bits-in-byte (ms)':
+ '9.8',
+ 'http://www.webkit.org/perf/sunspider-1.0.2/sunspider-1.0.2/driver.html '
+ '3d-morph (ms)':
+ '50.2',
+ 'http://www.webkit.org/perf/sunspider-1.0.2/sunspider-1.0.2/driver.html '
+ 'bitops-bitwise-and (ms)':
+ '8.8',
+ 'http://www.webkit.org/perf/sunspider-1.0.2/sunspider-1.0.2/driver.html '
+ 'access-nsieve (ms)':
+ '8.6',
+ 'http://www.webkit.org/perf/sunspider-1.0.2/sunspider-1.0.2/driver.html '
+ 'date-format-tofte (ms)':
+ '31.2',
+ 'http://www.webkit.org/perf/sunspider-1.0.2/sunspider-1.0.2/driver.html '
+ 'bitops-3bit-bits-in-byte (ms)':
+ '3.5',
+ 'retval':
+ 0,
+ 'http://www.webkit.org/perf/sunspider-1.0.2/sunspider-1.0.2/driver.html '
+ 'string-unpack-code (ms)':
+ '45.0'
+}
+
+PURE_TELEMETRY_OUTPUT = """
+page_name,3d-cube (ms),3d-morph (ms),3d-raytrace (ms),Total (ms),access-binary-trees (ms),access-fannkuch (ms),access-nbody (ms),access-nsieve (ms),bitops-3bit-bits-in-byte (ms),bitops-bits-in-byte (ms),bitops-bitwise-and (ms),bitops-nsieve-bits (ms),controlflow-recursive (ms),crypto-aes (ms),crypto-md5 (ms),crypto-sha1 (ms),date-format-tofte (ms),date-format-xparb (ms),math-cordic (ms),math-partial-sums (ms),math-spectral-norm (ms),regexp-dna (ms),string-base64 (ms),string-fasta (ms),string-tagcloud (ms),string-unpack-code (ms),string-validate-input (ms)\r\nhttp://www.webkit.org/perf/sunspider-1.0.2/sunspider-1.0.2/driver.html,42.7,50.2,28.7,656.5,7.3,26.3,6.9,8.6,3.5,9.8,8.8,9.3,5.3,19.2,10.8,12.4,31.2,138.1,11.4,32.8,6.3,16.1,17.5,36.3,47.2,45.0,24.8\r
+"""
+
+
+class TelemetryResultTest(unittest.TestCase):
+ """Telemetry result test."""
+
+ def __init__(self, *args, **kwargs):
+ super(TelemetryResultTest, self).__init__(*args, **kwargs)
+ self.callFakeProcessResults = False
+ self.result = None
+ self.mock_logger = mock.Mock(spec=logger.Logger)
+ self.mock_cmd_exec = mock.Mock(spec=command_executer.CommandExecuter)
+ self.mock_label = MockLabel('mock_label', 'chromeos_image', 'autotest_dir',
+ '/tmp', 'lumpy', 'remote', 'image_args',
+ 'cache_dir', 'average', 'gcc', None)
+ self.mock_machine = machine_manager.MockCrosMachine('falco.cros',
+ '/tmp/chromeos',
+ 'average')
+
+ def test_populate_from_run(self):
+
+ def FakeProcessResults():
+ self.callFakeProcessResults = True
+
+ self.callFakeProcessResults = False
+ self.result = TelemetryResult(self.mock_logger, self.mock_label, 'average',
+ self.mock_cmd_exec)
+ self.result.ProcessResults = FakeProcessResults
+ self.result.PopulateFromRun(OUTPUT, error, 3, 'fake_test',
+ 'telemetry_Crosperf')
+ self.assertTrue(self.callFakeProcessResults)
+ self.assertEqual(self.result.out, OUTPUT)
+ self.assertEqual(self.result.err, error)
+ self.assertEqual(self.result.retval, 3)
+
+ def test_populate_from_cache_dir_and_process_results(self):
+
+ self.result = TelemetryResult(self.mock_logger, self.mock_label, 'average',
+ self.mock_machine)
+ current_path = os.getcwd()
+ cache_dir = os.path.join(current_path,
+ 'test_cache/test_puretelemetry_input')
+ self.result.PopulateFromCacheDir(cache_dir, '', '')
+ self.assertEqual(self.result.out.strip(), PURE_TELEMETRY_OUTPUT.strip())
+ self.assertEqual(self.result.err, '')
+ self.assertEqual(self.result.retval, 0)
+ self.assertEqual(self.result.keyvals, TELEMETRY_RESULT_KEYVALS)
+
+
+class ResultsCacheTest(unittest.TestCase):
+ """Resultcache test class."""
+
+ def __init__(self, *args, **kwargs):
+ super(ResultsCacheTest, self).__init__(*args, **kwargs)
+ self.fakeCacheReturnResult = None
+ self.mock_logger = mock.Mock(spec=logger.Logger)
+ self.mock_label = MockLabel('mock_label', 'chromeos_image', 'autotest_dir',
+ '/tmp', 'lumpy', 'remote', 'image_args',
+ 'cache_dir', 'average', 'gcc', None)
+
+ def setUp(self):
+ self.results_cache = ResultsCache()
+
+ mock_machine = machine_manager.MockCrosMachine('falco.cros',
+ '/tmp/chromeos', 'average')
+
+ mock_mm = machine_manager.MockMachineManager('/tmp/chromeos_root', 0,
+ 'average', '')
+ mock_mm.machine_checksum_string['mock_label'] = 'fake_machine_checksum123'
+
+ self.results_cache.Init(
+ self.mock_label.chromeos_image,
+ self.mock_label.chromeos_root,
+ 'sunspider',
+ 1, # benchmark_run.iteration,
+ '', # benchmark_run.test_args,
+ '', # benchmark_run.profiler_args,
+ mock_mm,
+ mock_machine,
+ self.mock_label.board,
+ [CacheConditions.CACHE_FILE_EXISTS, CacheConditions.CHECKSUMS_MATCH],
+ self.mock_logger,
+ 'average',
+ self.mock_label,
+ '', # benchmark_run.share_cache
+ 'telemetry_Crosperf',
+ True, # benchmark_run.show_all_results
+ False) # benchmark_run.run_local
+
+ @mock.patch.object(image_checksummer.ImageChecksummer, 'Checksum')
+ def test_get_cache_dir_for_write(self, mock_checksum):
+
+ def FakeGetMachines(label):
+ if label:
+ pass
+ m1 = machine_manager.MockCrosMachine('lumpy1.cros',
+ self.results_cache.chromeos_root,
+ 'average')
+ m2 = machine_manager.MockCrosMachine('lumpy2.cros',
+ self.results_cache.chromeos_root,
+ 'average')
+ return [m1, m2]
+
+ mock_checksum.return_value = 'FakeImageChecksumabc123'
+ self.results_cache.machine_manager.GetMachines = FakeGetMachines
+ self.results_cache.machine_manager.machine_checksum['mock_label'] = \
+ 'FakeMachineChecksumabc987'
+ # Based on the label, benchmark and machines, get the directory in which
+ # to store the cache information for this test run.
+ result_path = self.results_cache.GetCacheDirForWrite()
+ # Verify that the returned directory is correct (since the label
+ # contained a cache_dir, named 'cache_dir', that's what is expected in
+ # the result, rather than '~/cros_scratch').
+ comp_path = os.path.join(os.getcwd(),
+ 'cache_dir/54524606abaae4fdf7b02f49f7ae7127_'
+ 'sunspider_1_fda29412ceccb72977516c4785d08e2c_'
+ 'FakeImageChecksumabc123_FakeMachineChecksum'
+ 'abc987__6')
+ self.assertEqual(result_path, comp_path)
+
+ def test_form_cache_dir(self):
+ # This is very similar to the previous test (FormCacheDir is called
+ # from GetCacheDirForWrite).
+ cache_key_list = ('54524606abaae4fdf7b02f49f7ae7127', 'sunspider', '1',
+ '7215ee9c7d9dc229d2921a40e899ec5f',
+ 'FakeImageChecksumabc123', '*', '*', '6')
+ path = self.results_cache.FormCacheDir(cache_key_list)
+ self.assertEqual(len(path), 1)
+ path1 = path[0]
+ test_dirname = ('54524606abaae4fdf7b02f49f7ae7127_sunspider_1_7215ee9'
+ 'c7d9dc229d2921a40e899ec5f_FakeImageChecksumabc123_*_*_6')
+ comp_path = os.path.join(os.getcwd(), 'cache_dir', test_dirname)
+ self.assertEqual(path1, comp_path)
+
+ @mock.patch.object(image_checksummer.ImageChecksummer, 'Checksum')
+ def test_get_cache_key_list(self, mock_checksum):
+ # This tests the mechanism that generates the various pieces of the
+ # cache directory name, based on various conditions.
+
+ def FakeGetMachines(label):
+ if label:
+ pass
+ m1 = machine_manager.MockCrosMachine('lumpy1.cros',
+ self.results_cache.chromeos_root,
+ 'average')
+ m2 = machine_manager.MockCrosMachine('lumpy2.cros',
+ self.results_cache.chromeos_root,
+ 'average')
+ return [m1, m2]
+
+ mock_checksum.return_value = 'FakeImageChecksumabc123'
+ self.results_cache.machine_manager.GetMachines = FakeGetMachines
+ self.results_cache.machine_manager.machine_checksum['mock_label'] = \
+ 'FakeMachineChecksumabc987'
+
+ # Test 1. Generating cache name for reading (not writing).
+ key_list = self.results_cache.GetCacheKeyList(True)
+ self.assertEqual(key_list[0], '*') # Machine checksum value, for read.
+ self.assertEqual(key_list[1], 'sunspider')
+ self.assertEqual(key_list[2], '1')
+ self.assertEqual(key_list[3], 'fda29412ceccb72977516c4785d08e2c')
+ self.assertEqual(key_list[4], 'FakeImageChecksumabc123')
+ self.assertEqual(key_list[5], '*')
+ self.assertEqual(key_list[6], '*')
+ self.assertEqual(key_list[7], '6')
+
+ # Test 2. Generating cache name for writing, with local image type.
+ key_list = self.results_cache.GetCacheKeyList(False)
+ self.assertEqual(key_list[0], '54524606abaae4fdf7b02f49f7ae7127')
+ self.assertEqual(key_list[1], 'sunspider')
+ self.assertEqual(key_list[2], '1')
+ self.assertEqual(key_list[3], 'fda29412ceccb72977516c4785d08e2c')
+ self.assertEqual(key_list[4], 'FakeImageChecksumabc123')
+ self.assertEqual(key_list[5], 'FakeMachineChecksumabc987')
+ self.assertEqual(key_list[6], '')
+ self.assertEqual(key_list[7], '6')
+
+ # Test 3. Generating cache name for writing, with trybot image type.
+ self.results_cache.label.image_type = 'trybot'
+ key_list = self.results_cache.GetCacheKeyList(False)
+ self.assertEqual(key_list[0], '54524606abaae4fdf7b02f49f7ae7127')
+ self.assertEqual(key_list[3], 'fda29412ceccb72977516c4785d08e2c')
+ self.assertEqual(key_list[4], '54524606abaae4fdf7b02f49f7ae7127')
+ self.assertEqual(key_list[5], 'FakeMachineChecksumabc987')
+
+ # Test 4. Generating cache name for writing, with official image type.
+ self.results_cache.label.image_type = 'official'
+ key_list = self.results_cache.GetCacheKeyList(False)
+ self.assertEqual(key_list[0], '54524606abaae4fdf7b02f49f7ae7127')
+ self.assertEqual(key_list[1], 'sunspider')
+ self.assertEqual(key_list[2], '1')
+ self.assertEqual(key_list[3], 'fda29412ceccb72977516c4785d08e2c')
+ self.assertEqual(key_list[4], '*')
+ self.assertEqual(key_list[5], 'FakeMachineChecksumabc987')
+ self.assertEqual(key_list[6], '')
+ self.assertEqual(key_list[7], '6')
+
+ # Test 5. Generating cache name for writing, with local image type, and
+ # specifying that the image path must match the cached image path.
+ self.results_cache.label.image_type = 'local'
+ self.results_cache.cache_conditions.append(CacheConditions.IMAGE_PATH_MATCH)
+ key_list = self.results_cache.GetCacheKeyList(False)
+ self.assertEqual(key_list[0], '54524606abaae4fdf7b02f49f7ae7127')
+ self.assertEqual(key_list[3], 'fda29412ceccb72977516c4785d08e2c')
+ self.assertEqual(key_list[4], 'FakeImageChecksumabc123')
+ self.assertEqual(key_list[5], 'FakeMachineChecksumabc987')
+
+ @mock.patch.object(command_executer.CommandExecuter, 'RunCommand')
+ @mock.patch.object(os.path, 'isdir')
+ @mock.patch.object(Result, 'CreateFromCacheHit')
+ def test_read_result(self, mock_create, mock_isdir, mock_runcmd):
+
+ self.fakeCacheReturnResult = None
+
+ def FakeGetCacheDirForRead():
+ return self.fakeCacheReturnResult
+
+ def FakeGetCacheDirForWrite():
+ return self.fakeCacheReturnResult
+
+ mock_cmd_exec = mock.Mock(spec=command_executer.CommandExecuter)
+ fake_result = Result(self.mock_logger, self.mock_label, 'average',
+ mock_cmd_exec)
+ fake_result.retval = 0
+
+ # Set up results_cache _GetCacheDirFor{Read,Write} to return
+ # self.fakeCacheReturnResult, which is initially None (see above).
+ # So initially, no cache dir is returned.
+ self.results_cache.GetCacheDirForRead = FakeGetCacheDirForRead
+ self.results_cache.GetCacheDirForWrite = FakeGetCacheDirForWrite
+
+ mock_isdir.return_value = True
+ save_cc = [
+ CacheConditions.CACHE_FILE_EXISTS, CacheConditions.CHECKSUMS_MATCH
+ ]
+ self.results_cache.cache_conditions.append(CacheConditions.FALSE)
+
+ # Test 1. CacheCondition.FALSE, which means do not read from the cache.
+ # (force re-running of test). Result should be None.
+ res = self.results_cache.ReadResult()
+ self.assertIsNone(res)
+ self.assertEqual(mock_runcmd.call_count, 1)
+
+ # Test 2. Remove CacheCondition.FALSE. Result should still be None,
+ # because GetCacheDirForRead is returning None at the moment.
+ mock_runcmd.reset_mock()
+ self.results_cache.cache_conditions = save_cc
+ res = self.results_cache.ReadResult()
+ self.assertIsNone(res)
+ self.assertEqual(mock_runcmd.call_count, 0)
+
+ # Test 3. Now set up cache dir to be returned by GetCacheDirForRead.
+ # Since cache_dir is found, will call Result.CreateFromCacheHit, which
+ # which will actually all our mock_create and should return fake_result.
+ self.fakeCacheReturnResult = 'fake/cache/dir'
+ mock_create.return_value = fake_result
+ res = self.results_cache.ReadResult()
+ self.assertEqual(mock_runcmd.call_count, 0)
+ self.assertEqual(res, fake_result)
+
+ # Test 4. os.path.isdir(cache_dir) will now return false, so result
+ # should be None again (no cache found).
+ mock_isdir.return_value = False
+ res = self.results_cache.ReadResult()
+ self.assertEqual(mock_runcmd.call_count, 0)
+ self.assertIsNone(res)
+
+ # Test 5. os.path.isdir returns true, but mock_create now returns None
+ # (the call to CreateFromCacheHit returns None), so overal result is None.
+ mock_isdir.return_value = True
+ mock_create.return_value = None
+ res = self.results_cache.ReadResult()
+ self.assertEqual(mock_runcmd.call_count, 0)
+ self.assertIsNone(res)
+
+ # Test 6. Everything works 'as expected', result should be fake_result.
+ mock_create.return_value = fake_result
+ res = self.results_cache.ReadResult()
+ self.assertEqual(mock_runcmd.call_count, 0)
+ self.assertEqual(res, fake_result)
+
+ # Test 7. The run failed; result should be None.
+ mock_create.return_value = fake_result
+ fake_result.retval = 1
+ self.results_cache.cache_conditions.append(CacheConditions.RUN_SUCCEEDED)
+ res = self.results_cache.ReadResult()
+ self.assertEqual(mock_runcmd.call_count, 0)
+ self.assertIsNone(res)
+
+
+if __name__ == '__main__':
+ unittest.main()
diff --git a/crosperf/results_organizer.py b/crosperf/results_organizer.py
new file mode 100644
index 00000000..097c744d
--- /dev/null
+++ b/crosperf/results_organizer.py
@@ -0,0 +1,192 @@
+# Copyright (c) 2013 The Chromium OS Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+"""Parse data from benchmark_runs for tabulator."""
+
+from __future__ import print_function
+
+import errno
+import json
+import os
+import re
+import sys
+
+from cros_utils import misc
+
+_TELEMETRY_RESULT_DEFAULTS_FILE = 'default-telemetry-results.json'
+_DUP_KEY_REGEX = re.compile(r'(\w+)\{(\d+)\}')
+
+
+def _AdjustIteration(benchmarks, max_dup, bench):
+ """Adjust the interation numbers if they have keys like ABCD{i}."""
+ for benchmark in benchmarks:
+ if benchmark.name != bench or benchmark.iteration_adjusted:
+ continue
+ benchmark.iteration_adjusted = True
+ benchmark.iterations *= (max_dup + 1)
+
+
+def _GetMaxDup(data):
+ """Find the maximum i inside ABCD{i}.
+
+ data should be a [[[Key]]], where Key is a string that may look like
+ ABCD{i}.
+ """
+ max_dup = 0
+ for label in data:
+ for run in label:
+ for key in run:
+ match = _DUP_KEY_REGEX.match(key)
+ if match:
+ max_dup = max(max_dup, int(match.group(2)))
+ return max_dup
+
+
+def _Repeat(func, times):
+ """Returns the result of running func() n times."""
+ return [func() for _ in xrange(times)]
+
+
+def _GetNonDupLabel(max_dup, runs):
+ """Create new list for the runs of the same label.
+
+ Specifically, this will split out keys like foo{0}, foo{1} from one run into
+ their own runs. For example, given a run like:
+ {"foo": 1, "bar{0}": 2, "baz": 3, "qux{1}": 4, "pirate{0}": 5}
+
+ You'll get:
+ [{"foo": 1, "baz": 3}, {"bar": 2, "pirate": 5}, {"qux": 4}]
+
+ Hands back the lists of transformed runs, all concatenated together.
+ """
+ new_runs = []
+ for run in runs:
+ new_run = {}
+ added_runs = _Repeat(dict, max_dup)
+ for key, value in run.iteritems():
+ match = _DUP_KEY_REGEX.match(key)
+ if not match:
+ new_run[key] = value
+ else:
+ new_key, index_str = match.groups()
+ added_runs[int(index_str)-1][new_key] = str(value)
+ new_runs.append(new_run)
+ new_runs += added_runs
+ return new_runs
+
+
+def _DuplicatePass(result, benchmarks):
+ """Properly expands keys like `foo{1}` in `result`."""
+ for bench, data in result.iteritems():
+ max_dup = _GetMaxDup(data)
+ # If there's nothing to expand, there's nothing to do.
+ if not max_dup:
+ continue
+ for i, runs in enumerate(data):
+ data[i] = _GetNonDupLabel(max_dup, runs)
+ _AdjustIteration(benchmarks, max_dup, bench)
+
+
+def _ReadSummaryFile(filename):
+ """Reads the summary file at filename."""
+ dirname, _ = misc.GetRoot(filename)
+ fullname = os.path.join(dirname, _TELEMETRY_RESULT_DEFAULTS_FILE)
+ try:
+ # Slurp the summary file into a dictionary. The keys in the dictionary are
+ # the benchmark names. The value for a key is a list containing the names
+ # of all the result fields that should be returned in a 'default' report.
+ with open(fullname) as in_file:
+ return json.load(in_file)
+ except IOError as e:
+ # ENOENT means "no such file or directory"
+ if e.errno == errno.ENOENT:
+ return {}
+ raise
+
+
+def _MakeOrganizeResultOutline(benchmark_runs, labels):
+ """Creates the "outline" of the OrganizeResults result for a set of runs.
+
+ Report generation returns lists of different sizes, depending on the input
+ data. Depending on the order in which we iterate through said input data, we
+ may populate the Nth index of a list, then the N-1st, then the N+Mth, ...
+
+ It's cleaner to figure out the "skeleton"/"outline" ahead of time, so we don't
+ have to worry about resizing while computing results.
+ """
+ # Count how many iterations exist for each benchmark run.
+ # We can't simply count up, since we may be given an incomplete set of
+ # iterations (e.g. [r.iteration for r in benchmark_runs] == [1, 3])
+ iteration_count = {}
+ for run in benchmark_runs:
+ name = run.benchmark.name
+ old_iterations = iteration_count.get(name, -1)
+ # N.B. run.iteration starts at 1, not 0.
+ iteration_count[name] = max(old_iterations, run.iteration)
+
+ # Result structure: {benchmark_name: [[{key: val}]]}
+ result = {}
+ for run in benchmark_runs:
+ name = run.benchmark.name
+ num_iterations = iteration_count[name]
+ # default param makes cros lint be quiet about defining num_iterations in a
+ # loop.
+ make_dicts = lambda n=num_iterations: _Repeat(dict, n)
+ result[name] = _Repeat(make_dicts, len(labels))
+ return result
+
+def OrganizeResults(benchmark_runs, labels, benchmarks=None, json_report=False):
+ """Create a dict from benchmark_runs.
+
+ The structure of the output dict is as follows:
+ {"benchmark_1":[
+ [{"key1":"v1", "key2":"v2"},{"key1":"v1", "key2","v2"}]
+ #one label
+ []
+ #the other label
+ ]
+ "benchmark_2":
+ [
+ ]}.
+ """
+ result = _MakeOrganizeResultOutline(benchmark_runs, labels)
+ label_names = [label.name for label in labels]
+ label_indices = {name: i for i, name in enumerate(label_names)}
+ summary_file = _ReadSummaryFile(sys.argv[0])
+ if benchmarks is None:
+ benchmarks = []
+
+ for benchmark_run in benchmark_runs:
+ if not benchmark_run.result:
+ continue
+ benchmark = benchmark_run.benchmark
+ label_index = label_indices[benchmark_run.label.name]
+ cur_label_list = result[benchmark.name][label_index]
+ cur_dict = cur_label_list[benchmark_run.iteration - 1]
+
+ show_all_results = json_report or benchmark.show_all_results
+ if not show_all_results:
+ summary_list = summary_file.get(benchmark.test_name)
+ if summary_list:
+ summary_list.append('retval')
+ else:
+ # Did not find test_name in json file; show everything.
+ show_all_results = True
+ for test_key in benchmark_run.result.keyvals:
+ if show_all_results or test_key in summary_list:
+ cur_dict[test_key] = benchmark_run.result.keyvals[test_key]
+ # Occasionally Telemetry tests will not fail but they will not return a
+ # result, either. Look for those cases, and force them to be a fail.
+ # (This can happen if, for example, the test has been disabled.)
+ if len(cur_dict) == 1 and cur_dict['retval'] == 0:
+ cur_dict['retval'] = 1
+ # TODO: This output should be sent via logger.
+ print("WARNING: Test '%s' appears to have succeeded but returned"
+ ' no results.' % benchmark.name,
+ file=sys.stderr)
+ if json_report and benchmark_run.machine:
+ cur_dict['machine'] = benchmark_run.machine.name
+ cur_dict['machine_checksum'] = benchmark_run.machine.checksum
+ cur_dict['machine_string'] = benchmark_run.machine.checksum_string
+ _DuplicatePass(result, benchmarks)
+ return result
diff --git a/crosperf/results_organizer_unittest.py b/crosperf/results_organizer_unittest.py
new file mode 100755
index 00000000..ccf02973
--- /dev/null
+++ b/crosperf/results_organizer_unittest.py
@@ -0,0 +1,109 @@
+#!/usr/bin/env python2
+
+# Copyright (c) 2013 The Chromium OS Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+"""Testing of ResultsOrganizer
+
+ We create some labels, benchmark_runs and then create a ResultsOrganizer,
+ after that, we compare the result of ResultOrganizer.
+ """
+
+from __future__ import print_function
+
+import unittest
+
+from benchmark_run import BenchmarkRun
+from results_cache import Result
+from results_organizer import OrganizeResults
+
+import mock_instance
+
+result = {'benchmark1': [[{'': 'PASS',
+ 'bool': 'True',
+ 'milliseconds_1': '1',
+ 'milliseconds_2': '8',
+ 'milliseconds_3': '9.2',
+ 'ms_1': '2.1',
+ 'total': '5'}, {'test': '2'}, {'test': '4'},
+ {'': 'PASS',
+ 'bool': 'FALSE',
+ 'milliseconds_1': '3',
+ 'milliseconds_2': '5',
+ 'ms_1': '2.2',
+ 'total': '6'}, {'test': '3'}, {'test': '4'}],
+ [{'': 'PASS',
+ 'bool': 'FALSE',
+ 'milliseconds_4': '30',
+ 'milliseconds_5': '50',
+ 'ms_1': '2.23',
+ 'total': '6'}, {'test': '5'}, {'test': '4'},
+ {'': 'PASS',
+ 'bool': 'FALSE',
+ 'milliseconds_1': '3',
+ 'milliseconds_6': '7',
+ 'ms_1': '2.3',
+ 'total': '7'}, {'test': '2'}, {'test': '6'}]],
+ 'benchmark2': [[{'': 'PASS',
+ 'bool': 'TRUE',
+ 'milliseconds_1': '3',
+ 'milliseconds_8': '6',
+ 'ms_1': '2.3',
+ 'total': '7'}, {'test': '2'}, {'test': '6'},
+ {'': 'PASS',
+ 'bool': 'TRUE',
+ 'milliseconds_1': '3',
+ 'milliseconds_8': '6',
+ 'ms_1': '2.2',
+ 'total': '7'}, {'test': '2'}, {'test': '2'}],
+ [{'': 'PASS',
+ 'bool': 'TRUE',
+ 'milliseconds_1': '3',
+ 'milliseconds_8': '6',
+ 'ms_1': '2',
+ 'total': '7'}, {'test': '2'}, {'test': '4'},
+ {'': 'PASS',
+ 'bool': 'TRUE',
+ 'milliseconds_1': '3',
+ 'milliseconds_8': '6',
+ 'ms_1': '1',
+ 'total': '7'}, {'test': '1'}, {'test': '6'}]]}
+
+
+class ResultOrganizerTest(unittest.TestCase):
+ """Test result organizer."""
+
+ def testResultOrganizer(self):
+ labels = [mock_instance.label1, mock_instance.label2]
+ benchmarks = [mock_instance.benchmark1, mock_instance.benchmark2]
+ benchmark_runs = [None] * 8
+ benchmark_runs[0] = BenchmarkRun('b1', benchmarks[0], labels[0], 1, '', '',
+ '', 'average', '')
+ benchmark_runs[1] = BenchmarkRun('b2', benchmarks[0], labels[0], 2, '', '',
+ '', 'average', '')
+ benchmark_runs[2] = BenchmarkRun('b3', benchmarks[0], labels[1], 1, '', '',
+ '', 'average', '')
+ benchmark_runs[3] = BenchmarkRun('b4', benchmarks[0], labels[1], 2, '', '',
+ '', 'average', '')
+ benchmark_runs[4] = BenchmarkRun('b5', benchmarks[1], labels[0], 1, '', '',
+ '', 'average', '')
+ benchmark_runs[5] = BenchmarkRun('b6', benchmarks[1], labels[0], 2, '', '',
+ '', 'average', '')
+ benchmark_runs[6] = BenchmarkRun('b7', benchmarks[1], labels[1], 1, '', '',
+ '', 'average', '')
+ benchmark_runs[7] = BenchmarkRun('b8', benchmarks[1], labels[1], 2, '', '',
+ '', 'average', '')
+
+ i = 0
+ for b in benchmark_runs:
+ b.result = Result('', b.label, 'average', 'machine')
+ b.result.keyvals = mock_instance.keyval[i]
+ i += 1
+
+ organized = OrganizeResults(benchmark_runs, labels, benchmarks)
+ self.assertEqual(organized, result)
+
+
+if __name__ == '__main__':
+ unittest.main()
diff --git a/crosperf/results_report.py b/crosperf/results_report.py
new file mode 100644
index 00000000..7a465349
--- /dev/null
+++ b/crosperf/results_report.py
@@ -0,0 +1,691 @@
+# Copyright (c) 2013 The Chromium OS Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+"""A module to handle the report format."""
+from __future__ import print_function
+
+import datetime
+import functools
+import itertools
+import json
+import os
+import re
+
+from cros_utils.tabulator import AmeanResult
+from cros_utils.tabulator import Cell
+from cros_utils.tabulator import CoeffVarFormat
+from cros_utils.tabulator import CoeffVarResult
+from cros_utils.tabulator import Column
+from cros_utils.tabulator import Format
+from cros_utils.tabulator import GmeanRatioResult
+from cros_utils.tabulator import LiteralResult
+from cros_utils.tabulator import MaxResult
+from cros_utils.tabulator import MinResult
+from cros_utils.tabulator import PValueFormat
+from cros_utils.tabulator import PValueResult
+from cros_utils.tabulator import RatioFormat
+from cros_utils.tabulator import RawResult
+from cros_utils.tabulator import StdResult
+from cros_utils.tabulator import TableFormatter
+from cros_utils.tabulator import TableGenerator
+from cros_utils.tabulator import TablePrinter
+from update_telemetry_defaults import TelemetryDefaults
+
+from column_chart import ColumnChart
+from results_organizer import OrganizeResults
+
+import results_report_templates as templates
+
+
+def ParseChromeosImage(chromeos_image):
+ """Parse the chromeos_image string for the image and version.
+
+ The chromeos_image string will probably be in one of two formats:
+ 1: <path-to-chroot>/src/build/images/<board>/<ChromeOS-version>.<datetime>/ \
+ chromiumos_test_image.bin
+ 2: <path-to-chroot>/chroot/tmp/<buildbot-build>/<ChromeOS-version>/ \
+ chromiumos_test_image.bin
+
+ We parse these strings to find the 'chromeos_version' to store in the
+ json archive (without the .datatime bit in the first case); and also
+ the 'chromeos_image', which would be all of the first case, but only the
+ part after '/chroot/tmp' in the second case.
+
+ Args:
+ chromeos_image: string containing the path to the chromeos_image that
+ crosperf used for the test.
+
+ Returns:
+ version, image: The results of parsing the input string, as explained
+ above.
+ """
+ # Find the Chromeos Version, e.g. R45-2345.0.0.....
+ # chromeos_image should have been something like:
+ # <path>/<board-trybot-release>/<chromeos-version>/chromiumos_test_image.bin"
+ if chromeos_image.endswith('/chromiumos_test_image.bin'):
+ full_version = chromeos_image.split('/')[-2]
+ # Strip the date and time off of local builds (which have the format
+ # "R43-2345.0.0.date-and-time").
+ version, _ = os.path.splitext(full_version)
+ else:
+ version = ''
+
+ # Find the chromeos image. If it's somewhere in .../chroot/tmp/..., then
+ # it's an official image that got downloaded, so chop off the download path
+ # to make the official image name more clear.
+ official_image_path = '/chroot/tmp'
+ if official_image_path in chromeos_image:
+ image = chromeos_image.split(official_image_path, 1)[1]
+ else:
+ image = chromeos_image
+ return version, image
+
+
+def _AppendUntilLengthIs(gen, the_list, target_len):
+ """Appends to `list` until `list` is `target_len` elements long.
+
+ Uses `gen` to generate elements.
+ """
+ the_list.extend(gen() for _ in xrange(target_len - len(the_list)))
+ return the_list
+
+
+def _FilterPerfReport(event_threshold, report):
+ """Filters out entries with `< event_threshold` percent in a perf report."""
+ def filter_dict(m):
+ return {fn_name: pct for fn_name, pct in m.iteritems()
+ if pct >= event_threshold}
+ return {event: filter_dict(m) for event, m in report.iteritems()}
+
+
+class _PerfTable(object):
+ """Generates dicts from a perf table.
+
+ Dicts look like:
+ {'benchmark_name': {'perf_event_name': [LabelData]}}
+ where LabelData is a list of perf dicts, each perf dict coming from the same
+ label.
+ Each perf dict looks like {'function_name': 0.10, ...} (where 0.10 is the
+ percentage of time spent in function_name).
+ """
+
+ def __init__(self, benchmark_names_and_iterations, label_names,
+ read_perf_report, event_threshold=None):
+ """Constructor.
+
+ read_perf_report is a function that takes a label name, benchmark name, and
+ benchmark iteration, and returns a dictionary describing the perf output for
+ that given run.
+ """
+ self.event_threshold = event_threshold
+ self._label_indices = {name: i for i, name in enumerate(label_names)}
+ self.perf_data = {}
+ for label in label_names:
+ for bench_name, bench_iterations in benchmark_names_and_iterations:
+ for i in xrange(bench_iterations):
+ report = read_perf_report(label, bench_name, i)
+ self._ProcessPerfReport(report, label, bench_name, i)
+
+ def _ProcessPerfReport(self, perf_report, label, benchmark_name, iteration):
+ """Add the data from one run to the dict."""
+ perf_of_run = perf_report
+ if self.event_threshold is not None:
+ perf_of_run = _FilterPerfReport(self.event_threshold, perf_report)
+ if benchmark_name not in self.perf_data:
+ self.perf_data[benchmark_name] = {event: [] for event in perf_of_run}
+ ben_data = self.perf_data[benchmark_name]
+ label_index = self._label_indices[label]
+ for event in ben_data:
+ _AppendUntilLengthIs(list, ben_data[event], label_index + 1)
+ data_for_label = ben_data[event][label_index]
+ _AppendUntilLengthIs(dict, data_for_label, iteration + 1)
+ data_for_label[iteration] = perf_of_run[event] if perf_of_run else {}
+
+
+def _GetResultsTableHeader(ben_name, iterations):
+ benchmark_info = ('Benchmark: {0}; Iterations: {1}'
+ .format(ben_name, iterations))
+ cell = Cell()
+ cell.string_value = benchmark_info
+ cell.header = True
+ return [[cell]]
+
+
+def _ParseColumn(columns, iteration):
+ new_column = []
+ for column in columns:
+ if column.result.__class__.__name__ != 'RawResult':
+ new_column.append(column)
+ else:
+ new_column.extend(Column(LiteralResult(i), Format(), str(i + 1))
+ for i in xrange(iteration))
+ return new_column
+
+
+def _GetTables(benchmark_results, columns, table_type):
+ iter_counts = benchmark_results.iter_counts
+ result = benchmark_results.run_keyvals
+ tables = []
+ for bench_name, runs in result.iteritems():
+ iterations = iter_counts[bench_name]
+ ben_table = _GetResultsTableHeader(bench_name, iterations)
+
+ all_runs_empty = all(not dict for label in runs for dict in label)
+ if all_runs_empty:
+ cell = Cell()
+ cell.string_value = ('This benchmark contains no result.'
+ ' Is the benchmark name valid?')
+ cell_table = [[cell]]
+ else:
+ table = TableGenerator(runs, benchmark_results.label_names).GetTable()
+ parsed_columns = _ParseColumn(columns, iterations)
+ tf = TableFormatter(table, parsed_columns)
+ cell_table = tf.GetCellTable(table_type)
+ tables.append(ben_table)
+ tables.append(cell_table)
+ return tables
+
+
+def _GetPerfTables(benchmark_results, columns, table_type):
+ p_table = _PerfTable(benchmark_results.benchmark_names_and_iterations,
+ benchmark_results.label_names,
+ benchmark_results.read_perf_report)
+
+ tables = []
+ for benchmark in p_table.perf_data:
+ iterations = benchmark_results.iter_counts[benchmark]
+ ben_table = _GetResultsTableHeader(benchmark, iterations)
+ tables.append(ben_table)
+ benchmark_data = p_table.perf_data[benchmark]
+ table = []
+ for event in benchmark_data:
+ tg = TableGenerator(benchmark_data[event],
+ benchmark_results.label_names,
+ sort=TableGenerator.SORT_BY_VALUES_DESC)
+ table = tg.GetTable(ResultsReport.PERF_ROWS)
+ parsed_columns = _ParseColumn(columns, iterations)
+ tf = TableFormatter(table, parsed_columns)
+ tf.GenerateCellTable(table_type)
+ tf.AddColumnName()
+ tf.AddLabelName()
+ tf.AddHeader(str(event))
+ table = tf.GetCellTable(table_type, headers=False)
+ tables.append(table)
+ return tables
+
+
+class ResultsReport(object):
+ """Class to handle the report format."""
+ MAX_COLOR_CODE = 255
+ PERF_ROWS = 5
+
+ def __init__(self, results):
+ self.benchmark_results = results
+
+ def _GetTablesWithColumns(self, columns, table_type, perf):
+ get_tables = _GetPerfTables if perf else _GetTables
+ return get_tables(self.benchmark_results, columns, table_type)
+
+ def GetFullTables(self, perf=False):
+ columns = [Column(RawResult(), Format()),
+ Column(MinResult(), Format()),
+ Column(MaxResult(), Format()),
+ Column(AmeanResult(), Format()),
+ Column(StdResult(), Format(), 'StdDev'),
+ Column(CoeffVarResult(), CoeffVarFormat(), 'StdDev/Mean'),
+ Column(GmeanRatioResult(), RatioFormat(), 'GmeanSpeedup'),
+ Column(PValueResult(), PValueFormat(), 'p-value')]
+ return self._GetTablesWithColumns(columns, 'full', perf)
+
+ def GetSummaryTables(self, perf=False):
+ columns = [Column(AmeanResult(), Format()),
+ Column(StdResult(), Format(), 'StdDev'),
+ Column(CoeffVarResult(), CoeffVarFormat(), 'StdDev/Mean'),
+ Column(GmeanRatioResult(), RatioFormat(), 'GmeanSpeedup'),
+ Column(PValueResult(), PValueFormat(), 'p-value')]
+ return self._GetTablesWithColumns(columns, 'summary', perf)
+
+
+def _PrintTable(tables, out_to):
+ # tables may be None.
+ if not tables:
+ return ''
+
+ if out_to == 'HTML':
+ out_type = TablePrinter.HTML
+ elif out_to == 'PLAIN':
+ out_type = TablePrinter.PLAIN
+ elif out_to == 'CONSOLE':
+ out_type = TablePrinter.CONSOLE
+ elif out_to == 'TSV':
+ out_type = TablePrinter.TSV
+ elif out_to == 'EMAIL':
+ out_type = TablePrinter.EMAIL
+ else:
+ raise ValueError('Invalid out_to value: %s' % (out_to,))
+
+ printers = (TablePrinter(table, out_type) for table in tables)
+ return ''.join(printer.Print() for printer in printers)
+
+
+class TextResultsReport(ResultsReport):
+ """Class to generate text result report."""
+
+ H1_STR = '==========================================='
+ H2_STR = '-------------------------------------------'
+
+ def __init__(self, results, email=False, experiment=None):
+ super(TextResultsReport, self).__init__(results)
+ self.email = email
+ self.experiment = experiment
+
+ @staticmethod
+ def _MakeTitle(title):
+ header_line = TextResultsReport.H1_STR
+ # '' at the end gives one newline.
+ return '\n'.join([header_line, title, header_line, ''])
+
+ @staticmethod
+ def _MakeSection(title, body):
+ header_line = TextResultsReport.H2_STR
+ # '\n' at the end gives us two newlines.
+ return '\n'.join([header_line, title, header_line, body, '\n'])
+
+ @staticmethod
+ def FromExperiment(experiment, email=False):
+ results = BenchmarkResults.FromExperiment(experiment)
+ return TextResultsReport(results, email, experiment)
+
+ def GetStatusTable(self):
+ """Generate the status table by the tabulator."""
+ table = [['', '']]
+ columns = [Column(LiteralResult(iteration=0), Format(), 'Status'),
+ Column(LiteralResult(iteration=1), Format(), 'Failing Reason')]
+
+ for benchmark_run in self.experiment.benchmark_runs:
+ status = [benchmark_run.name, [benchmark_run.timeline.GetLastEvent(),
+ benchmark_run.failure_reason]]
+ table.append(status)
+ cell_table = TableFormatter(table, columns).GetCellTable('status')
+ return [cell_table]
+
+ def GetReport(self):
+ """Generate the report for email and console."""
+ output_type = 'EMAIL' if self.email else 'CONSOLE'
+ experiment = self.experiment
+
+ sections = []
+ if experiment is not None:
+ title_contents = "Results report for '%s'" % (experiment.name, )
+ else:
+ title_contents = 'Results report'
+ sections.append(self._MakeTitle(title_contents))
+
+ summary_table = _PrintTable(self.GetSummaryTables(perf=False), output_type)
+ sections.append(self._MakeSection('Summary', summary_table))
+
+ if experiment is not None:
+ table = _PrintTable(self.GetStatusTable(), output_type)
+ sections.append(self._MakeSection('Benchmark Run Status', table))
+
+ perf_table = _PrintTable(self.GetSummaryTables(perf=True), output_type)
+ if perf_table:
+ sections.append(self._MakeSection('Perf Data', perf_table))
+
+ if experiment is not None:
+ experiment_file = experiment.experiment_file
+ sections.append(self._MakeSection('Experiment File', experiment_file))
+
+ cpu_info = experiment.machine_manager.GetAllCPUInfo(experiment.labels)
+ sections.append(self._MakeSection('CPUInfo', cpu_info))
+
+ return '\n'.join(sections)
+
+
+def _GetHTMLCharts(label_names, test_results):
+ charts = []
+ for item, runs in test_results.iteritems():
+ # Fun fact: label_names is actually *entirely* useless as a param, since we
+ # never add headers. We still need to pass it anyway.
+ table = TableGenerator(runs, label_names).GetTable()
+ columns = [Column(AmeanResult(), Format()), Column(MinResult(), Format()),
+ Column(MaxResult(), Format())]
+ tf = TableFormatter(table, columns)
+ data_table = tf.GetCellTable('full', headers=False)
+
+ for cur_row_data in data_table:
+ test_key = cur_row_data[0].string_value
+ title = '{0}: {1}'.format(item, test_key.replace('/', ''))
+ chart = ColumnChart(title, 300, 200)
+ chart.AddColumn('Label', 'string')
+ chart.AddColumn('Average', 'number')
+ chart.AddColumn('Min', 'number')
+ chart.AddColumn('Max', 'number')
+ chart.AddSeries('Min', 'line', 'black')
+ chart.AddSeries('Max', 'line', 'black')
+ cur_index = 1
+ for label in label_names:
+ chart.AddRow([label,
+ cur_row_data[cur_index].value,
+ cur_row_data[cur_index + 1].value,
+ cur_row_data[cur_index + 2].value])
+ if isinstance(cur_row_data[cur_index].value, str):
+ chart = None
+ break
+ cur_index += 3
+ if chart:
+ charts.append(chart)
+ return charts
+
+
+class HTMLResultsReport(ResultsReport):
+ """Class to generate html result report."""
+
+ def __init__(self, benchmark_results, experiment=None):
+ super(HTMLResultsReport, self).__init__(benchmark_results)
+ self.experiment = experiment
+
+ @staticmethod
+ def FromExperiment(experiment):
+ return HTMLResultsReport(BenchmarkResults.FromExperiment(experiment),
+ experiment=experiment)
+
+ def GetReport(self):
+ label_names = self.benchmark_results.label_names
+ test_results = self.benchmark_results.run_keyvals
+ charts = _GetHTMLCharts(label_names, test_results)
+ chart_javascript = ''.join(chart.GetJavascript() for chart in charts)
+ chart_divs = ''.join(chart.GetDiv() for chart in charts)
+
+ summary_table = self.GetSummaryTables()
+ full_table = self.GetFullTables()
+ perf_table = self.GetSummaryTables(perf=True)
+ experiment_file = ''
+ if self.experiment is not None:
+ experiment_file = self.experiment.experiment_file
+ # Use kwargs for sanity, and so that testing is a bit easier.
+ return templates.GenerateHTMLPage(perf_table=perf_table,
+ chart_js=chart_javascript,
+ summary_table=summary_table,
+ print_table=_PrintTable,
+ chart_divs=chart_divs,
+ full_table=full_table,
+ experiment_file=experiment_file)
+
+
+def ParseStandardPerfReport(report_data):
+ """Parses the output of `perf report`.
+
+ It'll parse the following:
+ {{garbage}}
+ # Samples: 1234M of event 'foo'
+
+ 1.23% command shared_object location function::name
+
+ 1.22% command shared_object location function2::name
+
+ # Samples: 999K of event 'bar'
+
+ 0.23% command shared_object location function3::name
+ {{etc.}}
+
+ Into:
+ {'foo': {'function::name': 1.23, 'function2::name': 1.22},
+ 'bar': {'function3::name': 0.23, etc.}}
+ """
+ # This function fails silently on its if it's handed a string (as opposed to a
+ # list of lines). So, auto-split if we do happen to get a string.
+ if isinstance(report_data, basestring):
+ report_data = report_data.splitlines()
+
+ # Samples: N{K,M,G} of event 'event-name'
+ samples_regex = re.compile(r"#\s+Samples: \d+\S? of event '([^']+)'")
+
+ # We expect lines like:
+ # N.NN% command samples shared_object [location] symbol
+ #
+ # Note that we're looking at stripped lines, so there is no space at the
+ # start.
+ perf_regex = re.compile(r'^(\d+(?:.\d*)?)%' # N.NN%
+ r'\s*\d+' # samples count (ignored)
+ r'\s*\S+' # command (ignored)
+ r'\s*\S+' # shared_object (ignored)
+ r'\s*\[.\]' # location (ignored)
+ r'\s*(\S.+)' # function
+ )
+
+ stripped_lines = (l.strip() for l in report_data)
+ nonempty_lines = (l for l in stripped_lines if l)
+ # Ignore all lines before we see samples_regex
+ interesting_lines = itertools.dropwhile(lambda x: not samples_regex.match(x),
+ nonempty_lines)
+
+ first_sample_line = next(interesting_lines, None)
+ # Went through the entire file without finding a 'samples' header. Quit.
+ if first_sample_line is None:
+ return {}
+
+ sample_name = samples_regex.match(first_sample_line).group(1)
+ current_result = {}
+ results = {sample_name: current_result}
+ for line in interesting_lines:
+ samples_match = samples_regex.match(line)
+ if samples_match:
+ sample_name = samples_match.group(1)
+ current_result = {}
+ results[sample_name] = current_result
+ continue
+
+ match = perf_regex.match(line)
+ if not match:
+ continue
+ percentage_str, func_name = match.groups()
+ try:
+ percentage = float(percentage_str)
+ except ValueError:
+ # Couldn't parse it; try to be "resilient".
+ continue
+ current_result[func_name] = percentage
+ return results
+
+
+def _ReadExperimentPerfReport(results_directory, label_name, benchmark_name,
+ benchmark_iteration):
+ """Reads a perf report for the given benchmark. Returns {} on failure.
+
+ The result should be a map of maps; it should look like:
+ {perf_event_name: {function_name: pct_time_spent}}, e.g.
+ {'cpu_cycles': {'_malloc': 10.0, '_free': 0.3, ...}}
+ """
+ raw_dir_name = label_name + benchmark_name + str(benchmark_iteration + 1)
+ dir_name = ''.join(c for c in raw_dir_name if c.isalnum())
+ file_name = os.path.join(results_directory, dir_name, 'perf.data.report.0')
+ try:
+ with open(file_name) as in_file:
+ return ParseStandardPerfReport(in_file)
+ except IOError:
+ # Yes, we swallow any IO-related errors.
+ return {}
+
+
+# Split out so that testing (specifically: mocking) is easier
+def _ExperimentToKeyvals(experiment, for_json_report):
+ """Converts an experiment to keyvals."""
+ return OrganizeResults(experiment.benchmark_runs, experiment.labels,
+ json_report=for_json_report)
+
+
+class BenchmarkResults(object):
+ """The minimum set of fields that any ResultsReport will take."""
+ def __init__(self, label_names, benchmark_names_and_iterations, run_keyvals,
+ read_perf_report=None):
+ if read_perf_report is None:
+ def _NoPerfReport(*_args, **_kwargs):
+ return {}
+ read_perf_report = _NoPerfReport
+
+ self.label_names = label_names
+ self.benchmark_names_and_iterations = benchmark_names_and_iterations
+ self.iter_counts = dict(benchmark_names_and_iterations)
+ self.run_keyvals = run_keyvals
+ self.read_perf_report = read_perf_report
+
+ @staticmethod
+ def FromExperiment(experiment, for_json_report=False):
+ label_names = [label.name for label in experiment.labels]
+ benchmark_names_and_iterations = [(benchmark.name, benchmark.iterations)
+ for benchmark in experiment.benchmarks]
+ run_keyvals = _ExperimentToKeyvals(experiment, for_json_report)
+ read_perf_report = functools.partial(_ReadExperimentPerfReport,
+ experiment.results_directory)
+ return BenchmarkResults(label_names, benchmark_names_and_iterations,
+ run_keyvals, read_perf_report)
+
+
+def _GetElemByName(name, from_list):
+ """Gets an element from the given list by its name field.
+
+ Raises an error if it doesn't find exactly one match.
+ """
+ elems = [e for e in from_list if e.name == name]
+ if len(elems) != 1:
+ raise ValueError('Expected 1 item named %s, found %d' % (name, len(elems)))
+ return elems[0]
+
+
+def _Unlist(l):
+ """If l is a list, extracts the first element of l. Otherwise, returns l."""
+ return l[0] if isinstance(l, list) else l
+
+class JSONResultsReport(ResultsReport):
+ """Class that generates JSON reports for experiments."""
+
+ def __init__(self, benchmark_results, date=None, time=None, experiment=None,
+ json_args=None):
+ """Construct a JSONResultsReport.
+
+ json_args is the dict of arguments we pass to json.dumps in GetReport().
+ """
+ super(JSONResultsReport, self).__init__(benchmark_results)
+
+ defaults = TelemetryDefaults()
+ defaults.ReadDefaultsFile()
+ summary_field_defaults = defaults.GetDefault()
+ if summary_field_defaults is None:
+ summary_field_defaults = {}
+ self.summary_field_defaults = summary_field_defaults
+
+ if json_args is None:
+ json_args = {}
+ self.json_args = json_args
+
+ self.experiment = experiment
+ if not date:
+ timestamp = datetime.datetime.strftime(datetime.datetime.now(),
+ '%Y-%m-%d %H:%M:%S')
+ date, time = timestamp.split(' ')
+ self.date = date
+ self.time = time
+
+ @staticmethod
+ def FromExperiment(experiment, date=None, time=None, json_args=None):
+ benchmark_results = BenchmarkResults.FromExperiment(experiment,
+ for_json_report=True)
+ return JSONResultsReport(benchmark_results, date, time, experiment,
+ json_args)
+
+ def GetReportObjectIgnoringExperiment(self):
+ """Gets the JSON report object specifically for the output data.
+
+ Ignores any experiment-specific fields (e.g. board, machine checksum, ...).
+ """
+ benchmark_results = self.benchmark_results
+ label_names = benchmark_results.label_names
+ summary_field_defaults = self.summary_field_defaults
+ final_results = []
+ for test, test_results in benchmark_results.run_keyvals.iteritems():
+ for label_name, label_results in zip(label_names, test_results):
+ for iter_results in label_results:
+ passed = iter_results.get('retval') == 0
+ json_results = {
+ 'date': self.date,
+ 'time': self.time,
+ 'label': label_name,
+ 'test_name': test,
+ 'pass': passed,
+ }
+ final_results.append(json_results)
+
+ if not passed:
+ continue
+
+ # Get overall results.
+ summary_fields = summary_field_defaults.get(test)
+ if summary_fields is not None:
+ value = []
+ json_results['overall_result'] = value
+ for f in summary_fields:
+ v = iter_results.get(f)
+ if v is None:
+ continue
+ # New telemetry results format: sometimes we get a list of lists
+ # now.
+ v = _Unlist(_Unlist(v))
+ value.append((f, float(v)))
+
+ # Get detailed results.
+ detail_results = {}
+ json_results['detailed_results'] = detail_results
+ for k, v in iter_results.iteritems():
+ if k == 'retval' or k == 'PASS' or k == ['PASS'] or v == 'PASS':
+ continue
+
+ v = _Unlist(v)
+ if 'machine' in k:
+ json_results[k] = v
+ elif v is not None:
+ if isinstance(v, list):
+ detail_results[k] = [float(d) for d in v]
+ else:
+ detail_results[k] = float(v)
+ return final_results
+
+ def GetReportObject(self):
+ """Generate the JSON report, returning it as a python object."""
+ report_list = self.GetReportObjectIgnoringExperiment()
+ if self.experiment is not None:
+ self._AddExperimentSpecificFields(report_list)
+ return report_list
+
+ def _AddExperimentSpecificFields(self, report_list):
+ """Add experiment-specific data to the JSON report."""
+ board = self.experiment.labels[0].board
+ manager = self.experiment.machine_manager
+ for report in report_list:
+ label_name = report['label']
+ label = _GetElemByName(label_name, self.experiment.labels)
+
+ img_path = os.path.realpath(os.path.expanduser(label.chromeos_image))
+ ver, img = ParseChromeosImage(img_path)
+
+ report.update({
+ 'board': board,
+ 'chromeos_image': img,
+ 'chromeos_version': ver,
+ 'chrome_version': label.chrome_version,
+ 'compiler': label.compiler
+ })
+
+ if not report['pass']:
+ continue
+ if 'machine_checksum' not in report:
+ report['machine_checksum'] = manager.machine_checksum[label_name]
+ if 'machine_string' not in report:
+ report['machine_string'] = manager.machine_checksum_string[label_name]
+
+ def GetReport(self):
+ """Dump the results of self.GetReportObject() to a string as JSON."""
+ # This exists for consistency with the other GetReport methods.
+ # Specifically, they all return strings, so it's a bit awkward if the JSON
+ # results reporter returns an object.
+ return json.dumps(self.GetReportObject(), **self.json_args)
diff --git a/crosperf/results_report_templates.py b/crosperf/results_report_templates.py
new file mode 100644
index 00000000..827649fd
--- /dev/null
+++ b/crosperf/results_report_templates.py
@@ -0,0 +1,196 @@
+# Copyright 2016 The Chromium OS Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+"""Text templates used by various parts of results_report."""
+from __future__ import print_function
+
+import cgi
+from string import Template
+
+_TabMenuTemplate = Template("""
+<div class='tab-menu'>
+ <a href="javascript:switchTab('$table_name', 'html')">HTML</a>
+ <a href="javascript:switchTab('$table_name', 'text')">Text</a>
+ <a href="javascript:switchTab('$table_name', 'tsv')">TSV</a>
+</div>""")
+
+def _GetTabMenuHTML(table_name):
+ # N.B. cgi.escape does some very basic HTML escaping. Nothing more.
+ escaped = cgi.escape(table_name, quote=True)
+ return _TabMenuTemplate.substitute(table_name=escaped)
+
+
+_ExperimentFileHTML = """
+<div class='results-section'>
+ <div class='results-section-title'>Experiment File</div>
+ <div class='results-section-content'>
+ <pre>%s</pre>
+</div>
+"""
+
+def _GetExperimentFileHTML(experiment_file_text):
+ if not experiment_file_text:
+ return ''
+ return _ExperimentFileHTML % (cgi.escape(experiment_file_text), )
+
+
+_ResultsSectionHTML = Template("""
+<div class='results-section'>
+ <div class='results-section-title'>$sect_name</div>
+ <div class='results-section-content'>
+ <div id='${short_name}-html'>$html_table</div>
+ <div id='${short_name}-text'><pre>$text_table</pre></div>
+ <div id='${short_name}-tsv'><pre>$tsv_table</pre></div>
+ </div>
+ $tab_menu
+</div>
+""")
+
+def _GetResultsSectionHTML(print_table, table_name, data):
+ first_word = table_name.strip().split()[0]
+ short_name = first_word.lower()
+ return _ResultsSectionHTML.substitute(sect_name=table_name,
+ html_table=print_table(data, 'HTML'),
+ text_table=print_table(data, 'PLAIN'),
+ tsv_table=print_table(data, 'TSV'),
+ tab_menu=_GetTabMenuHTML(short_name),
+ short_name=short_name)
+
+
+
+_MainHTML = Template("""
+<html>
+<head>
+ <style type="text/css">
+ body {
+ font-family: "Lucida Sans Unicode", "Lucida Grande", Sans-Serif;
+ font-size: 12px;
+ }
+
+ pre {
+ margin: 10px;
+ color: #039;
+ font-size: 14px;
+ }
+
+ .chart {
+ display: inline;
+ }
+
+ .hidden {
+ visibility: hidden;
+ }
+
+ .results-section {
+ border: 1px solid #b9c9fe;
+ margin: 10px;
+ }
+
+ .results-section-title {
+ background-color: #b9c9fe;
+ color: #039;
+ padding: 7px;
+ font-size: 14px;
+ width: 200px;
+ }
+
+ .results-section-content {
+ margin: 10px;
+ padding: 10px;
+ overflow:auto;
+ }
+
+ #box-table-a {
+ font-size: 12px;
+ width: 480px;
+ text-align: left;
+ border-collapse: collapse;
+ }
+
+ #box-table-a th {
+ padding: 6px;
+ background: #b9c9fe;
+ border-right: 1px solid #fff;
+ border-bottom: 1px solid #fff;
+ color: #039;
+ text-align: center;
+ }
+
+ #box-table-a td {
+ padding: 4px;
+ background: #e8edff;
+ border-bottom: 1px solid #fff;
+ border-right: 1px solid #fff;
+ color: #669;
+ border-top: 1px solid transparent;
+ }
+
+ #box-table-a tr:hover td {
+ background: #d0dafd;
+ color: #339;
+ }
+
+ </style>
+ <script type='text/javascript' src='https://www.google.com/jsapi'></script>
+ <script type='text/javascript'>
+ google.load('visualization', '1', {packages:['corechart']});
+ google.setOnLoadCallback(init);
+ function init() {
+ switchTab('summary', 'html');
+ ${perf_init};
+ switchTab('full', 'html');
+ drawTable();
+ }
+ function drawTable() {
+ ${chart_js};
+ }
+ function switchTab(table, tab) {
+ document.getElementById(table + '-html').style.display = 'none';
+ document.getElementById(table + '-text').style.display = 'none';
+ document.getElementById(table + '-tsv').style.display = 'none';
+ document.getElementById(table + '-' + tab).style.display = 'block';
+ }
+ </script>
+</head>
+
+<body>
+ $summary_table
+ $perf_html
+ <div class='results-section'>
+ <div class='results-section-title'>Charts</div>
+ <div class='results-section-content'>$chart_divs</div>
+ </div>
+ $full_table
+ $experiment_file
+</body>
+</html>
+""")
+
+# It's a bit ugly that we take some HTML things, and some non-HTML things, but I
+# need to balance prettiness with time spent making things pretty.
+def GenerateHTMLPage(perf_table, chart_js, summary_table, print_table,
+ chart_divs, full_table, experiment_file):
+ """Generates a crosperf HTML page from the given arguments.
+
+ print_table is a two-arg function called like: print_table(t, f)
+ t is one of [summary_table, print_table, full_table]; it's the table we want
+ to format.
+ f is one of ['TSV', 'HTML', 'PLAIN']; it's the type of format we want.
+ """
+ summary_table_html = _GetResultsSectionHTML(print_table, 'Summary Table',
+ summary_table)
+ if perf_table:
+ perf_html = _GetResultsSectionHTML(print_table, 'Perf Table', perf_table)
+ perf_init = "switchTab('perf', 'html')"
+ else:
+ perf_html = ''
+ perf_init = ''
+
+ full_table_html = _GetResultsSectionHTML(print_table, 'Full Table',
+ full_table)
+ experiment_file_html = _GetExperimentFileHTML(experiment_file)
+ return _MainHTML.substitute(perf_init=perf_init, chart_js=chart_js,
+ summary_table=summary_table_html,
+ perf_html=perf_html, chart_divs=chart_divs,
+ full_table=full_table_html,
+ experiment_file=experiment_file_html)
diff --git a/crosperf/results_report_unittest.py b/crosperf/results_report_unittest.py
new file mode 100755
index 00000000..ed5c74fa
--- /dev/null
+++ b/crosperf/results_report_unittest.py
@@ -0,0 +1,415 @@
+#!/usr/bin/env python2
+#
+# Copyright 2016 The Chromium OS Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+"""Unittest for the results reporter."""
+
+from __future__ import division
+from __future__ import print_function
+
+from StringIO import StringIO
+
+import collections
+import mock
+import os
+import test_flag
+import unittest
+
+from benchmark_run import MockBenchmarkRun
+from cros_utils import logger
+from experiment_factory import ExperimentFactory
+from experiment_file import ExperimentFile
+from machine_manager import MockCrosMachine
+from machine_manager import MockMachineManager
+from results_cache import MockResult
+from results_report import BenchmarkResults
+from results_report import HTMLResultsReport
+from results_report import JSONResultsReport
+from results_report import ParseChromeosImage
+from results_report import ParseStandardPerfReport
+from results_report import TextResultsReport
+
+
+class FreeFunctionsTest(unittest.TestCase):
+ """Tests for any free functions in results_report."""
+
+ def testParseChromeosImage(self):
+ # N.B. the cases with blank versions aren't explicitly supported by
+ # ParseChromeosImage. I'm not sure if they need to be supported, but the
+ # goal of this was to capture existing functionality as much as possible.
+ base_case = '/my/chroot/src/build/images/x86-generic/R01-1.0.date-time' \
+ '/chromiumos_test_image.bin'
+ self.assertEqual(ParseChromeosImage(base_case), ('R01-1.0', base_case))
+
+ dir_base_case = os.path.dirname(base_case)
+ self.assertEqual(ParseChromeosImage(dir_base_case), ('', dir_base_case))
+
+ buildbot_case = '/my/chroot/chroot/tmp/buildbot-build/R02-1.0.date-time' \
+ '/chromiumos_test_image.bin'
+ buildbot_img = buildbot_case.split('/chroot/tmp')[1]
+
+ self.assertEqual(ParseChromeosImage(buildbot_case),
+ ('R02-1.0', buildbot_img))
+ self.assertEqual(ParseChromeosImage(os.path.dirname(buildbot_case)),
+ ('', os.path.dirname(buildbot_img)))
+
+ # Ensure we don't act completely insanely given a few mildly insane paths.
+ fun_case = '/chromiumos_test_image.bin'
+ self.assertEqual(ParseChromeosImage(fun_case), ('', fun_case))
+
+ fun_case2 = 'chromiumos_test_image.bin'
+ self.assertEqual(ParseChromeosImage(fun_case2), ('', fun_case2))
+
+
+# There are many ways for this to be done better, but the linter complains
+# about all of them (that I can think of, at least).
+_fake_path_number = [0]
+def FakePath(ext):
+ """Makes a unique path that shouldn't exist on the host system.
+
+ Each call returns a different path, so if said path finds its way into an
+ error message, it may be easier to track it to its source.
+ """
+ _fake_path_number[0] += 1
+ prefix = '/tmp/should/not/exist/%d/' % (_fake_path_number[0], )
+ return os.path.join(prefix, ext)
+
+
+def MakeMockExperiment(compiler='gcc'):
+ """Mocks an experiment using the given compiler."""
+ mock_experiment_file = StringIO("""
+ board: x86-alex
+ remote: 127.0.0.1
+ perf_args: record -a -e cycles
+ benchmark: PageCycler {
+ iterations: 3
+ }
+
+ image1 {
+ chromeos_image: %s
+ }
+
+ image2 {
+ remote: 127.0.0.2
+ chromeos_image: %s
+ }
+ """ % (FakePath('cros_image1.bin'), FakePath('cros_image2.bin')))
+ efile = ExperimentFile(mock_experiment_file)
+ experiment = ExperimentFactory().GetExperiment(efile,
+ FakePath('working_directory'),
+ FakePath('log_dir'))
+ for label in experiment.labels:
+ label.compiler = compiler
+ return experiment
+
+
+def _InjectSuccesses(experiment, how_many, keyvals, for_benchmark=0,
+ label=None):
+ """Injects successful experiment runs (for each label) into the experiment."""
+ # Defensive copy of keyvals, so if it's modified, we'll know.
+ keyvals = dict(keyvals)
+ num_configs = len(experiment.benchmarks) * len(experiment.labels)
+ num_runs = len(experiment.benchmark_runs) // num_configs
+
+ # TODO(gbiv): Centralize the mocking of these, maybe? (It's also done in
+ # benchmark_run_unittest)
+ bench = experiment.benchmarks[for_benchmark]
+ cache_conditions = []
+ log_level = 'average'
+ share_cache = ''
+ locks_dir = ''
+ log = logger.GetLogger()
+ machine_manager = MockMachineManager(FakePath('chromeos_root'), 0,
+ log_level, locks_dir)
+ machine_manager.AddMachine('testing_machine')
+ machine = next(m for m in machine_manager.GetMachines()
+ if m.name == 'testing_machine')
+ for label in experiment.labels:
+ def MakeSuccessfulRun(n):
+ run = MockBenchmarkRun('mock_success%d' % (n, ), bench, label,
+ 1 + n + num_runs, cache_conditions,
+ machine_manager, log, log_level, share_cache)
+ mock_result = MockResult(log, label, log_level, machine)
+ mock_result.keyvals = keyvals
+ run.result = mock_result
+ return run
+
+ experiment.benchmark_runs.extend(MakeSuccessfulRun(n)
+ for n in xrange(how_many))
+ return experiment
+
+
+class TextResultsReportTest(unittest.TestCase):
+ """Tests that the output of a text report contains the things we pass in.
+
+ At the moment, this doesn't care deeply about the format in which said
+ things are displayed. It just cares that they're present.
+ """
+
+ def _checkReport(self, email):
+ num_success = 2
+ success_keyvals = {'retval': 0, 'machine': 'some bot', 'a_float': 3.96}
+ experiment = _InjectSuccesses(MakeMockExperiment(), num_success,
+ success_keyvals)
+ text_report = TextResultsReport.FromExperiment(experiment, email=email) \
+ .GetReport()
+ self.assertIn(str(success_keyvals['a_float']), text_report)
+ self.assertIn(success_keyvals['machine'], text_report)
+ self.assertIn(MockCrosMachine.CPUINFO_STRING, text_report)
+ return text_report
+
+
+ def testOutput(self):
+ email_report = self._checkReport(email=True)
+ text_report = self._checkReport(email=False)
+
+ # Ensure that the reports somehow different. Otherwise, having the
+ # distinction is useless.
+ self.assertNotEqual(email_report, text_report)
+
+
+class HTMLResultsReportTest(unittest.TestCase):
+ """Tests that the output of a HTML report contains the things we pass in.
+
+ At the moment, this doesn't care deeply about the format in which said
+ things are displayed. It just cares that they're present.
+ """
+
+ _TestOutput = collections.namedtuple('TestOutput', ['summary_table',
+ 'perf_html',
+ 'chart_js',
+ 'charts',
+ 'full_table',
+ 'experiment_file'])
+
+ @staticmethod
+ def _GetTestOutput(perf_table, chart_js, summary_table, print_table,
+ chart_divs, full_table, experiment_file):
+ # N.B. Currently we don't check chart_js; it's just passed through because
+ # cros lint complains otherwise.
+ summary_table = print_table(summary_table, 'HTML')
+ perf_html = print_table(perf_table, 'HTML')
+ full_table = print_table(full_table, 'HTML')
+ return HTMLResultsReportTest._TestOutput(summary_table=summary_table,
+ perf_html=perf_html,
+ chart_js=chart_js,
+ charts=chart_divs,
+ full_table=full_table,
+ experiment_file=experiment_file)
+
+ def _GetOutput(self, experiment=None, benchmark_results=None):
+ with mock.patch('results_report_templates.GenerateHTMLPage') as standin:
+ if experiment is not None:
+ HTMLResultsReport.FromExperiment(experiment).GetReport()
+ else:
+ HTMLResultsReport(benchmark_results).GetReport()
+ mod_mock = standin
+ self.assertEquals(mod_mock.call_count, 1)
+ # call_args[0] is positional args, call_args[1] is kwargs.
+ self.assertEquals(mod_mock.call_args[0], tuple())
+ fmt_args = mod_mock.call_args[1]
+ return self._GetTestOutput(**fmt_args)
+
+ def testNoSuccessOutput(self):
+ output = self._GetOutput(MakeMockExperiment())
+ self.assertIn('no result', output.summary_table)
+ self.assertIn('no result', output.full_table)
+ self.assertEqual(output.charts, '')
+ self.assertNotEqual(output.experiment_file, '')
+
+ def testSuccessfulOutput(self):
+ num_success = 2
+ success_keyvals = {'retval': 0, 'a_float': 3.96}
+ output = self._GetOutput(_InjectSuccesses(MakeMockExperiment(), num_success,
+ success_keyvals))
+
+ self.assertNotIn('no result', output.summary_table)
+ #self.assertIn(success_keyvals['machine'], output.summary_table)
+ self.assertIn('a_float', output.summary_table)
+ self.assertIn(str(success_keyvals['a_float']), output.summary_table)
+ self.assertIn('a_float', output.full_table)
+ # The _ in a_float is filtered out when we're generating HTML.
+ self.assertIn('afloat', output.charts)
+ # And make sure we have our experiment file...
+ self.assertNotEqual(output.experiment_file, '')
+
+ def testBenchmarkResultFailure(self):
+ labels = ['label1']
+ benchmark_names_and_iterations = [('bench1', 1)]
+ benchmark_keyvals = {'bench1': [[]]}
+ results = BenchmarkResults(labels, benchmark_names_and_iterations,
+ benchmark_keyvals)
+ output = self._GetOutput(benchmark_results=results)
+ self.assertIn('no result', output.summary_table)
+ self.assertEqual(output.charts, '')
+ self.assertEqual(output.experiment_file, '')
+
+ def testBenchmarkResultSuccess(self):
+ labels = ['label1']
+ benchmark_names_and_iterations = [('bench1', 1)]
+ benchmark_keyvals = {'bench1': [[{'retval': 1, 'foo': 2.0}]]}
+ results = BenchmarkResults(labels, benchmark_names_and_iterations,
+ benchmark_keyvals)
+ output = self._GetOutput(benchmark_results=results)
+ self.assertNotIn('no result', output.summary_table)
+ self.assertIn('bench1', output.summary_table)
+ self.assertIn('bench1', output.full_table)
+ self.assertNotEqual(output.charts, '')
+ self.assertEqual(output.experiment_file, '')
+
+
+class JSONResultsReportTest(unittest.TestCase):
+ """Tests JSONResultsReport."""
+
+ REQUIRED_REPORT_KEYS = ('date', 'time', 'label', 'test_name', 'pass')
+ EXPERIMENT_REPORT_KEYS = ('board', 'chromeos_image', 'chromeos_version',
+ 'chrome_version', 'compiler')
+
+ @staticmethod
+ def _GetRequiredKeys(is_experiment):
+ required_keys = JSONResultsReportTest.REQUIRED_REPORT_KEYS
+ if is_experiment:
+ required_keys += JSONResultsReportTest.EXPERIMENT_REPORT_KEYS
+ return required_keys
+
+ def _CheckRequiredKeys(self, test_output, is_experiment):
+ required_keys = self._GetRequiredKeys(is_experiment)
+ for output in test_output:
+ for key in required_keys:
+ self.assertIn(key, output)
+
+ def testAllFailedJSONReportOutput(self):
+ experiment = MakeMockExperiment()
+ results = JSONResultsReport.FromExperiment(experiment).GetReportObject()
+ self._CheckRequiredKeys(results, is_experiment=True)
+ # Nothing succeeded; we don't send anything more than what's required.
+ required_keys = self._GetRequiredKeys(is_experiment=True)
+ for result in results:
+ self.assertItemsEqual(result.iterkeys(), required_keys)
+
+ def testJSONReportOutputWithSuccesses(self):
+ success_keyvals = {
+ 'retval': 0,
+ 'a_float': '2.3',
+ 'many_floats': [['1.0', '2.0'], ['3.0']],
+ 'machine': "i'm a pirate"
+ }
+
+ # 2 is arbitrary.
+ num_success = 2
+ experiment = _InjectSuccesses(MakeMockExperiment(), num_success,
+ success_keyvals)
+ results = JSONResultsReport.FromExperiment(experiment).GetReportObject()
+ self._CheckRequiredKeys(results, is_experiment=True)
+
+ num_passes = num_success * len(experiment.labels)
+ non_failures = [r for r in results if r['pass']]
+ self.assertEqual(num_passes, len(non_failures))
+
+ # TODO(gbiv): ...Is the 3.0 *actually* meant to be dropped?
+ expected_detailed = {'a_float': 2.3, 'many_floats': [1.0, 2.0]}
+ for pass_ in non_failures:
+ self.assertIn('detailed_results', pass_)
+ self.assertDictEqual(expected_detailed, pass_['detailed_results'])
+ self.assertIn('machine', pass_)
+ self.assertEqual(success_keyvals['machine'], pass_['machine'])
+
+ def testFailedJSONReportOutputWithoutExperiment(self):
+ labels = ['label1']
+ benchmark_names_and_iterations = [('bench1', 1), ('bench2', 2),
+ ('bench3', 1), ('bench4', 0)]
+ benchmark_keyvals = {
+ 'bench1': [[{'retval': 1, 'foo': 2.0}]],
+ 'bench2': [[{'retval': 1, 'foo': 4.0}, {'retval': -1, 'bar': 999}]],
+ # lack of retval is considered a failure.
+ 'bench3': [[{}]],
+ 'bench4': [[]]
+ }
+ bench_results = BenchmarkResults(labels, benchmark_names_and_iterations,
+ benchmark_keyvals)
+ results = JSONResultsReport(bench_results).GetReportObject()
+ self._CheckRequiredKeys(results, is_experiment=False)
+ self.assertFalse(any(r['pass'] for r in results))
+
+ def testJSONGetReportObeysJSONSettings(self):
+ labels = ['label1']
+ benchmark_names_and_iterations = [('bench1', 1)]
+ # These can be anything, really. So long as they're distinctive.
+ separators = (',\t\n\t', ':\t\n\t')
+ benchmark_keyvals = {'bench1': [[{'retval': 0, 'foo': 2.0}]]}
+ bench_results = BenchmarkResults(labels, benchmark_names_and_iterations,
+ benchmark_keyvals)
+ reporter = JSONResultsReport(bench_results,
+ json_args={'separators': separators})
+ result_str = reporter.GetReport()
+ self.assertIn(separators[0], result_str)
+ self.assertIn(separators[1], result_str)
+
+ def testSuccessfulJSONReportOutputWithoutExperiment(self):
+ labels = ['label1']
+ benchmark_names_and_iterations = [('bench1', 1), ('bench2', 2)]
+ benchmark_keyvals = {
+ 'bench1': [[{'retval': 0, 'foo': 2.0}]],
+ 'bench2': [[{'retval': 0, 'foo': 4.0}, {'retval': 0, 'bar': 999}]]
+ }
+ bench_results = BenchmarkResults(labels, benchmark_names_and_iterations,
+ benchmark_keyvals)
+ results = JSONResultsReport(bench_results).GetReportObject()
+ self._CheckRequiredKeys(results, is_experiment=False)
+ self.assertTrue(all(r['pass'] for r in results))
+ # Enforce that the results have *some* deterministic order.
+ keyfn = lambda r: (r['test_name'], r['detailed_results'].get('foo', 5.0))
+ sorted_results = sorted(results, key=keyfn)
+ detailed_results = [r['detailed_results'] for r in sorted_results]
+ bench1, bench2_foo, bench2_bar = detailed_results
+ self.assertEqual(bench1['foo'], 2.0)
+ self.assertEqual(bench2_foo['foo'], 4.0)
+ self.assertEqual(bench2_bar['bar'], 999)
+ self.assertNotIn('bar', bench1)
+ self.assertNotIn('bar', bench2_foo)
+ self.assertNotIn('foo', bench2_bar)
+
+
+class PerfReportParserTest(unittest.TestCase):
+ """Tests for the perf report parser in results_report."""
+ @staticmethod
+ def _ReadRealPerfReport():
+ my_dir = os.path.dirname(os.path.realpath(__file__))
+ with open(os.path.join(my_dir, 'perf_files/perf.data.report.0')) as f:
+ return f.read()
+
+ def testParserParsesRealWorldPerfReport(self):
+ report = ParseStandardPerfReport(self._ReadRealPerfReport())
+ self.assertItemsEqual(['cycles', 'instructions'], report.keys())
+
+ # Arbitrarily selected known percentages from the perf report.
+ known_cycles_percentages = {
+ '0xffffffffa4a1f1c9': 0.66,
+ '0x0000115bb7ba9b54': 0.47,
+ '0x0000000000082e08': 0.00,
+ '0xffffffffa4a13e63': 0.00,
+ }
+ report_cycles = report['cycles']
+ self.assertEqual(len(report_cycles), 214)
+ for k, v in known_cycles_percentages.iteritems():
+ self.assertIn(k, report_cycles)
+ self.assertEqual(v, report_cycles[k])
+
+ known_instrunctions_percentages = {
+ '0x0000115bb6c35d7a': 1.65,
+ '0x0000115bb7ba9b54': 0.67,
+ '0x0000000000024f56': 0.00,
+ '0xffffffffa4a0ee03': 0.00,
+ }
+ report_instructions = report['instructions']
+ self.assertEqual(len(report_instructions), 492)
+ for k, v in known_instrunctions_percentages.iteritems():
+ self.assertIn(k, report_instructions)
+ self.assertEqual(v, report_instructions[k])
+
+
+if __name__ == '__main__':
+ test_flag.SetTestMode(True)
+ unittest.main()
diff --git a/crosperf/run_tests.sh b/crosperf/run_tests.sh
new file mode 100755
index 00000000..78a2b9fd
--- /dev/null
+++ b/crosperf/run_tests.sh
@@ -0,0 +1,32 @@
+#!/bin/bash
+#
+# Copyright 2011 Google Inc. All Rights Reserved.
+# Author: raymes@google.com (Raymes Khoury)
+
+# Make sure the base toolchain-utils directory is in our PYTHONPATH before
+# trying to run this script.
+export PYTHONPATH+=":.."
+
+num_tests=0
+num_failed=0
+
+for test in $(find -name \*test.py); do
+ echo RUNNING: ${test}
+ ((num_tests++))
+ if ! ./${test} ; then
+ echo
+ echo "*** Test Failed! (${test}) ***"
+ echo
+ ((num_failed++))
+ fi
+done
+
+echo
+
+if [ ${num_failed} -eq 0 ] ; then
+ echo "ALL TESTS PASSED (${num_tests} ran)"
+ exit 0
+fi
+
+echo "${num_failed} TESTS FAILED (out of ${num_tests})"
+exit 1
diff --git a/crosperf/schedv2.py b/crosperf/schedv2.py
new file mode 100644
index 00000000..90fe83a3
--- /dev/null
+++ b/crosperf/schedv2.py
@@ -0,0 +1,439 @@
+# Copyright 2015 The Chromium OS Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+"""Module to optimize the scheduling of benchmark_run tasks."""
+
+
+from __future__ import print_function
+
+import sys
+import test_flag
+import traceback
+
+from collections import defaultdict
+from machine_image_manager import MachineImageManager
+from threading import Lock
+from threading import Thread
+from cros_utils import command_executer
+from cros_utils import logger
+
+
+class DutWorker(Thread):
+ """Working thread for a dut."""
+
+ def __init__(self, dut, sched):
+ super(DutWorker, self).__init__(name='DutWorker-{}'.format(dut.name))
+ self._dut = dut
+ self._sched = sched
+ self._stat_num_br_run = 0
+ self._stat_num_reimage = 0
+ self._stat_annotation = ''
+ self._logger = logger.GetLogger(self._sched.get_experiment().log_dir)
+ self.daemon = True
+ self._terminated = False
+ self._active_br = None
+ # Race condition accessing _active_br between _execute_benchmark_run and
+ # _terminate, so lock it up.
+ self._active_br_lock = Lock()
+
+ def terminate(self):
+ self._terminated = True
+ with self._active_br_lock:
+ if self._active_br is not None:
+ # BenchmarkRun.Terminate() terminates any running testcase via
+ # suite_runner.Terminate and updates timeline.
+ self._active_br.Terminate()
+
+ def run(self):
+ """Do the "run-test->(optionally reimage)->run-test" chore.
+
+ Note - 'br' below means 'benchmark_run'.
+ """
+
+ # Firstly, handle benchmarkruns that have cache hit.
+ br = self._sched.get_cached_benchmark_run()
+ while br:
+ try:
+ self._stat_annotation = 'finishing cached {}'.format(br)
+ br.run()
+ except RuntimeError:
+ traceback.print_exc(file=sys.stdout)
+ br = self._sched.get_cached_benchmark_run()
+
+ # Secondly, handle benchmarkruns that needs to be run on dut.
+ self._setup_dut_label()
+ try:
+ self._logger.LogOutput('{} started.'.format(self))
+ while not self._terminated:
+ br = self._sched.get_benchmark_run(self._dut)
+ if br is None:
+ # No br left for this label. Considering reimaging.
+ label = self._sched.allocate_label(self._dut)
+ if label is None:
+ # No br even for other labels. We are done.
+ self._logger.LogOutput('ImageManager found no label '
+ 'for dut, stopping working '
+ 'thread {}.'.format(self))
+ break
+ if self._reimage(label):
+ # Reimage to run other br fails, dut is doomed, stop
+ # this thread.
+ self._logger.LogWarning('Re-image failed, dut '
+ 'in an unstable state, stopping '
+ 'working thread {}.'.format(self))
+ break
+ else:
+ # Execute the br.
+ self._execute_benchmark_run(br)
+ finally:
+ self._stat_annotation = 'finished'
+ # Thread finishes. Notify scheduler that I'm done.
+ self._sched.dut_worker_finished(self)
+
+ def _reimage(self, label):
+ """Reimage image to label.
+
+ Args:
+ label: the label to remimage onto dut.
+
+ Returns:
+ 0 if successful, otherwise 1.
+ """
+
+ # Termination could happen anywhere, check it.
+ if self._terminated:
+ return 1
+
+ self._logger.LogOutput('Reimaging {} using {}'.format(self, label))
+ self._stat_num_reimage += 1
+ self._stat_annotation = 'reimaging using "{}"'.format(label.name)
+ try:
+ # Note, only 1 reimage at any given time, this is guaranteed in
+ # ImageMachine, so no sync needed below.
+ retval = self._sched.get_experiment().machine_manager.ImageMachine(
+ self._dut,
+ label)
+
+ if retval:
+ return 1
+ except RuntimeError:
+ return 1
+
+ self._dut.label = label
+ return 0
+
+ def _execute_benchmark_run(self, br):
+ """Execute a single benchmark_run.
+
+ Note - this function never throws exceptions.
+ """
+
+ # Termination could happen anywhere, check it.
+ if self._terminated:
+ return
+
+ self._logger.LogOutput('{} started working on {}'.format(self, br))
+ self._stat_num_br_run += 1
+ self._stat_annotation = 'executing {}'.format(br)
+ # benchmark_run.run does not throws, but just play it safe here.
+ try:
+ assert br.owner_thread is None
+ br.owner_thread = self
+ with self._active_br_lock:
+ self._active_br = br
+ br.run()
+ finally:
+ self._sched.get_experiment().BenchmarkRunFinished(br)
+ with self._active_br_lock:
+ self._active_br = None
+
+ def _setup_dut_label(self):
+ """Try to match dut image with a certain experiment label.
+
+ If such match is found, we just skip doing reimage and jump to execute
+ some benchmark_runs.
+ """
+
+ checksum_file = '/usr/local/osimage_checksum_file'
+ try:
+ rv, checksum, _ = command_executer.GetCommandExecuter().\
+ CrosRunCommandWOutput(
+ 'cat ' + checksum_file,
+ chromeos_root=self._sched.get_labels(0).chromeos_root,
+ machine=self._dut.name,
+ print_to_console=False)
+ if rv == 0:
+ checksum = checksum.strip()
+ for l in self._sched.get_labels():
+ if l.checksum == checksum:
+ self._logger.LogOutput("Dut '{}' is pre-installed with '{}'".format(
+ self._dut.name, l))
+ self._dut.label = l
+ return
+ except RuntimeError:
+ traceback.print_exc(file=sys.stdout)
+ self._dut.label = None
+
+ def __str__(self):
+ return 'DutWorker[dut="{}", label="{}"]'.format(
+ self._dut.name, self._dut.label.name if self._dut.label else 'None')
+
+ def dut(self):
+ return self._dut
+
+ def status_str(self):
+ """Report thread status."""
+
+ return ('Worker thread "{}", label="{}", benchmark_run={}, '
+ 'reimage={}, now {}'.format(
+ self._dut.name, 'None' if self._dut.label is None else
+ self._dut.label.name, self._stat_num_br_run,
+ self._stat_num_reimage, self._stat_annotation))
+
+
+class BenchmarkRunCacheReader(Thread):
+ """The thread to read cache for a list of benchmark_runs.
+
+ On creation, each instance of this class is given a br_list, which is a
+ subset of experiment._benchmark_runs.
+ """
+
+ def __init__(self, schedv2, br_list):
+ super(BenchmarkRunCacheReader, self).__init__()
+ self._schedv2 = schedv2
+ self._br_list = br_list
+ self._logger = self._schedv2.get_logger()
+
+ def run(self):
+ for br in self._br_list:
+ try:
+ br.ReadCache()
+ if br.cache_hit:
+ self._logger.LogOutput('Cache hit - {}'.format(br))
+ with self._schedv2.lock_on('_cached_br_list'):
+ self._schedv2.get_cached_run_list().append(br)
+ else:
+ self._logger.LogOutput('Cache not hit - {}'.format(br))
+ except RuntimeError:
+ traceback.print_exc(file=sys.stderr)
+
+
+class Schedv2(object):
+ """New scheduler for crosperf."""
+
+ def __init__(self, experiment):
+ self._experiment = experiment
+ self._logger = logger.GetLogger(experiment.log_dir)
+
+ # Create shortcuts to nested data structure. "_duts" points to a list of
+ # locked machines. _labels points to a list of all labels.
+ self._duts = self._experiment.machine_manager.GetMachines()
+ self._labels = self._experiment.labels
+
+ # Bookkeeping for synchronization.
+ self._workers_lock = Lock()
+ # pylint: disable=unnecessary-lambda
+ self._lock_map = defaultdict(lambda: Lock())
+
+ # Test mode flag
+ self._in_test_mode = test_flag.GetTestMode()
+
+ # Read benchmarkrun cache.
+ self._read_br_cache()
+
+ # Mapping from label to a list of benchmark_runs.
+ self._label_brl_map = dict((l, []) for l in self._labels)
+ for br in self._experiment.benchmark_runs:
+ assert br.label in self._label_brl_map
+ # Only put no-cache-hit br into the map.
+ if br not in self._cached_br_list:
+ self._label_brl_map[br.label].append(br)
+
+ # Use machine image manager to calculate initial label allocation.
+ self._mim = MachineImageManager(self._labels, self._duts)
+ self._mim.compute_initial_allocation()
+
+ # Create worker thread, 1 per dut.
+ self._active_workers = [DutWorker(dut, self) for dut in self._duts]
+ self._finished_workers = []
+
+ # Termination flag.
+ self._terminated = False
+
+ def run_sched(self):
+ """Start all dut worker threads and return immediately."""
+
+ for w in self._active_workers:
+ w.start()
+
+ def _read_br_cache(self):
+ """Use multi-threading to read cache for all benchmarkruns.
+
+ We do this by firstly creating a few threads, and then assign each
+ thread a segment of all brs. Each thread will check cache status for
+ each br and put those with cache into '_cached_br_list'.
+ """
+
+ self._cached_br_list = []
+ n_benchmarkruns = len(self._experiment.benchmark_runs)
+ if n_benchmarkruns <= 4:
+ # Use single thread to read cache.
+ self._logger.LogOutput(('Starting to read cache status for '
+ '{} benchmark runs ...').format(n_benchmarkruns))
+ BenchmarkRunCacheReader(self, self._experiment.benchmark_runs).run()
+ return
+
+ # Split benchmarkruns set into segments. Each segment will be handled by
+ # a thread. Note, we use (x+3)/4 to mimic math.ceil(x/4).
+ n_threads = max(2, min(20, (n_benchmarkruns + 3) / 4))
+ self._logger.LogOutput(('Starting {} threads to read cache status for '
+ '{} benchmark runs ...').format(n_threads,
+ n_benchmarkruns))
+ benchmarkruns_per_thread = (n_benchmarkruns + n_threads - 1) / n_threads
+ benchmarkrun_segments = []
+ for i in range(n_threads - 1):
+ start = i * benchmarkruns_per_thread
+ end = (i + 1) * benchmarkruns_per_thread
+ benchmarkrun_segments.append(self._experiment.benchmark_runs[start:end])
+ benchmarkrun_segments.append(self._experiment.benchmark_runs[
+ (n_threads - 1) * benchmarkruns_per_thread:])
+
+ # Assert: aggregation of benchmarkrun_segments equals to benchmark_runs.
+ assert sum(len(x) for x in benchmarkrun_segments) == n_benchmarkruns
+
+ # Create and start all readers.
+ cache_readers = [
+ BenchmarkRunCacheReader(self, x) for x in benchmarkrun_segments
+ ]
+
+ for x in cache_readers:
+ x.start()
+
+ # Wait till all readers finish.
+ for x in cache_readers:
+ x.join()
+
+ # Summarize.
+ self._logger.LogOutput(
+ 'Total {} cache hit out of {} benchmark_runs.'.format(
+ len(self._cached_br_list), n_benchmarkruns))
+
+ def get_cached_run_list(self):
+ return self._cached_br_list
+
+ def get_label_map(self):
+ return self._label_brl_map
+
+ def get_experiment(self):
+ return self._experiment
+
+ def get_labels(self, i=None):
+ if i == None:
+ return self._labels
+ return self._labels[i]
+
+ def get_logger(self):
+ return self._logger
+
+ def get_cached_benchmark_run(self):
+ """Get a benchmark_run with 'cache hit'.
+
+ Returns:
+ The benchmark that has cache hit, if any. Otherwise none.
+ """
+
+ with self.lock_on('_cached_br_list'):
+ if self._cached_br_list:
+ return self._cached_br_list.pop()
+ return None
+
+ def get_benchmark_run(self, dut):
+ """Get a benchmark_run (br) object for a certain dut.
+
+ Args:
+ dut: the dut for which a br is returned.
+
+ Returns:
+ A br with its label matching that of the dut. If no such br could be
+ found, return None (this usually means a reimage is required for the
+ dut).
+ """
+
+ # If terminated, stop providing any br.
+ if self._terminated:
+ return None
+
+ # If dut bears an unrecognized label, return None.
+ if dut.label is None:
+ return None
+
+ # If br list for the dut's label is empty (that means all brs for this
+ # label have been done), return None.
+ with self.lock_on(dut.label):
+ brl = self._label_brl_map[dut.label]
+ if not brl:
+ return None
+ # Return the first br.
+ return brl.pop(0)
+
+ def allocate_label(self, dut):
+ """Allocate a label to a dut.
+
+ The work is delegated to MachineImageManager.
+
+ The dut_worker calling this method is responsible for reimage the dut to
+ this label.
+
+ Args:
+ dut: the new label that is to be reimaged onto the dut.
+
+ Returns:
+ The label or None.
+ """
+
+ if self._terminated:
+ return None
+
+ return self._mim.allocate(dut, self)
+
+ def dut_worker_finished(self, dut_worker):
+ """Notify schedv2 that the dut_worker thread finished.
+
+ Args:
+ dut_worker: the thread that is about to end.
+ """
+
+ self._logger.LogOutput('{} finished.'.format(dut_worker))
+ with self._workers_lock:
+ self._active_workers.remove(dut_worker)
+ self._finished_workers.append(dut_worker)
+
+ def is_complete(self):
+ return len(self._active_workers) == 0
+
+ def lock_on(self, my_object):
+ return self._lock_map[my_object]
+
+ def terminate(self):
+ """Mark flag so we stop providing br/reimages.
+
+ Also terminate each DutWorker, so they refuse to execute br or reimage.
+ """
+
+ self._terminated = True
+ for dut_worker in self._active_workers:
+ dut_worker.terminate()
+
+ def threads_status_as_string(self):
+ """Report the dut worker threads status."""
+
+ status = '{} active threads, {} finished threads.\n'.format(
+ len(self._active_workers), len(self._finished_workers))
+ status += ' Active threads:'
+ for dw in self._active_workers:
+ status += '\n ' + dw.status_str()
+ if self._finished_workers:
+ status += '\n Finished threads:'
+ for dw in self._finished_workers:
+ status += '\n ' + dw.status_str()
+ return status
diff --git a/crosperf/schedv2_unittest.py b/crosperf/schedv2_unittest.py
new file mode 100755
index 00000000..be0fde4b
--- /dev/null
+++ b/crosperf/schedv2_unittest.py
@@ -0,0 +1,221 @@
+#!/usr/bin/env python2
+
+# Copyright 2015 Google Inc. All Rights Reserved.
+"""This contains the unit tests for the new Crosperf task scheduler."""
+
+from __future__ import print_function
+
+import mock
+import unittest
+import StringIO
+
+import benchmark_run
+import test_flag
+from experiment_factory import ExperimentFactory
+from experiment_file import ExperimentFile
+from cros_utils.command_executer import CommandExecuter
+from experiment_runner_unittest import FakeLogger
+from schedv2 import Schedv2
+
+EXPERIMENT_FILE_1 = """\
+board: daisy
+remote: chromeos-daisy1.cros chromeos-daisy2.cros
+
+benchmark: kraken {
+ suite: telemetry_Crosperf
+ iterations: 3
+}
+
+image1 {
+ chromeos_image: /chromeos/src/build/images/daisy/latest/cros_image1.bin
+ remote: chromeos-daisy3.cros
+}
+
+image2 {
+ chromeos_image: /chromeos/src/build/imaages/daisy/latest/cros_image2.bin
+ remote: chromeos-daisy4.cros chromeos-daisy5.cros
+}
+"""
+
+EXPERIMENT_FILE_WITH_FORMAT = """\
+board: daisy
+remote: chromeos-daisy1.cros chromeos-daisy2.cros
+
+benchmark: kraken {{
+ suite: telemetry_Crosperf
+ iterations: {kraken_iterations}
+}}
+
+image1 {{
+ chromeos_image: /chromeos/src/build/images/daisy/latest/cros_image1.bin
+ remote: chromeos-daisy3.cros
+}}
+
+image2 {{
+ chromeos_image: /chromeos/src/build/imaages/daisy/latest/cros_image2.bin
+ remote: chromeos-daisy4.cros chromeos-daisy5.cros
+}}
+"""
+
+
+class Schedv2Test(unittest.TestCase):
+ """Class for setting up and running the unit tests."""
+
+ def setUp(self):
+ self.exp = None
+
+ mock_logger = FakeLogger()
+ mock_cmd_exec = mock.Mock(spec=CommandExecuter)
+
+ @mock.patch('benchmark_run.BenchmarkRun', new=benchmark_run.MockBenchmarkRun)
+ def _make_fake_experiment(self, expstr):
+ """Create fake experiment from string.
+
+ Note - we mock out BenchmarkRun in this step.
+ """
+ experiment_file = ExperimentFile(StringIO.StringIO(expstr))
+ experiment = ExperimentFactory().GetExperiment(experiment_file,
+ working_directory='',
+ log_dir='')
+ return experiment
+
+ def test_remote(self):
+ """Test that remotes in labels are aggregated into experiment.remote."""
+
+ self.exp = self._make_fake_experiment(EXPERIMENT_FILE_1)
+ self.exp.log_level = 'verbose'
+ my_schedv2 = Schedv2(self.exp)
+ self.assertFalse(my_schedv2.is_complete())
+ self.assertIn('chromeos-daisy1.cros', self.exp.remote)
+ self.assertIn('chromeos-daisy2.cros', self.exp.remote)
+ self.assertIn('chromeos-daisy3.cros', self.exp.remote)
+ self.assertIn('chromeos-daisy4.cros', self.exp.remote)
+ self.assertIn('chromeos-daisy5.cros', self.exp.remote)
+
+ def test_unreachable_remote(self):
+ """Test unreachable remotes are removed from experiment and label."""
+
+ def MockIsReachable(cm):
+ return (cm.name != 'chromeos-daisy3.cros' and
+ cm.name != 'chromeos-daisy5.cros')
+
+ with mock.patch('machine_manager.MockCrosMachine.IsReachable',
+ new=MockIsReachable):
+ self.exp = self._make_fake_experiment(EXPERIMENT_FILE_1)
+ self.assertIn('chromeos-daisy1.cros', self.exp.remote)
+ self.assertIn('chromeos-daisy2.cros', self.exp.remote)
+ self.assertNotIn('chromeos-daisy3.cros', self.exp.remote)
+ self.assertIn('chromeos-daisy4.cros', self.exp.remote)
+ self.assertNotIn('chromeos-daisy5.cros', self.exp.remote)
+
+ for l in self.exp.labels:
+ if l.name == 'image2':
+ self.assertNotIn('chromeos-daisy5.cros', l.remote)
+ self.assertIn('chromeos-daisy4.cros', l.remote)
+ elif l.name == 'image1':
+ self.assertNotIn('chromeos-daisy3.cros', l.remote)
+
+ @mock.patch('schedv2.BenchmarkRunCacheReader')
+ def test_BenchmarkRunCacheReader_1(self, reader):
+ """Test benchmarkrun set is split into 5 segments."""
+
+ self.exp = self._make_fake_experiment(EXPERIMENT_FILE_WITH_FORMAT.format(
+ kraken_iterations=9))
+ my_schedv2 = Schedv2(self.exp)
+ self.assertFalse(my_schedv2.is_complete())
+ # We have 9 * 2 == 18 brs, we use 5 threads, each reading 4, 4, 4,
+ # 4, 2 brs respectively.
+ # Assert that BenchmarkRunCacheReader() is called 5 times.
+ self.assertEquals(reader.call_count, 5)
+ # reader.call_args_list[n] - nth call.
+ # reader.call_args_list[n][0] - positioned args in nth call.
+ # reader.call_args_list[n][0][1] - the 2nd arg in nth call,
+ # that is 'br_list' in 'schedv2.BenchmarkRunCacheReader'.
+ self.assertEquals(len(reader.call_args_list[0][0][1]), 4)
+ self.assertEquals(len(reader.call_args_list[1][0][1]), 4)
+ self.assertEquals(len(reader.call_args_list[2][0][1]), 4)
+ self.assertEquals(len(reader.call_args_list[3][0][1]), 4)
+ self.assertEquals(len(reader.call_args_list[4][0][1]), 2)
+
+ @mock.patch('schedv2.BenchmarkRunCacheReader')
+ def test_BenchmarkRunCacheReader_2(self, reader):
+ """Test benchmarkrun set is split into 4 segments."""
+
+ self.exp = self._make_fake_experiment(EXPERIMENT_FILE_WITH_FORMAT.format(
+ kraken_iterations=8))
+ my_schedv2 = Schedv2(self.exp)
+ self.assertFalse(my_schedv2.is_complete())
+ # We have 8 * 2 == 16 brs, we use 4 threads, each reading 4 brs.
+ self.assertEquals(reader.call_count, 4)
+ self.assertEquals(len(reader.call_args_list[0][0][1]), 4)
+ self.assertEquals(len(reader.call_args_list[1][0][1]), 4)
+ self.assertEquals(len(reader.call_args_list[2][0][1]), 4)
+ self.assertEquals(len(reader.call_args_list[3][0][1]), 4)
+
+ @mock.patch('schedv2.BenchmarkRunCacheReader')
+ def test_BenchmarkRunCacheReader_3(self, reader):
+ """Test benchmarkrun set is split into 2 segments."""
+
+ self.exp = self._make_fake_experiment(EXPERIMENT_FILE_WITH_FORMAT.format(
+ kraken_iterations=3))
+ my_schedv2 = Schedv2(self.exp)
+ self.assertFalse(my_schedv2.is_complete())
+ # We have 3 * 2 == 6 brs, we use 2 threads.
+ self.assertEquals(reader.call_count, 2)
+ self.assertEquals(len(reader.call_args_list[0][0][1]), 3)
+ self.assertEquals(len(reader.call_args_list[1][0][1]), 3)
+
+ @mock.patch('schedv2.BenchmarkRunCacheReader')
+ def test_BenchmarkRunCacheReader_4(self, reader):
+ """Test benchmarkrun set is not splitted."""
+
+ self.exp = self._make_fake_experiment(EXPERIMENT_FILE_WITH_FORMAT.format(
+ kraken_iterations=1))
+ my_schedv2 = Schedv2(self.exp)
+ self.assertFalse(my_schedv2.is_complete())
+ # We have 1 * 2 == 2 br, so only 1 instance.
+ self.assertEquals(reader.call_count, 1)
+ self.assertEquals(len(reader.call_args_list[0][0][1]), 2)
+
+ def test_cachehit(self):
+ """Test cache-hit and none-cache-hit brs are properly organized."""
+
+ def MockReadCache(br):
+ br.cache_hit = (br.label.name == 'image2')
+
+ with mock.patch('benchmark_run.MockBenchmarkRun.ReadCache',
+ new=MockReadCache):
+ # We have 2 * 30 brs, half of which are put into _cached_br_list.
+ self.exp = self._make_fake_experiment(EXPERIMENT_FILE_WITH_FORMAT.format(
+ kraken_iterations=30))
+ my_schedv2 = Schedv2(self.exp)
+ self.assertEquals(len(my_schedv2.get_cached_run_list()), 30)
+ # The non-cache-hit brs are put into Schedv2._label_brl_map.
+ self.assertEquals(
+ reduce(lambda a, x: a + len(x[1]),
+ my_schedv2.get_label_map().iteritems(),
+ 0), 30)
+
+ def test_nocachehit(self):
+ """Test no cache-hit."""
+
+ def MockReadCache(br):
+ br.cache_hit = False
+
+ with mock.patch('benchmark_run.MockBenchmarkRun.ReadCache',
+ new=MockReadCache):
+ # We have 2 * 30 brs, none of which are put into _cached_br_list.
+ self.exp = self._make_fake_experiment(EXPERIMENT_FILE_WITH_FORMAT.format(
+ kraken_iterations=30))
+ my_schedv2 = Schedv2(self.exp)
+ self.assertEquals(len(my_schedv2.get_cached_run_list()), 0)
+ # The non-cache-hit brs are put into Schedv2._label_brl_map.
+ self.assertEquals(
+ reduce(lambda a, x: a + len(x[1]),
+ my_schedv2.get_label_map().iteritems(),
+ 0), 60)
+
+
+if __name__ == '__main__':
+ test_flag.SetTestMode(True)
+ unittest.main()
diff --git a/crosperf/settings.py b/crosperf/settings.py
new file mode 100644
index 00000000..8d5a25fd
--- /dev/null
+++ b/crosperf/settings.py
@@ -0,0 +1,81 @@
+# Copyright 2011 Google Inc. All Rights Reserved.
+"""Module to get the settings from experiment file."""
+
+from __future__ import print_function
+
+from cros_utils import logger
+from cros_utils import misc
+from download_images import ImageDownloader
+
+
+class Settings(object):
+ """Class representing settings (a set of fields) from an experiment file."""
+
+ def __init__(self, name, settings_type):
+ self.name = name
+ self.settings_type = settings_type
+ self.fields = {}
+ self.parent = None
+
+ def SetParentSettings(self, settings):
+ """Set the parent settings which these settings can inherit from."""
+ self.parent = settings
+
+ def AddField(self, field):
+ name = field.name
+ if name in self.fields:
+ raise SyntaxError('Field %s defined previously.' % name)
+ self.fields[name] = field
+
+ def SetField(self, name, value, append=False):
+ if name not in self.fields:
+ raise SyntaxError("'%s' is not a valid field in '%s' settings" %
+ (name, self.settings_type))
+ if append:
+ self.fields[name].Append(value)
+ else:
+ self.fields[name].Set(value)
+
+ def GetField(self, name):
+ """Get the value of a field with a given name."""
+ if name not in self.fields:
+ raise SyntaxError("Field '%s' not a valid field in '%s' settings." %
+ (name, self.name))
+ field = self.fields[name]
+ if not field.assigned and field.required:
+ raise SyntaxError("Required field '%s' not defined in '%s' settings." %
+ (name, self.name))
+ return self.fields[name].Get()
+
+ def Inherit(self):
+ """Inherit any unset values from the parent settings."""
+ for name in self.fields:
+ if (not self.fields[name].assigned and self.parent and
+ name in self.parent.fields and self.parent.fields[name].assigned):
+ self.fields[name].Set(self.parent.GetField(name), parse=False)
+
+ def Override(self, settings):
+ """Override settings with settings from a different object."""
+ for name in settings.fields:
+ if name in self.fields and settings.fields[name].assigned:
+ self.fields[name].Set(settings.GetField(name), parse=False)
+
+ def Validate(self):
+ """Check that all required fields have been set."""
+ for name in self.fields:
+ if not self.fields[name].assigned and self.fields[name].required:
+ raise SyntaxError('Field %s is invalid.' % name)
+
+ def GetXbuddyPath(self, path_str, autotest_path, board, chromeos_root,
+ log_level):
+ prefix = 'remote'
+ l = logger.GetLogger()
+ if (path_str.find('trybot') < 0 and path_str.find('toolchain') < 0 and
+ path_str.find(board) < 0):
+ xbuddy_path = '%s/%s/%s' % (prefix, board, path_str)
+ else:
+ xbuddy_path = '%s/%s' % (prefix, path_str)
+ image_downloader = ImageDownloader(l, log_level)
+ image_and_autotest_path = image_downloader.Run(
+ misc.CanonicalizePath(chromeos_root), xbuddy_path, autotest_path)
+ return image_and_autotest_path
diff --git a/crosperf/settings_factory.py b/crosperf/settings_factory.py
new file mode 100644
index 00000000..e42d82a9
--- /dev/null
+++ b/crosperf/settings_factory.py
@@ -0,0 +1,304 @@
+# Copyright (c) 2013 The Chromium OS Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+"""Setting files for global, benchmark and labels."""
+
+from __future__ import print_function
+
+from field import BooleanField
+from field import IntegerField
+from field import ListField
+from field import TextField
+from settings import Settings
+
+
+class BenchmarkSettings(Settings):
+ """Settings used to configure individual benchmarks."""
+
+ def __init__(self, name):
+ super(BenchmarkSettings, self).__init__(name, 'benchmark')
+ self.AddField(
+ TextField(
+ 'test_name',
+ description='The name of the test to run. '
+ 'Defaults to the name of the benchmark.'))
+ self.AddField(
+ TextField(
+ 'test_args', description='Arguments to be passed to the '
+ 'test.'))
+ self.AddField(
+ IntegerField(
+ 'iterations',
+ default=1,
+ description='Number of iterations to run the '
+ 'test.'))
+ self.AddField(
+ TextField(
+ 'suite', default='', description='The type of the benchmark.'))
+ self.AddField(
+ IntegerField(
+ 'retries',
+ default=0,
+ description='Number of times to retry a '
+ 'benchmark run.'))
+ self.AddField(
+ BooleanField(
+ 'run_local',
+ description='Run benchmark harness on the DUT. '
+ 'Currently only compatible with the suite: '
+ 'telemetry_Crosperf.',
+ required=False,
+ default=True))
+
+
+class LabelSettings(Settings):
+ """Settings for each label."""
+
+ def __init__(self, name):
+ super(LabelSettings, self).__init__(name, 'label')
+ self.AddField(
+ TextField(
+ 'chromeos_image',
+ required=False,
+ description='The path to the image to run tests '
+ 'on, for local/custom-built images. See the '
+ "'build' option for official or trybot images."))
+ self.AddField(
+ TextField(
+ 'autotest_path',
+ required=False,
+ description='Autotest directory path relative to chroot which '
+ 'has autotest files for the image to run tests requiring autotest files'
+ ))
+ self.AddField(
+ TextField(
+ 'chromeos_root',
+ description='The path to a chromeos checkout which '
+ 'contains a src/scripts directory. Defaults to '
+ 'the chromeos checkout which contains the '
+ 'chromeos_image.'))
+ self.AddField(
+ ListField(
+ 'remote',
+ description='A comma-separated list of IPs of chromeos'
+ 'devices to run experiments on.'))
+ self.AddField(
+ TextField(
+ 'image_args',
+ required=False,
+ default='',
+ description='Extra arguments to pass to '
+ 'image_chromeos.py.'))
+ self.AddField(
+ TextField(
+ 'cache_dir',
+ default='',
+ description='The cache dir for this image.'))
+ self.AddField(
+ TextField(
+ 'compiler',
+ default='gcc',
+ description='The compiler used to build the '
+ 'ChromeOS image (gcc or llvm).'))
+ self.AddField(
+ TextField(
+ 'chrome_src',
+ description='The path to the source of chrome. '
+ 'This is used to run telemetry benchmarks. '
+ 'The default one is the src inside chroot.',
+ required=False,
+ default=''))
+ self.AddField(
+ TextField(
+ 'build',
+ description='The xbuddy specification for an '
+ 'official or trybot image to use for tests. '
+ "'/remote' is assumed, and the board is given "
+ "elsewhere, so omit the '/remote/<board>/' xbuddy "
+ 'prefix.',
+ required=False,
+ default=''))
+
+
+class GlobalSettings(Settings):
+ """Settings that apply per-experiment."""
+
+ def __init__(self, name):
+ super(GlobalSettings, self).__init__(name, 'global')
+ self.AddField(
+ TextField(
+ 'name',
+ description='The name of the experiment. Just an '
+ 'identifier.'))
+ self.AddField(
+ TextField(
+ 'board',
+ description='The target board for running '
+ 'experiments on, e.g. x86-alex.'))
+ self.AddField(
+ ListField(
+ 'remote',
+ description='A comma-separated list of IPs of '
+ 'chromeos devices to run experiments on.'))
+ self.AddField(
+ BooleanField(
+ 'rerun_if_failed',
+ description='Whether to re-run failed test runs '
+ 'or not.',
+ default=False))
+ self.AddField(
+ BooleanField(
+ 'rm_chroot_tmp',
+ default=False,
+ description='Whether to remove the test_that '
+ 'result in the chroot.'))
+ self.AddField(
+ ListField(
+ 'email',
+ description='Space-separated list of email '
+ 'addresses to send email to.'))
+ self.AddField(
+ BooleanField(
+ 'rerun',
+ description='Whether to ignore the cache and '
+ 'for tests to be re-run.',
+ default=False))
+ self.AddField(
+ BooleanField(
+ 'same_specs',
+ default=True,
+ description='Ensure cached runs are run on the '
+ 'same kind of devices which are specified as a '
+ 'remote.'))
+ self.AddField(
+ BooleanField(
+ 'same_machine',
+ default=False,
+ description='Ensure cached runs are run on the '
+ 'same remote.'))
+ self.AddField(
+ BooleanField(
+ 'use_file_locks',
+ default=False,
+ description='Whether to use the file locks '
+ 'mechanism (deprecated) instead of the AFE '
+ 'server lock mechanism.'))
+ self.AddField(
+ IntegerField(
+ 'iterations',
+ default=1,
+ description='Number of iterations to run all '
+ 'tests.'))
+ self.AddField(
+ TextField(
+ 'chromeos_root',
+ description='The path to a chromeos checkout which '
+ 'contains a src/scripts directory. Defaults to '
+ 'the chromeos checkout which contains the '
+ 'chromeos_image.'))
+ self.AddField(
+ TextField(
+ 'logging_level',
+ default='average',
+ description='The level of logging desired. '
+ "Options are 'quiet', 'average', and 'verbose'."))
+ self.AddField(
+ IntegerField(
+ 'acquire_timeout',
+ default=0,
+ description='Number of seconds to wait for '
+ 'machine before exit if all the machines in '
+ 'the experiment file are busy. Default is 0.'))
+ self.AddField(
+ TextField(
+ 'perf_args',
+ default='',
+ description='The optional profile command. It '
+ 'enables perf commands to record perforamance '
+ 'related counters. It must start with perf '
+ 'command record or stat followed by arguments.'))
+ self.AddField(
+ TextField(
+ 'cache_dir',
+ default='',
+ description='The abs path of cache dir. '
+ 'Default is /home/$(whoami)/cros_scratch.'))
+ self.AddField(
+ BooleanField(
+ 'cache_only',
+ default=False,
+ description='Whether to use only cached '
+ 'results (do not rerun failed tests).'))
+ self.AddField(
+ BooleanField(
+ 'no_email',
+ default=False,
+ description='Whether to disable the email to '
+ 'user after crosperf finishes.'))
+ self.AddField(
+ BooleanField(
+ 'json_report',
+ default=False,
+ description='Whether to generate a json version '
+ 'of the report, for archiving.'))
+ self.AddField(
+ BooleanField(
+ 'show_all_results',
+ default=False,
+ description='When running Telemetry tests, '
+ 'whether to all the results, instead of just '
+ 'the default (summary) results.'))
+ self.AddField(
+ TextField(
+ 'share_cache',
+ default='',
+ description='Path to alternate cache whose data '
+ 'you want to use. It accepts multiple directories '
+ 'separated by a ",".'))
+ self.AddField(
+ TextField(
+ 'results_dir', default='', description='The results dir.'))
+ self.AddField(
+ TextField(
+ 'locks_dir',
+ default='',
+ description='An alternate directory to use for '
+ 'storing/checking machine locks. Using this field '
+ 'automatically sets use_file_locks to True.\n'
+ 'WARNING: If you use your own locks directory, '
+ 'there is no guarantee that someone else might not '
+ 'hold a lock on the same machine in a different '
+ 'locks directory.'))
+ self.AddField(
+ TextField(
+ 'chrome_src',
+ description='The path to the source of chrome. '
+ 'This is used to run telemetry benchmarks. '
+ 'The default one is the src inside chroot.',
+ required=False,
+ default=''))
+ self.AddField(
+ IntegerField(
+ 'retries',
+ default=0,
+ description='Number of times to retry a '
+ 'benchmark run.'))
+
+
+class SettingsFactory(object):
+ """Factory class for building different types of Settings objects.
+
+ This factory is currently hardcoded to produce settings for ChromeOS
+ experiment files. The idea is that in the future, other types
+ of settings could be produced.
+ """
+
+ def GetSettings(self, name, settings_type):
+ if settings_type == 'label' or not settings_type:
+ return LabelSettings(name)
+ if settings_type == 'global':
+ return GlobalSettings(name)
+ if settings_type == 'benchmark':
+ return BenchmarkSettings(name)
+
+ raise TypeError("Invalid settings type: '%s'." % settings_type)
diff --git a/crosperf/settings_factory_unittest.py b/crosperf/settings_factory_unittest.py
new file mode 100755
index 00000000..127bfd3c
--- /dev/null
+++ b/crosperf/settings_factory_unittest.py
@@ -0,0 +1,97 @@
+#!/usr/bin/env python2
+#
+# Copyright 2014 Google Inc. All Rights Reserved.
+"""Unittest for crosperf."""
+
+from __future__ import print_function
+
+import unittest
+
+import settings_factory
+
+
+class BenchmarkSettingsTest(unittest.TestCase):
+ """Class to test benchmark settings."""
+
+ def test_init(self):
+ res = settings_factory.BenchmarkSettings('b_settings')
+ self.assertIsNotNone(res)
+ self.assertEqual(len(res.fields), 6)
+ self.assertEqual(res.GetField('test_name'), '')
+ self.assertEqual(res.GetField('test_args'), '')
+ self.assertEqual(res.GetField('iterations'), 1)
+ self.assertEqual(res.GetField('suite'), '')
+
+
+class LabelSettingsTest(unittest.TestCase):
+ """Class to test label settings."""
+
+ def test_init(self):
+ res = settings_factory.LabelSettings('l_settings')
+ self.assertIsNotNone(res)
+ self.assertEqual(len(res.fields), 9)
+ self.assertEqual(res.GetField('chromeos_image'), '')
+ self.assertEqual(res.GetField('autotest_path'), '')
+ self.assertEqual(res.GetField('chromeos_root'), '')
+ self.assertEqual(res.GetField('remote'), None)
+ self.assertEqual(res.GetField('image_args'), '')
+ self.assertEqual(res.GetField('cache_dir'), '')
+ self.assertEqual(res.GetField('chrome_src'), '')
+ self.assertEqual(res.GetField('build'), '')
+
+
+class GlobalSettingsTest(unittest.TestCase):
+ """Class to test global settings."""
+
+ def test_init(self):
+ res = settings_factory.GlobalSettings('g_settings')
+ self.assertIsNotNone(res)
+ self.assertEqual(len(res.fields), 25)
+ self.assertEqual(res.GetField('name'), '')
+ self.assertEqual(res.GetField('board'), '')
+ self.assertEqual(res.GetField('remote'), None)
+ self.assertEqual(res.GetField('rerun_if_failed'), False)
+ self.assertEqual(res.GetField('rm_chroot_tmp'), False)
+ self.assertEqual(res.GetField('email'), None)
+ self.assertEqual(res.GetField('rerun'), False)
+ self.assertEqual(res.GetField('same_specs'), True)
+ self.assertEqual(res.GetField('same_machine'), False)
+ self.assertEqual(res.GetField('iterations'), 1)
+ self.assertEqual(res.GetField('chromeos_root'), '')
+ self.assertEqual(res.GetField('logging_level'), 'average')
+ self.assertEqual(res.GetField('acquire_timeout'), 0)
+ self.assertEqual(res.GetField('perf_args'), '')
+ self.assertEqual(res.GetField('cache_dir'), '')
+ self.assertEqual(res.GetField('cache_only'), False)
+ self.assertEqual(res.GetField('no_email'), False)
+ self.assertEqual(res.GetField('show_all_results'), False)
+ self.assertEqual(res.GetField('share_cache'), '')
+ self.assertEqual(res.GetField('results_dir'), '')
+ self.assertEqual(res.GetField('chrome_src'), '')
+
+
+class SettingsFactoryTest(unittest.TestCase):
+ """Class to test SettingsFactory."""
+
+ def test_get_settings(self):
+ self.assertRaises(Exception, settings_factory.SettingsFactory.GetSettings,
+ 'global', 'bad_type')
+
+ l_settings = settings_factory.SettingsFactory().GetSettings('label',
+ 'label')
+ self.assertIsInstance(l_settings, settings_factory.LabelSettings)
+ self.assertEqual(len(l_settings.fields), 9)
+
+ b_settings = settings_factory.SettingsFactory().GetSettings('benchmark',
+ 'benchmark')
+ self.assertIsInstance(b_settings, settings_factory.BenchmarkSettings)
+ self.assertEqual(len(b_settings.fields), 6)
+
+ g_settings = settings_factory.SettingsFactory().GetSettings('global',
+ 'global')
+ self.assertIsInstance(g_settings, settings_factory.GlobalSettings)
+ self.assertEqual(len(g_settings.fields), 25)
+
+
+if __name__ == '__main__':
+ unittest.main()
diff --git a/crosperf/settings_unittest.py b/crosperf/settings_unittest.py
new file mode 100755
index 00000000..f1062f0d
--- /dev/null
+++ b/crosperf/settings_unittest.py
@@ -0,0 +1,229 @@
+#!/usr/bin/env python2
+#
+# Copyright 2014 Google Inc. All Rights Reserved.
+"""unittest for settings."""
+
+from __future__ import print_function
+
+import mock
+import unittest
+
+import settings
+import settings_factory
+
+from field import IntegerField
+from field import ListField
+import download_images
+
+from cros_utils import logger
+
+
+class TestSettings(unittest.TestCase):
+ """setting test class."""
+
+ def setUp(self):
+ self.settings = settings.Settings('global_name', 'global')
+
+ def test_init(self):
+ self.assertEqual(self.settings.name, 'global_name')
+ self.assertEqual(self.settings.settings_type, 'global')
+ self.assertIsNone(self.settings.parent)
+
+ def test_set_parent_settings(self):
+ self.assertIsNone(self.settings.parent)
+ settings_parent = {'fake_parent_entry': 0}
+ self.settings.SetParentSettings(settings_parent)
+ self.assertIsNotNone(self.settings.parent)
+ self.assertEqual(type(self.settings.parent), dict)
+ self.assertEqual(self.settings.parent, settings_parent)
+
+ def test_add_field(self):
+ self.assertEqual(self.settings.fields, {})
+ self.settings.AddField(
+ IntegerField(
+ 'iterations',
+ default=1,
+ required=False,
+ description='Number of iterations to '
+ 'run the test.'))
+ self.assertEqual(len(self.settings.fields), 1)
+ # Adding the same field twice raises an exception.
+ self.assertRaises(
+ Exception,
+ self.settings.AddField, (IntegerField(
+ 'iterations',
+ default=1,
+ required=False,
+ description='Number of iterations to run '
+ 'the test.')))
+ res = self.settings.fields['iterations']
+ self.assertIsInstance(res, IntegerField)
+ self.assertEqual(res.Get(), 1)
+
+ def test_set_field(self):
+ self.assertEqual(self.settings.fields, {})
+ self.settings.AddField(
+ IntegerField(
+ 'iterations',
+ default=1,
+ required=False,
+ description='Number of iterations to run the '
+ 'test.'))
+ res = self.settings.fields['iterations']
+ self.assertEqual(res.Get(), 1)
+
+ self.settings.SetField('iterations', 10)
+ res = self.settings.fields['iterations']
+ self.assertEqual(res.Get(), 10)
+
+ # Setting a field that's not there raises an exception.
+ self.assertRaises(Exception, self.settings.SetField, 'remote',
+ 'lumpy1.cros')
+
+ self.settings.AddField(
+ ListField(
+ 'remote',
+ default=[],
+ description="A comma-separated list of ip's of "
+ 'chromeos devices to run '
+ 'experiments on.'))
+ self.assertEqual(type(self.settings.fields), dict)
+ self.assertEqual(len(self.settings.fields), 2)
+ res = self.settings.fields['remote']
+ self.assertEqual(res.Get(), [])
+ self.settings.SetField('remote', 'lumpy1.cros', append=True)
+ self.settings.SetField('remote', 'lumpy2.cros', append=True)
+ res = self.settings.fields['remote']
+ self.assertEqual(res.Get(), ['lumpy1.cros', 'lumpy2.cros'])
+
+ def test_get_field(self):
+ # Getting a field that's not there raises an exception.
+ self.assertRaises(Exception, self.settings.GetField, 'iterations')
+
+ # Getting a required field that hasn't been assigned raises an exception.
+ self.settings.AddField(
+ IntegerField(
+ 'iterations',
+ required=True,
+ description='Number of iterations to '
+ 'run the test.'))
+ self.assertIsNotNone(self.settings.fields['iterations'])
+ self.assertRaises(Exception, self.settings.GetField, 'iterations')
+
+ # Set the value, then get it.
+ self.settings.SetField('iterations', 5)
+ res = self.settings.GetField('iterations')
+ self.assertEqual(res, 5)
+
+ def test_inherit(self):
+ parent_settings = settings_factory.SettingsFactory().GetSettings('global',
+ 'global')
+ label_settings = settings_factory.SettingsFactory().GetSettings('label',
+ 'label')
+ self.assertEqual(parent_settings.GetField('chromeos_root'), '')
+ self.assertEqual(label_settings.GetField('chromeos_root'), '')
+ self.assertIsNone(label_settings.parent)
+
+ parent_settings.SetField('chromeos_root', '/tmp/chromeos')
+ label_settings.SetParentSettings(parent_settings)
+ self.assertEqual(parent_settings.GetField('chromeos_root'), '/tmp/chromeos')
+ self.assertEqual(label_settings.GetField('chromeos_root'), '')
+ label_settings.Inherit()
+ self.assertEqual(label_settings.GetField('chromeos_root'), '/tmp/chromeos')
+
+ def test_override(self):
+ self.settings.AddField(
+ ListField(
+ 'email',
+ default=[],
+ description='Space-seperated'
+ 'list of email addresses to send '
+ 'email to.'))
+
+ global_settings = settings_factory.SettingsFactory().GetSettings('global',
+ 'global')
+
+ global_settings.SetField('email', 'john.doe@google.com', append=True)
+ global_settings.SetField('email', 'jane.smith@google.com', append=True)
+
+ res = self.settings.GetField('email')
+ self.assertEqual(res, [])
+
+ self.settings.Override(global_settings)
+ res = self.settings.GetField('email')
+ self.assertEqual(res, ['john.doe@google.com', 'jane.smith@google.com'])
+
+ def test_validate(self):
+
+ self.settings.AddField(
+ IntegerField(
+ 'iterations',
+ required=True,
+ description='Number of iterations '
+ 'to run the test.'))
+ self.settings.AddField(
+ ListField(
+ 'remote',
+ default=[],
+ required=True,
+ description='A comma-separated list '
+ "of ip's of chromeos "
+ 'devices to run experiments on.'))
+ self.settings.AddField(
+ ListField(
+ 'email',
+ default=[],
+ description='Space-seperated'
+ 'list of email addresses to '
+ 'send email to.'))
+
+ # 'required' fields have not been assigned; should raise an exception.
+ self.assertRaises(Exception, self.settings.Validate)
+ self.settings.SetField('iterations', 2)
+ self.settings.SetField('remote', 'x86-alex.cros', append=True)
+ # Should run without exception now.
+ self.settings.Validate()
+
+ @mock.patch.object(logger, 'GetLogger')
+ @mock.patch.object(download_images.ImageDownloader, 'Run')
+ @mock.patch.object(download_images, 'ImageDownloader')
+ def test_get_xbuddy_path(self, mock_downloader, mock_run, mock_logger):
+
+ mock_run.return_value = 'fake_xbuddy_translation'
+ mock_downloader.Run = mock_run
+ board = 'lumpy'
+ chromeos_root = '/tmp/chromeos'
+ log_level = 'average'
+
+ trybot_str = 'trybot-lumpy-paladin/R34-5417.0.0-b1506'
+ official_str = 'lumpy-release/R34-5417.0.0'
+ xbuddy_str = 'latest-dev'
+ autotest_path = ''
+
+ self.settings.GetXbuddyPath(trybot_str, autotest_path, board, chromeos_root,
+ log_level)
+ self.assertEqual(mock_run.call_count, 1)
+ self.assertEqual(mock_run.call_args_list[0][0],
+ ('/tmp/chromeos',
+ 'remote/trybot-lumpy-paladin/R34-5417.0.0-b1506', ''))
+
+ mock_run.reset_mock()
+ self.settings.GetXbuddyPath(official_str, autotest_path, board,
+ chromeos_root, log_level)
+ self.assertEqual(mock_run.call_count, 1)
+ self.assertEqual(mock_run.call_args_list[0][0],
+ ('/tmp/chromeos', 'remote/lumpy-release/R34-5417.0.0', ''))
+
+ mock_run.reset_mock()
+ self.settings.GetXbuddyPath(xbuddy_str, autotest_path, board, chromeos_root,
+ log_level)
+ self.assertEqual(mock_run.call_count, 1)
+ self.assertEqual(mock_run.call_args_list[0][0],
+ ('/tmp/chromeos', 'remote/lumpy/latest-dev', ''))
+
+ if mock_logger:
+ return
+
+
+if __name__ == '__main__':
+ unittest.main()
diff --git a/crosperf/suite_runner.py b/crosperf/suite_runner.py
new file mode 100644
index 00000000..678113a7
--- /dev/null
+++ b/crosperf/suite_runner.py
@@ -0,0 +1,297 @@
+# Copyright (c) 2013~2015 The Chromium OS Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+"""SuiteRunner defines the interface from crosperf to test script."""
+
+from __future__ import print_function
+
+import os
+import time
+import shlex
+
+from cros_utils import command_executer
+import test_flag
+
+TEST_THAT_PATH = '/usr/bin/test_that'
+AUTOTEST_DIR = '~/trunk/src/third_party/autotest/files'
+CHROME_MOUNT_DIR = '/tmp/chrome_root'
+
+
+def GetProfilerArgs(profiler_args):
+ # Remove "--" from in front of profiler args.
+ args_list = shlex.split(profiler_args)
+ new_list = []
+ for arg in args_list:
+ if arg[0:2] == '--':
+ arg = arg[2:]
+ new_list.append(arg)
+ args_list = new_list
+
+ # Remove "perf_options=" from middle of profiler args.
+ new_list = []
+ for arg in args_list:
+ idx = arg.find('perf_options=')
+ if idx != -1:
+ prefix = arg[0:idx]
+ suffix = arg[idx + len('perf_options=') + 1:-1]
+ new_arg = prefix + "'" + suffix + "'"
+ new_list.append(new_arg)
+ else:
+ new_list.append(arg)
+ args_list = new_list
+
+ return ' '.join(args_list)
+
+
+class SuiteRunner(object):
+ """This defines the interface from crosperf to test script."""
+
+ def __init__(self,
+ logger_to_use=None,
+ log_level='verbose',
+ cmd_exec=None,
+ cmd_term=None):
+ self.logger = logger_to_use
+ self.log_level = log_level
+ self._ce = cmd_exec or command_executer.GetCommandExecuter(
+ self.logger, log_level=self.log_level)
+ self._ct = cmd_term or command_executer.CommandTerminator()
+
+ def Run(self, machine, label, benchmark, test_args, profiler_args):
+ for i in range(0, benchmark.retries + 1):
+ self.PinGovernorExecutionFrequencies(machine, label.chromeos_root)
+ if benchmark.suite == 'telemetry':
+ self.DecreaseWaitTime(machine, label.chromeos_root)
+ ret_tup = self.Telemetry_Run(machine, label, benchmark, profiler_args)
+ elif benchmark.suite == 'telemetry_Crosperf':
+ self.DecreaseWaitTime(machine, label.chromeos_root)
+ ret_tup = self.Telemetry_Crosperf_Run(machine, label, benchmark,
+ test_args, profiler_args)
+ else:
+ ret_tup = self.Test_That_Run(machine, label, benchmark, test_args,
+ profiler_args)
+ if ret_tup[0] != 0:
+ self.logger.LogOutput('benchmark %s failed. Retries left: %s' %
+ (benchmark.name, benchmark.retries - i))
+ elif i > 0:
+ self.logger.LogOutput('benchmark %s succeded after %s retries' %
+ (benchmark.name, i))
+ break
+ else:
+ self.logger.LogOutput('benchmark %s succeded on first try' %
+ benchmark.name)
+ break
+ return ret_tup
+
+ def PinGovernorExecutionFrequencies(self, machine_name, chromeos_root):
+ """Set min and max frequencies to max static frequency."""
+ # pyformat: disable
+ set_cpu_freq = (
+ 'set -e && '
+ 'for f in /sys/devices/system/cpu/cpu*/cpufreq; do '
+ 'cd $f; '
+ 'val=0; '
+ 'if [[ -e scaling_available_frequencies ]]; then '
+ # pylint: disable=line-too-long
+ ' val=`cat scaling_available_frequencies | tr " " "\\n" | sort -n -b -r`; '
+ 'else '
+ ' val=`cat scaling_max_freq | tr " " "\\n" | sort -n -b -r`; fi ; '
+ 'set -- $val; '
+ 'highest=$1; '
+ 'if [[ $# -gt 1 ]]; then '
+ ' case $highest in *1000) highest=$2;; esac; '
+ 'fi ;'
+ 'echo $highest > scaling_max_freq; '
+ 'echo $highest > scaling_min_freq; '
+ 'echo performance > scaling_governor; '
+ 'done'
+ )
+ # pyformat: enable
+ if self.log_level == 'average':
+ self.logger.LogOutput('Pinning governor execution frequencies for %s' %
+ machine_name)
+ ret = self._ce.CrosRunCommand(
+ set_cpu_freq, machine=machine_name, chromeos_root=chromeos_root)
+ self.logger.LogFatalIf(ret, 'Could not pin frequencies on machine: %s' %
+ machine_name)
+
+ def DecreaseWaitTime(self, machine_name, chromeos_root):
+ """Change the ten seconds wait time for pagecycler to two seconds."""
+ FILE = '/usr/local/telemetry/src/tools/perf/page_sets/page_cycler_story.py'
+ ret = self._ce.CrosRunCommand(
+ 'ls ' + FILE, machine=machine_name, chromeos_root=chromeos_root)
+ self.logger.LogFatalIf(ret, 'Could not find {} on machine: {}'.format(
+ FILE, machine_name))
+
+ if not ret:
+ sed_command = 'sed -i "s/_TTI_WAIT_TIME = 10/_TTI_WAIT_TIME = 2/g" '
+ ret = self._ce.CrosRunCommand(
+ sed_command + FILE, machine=machine_name, chromeos_root=chromeos_root)
+ self.logger.LogFatalIf(ret, 'Could not modify {} on machine: {}'.format(
+ FILE, machine_name))
+
+ def RebootMachine(self, machine_name, chromeos_root):
+ command = 'reboot && exit'
+ self._ce.CrosRunCommand(
+ command, machine=machine_name, chromeos_root=chromeos_root)
+ time.sleep(60)
+ # Whenever we reboot the machine, we need to restore the governor settings.
+ self.PinGovernorExecutionFrequencies(machine_name, chromeos_root)
+
+ def Test_That_Run(self, machine, label, benchmark, test_args, profiler_args):
+ """Run the test_that test.."""
+ options = ''
+ if label.board:
+ options += ' --board=%s' % label.board
+ if test_args:
+ options += ' %s' % test_args
+ if profiler_args:
+ self.logger.LogFatal('test_that does not support profiler.')
+ command = 'rm -rf /usr/local/autotest/results/*'
+ self._ce.CrosRunCommand(
+ command, machine=machine, chromeos_root=label.chromeos_root)
+
+ # We do this because some tests leave the machine in weird states.
+ # Rebooting between iterations has proven to help with this.
+ self.RebootMachine(machine, label.chromeos_root)
+
+ autotest_dir = AUTOTEST_DIR
+ if label.autotest_path != '':
+ autotest_dir = label.autotest_path
+
+ autotest_dir_arg = '--autotest_dir %s' % autotest_dir
+ # For non-telemetry tests, specify an autotest directory only if the
+ # specified directory is different from default (crosbug.com/679001).
+ if autotest_dir == AUTOTEST_DIR:
+ autotest_dir_arg = ''
+
+ command = (('%s %s --fast '
+ '%s %s %s') % (TEST_THAT_PATH, autotest_dir_arg, options,
+ machine, benchmark.test_name))
+ if self.log_level != 'verbose':
+ self.logger.LogOutput('Running test.')
+ self.logger.LogOutput('CMD: %s' % command)
+ # Use --no-ns-pid so that cros_sdk does not create a different
+ # process namespace and we can kill process created easily by
+ # their process group.
+ return self._ce.ChrootRunCommandWOutput(
+ label.chromeos_root,
+ command,
+ command_terminator=self._ct,
+ cros_sdk_options='--no-ns-pid')
+
+ def RemoveTelemetryTempFile(self, machine, chromeos_root):
+ filename = 'telemetry@%s' % machine
+ fullname = os.path.join(chromeos_root, 'chroot', 'tmp', filename)
+ if os.path.exists(fullname):
+ os.remove(fullname)
+
+ def Telemetry_Crosperf_Run(self, machine, label, benchmark, test_args,
+ profiler_args):
+ if not os.path.isdir(label.chrome_src):
+ self.logger.LogFatal('Cannot find chrome src dir to'
+ ' run telemetry: %s' % label.chrome_src)
+
+ # Check for and remove temporary file that may have been left by
+ # previous telemetry runs (and which might prevent this run from
+ # working).
+ self.RemoveTelemetryTempFile(machine, label.chromeos_root)
+
+ # For telemetry runs, we can use the autotest copy from the source
+ # location. No need to have one under /build/<board>.
+ autotest_dir_arg = '--autotest_dir %s' % AUTOTEST_DIR
+ if label.autotest_path != '':
+ autotest_dir_arg = '--autotest_dir %s' % label.autotest_path
+
+ profiler_args = GetProfilerArgs(profiler_args)
+ fast_arg = ''
+ if not profiler_args:
+ # --fast works unless we are doing profiling (autotest limitation).
+ # --fast avoids unnecessary copies of syslogs.
+ fast_arg = '--fast'
+ args_string = ''
+ if test_args:
+ # Strip double quotes off args (so we can wrap them in single
+ # quotes, to pass through to Telemetry).
+ if test_args[0] == '"' and test_args[-1] == '"':
+ test_args = test_args[1:-1]
+ args_string = "test_args='%s'" % test_args
+
+ cmd = ('{} {} {} --board={} --args="{} run_local={} test={} '
+ '{}" {} telemetry_Crosperf'.format(TEST_THAT_PATH, autotest_dir_arg,
+ fast_arg, label.board,
+ args_string, benchmark.run_local,
+ benchmark.test_name,
+ profiler_args, machine))
+
+ # Use --no-ns-pid so that cros_sdk does not create a different
+ # process namespace and we can kill process created easily by their
+ # process group.
+ chrome_root_options = ('--no-ns-pid '
+ '--chrome_root={} --chrome_root_mount={} '
+ "FEATURES=\"-usersandbox\" "
+ 'CHROME_ROOT={}'.format(label.chrome_src,
+ CHROME_MOUNT_DIR,
+ CHROME_MOUNT_DIR))
+ if self.log_level != 'verbose':
+ self.logger.LogOutput('Running test.')
+ self.logger.LogOutput('CMD: %s' % cmd)
+ return self._ce.ChrootRunCommandWOutput(
+ label.chromeos_root,
+ cmd,
+ command_terminator=self._ct,
+ cros_sdk_options=chrome_root_options)
+
+ def Telemetry_Run(self, machine, label, benchmark, profiler_args):
+ telemetry_run_path = ''
+ if not os.path.isdir(label.chrome_src):
+ self.logger.LogFatal('Cannot find chrome src dir to' ' run telemetry.')
+ else:
+ telemetry_run_path = os.path.join(label.chrome_src, 'src/tools/perf')
+ if not os.path.exists(telemetry_run_path):
+ self.logger.LogFatal('Cannot find %s directory.' % telemetry_run_path)
+
+ if profiler_args:
+ self.logger.LogFatal('Telemetry does not support the perf profiler.')
+
+ # Check for and remove temporary file that may have been left by
+ # previous telemetry runs (and which might prevent this run from
+ # working).
+ if not test_flag.GetTestMode():
+ self.RemoveTelemetryTempFile(machine, label.chromeos_root)
+
+ rsa_key = os.path.join(
+ label.chromeos_root,
+ 'src/scripts/mod_for_test_scripts/ssh_keys/testing_rsa')
+
+ cmd = ('cd {0} && '
+ './run_measurement '
+ '--browser=cros-chrome '
+ '--output-format=csv '
+ '--remote={1} '
+ '--identity {2} '
+ '{3} {4}'.format(telemetry_run_path, machine, rsa_key,
+ benchmark.test_name, benchmark.test_args))
+ if self.log_level != 'verbose':
+ self.logger.LogOutput('Running test.')
+ self.logger.LogOutput('CMD: %s' % cmd)
+ return self._ce.RunCommandWOutput(cmd, print_to_console=False)
+
+ def CommandTerminator(self):
+ return self._ct
+
+ def Terminate(self):
+ self._ct.Terminate()
+
+
+class MockSuiteRunner(object):
+ """Mock suite runner for test."""
+
+ def __init__(self):
+ self._true = True
+
+ def Run(self, *_args):
+ if self._true:
+ return [0, '', '']
+ else:
+ return [0, '', '']
diff --git a/crosperf/suite_runner_unittest.py b/crosperf/suite_runner_unittest.py
new file mode 100755
index 00000000..fd8de661
--- /dev/null
+++ b/crosperf/suite_runner_unittest.py
@@ -0,0 +1,351 @@
+#!/usr/bin/env python2
+#
+# Copyright 2014 Google Inc. All Rights Reserved.
+"""Unittest for suite_runner."""
+
+from __future__ import print_function
+
+import os.path
+import time
+
+import mock
+import unittest
+
+import suite_runner
+import label
+import test_flag
+
+from benchmark import Benchmark
+
+from cros_utils import command_executer
+from cros_utils import logger
+
+
+class SuiteRunnerTest(unittest.TestCase):
+ """Class of SuiteRunner test."""
+ real_logger = logger.GetLogger()
+
+ mock_cmd_exec = mock.Mock(spec=command_executer.CommandExecuter)
+ mock_cmd_term = mock.Mock(spec=command_executer.CommandTerminator)
+ mock_logger = mock.Mock(spec=logger.Logger)
+ mock_label = label.MockLabel('lumpy', 'lumpy_chromeos_image', '',
+ '/tmp/chromeos', 'lumpy',
+ ['lumpy1.cros', 'lumpy.cros2'], '', '', False,
+ 'average', 'gcc', '')
+ telemetry_crosperf_bench = Benchmark(
+ 'b1_test', # name
+ 'octane', # test_name
+ '', # test_args
+ 3, # iterations
+ False, # rm_chroot_tmp
+ 'record -e cycles', # perf_args
+ 'telemetry_Crosperf', # suite
+ True) # show_all_results
+
+ test_that_bench = Benchmark(
+ 'b2_test', # name
+ 'octane', # test_name
+ '', # test_args
+ 3, # iterations
+ False, # rm_chroot_tmp
+ 'record -e cycles') # perf_args
+
+ telemetry_bench = Benchmark(
+ 'b3_test', # name
+ 'octane', # test_name
+ '', # test_args
+ 3, # iterations
+ False, # rm_chroot_tmp
+ 'record -e cycles', # perf_args
+ 'telemetry', # suite
+ False) # show_all_results
+
+ def __init__(self, *args, **kwargs):
+ super(SuiteRunnerTest, self).__init__(*args, **kwargs)
+ self.call_test_that_run = False
+ self.pin_governor_args = []
+ self.test_that_args = []
+ self.telemetry_run_args = []
+ self.telemetry_crosperf_args = []
+ self.call_telemetry_crosperf_run = False
+ self.call_pin_governor = False
+ self.call_telemetry_run = False
+
+ def setUp(self):
+ self.runner = suite_runner.SuiteRunner(self.mock_logger, 'verbose',
+ self.mock_cmd_exec,
+ self.mock_cmd_term)
+
+ def test_get_profiler_args(self):
+ input_str = ('--profiler=custom_perf --profiler_args=\'perf_options'
+ '="record -a -e cycles,instructions"\'')
+ output_str = ("profiler=custom_perf profiler_args='record -a -e "
+ "cycles,instructions'")
+ res = suite_runner.GetProfilerArgs(input_str)
+ self.assertEqual(res, output_str)
+
+ def test_run(self):
+
+ def reset():
+ self.call_pin_governor = False
+ self.call_test_that_run = False
+ self.call_telemetry_run = False
+ self.call_telemetry_crosperf_run = False
+ self.pin_governor_args = []
+ self.test_that_args = []
+ self.telemetry_run_args = []
+ self.telemetry_crosperf_args = []
+
+ def FakePinGovernor(machine, chroot):
+ self.call_pin_governor = True
+ self.pin_governor_args = [machine, chroot]
+
+ def FakeTelemetryRun(machine, test_label, benchmark, profiler_args):
+ self.telemetry_run_args = [machine, test_label, benchmark, profiler_args]
+ self.call_telemetry_run = True
+ return 'Ran FakeTelemetryRun'
+
+ def FakeTelemetryCrosperfRun(machine, test_label, benchmark, test_args,
+ profiler_args):
+ self.telemetry_crosperf_args = [
+ machine, test_label, benchmark, test_args, profiler_args
+ ]
+ self.call_telemetry_crosperf_run = True
+ return 'Ran FakeTelemetryCrosperfRun'
+
+ def FakeTestThatRun(machine, test_label, benchmark, test_args,
+ profiler_args):
+ self.test_that_args = [
+ machine, test_label, benchmark, test_args, profiler_args
+ ]
+ self.call_test_that_run = True
+ return 'Ran FakeTestThatRun'
+
+ self.runner.PinGovernorExecutionFrequencies = FakePinGovernor
+ self.runner.Telemetry_Run = FakeTelemetryRun
+ self.runner.Telemetry_Crosperf_Run = FakeTelemetryCrosperfRun
+ self.runner.Test_That_Run = FakeTestThatRun
+
+ machine = 'fake_machine'
+ test_args = ''
+ profiler_args = ''
+ reset()
+ self.runner.Run(machine, self.mock_label, self.telemetry_bench, test_args,
+ profiler_args)
+ self.assertTrue(self.call_pin_governor)
+ self.assertTrue(self.call_telemetry_run)
+ self.assertFalse(self.call_test_that_run)
+ self.assertFalse(self.call_telemetry_crosperf_run)
+ self.assertEqual(
+ self.telemetry_run_args,
+ ['fake_machine', self.mock_label, self.telemetry_bench, ''])
+
+ reset()
+ self.runner.Run(machine, self.mock_label, self.test_that_bench, test_args,
+ profiler_args)
+ self.assertTrue(self.call_pin_governor)
+ self.assertFalse(self.call_telemetry_run)
+ self.assertTrue(self.call_test_that_run)
+ self.assertFalse(self.call_telemetry_crosperf_run)
+ self.assertEqual(
+ self.test_that_args,
+ ['fake_machine', self.mock_label, self.test_that_bench, '', ''])
+
+ reset()
+ self.runner.Run(machine, self.mock_label, self.telemetry_crosperf_bench,
+ test_args, profiler_args)
+ self.assertTrue(self.call_pin_governor)
+ self.assertFalse(self.call_telemetry_run)
+ self.assertFalse(self.call_test_that_run)
+ self.assertTrue(self.call_telemetry_crosperf_run)
+ self.assertEqual(self.telemetry_crosperf_args, [
+ 'fake_machine', self.mock_label, self.telemetry_crosperf_bench, '', ''
+ ])
+
+ @mock.patch.object(command_executer.CommandExecuter, 'CrosRunCommand')
+ def test_pin_governor_execution_frequencies(self, mock_cros_runcmd):
+ self.mock_cmd_exec.CrosRunCommand = mock_cros_runcmd
+ self.runner.PinGovernorExecutionFrequencies('lumpy1.cros', '/tmp/chromeos')
+ self.assertEqual(mock_cros_runcmd.call_count, 1)
+ cmd = mock_cros_runcmd.call_args_list[0][0]
+ # pyformat: disable
+ set_cpu_cmd = (
+ 'set -e && '
+ 'for f in /sys/devices/system/cpu/cpu*/cpufreq; do '
+ 'cd $f; '
+ 'val=0; '
+ 'if [[ -e scaling_available_frequencies ]]; then '
+ # pylint: disable=line-too-long
+ ' val=`cat scaling_available_frequencies | tr " " "\\n" | sort -n -b -r`; '
+ 'else '
+ ' val=`cat scaling_max_freq | tr " " "\\n" | sort -n -b -r`; fi ; '
+ 'set -- $val; '
+ 'highest=$1; '
+ 'if [[ $# -gt 1 ]]; then '
+ ' case $highest in *1000) highest=$2;; esac; '
+ 'fi ;'
+ 'echo $highest > scaling_max_freq; '
+ 'echo $highest > scaling_min_freq; '
+ 'echo performance > scaling_governor; '
+ 'done'
+ )
+ # pyformat: enable
+ self.assertEqual(cmd, (set_cpu_cmd,))
+
+ @mock.patch.object(time, 'sleep')
+ @mock.patch.object(command_executer.CommandExecuter, 'CrosRunCommand')
+ def test_reboot_machine(self, mock_cros_runcmd, mock_sleep):
+
+ def FakePinGovernor(machine_name, chromeos_root):
+ if machine_name or chromeos_root:
+ pass
+
+ self.mock_cmd_exec.CrosRunCommand = mock_cros_runcmd
+ self.runner.PinGovernorExecutionFrequencies = FakePinGovernor
+ self.runner.RebootMachine('lumpy1.cros', '/tmp/chromeos')
+ self.assertEqual(mock_cros_runcmd.call_count, 1)
+ self.assertEqual(mock_cros_runcmd.call_args_list[0][0], ('reboot && exit',))
+ self.assertEqual(mock_sleep.call_count, 1)
+ self.assertEqual(mock_sleep.call_args_list[0][0], (60,))
+
+ @mock.patch.object(command_executer.CommandExecuter, 'CrosRunCommand')
+ @mock.patch.object(command_executer.CommandExecuter,
+ 'ChrootRunCommandWOutput')
+ def test_test_that_run(self, mock_chroot_runcmd, mock_cros_runcmd):
+
+ def FakeRebootMachine(machine, chroot):
+ if machine or chroot:
+ pass
+
+ def FakeLogMsg(fd, termfd, msg, flush=True):
+ if fd or termfd or msg or flush:
+ pass
+
+ save_log_msg = self.real_logger.LogMsg
+ self.real_logger.LogMsg = FakeLogMsg
+ self.runner.logger = self.real_logger
+ self.runner.RebootMachine = FakeRebootMachine
+
+ raised_exception = False
+ try:
+ self.runner.Test_That_Run('lumpy1.cros', self.mock_label,
+ self.test_that_bench, '', 'record -a -e cycles')
+ except SystemExit:
+ raised_exception = True
+ self.assertTrue(raised_exception)
+
+ mock_chroot_runcmd.return_value = 0
+ self.mock_cmd_exec.ChrootRunCommandWOutput = mock_chroot_runcmd
+ self.mock_cmd_exec.CrosRunCommand = mock_cros_runcmd
+ res = self.runner.Test_That_Run('lumpy1.cros', self.mock_label,
+ self.test_that_bench, '--iterations=2', '')
+ self.assertEqual(mock_cros_runcmd.call_count, 1)
+ self.assertEqual(mock_chroot_runcmd.call_count, 1)
+ self.assertEqual(res, 0)
+ self.assertEqual(mock_cros_runcmd.call_args_list[0][0],
+ ('rm -rf /usr/local/autotest/results/*',))
+ args_list = mock_chroot_runcmd.call_args_list[0][0]
+ args_dict = mock_chroot_runcmd.call_args_list[0][1]
+ self.assertEqual(len(args_list), 2)
+ self.assertEqual(args_list[0], '/tmp/chromeos')
+ self.assertEqual(args_list[1], ('/usr/bin/test_that '
+ '--fast --board=lumpy '
+ '--iterations=2 lumpy1.cros octane'))
+ self.assertEqual(args_dict['command_terminator'], self.mock_cmd_term)
+ self.real_logger.LogMsg = save_log_msg
+
+ @mock.patch.object(os.path, 'isdir')
+ @mock.patch.object(command_executer.CommandExecuter,
+ 'ChrootRunCommandWOutput')
+ def test_telemetry_crosperf_run(self, mock_chroot_runcmd, mock_isdir):
+
+ mock_isdir.return_value = True
+ mock_chroot_runcmd.return_value = 0
+ self.mock_cmd_exec.ChrootRunCommandWOutput = mock_chroot_runcmd
+ profiler_args = ('--profiler=custom_perf --profiler_args=\'perf_options'
+ '="record -a -e cycles,instructions"\'')
+ res = self.runner.Telemetry_Crosperf_Run('lumpy1.cros', self.mock_label,
+ self.telemetry_crosperf_bench, '',
+ profiler_args)
+ self.assertEqual(res, 0)
+ self.assertEqual(mock_chroot_runcmd.call_count, 1)
+ args_list = mock_chroot_runcmd.call_args_list[0][0]
+ args_dict = mock_chroot_runcmd.call_args_list[0][1]
+ self.assertEqual(args_list[0], '/tmp/chromeos')
+ self.assertEqual(args_list[1],
+ ('/usr/bin/test_that --autotest_dir '
+ '~/trunk/src/third_party/autotest/files '
+ ' --board=lumpy --args=" run_local=False test=octane '
+ 'profiler=custom_perf profiler_args=\'record -a -e '
+ 'cycles,instructions\'" lumpy1.cros telemetry_Crosperf'))
+ self.assertEqual(args_dict['cros_sdk_options'],
+ ('--no-ns-pid --chrome_root= '
+ '--chrome_root_mount=/tmp/chrome_root '
+ 'FEATURES="-usersandbox" CHROME_ROOT=/tmp/chrome_root'))
+ self.assertEqual(args_dict['command_terminator'], self.mock_cmd_term)
+ self.assertEqual(len(args_dict), 2)
+
+ @mock.patch.object(os.path, 'isdir')
+ @mock.patch.object(os.path, 'exists')
+ @mock.patch.object(command_executer.CommandExecuter, 'RunCommandWOutput')
+ def test_telemetry_run(self, mock_runcmd, mock_exists, mock_isdir):
+
+ def FakeLogMsg(fd, termfd, msg, flush=True):
+ if fd or termfd or msg or flush:
+ pass
+
+ save_log_msg = self.real_logger.LogMsg
+ self.real_logger.LogMsg = FakeLogMsg
+ mock_runcmd.return_value = 0
+
+ self.mock_cmd_exec.RunCommandWOutput = mock_runcmd
+ self.runner.logger = self.real_logger
+
+ profiler_args = ('--profiler=custom_perf --profiler_args=\'perf_options'
+ '="record -a -e cycles,instructions"\'')
+
+ raises_exception = False
+ mock_isdir.return_value = False
+ try:
+ self.runner.Telemetry_Run('lumpy1.cros', self.mock_label,
+ self.telemetry_bench, '')
+ except SystemExit:
+ raises_exception = True
+ self.assertTrue(raises_exception)
+
+ raises_exception = False
+ mock_isdir.return_value = True
+ mock_exists.return_value = False
+ try:
+ self.runner.Telemetry_Run('lumpy1.cros', self.mock_label,
+ self.telemetry_bench, '')
+ except SystemExit:
+ raises_exception = True
+ self.assertTrue(raises_exception)
+
+ raises_exception = False
+ mock_isdir.return_value = True
+ mock_exists.return_value = True
+ try:
+ self.runner.Telemetry_Run('lumpy1.cros', self.mock_label,
+ self.telemetry_bench, profiler_args)
+ except SystemExit:
+ raises_exception = True
+ self.assertTrue(raises_exception)
+
+ test_flag.SetTestMode(True)
+ res = self.runner.Telemetry_Run('lumpy1.cros', self.mock_label,
+ self.telemetry_bench, '')
+ self.assertEqual(res, 0)
+ self.assertEqual(mock_runcmd.call_count, 1)
+ self.assertEqual(mock_runcmd.call_args_list[0][0], (
+ ('cd src/tools/perf && ./run_measurement '
+ '--browser=cros-chrome --output-format=csv '
+ '--remote=lumpy1.cros --identity /tmp/chromeos/src/scripts'
+ '/mod_for_test_scripts/ssh_keys/testing_rsa octane '),))
+
+ self.real_logger.LogMsg = save_log_msg
+
+
+if __name__ == '__main__':
+ unittest.main()
diff --git a/crosperf/test_cache/compare_output/autotest.tbz2 b/crosperf/test_cache/compare_output/autotest.tbz2
new file mode 100644
index 00000000..066dd9ac
--- /dev/null
+++ b/crosperf/test_cache/compare_output/autotest.tbz2
Binary files differ
diff --git a/crosperf/test_cache/compare_output/machine.txt b/crosperf/test_cache/compare_output/machine.txt
new file mode 100644
index 00000000..a82af3aa
--- /dev/null
+++ b/crosperf/test_cache/compare_output/machine.txt
@@ -0,0 +1 @@
+fake_machine_checksum123 \ No newline at end of file
diff --git a/crosperf/test_cache/compare_output/results.txt b/crosperf/test_cache/compare_output/results.txt
new file mode 100644
index 00000000..db6803ce
--- /dev/null
+++ b/crosperf/test_cache/compare_output/results.txt
@@ -0,0 +1,6 @@
+S"CMD (True): ./test_that.sh --remote=172.17.128.241 --board=lumpy LibCBench\nCMD (None): cd /usr/local/google/home/yunlian/gd/src/build/images/lumpy/latest/../../../../..; cros_sdk -- ./in_chroot_cmd6X7Cxu.sh\nIdentity added: /tmp/test_that.PO1234567/autotest_key (/tmp/test_that.PO1234567/autotest_key)\nINFO : Using emerged autotests already installed at /build/lumpy/usr/local/autotest.\n\nINFO : Running the following control files 1 times:\nINFO : * 'client/site_tests/platform_LibCBench/control'\n\nINFO : Running client test client/site_tests/platform_LibCBench/control\n./server/autoserv -m 172.17.128.241 --ssh-port 22 -c client/site_tests/platform_LibCBench/control -r /tmp/test_that.PO1234567/platform_LibCBench --test-retry=0 --args \nERROR:root:import statsd failed, no stats will be reported.\n14:20:22 INFO | Results placed in /tmp/test_that.PO1234567/platform_LibCBench\n14:20:22 INFO | Processing control file\n14:20:23 INFO | Starting master ssh connection '/usr/bin/ssh -a -x -N -o ControlMaster=yes -o ControlPath=/tmp/_autotmp_VIIP67ssh-master/socket -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o BatchMode=yes -o ConnectTimeout=30 -o ServerAliveInterval=180 -o ServerAliveCountMax=3 -o ConnectionAttempts=4 -o Protocol=2 -l root -p 22 172.17.128.241'\n14:20:23 ERROR| [stderr] Warning: Permanently added '172.17.128.241' (RSA) to the list of known hosts.\n14:20:23 INFO | INFO\t----\t----\tkernel=3.8.11\tlocaltime=May 22 14:20:23\ttimestamp=1369257623\t\n14:20:23 INFO | Installing autotest on 172.17.128.241\n14:20:23 INFO | Using installation dir /usr/local/autotest\n14:20:23 WARNI| No job_repo_url for <remote host: 172.17.128.241>\n14:20:23 INFO | Could not install autotest using the packaging system: No repos to install an autotest client from. Trying other methods\n14:20:23 INFO | Installation of autotest completed\n14:20:24 WARNI| No job_repo_url for <remote host: 172.17.128.241>\n14:20:24 INFO | Executing /usr/local/autotest/bin/autotest /usr/local/autotest/control phase 0\n14:20:24 INFO | Entered autotestd_monitor.\n14:20:24 INFO | Finished launching tail subprocesses.\n14:20:24 INFO | Finished waiting on autotestd to start.\n14:20:26 INFO | START\t----\t----\ttimestamp=1369257625\tlocaltime=May 22 14:20:25\t\n14:20:26 INFO | \tSTART\tplatform_LibCBench\tplatform_LibCBench\ttimestamp=1369257625\tlocaltime=May 22 14:20:25\t\n14:20:30 INFO | \t\tGOOD\tplatform_LibCBench\tplatform_LibCBench\ttimestamp=1369257630\tlocaltime=May 22 14:20:30\tcompleted successfully\n14:20:30 INFO | \tEND GOOD\tplatform_LibCBench\tplatform_LibCBench\ttimestamp=1369257630\tlocaltime=May 22 14:20:30\t\n14:20:31 INFO | END GOOD\t----\t----\ttimestamp=1369257630\tlocaltime=May 22 14:20:30\t\n14:20:31 INFO | Got lock of exit_code_file.\n14:20:31 INFO | Released lock of exit_code_file and closed it.\nOUTPUT: ==============================\nOUTPUT: Current time: 2013-05-22 14:20:32.818831 Elapsed: 0:01:30 ETA: Unknown\nDone: 0% [ ]\nOUTPUT: Thread Status:\nRUNNING: 1 ('ttt: LibCBench (1)' 0:01:21)\nMachine Status:\nMachine Thread Lock Status Checksum \n172.17.128.241 ttt: LibCBench (1) True RUNNING 3ba9f2ecbb222f20887daea5583d86ba\n\nOUTPUT: ==============================\n14:20:33 INFO | Killing child processes.\n14:20:33 INFO | Client complete\n14:20:33 INFO | Finished processing control file\n14:20:33 INFO | Starting master ssh connection '/usr/bin/ssh -a -x -N -o ControlMaster=yes -o ControlPath=/tmp/_autotmp_aVJUgmssh-master/socket -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o BatchMode=yes -o ConnectTimeout=30 -o ServerAliveInterval=180 -o ServerAliveCountMax=3 -o ConnectionAttempts=4 -o Protocol=2 -l root -p 22 172.17.128.241'\n14:20:33 ERROR| [stderr] Warning: Permanently added '172.17.128.241' (RSA) to the list of known hosts.\n\nINFO : Test results:\n-------------------------------------------------------------------\nplatform_LibCBench [ PASSED ]\nplatform_LibCBench/platform_LibCBench [ PASSED ]\nplatform_LibCBench/platform_LibCBench b_malloc_big1__0_ 0.00375231466667\nplatform_LibCBench/platform_LibCBench b_malloc_big2__0_ 0.002951359\nplatform_LibCBench/platform_LibCBench b_malloc_bubble__0_ 0.015066374\nplatform_LibCBench/platform_LibCBench b_malloc_sparse__0_ 0.015053784\nplatform_LibCBench/platform_LibCBench b_malloc_thread_local__0_ 0.01138439\nplatform_LibCBench/platform_LibCBench b_malloc_thread_stress__0_ 0.0367894733333\nplatform_LibCBench/platform_LibCBench b_malloc_tiny1__0_ 0.000768474333333\nplatform_LibCBench/platform_LibCBench b_malloc_tiny2__0_ 0.000581407333333\nplatform_LibCBench/platform_LibCBench b_pthread_create_serial1__0_ 0.0291785246667\nplatform_LibCBench/platform_LibCBench b_pthread_createjoin_serial1__0_ 0.031907936\nplatform_LibCBench/platform_LibCBench b_pthread_createjoin_serial2__0_ 0.043485347\nplatform_LibCBench/platform_LibCBench b_pthread_uselesslock__0_ 0.0294113346667\nplatform_LibCBench/platform_LibCBench b_regex_compile____a_b_c__d_b__ 0.00529833933333\nplatform_LibCBench/platform_LibCBench b_regex_search____a_b_c__d_b__ 0.00165455066667\nplatform_LibCBench/platform_LibCBench b_regex_search___a_25_b__ 0.0496191923333\nplatform_LibCBench/platform_LibCBench b_stdio_putcgetc__0_ 0.100005711667\nplatform_LibCBench/platform_LibCBench b_stdio_putcgetc_unlocked__0_ 0.0371443833333\nplatform_LibCBench/platform_LibCBench b_string_memset__0_ 0.00275405066667\nplatform_LibCBench/platform_LibCBench b_string_strchr__0_ 0.00456903\nplatform_LibCBench/platform_LibCBench b_string_strlen__0_ 0.044893587\nplatform_LibCBench/platform_LibCBench b_string_strstr___aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaac__ 0.118360778\nplatform_LibCBench/platform_LibCBench b_string_strstr___aaaaaaaaaaaaaaaaaaaaaaaaac__ 0.068957325\nplatform_LibCBench/platform_LibCBench b_string_strstr___aaaaaaaaaaaaaacccccccccccc__ 0.0135694476667\nplatform_LibCBench/platform_LibCBench b_string_strstr___abcdefghijklmnopqrstuvwxyz__ 0.0134553343333\nplatform_LibCBench/platform_LibCBench b_string_strstr___azbycxdwevfugthsirjqkplomn__ 0.0133123556667\nplatform_LibCBench/platform_LibCBench b_utf8_bigbuf__0_ 0.0473772253333\nplatform_LibCBench/platform_LibCBench b_utf8_onebyone__0_ 0.130938538333\n-------------------------------------------------------------------\nTotal PASS: 2/2 (100%)\n\nINFO : Elapsed time: 0m16s \n"
+p0
+.S"\nERROR: Identity added: /tmp/test_that.Z4Ld/autotest_key (/tmp/test_that.Z4Ld/autotest_key)\nINFO : Using emerged autotests already installed at /build/lumpy/usr/local/autotest.\nINFO : Running the following control files 1 times:\nINFO : * 'client/site_tests/platform_LibCBench/control'\nINFO : Running client test client/site_tests/platform_LibCBench/control\nINFO : Test results:\nINFO : Elapsed time: 0m18s\n"
+p0
+.I0
+. \ No newline at end of file
diff --git a/crosperf/test_cache/test_input/autotest.tbz2 b/crosperf/test_cache/test_input/autotest.tbz2
new file mode 100644
index 00000000..6ddbc6bf
--- /dev/null
+++ b/crosperf/test_cache/test_input/autotest.tbz2
Binary files differ
diff --git a/crosperf/test_cache/test_input/machine.txt b/crosperf/test_cache/test_input/machine.txt
new file mode 100644
index 00000000..9bd78434
--- /dev/null
+++ b/crosperf/test_cache/test_input/machine.txt
@@ -0,0 +1 @@
+processor : 0vendor_id : GenuineIntelcpu family : 6model : 42model name : Intel(R) Celeron(R) CPU 867 @ 1.30GHzstepping : 7microcode : 0x25cache size : 2048 KBphysical id : 0siblings : 2core id : 0cpu cores : 2apicid : 0initial apicid : 0fpu : yesfpu_exception : yescpuid level : 13wp : yesflags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic popcnt tsc_deadline_timer xsave lahf_lm arat epb xsaveopt pln pts dts tpr_shadow vnmi flexpriority ept vpidclflush size : 64cache_alignment : 64address sizes : 36 bits physical, 48 bits virtualpower management:processor : 1vendor_id : GenuineIntelcpu family : 6model : 42model name : Intel(R) Celeron(R) CPU 867 @ 1.30GHzstepping : 7microcode : 0x25cache size : 2048 KBphysical id : 0siblings : 2core id : 1cpu cores : 2apicid : 2initial apicid : 2fpu : yesfpu_exception : yescpuid level : 13wp : yesflags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic popcnt tsc_deadline_timer xsave lahf_lm arat epb xsaveopt pln pts dts tpr_shadow vnmi flexpriority ept vpidclflush size : 64cache_alignment : 64address sizes : 36 bits physical, 48 bits virtualpower management: 4194304 \ No newline at end of file
diff --git a/crosperf/test_cache/test_input/results.txt b/crosperf/test_cache/test_input/results.txt
new file mode 100644
index 00000000..33ba6ab7
--- /dev/null
+++ b/crosperf/test_cache/test_input/results.txt
@@ -0,0 +1,6 @@
+S"11:22:08 INFO | Running autotest_quickmerge step.\n11:22:08 INFO | quickmerge| 11:22:08: INFO: RunCommand: sudo -- /usr/bin/python2.7 /mnt/host/source/chromite/bin/autotest_quickmerge '--board=lumpy'\n11:22:08 INFO | quickmerge| 11:22:08: INFO: RunCommand: find /build/lumpy/usr/local/build/autotest/ -path /build/lumpy/usr/local/build/autotest/ExternalSource -prune -o -path /build/lumpy/usr/local/build/autotest/logs -prune -o -path /build/lumpy/usr/local/build/autotest/results -prune -o -path /build/lumpy/usr/local/build/autotest/site-packages -prune -o -printf '%T@\\n'\n11:22:22 INFO | quickmerge| 11:22:22: INFO: RunCommand: find /mnt/host/source/src/third_party/autotest/files/ -path /mnt/host/source/src/third_party/autotest/files/ExternalSource -prune -o -path /mnt/host/source/src/third_party/autotest/files/logs -prune -o -path /mnt/host/source/src/third_party/autotest/files/results -prune -o -path /mnt/host/source/src/third_party/autotest/files/site-packages -prune -o -printf '%T@\\n'\n11:22:32 INFO | quickmerge| 11:22:32: INFO: The sysroot appears to be newer than the source tree, doing nothing and exiting now.\n11:22:32 INFO | Re-running test_that script in /build/lumpy/usr/local/build/autotest copy of autotest.\n11:22:33 INFO | Began logging to /tmp/test_that_results_zZZfQa\nAdding labels [u'cros-version:ad_hoc_build', u'board:lumpy'] to host chromeos2-row2-rack4-host11.cros\n13:22:33 INFO | Fetching suite for job named telemetry_Crosperf...\n13:22:43 INFO | Scheduling suite for job named telemetry_Crosperf...\n13:22:43 INFO | ... scheduled 1 job(s).\n13:22:43 INFO | autoserv| DEBUG:root:import statsd failed, no stats will be reported.\n13:22:43 INFO | autoserv| Results placed in /tmp/test_that_results_zZZfQa/results-1-telemetry_Crosperf\n13:22:43 INFO | autoserv| Logged pid 25397 to /tmp/test_that_results_zZZfQa/results-1-telemetry_Crosperf/.autoserv_execute\n13:22:43 INFO | autoserv| I am PID 25397\n13:22:43 INFO | autoserv| Not checking if job_repo_url contains autotest packages on ['chromeos2-row2-rack4-host11.cros']\n13:22:43 INFO | autoserv| Processing control file\n13:22:44 INFO | autoserv| START\ttelemetry_Crosperf\ttelemetry_Crosperf\ttimestamp=1401301364\tlocaltime=May 28 11:22:44\n13:22:44 INFO | autoserv| Starting master ssh connection '/usr/bin/ssh -a -x -N -o ControlMaster=yes -o ControlPath=/tmp/_autotmp_HsB3vQssh-master/socket -o StrictHostKeyChecking=no -o UserKnownHostsFile=/tmp/tmpxFy6lj -o BatchMode=yes -o ConnectTimeout=30 -o ServerAliveInterval=300 -l root -p 22 chromeos2-row2-rack4-host11.cros'\n13:22:45 INFO | autoserv| Starting master ssh connection '/usr/bin/ssh -a -x -N -o ControlMaster=yes -o ControlPath=/tmp/_autotmp_YTu9wYssh-master/socket -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o BatchMode=yes -o ConnectTimeout=30 -o ServerAliveInterval=180 -o ServerAliveCountMax=3 -o ConnectionAttempts=4 -o Protocol=2 -l root -p 22 chromeos2-row2-rack4-host11.cros'\n13:22:45 INFO | autoserv| Installing autotest on chromeos2-row2-rack4-host11.cros\n13:22:45 INFO | autoserv| Using installation dir /tmp/sysinfo/autoserv-MxOMOw\n13:22:46 INFO | autoserv| No job_repo_url for <remote host: chromeos2-row2-rack4-host11.cros>\n13:22:46 INFO | autoserv| Could not install autotest using the packaging system: No repos to install an autotest client from. Trying other methods\n13:22:47 INFO | autoserv| Installation of autotest completed\n13:22:47 INFO | autoserv| Installing updated global_config.ini.\n13:22:48 INFO | autoserv| No job_repo_url for <remote host: chromeos2-row2-rack4-host11.cros>\n13:22:48 INFO | autoserv| Executing /tmp/sysinfo/autoserv-MxOMOw/bin/autotest /tmp/sysinfo/autoserv-MxOMOw/control phase 0\n13:22:48 INFO | autoserv| Entered autotestd_monitor.\n13:22:48 INFO | autoserv| Finished launching tail subprocesses.\n13:22:48 INFO | autoserv| Finished waiting on autotestd to start.\n13:22:48 INFO | autoserv| START\t----\t----\ttimestamp=1401301368\tlocaltime=May 28 11:22:48\n13:22:48 INFO | autoserv| GOOD\t----\tsysinfo.before\ttimestamp=1401301368\tlocaltime=May 28 11:22:48\n13:22:48 INFO | autoserv| END GOOD\t----\t----\ttimestamp=1401301368\tlocaltime=May 28 11:22:48\n13:22:48 INFO | autoserv| Got lock of exit_code_file.\n13:22:48 INFO | autoserv| Released lock of exit_code_file and closed it.\n13:22:50 INFO | autoserv| Killing child processes.\n13:22:50 INFO | autoserv| Client complete\n13:22:52 INFO | autoserv| No job_repo_url for <remote host: chromeos2-row2-rack4-host11.cros>\n13:22:52 INFO | autoserv| Executing /tmp/sysinfo/autoserv-MxOMOw/bin/autotest /tmp/sysinfo/autoserv-MxOMOw/control phase 0\n13:22:53 INFO | autoserv| Entered autotestd_monitor.\n13:22:53 INFO | autoserv| Finished launching tail subprocesses.\n13:22:53 INFO | autoserv| Finished waiting on autotestd to start.\n13:22:53 INFO | autoserv| START\t----\t----\ttimestamp=1401301373\tlocaltime=May 28 11:22:53\n13:22:53 INFO | autoserv| GOOD\t----\tsysinfo.iteration.before\ttimestamp=1401301373\tlocaltime=May 28 11:22:53\n13:22:53 INFO | autoserv| END GOOD\t----\t----\ttimestamp=1401301373\tlocaltime=May 28 11:22:53\n13:22:53 INFO | autoserv| Got lock of exit_code_file.\n13:22:53 INFO | autoserv| Released lock of exit_code_file and closed it.\n13:22:55 INFO | autoserv| Killing child processes.\n13:22:55 INFO | autoserv| Client complete\n13:22:55 INFO | autoserv| Using Chrome source tree at /tmp/chrome_root\n13:22:55 INFO | autoserv| CMD: /tmp/chrome_root/src/tools/perf/run_benchmark --browser=cros-chrome --remote=chromeos2-row2-rack4-host11.cros sunspider\n13:23:35 INFO | autoserv| Telemetry completed with exit code: 0.\n13:23:35 INFO | autoserv| stdout:Pages: [http___www.webkit.org_perf_sunspider-1.0.2_sunspider-1.0.2_driver.html]\n13:23:35 INFO | autoserv| RESULT 3d-cube: 3d-cube= [28,28,28,28,31,26,28,28,28,27] ms\n13:23:35 INFO | autoserv| Avg 3d-cube: 28.000000ms\n13:23:35 INFO | autoserv| Sd 3d-cube: 1.247219ms\n13:23:35 INFO | autoserv| RESULT 3d-morph: 3d-morph= [23,22,22,22,22,22,22,22,22,22] ms\n13:23:35 INFO | autoserv| Avg 3d-morph: 22.100000ms\n13:23:35 INFO | autoserv| Sd 3d-morph: 0.316228ms\n13:23:35 INFO | autoserv| RESULT 3d-raytrace: 3d-raytrace= [26,23,24,25,25,25,26,24,24,25] ms\n13:23:35 INFO | autoserv| Avg 3d-raytrace: 24.700000ms\n13:23:35 INFO | autoserv| Sd 3d-raytrace: 0.948683ms\n13:23:35 INFO | autoserv| *RESULT Total: Total= [443,440,440,447,451,435,441,449,449,445] ms\n13:23:35 INFO | autoserv| Avg Total: 444.000000ms\n13:23:35 INFO | autoserv| Sd Total: 5.077182ms\n13:23:35 INFO | autoserv| RESULT access-binary-trees: access-binary-trees= [4,3,5,6,5,5,3,5,5,4] ms\n13:23:35 INFO | autoserv| Avg access-binary-trees: 4.500000ms\n13:23:35 INFO | autoserv| Sd access-binary-trees: 0.971825ms\n13:23:35 INFO | autoserv| RESULT access-fannkuch: access-fannkuch= [19,18,17,18,17,18,18,18,17,18] ms\n13:23:35 INFO | autoserv| Avg access-fannkuch: 17.800000ms\n13:23:35 INFO | autoserv| Sd access-fannkuch: 0.632456ms\n13:23:35 INFO | autoserv| RESULT access-nbody: access-nbody= [7,9,8,7,12,8,9,10,8,7] ms\n13:23:35 INFO | autoserv| Avg access-nbody: 8.500000ms\n13:23:35 INFO | autoserv| Sd access-nbody: 1.581139ms\n13:23:35 INFO | autoserv| RESULT access-nsieve: access-nsieve= [9,8,8,8,8,7,8,7,8,8] ms\n13:23:35 INFO | autoserv| Avg access-nsieve: 7.900000ms\n13:23:35 INFO | autoserv| Sd access-nsieve: 0.567646ms\n13:23:35 INFO | autoserv| RESULT bitops-3bit-bits-in-byte: bitops-3bit-bits-in-byte= [3,3,3,3,3,3,3,4,4,3] ms\n13:23:35 INFO | autoserv| Avg bitops-3bit-bits-in-byte: 3.200000ms\n13:23:35 INFO | autoserv| Sd bitops-3bit-bits-in-byte: 0.421637ms\n13:23:35 INFO | autoserv| RESULT bitops-bits-in-byte: bitops-bits-in-byte= [9,9,9,9,9,9,9,9,9,10] ms\n13:23:35 INFO | autoserv| Avg bitops-bits-in-byte: 9.100000ms\n13:23:35 INFO | autoserv| Sd bitops-bits-in-byte: 0.316228ms\n13:23:35 INFO | autoserv| RESULT bitops-bitwise-and: bitops-bitwise-and= [8,8,7,9,8,9,8,8,9,10] ms\n13:23:35 INFO | autoserv| Avg bitops-bitwise-and: 8.400000ms\n13:23:35 INFO | autoserv| Sd bitops-bitwise-and: 0.843274ms\n13:23:35 INFO | autoserv| RESULT bitops-nsieve-bits: bitops-nsieve-bits= [9,9,9,9,9,9,9,11,11,9] ms\n13:23:35 INFO | autoserv| Avg bitops-nsieve-bits: 9.400000ms\n13:23:35 INFO | autoserv| Sd bitops-nsieve-bits: 0.843274ms\n13:23:35 INFO | autoserv| RESULT controlflow-recursive: controlflow-recursive= [5,5,5,4,4,4,5,4,4,4] ms\n13:23:35 INFO | autoserv| Avg controlflow-recursive: 4.400000ms\n13:23:35 INFO | autoserv| Sd controlflow-recursive: 0.516398ms\n13:23:35 INFO | autoserv| RESULT crypto-aes: crypto-aes= [14,16,15,16,15,14,17,14,15,16] ms\n13:23:35 INFO | autoserv| Avg crypto-aes: 15.200000ms\n13:23:35 INFO | autoserv| Sd crypto-aes: 1.032796ms\n13:23:35 INFO | autoserv| RESULT crypto-md5: crypto-md5= [10,11,11,11,10,10,11,10,10,11] ms\n13:23:35 INFO | autoserv| Avg crypto-md5: 10.500000ms\n13:23:35 INFO | autoserv| Sd crypto-md5: 0.527046ms\n13:23:35 INFO | autoserv| RESULT crypto-sha1: crypto-sha1= [11,11,12,12,12,12,12,10,13,11] ms\n13:23:35 INFO | autoserv| Avg crypto-sha1: 11.600000ms\n13:23:35 INFO | autoserv| Sd crypto-sha1: 0.843274ms\n13:23:35 INFO | autoserv| RESULT date-format-tofte: date-format-tofte= [28,25,25,26,26,27,26,28,27,25] ms\n13:23:35 INFO | autoserv| Avg date-format-tofte: 26.300000ms\n13:23:35 INFO | autoserv| Sd date-format-tofte: 1.159502ms\n13:23:35 INFO | autoserv| RESULT date-format-xparb: date-format-xparb= [21,22,21,21,21,20,20,20,21,22] ms\n13:23:35 INFO | autoserv| Avg date-format-xparb: 20.900000ms\n13:23:35 INFO | autoserv| Sd date-format-xparb: 0.737865ms\n13:23:35 INFO | autoserv| RESULT math-cordic: math-cordic= [8,8,8,9,9,9,9,9,9,9] ms\n13:23:35 INFO | autoserv| Avg math-cordic: 8.700000ms\n13:23:35 INFO | autoserv| Sd math-cordic: 0.483046ms\n13:23:35 INFO | autoserv| RESULT math-partial-sums: math-partial-sums= [22,22,22,21,23,20,20,23,25,22] ms\n13:23:35 INFO | autoserv| Avg math-partial-sums: 22.000000ms\n13:23:35 INFO | autoserv| Sd math-partial-sums: 1.490712ms\n13:23:35 INFO | autoserv| RESULT math-spectral-norm: math-spectral-norm= [6,7,6,7,7,6,7,6,7,7] ms\n13:23:35 INFO | autoserv| Avg math-spectral-norm: 6.600000ms\n13:23:35 INFO | autoserv| Sd math-spectral-norm: 0.516398ms\n13:23:35 INFO | autoserv| RESULT regexp-dna: regexp-dna= [16,16,17,16,16,16,16,16,17,16] ms\n13:23:35 INFO | autoserv| Avg regexp-dna: 16.200000ms\n13:23:35 INFO | autoserv| Sd regexp-dna: 0.421637ms\n13:23:35 INFO | autoserv| RESULT string-base64: string-base64= [17,16,16,16,17,16,16,16,14,16] ms\n13:23:35 INFO | autoserv| Avg string-base64: 16.000000ms\n13:23:35 INFO | autoserv| Sd string-base64: 0.816497ms\n13:23:35 INFO | autoserv| RESULT string-fasta: string-fasta= [23,22,23,24,23,23,23,25,23,23] ms\n13:23:35 INFO | autoserv| Avg string-fasta: 23.200000ms\n13:23:35 INFO | autoserv| Sd string-fasta: 0.788811ms\n13:23:35 INFO | autoserv| RESULT string-tagcloud: string-tagcloud= [53,52,54,53,53,52,51,54,53,53] ms\n13:23:35 INFO | autoserv| Avg string-tagcloud: 52.800000ms\n13:23:35 INFO | autoserv| Sd string-tagcloud: 0.918937ms\n13:23:35 INFO | autoserv| RESULT string-unpack-code: string-unpack-code= [46,47,46,48,47,46,46,47,47,47] ms\n13:23:35 INFO | autoserv| Avg string-unpack-code: 46.700000ms\n13:23:35 INFO | autoserv| Sd string-unpack-code: 0.674949ms\n13:23:35 INFO | autoserv| RESULT string-validate-input: string-validate-input= [18,20,19,19,19,19,19,21,19,20] ms\n13:23:35 INFO | autoserv| Avg string-validate-input: 19.300000ms\n13:23:35 INFO | autoserv| Sd string-validate-input: 0.823273ms\n13:23:35 INFO | autoserv| RESULT telemetry_page_measurement_results: num_failed= 0 count\n13:23:35 INFO | autoserv| RESULT telemetry_page_measurement_results: num_errored= 0 count\n13:23:35 INFO | autoserv| \n13:23:35 INFO | autoserv| View result at file:///tmp/chrome_root/src/tools/perf/results.html\n13:23:35 INFO | autoserv| \n13:23:35 INFO | autoserv| stderr:\n13:23:35 INFO | autoserv| No job_repo_url for <remote host: chromeos2-row2-rack4-host11.cros>\n13:23:35 INFO | autoserv| Executing /tmp/sysinfo/autoserv-MxOMOw/bin/autotest /tmp/sysinfo/autoserv-MxOMOw/control phase 0\n13:23:36 INFO | autoserv| Entered autotestd_monitor.\n13:23:36 INFO | autoserv| Finished launching tail subprocesses.\n13:23:36 INFO | autoserv| Finished waiting on autotestd to start.\n13:23:37 INFO | autoserv| START\t----\t----\ttimestamp=1401301417\tlocaltime=May 28 11:23:37\n13:23:37 INFO | autoserv| GOOD\t----\tsysinfo.iteration.after\ttimestamp=1401301417\tlocaltime=May 28 11:23:37\n13:23:37 INFO | autoserv| END GOOD\t----\t----\ttimestamp=1401301417\tlocaltime=May 28 11:23:37\n13:23:37 INFO | autoserv| Got lock of exit_code_file.\n13:23:37 INFO | autoserv| Released lock of exit_code_file and closed it.\n13:23:39 INFO | autoserv| Killing child processes.\n13:23:39 INFO | autoserv| Client complete\n13:23:39 INFO | autoserv| No job_repo_url for <remote host: chromeos2-row2-rack4-host11.cros>\n13:23:40 INFO | autoserv| Executing /tmp/sysinfo/autoserv-MxOMOw/bin/autotest /tmp/sysinfo/autoserv-MxOMOw/control phase 0\n13:23:40 INFO | autoserv| Entered autotestd_monitor.\n13:23:40 INFO | autoserv| Finished launching tail subprocesses.\n13:23:40 INFO | autoserv| Finished waiting on autotestd to start.\n13:23:40 INFO | autoserv| START\t----\t----\ttimestamp=1401301420\tlocaltime=May 28 11:23:40\n13:23:40 INFO | autoserv| GOOD\t----\tsysinfo.after\ttimestamp=1401301420\tlocaltime=May 28 11:23:40\n13:23:40 INFO | autoserv| END GOOD\t----\t----\ttimestamp=1401301420\tlocaltime=May 28 11:23:40\n13:23:40 INFO | autoserv| Got lock of exit_code_file.\n13:23:40 INFO | autoserv| Released lock of exit_code_file and closed it.\n13:23:42 INFO | autoserv| Killing child processes.\n13:23:42 INFO | autoserv| Client complete\n13:23:44 INFO | autoserv| GOOD\ttelemetry_Crosperf\ttelemetry_Crosperf\ttimestamp=1401301424\tlocaltime=May 28 11:23:44\tcompleted successfully\n13:23:44 INFO | autoserv| END GOOD\ttelemetry_Crosperf\ttelemetry_Crosperf\ttimestamp=1401301424\tlocaltime=May 28 11:23:44\n13:23:44 INFO | autoserv| Finished processing control file\n13:23:44 INFO | autoserv| Starting master ssh connection '/usr/bin/ssh -a -x -N -o ControlMaster=yes -o ControlPath=/tmp/_autotmp_UyjlWMssh-master/socket -o StrictHostKeyChecking=no -o UserKnownHostsFile=/tmp/tmpCvMigR -o BatchMode=yes -o ConnectTimeout=30 -o ServerAliveInterval=300 -l root -p 22 chromeos2-row2-rack4-host11.cros'\n13:23:45 INFO | autoserv| Starting master ssh connection '/usr/bin/ssh -a -x -N -o ControlMaster=yes -o ControlPath=/tmp/_autotmp_w_KGTassh-master/socket -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o BatchMode=yes -o ConnectTimeout=30 -o ServerAliveInterval=180 -o ServerAliveCountMax=3 -o ConnectionAttempts=4 -o Protocol=2 -l root -p 22 chromeos2-row2-rack4-host11.cros'\n-----------------------------------------------------------------------------------------\n/tmp/test_that_results_zZZfQa/results-1-telemetry_Crosperf [ PASSED ]\n/tmp/test_that_results_zZZfQa/results-1-telemetry_Crosperf/telemetry_Crosperf [ PASSED ]\n-----------------------------------------------------------------------------------------\nTotal PASS: 2/2 (100%)\n\n13:23:47 INFO | Finished running tests. Results can be found in /tmp/test_that_results_zZZfQa\n"
+p0
+.S'INFO:root:Identity added: /tmp/test_that_results_PPRMIh/testing_rsa (/tmp/test_that_results_PPRMIh/testing_rsa)\nINFO:root:Identity added: /tmp/test_that_results_zZZfQa/testing_rsa (/tmp/test_that_results_zZZfQa/testing_rsa)\n'
+p0
+.I0
+. \ No newline at end of file
diff --git a/crosperf/test_cache/test_puretelemetry_input/machine.txt b/crosperf/test_cache/test_puretelemetry_input/machine.txt
new file mode 100644
index 00000000..9bd78434
--- /dev/null
+++ b/crosperf/test_cache/test_puretelemetry_input/machine.txt
@@ -0,0 +1 @@
+processor : 0vendor_id : GenuineIntelcpu family : 6model : 42model name : Intel(R) Celeron(R) CPU 867 @ 1.30GHzstepping : 7microcode : 0x25cache size : 2048 KBphysical id : 0siblings : 2core id : 0cpu cores : 2apicid : 0initial apicid : 0fpu : yesfpu_exception : yescpuid level : 13wp : yesflags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic popcnt tsc_deadline_timer xsave lahf_lm arat epb xsaveopt pln pts dts tpr_shadow vnmi flexpriority ept vpidclflush size : 64cache_alignment : 64address sizes : 36 bits physical, 48 bits virtualpower management:processor : 1vendor_id : GenuineIntelcpu family : 6model : 42model name : Intel(R) Celeron(R) CPU 867 @ 1.30GHzstepping : 7microcode : 0x25cache size : 2048 KBphysical id : 0siblings : 2core id : 1cpu cores : 2apicid : 2initial apicid : 2fpu : yesfpu_exception : yescpuid level : 13wp : yesflags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic popcnt tsc_deadline_timer xsave lahf_lm arat epb xsaveopt pln pts dts tpr_shadow vnmi flexpriority ept vpidclflush size : 64cache_alignment : 64address sizes : 36 bits physical, 48 bits virtualpower management: 4194304 \ No newline at end of file
diff --git a/crosperf/test_cache/test_puretelemetry_input/results.txt b/crosperf/test_cache/test_puretelemetry_input/results.txt
new file mode 100644
index 00000000..497d1cf3
--- /dev/null
+++ b/crosperf/test_cache/test_puretelemetry_input/results.txt
@@ -0,0 +1,6 @@
+S'page_name,3d-cube (ms),3d-morph (ms),3d-raytrace (ms),Total (ms),access-binary-trees (ms),access-fannkuch (ms),access-nbody (ms),access-nsieve (ms),bitops-3bit-bits-in-byte (ms),bitops-bits-in-byte (ms),bitops-bitwise-and (ms),bitops-nsieve-bits (ms),controlflow-recursive (ms),crypto-aes (ms),crypto-md5 (ms),crypto-sha1 (ms),date-format-tofte (ms),date-format-xparb (ms),math-cordic (ms),math-partial-sums (ms),math-spectral-norm (ms),regexp-dna (ms),string-base64 (ms),string-fasta (ms),string-tagcloud (ms),string-unpack-code (ms),string-validate-input (ms)\r\nhttp://www.webkit.org/perf/sunspider-1.0.2/sunspider-1.0.2/driver.html,42.7,50.2,28.7,656.5,7.3,26.3,6.9,8.6,3.5,9.8,8.8,9.3,5.3,19.2,10.8,12.4,31.2,138.1,11.4,32.8,6.3,16.1,17.5,36.3,47.2,45.0,24.8\r\n'
+p0
+.S''
+p0
+.I0
+. \ No newline at end of file
diff --git a/crosperf/test_flag.py b/crosperf/test_flag.py
new file mode 100644
index 00000000..70918693
--- /dev/null
+++ b/crosperf/test_flag.py
@@ -0,0 +1,12 @@
+# Copyright 2011 Google Inc. All Rights Reserved.
+"""A global variable for testing."""
+
+is_test = [False]
+
+
+def SetTestMode(flag):
+ is_test[0] = flag
+
+
+def GetTestMode():
+ return is_test[0]
diff --git a/crosperf/translate_xbuddy.py b/crosperf/translate_xbuddy.py
new file mode 100644
index 00000000..a32854e1
--- /dev/null
+++ b/crosperf/translate_xbuddy.py
@@ -0,0 +1,33 @@
+"""Module to translate the xbuddy config."""
+
+from __future__ import print_function
+
+import os
+import sys
+
+if '/mnt/host/source/src/third_party/toolchain-utils/crosperf' in sys.path:
+ dev_path = os.path.expanduser('~/trunk/src/platform/dev')
+ sys.path.append(dev_path)
+else:
+ print('This script can only be run from inside a ChromeOS chroot. Please '
+ 'enter your chroot, go to ~/src/third_party/toolchain-utils/crosperf'
+ ' and try again.')
+ sys.exit(0)
+
+#pylint: disable=import-error
+import xbuddy
+
+
+def Main(xbuddy_string):
+ if not os.path.exists('./xbuddy_config.ini'):
+ config_path = os.path.expanduser('~/trunk/src/platform/dev/'
+ 'xbuddy_config.ini')
+ os.symlink(config_path, './xbuddy_config.ini')
+ x = xbuddy.XBuddy(manage_builds=False, static_dir='/tmp/devserver/static')
+ build_id = x.Translate(os.path.split(xbuddy_string))
+ return build_id
+
+
+if __name__ == '__main__':
+ print(Main(sys.argv[1]))
+ sys.exit(0)
diff --git a/crosperf/unittest_keyval_file.txt b/crosperf/unittest_keyval_file.txt
new file mode 100644
index 00000000..cc76398e
--- /dev/null
+++ b/crosperf/unittest_keyval_file.txt
@@ -0,0 +1,20 @@
+{"description": "Box2D", "graph": "Box2D", "higher_is_better": true, "units": "score", "value": 4775}
+{"description": "CodeLoad", "graph": "CodeLoad", "higher_is_better": true, "units": "score", "value": 6271}
+{"description": "Crypto", "graph": "Crypto", "higher_is_better": true, "units": "score", "value": 8737}
+{"description": "DeltaBlue", "graph": "DeltaBlue", "higher_is_better": true, "units": "score", "value": 14401}
+{"description": "EarleyBoyer", "graph": "EarleyBoyer", "higher_is_better": true, "units": "score", "value": 14340}
+{"description": "Gameboy", "graph": "Gameboy", "higher_is_better": true, "units": "score", "value": 9901}
+{"description": "Mandreel", "graph": "Mandreel", "higher_is_better": true, "units": "score", "value": 6620}
+{"description": "MandreelLatency", "graph": "MandreelLatency", "higher_is_better": true, "units": "score", "value": 5188}
+{"description": "NavierStokes", "graph": "NavierStokes", "higher_is_better": true, "units": "score", "value": 9815}
+{"description": "PdfJS", "graph": "PdfJS", "higher_is_better": true, "units": "score", "value": 6455}
+{"description": "RayTrace", "graph": "RayTrace", "higher_is_better": true, "units": "score", "value": 16600}
+{"description": "RegExp", "graph": "RegExp", "higher_is_better": true, "units": "score", "value": 1765}
+{"description": "Richards", "graph": "Richards", "higher_is_better": true, "units": "score", "value": 10358}
+{"description": "Splay", "graph": "Splay", "higher_is_better": true, "units": "score", "value": 4425}
+{"description": "SplayLatency", "graph": "SplayLatency", "higher_is_better": true, "units": "score", "value": 7653}
+{"description": "Typescript", "graph": "Typescript", "higher_is_better": true, "units": "score", "value": 9815}
+{"description": "zlib", "graph": "zlib", "higher_is_better": true, "units": "score", "value": 16094}
+{"description": "Score", "graph": "Total", "higher_is_better": true, "units": "score", "value": 7918}
+{"description": "num_failed", "graph": "telemetry_page_measurement_results", "higher_is_better": true, "units": "count", "value": 0}
+{"description": "num_errored", "graph": "telemetry_page_measurement_results", "higher_is_better": true, "units": "count", "value": 0}
diff --git a/cwp/bartlett/app.yaml b/cwp/bartlett/app.yaml
new file mode 100644
index 00000000..60010f70
--- /dev/null
+++ b/cwp/bartlett/app.yaml
@@ -0,0 +1,22 @@
+application: chromeoswideprofiling
+version: 1
+runtime: python
+api_version: 1
+
+handlers:
+- url: /favicon.ico
+ static_files: static/favicon.ico
+ upload: static/favicon.ico
+- url: /remote_api
+ script: $PYTHON_LIB/google/appengine/ext/remote_api/handler.py
+ login: admin
+- url: /
+ script: server.py
+- url: /upload
+ script: server.py
+- url: /serve
+ script: server.py
+- url: /serve/.*
+ script: server.py
+- url: /del/.*
+ script: server.py
diff --git a/cwp/bartlett/server.py b/cwp/bartlett/server.py
new file mode 100755
index 00000000..f6b35361
--- /dev/null
+++ b/cwp/bartlett/server.py
@@ -0,0 +1,153 @@
+#!/usr/bin/python
+# Copyright 2012 Google Inc. All Rights Reserved.
+# Author: mrdmnd@ (Matt Redmond)
+# Based off of code in //depot/google3/experimental/mobile_gwp
+"""Code to transport profile data between a user's machine and the CWP servers.
+ Pages:
+ "/": the main page for the app, left blank so that users cannot access
+ the file upload but left in the code for debugging purposes
+ "/upload": Updates the datastore with a new file. the upload depends on
+ the format which is templated on the main page ("/")
+ input includes:
+ profile_data: the zipped file containing profile data
+ board: the architecture we ran on
+ chromeos_version: the chromeos_version
+ "/serve": Lists all of the files in the datastore. Each line is a new entry
+ in the datastore. The format is key~date, where key is the entry's
+ key in the datastore and date is the file upload time and date.
+ (Authentication Required)
+ "/serve/([^/]+)?": For downloading a file of profile data, ([^/]+)? means
+ any character sequence so to download the file go to
+ '/serve/$key' where $key is the datastore key of the file
+ you want to download.
+ (Authentication Required)
+ "/del/([^/]+)?": For deleting an entry in the datastore. To use go to
+ '/del/$key' where $key is the datastore key of the entry
+ you want to be deleted form the datastore.
+ (Authentication Required)
+ TODO: Add more extensive logging"""
+
+import cgi
+import logging
+import md5
+import urllib
+
+from google.appengine.api import users
+from google.appengine.ext import db
+from google.appengine.ext import webapp
+from google.appengine.ext.webapp.util import run_wsgi_app
+
+logging.getLogger().setLevel(logging.DEBUG)
+
+
+class FileEntry(db.Model):
+ profile_data = db.BlobProperty() # The profile data
+ date = db.DateTimeProperty(auto_now_add=True) # Date it was uploaded
+ data_md5 = db.ByteStringProperty() # md5 of the profile data
+ board = db.StringProperty() # board arch
+ chromeos_version = db.StringProperty() # ChromeOS version
+
+
+class MainPage(webapp.RequestHandler):
+ """Main page only used as the form template, not actually displayed."""
+
+ def get(self, response=''): # pylint: disable-msg=C6409
+ if response:
+ self.response.out.write('<html><body>')
+ self.response.out.write("""<br>
+ <form action="/upload" enctype="multipart/form-data" method="post">
+ <div><label>Profile Data:</label></div>
+ <div><input type="file" name="profile_data"/></div>
+ <div><label>Board</label></div>
+ <div><input type="text" name="board"/></div>
+ <div><label>ChromeOS Version</label></div>
+ <div><input type="text" name="chromeos_version"></div>
+ <div><input type="submit" value="send" name="submit"></div>
+ </form>
+ </body>
+ </html>""")
+
+
+class Upload(webapp.RequestHandler):
+ """Handler for uploading data to the datastore, accessible by anyone."""
+
+ def post(self): # pylint: disable-msg=C6409
+ """Takes input based on the main page's form."""
+ getfile = FileEntry()
+ f1 = self.request.get('profile_data')
+ getfile.profile_data = db.Blob(f1)
+ getfile.data_md5 = md5.new(f1).hexdigest()
+ getfile.board = self.request.get('board')
+ getfile.chromeos_version = self.request.get('chromeos_version')
+ getfile.put()
+ self.response.out.write(getfile.key())
+ #self.redirect('/')
+
+
+class ServeHandler(webapp.RequestHandler):
+ """Given the entry's key in the database, output the profile data file. Only
+ accessible from @google.com accounts."""
+
+ def get(self, resource): # pylint: disable-msg=C6409
+ if Authenticate(self):
+ file_key = str(urllib.unquote(resource))
+ request = db.get(file_key)
+ self.response.out.write(request.profile_data)
+
+
+class ListAll(webapp.RequestHandler):
+ """Displays all files uploaded. Only accessible by @google.com accounts."""
+
+ def get(self): # pylint: disable-msg=C6409
+ """Displays all information in FileEntry, ~ delimited."""
+ if Authenticate(self):
+ query_str = 'SELECT * FROM FileEntry ORDER BY date ASC'
+ query = db.GqlQuery(query_str)
+ delimiter = '~'
+
+ for item in query:
+ display_list = [item.key(), item.date, item.data_md5, item.board,
+ item.chromeos_version]
+ str_list = [cgi.escape(str(i)) for i in display_list]
+ self.response.out.write(delimiter.join(str_list) + '</br>')
+
+
+class DelEntries(webapp.RequestHandler):
+ """Deletes entries. Only accessible from @google.com accounts."""
+
+ def get(self, resource): # pylint: disable-msg=C6409
+ """A specific entry is deleted, when the key is given."""
+ if Authenticate(self):
+ fkey = str(urllib.unquote(resource))
+ request = db.get(fkey)
+ if request:
+ db.delete(fkey)
+
+
+def Authenticate(webpage):
+ """Some urls are only accessible if logged in with a @google.com account."""
+ user = users.get_current_user()
+ if user is None:
+ webpage.redirect(users.create_login_url(webpage.request.uri))
+ elif user.email().endswith('@google.com'):
+ return True
+ else:
+ webpage.response.out.write('Not Authenticated')
+ return False
+
+
+def main():
+ application = webapp.WSGIApplication(
+ [
+ ('/', MainPage),
+ ('/upload', Upload),
+ ('/serve/([^/]+)?', ServeHandler),
+ ('/serve', ListAll),
+ ('/del/([^/]+)?', DelEntries),
+ ],
+ debug=False)
+ run_wsgi_app(application)
+
+
+if __name__ == '__main__':
+ main()
diff --git a/cwp/bartlett/static/favicon.ico b/cwp/bartlett/static/favicon.ico
new file mode 100644
index 00000000..19b58c2e
--- /dev/null
+++ b/cwp/bartlett/static/favicon.ico
Binary files differ
diff --git a/cwp/bartlett/test/server_tester.py b/cwp/bartlett/test/server_tester.py
new file mode 100644
index 00000000..585da43a
--- /dev/null
+++ b/cwp/bartlett/test/server_tester.py
@@ -0,0 +1,101 @@
+# Copyright 2012 Google Inc. All Rights Reserved.
+# Author: mrdmnd@ (Matt Redmond)
+"""A unit test for sending data to Bartlett. Requires poster module."""
+
+import cookielib
+import os
+import signal
+import subprocess
+import tempfile
+import time
+import unittest
+import urllib2
+
+from poster.encode import multipart_encode
+from poster.streaminghttp import register_openers
+
+SERVER_DIR = '../.'
+SERVER_URL = 'http://localhost:8080/'
+GET = '_ah/login?email=googler@google.com&action=Login&continue=%s'
+AUTH_URL = SERVER_URL + GET
+
+
+class ServerTest(unittest.TestCase):
+ """A unit test for the bartlett server. Tests upload, serve, and delete."""
+
+ def setUp(self):
+ """Instantiate the files and server needed to test upload functionality."""
+ self._server_proc = LaunchLocalServer()
+ self._jar = cookielib.LWPCookieJar()
+ self.opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(self._jar))
+
+ # We need these files to not delete when closed, because we have to reopen
+ # them in read mode after we write and close them.
+ self.profile_data = tempfile.NamedTemporaryFile(delete=False)
+
+ size = 16 * 1024
+ self.profile_data.write(os.urandom(size))
+
+ def tearDown(self):
+ self.profile_data.close()
+ os.remove(self.profile_data.name)
+ os.kill(self._server_proc.pid, signal.SIGINT)
+
+ def testIntegration(self): # pylint: disable-msg=C6409
+ key = self._testUpload()
+ self._testListAll()
+ self._testServeKey(key)
+ self._testDelKey(key)
+
+ def _testUpload(self): # pylint: disable-msg=C6409
+ register_openers()
+ data = {'profile_data': self.profile_data,
+ 'board': 'x86-zgb',
+ 'chromeos_version': '2409.0.2012_06_08_1114'}
+ datagen, headers = multipart_encode(data)
+ request = urllib2.Request(SERVER_URL + 'upload', datagen, headers)
+ response = urllib2.urlopen(request).read()
+ self.assertTrue(response)
+ return response
+
+ def _testListAll(self): # pylint: disable-msg=C6409
+ request = urllib2.Request(AUTH_URL % (SERVER_URL + 'serve'))
+ response = self.opener.open(request).read()
+ self.assertTrue(response)
+
+ def _testServeKey(self, key): # pylint: disable-msg=C6409
+ request = urllib2.Request(AUTH_URL % (SERVER_URL + 'serve/' + key))
+ response = self.opener.open(request).read()
+ self.assertTrue(response)
+
+ def _testDelKey(self, key): # pylint: disable-msg=C6409
+ # There is no response to a delete request.
+ # We will check the listAll page to ensure there is no data.
+ request = urllib2.Request(AUTH_URL % (SERVER_URL + 'del/' + key))
+ response = self.opener.open(request).read()
+ request = urllib2.Request(AUTH_URL % (SERVER_URL + 'serve'))
+ response = self.opener.open(request).read()
+ self.assertFalse(response)
+
+
+def LaunchLocalServer():
+ """Launch and store an authentication cookie with a local server."""
+ proc = subprocess.Popen(
+ ['dev_appserver.py', '--clear_datastore', SERVER_DIR],
+ stdout=subprocess.PIPE,
+ stderr=subprocess.PIPE)
+ # Wait for server to come up
+ while True:
+ time.sleep(1)
+ try:
+ request = urllib2.Request(SERVER_URL + 'serve')
+ response = urllib2.urlopen(request).read()
+ if response:
+ break
+ except urllib2.URLError:
+ continue
+ return proc
+
+
+if __name__ == '__main__':
+ unittest.main()
diff --git a/cwp/bartlett/update_appengine_server b/cwp/bartlett/update_appengine_server
new file mode 100755
index 00000000..f3812057
--- /dev/null
+++ b/cwp/bartlett/update_appengine_server
@@ -0,0 +1 @@
+appcfg.py --oauth2 update .
diff --git a/cwp/demo_pipeline.sh b/cwp/demo_pipeline.sh
new file mode 100644
index 00000000..d45c5c44
--- /dev/null
+++ b/cwp/demo_pipeline.sh
@@ -0,0 +1,55 @@
+#!/bin/bash
+
+# These should be on the local filesystem. We'll be hitting it hard.
+DATA_DIR=/usr/local/google/home/${USER}/
+SYMBOL_CACHE=${DATA_DIR}cache/
+REPORT_DIR=${DATA_DIR}reports/
+SAMPLE_DIR=${DATA_DIR}samples/
+RECORD_FILE=/tmp/profiles.rio
+COLUMN_FILE=/tmp/profiles.cio
+mkdir -p ${SYMBOL_CACHE}
+mkdir -p ${REPORT_DIR}
+mkdir -p ${SAMPLE_DIR}
+
+# Directory that has the scripts app_engine_pull.py and symbolizer.py
+INTERPRETER_DIR=/google/src/files/p2/head/depot2/gcctools/chromeos/v14/cwp/interpreter/
+V14_DIR=$(dirname $(dirname ${INTERPRETER_DIR}))
+
+PYTHONPATH=$PYTHONPATH:$V14_DIR
+
+# Profile util binary
+PROFILE_UTIL_BINARY=/home/mrdmnd/${USER}-profiledb/google3/blaze-bin/perftools/gwp/chromeos/profile_util
+
+# mr-convert binary
+MR_CONVERT_BINARY=/home/build/static/projects/dremel/mr-convert
+
+CNS_LOC=/cns/ag-d/home/${USER}/profiledb/
+
+# Protofile location
+PROTO_LOC=${CNS_LOC}cwp_profile_db_entry.proto
+
+echo "0. Cleaning up old data."
+rm /tmp/profiles.*
+rm ${REPORT_DIR}*
+rm ${SAMPLE_DIR}*
+
+
+echo "Starting CWP Pipeline..."
+echo "1. Pulling samples to local filesystem from server."
+echo " For demo purposes, UN=${USER}@google.com, PW=xjpbmshkzefutlrm"
+python ${INTERPRETER_DIR}app_engine_pull.py --output_dir=${SAMPLE_DIR}
+echo "2. Symbolizing samples to perf reports. Hold on..."
+
+python ${INTERPRETER_DIR}symbolizer.py --in=${SAMPLE_DIR} --out=${REPORT_DIR} --cache=${SYMBOL_CACHE}
+echo "3. Loading reports into RecordIO format..."
+# Will need to make append_dir more clever / incremental
+${PROFILE_UTIL_BINARY} --record=${RECORD_FILE} --append_dir=${REPORT_DIR}
+echo "Done."
+echo "4. Converting records to columnio."
+${MR_CONVERT_BINARY} --mapreduce_input_map=recordio:${RECORD_FILE} --mapreduce_output_map=${COLUMN_FILE}@1 --columnio_mroutput_message_type=CwpProfileDbEntry --columnio_mroutput_protofiles=${PROTO_LOC}
+echo "5. Uploading columnio to colossus."
+fileutil cp -f /tmp/profiles.cio-* ${CNS_LOC}
+echo "6. Let's try some dremel queries..."
+echo " dremel> define table t /cns/ag-d/home/${USER}/profiledb/profiles.cio-*"
+echo " Like, say, dremel> select sum(frames.count) as count, left(frames.function_name, 80) as name from t group by name order by count desc limit 25;"
+
diff --git a/cwp/interpreter/app_engine_pull.py b/cwp/interpreter/app_engine_pull.py
new file mode 100644
index 00000000..d092e2a3
--- /dev/null
+++ b/cwp/interpreter/app_engine_pull.py
@@ -0,0 +1,253 @@
+# Copyright 2012 Google Inc. All Rights Reserved.
+# Author: mrdmnd@ (Matt Redmond)
+"""A client to pull data from Bartlett.
+
+Inspired by //depot/google3/experimental/mobile_gwp/database/app_engine_pull.py
+
+The server houses perf.data.gz, board, chrome version for each upload.
+This script first authenticates with a proper @google.com account, then
+downloads a sample (if it's not already cached) and unzips perf.data
+
+ Authenticate(): Gets login info and returns an auth token
+ DownloadSamples(): Download and unzip samples.
+ _GetServePage(): Pulls /serve page from the app engine server
+ _DownloadSampleFromServer(): Downloads a local compressed copy of a sample
+ _UncompressSample(): Decompresses a sample, deleting the compressed version.
+"""
+import cookielib
+import getpass
+import gzip
+import optparse
+import os
+import urllib
+import urllib2
+
+SERVER_NAME = 'http://chromeoswideprofiling.appspot.com'
+APP_NAME = 'chromeoswideprofiling'
+DELIMITER = '~'
+
+
+def Authenticate(server_name):
+ """Gets credentials from user and attempts to retrieve auth token.
+ TODO: Accept OAuth2 instead of password.
+ Args:
+ server_name: (string) URL that the app engine code is living on.
+ Returns:
+ authtoken: (string) The authorization token that can be used
+ to grab other pages.
+ """
+
+ if server_name.endswith('/'):
+ server_name = server_name.rstrip('/')
+ # Grab username and password from user through stdin.
+ username = raw_input('Email (must be @google.com account): ')
+ password = getpass.getpass('Password: ')
+ # Use a cookie to authenticate with GAE.
+ cookiejar = cookielib.LWPCookieJar()
+ opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookiejar))
+ urllib2.install_opener(opener)
+ # Get an AuthToken from Google accounts service.
+ auth_uri = 'https://www.google.com/accounts/ClientLogin'
+ authreq_data = urllib.urlencode({'Email': username,
+ 'Passwd': password,
+ 'service': 'ah',
+ 'source': APP_NAME,
+ 'accountType': 'HOSTED_OR_GOOGLE'})
+ auth_req = urllib2.Request(auth_uri, data=authreq_data)
+ try:
+ auth_resp = urllib2.urlopen(auth_req)
+ except urllib2.URLError:
+ print 'Error logging in to Google accounts service.'
+ return None
+ body = auth_resp.read()
+ # Auth response contains several fields.
+ # We care about the part after Auth=
+ auth_resp_dict = dict(x.split('=') for x in body.split('\n') if x)
+ authtoken = auth_resp_dict['Auth']
+ return authtoken
+
+
+def DownloadSamples(server_name, authtoken, output_dir, start, stop):
+ """Download every sample and write unzipped version
+ to output directory.
+ Args:
+ server_name: (string) URL that the app engine code is living on.
+ authtoken: (string) Authorization token.
+ output_dir (string) Filepath to write output to.
+ start: (int) Index to start downloading from, starting at top.
+ stop: (int) Index to stop downloading, non-inclusive. -1 for end.
+ Returns:
+ None
+ """
+
+ if server_name.endswith('/'):
+ server_name = server_name.rstrip('/')
+
+ serve_page_string = _GetServePage(server_name, authtoken)
+ if serve_page_string is None:
+ print 'Error getting /serve page.'
+ return
+
+ sample_list = serve_page_string.split('</br>')
+ print 'Will download:'
+ sample_list_subset = sample_list[start:stop]
+ for sample in sample_list_subset:
+ print sample
+ for sample in sample_list_subset:
+ assert sample, 'Sample should be valid.'
+ sample_info = [s.strip() for s in sample.split(DELIMITER)]
+ key = sample_info[0]
+ time = sample_info[1]
+ time = time.replace(' ', '_') # No space between date and time.
+ # sample_md5 = sample_info[2]
+ board = sample_info[3]
+ version = sample_info[4]
+
+ # Put a compressed copy of the samples in output directory.
+ _DownloadSampleFromServer(server_name, authtoken, key, time, board, version,
+ output_dir)
+ _UncompressSample(key, time, board, version, output_dir)
+
+
+def _BuildFilenameFromParams(key, time, board, version):
+ """Return the filename for our sample.
+ Args:
+ key: (string) Key indexing our sample in the datastore.
+ time: (string) Date that the sample was uploaded.
+ board: (string) Board that the sample was taken on.
+ version: (string) Version string from /etc/lsb-release
+ Returns:
+ filename (string)
+ """
+ filename = DELIMITER.join([key, time, board, version])
+ return filename
+
+
+def _DownloadSampleFromServer(server_name, authtoken, key, time, board, version,
+ output_dir):
+ """Downloads sample_$(samplekey).gz to current dir.
+ Args:
+ server_name: (string) URL that the app engine code is living on.
+ authtoken: (string) Authorization token.
+ key: (string) Key indexing our sample in the datastore
+ time: (string) Date that the sample was uploaded.
+ board: (string) Board that the sample was taken on.
+ version: (string) Version string from /etc/lsb-release
+ output_dir: (string) Filepath to write to output to.
+ Returns:
+ None
+ """
+ filename = _BuildFilenameFromParams(key, time, board, version)
+ compressed_filename = filename + '.gz'
+
+ if os.path.exists(os.path.join(output_dir, filename)):
+ print 'Already downloaded %s, skipping.' % filename
+ return
+
+ serv_uri = server_name + '/serve/' + key
+ serv_args = {'continue': serv_uri, 'auth': authtoken}
+ full_serv_uri = server_name + '/_ah/login?%s' % urllib.urlencode(serv_args)
+ serv_req = urllib2.Request(full_serv_uri)
+ serv_resp = urllib2.urlopen(serv_req)
+ f = open(os.path.join(output_dir, compressed_filename), 'w+')
+ f.write(serv_resp.read())
+ f.close()
+
+
+def _UncompressSample(key, time, board, version, output_dir):
+ """Uncompresses a given sample.gz file and deletes the compressed version.
+ Args:
+ key: (string) Sample key to uncompress.
+ time: (string) Date that the sample was uploaded.
+ board: (string) Board that the sample was taken on.
+ version: (string) Version string from /etc/lsb-release
+ output_dir: (string) Filepath to find sample key in.
+ Returns:
+ None
+ """
+ filename = _BuildFilenameFromParams(key, time, board, version)
+ compressed_filename = filename + '.gz'
+
+ if os.path.exists(os.path.join(output_dir, filename)):
+ print 'Already decompressed %s, skipping.' % filename
+ return
+
+ out_file = open(os.path.join(output_dir, filename), 'wb')
+ in_file = gzip.open(os.path.join(output_dir, compressed_filename), 'rb')
+ out_file.write(in_file.read())
+ in_file.close()
+ out_file.close()
+ os.remove(os.path.join(output_dir, compressed_filename))
+
+
+def _DeleteSampleFromServer(server_name, authtoken, key):
+ """Opens the /delete page with the specified key
+ to delete the sample off the datastore.
+ Args:
+ server_name: (string) URL that the app engine code is living on.
+ authtoken: (string) Authorization token.
+ key: (string) Key to delete.
+ Returns:
+ None
+ """
+
+ serv_uri = server_name + '/del/' + key
+ serv_args = {'continue': serv_uri, 'auth': authtoken}
+ full_serv_uri = server_name + '/_ah/login?%s' % urllib.urlencode(serv_args)
+ serv_req = urllib2.Request(full_serv_uri)
+ urllib2.urlopen(serv_req)
+
+
+def _GetServePage(server_name, authtoken):
+ """Opens the /serve page and lists all keys.
+ Args:
+ server_name: (string) URL the app engine code is living on.
+ authtoken: (string) Authorization token.
+ Returns:
+ The text of the /serve page (including HTML tags)
+ """
+
+ serv_uri = server_name + '/serve'
+ serv_args = {'continue': serv_uri, 'auth': authtoken}
+ full_serv_uri = server_name + '/_ah/login?%s' % urllib.urlencode(serv_args)
+ serv_req = urllib2.Request(full_serv_uri)
+ serv_resp = urllib2.urlopen(serv_req)
+ return serv_resp.read()
+
+
+def main():
+ parser = optparse.OptionParser()
+ parser.add_option('--output_dir',
+ dest='output_dir',
+ action='store',
+ help='Path to output perf data files.')
+ parser.add_option('--start',
+ dest='start_ind',
+ action='store',
+ default=0,
+ help='Start index.')
+ parser.add_option('--stop',
+ dest='stop_ind',
+ action='store',
+ default=-1,
+ help='Stop index.')
+ options = parser.parse_args()[0]
+ if not options.output_dir:
+ print 'Must specify --output_dir.'
+ return 1
+ if not os.path.exists(options.output_dir):
+ print 'Specified output_dir does not exist.'
+ return 1
+
+ authtoken = Authenticate(SERVER_NAME)
+ if not authtoken:
+ print 'Could not obtain authtoken, exiting.'
+ return 1
+ DownloadSamples(SERVER_NAME, authtoken, options.output_dir, options.start_ind,
+ options.stop_ind)
+ print 'Downloaded samples.'
+ return 0
+
+
+if __name__ == '__main__':
+ exit(main())
diff --git a/cwp/interpreter/symbolizer.py b/cwp/interpreter/symbolizer.py
new file mode 100644
index 00000000..4ece480d
--- /dev/null
+++ b/cwp/interpreter/symbolizer.py
@@ -0,0 +1,129 @@
+# Copyright 2012 Google Inc. All Rights Reserved.
+"""A script that symbolizes perf.data files."""
+import optparse
+import os
+import shutil
+from subprocess import call
+from subprocess import PIPE
+from subprocess import Popen
+from cros_utils import misc
+
+GSUTIL_CMD = 'gsutil cp gs://chromeos-image-archive/%s-release/%s/debug.tgz %s'
+TAR_CMD = 'tar -zxvf %s -C %s'
+PERF_BINARY = '/google/data/ro/projects/perf/perf'
+VMLINUX_FLAG = ' --vmlinux=/usr/lib/debug/boot/vmlinux'
+PERF_CMD = PERF_BINARY + ' report -i %s -n --symfs=%s' + VMLINUX_FLAG
+
+
+def main():
+ parser = optparse.OptionParser()
+ parser.add_option('--in', dest='in_dir')
+ parser.add_option('--out', dest='out_dir')
+ parser.add_option('--cache', dest='cache')
+ (opts, _) = parser.parse_args()
+ if not _ValidateOpts(opts):
+ return 1
+ else:
+ for filename in os.listdir(opts.in_dir):
+ try:
+ _DownloadSymbols(filename, opts.cache)
+ _PerfReport(filename, opts.in_dir, opts.out_dir, opts.cache)
+ except:
+ print 'Exception caught. Continuing...'
+ return 0
+
+
+def _ValidateOpts(opts):
+ """Ensures all directories exist, before attempting to populate."""
+ if not os.path.exists(opts.in_dir):
+ print "Input directory doesn't exist."
+ return False
+ if not os.path.exists(opts.out_dir):
+ print "Output directory doesn't exist. Creating it..."
+ os.makedirs(opts.out_dir)
+ if not os.path.exists(opts.cache):
+ print "Cache directory doesn't exist."
+ return False
+ return True
+
+
+def _ParseFilename(filename, canonical=False):
+ """Returns a tuple (key, time, board, lsb_version).
+ If canonical is True, instead returns (database_key, board, canonical_vers)
+ canonical_vers includes the revision string.
+ """
+ key, time, board, vers = filename.split('~')
+ if canonical:
+ vers = misc.GetChromeOSVersionFromLSBVersion(vers)
+ return (key, time, board, vers)
+
+
+def _FormReleaseDir(board, version):
+ return '%s-release~%s' % (board, version)
+
+
+def _DownloadSymbols(filename, cache):
+ """ Incrementally downloads appropriate symbols.
+ We store the downloads in cache, with each set of symbols in a TLD
+ named like cache/$board-release~$canonical_vers/usr/lib/debug
+ """
+ _, _, board, vers = _ParseFilename(filename, canonical=True)
+ tmp_suffix = '.tmp'
+
+ tarball_subdir = _FormReleaseDir(board, vers)
+ tarball_dir = os.path.join(cache, tarball_subdir)
+ tarball_path = os.path.join(tarball_dir, 'debug.tgz')
+
+ symbol_subdir = os.path.join('usr', 'lib')
+ symbol_dir = os.path.join(tarball_dir, symbol_subdir)
+
+ if os.path.isdir(symbol_dir):
+ print 'Symbol directory %s exists, skipping download.' % symbol_dir
+ return
+ else:
+ # First download using gsutil.
+ if not os.path.isfile(tarball_path):
+ download_cmd = GSUTIL_CMD % (board, vers, tarball_path + tmp_suffix)
+ print 'Downloading symbols for %s' % filename
+ print download_cmd
+ ret = call(download_cmd.split())
+ if ret != 0:
+ print 'gsutil returned non-zero error code: %s.' % ret
+ # Clean up the empty directory structures.
+ os.remove(tarball_path + tmp_suffix)
+ raise IOError
+
+ shutil.move(tarball_path + tmp_suffix, tarball_path)
+
+ # Next, untar the tarball.
+ os.makedirs(symbol_dir + tmp_suffix)
+ extract_cmd = TAR_CMD % (tarball_path, symbol_dir + tmp_suffix)
+ print 'Extracting symbols for %s' % filename
+ print extract_cmd
+ ret = call(extract_cmd.split())
+ if ret != 0:
+ print 'tar returned non-zero code: %s.' % ret
+ raise IOError
+ shutil.move(symbol_dir + tmp_suffix, symbol_dir)
+ os.remove(tarball_path)
+
+
+def _PerfReport(filename, in_dir, out_dir, cache):
+ """ Call perf report on the file, storing output to the output dir.
+ The output is currently stored as $out_dir/$filename
+ """
+ _, _, board, vers = _ParseFilename(filename, canonical=True)
+ symbol_cache_tld = _FormReleaseDir(board, vers)
+ input_file = os.path.join(in_dir, filename)
+ symfs = os.path.join(cache, symbol_cache_tld)
+ report_cmd = PERF_CMD % (input_file, symfs)
+ print 'Reporting.'
+ print report_cmd
+ report_proc = Popen(report_cmd.split(), stdout=PIPE)
+ outfile = open(os.path.join(out_dir, filename), 'w')
+ outfile.write(report_proc.stdout.read())
+ outfile.close()
+
+
+if __name__ == '__main__':
+ exit(main())
diff --git a/cwp/performance/experiment_gen.py b/cwp/performance/experiment_gen.py
new file mode 100644
index 00000000..a12da2c5
--- /dev/null
+++ b/cwp/performance/experiment_gen.py
@@ -0,0 +1,138 @@
+# Copyright 2012 Google Inc. All Rights Reserved.
+"""This script generates a crosperf overhead-testing experiment file for MoreJS.
+
+Use: experiment_gen.py --crosperf=/home/mrdmnd/depot2/crosperf --chromeos_root=
+/home/mrdmnd/chromiumos --remote-host=chromeos-zgb3.mtv --board=x86-zgb --event=
+cycles -F 10 -F 20 -c 10582 -c 10785211 --perf_options="-g"
+"""
+
+import optparse
+import subprocess
+import sys
+import time
+
+HEADER = """
+board: %s
+remote: %s
+benchmark: baseline {
+ iterations: %s
+ autotest_name: desktopui_PyAutoPerfTests
+ autotest_args: --args='--iterations=%s perf.PageCyclerTest.testMoreJSFile'
+}"""
+
+EXPERIMENT = """
+benchmark: %s {
+ iterations: %s
+ autotest_name: desktopui_PyAutoPerfTests
+ autotest_args: --args='--iterations=%s perf.PageCyclerTest.testMoreJSFile' --profiler=custom_perf --profiler_args='perf_options="record -a %s %s -e %s"' \n}""" # pylint: disable-msg=C6310
+
+DEFAULT_IMAGE = """
+default {
+ chromeos_image: %s/src/build/images/%s/latest/chromiumos_test_image.bin
+}"""
+
+
+def main():
+ parser = optparse.OptionParser()
+ parser.add_option('--crosperf',
+ dest='crosperf_root',
+ action='store',
+ default='/home/mrdmnd/depot2/crosperf',
+ help='Crosperf root directory.')
+ parser.add_option('--chromeos_root',
+ dest='chromeos_root',
+ action='store',
+ default='/home/mrdmnd/chromiumos',
+ help='ChromiumOS root directory.')
+ parser.add_option('--remote',
+ dest='remote',
+ action='store',
+ help='Host to run test on. Required.')
+ parser.add_option('--board',
+ dest='board',
+ action='store',
+ help='Board architecture to run on. Required.')
+ parser.add_option('--event',
+ dest='event',
+ action='store',
+ help='Event to profile. Required.')
+ parser.add_option('-F',
+ dest='sampling_frequencies',
+ action='append',
+ help='A target frequency to sample at.')
+ parser.add_option('-c',
+ dest='sampling_periods',
+ action='append',
+ help='A target period to sample at. Event specific.')
+ parser.add_option('--benchmark-iterations',
+ dest='benchmark_iterations',
+ action='store',
+ default=4,
+ help='Number of benchmark iters')
+ parser.add_option('--test-iterations',
+ dest='test_iterations',
+ action='store',
+ default=10,
+ help='Number of test iters')
+ parser.add_option('-p',
+ dest='print_only',
+ action='store_true',
+ help='If enabled, will print experiment file and exit.')
+ parser.add_option('--perf_options',
+ dest='perf_options',
+ action='store',
+ help='Arbitrary flags to perf. Surround with dblquotes.')
+ options = parser.parse_args()[0]
+ if options.remote is None:
+ print '%s requires a remote hostname.' % sys.argv[0]
+ return 1
+ elif options.board is None:
+ print '%s requires a target board.' % sys.argv[0]
+ return 1
+ elif options.event is None:
+ print '%s requires an event to profile.' % sys.argv[0]
+ return 1
+ else:
+ crosperf_root = options.crosperf_root
+ chromeos_root = options.chromeos_root
+ remote = options.remote
+ board = options.board
+ event = options.event
+ bench_iters = options.benchmark_iterations
+ test_iters = options.test_iterations
+ perf_opts = options.perf_options
+ # Set up baseline test.
+ experiment_file = HEADER % (board, remote, bench_iters, test_iters)
+ # Set up experimental tests.
+ if options.sampling_frequencies:
+ for freq in options.sampling_frequencies:
+ test_string = str(freq) + 'Freq'
+ experiment_file += EXPERIMENT % (test_string, bench_iters, test_iters,
+ '-F %s' % freq, '' if perf_opts is None
+ else perf_opts, event)
+ if options.sampling_periods:
+ for period in options.sampling_periods:
+ test_string = str(period) + 'Period'
+ experiment_file += EXPERIMENT % (
+ test_string, bench_iters, test_iters, '-c %s' % period, '' if
+ perf_opts is None else perf_opts, event)
+ # Point to the target image.
+ experiment_file += DEFAULT_IMAGE % (chromeos_root, board)
+ if options.print_only:
+ print experiment_file
+ else:
+ current_time = int(round(time.time() * 1000))
+ file_name = 'perf_overhead_%s' % str(current_time)
+ with open(file_name, 'w') as f:
+ f.write(experiment_file)
+ try:
+ process = subprocess.Popen(['%s/crosperf' % crosperf_root, file_name])
+ process.communicate()
+ except OSError:
+ print 'Could not find crosperf, make sure --crosperf flag is set right.'
+ return 1
+ return 0
+
+
+if __name__ == '__main__':
+ exit(main())
diff --git a/dejagnu/__init__.py b/dejagnu/__init__.py
new file mode 100644
index 00000000..8b137891
--- /dev/null
+++ b/dejagnu/__init__.py
@@ -0,0 +1 @@
+
diff --git a/dejagnu/boards/chromeos-machine.exp b/dejagnu/boards/chromeos-machine.exp
new file mode 100644
index 00000000..b168b677
--- /dev/null
+++ b/dejagnu/boards/chromeos-machine.exp
@@ -0,0 +1,13 @@
+# Base description of a unix machine. This includes remote execution logic
+# through SSH
+
+load_base_board_description "unix"
+
+# Set hostname and username. # Make sure SSH keys are set up prior to run.
+set_board_info hostname $env(DEJAGNU_HOSTNAME)
+set_board_info username root
+
+set_board_info shell_prompt "dejagnu>"
+set chromeos_ssh_opts "-t -o StrictHostKeyChecking=no -o UserKnownHostsFile=/tmp/chromeos-toolchain/known_hosts -o ControlPath=/tmp/chromeos-toolchain/%r@%h:%p -i /tmp/chromeos-toolchain/private_key"
+set_board_info rsh_prog "alarm 40 /usr/bin/ssh ${chromeos_ssh_opts}"
+set_board_info rcp_prog "alarm 40 /usr/bin/scp ${chromeos_ssh_opts}"
diff --git a/dejagnu/boards/gdb.exp.in b/dejagnu/boards/gdb.exp.in
new file mode 100644
index 00000000..e4bbab39
--- /dev/null
+++ b/dejagnu/boards/gdb.exp.in
@@ -0,0 +1,133 @@
+# Copyright 2011-2012 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 file is a dejagnu "board file" and is used to run the testsuite
+# natively with gdbserver.
+#
+# To use this file:
+# bash$ touch ${my_dejagnu_dir}/my-dejagnu.exp
+# bash$ export DEJAGNU=${my_dejagnu_dir}/my-dejagnu.exp
+# bash$ mkdir ${my_dejagnu_dir}/boards
+# bash$ cp ${src_dir}/gdb/testsuite/boards/native-gdbserver.exp \
+# ${my_dejagnu_dir}/boards
+# bash$ cd ${build_dir}/gdb
+# bash$ make check RUNTESTFLAGS="--target_board=native-gdbserver"
+
+load_generic_config "gdbserver"
+process_multilib_options ""
+
+# The default compiler for this target.
+set_board_info compiler "[find_gcc]"
+
+set_board_info cflags "-fno-stack-protector"
+set_board_info cxxflags "-fno-stack-protector"
+
+set remote_directory "/tmp"
+set chrome_device_ip __board_hostname__
+
+# This gdbserver can only run a process once per session.
+set_board_info gdb,do_reload_on_run 1
+
+# There's no support for argument-passing (yet).
+set_board_info noargs 1
+
+# Can't do input (or output) in the current gdbserver.
+set_board_info gdb,noinferiorio 1
+
+# gdbserver does not intercept target file operations and perform them
+# on the host.
+set_board_info gdb,nofileio 1
+
+#set_board_info sockethost "localhost:"
+set_board_info use_gdb_stub 1
+
+# We will be using the standard GDB remote protocol.
+set_board_info gdb_protocol "remote"
+
+# Test the copy of gdbserver in the build directory.
+# set_board_info gdb_server_prog "../gdbserver/gdbserver"
+
+# Can't do hardware watchpoints, in general (it depends on gdbserver support for your target arch)
+set_board_info gdb,no_hardware_watchpoints 1
+
+#Can't do record
+set_board_info gdb,use_precord 0
+set_board_info gdb,can_reverse 0
+
+
+set gdb_test_timeout 100
+set_board_info timeout 100
+
+set_board_info ssh,options "-i __tmp_testing_rsa__ -o ControlMaster=auto -o ControlPath=__tmp_dir__/%r@%h:%p -o StrictHostKeyChecking=no"
+
+set_board_info gdb_server_prog "__tmp_dir__/boards/gdbserver.sh "
+set_board_info sockethost "__board_hostname__:"
+set_board_info protocol standard
+set_board_info gdb,socketport "1234"
+
+
+proc ${board}_spawn { board cmd } {
+ global board_info
+
+ set baseboard [lindex [split $board "/"] 0]
+
+ set board_info($baseboard,isremote) 0
+ set result [remote_spawn $board $cmd]
+ set board_info($baseboard,isremote) 1
+
+ return $result
+}
+
+proc ${board}_exec { hostname program args } {
+ global board_info
+ verbose -log "$hostname $program $args"
+ set baseboard [lindex [split $hostname "/"] 0]
+
+ set board_info($baseboard,isremote) 0
+ set result [remote_exec $hostname $program $args]
+ set board_info($baseboard,isremote) 1
+
+ return $result
+}
+
+proc ${board}_download { board host dest } {
+ verbose -log "chrome_download $board $host $dest"
+ global board_info
+ set ssh_options [board_info $board ssh,options]
+
+ global chrome_device_ip remote_directory remote_file
+
+ verbose -log "scp -q $ssh_options $host root@$chrome_device_ip:$remote_directory/$dest"
+ set status [catch "exec scp -q $ssh_options $host root@$chrome_device_ip:$remote_directory/$dest" output]
+
+ if { $status == 0 } {
+ verbose -log "Copied $host to $remote_directory/$dest" 2
+ return "$remote_directory/$dest"
+ } else{
+ verbose -log "Download to $dest failed, $output." 2
+ return ""
+ }
+}
+
+proc ${board}_file { dest op args } {
+ if { $op == "delete" } {
+ return 0
+ }
+ return [eval [list standard_file $dest $op] $args]
+}
+
+proc skip_shlid_tests {} {
+ return 1
+}
diff --git a/dejagnu/boards/gdbserver.sh.in b/dejagnu/boards/gdbserver.sh.in
new file mode 100644
index 00000000..b74c685c
--- /dev/null
+++ b/dejagnu/boards/gdbserver.sh.in
@@ -0,0 +1,12 @@
+#!/bin/bash
+
+REMOTE_SSH_FLAGS="-i __tmp_testing_rsa__ -o StrictHostKeyChecking=no -o CheckHostIP=no -o BatchMode=yes -o ControlMaster=auto -o ControlPath=__tmp_dir__/%r@%h:%p"
+FLAGS_remote=__board_hostname__
+
+gdbserver_cmd="/usr/local/bin/gdbserver $1 $2 $3"
+ssh_cmd="nohup ${gdbserver_cmd} "
+
+echo "Executing: ssh ${RSA_FILE} ${REMOTE_SSH_FLAGS} root@${FLAGS_remote} \"${ssh_cmd}\"" >&2
+
+ssh ${REMOTE_SSH_FLAGS} root@${FLAGS_remote} "killall -9 gdbserver; ${ssh_cmd}"
+
diff --git a/dejagnu/chromeos.exp.in b/dejagnu/chromeos.exp.in
new file mode 100644
index 00000000..02fc3af2
--- /dev/null
+++ b/dejagnu/chromeos.exp.in
@@ -0,0 +1,175 @@
+#
+# Initialize the board. The function is executed before any test.
+#
+proc __boardname___init { board } {
+ set hostname [board_info $board hostname]
+ set timeout [board_info $board timeout]
+ set ssh_options [board_info $board ssh,options]
+ set runtimes [board_info $board runtimes]
+ set tmpdir [board_info $board tmpdir]
+ verbose -log "Opening persistent connection ..." 1
+ eval "exec ssh -N -f $ssh_options root@$hostname &"
+ local_exec "ssh -n $ssh_options root@$hostname sh -c 'mkdir -p $tmpdir'" \
+ {} {} $timeout
+}
+
+#
+# Remove test run by-products. The function is executed at DejaGNU exit.
+#
+proc __boardname___exit {} {
+ set board "__boardname__"
+ set hostname [board_info $board hostname]
+ set ssh_options [board_info $board ssh,options]
+ set tmpdir [board_info $board tmpdir]
+ verbose -log "Closing persistent connection ..." 1
+ local_exec "ssh $ssh_options -O exit root@$hostname" {} {} 10
+ verbose -log "Cleaning up - executing on board 'rm -fr $tmpdir' ..." 1
+ local_exec "ssh -n $ssh_options root@$hostname sh -c 'rm -fr $tmpdir'" \
+ {} {} 10
+}
+
+#
+# Upload a file to the board. Uses scp over persistent SSH connection.
+#
+proc __boardname___download { board file args } {
+ set hostname [board_info $board hostname]
+ set tmpdir [board_info $board tmpdir]
+ set timeout [board_info $board timeout]
+ set ssh_options [board_info $board ssh,options]
+ set destfile [lindex [file split $file] end]
+ verbose -log "scp -q $ssh_options $file root@$hostname:$tmpdir/"
+ set result [local_exec "scp -q $ssh_options $file root@$hostname:$tmpdir/" \
+ {} {} $timeout]
+ if { [lindex $result 0] != 0 } {
+ verbose -log "failed to upload \'$file\' to \'$tmpdir/$destfile\'"
+ } else {
+ verbose -log "uploaded \"$file\' to remote board@\'$tmpdir/$destfile\'"
+ return "$tmpdir/$destfile"
+ }
+}
+
+#
+# Download a file to the host machine. Uses scp over persistent SSH connection.
+#
+proc __boardname___upload { board file args } {
+ set hostname [board_info $board hostname]
+ set tmpdir [board_info $board tmpdir]
+ set timeout [board_info $board timeout]
+ set ssh_options [board_info $board ssh,options]
+ set filen [file tail $file]
+ verbose -log "scp -q $ssh_options \"root@$hostname:$tmpdir/$filen\" ."
+ set result [local_exec \
+ "scp -q $ssh_options \"root@$hostname:$tmpdir/$filen\" ." \
+ {} {} $timeout]
+ if { [lindex $result 0] != 0 } {
+ verbose -log \
+ "failed to transfer \"root@$hostname:$tmpdir/$filen\" to \".\""
+ } else {
+ verbose -log "transferred \"root@$hostname:$tmpdir/$filen\" to \".\""
+ # In case of success, always return the original file.
+ return "$file"
+ }
+}
+
+#
+# Cache program output within different invoking of __boardname___exec.
+# For example, the following command sequence will be executed
+# > cd /tmp/dejagnu_xxxx/ && ./xxx.x0
+# <output1 here>
+# return [0, <output1>] (a)
+# > rm /tmp/dejagnu_xxxx/xxxx.x0
+# <output2 here>
+# return [0, <output2>] (b)
+# We need <output1>, not <output2>. What we do here is to keep <output1> in
+# $program_output and in (b) we return [0, <output1>].
+#
+set program_output ""
+
+#
+# Execute a test on remote machine. Log into the target machine using
+# persistent SSH connection and run a command in modified environment.
+#
+proc __boardname___exec { board program args } {
+ global program_output
+ if { [llength $args] > 0 } {
+ set pargs [lindex $args 0]
+ } else {
+ set pargs ""
+ }
+
+ if { [llength $args] > 1 } {
+ set inp "[lindex $args 1]"
+ } else {
+ set inp ""
+ }
+
+ if { [llength $args] > 2 } {
+ set outp "[lindex $args 2]"
+ } else {
+ set outp ""
+ }
+
+ if { [llength $args] > 3 } {
+ set timeout "[lindex $args 3]"
+ } else {
+ set timeout [board_info $board timeout]
+ }
+
+ set hostname [board_info $board hostname]
+ set tmpdir [board_info $board tmpdir]
+ set other_file ""
+
+ # Check if a file to be executed was copied from host machine. If so, we
+ # need to run it in copied runtimes.
+ set is_program "0"
+ if { [string match "$tmpdir/*" $program] } {
+ set path [file dirname $program]
+ # "$program" would usually be like "/x/y/z.out", set command to be "z.out".
+ set command [file tail $program]
+ set rootname [file rootname $command]
+ # TODO(shenhan): using rsync to copy all test case relatd stuff to host
+ # machine in case ".o" files are different from the exe files.
+ set other_file [file join $path "${rootname}.*"]
+ # Change directory to "/x/y", then execute "./z.out" - we want the working
+ # directory to be "/x/y". Setting GCOV_PREFIX_STRIP and GCOV_PREFIX is to
+ # force generating ".gcda" file under "/x/y" instead of some host path.
+ set program "cd $path && GCOV_PREFIX_STRIP=999 GCOV_PREFIX=$tmpdir/ \
+ [file join "." $command]"
+ set is_program "1"
+ }
+ verbose -log "Exec: $program"
+ set ssh_options [board_info $board ssh,options]
+ set retv [local_exec \
+ "ssh -n $ssh_options root@$hostname sh -c '$program $pargs'" \
+ $inp $outp $timeout]
+ set status [lindex $retv 0]
+ if { $is_program == "1" } {
+ set program_output [lindex $retv 1]
+ }
+
+ # Before returning the execution status, we try to transfer the ".gcda"
+ # (and/or other files that have the same base name as the program) file to
+ # host, though for every program that runs, there is no corresponding "other"
+ # file. We have no idea when such an other file will be generated for the
+ # program, so every time, we assume there is an "other" file and try to do the
+ # transfer.
+ if { $status == 0 && $other_file != "" } {
+ set upv [${board}_upload $board $other_file ""]
+ if { $upv == "" } {
+ verbose -log "Safely ignored - \"$other_file\" does not exist."
+ }
+ }
+
+ return [list $status $program_output]
+}
+
+load_generic_config "unix"
+load_base_board_description "linux-libremote"
+
+set_board_info hostname "__board_hostname__"
+set_board_info tmpdir "__tmp_dir__"
+
+set_board_info isremote 1
+set_board_info timeout 60
+set_board_info ssh,options "-i __tmp_testing_rsa__ -o ControlMaster=auto \
+-o ControlPath=__tmp_dir__/%r@%h:%p -o StrictHostKeyChecking=no "
diff --git a/dejagnu/gdb_baseline/armv7a-cros-linux-gnueabi b/dejagnu/gdb_baseline/armv7a-cros-linux-gnueabi
new file mode 100644
index 00000000..e94a7905
--- /dev/null
+++ b/dejagnu/gdb_baseline/armv7a-cros-linux-gnueabi
@@ -0,0 +1,19079 @@
+Test Run By yunlian on Mon Dec 30 11:13:13 2013
+Target is armv7a-cros-linux-gnueabi
+
+ === gdb tests ===
+
+Schedule of variations:
+ daisy
+
+Running target daisy
+Running ./gdb.ada/aliased_array.exp ...
+UNSUPPORTED: gdb.ada/aliased_array.exp: compilation foo.adb
+Running ./gdb.ada/array_bounds.exp ...
+UNSUPPORTED: gdb.ada/array_bounds.exp: compilation bar.adb
+Running ./gdb.ada/arrayidx.exp ...
+UNSUPPORTED: gdb.ada/arrayidx.exp: compilation p.adb
+Running ./gdb.ada/arrayparam.exp ...
+UNSUPPORTED: gdb.ada/arrayparam.exp: compilation foo.adb
+Running ./gdb.ada/arrayptr.exp ...
+UNSUPPORTED: gdb.ada/arrayptr.exp: compilation foo.adb
+Running ./gdb.ada/array_return.exp ...
+UNSUPPORTED: gdb.ada/array_return.exp: compilation p.adb
+Running ./gdb.ada/array_subscript_addr.exp ...
+UNSUPPORTED: gdb.ada/array_subscript_addr.exp: compilation p.adb
+Running ./gdb.ada/assign_1.exp ...
+PASS: gdb.ada/assign_1.exp: Changing the language to ada
+PASS: gdb.ada/assign_1.exp: set convenience variable $xxx to 1
+Running ./gdb.ada/atomic_enum.exp ...
+UNSUPPORTED: gdb.ada/atomic_enum.exp: compilation foo.adb
+Running ./gdb.ada/bad-task-bp-keyword.exp ...
+UNSUPPORTED: gdb.ada/bad-task-bp-keyword.exp: compilation foo.adb
+Running ./gdb.ada/boolean_expr.exp ...
+PASS: gdb.ada/boolean_expr.exp: Changing the language to ada
+PASS: gdb.ada/boolean_expr.exp: print 1 = 2
+PASS: gdb.ada/boolean_expr.exp: print 3 = 3
+Running ./gdb.ada/bp_enum_homonym.exp ...
+UNSUPPORTED: gdb.ada/bp_enum_homonym.exp: compilation p.adb
+Running ./gdb.ada/bp_on_var.exp ...
+UNSUPPORTED: gdb.ada/bp_on_var.exp: compilation foo.adb
+Running ./gdb.ada/bp_range_type.exp ...
+UNSUPPORTED: gdb.ada/bp_range_type.exp: compilation foo.adb
+Running ./gdb.ada/bp_reset.exp ...
+UNSUPPORTED: gdb.ada/bp_reset.exp: compilation foo.adb
+Running ./gdb.ada/call_pn.exp ...
+UNSUPPORTED: gdb.ada/call_pn.exp: compilation foo.adb
+Running ./gdb.ada/catch_ex.exp ...
+UNSUPPORTED: gdb.ada/catch_ex.exp: compilation foo.adb
+Running ./gdb.ada/char_enum.exp ...
+UNSUPPORTED: gdb.ada/char_enum.exp: compilation foo.adb
+Running ./gdb.ada/char_param.exp ...
+UNSUPPORTED: gdb.ada/char_param.exp: compilation foo.adb
+Running ./gdb.ada/complete.exp ...
+UNSUPPORTED: gdb.ada/complete.exp: compilation foo.adb
+Running ./gdb.ada/cond_lang.exp ...
+UNSUPPORTED: gdb.ada/cond_lang.exp: compilation a.adb
+Running ./gdb.ada/dyn_loc.exp ...
+UNSUPPORTED: gdb.ada/dyn_loc.exp: compilation p.adb
+Running ./gdb.ada/enum_idx_packed.exp ...
+UNSUPPORTED: gdb.ada/enum_idx_packed.exp: compilation foo.adb
+Running ./gdb.ada/exec_changed.exp ...
+UNTESTED: gdb.ada/exec_changed.exp: exec_changed.exp
+Running ./gdb.ada/expr_delims.exp ...
+UNSUPPORTED: gdb.ada/expr_delims.exp: compilation foo.adb
+Running ./gdb.ada/exprs.exp ...
+UNSUPPORTED: gdb.ada/exprs.exp: compilation p.adb
+Running ./gdb.ada/fixed_cmp.exp ...
+UNSUPPORTED: gdb.ada/fixed_cmp.exp: compilation fixed.adb
+Running ./gdb.ada/fixed_points.exp ...
+UNSUPPORTED: gdb.ada/fixed_points.exp: compilation fixed_points.adb
+Running ./gdb.ada/formatted_ref.exp ...
+UNSUPPORTED: gdb.ada/formatted_ref.exp: compilation formatted_ref.adb
+UNTESTED: gdb.ada/formatted_ref.exp: formatted-ref.exp
+Running ./gdb.ada/frame_args.exp ...
+UNSUPPORTED: gdb.ada/frame_args.exp: compilation foo.adb
+Running ./gdb.ada/fullname_bp.exp ...
+UNSUPPORTED: gdb.ada/fullname_bp.exp: compilation foo.adb
+Running ./gdb.ada/fun_addr.exp ...
+UNSUPPORTED: gdb.ada/fun_addr.exp: compilation foo.adb
+Running ./gdb.ada/funcall_param.exp ...
+UNSUPPORTED: gdb.ada/funcall_param.exp: compilation foo.adb
+Running ./gdb.ada/fun_in_declare.exp ...
+UNSUPPORTED: gdb.ada/fun_in_declare.exp: compilation foo.adb
+Running ./gdb.ada/homonym.exp ...
+UNSUPPORTED: gdb.ada/homonym.exp: compilation homonym_main.adb
+Running ./gdb.ada/info_locals_renaming.exp ...
+UNSUPPORTED: gdb.ada/info_locals_renaming.exp: compilation foo.adb
+Running ./gdb.ada/info_types.exp ...
+PASS: gdb.ada/info_types.exp: set lang ada
+PASS: gdb.ada/info_types.exp: info types new_integer_type
+Running ./gdb.ada/int_deref.exp ...
+UNSUPPORTED: gdb.ada/int_deref.exp: compilation foo.adb
+Running ./gdb.ada/interface.exp ...
+UNSUPPORTED: gdb.ada/interface.exp: compilation foo.adb
+Running ./gdb.ada/iwide.exp ...
+UNSUPPORTED: gdb.ada/iwide.exp: compilation p.adb
+Running ./gdb.ada/lang_switch.exp ...
+UNSUPPORTED: gdb.ada/lang_switch.exp: compilation lang_switch.adb
+Running ./gdb.ada/mi_catch_ex.exp ...
+UNSUPPORTED: gdb.ada/mi_catch_ex.exp: compilation foo.adb
+Running ./gdb.ada/mi_task_arg.exp ...
+UNSUPPORTED: gdb.ada/mi_task_arg.exp: compilation task_switch.adb
+Running ./gdb.ada/mi_task_info.exp ...
+UNSUPPORTED: gdb.ada/mi_task_info.exp: compilation task_switch.adb
+Running ./gdb.ada/mod_from_name.exp ...
+UNSUPPORTED: gdb.ada/mod_from_name.exp: compilation foo.adb
+Running ./gdb.ada/nested.exp ...
+UNSUPPORTED: gdb.ada/nested.exp: compilation hello.adb
+Running ./gdb.ada/null_array.exp ...
+UNSUPPORTED: gdb.ada/null_array.exp: compilation foo.adb
+Running ./gdb.ada/null_record.exp ...
+UNSUPPORTED: gdb.ada/null_record.exp: compilation null_record.adb
+Running ./gdb.ada/operator_bp.exp ...
+UNSUPPORTED: gdb.ada/operator_bp.exp: compilation ops_test.adb
+Running ./gdb.ada/optim_drec.exp ...
+UNSUPPORTED: gdb.ada/optim_drec.exp: compilation foo.adb
+Running ./gdb.ada/packed_array.exp ...
+UNSUPPORTED: gdb.ada/packed_array.exp: compilation pa.adb
+Running ./gdb.ada/packed_tagged.exp ...
+UNSUPPORTED: gdb.ada/packed_tagged.exp: compilation comp_bug.adb
+Running ./gdb.ada/print_chars.exp ...
+UNSUPPORTED: gdb.ada/print_chars.exp: compilation foo.adb
+Running ./gdb.ada/print_pc.exp ...
+UNSUPPORTED: gdb.ada/print_pc.exp: compilation dummy.adb
+Running ./gdb.ada/ptr_typedef.exp ...
+UNSUPPORTED: gdb.ada/ptr_typedef.exp: compilation foo.adb
+Running ./gdb.ada/ptype_arith_binop.exp ...
+PASS: gdb.ada/ptype_arith_binop.exp: set lang ada
+PASS: gdb.ada/ptype_arith_binop.exp: ptype 3 * 2.0
+PASS: gdb.ada/ptype_arith_binop.exp: ptype 3 / 2.0
+Running ./gdb.ada/ptype_field.exp ...
+UNSUPPORTED: gdb.ada/ptype_field.exp: compilation foo.adb
+Running ./gdb.ada/ptype_tagged_param.exp ...
+UNSUPPORTED: gdb.ada/ptype_tagged_param.exp: compilation foo.adb
+Running ./gdb.ada/rdv_wait.exp ...
+UNSUPPORTED: gdb.ada/rdv_wait.exp: compilation foo.adb
+Running ./gdb.ada/rec_return.exp ...
+UNSUPPORTED: gdb.ada/rec_return.exp: compilation foo.adb
+Running ./gdb.ada/ref_param.exp ...
+UNSUPPORTED: gdb.ada/ref_param.exp: compilation foo.adb
+Running ./gdb.ada/ref_tick_size.exp ...
+UNSUPPORTED: gdb.ada/ref_tick_size.exp: compilation p.adb
+Running ./gdb.ada/same_enum.exp ...
+UNSUPPORTED: gdb.ada/same_enum.exp: compilation a.adb
+Running ./gdb.ada/set_pckd_arr_elt.exp ...
+UNSUPPORTED: gdb.ada/set_pckd_arr_elt.exp: compilation foo.adb
+Running ./gdb.ada/set_wstr.exp ...
+UNSUPPORTED: gdb.ada/set_wstr.exp: compilation a.adb
+Running ./gdb.ada/small_reg_param.exp ...
+UNSUPPORTED: gdb.ada/small_reg_param.exp: compilation foo.adb
+Running ./gdb.ada/start.exp ...
+UNTESTED: gdb.ada/start.exp: start.exp
+Running ./gdb.ada/str_ref_cmp.exp ...
+UNSUPPORTED: gdb.ada/str_ref_cmp.exp: compilation foo.adb
+Running ./gdb.ada/sym_print_name.exp ...
+UNSUPPORTED: gdb.ada/sym_print_name.exp: compilation foo.adb
+Running ./gdb.ada/taft_type.exp ...
+UNSUPPORTED: gdb.ada/taft_type.exp: compilation p.adb
+Running ./gdb.ada/tagged.exp ...
+UNSUPPORTED: gdb.ada/tagged.exp: compilation foo.adb
+Running ./gdb.ada/tagged_not_init.exp ...
+UNSUPPORTED: gdb.ada/tagged_not_init.exp: compilation foo.adb
+Running ./gdb.ada/task_bp.exp ...
+UNSUPPORTED: gdb.ada/task_bp.exp: compilation foo.adb
+Running ./gdb.ada/tasks.exp ...
+UNSUPPORTED: gdb.ada/tasks.exp: compilation foo.adb
+Running ./gdb.ada/tick_last_segv.exp ...
+UNSUPPORTED: gdb.ada/tick_last_segv.exp: compilation foo.adb
+Running ./gdb.ada/type_coercion.exp ...
+UNSUPPORTED: gdb.ada/type_coercion.exp: compilation assign.adb
+Running ./gdb.ada/unc_arr_ptr_in_var_rec.exp ...
+UNSUPPORTED: gdb.ada/unc_arr_ptr_in_var_rec.exp: compilation foo.adb
+Running ./gdb.ada/uninitialized_vars.exp ...
+UNSUPPORTED: gdb.ada/uninitialized_vars.exp: compilation parse.adb
+Running ./gdb.ada/variant_record_packed_array.exp ...
+UNSUPPORTED: gdb.ada/variant_record_packed_array.exp: compilation foo.adb
+Running ./gdb.ada/watch_arg.exp ...
+UNSUPPORTED: gdb.ada/watch_arg.exp: compilation watch.adb
+Running ./gdb.ada/whatis_array_val.exp ...
+UNSUPPORTED: gdb.ada/whatis_array_val.exp: compilation foo.adb
+Running ./gdb.ada/widewide.exp ...
+UNSUPPORTED: gdb.ada/widewide.exp: compilation foo.adb
+Running ./gdb.arch/alpha-step.exp ...
+Running ./gdb.arch/altivec-abi.exp ...
+Running ./gdb.arch/altivec-regs.exp ...
+Running ./gdb.arch/amd64-byte.exp ...
+Running ./gdb.arch/amd64-disp-step.exp ...
+Running ./gdb.arch/amd64-dword.exp ...
+Running ./gdb.arch/amd64-entry-value.exp ...
+Running ./gdb.arch/amd64-entry-value-inline.exp ...
+Running ./gdb.arch/amd64-entry-value-param.exp ...
+Running ./gdb.arch/amd64-i386-address.exp ...
+Running ./gdb.arch/amd64-prologue-xmm.exp ...
+Running ./gdb.arch/amd64-tailcall-cxx.exp ...
+Running ./gdb.arch/amd64-tailcall-noret.exp ...
+Running ./gdb.arch/amd64-tailcall-ret.exp ...
+Running ./gdb.arch/amd64-word.exp ...
+Running ./gdb.arch/arm-bl-branch-dest.exp ...
+ERROR: tcl error sourcing ./gdb.arch/arm-bl-branch-dest.exp.
+ERROR: : spawn id exp7 not open
+ while executing
+"expect_background {
+ -i $server_spawn_id
+ full_buffer { }
+ eof {
+ # The spawn ID is already closed now (but not yet waited for).
+ wait -i $exp..."
+ (procedure "gdbserver_start" line 85)
+ invoked from within
+"gdbserver_start "" $arguments"
+ (procedure "gdbserver_spawn" line 11)
+ invoked from within
+"gdbserver_spawn $child_args"
+ (procedure "gdbserver_run" line 20)
+ invoked from within
+"gdbserver_run """
+ (procedure "gdb_reload" line 2)
+ invoked from within
+"gdb_reload"
+ invoked from within
+"if [target_info exists gdb,do_reload_on_run] {
+ if { [gdb_reload] != 0 } {
+ return;
+ }
+ send_gdb "continue\n";
+ gdb_expect 60 {
+ -re..."
+ invoked from within
+"if $use_gdb_stub {
+ if [target_info exists gdb,do_reload_on_run] {
+ if { [gdb_reload] != 0 } {
+ return;
+ }
+ send_gdb "continue\n";
+ g..."
+ (procedure "gdb_run_cmd" line 15)
+ invoked from within
+"gdb_run_cmd"
+ (procedure "runto" line 32)
+ invoked from within
+"runto main no-message"
+ (procedure "runto_main" line 2)
+ invoked from within
+"runto_main"
+ invoked from within
+"if { ![runto_main] } {
+ return -1
+}"
+ (file "./gdb.arch/arm-bl-branch-dest.exp" line 33)
+ invoked from within
+"source ./gdb.arch/arm-bl-branch-dest.exp"
+ ("uplevel" body line 1)
+ invoked from within
+"uplevel #0 source ./gdb.arch/arm-bl-branch-dest.exp"
+ invoked from within
+"catch "uplevel #0 source $test_file_name""
+Running ./gdb.arch/arm-disp-step.exp ...
+PASS: gdb.arch/arm-disp-step.exp: set displaced-stepping off
+PASS: gdb.arch/arm-disp-step.exp: set displaced-stepping on
+PASS: gdb.arch/arm-disp-step.exp: show displaced-stepping
+PASS: gdb.arch/arm-disp-step.exp: break test_call
+PASS: gdb.arch/arm-disp-step.exp: break test_call_end
+PASS: gdb.arch/arm-disp-step.exp: break test_ret
+PASS: gdb.arch/arm-disp-step.exp: break test_ret_end
+PASS: gdb.arch/arm-disp-step.exp: continue to breakpoint: test_call
+PASS: gdb.arch/arm-disp-step.exp: continue to breakpoint: test_call_end
+PASS: gdb.arch/arm-disp-step.exp: continue to breakpoint: test_ret
+PASS: gdb.arch/arm-disp-step.exp: continue to breakpoint: continue to test_ret_end
+PASS: gdb.arch/arm-disp-step.exp: break test_branch
+PASS: gdb.arch/arm-disp-step.exp: break Lbranch
+PASS: gdb.arch/arm-disp-step.exp: continue to breakpoint: continue to test_branch
+PASS: gdb.arch/arm-disp-step.exp: continue to breakpoint: continue to Lbranch
+PASS: gdb.arch/arm-disp-step.exp: break test_ldr_pc
+PASS: gdb.arch/arm-disp-step.exp: break test_ldr_pc_ret
+PASS: gdb.arch/arm-disp-step.exp: continue to breakpoint: continue to test_ldr_pc
+PASS: gdb.arch/arm-disp-step.exp: continue to breakpoint: continue to test_ldr_pc_ret
+PASS: gdb.arch/arm-disp-step.exp: break test_ldm_stm_pc
+PASS: gdb.arch/arm-disp-step.exp: break test_ldr_literal
+PASS: gdb.arch/arm-disp-step.exp: break test_ldrsb_literal
+PASS: gdb.arch/arm-disp-step.exp: break test_ldrsh_literal
+PASS: gdb.arch/arm-disp-step.exp: break test_test_ldr_literal_end
+PASS: gdb.arch/arm-disp-step.exp: continue to breakpoint: continue to test_ldr_literal
+PASS: gdb.arch/arm-disp-step.exp: continue to breakpoint: continue to test_ldrsb_literal
+PASS: gdb.arch/arm-disp-step.exp: continue to breakpoint: continue to test_ldrsh_literal
+PASS: gdb.arch/arm-disp-step.exp: continue to breakpoint: continue to test_ldr_literal_ret
+PASS: gdb.arch/arm-disp-step.exp: break test_ldr_literal
+PASS: gdb.arch/arm-disp-step.exp: break test_ldr_literal_16_end
+PASS: gdb.arch/arm-disp-step.exp: continue to breakpoint: continue to test_ldr_literal_16
+PASS: gdb.arch/arm-disp-step.exp: continue to breakpoint: continue to test_ldr_literal_16_end
+PASS: gdb.arch/arm-disp-step.exp: break test_ldr_literal
+PASS: gdb.arch/arm-disp-step.exp: break test_zero_cbz
+PASS: gdb.arch/arm-disp-step.exp: break test_non_zero_cbnz
+PASS: gdb.arch/arm-disp-step.exp: break test_non_zero_cbz
+PASS: gdb.arch/arm-disp-step.exp: continue to breakpoint: continue to test_zero_cbnz
+PASS: gdb.arch/arm-disp-step.exp: continue to breakpoint: continue to test_zero_cbz
+PASS: gdb.arch/arm-disp-step.exp: continue to breakpoint: continue to test_non_zero_cbz
+PASS: gdb.arch/arm-disp-step.exp: continue to breakpoint: continue to test_non_zero_cbnz
+PASS: gdb.arch/arm-disp-step.exp: break test_adr
+PASS: gdb.arch/arm-disp-step.exp: break test_adr_end
+PASS: gdb.arch/arm-disp-step.exp: continue to breakpoint: test_adr
+PASS: gdb.arch/arm-disp-step.exp: continue to breakpoint: test_adr_end
+PASS: gdb.arch/arm-disp-step.exp: break test_adr
+PASS: gdb.arch/arm-disp-step.exp: break test_adr_32bit_after
+PASS: gdb.arch/arm-disp-step.exp: break test_adr_32bit_end
+PASS: gdb.arch/arm-disp-step.exp: continue to breakpoint: test_adr_32bit
+PASS: gdb.arch/arm-disp-step.exp: continue to breakpoint: test_adr_32bit_after
+PASS: gdb.arch/arm-disp-step.exp: continue to breakpoint: test_adr_32bit_end
+PASS: gdb.arch/arm-disp-step.exp: break test_pop_pc_1
+PASS: gdb.arch/arm-disp-step.exp: break test_pop_pc_2
+PASS: gdb.arch/arm-disp-step.exp: break test_pop_pc_3
+PASS: gdb.arch/arm-disp-step.exp: break test_pop_pc_ret
+PASS: gdb.arch/arm-disp-step.exp: break test_pop_pc_1_right
+PASS: gdb.arch/arm-disp-step.exp: break test_pop_pc_1_wrong
+PASS: gdb.arch/arm-disp-step.exp: break test_pop_pc_2_right
+PASS: gdb.arch/arm-disp-step.exp: break test_pop_pc_2_wrong
+PASS: gdb.arch/arm-disp-step.exp: break test_pop_pc_3_right
+PASS: gdb.arch/arm-disp-step.exp: break test_pop_pc_1_wrong
+PASS: gdb.arch/arm-disp-step.exp: continue to breakpoint: continue to test_pop_pc_1
+PASS: gdb.arch/arm-disp-step.exp: continue to breakpoint: continue to test_pop_pc_1_check
+PASS: gdb.arch/arm-disp-step.exp: continue to breakpoint: continue to test_pop_pc_2
+PASS: gdb.arch/arm-disp-step.exp: continue to breakpoint: continue to test_pop_pc_2_check
+PASS: gdb.arch/arm-disp-step.exp: continue to breakpoint: continue to test_pop_pc_3
+PASS: gdb.arch/arm-disp-step.exp: continue to breakpoint: continue to test_pop_pc_3_check
+PASS: gdb.arch/arm-disp-step.exp: continue to breakpoint: continue to test_pop_pc_ret
+PASS: gdb.arch/arm-disp-step.exp: break test_str_pc
+FAIL: gdb.arch/arm-disp-step.exp: setting breakpoint at exit
+Running ./gdb.arch/e500-abi.exp ...
+Running ./gdb.arch/e500-prologue.exp ...
+Running ./gdb.arch/e500-regs.exp ...
+Running ./gdb.arch/gdb1291.exp ...
+Running ./gdb.arch/gdb1431.exp ...
+Running ./gdb.arch/gdb1558.exp ...
+Running ./gdb.arch/i386-avx.exp ...
+Running ./gdb.arch/i386-bp_permanent.exp ...
+Running ./gdb.arch/i386-byte.exp ...
+Running ./gdb.arch/i386-cfi-notcurrent.exp ...
+Running ./gdb.arch/i386-disp-step.exp ...
+Running ./gdb.arch/i386-dr3-watch.exp ...
+Running ./gdb.arch/i386-float.exp ...
+Running ./gdb.arch/i386-gnu-cfi.exp ...
+Running ./gdb.arch/i386-permbkpt.exp ...
+Running ./gdb.arch/i386-prologue.exp ...
+Running ./gdb.arch/i386-signal.exp ...
+Running ./gdb.arch/i386-size.exp ...
+Running ./gdb.arch/i386-size-overlap.exp ...
+Running ./gdb.arch/i386-sse.exp ...
+Running ./gdb.arch/i386-sse-stack-align.exp ...
+Running ./gdb.arch/i386-unwind.exp ...
+Running ./gdb.arch/i386-word.exp ...
+Running ./gdb.arch/ia64-breakpoint-shadow.exp ...
+Running ./gdb.arch/iwmmxt-regs.exp ...
+Running ./gdb.arch/mips16-thunks.exp ...
+Running ./gdb.arch/mips-octeon-bbit.exp ...
+Running ./gdb.arch/pa-nullify.exp ...
+Running ./gdb.arch/powerpc-aix-prologue.exp ...
+Running ./gdb.arch/powerpc-d128-regs.exp ...
+Running ./gdb.arch/powerpc-prologue.exp ...
+Running ./gdb.arch/ppc64-atomic-inst.exp ...
+Running ./gdb.arch/ppc-dfp.exp ...
+Running ./gdb.arch/ppc-fp.exp ...
+Running ./gdb.arch/spu-info.exp ...
+Running ./gdb.arch/spu-ls.exp ...
+Running ./gdb.arch/system-gcore.exp ...
+Running ./gdb.arch/thumb2-it.exp ...
+PASS: gdb.arch/thumb2-it.exp: list main
+PASS: gdb.arch/thumb2-it.exp: it_1, call
+PASS: gdb.arch/thumb2-it.exp: it_1, stepi 0
+PASS: gdb.arch/thumb2-it.exp: it_1, stepi 1
+PASS: gdb.arch/thumb2-it.exp: it_1, stepi 2
+PASS: gdb.arch/thumb2-it.exp: it_1, stepi 3
+PASS: gdb.arch/thumb2-it.exp: it_1, correct instructions reached
+PASS: gdb.arch/thumb2-it.exp: it_1, continue
+PASS: gdb.arch/thumb2-it.exp: it_2, call
+PASS: gdb.arch/thumb2-it.exp: it_2, stepi 0
+PASS: gdb.arch/thumb2-it.exp: it_2, stepi 1
+PASS: gdb.arch/thumb2-it.exp: it_2, stepi 2
+PASS: gdb.arch/thumb2-it.exp: it_2, correct instructions reached
+PASS: gdb.arch/thumb2-it.exp: it_2, $r0 == 0
+PASS: gdb.arch/thumb2-it.exp: it_2, continue
+PASS: gdb.arch/thumb2-it.exp: it_3, call
+PASS: gdb.arch/thumb2-it.exp: it_3, stepi 0
+PASS: gdb.arch/thumb2-it.exp: it_3, stepi 1
+PASS: gdb.arch/thumb2-it.exp: it_3, stepi 2
+PASS: gdb.arch/thumb2-it.exp: it_3, stepi 3
+PASS: gdb.arch/thumb2-it.exp: it_3, stepi 4
+PASS: gdb.arch/thumb2-it.exp: it_3, correct instructions reached
+PASS: gdb.arch/thumb2-it.exp: it_3, $r0 == 5
+PASS: gdb.arch/thumb2-it.exp: it_3, continue
+PASS: gdb.arch/thumb2-it.exp: it_4, call
+PASS: gdb.arch/thumb2-it.exp: it_4, stepi 0
+PASS: gdb.arch/thumb2-it.exp: it_4, stepi 1
+PASS: gdb.arch/thumb2-it.exp: it_4, stepi 2
+PASS: gdb.arch/thumb2-it.exp: it_4, stepi 3
+PASS: gdb.arch/thumb2-it.exp: it_4, stepi 4
+PASS: gdb.arch/thumb2-it.exp: it_4, correct instructions reached
+PASS: gdb.arch/thumb2-it.exp: it_4, $r0 == 1
+PASS: gdb.arch/thumb2-it.exp: it_4, continue
+PASS: gdb.arch/thumb2-it.exp: it_5, call
+PASS: gdb.arch/thumb2-it.exp: it_5, stepi 0
+PASS: gdb.arch/thumb2-it.exp: it_5, stepi 1
+PASS: gdb.arch/thumb2-it.exp: it_5, stepi 2
+PASS: gdb.arch/thumb2-it.exp: it_5, stepi 3
+PASS: gdb.arch/thumb2-it.exp: it_5, stepi 4
+PASS: gdb.arch/thumb2-it.exp: it_5, correct instructions reached
+PASS: gdb.arch/thumb2-it.exp: it_5, $r0 == 1
+PASS: gdb.arch/thumb2-it.exp: it_5, continue
+PASS: gdb.arch/thumb2-it.exp: it_6, call
+PASS: gdb.arch/thumb2-it.exp: it_6, stepi 0
+PASS: gdb.arch/thumb2-it.exp: it_6, stepi 1
+PASS: gdb.arch/thumb2-it.exp: it_6, stepi 2
+PASS: gdb.arch/thumb2-it.exp: it_6, stepi 3
+PASS: gdb.arch/thumb2-it.exp: it_6, stepi 4
+PASS: gdb.arch/thumb2-it.exp: it_6, correct instructions reached
+PASS: gdb.arch/thumb2-it.exp: it_6, $r0 == 3
+PASS: gdb.arch/thumb2-it.exp: it_6, continue
+PASS: gdb.arch/thumb2-it.exp: it_7, call
+PASS: gdb.arch/thumb2-it.exp: it_7, stepi 0
+PASS: gdb.arch/thumb2-it.exp: it_7, stepi 1
+PASS: gdb.arch/thumb2-it.exp: it_7, stepi 2
+PASS: gdb.arch/thumb2-it.exp: it_7, stepi 3
+PASS: gdb.arch/thumb2-it.exp: it_7, stepi 4
+PASS: gdb.arch/thumb2-it.exp: it_7, stepi 5
+PASS: gdb.arch/thumb2-it.exp: it_7, stepi 6
+PASS: gdb.arch/thumb2-it.exp: it_7, correct instructions reached
+PASS: gdb.arch/thumb2-it.exp: it_7, $r0 == 15
+PASS: gdb.arch/thumb2-it.exp: it_7, continue
+PASS: gdb.arch/thumb2-it.exp: it_8, call
+PASS: gdb.arch/thumb2-it.exp: it_8, stepi 0
+PASS: gdb.arch/thumb2-it.exp: it_8, stepi 1
+PASS: gdb.arch/thumb2-it.exp: it_8, stepi 2
+PASS: gdb.arch/thumb2-it.exp: it_8, stepi 3
+PASS: gdb.arch/thumb2-it.exp: it_8, correct instructions reached
+PASS: gdb.arch/thumb2-it.exp: it_8, $r0 == 1
+PASS: gdb.arch/thumb2-it.exp: it_8, continue
+PASS: gdb.arch/thumb2-it.exp: call it_breakpoints()
+PASS: gdb.arch/thumb2-it.exp: continue to breakpoint: test 1
+PASS: gdb.arch/thumb2-it.exp: continue to breakpoint: test 2
+PASS: gdb.arch/thumb2-it.exp: continue to breakpoint: test 3
+PASS: gdb.arch/thumb2-it.exp: continue to breakpoint: test 4
+PASS: gdb.arch/thumb2-it.exp: continue to breakpoint: test 5
+PASS: gdb.arch/thumb2-it.exp: continue to breakpoint: test 6
+PASS: gdb.arch/thumb2-it.exp: continue to breakpoint: test 7
+Running ./gdb.arch/thumb-bx-pc.exp ...
+PASS: gdb.arch/thumb-bx-pc.exp: stepi for bx pc
+PASS: gdb.arch/thumb-bx-pc.exp: stepi reached correct instruction
+Running ./gdb.arch/thumb-prologue.exp ...
+PASS: gdb.arch/thumb-prologue.exp: continue to TPCS
+PASS: gdb.arch/thumb-prologue.exp: backtrace in TPCS
+PASS: gdb.arch/thumb-prologue.exp: saved registers in TPCS
+PASS: gdb.arch/thumb-prologue.exp: continue to switch_stack_to_same
+PASS: gdb.arch/thumb-prologue.exp: stepi over mov sp, sp
+PASS: gdb.arch/thumb-prologue.exp: backtrace in write_sp
+PASS: gdb.arch/thumb-prologue.exp: continue to switch_stack_to_other
+PASS: gdb.arch/thumb-prologue.exp: stepi over mov sp, 128
+PASS: gdb.arch/thumb-prologue.exp: backtrace in write_sp
+Running ./gdb.arch/thumb-singlestep.exp ...
+PASS: gdb.arch/thumb-singlestep.exp: step into foo
+Running ./gdb.arch/vsx-regs.exp ...
+Running ./gdb.asm/asm-source.exp ...
+PASS: gdb.asm/asm-source.exp: f at main
+PASS: gdb.asm/asm-source.exp: next over macro
+PASS: gdb.asm/asm-source.exp: step into foo2
+PASS: gdb.asm/asm-source.exp: info target
+PASS: gdb.asm/asm-source.exp: info symbol
+PASS: gdb.asm/asm-source.exp: list
+PASS: gdb.asm/asm-source.exp: search
+PASS: gdb.asm/asm-source.exp: f in foo2
+PASS: gdb.asm/asm-source.exp: n in foo2
+PASS: gdb.asm/asm-source.exp: bt ALL in foo2
+PASS: gdb.asm/asm-source.exp: bt 2 in foo2
+PASS: gdb.asm/asm-source.exp: s 2
+PASS: gdb.asm/asm-source.exp: n 2
+PASS: gdb.asm/asm-source.exp: bt 3 in foo3
+PASS: gdb.asm/asm-source.exp: info source asmsrc1.s
+PASS: gdb.asm/asm-source.exp: finish from foo3
+PASS: gdb.asm/asm-source.exp: info source asmsrc2.s
+PASS: gdb.asm/asm-source.exp: info sources
+PASS: gdb.asm/asm-source.exp: info line
+PASS: gdb.asm/asm-source.exp: next over foo3
+PASS: gdb.asm/asm-source.exp: return from foo2
+PASS: gdb.asm/asm-source.exp: look at global variable
+PASS: gdb.asm/asm-source.exp: x/i &globalvar
+PASS: gdb.asm/asm-source.exp: disassem &globalvar, &globalvar+1
+PASS: gdb.asm/asm-source.exp: look at static variable
+PASS: gdb.asm/asm-source.exp: x/i &staticvar
+PASS: gdb.asm/asm-source.exp: disassem &staticvar, &staticvar+1
+PASS: gdb.asm/asm-source.exp: look at static function
+Running ./gdb.base/a2-run.exp ...
+Running ./gdb.base/advance.exp ...
+PASS: gdb.base/advance.exp: advance line number
+PASS: gdb.base/advance.exp: malformed advance
+PASS: gdb.base/advance.exp: advance func
+PASS: gdb.base/advance.exp: advance function not called by current frame
+PASS: gdb.base/advance.exp: set breakpoint at call to func3
+PASS: gdb.base/advance.exp: continue to call to func3 in main
+PASS: gdb.base/advance.exp: advance function called as param
+PASS: gdb.base/advance.exp: advance with no argument
+Running ./gdb.base/alias.exp ...
+PASS: gdb.base/alias.exp: alias -a set2=set
+PASS: gdb.base/alias.exp: set2 print elements 42
+PASS: gdb.base/alias.exp: verify set2
+PASS: gdb.base/alias.exp: abbrev set2 not present in help command list
+PASS: gdb.base/alias.exp: alias -a set3= set
+PASS: gdb.base/alias.exp: set3 print elements 43
+PASS: gdb.base/alias.exp: verify set3
+PASS: gdb.base/alias.exp: abbrev set3 not present in help command list
+PASS: gdb.base/alias.exp: alias -a set4 =set
+PASS: gdb.base/alias.exp: set4 print elements 44
+PASS: gdb.base/alias.exp: verify set4
+PASS: gdb.base/alias.exp: abbrev set4 not present in help command list
+PASS: gdb.base/alias.exp: alias -a set5 = set
+PASS: gdb.base/alias.exp: set5 print elements 45
+PASS: gdb.base/alias.exp: verify set5
+PASS: gdb.base/alias.exp: abbrev set5 not present in help command list
+PASS: gdb.base/alias.exp: alias -a -- set6 = set
+PASS: gdb.base/alias.exp: set6 print elements 46
+PASS: gdb.base/alias.exp: verify set6
+PASS: gdb.base/alias.exp: abbrev set6 not present in help command list
+PASS: gdb.base/alias.exp: alias -a -- -a = set
+PASS: gdb.base/alias.exp: -a print elements 47
+PASS: gdb.base/alias.exp: verify -a
+PASS: gdb.base/alias.exp: abbrev -a not present in help command list
+PASS: gdb.base/alias.exp: alias set2=set
+PASS: gdb.base/alias.exp: alias foo=bar
+PASS: gdb.base/alias.exp: alias spe = set p elem
+PASS: gdb.base/alias.exp: spe 50
+PASS: gdb.base/alias.exp: verify spe
+PASS: gdb.base/alias.exp: alias set pr elms = set p elem
+PASS: gdb.base/alias.exp: set pr elms 51
+PASS: gdb.base/alias.exp: verify set pr elms
+PASS: gdb.base/alias.exp: help set print
+Running ./gdb.base/all-bin.exp ...
+PASS: gdb.base/all-bin.exp: continuing after dummy()
+PASS: gdb.base/all-bin.exp: print value of v_int+v_char
+PASS: gdb.base/all-bin.exp: print value of v_int+v_short
+PASS: gdb.base/all-bin.exp: print value of v_int+v_signed_char
+PASS: gdb.base/all-bin.exp: print value of v_int+v_unsigned_char
+PASS: gdb.base/all-bin.exp: print value of v_int+v_signed_short
+PASS: gdb.base/all-bin.exp: print value of v_int+v_unsigned_short
+PASS: gdb.base/all-bin.exp: print value of v_int+v_signed_int
+PASS: gdb.base/all-bin.exp: print value of v_int+v_unsigned_int
+PASS: gdb.base/all-bin.exp: print value of v_int+v_long
+PASS: gdb.base/all-bin.exp: print value of v_int+v_signed_long
+PASS: gdb.base/all-bin.exp: print value of v_int+v_unsigned_long
+PASS: gdb.base/all-bin.exp: print value of v_int+v_float
+PASS: gdb.base/all-bin.exp: print value of v_int+v_double
+PASS: gdb.base/all-bin.exp: print value of v_int<=v_char
+PASS: gdb.base/all-bin.exp: print value of v_int<=v_short
+PASS: gdb.base/all-bin.exp: print value of v_int<=v_signed_char
+PASS: gdb.base/all-bin.exp: print value of v_int<=v_unsigned_char
+PASS: gdb.base/all-bin.exp: print value of v_int<=v_signed_short
+PASS: gdb.base/all-bin.exp: print value of v_int<=v_unsigned_short
+PASS: gdb.base/all-bin.exp: print value of v_int<=v_signed_int
+PASS: gdb.base/all-bin.exp: print value of v_int<=v_unsigned_int
+PASS: gdb.base/all-bin.exp: print value of v_int<=v_long
+PASS: gdb.base/all-bin.exp: print value of v_int<=v_signed_long
+PASS: gdb.base/all-bin.exp: print value of v_int<=v_unsigned_long
+PASS: gdb.base/all-bin.exp: print value of v_int<=v_float
+PASS: gdb.base/all-bin.exp: print value of v_int<=v_double
+PASS: gdb.base/all-bin.exp: set v_char=0
+PASS: gdb.base/all-bin.exp: set v_double=0
+PASS: gdb.base/all-bin.exp: set v_unsigned_long=0
+PASS: gdb.base/all-bin.exp: print value of v_int&&v_char
+PASS: gdb.base/all-bin.exp: print value of v_int&&v_short
+PASS: gdb.base/all-bin.exp: print value of v_int&&v_signed_char
+PASS: gdb.base/all-bin.exp: print value of v_int&&v_unsigned_char
+PASS: gdb.base/all-bin.exp: print value of v_int&&v_signed_short
+PASS: gdb.base/all-bin.exp: print value of v_int&&v_unsigned_short
+PASS: gdb.base/all-bin.exp: print value of v_int&&v_signed_int
+PASS: gdb.base/all-bin.exp: print value of v_int&&v_unsigned_int
+PASS: gdb.base/all-bin.exp: print value of v_int&&v_long
+PASS: gdb.base/all-bin.exp: print value of v_int&&v_signed_long
+PASS: gdb.base/all-bin.exp: print value of v_int&&v_unsigned_long
+PASS: gdb.base/all-bin.exp: print value of v_int&&v_float
+PASS: gdb.base/all-bin.exp: print value of v_int&&v_double
+Running ./gdb.base/annota1.exp ...
+Running ./gdb.base/annota3.exp ...
+Running ./gdb.base/anon.exp ...
+PASS: gdb.base/anon.exp: set breakpoint in anon.c
+PASS: gdb.base/anon.exp: continue to breakpoint: continue to breakpoint in anon.c
+PASS: gdb.base/anon.exp: print val.data.six
+Running ./gdb.base/args.exp ...
+Running ./gdb.base/argv0-symlink.exp ...
+PASS: gdb.base/argv0-symlink.exp: kept file symbolic link name
+FAIL: gdb.base/argv0-symlink.exp: kept directory symbolic link name
+Running ./gdb.base/arithmet.exp ...
+PASS: gdb.base/arithmet.exp: set variable x=14
+PASS: gdb.base/arithmet.exp: set variable y=2
+PASS: gdb.base/arithmet.exp: set variable z=2
+PASS: gdb.base/arithmet.exp: set variable w=3
+PASS: gdb.base/arithmet.exp: print x
+PASS: gdb.base/arithmet.exp: print y
+PASS: gdb.base/arithmet.exp: print z
+PASS: gdb.base/arithmet.exp: print w
+PASS: gdb.base/arithmet.exp: print x+y
+PASS: gdb.base/arithmet.exp: print x-y
+PASS: gdb.base/arithmet.exp: print x*y
+PASS: gdb.base/arithmet.exp: print x/y
+PASS: gdb.base/arithmet.exp: print x%y
+PASS: gdb.base/arithmet.exp: print x+y+z
+PASS: gdb.base/arithmet.exp: print x-y-z
+PASS: gdb.base/arithmet.exp: print x*y*z
+PASS: gdb.base/arithmet.exp: print x/y/z
+PASS: gdb.base/arithmet.exp: print x%y%z
+PASS: gdb.base/arithmet.exp: set variable x=10
+PASS: gdb.base/arithmet.exp: set variable y=4
+PASS: gdb.base/arithmet.exp: print x+y-z
+PASS: gdb.base/arithmet.exp: print x+y*z
+PASS: gdb.base/arithmet.exp: print x+y%w
+PASS: gdb.base/arithmet.exp: print x+y/w
+PASS: gdb.base/arithmet.exp: print x-y*z
+PASS: gdb.base/arithmet.exp: print x-y%z
+PASS: gdb.base/arithmet.exp: print x-y/z
+PASS: gdb.base/arithmet.exp: print x*y/z
+PASS: gdb.base/arithmet.exp: print x*y%w
+PASS: gdb.base/arithmet.exp: print x/y%w
+PASS: gdb.base/arithmet.exp: print x-(y+w)
+PASS: gdb.base/arithmet.exp: print x/(y*w)
+PASS: gdb.base/arithmet.exp: print x-(y/w)
+PASS: gdb.base/arithmet.exp: print (x+y)*w
+Running ./gdb.base/arrayidx.exp ...
+PASS: gdb.base/arrayidx.exp: Set print array-indexes to off
+PASS: gdb.base/arrayidx.exp: Print array with array-indexes off
+PASS: gdb.base/arrayidx.exp: Set print array-indexes to on
+PASS: gdb.base/arrayidx.exp: Print array with array-indexes on
+Running ./gdb.base/assign.exp ...
+PASS: gdb.base/assign.exp: continuing after dummy()
+PASS: gdb.base/assign.exp: v_int=57
+PASS: gdb.base/assign.exp: set v_int to 6
+PASS: gdb.base/assign.exp: v_int+=57
+PASS: gdb.base/assign.exp: set v_int to 6 (2)
+PASS: gdb.base/assign.exp: v_int-=57
+PASS: gdb.base/assign.exp: set v_int to 6 (3)
+PASS: gdb.base/assign.exp: v_int*=5
+PASS: gdb.base/assign.exp: set v_int to 6 (4)
+PASS: gdb.base/assign.exp: v_int/=4
+PASS: gdb.base/assign.exp: set v_int to 6 (5)
+PASS: gdb.base/assign.exp: v_int%=4
+PASS: gdb.base/assign.exp: set v_int to 6 (6)
+PASS: gdb.base/assign.exp: v_int+=char
+PASS: gdb.base/assign.exp: set v_int to 6 (7)
+PASS: gdb.base/assign.exp: v_int+=signed_char
+PASS: gdb.base/assign.exp: set v_int to 6 (8)
+PASS: gdb.base/assign.exp: v_int+=unsigned_char
+PASS: gdb.base/assign.exp: set v_int to 6 (9)
+PASS: gdb.base/assign.exp: v_int+=short
+PASS: gdb.base/assign.exp: set v_int to 6 (10)
+PASS: gdb.base/assign.exp: v_int+=signed_short
+PASS: gdb.base/assign.exp: set v_int to 6 (11)
+PASS: gdb.base/assign.exp: v_int=+unsigned_short
+PASS: gdb.base/assign.exp: set v_int to 6 (12)
+PASS: gdb.base/assign.exp: v_int+=signed_int
+PASS: gdb.base/assign.exp: set v_int to 6 (13)
+PASS: gdb.base/assign.exp: v_int+=unsigned_int
+PASS: gdb.base/assign.exp: set v_int to 6 (14)
+PASS: gdb.base/assign.exp: v_int+=long
+PASS: gdb.base/assign.exp: set v_int to 6 (15)
+PASS: gdb.base/assign.exp: v_int+=signed_long
+PASS: gdb.base/assign.exp: set v_int to 6 (16)
+PASS: gdb.base/assign.exp: v_int+=unsigned_long
+PASS: gdb.base/assign.exp: set v_int to 6 (17)
+PASS: gdb.base/assign.exp: v_int+=v_float
+PASS: gdb.base/assign.exp: set v_int to 6 (18)
+PASS: gdb.base/assign.exp: v_int+=double
+Running ./gdb.base/async.exp ...
+Running ./gdb.base/async-shell.exp ...
+Running ./gdb.base/attach.exp ...
+Running ./gdb.base/attach-pie-misread.exp ...
+Running ./gdb.base/attach-pie-noexec.exp ...
+Running ./gdb.base/attach-twice.exp ...
+Running ./gdb.base/auxv.exp ...
+PASS: gdb.base/auxv.exp: set print sevenbit-strings
+PASS: gdb.base/auxv.exp: set width 0
+PASS: gdb.base/auxv.exp: tbreak 78
+PASS: gdb.base/auxv.exp: continue
+PASS: gdb.base/auxv.exp: info auxv on live process
+PASS: gdb.base/auxv.exp: gcore
+PASS: gdb.base/auxv.exp: continue
+PASS: gdb.base/auxv.exp: continue
+UNSUPPORTED: gdb.base/auxv.exp: generate native core dump
+UNSUPPORTED: gdb.base/auxv.exp: info auxv on native core dump
+UNSUPPORTED: gdb.base/auxv.exp: matching auxv data from live and core
+PASS: gdb.base/auxv.exp: load core file for info auxv on gcore-created dump
+PASS: gdb.base/auxv.exp: info auxv on gcore-created dump
+PASS: gdb.base/auxv.exp: matching auxv data from live and gcore
+Running ./gdb.base/bang.exp ...
+PASS: gdb.base/bang.exp: run program
+Running ./gdb.base/bfp-test.exp ...
+PASS: gdb.base/bfp-test.exp: continue to breakpoint: return
+PASS: gdb.base/bfp-test.exp: The original value of b32 is 1.5
+PASS: gdb.base/bfp-test.exp: The original value of b64 is 2.25
+PASS: gdb.base/bfp-test.exp: The original value of b128 is 3.375
+PASS: gdb.base/bfp-test.exp: Try to change b32 to -1.5 with 'print b32=-1.5f'
+PASS: gdb.base/bfp-test.exp: Try to change b64 to -2.25 with 'print b64=-2.25f'
+PASS: gdb.base/bfp-test.exp: Try to change b128 to -3.375 with 'print b128=-3.375l'
+PASS: gdb.base/bfp-test.exp: set variable b32 = 10.5f
+PASS: gdb.base/bfp-test.exp: set variable b64 = 20.25f
+PASS: gdb.base/bfp-test.exp: set variable b128 = 30.375l
+PASS: gdb.base/bfp-test.exp: The value of b32 is changed to 10.5
+PASS: gdb.base/bfp-test.exp: The value of b64 is changed to 20.25
+PASS: gdb.base/bfp-test.exp: The value of b128 is changed to 30.375
+PASS: gdb.base/bfp-test.exp: set variable b32 = 100.5a
+PASS: gdb.base/bfp-test.exp: set variable b64 = 200.25x
+PASS: gdb.base/bfp-test.exp: set variable b128 = 300.375fl
+PASS: gdb.base/bfp-test.exp: set variable b128 = 300.375fff
+Running ./gdb.base/bigcore.exp ...
+UNTESTED: gdb.base/bigcore.exp: Remote system
+Running ./gdb.base/bitfields2.exp ...
+PASS: gdb.base/bitfields2.exp: set print sevenbit-strings
+PASS: gdb.base/bitfields2.exp: break tester prior to break1
+PASS: gdb.base/bitfields2.exp: continuing to tester prior to break1
+PASS: gdb.base/bitfields2.exp: continuing to break1 #0
+PASS: gdb.base/bitfields2.exp: bitfield uniqueness; flags.s1 = 1
+PASS: gdb.base/bitfields2.exp: continuing to break1 #1
+PASS: gdb.base/bitfields2.exp: bitfield uniqueness; flags.u1 = 1
+PASS: gdb.base/bitfields2.exp: continuing to break1 #2
+PASS: gdb.base/bitfields2.exp: bitfield uniqueness; flags.s2 = 1
+PASS: gdb.base/bitfields2.exp: continuing to break1 #3
+PASS: gdb.base/bitfields2.exp: bitfield uniqueness; flags.u2 = 1
+PASS: gdb.base/bitfields2.exp: continuing to break1 #4
+PASS: gdb.base/bitfields2.exp: bitfield uniqueness; flags.s3 = 1
+PASS: gdb.base/bitfields2.exp: continuing to break1 #5
+PASS: gdb.base/bitfields2.exp: bitfield uniqueness; flags.u3 = 1
+PASS: gdb.base/bitfields2.exp: break tester prior to break2
+PASS: gdb.base/bitfields2.exp: continuing to tester prior to break2
+PASS: gdb.base/bitfields2.exp: continuing to break2 #0
+PASS: gdb.base/bitfields2.exp: bitfield containment; flags.u1, flags.u3, and flags.s3 to all 1s
+PASS: gdb.base/bitfields2.exp: continuing to break2 #1
+PASS: gdb.base/bitfields2.exp: bitfield containment; flags.u2, flags.s1, flags.s2 to all 1s
+PASS: gdb.base/bitfields2.exp: break tester prior to break3
+PASS: gdb.base/bitfields2.exp: continuing to tester prior to break3
+PASS: gdb.base/bitfields2.exp: continuing to break3 #0
+PASS: gdb.base/bitfields2.exp: maximum unsigned bitfield values
+PASS: gdb.base/bitfields2.exp: break tester prior to break4
+PASS: gdb.base/bitfields2.exp: continuing to tester prior to break4
+PASS: gdb.base/bitfields2.exp: continuing to break4 #0
+PASS: gdb.base/bitfields2.exp: maximum signed bitfield values
+PASS: gdb.base/bitfields2.exp: continuing to break4 #1
+PASS: gdb.base/bitfields2.exp: determining signed-ness of bitfields
+PASS: gdb.base/bitfields2.exp: most negative signed bitfield values
+PASS: gdb.base/bitfields2.exp: continuing to break4 #2
+PASS: gdb.base/bitfields2.exp: signed bitfields containing -1
+PASS: gdb.base/bitfields2.exp: break tester prior to break5
+PASS: gdb.base/bitfields2.exp: continuing to tester prior to break5
+PASS: gdb.base/bitfields2.exp: continuing to break5 #0
+PASS: gdb.base/bitfields2.exp: set long long unsigned bitfield
+PASS: gdb.base/bitfields2.exp: set long long signed bitfield positive
+PASS: gdb.base/bitfields2.exp: long long bitfield values after set
+PASS: gdb.base/bitfields2.exp: set long long signed bitfield negative
+PASS: gdb.base/bitfields2.exp: long long bitfield values after set negative
+Running ./gdb.base/bitfields.exp ...
+PASS: gdb.base/bitfields.exp: set print sevenbit-strings
+PASS: gdb.base/bitfields.exp: print flags
+PASS: gdb.base/bitfields.exp: continuing to break1 #1
+PASS: gdb.base/bitfields.exp: bitfield uniqueness (s1)
+PASS: gdb.base/bitfields.exp: continuing to break1 #2
+PASS: gdb.base/bitfields.exp: bitfield uniqueness (u1)
+PASS: gdb.base/bitfields.exp: continuing to break1 #3
+PASS: gdb.base/bitfields.exp: bitfield uniqueness (s2)
+PASS: gdb.base/bitfields.exp: continuing to break1 #4
+PASS: gdb.base/bitfields.exp: bitfield uniqueness (u2)
+PASS: gdb.base/bitfields.exp: continuing to break1 #5
+PASS: gdb.base/bitfields.exp: bitfield uniqueness (s3)
+PASS: gdb.base/bitfields.exp: continuing to break1 #6
+PASS: gdb.base/bitfields.exp: bitfield uniqueness (u3)
+PASS: gdb.base/bitfields.exp: continuing to break1 #7
+PASS: gdb.base/bitfields.exp: bitfield uniqueness (s9)
+PASS: gdb.base/bitfields.exp: continuing to break1 #8
+PASS: gdb.base/bitfields.exp: bitfield uniqueness (u9)
+PASS: gdb.base/bitfields.exp: continuing to break1 #9
+PASS: gdb.base/bitfields.exp: bitfield uniqueness (sc)
+PASS: gdb.base/bitfields.exp: bitfield containment #1
+PASS: gdb.base/bitfields.exp: continuing to break2
+PASS: gdb.base/bitfields.exp: bitfield containment #2
+PASS: gdb.base/bitfields.exp: unsigned bitfield ranges
+PASS: gdb.base/bitfields.exp: signed bitfields, max positive values
+PASS: gdb.base/bitfields.exp: continuing to break4 #1
+PASS: gdb.base/bitfields.exp: determining signed-ness of bitfields
+PASS: gdb.base/bitfields.exp: signed bitfields, max negative values
+PASS: gdb.base/bitfields.exp: continuing to break4 #2
+PASS: gdb.base/bitfields.exp: signed bitfields with -1
+PASS: gdb.base/bitfields.exp: continuing to break5
+PASS: gdb.base/bitfields.exp: distinct bitfields in container
+PASS: gdb.base/bitfields.exp: print container.one.u3
+PASS: gdb.base/bitfields.exp: print container.two.u3
+PASS: gdb.base/bitfields.exp: set internal var
+PASS: gdb.base/bitfields.exp: set $myvar.a = 0
+PASS: gdb.base/bitfields.exp: set $myvar.inner.b = 1
+PASS: gdb.base/bitfields.exp: set $myvar.inner.deep.c = 0
+PASS: gdb.base/bitfields.exp: set $myvar.inner.deep.d = -1
+PASS: gdb.base/bitfields.exp: set $myvar.inner.e = 1
+PASS: gdb.base/bitfields.exp: set $myvar.f = 1
+PASS: gdb.base/bitfields.exp: print $myvar.a
+PASS: gdb.base/bitfields.exp: print $myvar.inner.b
+PASS: gdb.base/bitfields.exp: print $myvar.inner.deep.c
+PASS: gdb.base/bitfields.exp: print $myvar.inner.deep.d
+PASS: gdb.base/bitfields.exp: print $myvar.inner.e
+PASS: gdb.base/bitfields.exp: print $myvar.f
+Running ./gdb.base/bitops.exp ...
+PASS: gdb.base/bitops.exp: print value of !1
+PASS: gdb.base/bitops.exp: print value of !0
+PASS: gdb.base/bitops.exp: print value of !100
+PASS: gdb.base/bitops.exp: print value of !1000
+PASS: gdb.base/bitops.exp: print value of !10
+PASS: gdb.base/bitops.exp: print value of !2
+PASS: gdb.base/bitops.exp: print value of 10 | 5
+PASS: gdb.base/bitops.exp: print value of 10 & 5
+PASS: gdb.base/bitops.exp: print value of 10 ^ 5
+PASS: gdb.base/bitops.exp: print value of -!0
+PASS: gdb.base/bitops.exp: print value of ~-!0
+PASS: gdb.base/bitops.exp: print value of 3 * 2 / 4.0 * 2.0
+PASS: gdb.base/bitops.exp: print value of 8 << 2 >> 4
+PASS: gdb.base/bitops.exp: print value of -1 < 0 > 1
+PASS: gdb.base/bitops.exp: print value of 15 ^ 10 ^ 5 ^ 7
+PASS: gdb.base/bitops.exp: print value of 3.5 < 4.0
+PASS: gdb.base/bitops.exp: print value of 3.5 < -4.0
+PASS: gdb.base/bitops.exp: print value of 2 > -3
+PASS: gdb.base/bitops.exp: print value of -3>4
+PASS: gdb.base/bitops.exp: print value of (-3 > 4)
+PASS: gdb.base/bitops.exp: print value of 3>=2.5
+PASS: gdb.base/bitops.exp: print value of 3>=4.5
+PASS: gdb.base/bitops.exp: print value of 3==3.0
+PASS: gdb.base/bitops.exp: print value of 3==4.0
+PASS: gdb.base/bitops.exp: print value of 3!=3.0
+PASS: gdb.base/bitops.exp: print value of 3!=5.0
+PASS: gdb.base/bitops.exp: print value of 0 || 1 && 0 | 0 ^ 0 == 8 > 128 >>1 +2 *2
+PASS: gdb.base/bitops.exp: print value of 1.0 || 0
+PASS: gdb.base/bitops.exp: print value of 0.0 || 1.0
+PASS: gdb.base/bitops.exp: print value of 0.0 || 0
+PASS: gdb.base/bitops.exp: print value of 0 || 1 && 0 | 0 ^ 0 == 8
+PASS: gdb.base/bitops.exp: print value of 0 == 8 > 128 >> 1 + 2 * 2
+Running ./gdb.base/break-always.exp ...
+PASS: gdb.base/break-always.exp: set breakpoint always-inserted on
+PASS: gdb.base/break-always.exp: confirm breakpoint always-inserted
+PASS: gdb.base/break-always.exp: set breakpoint on bar
+PASS: gdb.base/break-always.exp: set 2nd breakpoint on bar
+PASS: gdb.base/break-always.exp: set 3rd breakpoint on bar
+PASS: gdb.base/break-always.exp: set 4th breakpoint on bar
+PASS: gdb.base/break-always.exp: initial check breakpoint state
+PASS: gdb.base/break-always.exp: initial disable all breakpoints
+PASS: gdb.base/break-always.exp: initial enable all breakpoints
+PASS: gdb.base/break-always.exp: re-disable all breakpoints
+PASS: gdb.base/break-always.exp: enable 3.A
+PASS: gdb.base/break-always.exp: disable 3.B
+PASS: gdb.base/break-always.exp: enable 3.C
+PASS: gdb.base/break-always.exp: enable 2.D
+PASS: gdb.base/break-always.exp: disable 2.E
+PASS: gdb.base/break-always.exp: disable 3.F
+PASS: gdb.base/break-always.exp: enable 3.G
+PASS: gdb.base/break-always.exp: enable 2.H
+PASS: gdb.base/break-always.exp: disable 2.I
+PASS: gdb.base/break-always.exp: before re-enable check breakpoint state
+PASS: gdb.base/break-always.exp: re-enable all breakpoints
+PASS: gdb.base/break-always.exp: set breakpoint on bar 2
+PASS: gdb.base/break-always.exp: save shadow
+PASS: gdb.base/break-always.exp: write 0 to breakpoint's address
+PASS: gdb.base/break-always.exp: read back 0 from the breakpoint's address
+PASS: gdb.base/break-always.exp: write 1 to breakpoint's address
+PASS: gdb.base/break-always.exp: read back 1 from the breakpoint's address
+PASS: gdb.base/break-always.exp: p /x *(char *) 0x54aaa69c = $shadow
+PASS: gdb.base/break-always.exp: continue to breakpoint: bar
+Running ./gdb.base/break-caller-line.exp ...
+PASS: gdb.base/break-caller-line.exp: up
+PASS: gdb.base/break-caller-line.exp: info line *$pc
+PASS: gdb.base/break-caller-line.exp: break
+Running ./gdb.base/break-entry.exp ...
+UNTESTED: gdb.base/break-entry.exp: break-entry.exp
+Running ./gdb.base/break.exp ...
+PASS: gdb.base/break.exp: Delete all breakpoints when none
+PASS: gdb.base/break.exp: breakpoint function
+PASS: gdb.base/break.exp: breakpoint quoted function
+PASS: gdb.base/break.exp: breakpoint function in file
+PASS: gdb.base/break.exp: use `list' to establish default source file
+PASS: gdb.base/break.exp: breakpoint line number
+PASS: gdb.base/break.exp: breakpoint duplicate
+PASS: gdb.base/break.exp: breakpoint line number in file
+PASS: gdb.base/break.exp: breakpoint at start of multi line if conditional
+PASS: gdb.base/break.exp: breakpoint at start of multi line while conditional
+FAIL: gdb.base/break.exp: breakpoint info
+PASS: gdb.base/break.exp: info break 2 4 6
+PASS: gdb.base/break.exp: info break 3-5
+PASS: gdb.base/break.exp: disable using history values
+FAIL: gdb.base/break.exp: check disable with history values
+PASS: gdb.base/break.exp: disable with convenience values
+FAIL: gdb.base/break.exp: check disable with convenience values
+PASS: gdb.base/break.exp: disable non-existent breakpoint 10
+PASS: gdb.base/break.exp: set $baz 1.234
+PASS: gdb.base/break.exp: disable with non-integer convenience var
+PASS: gdb.base/break.exp: disable with non-existent convenience var
+PASS: gdb.base/break.exp: disable with non-existent history value
+PASS: gdb.base/break.exp: disable with badly formed history value
+FAIL: gdb.base/break.exp: run until function breakpoint
+PASS: gdb.base/break.exp: list marker1
+PASS: gdb.base/break.exp: break lineno
+PASS: gdb.base/break.exp: delete $bpnum
+PASS: gdb.base/break.exp: run until breakpoint set at a line number
+PASS: gdb.base/break.exp: run until file:function(6) breakpoint
+PASS: gdb.base/break.exp: run until file:function(5) breakpoint
+PASS: gdb.base/break.exp: run until file:function(4) breakpoint
+PASS: gdb.base/break.exp: run until file:function(3) breakpoint
+PASS: gdb.base/break.exp: run until file:function(2) breakpoint
+PASS: gdb.base/break.exp: run until file:function(1) breakpoint
+PASS: gdb.base/break.exp: run until quoted breakpoint
+PASS: gdb.base/break.exp: run until file:linenum breakpoint
+PASS: gdb.base/break.exp: breakpoint offset +1
+PASS: gdb.base/break.exp: step onto breakpoint
+PASS: gdb.base/break.exp: setting breakpoint at }
+PASS: gdb.base/break.exp: continue to breakpoint at }
+PASS: gdb.base/break.exp: Temporary breakpoint function
+PASS: gdb.base/break.exp: Temporary breakpoint function in file
+PASS: gdb.base/break.exp: Temporary breakpoint line number #1
+PASS: gdb.base/break.exp: Temporary breakpoint line number #2
+PASS: gdb.base/break.exp: Temporary breakpoint line number in file #1
+PASS: gdb.base/break.exp: Temporary breakpoint line number in file #2
+FAIL: gdb.base/break.exp: Temporary breakpoint info
+PASS: gdb.base/break.exp: catch requires an event name
+PASS: gdb.base/break.exp: set catch fork, never expected to trigger
+PASS: gdb.base/break.exp: set catch vfork, never expected to trigger
+PASS: gdb.base/break.exp: set catch exec, never expected to trigger
+PASS: gdb.base/break.exp: set breakpoint pending off
+PASS: gdb.base/break.exp: break on non-existent source line
+PASS: gdb.base/break.exp: until bp_location1
+PASS: gdb.base/break.exp: break on default location, 1st time
+PASS: gdb.base/break.exp: break on default location, 2nd time
+PASS: gdb.base/break.exp: break on default location, 3rd time
+PASS: gdb.base/break.exp: break on default location, 4th time
+PASS: gdb.base/break.exp: set to-be-silent break bp_location1
+PASS: gdb.base/break.exp: set silent break bp_location1
+PASS: gdb.base/break.exp: info silent break bp_location1
+PASS: gdb.base/break.exp: hit silent break bp_location1
+PASS: gdb.base/break.exp: stopped for silent break bp_location1
+PASS: gdb.base/break.exp: thread-specific breakpoint on non-existent thread disallowed
+PASS: gdb.base/break.exp: thread-specific breakpoint on bogus thread ID disallowed
+PASS: gdb.base/break.exp: breakpoint with trailing garbage disallowed
+PASS: gdb.base/break.exp: step over breakpoint
+PASS: gdb.base/break.exp: clear line has no breakpoint disallowed
+PASS: gdb.base/break.exp: clear current line has no breakpoint disallowed
+PASS: gdb.base/break.exp: break marker3 #1
+PASS: gdb.base/break.exp: break marker3 #2
+PASS: gdb.base/break.exp: clear marker3
+PASS: gdb.base/break.exp: set convenience variable $foo to bp_location11
+PASS: gdb.base/break.exp: set breakpoint via convenience variable
+PASS: gdb.base/break.exp: set convenience variable $foo to 81.5
+PASS: gdb.base/break.exp: set breakpoint via non-integer convenience variable disallowed
+PASS: gdb.base/break.exp: set breakpoint on to-be-called function
+PASS: gdb.base/break.exp: hit breakpoint on called function
+PASS: gdb.base/break.exp: backtrace while in called function
+PASS: gdb.base/break.exp: finish from called function
+PASS: gdb.base/break.exp: finish with arguments disallowed
+PASS: gdb.base/break.exp: finish from outermost frame disallowed
+PASS: gdb.base/break.exp: kill program
+PASS: gdb.base/break.exp: break at factorial
+PASS: gdb.base/break.exp: continue to factorial(5)
+PASS: gdb.base/break.exp: backtrace from factorial(5)
+PASS: gdb.base/break.exp: next to recursive call
+PASS: gdb.base/break.exp: next over recursive call
+PASS: gdb.base/break.exp: backtrace from factorial(5.1)
+FAIL: gdb.base/break.exp: setting breakpoint at exit
+PASS: gdb.base/break.exp: breakpoint function, optimized file
+PASS: gdb.base/break.exp: breakpoint small function, optimized file
+PASS: gdb.base/break.exp: run until function breakpoint, optimized file (code motion)
+PASS: gdb.base/break.exp: run until breakpoint set at small function, optimized file
+PASS: gdb.base/break.exp: rbreak junk pending setup
+PASS: gdb.base/break.exp: rbreak junk set breakpoint
+PASS: gdb.base/break.exp: rbreak junk
+Running ./gdb.base/break-inline.exp ...
+PASS: gdb.base/break-inline.exp: break
+Running ./gdb.base/break-interp.exp ...
+Running ./gdb.base/break-on-linker-gcd-function.exp ...
+PASS: gdb.base/break-on-linker-gcd-function.exp: b 25
+Running ./gdb.base/breakpoint-shadow.exp ...
+PASS: gdb.base/breakpoint-shadow.exp: set breakpoint always-inserted on
+PASS: gdb.base/breakpoint-shadow.exp: show breakpoint always-inserted
+PASS: gdb.base/breakpoint-shadow.exp: disassembly without breakpoints
+PASS: gdb.base/breakpoint-shadow.exp: First breakpoint placed
+PASS: gdb.base/breakpoint-shadow.exp: Second breakpoint placed
+PASS: gdb.base/breakpoint-shadow.exp: disassembly with breakpoints
+Running ./gdb.base/call-ar-st.exp ...
+PASS: gdb.base/call-ar-st.exp: set print sevenbit-strings
+PASS: gdb.base/call-ar-st.exp: set print address off
+PASS: gdb.base/call-ar-st.exp: set width 0
+PASS: gdb.base/call-ar-st.exp: tbreakpoint line 1209
+PASS: gdb.base/call-ar-st.exp: run until breakpoint set at a line
+PASS: gdb.base/call-ar-st.exp: tbreakpoint line 1216
+PASS: gdb.base/call-ar-st.exp: tbreakpoint line 1220
+PASS: gdb.base/call-ar-st.exp: step inside print_all_arrays
+PASS: gdb.base/call-ar-st.exp: tbreakpoint line 1236
+PASS: gdb.base/call-ar-st.exp: tbreakpoint line 1241
+PASS: gdb.base/call-ar-st.exp: continue to 1241
+PASS: gdb.base/call-ar-st.exp: set breakpoint in sum_array_print
+PASS: gdb.base/call-ar-st.exp: set print frame-arguments all
+PASS: gdb.base/call-ar-st.exp: check args of sum_array_print
+PASS: gdb.base/call-ar-st.exp: tbreakpoint line 1281
+PASS: gdb.base/call-ar-st.exp: print compute_with_small_structs(20)
+PASS: gdb.base/call-ar-st.exp: tbreakpoint line 1286
+PASS: gdb.base/call-ar-st.exp: continue to 1286
+PASS: gdb.base/call-ar-st.exp: tbreak in print_long_arg_list after stepping into memcpy
+PASS: gdb.base/call-ar-st.exp: step into print_long_arg_list
+PASS: gdb.base/call-ar-st.exp: tbreakpoint line 1300
+PASS: gdb.base/call-ar-st.exp: step into init_bit_flags_combo
+PASS: gdb.base/call-ar-st.exp: tbreakpoint line 1305
+PASS: gdb.base/call-ar-st.exp: continue to 1305
+PASS: gdb.base/call-ar-st.exp: tbreakpoint line 1311
+PASS: gdb.base/call-ar-st.exp: continue to 1311
+Running ./gdb.base/callexit.exp ...
+PASS: gdb.base/callexit.exp: inferior function call terminated program
+Running ./gdb.base/callfuncs.exp ...
+PASS: gdb.base/callfuncs.exp: set print sevenbit-strings
+PASS: gdb.base/callfuncs.exp: set print address off
+PASS: gdb.base/callfuncs.exp: set width 0
+PASS: gdb.base/callfuncs.exp: set language c
+PASS: gdb.base/callfuncs.exp: next to t_double_values
+PASS: gdb.base/callfuncs.exp: next to t_structs_c
+PASS: gdb.base/callfuncs.exp: retrieve original register contents
+PASS: gdb.base/callfuncs.exp: set unwindonsignal on
+PASS: gdb.base/callfuncs.exp: p t_char_values(0,0)
+PASS: gdb.base/callfuncs.exp: p t_char_values('a','b')
+PASS: gdb.base/callfuncs.exp: p t_char_values(char_val1,char_val2)
+PASS: gdb.base/callfuncs.exp: p t_char_values('a',char_val2)
+PASS: gdb.base/callfuncs.exp: p t_char_values(char_val1,'b')
+PASS: gdb.base/callfuncs.exp: p t_short_values(0,0)
+PASS: gdb.base/callfuncs.exp: p t_short_values(10,-23)
+PASS: gdb.base/callfuncs.exp: p t_short_values(short_val1,short_val2)
+PASS: gdb.base/callfuncs.exp: p t_short_values(10,short_val2)
+PASS: gdb.base/callfuncs.exp: p t_short_values(short_val1,-23)
+PASS: gdb.base/callfuncs.exp: p t_int_values(0,0)
+PASS: gdb.base/callfuncs.exp: p t_int_values(87,-26)
+PASS: gdb.base/callfuncs.exp: p t_int_values(int_val1,int_val2)
+PASS: gdb.base/callfuncs.exp: p t_int_values(87,int_val2)
+PASS: gdb.base/callfuncs.exp: p t_int_values(int_val1,-26)
+PASS: gdb.base/callfuncs.exp: p t_long_values(0,0)
+PASS: gdb.base/callfuncs.exp: p t_long_values(789,-321)
+PASS: gdb.base/callfuncs.exp: p t_long_values(long_val1,long_val2)
+PASS: gdb.base/callfuncs.exp: p t_long_values(789,long_val2)
+PASS: gdb.base/callfuncs.exp: p t_long_values(long_val1,-321)
+PASS: gdb.base/callfuncs.exp: p t_float_values(0.0,0.0)
+FAIL: gdb.base/callfuncs.exp: p t_float_values(3.14159,-2.3765)
+FAIL: gdb.base/callfuncs.exp: p t_float_values(float_val1,float_val2)
+FAIL: gdb.base/callfuncs.exp: p t_float_values(3.14159,float_val2)
+FAIL: gdb.base/callfuncs.exp: p t_float_values(float_val1,-2.3765)
+PASS: gdb.base/callfuncs.exp: p t_float_values2(0.0,0.0)
+FAIL: gdb.base/callfuncs.exp: p t_float_values2(3.14159,float_val2)
+FAIL: gdb.base/callfuncs.exp: Call function with many float arguments.
+PASS: gdb.base/callfuncs.exp: p t_small_values(1,2,3,4,5,6,7,8,9,10)
+PASS: gdb.base/callfuncs.exp: p t_double_values(0.0,0.0)
+FAIL: gdb.base/callfuncs.exp: p t_double_values(45.654,-67.66)
+FAIL: gdb.base/callfuncs.exp: p t_double_values(double_val1,double_val2)
+FAIL: gdb.base/callfuncs.exp: p t_double_values(45.654,double_val2)
+FAIL: gdb.base/callfuncs.exp: p t_double_values(double_val1,-67.66)
+FAIL: gdb.base/callfuncs.exp: Call function with many double arguments.
+FAIL: gdb.base/callfuncs.exp: p t_double_int(99.0, 1)
+FAIL: gdb.base/callfuncs.exp: p t_double_int(99.0, 99)
+FAIL: gdb.base/callfuncs.exp: p t_int_double(99, 1.0)
+FAIL: gdb.base/callfuncs.exp: p t_int_double(99, 99.0)
+FAIL: gdb.base/callfuncs.exp: p t_float_complex_values(fc1, fc2)
+PASS: gdb.base/callfuncs.exp: p t_float_complex_values(fc3, fc4)
+FAIL: gdb.base/callfuncs.exp: p t_float_complex_many_args(fc1, fc2, fc3, fc4, fc1, fc2, fc3, fc4, fc1, fc2, fc3, fc4, fc1, fc2, fc3, fc4)
+PASS: gdb.base/callfuncs.exp: p t_float_complex_many_args(fc1, fc1, fc1, fc1, fc1, fc1, fc1, fc1, fc1, fc1, fc1, fc1, fc1, fc1, fc1, fc1)
+FAIL: gdb.base/callfuncs.exp: p t_double_complex_values(dc1, dc2)
+PASS: gdb.base/callfuncs.exp: p t_double_complex_values(dc3, dc4)
+FAIL: gdb.base/callfuncs.exp: p t_double_complex_many_args(dc1, dc2, dc3, dc4, dc1, dc2, dc3, dc4, dc1, dc2, dc3, dc4, dc1, dc2, dc3, dc4)
+PASS: gdb.base/callfuncs.exp: p t_double_complex_many_args(dc1, dc1, dc1, dc1, dc1, dc1, dc1, dc1, dc1, dc1, dc1, dc1, dc1, dc1, dc1, dc1)
+FAIL: gdb.base/callfuncs.exp: p t_long_double_complex_values(ldc1, ldc2)
+PASS: gdb.base/callfuncs.exp: p t_long_double_complex_values(ldc3, ldc4)
+FAIL: gdb.base/callfuncs.exp: p t_long_double_complex_many_args(ldc1, ldc2, ldc3, ldc4, ldc1, ldc2, ldc3, ldc4, ldc1, ldc2, ldc3, ldc4, ldc1, ldc2, ldc3, ldc4)
+PASS: gdb.base/callfuncs.exp: p t_long_double_complex_many_args(ldc1, ldc1, ldc1, ldc1, ldc1, ldc1, ldc1,ldc1, ldc1, ldc1, ldc1, ldc1, ldc1, ldc1, ldc1, ldc1)
+PASS: gdb.base/callfuncs.exp: p t_string_values(string_val2,string_val1)
+PASS: gdb.base/callfuncs.exp: p t_string_values(string_val1,string_val2)
+FAIL: gdb.base/callfuncs.exp: p t_string_values("string 1","string 2")
+FAIL: gdb.base/callfuncs.exp: p t_string_values("string 1",string_val2)
+FAIL: gdb.base/callfuncs.exp: p t_string_values(string_val1,"string 2")
+PASS: gdb.base/callfuncs.exp: p t_char_array_values(char_array_val2,char_array_val1)
+PASS: gdb.base/callfuncs.exp: p t_char_array_values(char_array_val1,char_array_val2)
+FAIL: gdb.base/callfuncs.exp: p t_char_array_values("carray 1","carray 2")
+FAIL: gdb.base/callfuncs.exp: p t_char_array_values("carray 1",char_array_val2)
+FAIL: gdb.base/callfuncs.exp: p t_char_array_values(char_array_val1,"carray 2")
+PASS: gdb.base/callfuncs.exp: p doubleit(4)
+PASS: gdb.base/callfuncs.exp: p add(4,5)
+PASS: gdb.base/callfuncs.exp: p t_func_values(func_val2,func_val1)
+PASS: gdb.base/callfuncs.exp: p t_func_values(func_val1,func_val2)
+PASS: gdb.base/callfuncs.exp: p function_struct.func(5)
+PASS: gdb.base/callfuncs.exp: p function_struct_ptr->func(10)
+PASS: gdb.base/callfuncs.exp: p t_func_values(add,func_val2)
+PASS: gdb.base/callfuncs.exp: p t_func_values(func_val1,doubleit)
+PASS: gdb.base/callfuncs.exp: p t_call_add(add,3,4)
+PASS: gdb.base/callfuncs.exp: p t_call_add(func_val1,3,4)
+PASS: gdb.base/callfuncs.exp: p t_enum_value1(enumval1)
+PASS: gdb.base/callfuncs.exp: p t_enum_value1(enum_val1)
+PASS: gdb.base/callfuncs.exp: p t_enum_value1(enum_val2)
+PASS: gdb.base/callfuncs.exp: p t_enum_value2(enumval2)
+PASS: gdb.base/callfuncs.exp: p t_enum_value2(enum_val2)
+PASS: gdb.base/callfuncs.exp: p t_enum_value2(enum_val1)
+FAIL: gdb.base/callfuncs.exp: p sum_args(1,{2})
+FAIL: gdb.base/callfuncs.exp: p sum_args(2,{2,3})
+FAIL: gdb.base/callfuncs.exp: p sum_args(3,{2,3,4})
+FAIL: gdb.base/callfuncs.exp: p sum_args(4,{2,3,4,5})
+PASS: gdb.base/callfuncs.exp: p sum10 (1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
+PASS: gdb.base/callfuncs.exp: p cmp10 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9)
+PASS: gdb.base/callfuncs.exp: call inferior func with struct - returns char
+PASS: gdb.base/callfuncs.exp: call inferior func with struct - returns short
+PASS: gdb.base/callfuncs.exp: call inferior func with struct - returns int
+PASS: gdb.base/callfuncs.exp: call inferior func with struct - returns long
+PASS: gdb.base/callfuncs.exp: call inferior func with struct - returns float
+PASS: gdb.base/callfuncs.exp: call inferior func with struct - returns double
+FAIL: gdb.base/callfuncs.exp: call inferior func with struct - returns float _Complex
+FAIL: gdb.base/callfuncs.exp: call inferior func with struct - returns double _Complex
+PASS: gdb.base/callfuncs.exp: call inferior func with struct - returns long double _Complex
+PASS: gdb.base/callfuncs.exp: call inferior func with struct - returns char *
+PASS: gdb.base/callfuncs.exp: set unwindonsignal off
+PASS: gdb.base/callfuncs.exp: register contents after gdb function calls
+PASS: gdb.base/callfuncs.exp: gdb function calls preserve register contents
+PASS: gdb.base/callfuncs.exp: set language c
+PASS: gdb.base/callfuncs.exp: next to t_double_values
+PASS: gdb.base/callfuncs.exp: next to t_structs_c
+PASS: gdb.base/callfuncs.exp: retrieve original register contents
+PASS: gdb.base/callfuncs.exp: stop at breakpoint in call dummy function
+PASS: gdb.base/callfuncs.exp: continue from call dummy breakpoint
+PASS: gdb.base/callfuncs.exp: bt after continuing from call dummy breakpoint
+PASS: gdb.base/callfuncs.exp: register contents after stop in call dummy
+PASS: gdb.base/callfuncs.exp: continue after stop in call dummy preserves register contents
+PASS: gdb.base/callfuncs.exp: set language c
+PASS: gdb.base/callfuncs.exp: next to t_double_values
+PASS: gdb.base/callfuncs.exp: next to t_structs_c
+PASS: gdb.base/callfuncs.exp: retrieve original register contents
+PASS: gdb.base/callfuncs.exp: call function causing a breakpoint then do a finish
+PASS: gdb.base/callfuncs.exp: finish from call dummy breakpoint returns correct value
+PASS: gdb.base/callfuncs.exp: bt after finishing from call dummy breakpoint
+PASS: gdb.base/callfuncs.exp: register contents after finish in call dummy
+PASS: gdb.base/callfuncs.exp: finish after stop in call dummy preserves register contents
+PASS: gdb.base/callfuncs.exp: set language c
+PASS: gdb.base/callfuncs.exp: next to t_double_values
+PASS: gdb.base/callfuncs.exp: next to t_structs_c
+PASS: gdb.base/callfuncs.exp: retrieve original register contents
+PASS: gdb.base/callfuncs.exp: call function causing a breakpoint and then do a return
+PASS: gdb.base/callfuncs.exp: back at main after return from call dummy breakpoint
+PASS: gdb.base/callfuncs.exp: register contents after return in call dummy
+PASS: gdb.base/callfuncs.exp: return after stop in call dummy preserves register contents
+PASS: gdb.base/callfuncs.exp: set language c
+PASS: gdb.base/callfuncs.exp: next to t_double_values
+PASS: gdb.base/callfuncs.exp: next to t_structs_c
+PASS: gdb.base/callfuncs.exp: retrieve original register contents
+PASS: gdb.base/callfuncs.exp: stop at nested call level 1
+PASS: gdb.base/callfuncs.exp: backtrace at nested call level 1
+PASS: gdb.base/callfuncs.exp: stop at nested call level 2
+PASS: gdb.base/callfuncs.exp: backtrace at nested call level 2
+PASS: gdb.base/callfuncs.exp: stop at nested call level 3
+PASS: gdb.base/callfuncs.exp: backtrace at nested call level 3
+PASS: gdb.base/callfuncs.exp: stop at nested call level 4
+PASS: gdb.base/callfuncs.exp: backtrace at nested call level 4
+PASS: gdb.base/callfuncs.exp: Finish from nested call level 4
+PASS: gdb.base/callfuncs.exp: backtrace after finish from nested call level 4
+PASS: gdb.base/callfuncs.exp: Finish from nested call level 3
+PASS: gdb.base/callfuncs.exp: backtrace after finish from nested call level 3
+PASS: gdb.base/callfuncs.exp: Finish from nested call level 2
+PASS: gdb.base/callfuncs.exp: backtrace after finish from nested call level 2
+PASS: gdb.base/callfuncs.exp: Finish from nested call level 1
+PASS: gdb.base/callfuncs.exp: backtrace after finish from nested call level 1
+PASS: gdb.base/callfuncs.exp: register contents after nested call dummies
+PASS: gdb.base/callfuncs.exp: nested call dummies preserve register contents
+PASS: gdb.base/callfuncs.exp: set $old_sp = $sp
+PASS: gdb.base/callfuncs.exp: set $sp = 0
+PASS: gdb.base/callfuncs.exp: sp == 0: call doubleit (1)
+PASS: gdb.base/callfuncs.exp: set $sp = -1
+PASS: gdb.base/callfuncs.exp: sp == -1: call doubleit (1)
+PASS: gdb.base/callfuncs.exp: set $sp = $old_sp
+PASS: gdb.base/callfuncs.exp: print callfunc (Lcallfunc, 5)
+PASS: gdb.base/callfuncs.exp: print *((int *(*) (void)) voidfunc)()
+Running ./gdb.base/call-rt-st.exp ...
+PASS: gdb.base/call-rt-st.exp: set print sevenbit-strings
+PASS: gdb.base/call-rt-st.exp: set print address off
+PASS: gdb.base/call-rt-st.exp: set width 0
+PASS: gdb.base/call-rt-st.exp: breakpoint loop_count
+PASS: gdb.base/call-rt-st.exp: continue to loop_count
+PASS: gdb.base/call-rt-st.exp: finish out from loop_count (line 777)
+Running ./gdb.base/call-sc.exp ...
+PASS: gdb.base/call-sc.exp: set print sevenbit-strings
+PASS: gdb.base/call-sc.exp: set print address off
+PASS: gdb.base/call-sc.exp: set width 0
+PASS: gdb.base/call-sc.exp: ptype; call-sc-tc (char)
+PASS: gdb.base/call-sc.exp: ptype foo; call-sc-tc char
+PASS: gdb.base/call-sc.exp: p/c fun(); call call-sc-tc
+PASS: gdb.base/call-sc.exp: call Fun(foo); call call-sc-tc
+PASS: gdb.base/call-sc.exp: p/c L; call call-sc-tc
+PASS: gdb.base/call-sc.exp: advance to fun for return; return call-sc-tc
+PASS: gdb.base/call-sc.exp: zed L for return; return call-sc-tc
+PASS: gdb.base/call-sc.exp: return foo; return call-sc-tc
+PASS: gdb.base/call-sc.exp: return foo; synchronize pc to main()
+PASS: gdb.base/call-sc.exp: value foo returned; return call-sc-tc
+PASS: gdb.base/call-sc.exp: advance to fun for finish; return call-sc-tc
+PASS: gdb.base/call-sc.exp: zed L for finish; return call-sc-tc
+PASS: gdb.base/call-sc.exp: finish foo; return call-sc-tc
+PASS: gdb.base/call-sc.exp: value foo finished; return call-sc-tc
+PASS: gdb.base/call-sc.exp: return and finish use same convention; return call-sc-tc
+PASS: gdb.base/call-sc.exp: set print sevenbit-strings
+PASS: gdb.base/call-sc.exp: set print address off
+PASS: gdb.base/call-sc.exp: set width 0
+PASS: gdb.base/call-sc.exp: ptype; call-sc-ts (short int)
+PASS: gdb.base/call-sc.exp: ptype foo; call-sc-ts short int
+PASS: gdb.base/call-sc.exp: p/c fun(); call call-sc-ts
+PASS: gdb.base/call-sc.exp: call Fun(foo); call call-sc-ts
+PASS: gdb.base/call-sc.exp: p/c L; call call-sc-ts
+PASS: gdb.base/call-sc.exp: advance to fun for return; return call-sc-ts
+PASS: gdb.base/call-sc.exp: zed L for return; return call-sc-ts
+PASS: gdb.base/call-sc.exp: return foo; return call-sc-ts
+PASS: gdb.base/call-sc.exp: return foo; synchronize pc to main()
+PASS: gdb.base/call-sc.exp: value foo returned; return call-sc-ts
+PASS: gdb.base/call-sc.exp: advance to fun for finish; return call-sc-ts
+PASS: gdb.base/call-sc.exp: zed L for finish; return call-sc-ts
+PASS: gdb.base/call-sc.exp: finish foo; return call-sc-ts
+PASS: gdb.base/call-sc.exp: value foo finished; return call-sc-ts
+PASS: gdb.base/call-sc.exp: return and finish use same convention; return call-sc-ts
+PASS: gdb.base/call-sc.exp: set print sevenbit-strings
+PASS: gdb.base/call-sc.exp: set print address off
+PASS: gdb.base/call-sc.exp: set width 0
+PASS: gdb.base/call-sc.exp: ptype; call-sc-ti (int)
+PASS: gdb.base/call-sc.exp: ptype foo; call-sc-ti int
+PASS: gdb.base/call-sc.exp: p/c fun(); call call-sc-ti
+PASS: gdb.base/call-sc.exp: call Fun(foo); call call-sc-ti
+PASS: gdb.base/call-sc.exp: p/c L; call call-sc-ti
+PASS: gdb.base/call-sc.exp: advance to fun for return; return call-sc-ti
+PASS: gdb.base/call-sc.exp: zed L for return; return call-sc-ti
+PASS: gdb.base/call-sc.exp: return foo; return call-sc-ti
+PASS: gdb.base/call-sc.exp: return foo; synchronize pc to main()
+PASS: gdb.base/call-sc.exp: value foo returned; return call-sc-ti
+PASS: gdb.base/call-sc.exp: advance to fun for finish; return call-sc-ti
+PASS: gdb.base/call-sc.exp: zed L for finish; return call-sc-ti
+PASS: gdb.base/call-sc.exp: finish foo; return call-sc-ti
+PASS: gdb.base/call-sc.exp: value foo finished; return call-sc-ti
+PASS: gdb.base/call-sc.exp: return and finish use same convention; return call-sc-ti
+PASS: gdb.base/call-sc.exp: set print sevenbit-strings
+PASS: gdb.base/call-sc.exp: set print address off
+PASS: gdb.base/call-sc.exp: set width 0
+PASS: gdb.base/call-sc.exp: ptype; call-sc-tl (long int)
+PASS: gdb.base/call-sc.exp: ptype foo; call-sc-tl long int
+PASS: gdb.base/call-sc.exp: p/c fun(); call call-sc-tl
+PASS: gdb.base/call-sc.exp: call Fun(foo); call call-sc-tl
+PASS: gdb.base/call-sc.exp: p/c L; call call-sc-tl
+PASS: gdb.base/call-sc.exp: advance to fun for return; return call-sc-tl
+PASS: gdb.base/call-sc.exp: zed L for return; return call-sc-tl
+PASS: gdb.base/call-sc.exp: return foo; return call-sc-tl
+PASS: gdb.base/call-sc.exp: return foo; synchronize pc to main()
+PASS: gdb.base/call-sc.exp: value foo returned; return call-sc-tl
+PASS: gdb.base/call-sc.exp: advance to fun for finish; return call-sc-tl
+PASS: gdb.base/call-sc.exp: zed L for finish; return call-sc-tl
+PASS: gdb.base/call-sc.exp: finish foo; return call-sc-tl
+PASS: gdb.base/call-sc.exp: value foo finished; return call-sc-tl
+PASS: gdb.base/call-sc.exp: return and finish use same convention; return call-sc-tl
+PASS: gdb.base/call-sc.exp: set print sevenbit-strings
+PASS: gdb.base/call-sc.exp: set print address off
+PASS: gdb.base/call-sc.exp: set width 0
+PASS: gdb.base/call-sc.exp: ptype; call-sc-tll (long long int)
+PASS: gdb.base/call-sc.exp: ptype foo; call-sc-tll long long int
+PASS: gdb.base/call-sc.exp: p/c fun(); call call-sc-tll
+PASS: gdb.base/call-sc.exp: call Fun(foo); call call-sc-tll
+PASS: gdb.base/call-sc.exp: p/c L; call call-sc-tll
+PASS: gdb.base/call-sc.exp: advance to fun for return; return call-sc-tll
+PASS: gdb.base/call-sc.exp: zed L for return; return call-sc-tll
+PASS: gdb.base/call-sc.exp: return foo; return call-sc-tll
+PASS: gdb.base/call-sc.exp: return foo; synchronize pc to main()
+PASS: gdb.base/call-sc.exp: value foo returned; return call-sc-tll
+PASS: gdb.base/call-sc.exp: advance to fun for finish; return call-sc-tll
+PASS: gdb.base/call-sc.exp: zed L for finish; return call-sc-tll
+PASS: gdb.base/call-sc.exp: finish foo; return call-sc-tll
+PASS: gdb.base/call-sc.exp: value foo finished; return call-sc-tll
+PASS: gdb.base/call-sc.exp: return and finish use same convention; return call-sc-tll
+PASS: gdb.base/call-sc.exp: set print sevenbit-strings
+PASS: gdb.base/call-sc.exp: set print address off
+PASS: gdb.base/call-sc.exp: set width 0
+PASS: gdb.base/call-sc.exp: ptype; call-sc-tf (float)
+PASS: gdb.base/call-sc.exp: ptype foo; call-sc-tf float
+PASS: gdb.base/call-sc.exp: p/c fun(); call call-sc-tf
+PASS: gdb.base/call-sc.exp: call Fun(foo); call call-sc-tf
+FAIL: gdb.base/call-sc.exp: p/c L; call call-sc-tf
+PASS: gdb.base/call-sc.exp: advance to fun for return; return call-sc-tf
+PASS: gdb.base/call-sc.exp: zed L for return; return call-sc-tf
+PASS: gdb.base/call-sc.exp: return foo; return call-sc-tf
+PASS: gdb.base/call-sc.exp: return foo; synchronize pc to main()
+FAIL: gdb.base/call-sc.exp: value foo returned; return call-sc-tf
+PASS: gdb.base/call-sc.exp: advance to fun for finish; return call-sc-tf
+PASS: gdb.base/call-sc.exp: zed L for finish; return call-sc-tf
+PASS: gdb.base/call-sc.exp: finish foo; return call-sc-tf
+PASS: gdb.base/call-sc.exp: value foo finished; return call-sc-tf
+PASS: gdb.base/call-sc.exp: return and finish use same convention; return call-sc-tf
+PASS: gdb.base/call-sc.exp: set print sevenbit-strings
+PASS: gdb.base/call-sc.exp: set print address off
+PASS: gdb.base/call-sc.exp: set width 0
+PASS: gdb.base/call-sc.exp: ptype; call-sc-td (double)
+PASS: gdb.base/call-sc.exp: ptype foo; call-sc-td double
+PASS: gdb.base/call-sc.exp: p/c fun(); call call-sc-td
+PASS: gdb.base/call-sc.exp: call Fun(foo); call call-sc-td
+PASS: gdb.base/call-sc.exp: p/c L; call call-sc-td
+PASS: gdb.base/call-sc.exp: advance to fun for return; return call-sc-td
+PASS: gdb.base/call-sc.exp: zed L for return; return call-sc-td
+PASS: gdb.base/call-sc.exp: return foo; return call-sc-td
+PASS: gdb.base/call-sc.exp: return foo; synchronize pc to main()
+PASS: gdb.base/call-sc.exp: value foo returned; return call-sc-td
+PASS: gdb.base/call-sc.exp: advance to fun for finish; return call-sc-td
+PASS: gdb.base/call-sc.exp: zed L for finish; return call-sc-td
+PASS: gdb.base/call-sc.exp: finish foo; return call-sc-td
+PASS: gdb.base/call-sc.exp: value foo finished; return call-sc-td
+PASS: gdb.base/call-sc.exp: return and finish use same convention; return call-sc-td
+PASS: gdb.base/call-sc.exp: set print sevenbit-strings
+PASS: gdb.base/call-sc.exp: set print address off
+PASS: gdb.base/call-sc.exp: set width 0
+PASS: gdb.base/call-sc.exp: ptype; call-sc-tld (long double)
+PASS: gdb.base/call-sc.exp: ptype foo; call-sc-tld long double
+PASS: gdb.base/call-sc.exp: p/c fun(); call call-sc-tld
+PASS: gdb.base/call-sc.exp: call Fun(foo); call call-sc-tld
+PASS: gdb.base/call-sc.exp: p/c L; call call-sc-tld
+PASS: gdb.base/call-sc.exp: advance to fun for return; return call-sc-tld
+PASS: gdb.base/call-sc.exp: zed L for return; return call-sc-tld
+PASS: gdb.base/call-sc.exp: return foo; return call-sc-tld
+PASS: gdb.base/call-sc.exp: return foo; synchronize pc to main()
+PASS: gdb.base/call-sc.exp: value foo returned; return call-sc-tld
+PASS: gdb.base/call-sc.exp: advance to fun for finish; return call-sc-tld
+PASS: gdb.base/call-sc.exp: zed L for finish; return call-sc-tld
+PASS: gdb.base/call-sc.exp: finish foo; return call-sc-tld
+PASS: gdb.base/call-sc.exp: value foo finished; return call-sc-tld
+PASS: gdb.base/call-sc.exp: return and finish use same convention; return call-sc-tld
+PASS: gdb.base/call-sc.exp: set print sevenbit-strings
+PASS: gdb.base/call-sc.exp: set print address off
+PASS: gdb.base/call-sc.exp: set width 0
+PASS: gdb.base/call-sc.exp: ptype; call-sc-te (enum {e = 49})
+PASS: gdb.base/call-sc.exp: ptype foo; call-sc-te enum {e = 49}
+PASS: gdb.base/call-sc.exp: p/c fun(); call call-sc-te
+PASS: gdb.base/call-sc.exp: call Fun(foo); call call-sc-te
+PASS: gdb.base/call-sc.exp: p/c L; call call-sc-te
+PASS: gdb.base/call-sc.exp: advance to fun for return; return call-sc-te
+PASS: gdb.base/call-sc.exp: zed L for return; return call-sc-te
+PASS: gdb.base/call-sc.exp: return foo; return call-sc-te
+PASS: gdb.base/call-sc.exp: return foo; synchronize pc to main()
+PASS: gdb.base/call-sc.exp: value foo returned; return call-sc-te
+PASS: gdb.base/call-sc.exp: advance to fun for finish; return call-sc-te
+PASS: gdb.base/call-sc.exp: zed L for finish; return call-sc-te
+PASS: gdb.base/call-sc.exp: finish foo; return call-sc-te
+PASS: gdb.base/call-sc.exp: value foo finished; return call-sc-te
+PASS: gdb.base/call-sc.exp: return and finish use same convention; return call-sc-te
+Running ./gdb.base/call-signal-resume.exp ...
+Running ./gdb.base/call-strs.exp ...
+PASS: gdb.base/call-strs.exp: set print sevenbit-strings
+PASS: gdb.base/call-strs.exp: set print address off
+PASS: gdb.base/call-strs.exp: set print symbol off
+PASS: gdb.base/call-strs.exp: set width 0
+FAIL: gdb.base/call-strs.exp: step after assignment to s
+FAIL: gdb.base/call-strs.exp: next over strcpy
+FAIL: gdb.base/call-strs.exp: print buf
+FAIL: gdb.base/call-strs.exp: print s
+Running ./gdb.base/catch-load.exp ...
+FAIL: gdb.base/catch-load.exp: plain load: set var libname = "catch-load-so.so"
+PASS: gdb.base/catch-load.exp: plain load: set stop-on-solib-events 0
+PASS: gdb.base/catch-load.exp: plain load: catch load
+FAIL: gdb.base/catch-load.exp: plain load: continue
+FAIL: gdb.base/catch-load.exp: plain load with stop-on-solib-events: set var libname = "catch-load-so.so"
+PASS: gdb.base/catch-load.exp: plain load with stop-on-solib-events: set stop-on-solib-events 1
+PASS: gdb.base/catch-load.exp: plain load with stop-on-solib-events: catch load
+FAIL: gdb.base/catch-load.exp: plain load with stop-on-solib-events: continue
+FAIL: gdb.base/catch-load.exp: rx load: set var libname = "catch-load-so.so"
+PASS: gdb.base/catch-load.exp: rx load: set stop-on-solib-events 0
+PASS: gdb.base/catch-load.exp: rx load: catch load catch-load-so
+FAIL: gdb.base/catch-load.exp: rx load: continue
+FAIL: gdb.base/catch-load.exp: rx load with stop-on-solib-events: set var libname = "catch-load-so.so"
+PASS: gdb.base/catch-load.exp: rx load with stop-on-solib-events: set stop-on-solib-events 1
+PASS: gdb.base/catch-load.exp: rx load with stop-on-solib-events: catch load catch-load-so
+FAIL: gdb.base/catch-load.exp: rx load with stop-on-solib-events: continue
+FAIL: gdb.base/catch-load.exp: non-matching load: set var libname = "catch-load-so.so"
+PASS: gdb.base/catch-load.exp: non-matching load: set stop-on-solib-events 0
+PASS: gdb.base/catch-load.exp: non-matching load: catch load zardoz
+FAIL: gdb.base/catch-load.exp: non-matching load: continue
+FAIL: gdb.base/catch-load.exp: non-matching load with stop-on-solib-events: set var libname = "catch-load-so.so"
+PASS: gdb.base/catch-load.exp: non-matching load with stop-on-solib-events: set stop-on-solib-events 1
+PASS: gdb.base/catch-load.exp: non-matching load with stop-on-solib-events: catch load zardoz
+FAIL: gdb.base/catch-load.exp: non-matching load with stop-on-solib-events: continue
+FAIL: gdb.base/catch-load.exp: plain unload: set var libname = "catch-load-so.so"
+PASS: gdb.base/catch-load.exp: plain unload: set stop-on-solib-events 0
+PASS: gdb.base/catch-load.exp: plain unload: catch unload
+FAIL: gdb.base/catch-load.exp: plain unload: continue
+FAIL: gdb.base/catch-load.exp: plain unload with stop-on-solib-events: set var libname = "catch-load-so.so"
+PASS: gdb.base/catch-load.exp: plain unload with stop-on-solib-events: set stop-on-solib-events 1
+PASS: gdb.base/catch-load.exp: plain unload with stop-on-solib-events: catch unload
+FAIL: gdb.base/catch-load.exp: plain unload with stop-on-solib-events: continue
+FAIL: gdb.base/catch-load.exp: rx unload: set var libname = "catch-load-so.so"
+PASS: gdb.base/catch-load.exp: rx unload: set stop-on-solib-events 0
+PASS: gdb.base/catch-load.exp: rx unload: catch unload catch-load-so
+FAIL: gdb.base/catch-load.exp: rx unload: continue
+FAIL: gdb.base/catch-load.exp: rx unload with stop-on-solib-events: set var libname = "catch-load-so.so"
+PASS: gdb.base/catch-load.exp: rx unload with stop-on-solib-events: set stop-on-solib-events 1
+PASS: gdb.base/catch-load.exp: rx unload with stop-on-solib-events: catch unload catch-load-so
+FAIL: gdb.base/catch-load.exp: rx unload with stop-on-solib-events: continue
+FAIL: gdb.base/catch-load.exp: non-matching unload: set var libname = "catch-load-so.so"
+PASS: gdb.base/catch-load.exp: non-matching unload: set stop-on-solib-events 0
+PASS: gdb.base/catch-load.exp: non-matching unload: catch unload zardoz
+FAIL: gdb.base/catch-load.exp: non-matching unload: continue
+FAIL: gdb.base/catch-load.exp: non-matching unload with stop-on-solib-events: set var libname = "catch-load-so.so"
+PASS: gdb.base/catch-load.exp: non-matching unload with stop-on-solib-events: set stop-on-solib-events 1
+PASS: gdb.base/catch-load.exp: non-matching unload with stop-on-solib-events: catch unload zardoz
+FAIL: gdb.base/catch-load.exp: non-matching unload with stop-on-solib-events: continue
+Running ./gdb.base/catch-signal.exp ...
+PASS: gdb.base/catch-signal.exp: SIGHUP: continue to breakpoint: first HUP
+PASS: gdb.base/catch-signal.exp: SIGHUP: handle SIGHUP nostop noprint pass
+PASS: gdb.base/catch-signal.exp: SIGHUP: catch signal
+PASS: gdb.base/catch-signal.exp: SIGHUP: continue
+PASS: gdb.base/catch-signal.exp: SIGHUP: continue to breakpoint: handle marker
+PASS: gdb.base/catch-signal.exp: SIGHUP: continue to breakpoint: second HUP
+PASS: gdb.base/catch-signal.exp: SIGHUP: catch signal SIGHUP
+PASS: gdb.base/catch-signal.exp: SIGHUP: continue
+PASS: gdb.base/catch-signal.exp: SIGHUP: continue to breakpoint: third HUP
+PASS: gdb.base/catch-signal.exp: SIGHUP: handle SIGUSR1 nostop noprint pass
+PASS: gdb.base/catch-signal.exp: SIGHUP: catch signal SIGUSR1
+PASS: gdb.base/catch-signal.exp: SIGHUP: handle SIGHUP nostop noprint nopass
+PASS: gdb.base/catch-signal.exp: SIGHUP: continue to breakpoint: fourth HUP
+PASS: gdb.base/catch-signal.exp: 1: continue to breakpoint: first HUP
+PASS: gdb.base/catch-signal.exp: 1: handle SIGHUP nostop noprint pass
+PASS: gdb.base/catch-signal.exp: 1: catch signal
+PASS: gdb.base/catch-signal.exp: 1: continue
+PASS: gdb.base/catch-signal.exp: 1: continue to breakpoint: handle marker
+PASS: gdb.base/catch-signal.exp: 1: continue to breakpoint: second HUP
+PASS: gdb.base/catch-signal.exp: 1: catch signal 1
+PASS: gdb.base/catch-signal.exp: 1: continue
+PASS: gdb.base/catch-signal.exp: 1: continue to breakpoint: third HUP
+PASS: gdb.base/catch-signal.exp: 1: handle SIGUSR1 nostop noprint pass
+PASS: gdb.base/catch-signal.exp: 1: catch signal SIGUSR1
+PASS: gdb.base/catch-signal.exp: 1: handle SIGHUP nostop noprint nopass
+PASS: gdb.base/catch-signal.exp: 1: continue to breakpoint: fourth HUP
+PASS: gdb.base/catch-signal.exp: SIGHUP SIGUSR2: continue to breakpoint: first HUP
+PASS: gdb.base/catch-signal.exp: SIGHUP SIGUSR2: handle SIGHUP nostop noprint pass
+PASS: gdb.base/catch-signal.exp: SIGHUP SIGUSR2: catch signal
+PASS: gdb.base/catch-signal.exp: SIGHUP SIGUSR2: continue
+PASS: gdb.base/catch-signal.exp: SIGHUP SIGUSR2: continue to breakpoint: handle marker
+PASS: gdb.base/catch-signal.exp: SIGHUP SIGUSR2: continue to breakpoint: second HUP
+PASS: gdb.base/catch-signal.exp: SIGHUP SIGUSR2: catch signal SIGHUP SIGUSR2
+PASS: gdb.base/catch-signal.exp: SIGHUP SIGUSR2: continue
+PASS: gdb.base/catch-signal.exp: SIGHUP SIGUSR2: continue to breakpoint: third HUP
+PASS: gdb.base/catch-signal.exp: SIGHUP SIGUSR2: handle SIGUSR1 nostop noprint pass
+PASS: gdb.base/catch-signal.exp: SIGHUP SIGUSR2: catch signal SIGUSR1
+PASS: gdb.base/catch-signal.exp: SIGHUP SIGUSR2: handle SIGHUP nostop noprint nopass
+PASS: gdb.base/catch-signal.exp: SIGHUP SIGUSR2: continue to breakpoint: fourth HUP
+PASS: gdb.base/catch-signal.exp: catch signal SIGZARDOZ
+PASS: gdb.base/catch-signal.exp: catch signal all
+PASS: gdb.base/catch-signal.exp: catch signal all SIGHUP
+PASS: gdb.base/catch-signal.exp: catch signal SIGHUP all
+PASS: gdb.base/catch-signal.exp: set catchpoint '' for printing
+PASS: gdb.base/catch-signal.exp: info break for ''
+PASS: gdb.base/catch-signal.exp: save breakpoints for ''
+PASS: gdb.base/catch-signal.exp: results of save breakpoints for ''
+PASS: gdb.base/catch-signal.exp: set catchpoint 'SIGHUP' for printing
+PASS: gdb.base/catch-signal.exp: info break for 'SIGHUP'
+PASS: gdb.base/catch-signal.exp: save breakpoints for 'SIGHUP'
+PASS: gdb.base/catch-signal.exp: results of save breakpoints for 'SIGHUP'
+PASS: gdb.base/catch-signal.exp: set catchpoint 'SIGHUP SIGUSR2' for printing
+PASS: gdb.base/catch-signal.exp: info break for 'SIGHUP SIGUSR2'
+PASS: gdb.base/catch-signal.exp: save breakpoints for 'SIGHUP SIGUSR2'
+PASS: gdb.base/catch-signal.exp: results of save breakpoints for 'SIGHUP SIGUSR2'
+PASS: gdb.base/catch-signal.exp: set catchpoint 'all' for printing
+PASS: gdb.base/catch-signal.exp: info break for 'all'
+PASS: gdb.base/catch-signal.exp: save breakpoints for 'all'
+PASS: gdb.base/catch-signal.exp: results of save breakpoints for 'all'
+Running ./gdb.base/catch-syscall.exp ...
+Running ./gdb.base/charset.exp ...
+PASS: gdb.base/charset.exp: show charset
+PASS: gdb.base/charset.exp: show target-charset
+PASS: gdb.base/charset.exp: check `show target-charset' against `show charset'
+PASS: gdb.base/charset.exp: show host-charset
+PASS: gdb.base/charset.exp: check `show host-charset' against `show charset'
+PASS: gdb.base/charset.exp: try malformed `set charset'
+PASS: gdb.base/charset.exp: try `set host-charset' with invalid charset
+PASS: gdb.base/charset.exp: try `set target-charset' with invalid charset
+PASS: gdb.base/charset.exp: capture valid host charsets
+PASS: gdb.base/charset.exp: capture valid target charsets
+PASS: gdb.base/charset.exp: try `set host-charset ASCII'
+PASS: gdb.base/charset.exp: parse `show charset' after `set host-charset ASCII'
+PASS: gdb.base/charset.exp: check effect of `set host-charset ASCII'
+PASS: gdb.base/charset.exp: try `set target-charset ASCII'
+PASS: gdb.base/charset.exp: parse `show charset' after `set target-charset ASCII'
+PASS: gdb.base/charset.exp: check effect of `set target-charset ASCII'
+PASS: gdb.base/charset.exp: try `set target-charset ISO-8859-1'
+PASS: gdb.base/charset.exp: parse `show charset' after `set target-charset ISO-8859-1'
+PASS: gdb.base/charset.exp: check effect of `set target-charset ISO-8859-1'
+PASS: gdb.base/charset.exp: try `set target-charset EBCDIC-US'
+PASS: gdb.base/charset.exp: parse `show charset' after `set target-charset EBCDIC-US'
+PASS: gdb.base/charset.exp: check effect of `set target-charset EBCDIC-US'
+PASS: gdb.base/charset.exp: try `set target-charset IBM1047'
+PASS: gdb.base/charset.exp: parse `show charset' after `set target-charset IBM1047'
+PASS: gdb.base/charset.exp: check effect of `set target-charset IBM1047'
+PASS: gdb.base/charset.exp: try `set host-charset ISO-8859-1'
+PASS: gdb.base/charset.exp: parse `show charset' after `set host-charset ISO-8859-1'
+PASS: gdb.base/charset.exp: check effect of `set host-charset ISO-8859-1'
+PASS: gdb.base/charset.exp: try `set target-charset ASCII'
+PASS: gdb.base/charset.exp: parse `show charset' after `set target-charset ASCII'
+PASS: gdb.base/charset.exp: check effect of `set target-charset ASCII'
+PASS: gdb.base/charset.exp: try `set target-charset ISO-8859-1'
+PASS: gdb.base/charset.exp: parse `show charset' after `set target-charset ISO-8859-1'
+PASS: gdb.base/charset.exp: check effect of `set target-charset ISO-8859-1'
+PASS: gdb.base/charset.exp: try `set target-charset EBCDIC-US'
+PASS: gdb.base/charset.exp: parse `show charset' after `set target-charset EBCDIC-US'
+PASS: gdb.base/charset.exp: check effect of `set target-charset EBCDIC-US'
+PASS: gdb.base/charset.exp: try `set target-charset IBM1047'
+PASS: gdb.base/charset.exp: parse `show charset' after `set target-charset IBM1047'
+PASS: gdb.base/charset.exp: check effect of `set target-charset IBM1047'
+PASS: gdb.base/charset.exp: try `set host-charset EBCDIC-US'
+PASS: gdb.base/charset.exp: parse `show charset' after `set host-charset EBCDIC-US'
+PASS: gdb.base/charset.exp: check effect of `set host-charset EBCDIC-US'
+PASS: gdb.base/charset.exp: try `set target-charset ASCII'
+PASS: gdb.base/charset.exp: parse `show charset' after `set target-charset ASCII'
+PASS: gdb.base/charset.exp: check effect of `set target-charset ASCII'
+PASS: gdb.base/charset.exp: try `set target-charset ISO-8859-1'
+PASS: gdb.base/charset.exp: parse `show charset' after `set target-charset ISO-8859-1'
+PASS: gdb.base/charset.exp: check effect of `set target-charset ISO-8859-1'
+PASS: gdb.base/charset.exp: try `set target-charset EBCDIC-US'
+PASS: gdb.base/charset.exp: parse `show charset' after `set target-charset EBCDIC-US'
+PASS: gdb.base/charset.exp: check effect of `set target-charset EBCDIC-US'
+PASS: gdb.base/charset.exp: try `set target-charset IBM1047'
+PASS: gdb.base/charset.exp: parse `show charset' after `set target-charset IBM1047'
+PASS: gdb.base/charset.exp: check effect of `set target-charset IBM1047'
+PASS: gdb.base/charset.exp: try `set host-charset IBM1047'
+PASS: gdb.base/charset.exp: parse `show charset' after `set host-charset IBM1047'
+PASS: gdb.base/charset.exp: check effect of `set host-charset IBM1047'
+PASS: gdb.base/charset.exp: try `set target-charset ASCII'
+PASS: gdb.base/charset.exp: parse `show charset' after `set target-charset ASCII'
+PASS: gdb.base/charset.exp: check effect of `set target-charset ASCII'
+PASS: gdb.base/charset.exp: try `set target-charset ISO-8859-1'
+PASS: gdb.base/charset.exp: parse `show charset' after `set target-charset ISO-8859-1'
+PASS: gdb.base/charset.exp: check effect of `set target-charset ISO-8859-1'
+PASS: gdb.base/charset.exp: try `set target-charset EBCDIC-US'
+PASS: gdb.base/charset.exp: parse `show charset' after `set target-charset EBCDIC-US'
+PASS: gdb.base/charset.exp: check effect of `set target-charset EBCDIC-US'
+PASS: gdb.base/charset.exp: try `set target-charset IBM1047'
+PASS: gdb.base/charset.exp: parse `show charset' after `set target-charset IBM1047'
+PASS: gdb.base/charset.exp: check effect of `set target-charset IBM1047'
+PASS: gdb.base/charset.exp: set breakpoint after all strings have been initialized
+PASS: gdb.base/charset.exp: run until all strings have been initialized
+PASS: gdb.base/charset.exp: get integer valueof "sizeof (wchar_t)" (4)
+PASS: gdb.base/charset.exp: set host-charset ASCII
+PASS: gdb.base/charset.exp: set target-charset ASCII
+PASS: gdb.base/charset.exp: print the null character in ASCII
+PASS: gdb.base/charset.exp: print string in ASCII
+PASS: gdb.base/charset.exp: parse character literal in ASCII
+PASS: gdb.base/charset.exp: check value of parsed character literal in ASCII
+PASS: gdb.base/charset.exp: parse string literal in ASCII
+PASS: gdb.base/charset.exp: check value of parsed string literal in ASCII
+PASS: gdb.base/charset.exp: try printing '\a' in ASCII
+PASS: gdb.base/charset.exp: check value of '\a' in ASCII
+PASS: gdb.base/charset.exp: check value of "\a" in ASCII
+PASS: gdb.base/charset.exp: try printing '\b' in ASCII
+PASS: gdb.base/charset.exp: check value of '\b' in ASCII
+PASS: gdb.base/charset.exp: check value of "\b" in ASCII
+PASS: gdb.base/charset.exp: try printing '\f' in ASCII
+PASS: gdb.base/charset.exp: check value of '\f' in ASCII
+PASS: gdb.base/charset.exp: check value of "\f" in ASCII
+PASS: gdb.base/charset.exp: try printing '\n' in ASCII
+PASS: gdb.base/charset.exp: check value of '\n' in ASCII
+PASS: gdb.base/charset.exp: check value of "\n" in ASCII
+PASS: gdb.base/charset.exp: try printing '\r' in ASCII
+PASS: gdb.base/charset.exp: check value of '\r' in ASCII
+PASS: gdb.base/charset.exp: check value of "\r" in ASCII
+PASS: gdb.base/charset.exp: try printing '\t' in ASCII
+PASS: gdb.base/charset.exp: check value of '\t' in ASCII
+PASS: gdb.base/charset.exp: check value of "\t" in ASCII
+PASS: gdb.base/charset.exp: try printing '\v' in ASCII
+PASS: gdb.base/charset.exp: check value of '\v' in ASCII
+PASS: gdb.base/charset.exp: check value of "\v" in ASCII
+PASS: gdb.base/charset.exp: print escape that doesn't exist in ASCII
+PASS: gdb.base/charset.exp: check value of escape that doesn't exist in ASCII
+PASS: gdb.base/charset.exp: set target-charset ISO-8859-1
+PASS: gdb.base/charset.exp: print the null character in ISO-8859-1
+PASS: gdb.base/charset.exp: print string in ISO-8859-1
+PASS: gdb.base/charset.exp: parse character literal in ISO-8859-1
+PASS: gdb.base/charset.exp: check value of parsed character literal in ISO-8859-1
+PASS: gdb.base/charset.exp: parse string literal in ISO-8859-1
+PASS: gdb.base/charset.exp: check value of parsed string literal in ISO-8859-1
+PASS: gdb.base/charset.exp: try printing '\a' in ISO-8859-1
+PASS: gdb.base/charset.exp: check value of '\a' in ISO-8859-1
+PASS: gdb.base/charset.exp: check value of "\a" in ISO-8859-1
+PASS: gdb.base/charset.exp: try printing '\b' in ISO-8859-1
+PASS: gdb.base/charset.exp: check value of '\b' in ISO-8859-1
+PASS: gdb.base/charset.exp: check value of "\b" in ISO-8859-1
+PASS: gdb.base/charset.exp: try printing '\f' in ISO-8859-1
+PASS: gdb.base/charset.exp: check value of '\f' in ISO-8859-1
+PASS: gdb.base/charset.exp: check value of "\f" in ISO-8859-1
+PASS: gdb.base/charset.exp: try printing '\n' in ISO-8859-1
+PASS: gdb.base/charset.exp: check value of '\n' in ISO-8859-1
+PASS: gdb.base/charset.exp: check value of "\n" in ISO-8859-1
+PASS: gdb.base/charset.exp: try printing '\r' in ISO-8859-1
+PASS: gdb.base/charset.exp: check value of '\r' in ISO-8859-1
+PASS: gdb.base/charset.exp: check value of "\r" in ISO-8859-1
+PASS: gdb.base/charset.exp: try printing '\t' in ISO-8859-1
+PASS: gdb.base/charset.exp: check value of '\t' in ISO-8859-1
+PASS: gdb.base/charset.exp: check value of "\t" in ISO-8859-1
+PASS: gdb.base/charset.exp: try printing '\v' in ISO-8859-1
+PASS: gdb.base/charset.exp: check value of '\v' in ISO-8859-1
+PASS: gdb.base/charset.exp: check value of "\v" in ISO-8859-1
+PASS: gdb.base/charset.exp: print escape that doesn't exist in ISO-8859-1
+PASS: gdb.base/charset.exp: check value of escape that doesn't exist in ISO-8859-1
+PASS: gdb.base/charset.exp: set target-charset EBCDIC-US
+PASS: gdb.base/charset.exp: print the null character in EBCDIC-US
+PASS: gdb.base/charset.exp: print string in EBCDIC-US
+PASS: gdb.base/charset.exp: parse character literal in EBCDIC-US
+PASS: gdb.base/charset.exp: check value of parsed character literal in EBCDIC-US
+PASS: gdb.base/charset.exp: parse string literal in EBCDIC-US
+PASS: gdb.base/charset.exp: check value of parsed string literal in EBCDIC-US
+PASS: gdb.base/charset.exp: try printing '\a' in EBCDIC-US
+PASS: gdb.base/charset.exp: check value of '\a' in EBCDIC-US
+PASS: gdb.base/charset.exp: check value of "\a" in EBCDIC-US
+PASS: gdb.base/charset.exp: try printing '\b' in EBCDIC-US
+PASS: gdb.base/charset.exp: check value of '\b' in EBCDIC-US
+PASS: gdb.base/charset.exp: check value of "\b" in EBCDIC-US
+PASS: gdb.base/charset.exp: try printing '\f' in EBCDIC-US
+PASS: gdb.base/charset.exp: check value of '\f' in EBCDIC-US
+PASS: gdb.base/charset.exp: check value of "\f" in EBCDIC-US
+PASS: gdb.base/charset.exp: try printing '\n' in EBCDIC-US
+PASS: gdb.base/charset.exp: check value of '\n' in EBCDIC-US
+PASS: gdb.base/charset.exp: check value of "\n" in EBCDIC-US
+PASS: gdb.base/charset.exp: try printing '\r' in EBCDIC-US
+PASS: gdb.base/charset.exp: check value of '\r' in EBCDIC-US
+PASS: gdb.base/charset.exp: check value of "\r" in EBCDIC-US
+PASS: gdb.base/charset.exp: try printing '\t' in EBCDIC-US
+PASS: gdb.base/charset.exp: check value of '\t' in EBCDIC-US
+PASS: gdb.base/charset.exp: check value of "\t" in EBCDIC-US
+PASS: gdb.base/charset.exp: try printing '\v' in EBCDIC-US
+PASS: gdb.base/charset.exp: check value of '\v' in EBCDIC-US
+PASS: gdb.base/charset.exp: check value of "\v" in EBCDIC-US
+PASS: gdb.base/charset.exp: print escape that doesn't exist in EBCDIC-US
+PASS: gdb.base/charset.exp: check value of escape that doesn't exist in EBCDIC-US
+PASS: gdb.base/charset.exp: set target-charset IBM1047
+PASS: gdb.base/charset.exp: print the null character in IBM1047
+PASS: gdb.base/charset.exp: print string in IBM1047
+PASS: gdb.base/charset.exp: parse character literal in IBM1047
+PASS: gdb.base/charset.exp: check value of parsed character literal in IBM1047
+PASS: gdb.base/charset.exp: parse string literal in IBM1047
+PASS: gdb.base/charset.exp: check value of parsed string literal in IBM1047
+PASS: gdb.base/charset.exp: try printing '\a' in IBM1047
+PASS: gdb.base/charset.exp: check value of '\a' in IBM1047
+PASS: gdb.base/charset.exp: check value of "\a" in IBM1047
+PASS: gdb.base/charset.exp: try printing '\b' in IBM1047
+PASS: gdb.base/charset.exp: check value of '\b' in IBM1047
+PASS: gdb.base/charset.exp: check value of "\b" in IBM1047
+PASS: gdb.base/charset.exp: try printing '\f' in IBM1047
+PASS: gdb.base/charset.exp: check value of '\f' in IBM1047
+PASS: gdb.base/charset.exp: check value of "\f" in IBM1047
+PASS: gdb.base/charset.exp: try printing '\n' in IBM1047
+PASS: gdb.base/charset.exp: check value of '\n' in IBM1047
+PASS: gdb.base/charset.exp: check value of "\n" in IBM1047
+PASS: gdb.base/charset.exp: try printing '\r' in IBM1047
+PASS: gdb.base/charset.exp: check value of '\r' in IBM1047
+PASS: gdb.base/charset.exp: check value of "\r" in IBM1047
+PASS: gdb.base/charset.exp: try printing '\t' in IBM1047
+PASS: gdb.base/charset.exp: check value of '\t' in IBM1047
+PASS: gdb.base/charset.exp: check value of "\t" in IBM1047
+PASS: gdb.base/charset.exp: try printing '\v' in IBM1047
+PASS: gdb.base/charset.exp: check value of '\v' in IBM1047
+PASS: gdb.base/charset.exp: check value of "\v" in IBM1047
+PASS: gdb.base/charset.exp: print escape that doesn't exist in IBM1047
+PASS: gdb.base/charset.exp: check value of escape that doesn't exist in IBM1047
+PASS: gdb.base/charset.exp: set target-wide-charset UTF-32
+PASS: gdb.base/charset.exp: print the null character in UTF-32
+PASS: gdb.base/charset.exp: print string in UTF-32
+PASS: gdb.base/charset.exp: parse character literal in UTF-32
+PASS: gdb.base/charset.exp: check value of parsed character literal in UTF-32
+PASS: gdb.base/charset.exp: parse string literal in UTF-32
+PASS: gdb.base/charset.exp: check value of parsed string literal in UTF-32
+PASS: gdb.base/charset.exp: try printing '\a' in UTF-32
+PASS: gdb.base/charset.exp: check value of '\a' in UTF-32
+PASS: gdb.base/charset.exp: check value of "\a" in UTF-32
+PASS: gdb.base/charset.exp: try printing '\b' in UTF-32
+PASS: gdb.base/charset.exp: check value of '\b' in UTF-32
+PASS: gdb.base/charset.exp: check value of "\b" in UTF-32
+PASS: gdb.base/charset.exp: try printing '\f' in UTF-32
+PASS: gdb.base/charset.exp: check value of '\f' in UTF-32
+PASS: gdb.base/charset.exp: check value of "\f" in UTF-32
+PASS: gdb.base/charset.exp: try printing '\n' in UTF-32
+PASS: gdb.base/charset.exp: check value of '\n' in UTF-32
+PASS: gdb.base/charset.exp: check value of "\n" in UTF-32
+PASS: gdb.base/charset.exp: try printing '\r' in UTF-32
+PASS: gdb.base/charset.exp: check value of '\r' in UTF-32
+PASS: gdb.base/charset.exp: check value of "\r" in UTF-32
+PASS: gdb.base/charset.exp: try printing '\t' in UTF-32
+PASS: gdb.base/charset.exp: check value of '\t' in UTF-32
+PASS: gdb.base/charset.exp: check value of "\t" in UTF-32
+PASS: gdb.base/charset.exp: try printing '\v' in UTF-32
+PASS: gdb.base/charset.exp: check value of '\v' in UTF-32
+PASS: gdb.base/charset.exp: check value of "\v" in UTF-32
+PASS: gdb.base/charset.exp: print escape that doesn't exist in UTF-32
+PASS: gdb.base/charset.exp: check value of escape that doesn't exist in UTF-32
+PASS: gdb.base/charset.exp: set target-charset UTF-8
+PASS: gdb.base/charset.exp: non-representable target character
+PASS: gdb.base/charset.exp: print '\x'
+PASS: gdb.base/charset.exp: print '\u'
+PASS: gdb.base/charset.exp: print '\9'
+PASS: gdb.base/charset.exp: print "\1011"
+PASS: gdb.base/charset.exp: basic wide string concatenation
+PASS: gdb.base/charset.exp: narrow and wide string concatenation
+PASS: gdb.base/charset.exp: wide and narrow string concatenation
+PASS: gdb.base/charset.exp: wide string concatenation with escape
+PASS: gdb.base/charset.exp: concatenate three strings with empty wide string
+PASS: gdb.base/charset.exp: basic wide character
+PASS: gdb.base/charset.exp: get integer valueof "sizeof (char16_t)" (2)
+PASS: gdb.base/charset.exp: basic UTF-16 string concatenation
+PASS: gdb.base/charset.exp: narrow and UTF-16 string concatenation
+PASS: gdb.base/charset.exp: UTF-16 and narrow string concatenation
+PASS: gdb.base/charset.exp: UTF-16 string concatenation with escape
+PASS: gdb.base/charset.exp: concatenate three strings with empty UTF-16 string
+PASS: gdb.base/charset.exp: basic UTF-16 character
+PASS: gdb.base/charset.exp: get integer valueof "sizeof (char32_t)" (4)
+PASS: gdb.base/charset.exp: basic UTF-32 string concatenation
+PASS: gdb.base/charset.exp: narrow and UTF-32 string concatenation
+PASS: gdb.base/charset.exp: UTF-32 and narrow string concatenation
+PASS: gdb.base/charset.exp: UTF-32 string concatenation with escape
+PASS: gdb.base/charset.exp: concatenate three strings with empty UTF-32 string
+PASS: gdb.base/charset.exp: basic UTF-32 character
+PASS: gdb.base/charset.exp: undefined concatenation of wide and UTF-16
+PASS: gdb.base/charset.exp: undefined concatenation of wide and UTF-32
+PASS: gdb.base/charset.exp: typedef to wchar_t
+PASS: gdb.base/charset.exp: undefined concatenation of UTF-16 and UTF-32
+PASS: gdb.base/charset.exp: set up for python printing of utf-16 string
+PASS: gdb.base/charset.exp: extract utf-16 string using python
+PASS: gdb.base/charset.exp: EVAL_SKIP cleanup handling regression test
+FAIL: gdb.base/charset.exp: Assign String16 with prefix u
+FAIL: gdb.base/charset.exp: Display String String16 with x/hs
+FAIL: gdb.base/charset.exp: Assign String32 with prefix U
+FAIL: gdb.base/charset.exp: Display String String32 with x/ws
+FAIL: gdb.base/charset.exp: Assign String32 with prefix L
+FAIL: gdb.base/charset.exp: Display String String32 with x/ws
+PASS: gdb.base/charset.exp: assign string to short array
+PASS: gdb.base/charset.exp: assign string to int array
+PASS: gdb.base/charset.exp: assign string to long array
+Running ./gdb.base/checkpoint.exp ...
+Running ./gdb.base/chng-syms.exp ...
+PASS: gdb.base/chng-syms.exp: setting conditional breakpoint on function
+FAIL: gdb.base/chng-syms.exp: setting breakpoint at exit
+PASS: gdb.base/chng-syms.exp: running with invalidated bpt condition after executable changes
+Running ./gdb.base/code_elim.exp ...
+PASS: gdb.base/code_elim.exp: symbol-file code_elim1
+PASS: gdb.base/code_elim.exp: single psymtabs: test eliminated var my_global_symbol
+PASS: gdb.base/code_elim.exp: single psymtabs: test eliminated var my_static_symbol
+PASS: gdb.base/code_elim.exp: single psymtabs: test eliminated var my_global_func
+PASS: gdb.base/code_elim.exp: single psymtabs: get address of main
+PASS: gdb.base/code_elim.exp: single symtabs: test eliminated var my_global_symbol
+PASS: gdb.base/code_elim.exp: single symtabs: test eliminated var my_static_symbol
+PASS: gdb.base/code_elim.exp: single symtabs: test eliminated var my_global_func
+PASS: gdb.base/code_elim.exp: single symtabs: get address of main
+PASS: gdb.base/code_elim.exp: order1: add-symbol-file code_elim1 0x100000
+PASS: gdb.base/code_elim.exp: order1: add-symbol-file code_elim2 0x200000
+PASS: gdb.base/code_elim.exp: order1: get address of my_global_symbol
+PASS: gdb.base/code_elim.exp: order1: get address of my_static_symbol
+PASS: gdb.base/code_elim.exp: order1: get address of my_global_func
+PASS: gdb.base/code_elim.exp: order1: get address of main
+PASS: gdb.base/code_elim.exp: order2: add-symbol-file code_elim2 0x200000
+PASS: gdb.base/code_elim.exp: order2: add-symbol-file code_elim1 0x100000
+PASS: gdb.base/code_elim.exp: order2: get address of my_global_symbol
+PASS: gdb.base/code_elim.exp: order2: get address of my_static_symbol
+PASS: gdb.base/code_elim.exp: order2: get address of my_global_func
+PASS: gdb.base/code_elim.exp: order2: get address of main
+Running ./gdb.base/code-expr.exp ...
+PASS: gdb.base/code-expr.exp: set print sevenbit-strings
+PASS: gdb.base/code-expr.exp: set print address off
+PASS: gdb.base/code-expr.exp: set width 0
+PASS: gdb.base/code-expr.exp: (@code char)
+PASS: gdb.base/code-expr.exp: (@code signed char)
+PASS: gdb.base/code-expr.exp: (@code unsigned char)
+PASS: gdb.base/code-expr.exp: (@code short)
+PASS: gdb.base/code-expr.exp: (@code signed short)
+PASS: gdb.base/code-expr.exp: (@code unsigned short)
+PASS: gdb.base/code-expr.exp: (@code int)
+PASS: gdb.base/code-expr.exp: (@code signed int)
+PASS: gdb.base/code-expr.exp: (@code unsigned int)
+PASS: gdb.base/code-expr.exp: (@code long)
+PASS: gdb.base/code-expr.exp: (@code signed long)
+PASS: gdb.base/code-expr.exp: (@code unsigned long)
+PASS: gdb.base/code-expr.exp: (@code long long)
+PASS: gdb.base/code-expr.exp: (@code signed long long)
+PASS: gdb.base/code-expr.exp: (@code unsigned long long)
+PASS: gdb.base/code-expr.exp: (@code float)
+PASS: gdb.base/code-expr.exp: (@code double)
+PASS: gdb.base/code-expr.exp: (@data char)
+PASS: gdb.base/code-expr.exp: (@data signed char)
+PASS: gdb.base/code-expr.exp: (@data unsigned char)
+PASS: gdb.base/code-expr.exp: (@data short)
+PASS: gdb.base/code-expr.exp: (@data signed short)
+PASS: gdb.base/code-expr.exp: (@data unsigned short)
+PASS: gdb.base/code-expr.exp: (@data int)
+PASS: gdb.base/code-expr.exp: (@data signed int)
+PASS: gdb.base/code-expr.exp: (@data unsigned int)
+PASS: gdb.base/code-expr.exp: (@data long)
+PASS: gdb.base/code-expr.exp: (@data signed long)
+PASS: gdb.base/code-expr.exp: (@data unsigned long)
+PASS: gdb.base/code-expr.exp: (@data long long)
+PASS: gdb.base/code-expr.exp: (@data signed long long)
+PASS: gdb.base/code-expr.exp: (@data unsigned long long)
+PASS: gdb.base/code-expr.exp: (@data float)
+PASS: gdb.base/code-expr.exp: (@data double)
+PASS: gdb.base/code-expr.exp: (char @code)
+PASS: gdb.base/code-expr.exp: (signed char @code)
+PASS: gdb.base/code-expr.exp: (unsigned char @code)
+PASS: gdb.base/code-expr.exp: (short @code)
+PASS: gdb.base/code-expr.exp: (signed short @code)
+PASS: gdb.base/code-expr.exp: (unsigned short @code)
+PASS: gdb.base/code-expr.exp: (int @code)
+PASS: gdb.base/code-expr.exp: (signed int @code)
+PASS: gdb.base/code-expr.exp: (unsigned int @code)
+PASS: gdb.base/code-expr.exp: (long @code)
+PASS: gdb.base/code-expr.exp: (signed long @code)
+PASS: gdb.base/code-expr.exp: (unsigned long @code)
+PASS: gdb.base/code-expr.exp: (long long @code)
+PASS: gdb.base/code-expr.exp: (signed long long @code)
+PASS: gdb.base/code-expr.exp: (unsigned long long @code)
+PASS: gdb.base/code-expr.exp: (float @code)
+PASS: gdb.base/code-expr.exp: (double @code)
+PASS: gdb.base/code-expr.exp: (char @data)
+PASS: gdb.base/code-expr.exp: (signed char @data)
+PASS: gdb.base/code-expr.exp: (unsigned char @data)
+PASS: gdb.base/code-expr.exp: (short @data)
+PASS: gdb.base/code-expr.exp: (signed short @data)
+PASS: gdb.base/code-expr.exp: (unsigned short @data)
+PASS: gdb.base/code-expr.exp: (int @data)
+PASS: gdb.base/code-expr.exp: (signed int @data)
+PASS: gdb.base/code-expr.exp: (unsigned int @data)
+PASS: gdb.base/code-expr.exp: (long @data)
+PASS: gdb.base/code-expr.exp: (signed long @data)
+PASS: gdb.base/code-expr.exp: (unsigned long @data)
+PASS: gdb.base/code-expr.exp: (long long @data)
+PASS: gdb.base/code-expr.exp: (signed long long @data)
+PASS: gdb.base/code-expr.exp: (unsigned long long @data)
+PASS: gdb.base/code-expr.exp: (float @data)
+PASS: gdb.base/code-expr.exp: (double @data)
+PASS: gdb.base/code-expr.exp: (@code enum misordered)
+PASS: gdb.base/code-expr.exp: (enum misordered @code)
+PASS: gdb.base/code-expr.exp: (@data enum misordered)
+PASS: gdb.base/code-expr.exp: (enum misordered @data)
+PASS: gdb.base/code-expr.exp: (@code int *)
+PASS: gdb.base/code-expr.exp: (int @code *)
+PASS: gdb.base/code-expr.exp: (int * @code)
+PASS: gdb.base/code-expr.exp: (@code int * @code)
+PASS: gdb.base/code-expr.exp: (int @code * @code)
+PASS: gdb.base/code-expr.exp: (@code int **)
+PASS: gdb.base/code-expr.exp: (int @code **)
+PASS: gdb.base/code-expr.exp: (int ** @code)
+PASS: gdb.base/code-expr.exp: (@code int * @code *)
+PASS: gdb.base/code-expr.exp: (int @code * @code *)
+PASS: gdb.base/code-expr.exp: (@code int * @code * @code)
+PASS: gdb.base/code-expr.exp: (int @code * @code * @code)
+PASS: gdb.base/code-expr.exp: (@code struct t_struct)
+PASS: gdb.base/code-expr.exp: (@code union t_union)
+PASS: gdb.base/code-expr.exp: (struct t_struct @code)
+PASS: gdb.base/code-expr.exp: (union t_union @code)
+PASS: gdb.base/code-expr.exp: (@code struct t_struct *)
+PASS: gdb.base/code-expr.exp: (@code union t_union *)
+PASS: gdb.base/code-expr.exp: (struct t_struct @code *)
+PASS: gdb.base/code-expr.exp: (union t_union @code *)
+PASS: gdb.base/code-expr.exp: (struct t_struct * @code)
+PASS: gdb.base/code-expr.exp: (union t_union * @code)
+PASS: gdb.base/code-expr.exp: (@code struct t_struct * @code)
+PASS: gdb.base/code-expr.exp: (@code union t_union * @code)
+PASS: gdb.base/code-expr.exp: (struct t_struct @code * @code)
+PASS: gdb.base/code-expr.exp: (union t_union @code * @code)
+Running ./gdb.base/commands.exp ...
+PASS: gdb.base/commands.exp: set foo in gdbvar_simple_if_test
+PASS: gdb.base/commands.exp: gdbvar_simple_if_test #1
+PASS: gdb.base/commands.exp: gdbvar_simple_if_test #2
+PASS: gdb.base/commands.exp: set foo in gdbvar_simple_while_test
+PASS: gdb.base/commands.exp: gdbvar_simple_while_test #1
+PASS: gdb.base/commands.exp: set foo in gdbvar complex_if_while_test
+PASS: gdb.base/commands.exp: gdbvar_complex_if_while_test #1
+PASS: gdb.base/commands.exp: set foo in user_defined_command_test
+PASS: gdb.base/commands.exp: define mycommand in user_defined_command_test
+PASS: gdb.base/commands.exp: enter commands in user_defined_command_test
+PASS: gdb.base/commands.exp: execute user defined command in user_defined_command_test
+PASS: gdb.base/commands.exp: display user command in user_defined_command_test
+PASS: gdb.base/commands.exp: tried to deprecate non-existing command
+PASS: gdb.base/commands.exp: maintenance deprecate p "new_p" /1/
+PASS: gdb.base/commands.exp: p deprecated warning, with replacement
+PASS: gdb.base/commands.exp: Deprecated warning goes away /1/
+PASS: gdb.base/commands.exp: maintenance deprecate p "new_p" /2/
+PASS: gdb.base/commands.exp: maintenance deprecate print "new_print"
+PASS: gdb.base/commands.exp: both alias and command are deprecated
+PASS: gdb.base/commands.exp: Deprecated warning goes away /2/
+PASS: gdb.base/commands.exp: deprecate long command /1/
+PASS: gdb.base/commands.exp: long command deprecated /1/
+PASS: gdb.base/commands.exp: deprecate long command /2/
+PASS: gdb.base/commands.exp: long command deprecated with no alternative /2/
+PASS: gdb.base/commands.exp: deprecate with no arguments
+PASS: gdb.base/commands.exp: stray_arg0_test #1
+PASS: gdb.base/commands.exp: stray_arg0_test #2
+PASS: gdb.base/commands.exp: stray_arg0_test #3
+PASS: gdb.base/commands.exp: stray_arg0_test #4
+PASS: gdb.base/commands.exp: source file with indented comment
+PASS: gdb.base/commands.exp: recursive source test
+PASS: gdb.base/commands.exp: set $tem in if_commands_test
+PASS: gdb.base/commands.exp: if $tem == 2 - if_commands_test 1
+PASS: gdb.base/commands.exp: break main - if_commands_test 1
+PASS: gdb.base/commands.exp: else - if_commands_test 1
+PASS: gdb.base/commands.exp: break factorial - if_commands_test 1
+PASS: gdb.base/commands.exp: commands - if_commands_test 1
+PASS: gdb.base/commands.exp: silent - if_commands_test 1
+PASS: gdb.base/commands.exp: set $tem = 3 - if_commands_test 1
+PASS: gdb.base/commands.exp: continue - if_commands_test 1
+PASS: gdb.base/commands.exp: first end - if_commands_test 1
+PASS: gdb.base/commands.exp: second end - if_commands_test 1
+PASS: gdb.base/commands.exp: if $tem == 1 - if_commands_test 2
+PASS: gdb.base/commands.exp: break main - if_commands_test 2
+PASS: gdb.base/commands.exp: else - if_commands_test 2
+PASS: gdb.base/commands.exp: break factorial - if_commands_test 2
+PASS: gdb.base/commands.exp: commands - if_commands_test 2
+PASS: gdb.base/commands.exp: silent - if_commands_test 2
+PASS: gdb.base/commands.exp: set $tem = 3 - if_commands_test 2
+PASS: gdb.base/commands.exp: continue - if_commands_test 2
+PASS: gdb.base/commands.exp: first end - if_commands_test 2
+PASS: gdb.base/commands.exp: second end - if_commands_test 2
+PASS: gdb.base/commands.exp: hook-stop 1
+PASS: gdb.base/commands.exp: hook-stop 1a
+PASS: gdb.base/commands.exp: hook-stop 1b
+PASS: gdb.base/commands.exp: main commands 1
+PASS: gdb.base/commands.exp: main commands 1a
+PASS: gdb.base/commands.exp: main commands 1b
+PASS: gdb.base/commands.exp: main commands 1c
+PASS: gdb.base/commands.exp: main commands 2
+PASS: gdb.base/commands.exp: main commands 2a
+PASS: gdb.base/commands.exp: main commands 2b
+PASS: gdb.base/commands.exp: main commands 2c
+PASS: gdb.base/commands.exp: cmd1 error
+PASS: gdb.base/commands.exp: no cmd2
+PASS: gdb.base/commands.exp: define one
+PASS: gdb.base/commands.exp: define hook-one
+PASS: gdb.base/commands.exp: define one in redefine_hook_test
+PASS: gdb.base/commands.exp: enter commands for one redefinition in redefine_hook_test
+PASS: gdb.base/commands.exp: execute one command in redefine_hook_test
+PASS: gdb.base/commands.exp: define backtrace
+PASS: gdb.base/commands.exp: expect response to define backtrace
+PASS: gdb.base/commands.exp: enter commands in redefine_backtrace_test
+PASS: gdb.base/commands.exp: execute backtrace command in redefine_backtrace_test
+PASS: gdb.base/commands.exp: execute bt command in redefine_backtrace_test
+Running ./gdb.base/completion.exp ...
+PASS: gdb.base/completion.exp: complete 'hfgfh'
+PASS: gdb.base/completion.exp: complete 'show output'
+PASS: gdb.base/completion.exp: complete 'show output-'
+PASS: gdb.base/completion.exp: complete 'p'
+PASS: gdb.base/completion.exp: complete 'p '
+PASS: gdb.base/completion.exp: complete 'info t foo'
+PASS: gdb.base/completion.exp: complete 'info t'
+PASS: gdb.base/completion.exp: complete 'info t '
+PASS: gdb.base/completion.exp: complete 'info asdfgh'
+PASS: gdb.base/completion.exp: complete 'info asdfgh '
+PASS: gdb.base/completion.exp: complete 'info'
+PASS: gdb.base/completion.exp: complete 'info '
+PASS: gdb.base/completion.exp: complete (2) 'info '
+PASS: gdb.base/completion.exp: complete 'help info wat'
+PASS: gdb.base/completion.exp: complete 'p "break1'
+XFAIL: gdb.base/completion.exp: complete 'p "break1.'
+PASS: gdb.base/completion.exp: complete 'p 'arg'
+PASS: gdb.base/completion.exp: complete (2) 'p 'arg'
+PASS: gdb.base/completion.exp: complete 'handle signal'
+PASS: gdb.base/completion.exp: complete 'handle keyword'
+PASS: gdb.base/completion.exp: complete help aliases
+PASS: gdb.base/completion.exp: complete 'p no_var_named_this-arg'
+PASS: gdb.base/completion.exp: complete (2) 'p no_var_named_this-arg'
+FAIL: gdb.base/completion.exp: complete (2) 'p no_var_named_this-' (timeout)
+FAIL: gdb.base/completion.exp: complete 'p values[0].a' (timeout)
+FAIL: gdb.base/completion.exp: complete 'p values[0] . a' (timeout)
+FAIL: gdb.base/completion.exp: complete 'p &values[0] -> a' (timeout)
+FAIL: gdb.base/completion.exp: completion of field in anonymous union
+FAIL: gdb.base/completion.exp: ptype completion of field in anonymous union
+PASS: gdb.base/completion.exp: whatis completion of field in anonymous union
+PASS: gdb.base/completion.exp: cd to ${srcdir}
+PASS: gdb.base/completion.exp: directory completion
+PASS: gdb.base/completion.exp: directory completion 2
+PASS: gdb.base/completion.exp: Glob remaining of directory test
+PASS: gdb.base/completion.exp: complete-command 'file ./gdb.base/compl'
+PASS: gdb.base/completion.exp: complete 'file ./gdb.base/complet'
+PASS: gdb.base/completion.exp: complete 'info func marke'
+PASS: gdb.base/completion.exp: complete 'set follow-fork-mode'
+PASS: gdb.base/completion.exp: field completion with invalid field
+PASS: gdb.base/completion.exp: test non-deprecated completion
+PASS: gdb.base/completion.exp: test deprecated completion
+PASS: gdb.base/completion.exp: complete ptype struct some_
+PASS: gdb.base/completion.exp: complete ptype enum some_
+PASS: gdb.base/completion.exp: complete ptype union some_
+PASS: gdb.base/completion.exp: complete set gnutarget aut
+PASS: gdb.base/completion.exp: complete set cp-abi aut
+Running ./gdb.base/complex.exp ...
+PASS: gdb.base/complex.exp: print complex packed value in C
+PASS: gdb.base/complex.exp: print complex value in C
+Running ./gdb.base/comprdebug.exp ...
+PASS: gdb.base/comprdebug.exp: file comprdebug0.o
+Running ./gdb.base/condbreak.exp ...
+PASS: gdb.base/condbreak.exp: breakpoint function
+PASS: gdb.base/condbreak.exp: break marker1 if 1==1
+PASS: gdb.base/condbreak.exp: delete 2
+PASS: gdb.base/condbreak.exp: break break.c:92 if 1==1
+PASS: gdb.base/condbreak.exp: delete 3
+PASS: gdb.base/condbreak.exp: break marker1 if (1==1)
+PASS: gdb.base/condbreak.exp: break break.c:92 if (1==1)
+PASS: gdb.base/condbreak.exp: break marker2 if (a==43)
+PASS: gdb.base/condbreak.exp: break marker3 if (multi_line_if_conditional(1,1,1)==0)
+PASS: gdb.base/condbreak.exp: break marker4
+FAIL: gdb.base/condbreak.exp: breakpoint info
+PASS: gdb.base/condbreak.exp: rerun to main
+PASS: gdb.base/condbreak.exp: run until breakpoint set at a line number
+PASS: gdb.base/condbreak.exp: run until breakpoint at marker1
+PASS: gdb.base/condbreak.exp: run until breakpoint at marker2
+PASS: gdb.base/condbreak.exp: break main if (1==1) thread 999
+PASS: gdb.base/condbreak.exp: break main thread 999 if (1==1)
+PASS: gdb.base/condbreak.exp: break *main if (1==1) thread 999
+PASS: gdb.base/condbreak.exp: break *main thread 999 if (1==1)
+PASS: gdb.base/condbreak.exp: break *main if (1==1) task 999
+PASS: gdb.base/condbreak.exp: break *main task 999 if (1==1)
+PASS: gdb.base/condbreak.exp: break *main if (1==1) t 999
+PASS: gdb.base/condbreak.exp: break *main if (1==1) th 999
+PASS: gdb.base/condbreak.exp: break *main if (1==1) ta 999
+PASS: gdb.base/condbreak.exp: run until breakpoint at marker3
+PASS: gdb.base/condbreak.exp: run until breakpoint at marker4
+PASS: gdb.base/condbreak.exp: complete cond 1
+PASS: gdb.base/condbreak.exp: set variable $var = 1
+PASS: gdb.base/condbreak.exp: complete cond $v
+PASS: gdb.base/condbreak.exp: complete cond 1 values[0].a
+Running ./gdb.base/cond-eval-mode.exp ...
+PASS: gdb.base/cond-eval-mode.exp: set breakpoint condition-evaluation host
+PASS: gdb.base/cond-eval-mode.exp: set breakpoint condition-evaluation auto
+PASS: gdb.base/cond-eval-mode.exp: set breakpoint condition-evaluation target
+Running ./gdb.base/cond-expr.exp ...
+PASS: gdb.base/cond-expr.exp: print value of cond expr (const true)
+PASS: gdb.base/cond-expr.exp: print value of cond expr (const false)
+PASS: gdb.base/cond-expr.exp: set variable x=14
+PASS: gdb.base/cond-expr.exp: set variable y=2
+PASS: gdb.base/cond-expr.exp: set variable z=3
+PASS: gdb.base/cond-expr.exp: print value of cond expr (var true)
+PASS: gdb.base/cond-expr.exp: set variable x=0
+PASS: gdb.base/cond-expr.exp: print value of cond expr (var false)
+PASS: gdb.base/cond-expr.exp: print whatis of cond expr
+Running ./gdb.base/consecutive.exp ...
+PASS: gdb.base/consecutive.exp: continue to breakpoint in foo
+PASS: gdb.base/consecutive.exp: get breakpoint address for foo
+PASS: gdb.base/consecutive.exp: set bp, 2nd instr
+PASS: gdb.base/consecutive.exp: stopped at bp, 2nd instr
+Running ./gdb.base/constvars.exp ...
+PASS: gdb.base/constvars.exp: break marker1
+PASS: gdb.base/constvars.exp: continue to marker1
+PASS: gdb.base/constvars.exp: up from marker1
+PASS: gdb.base/constvars.exp: ptype qux1
+PASS: gdb.base/constvars.exp: print lave
+PASS: gdb.base/constvars.exp: ptype lave
+PASS: gdb.base/constvars.exp: print lavish
+PASS: gdb.base/constvars.exp: ptype lavish
+PASS: gdb.base/constvars.exp: print lax
+PASS: gdb.base/constvars.exp: ptype lax
+PASS: gdb.base/constvars.exp: print lecherous
+PASS: gdb.base/constvars.exp: ptype lecherous
+PASS: gdb.base/constvars.exp: print lechery
+PASS: gdb.base/constvars.exp: ptype lechery
+PASS: gdb.base/constvars.exp: print lectern
+PASS: gdb.base/constvars.exp: ptype lectern
+PASS: gdb.base/constvars.exp: print leeway
+PASS: gdb.base/constvars.exp: ptype leeway
+PASS: gdb.base/constvars.exp: print legacy
+PASS: gdb.base/constvars.exp: ptype legacy
+PASS: gdb.base/constvars.exp: print laconic
+PASS: gdb.base/constvars.exp: ptype laconic
+PASS: gdb.base/constvars.exp: print laggard
+PASS: gdb.base/constvars.exp: ptype laggard
+PASS: gdb.base/constvars.exp: print lagoon
+PASS: gdb.base/constvars.exp: ptype lagoon
+PASS: gdb.base/constvars.exp: print laity
+PASS: gdb.base/constvars.exp: ptype laity
+PASS: gdb.base/constvars.exp: print lambent
+PASS: gdb.base/constvars.exp: ptype lambent
+PASS: gdb.base/constvars.exp: print laminated
+PASS: gdb.base/constvars.exp: ptype laminated
+PASS: gdb.base/constvars.exp: print lampoon
+PASS: gdb.base/constvars.exp: ptype lampoon
+PASS: gdb.base/constvars.exp: print languid
+PASS: gdb.base/constvars.exp: ptype languid
+PASS: gdb.base/constvars.exp: print *legend
+PASS: gdb.base/constvars.exp: ptype legend
+PASS: gdb.base/constvars.exp: print *legerdemain
+PASS: gdb.base/constvars.exp: ptype legerdemain
+PASS: gdb.base/constvars.exp: print *leniency
+PASS: gdb.base/constvars.exp: ptype leniency
+PASS: gdb.base/constvars.exp: print *leonine
+PASS: gdb.base/constvars.exp: ptype leonine
+PASS: gdb.base/constvars.exp: print *lesion
+PASS: gdb.base/constvars.exp: ptype lesion
+PASS: gdb.base/constvars.exp: print *lethal
+PASS: gdb.base/constvars.exp: ptype lethal
+PASS: gdb.base/constvars.exp: print *lethargic
+PASS: gdb.base/constvars.exp: ptype lethargic
+PASS: gdb.base/constvars.exp: print *levity
+PASS: gdb.base/constvars.exp: ptype levity
+PASS: gdb.base/constvars.exp: print *lewd
+PASS: gdb.base/constvars.exp: ptype lewd
+PASS: gdb.base/constvars.exp: print *lexicographer
+PASS: gdb.base/constvars.exp: ptype lexicographer
+PASS: gdb.base/constvars.exp: print *lexicon
+PASS: gdb.base/constvars.exp: ptype lexicon
+PASS: gdb.base/constvars.exp: print *liaison
+PASS: gdb.base/constvars.exp: ptype liaison
+PASS: gdb.base/constvars.exp: print *libation
+PASS: gdb.base/constvars.exp: ptype libation
+PASS: gdb.base/constvars.exp: print *libelous
+PASS: gdb.base/constvars.exp: ptype libelous
+PASS: gdb.base/constvars.exp: print *libertine
+PASS: gdb.base/constvars.exp: ptype libertine
+PASS: gdb.base/constvars.exp: print *libidinous
+PASS: gdb.base/constvars.exp: ptype libidinous
+PASS: gdb.base/constvars.exp: print *languish
+PASS: gdb.base/constvars.exp: ptype languish
+PASS: gdb.base/constvars.exp: print *languor
+PASS: gdb.base/constvars.exp: ptype languor
+PASS: gdb.base/constvars.exp: print *lank
+PASS: gdb.base/constvars.exp: ptype lank
+PASS: gdb.base/constvars.exp: print *lapidary
+PASS: gdb.base/constvars.exp: ptype lapidary
+PASS: gdb.base/constvars.exp: print *larceny
+PASS: gdb.base/constvars.exp: ptype larceny
+PASS: gdb.base/constvars.exp: print *largess
+PASS: gdb.base/constvars.exp: ptype largess
+PASS: gdb.base/constvars.exp: print *lascivious
+PASS: gdb.base/constvars.exp: ptype lascivious
+PASS: gdb.base/constvars.exp: print *lassitude
+PASS: gdb.base/constvars.exp: ptype lassitude
+PASS: gdb.base/constvars.exp: print *lamprey
+PASS: gdb.base/constvars.exp: ptype lamprey
+PASS: gdb.base/constvars.exp: print *lariat
+PASS: gdb.base/constvars.exp: ptype lariat
+PASS: gdb.base/constvars.exp: print *laudanum
+PASS: gdb.base/constvars.exp: ptype laudanum
+PASS: gdb.base/constvars.exp: print *lecithin
+PASS: gdb.base/constvars.exp: ptype lecithin
+PASS: gdb.base/constvars.exp: print *leviathan
+PASS: gdb.base/constvars.exp: ptype leviathan
+PASS: gdb.base/constvars.exp: print *libretto
+PASS: gdb.base/constvars.exp: ptype libretto
+PASS: gdb.base/constvars.exp: print *lissome
+PASS: gdb.base/constvars.exp: ptype lissome
+PASS: gdb.base/constvars.exp: print *locust
+PASS: gdb.base/constvars.exp: ptype locust
+PASS: gdb.base/constvars.exp: ptype logical
+PASS: gdb.base/constvars.exp: ptype lugged
+PASS: gdb.base/constvars.exp: ptype luck
+PASS: gdb.base/constvars.exp: ptype lunar
+PASS: gdb.base/constvars.exp: ptype lumen
+PASS: gdb.base/constvars.exp: ptype lurk
+PASS: gdb.base/constvars.exp: ptype lush
+PASS: gdb.base/constvars.exp: ptype lynx
+PASS: gdb.base/constvars.exp: ptype crass
+PASS: gdb.base/constvars.exp: ptype crisp
+Running ./gdb.base/corefile.exp ...
+Running ./gdb.base/ctxobj.exp ...
+FAIL: gdb.base/ctxobj.exp: break in get_version functions (got interactive prompt)
+FAIL: gdb.base/ctxobj.exp: continue to get_version_1 (the program exited)
+FAIL: gdb.base/ctxobj.exp: print libctxobj1's this_version_num from partial symtab
+FAIL: gdb.base/ctxobj.exp: print libctxobj1's this_version_num from symtab
+FAIL: gdb.base/ctxobj.exp: continue to get_version_2 (the program is no longer running)
+FAIL: gdb.base/ctxobj.exp: print libctxobj2's this_version_num from partial symtab
+FAIL: gdb.base/ctxobj.exp: print libctxobj2's this_version_num from symtab
+Running ./gdb.base/cursal.exp ...
+PASS: gdb.base/cursal.exp: set listsize 1
+PASS: gdb.base/cursal.exp: list before run
+PASS: gdb.base/cursal.exp: list in main
+PASS: gdb.base/cursal.exp: list in func2
+PASS: gdb.base/cursal.exp: backtrace
+PASS: gdb.base/cursal.exp: list after backtrace
+PASS: gdb.base/cursal.exp: set listsize 3
+PASS: gdb.base/cursal.exp: list size 3
+Running ./gdb.base/cvexpr.exp ...
+PASS: gdb.base/cvexpr.exp: set print sevenbit-strings
+PASS: gdb.base/cvexpr.exp: set print address off
+PASS: gdb.base/cvexpr.exp: set width 0
+PASS: gdb.base/cvexpr.exp: (const char)
+PASS: gdb.base/cvexpr.exp: (const signed char)
+PASS: gdb.base/cvexpr.exp: (const unsigned char)
+PASS: gdb.base/cvexpr.exp: (const short)
+PASS: gdb.base/cvexpr.exp: (const signed short)
+PASS: gdb.base/cvexpr.exp: (const unsigned short)
+PASS: gdb.base/cvexpr.exp: (const int)
+PASS: gdb.base/cvexpr.exp: (const signed int)
+PASS: gdb.base/cvexpr.exp: (const unsigned int)
+PASS: gdb.base/cvexpr.exp: (const long)
+PASS: gdb.base/cvexpr.exp: (const signed long)
+PASS: gdb.base/cvexpr.exp: (const unsigned long)
+PASS: gdb.base/cvexpr.exp: (const long long)
+PASS: gdb.base/cvexpr.exp: (const signed long long)
+PASS: gdb.base/cvexpr.exp: (const unsigned long long)
+PASS: gdb.base/cvexpr.exp: (const float)
+PASS: gdb.base/cvexpr.exp: (const double)
+PASS: gdb.base/cvexpr.exp: (volatile char)
+PASS: gdb.base/cvexpr.exp: (volatile signed char)
+PASS: gdb.base/cvexpr.exp: (volatile unsigned char)
+PASS: gdb.base/cvexpr.exp: (volatile short)
+PASS: gdb.base/cvexpr.exp: (volatile signed short)
+PASS: gdb.base/cvexpr.exp: (volatile unsigned short)
+PASS: gdb.base/cvexpr.exp: (volatile int)
+PASS: gdb.base/cvexpr.exp: (volatile signed int)
+PASS: gdb.base/cvexpr.exp: (volatile unsigned int)
+PASS: gdb.base/cvexpr.exp: (volatile long)
+PASS: gdb.base/cvexpr.exp: (volatile signed long)
+PASS: gdb.base/cvexpr.exp: (volatile unsigned long)
+PASS: gdb.base/cvexpr.exp: (volatile long long)
+PASS: gdb.base/cvexpr.exp: (volatile signed long long)
+PASS: gdb.base/cvexpr.exp: (volatile unsigned long long)
+PASS: gdb.base/cvexpr.exp: (volatile float)
+PASS: gdb.base/cvexpr.exp: (volatile double)
+PASS: gdb.base/cvexpr.exp: (const volatile int)
+PASS: gdb.base/cvexpr.exp: (volatile const int)
+PASS: gdb.base/cvexpr.exp: (const int volatile)
+PASS: gdb.base/cvexpr.exp: (volatile int const)
+PASS: gdb.base/cvexpr.exp: (int const volatile)
+PASS: gdb.base/cvexpr.exp: (int volatile const)
+PASS: gdb.base/cvexpr.exp: (const volatile int *)
+PASS: gdb.base/cvexpr.exp: (volatile const int *)
+PASS: gdb.base/cvexpr.exp: (const int volatile)
+PASS: gdb.base/cvexpr.exp: (volatile int const *)
+PASS: gdb.base/cvexpr.exp: (int const volatile *)
+PASS: gdb.base/cvexpr.exp: (int volatile const *)
+PASS: gdb.base/cvexpr.exp: (int * const volatile)
+PASS: gdb.base/cvexpr.exp: (int * volatile const)
+PASS: gdb.base/cvexpr.exp: (char const)
+PASS: gdb.base/cvexpr.exp: (signed char const)
+PASS: gdb.base/cvexpr.exp: (unsigned char const)
+PASS: gdb.base/cvexpr.exp: (short const)
+PASS: gdb.base/cvexpr.exp: (signed short const)
+PASS: gdb.base/cvexpr.exp: (unsigned short const)
+PASS: gdb.base/cvexpr.exp: (int const)
+PASS: gdb.base/cvexpr.exp: (signed int const)
+PASS: gdb.base/cvexpr.exp: (unsigned int const)
+PASS: gdb.base/cvexpr.exp: (long const)
+PASS: gdb.base/cvexpr.exp: (signed long const)
+PASS: gdb.base/cvexpr.exp: (unsigned long const)
+PASS: gdb.base/cvexpr.exp: (long long const)
+PASS: gdb.base/cvexpr.exp: (signed long long const)
+PASS: gdb.base/cvexpr.exp: (unsigned long long const)
+PASS: gdb.base/cvexpr.exp: (float const)
+PASS: gdb.base/cvexpr.exp: (double const)
+PASS: gdb.base/cvexpr.exp: (char volatile)
+PASS: gdb.base/cvexpr.exp: (signed char volatile)
+PASS: gdb.base/cvexpr.exp: (unsigned char volatile)
+PASS: gdb.base/cvexpr.exp: (short volatile)
+PASS: gdb.base/cvexpr.exp: (signed short volatile)
+PASS: gdb.base/cvexpr.exp: (unsigned short volatile)
+PASS: gdb.base/cvexpr.exp: (int volatile)
+PASS: gdb.base/cvexpr.exp: (signed int volatile)
+PASS: gdb.base/cvexpr.exp: (unsigned int volatile)
+PASS: gdb.base/cvexpr.exp: (long volatile)
+PASS: gdb.base/cvexpr.exp: (signed long volatile)
+PASS: gdb.base/cvexpr.exp: (unsigned long volatile)
+PASS: gdb.base/cvexpr.exp: (long long volatile)
+PASS: gdb.base/cvexpr.exp: (signed long long volatile)
+PASS: gdb.base/cvexpr.exp: (unsigned long long volatile)
+PASS: gdb.base/cvexpr.exp: (float volatile)
+PASS: gdb.base/cvexpr.exp: (double volatile)
+PASS: gdb.base/cvexpr.exp: (const enum misordered)
+PASS: gdb.base/cvexpr.exp: (enum misordered const)
+PASS: gdb.base/cvexpr.exp: (volatile enum misordered)
+PASS: gdb.base/cvexpr.exp: (enum misordered volatile)
+PASS: gdb.base/cvexpr.exp: (const int *)
+PASS: gdb.base/cvexpr.exp: (int const *)
+PASS: gdb.base/cvexpr.exp: (int * const)
+PASS: gdb.base/cvexpr.exp: (const int * const)
+PASS: gdb.base/cvexpr.exp: (int const * const)
+PASS: gdb.base/cvexpr.exp: (const int **)
+PASS: gdb.base/cvexpr.exp: (int const **)
+PASS: gdb.base/cvexpr.exp: (int ** const)
+PASS: gdb.base/cvexpr.exp: (const int * const *)
+PASS: gdb.base/cvexpr.exp: (int const * const *)
+PASS: gdb.base/cvexpr.exp: (const int * const * const)
+PASS: gdb.base/cvexpr.exp: (int const * const * const)
+PASS: gdb.base/cvexpr.exp: (const struct t_struct)
+PASS: gdb.base/cvexpr.exp: (const union t_union)
+PASS: gdb.base/cvexpr.exp: (struct t_struct const)
+PASS: gdb.base/cvexpr.exp: (union t_union const)
+PASS: gdb.base/cvexpr.exp: (const struct t_struct *)
+PASS: gdb.base/cvexpr.exp: (const union t_union *)
+PASS: gdb.base/cvexpr.exp: (struct t_struct const *)
+PASS: gdb.base/cvexpr.exp: (union t_union const *)
+PASS: gdb.base/cvexpr.exp: (struct t_struct * const)
+PASS: gdb.base/cvexpr.exp: (union t_union * const)
+PASS: gdb.base/cvexpr.exp: (const struct t_struct * const)
+PASS: gdb.base/cvexpr.exp: (const union t_union * const)
+PASS: gdb.base/cvexpr.exp: (struct t_struct const * const)
+PASS: gdb.base/cvexpr.exp: (union t_union const * const)
+Running ./gdb.base/dbx.exp ...
+PASS: gdb.base/dbx.exp: stop in main
+PASS: gdb.base/dbx.exp: status
+PASS: gdb.base/dbx.exp: stop at average.c:43
+PASS: gdb.base/dbx.exp: stop in average.c:43
+PASS: gdb.base/dbx.exp: stop at main
+PASS: gdb.base/dbx.exp: running to main
+PASS: gdb.base/dbx.exp: assign first
+PASS: gdb.base/dbx.exp: print first
+PASS: gdb.base/dbx.exp: whereis my_list
+PASS: gdb.base/dbx.exp: file average.c:1
+PASS: gdb.base/dbx.exp: cont 1
+PASS: gdb.base/dbx.exp: step
+XFAIL: gdb.base/dbx.exp: func sum
+PASS: gdb.base/dbx.exp: stop in sum
+PASS: gdb.base/dbx.exp: cont 2
+XFAIL: gdb.base/dbx.exp: func print_average
+Running ./gdb.base/debug-expr.exp ...
+PASS: gdb.base/debug-expr.exp: set variable array[0] = 0
+PASS: gdb.base/debug-expr.exp: set variable array[1] = 1
+PASS: gdb.base/debug-expr.exp: set variable array[2] = 2
+PASS: gdb.base/debug-expr.exp: set variable array[3] = 3
+PASS: gdb.base/debug-expr.exp: set debug expression 1
+PASS: gdb.base/debug-expr.exp: print /x {char[4]} array
+Running ./gdb.base/default.exp ...
+PASS: gdb.base/default.exp: add-symbol-file
+PASS: gdb.base/default.exp: append
+PASS: gdb.base/default.exp: append binary
+PASS: gdb.base/default.exp: append memory
+PASS: gdb.base/default.exp: append value
+PASS: gdb.base/default.exp: append binary memory
+PASS: gdb.base/default.exp: append binary value
+WARNING: Skipping backtrace and break tests because of GDB stub.
+PASS: gdb.base/default.exp: continue
+PASS: gdb.base/default.exp: continue "c" abbreviation
+PASS: gdb.base/default.exp: call
+PASS: gdb.base/default.exp: catch
+PASS: gdb.base/default.exp: cd
+PASS: gdb.base/default.exp: clear
+PASS: gdb.base/default.exp: commands
+PASS: gdb.base/default.exp: condition
+PASS: gdb.base/default.exp: core-file
+PASS: gdb.base/default.exp: delete "d" abbreviation
+PASS: gdb.base/default.exp: delete
+PASS: gdb.base/default.exp: define
+PASS: gdb.base/default.exp: delete breakpoints
+PASS: gdb.base/default.exp: delete display prompt
+PASS: gdb.base/default.exp: detach
+PASS: gdb.base/default.exp: directory prompt
+PASS: gdb.base/default.exp: disable "dis" abbreviation
+PASS: gdb.base/default.exp: disable "disa" abbreviation
+PASS: gdb.base/default.exp: disable
+PASS: gdb.base/default.exp: disable breakpoints
+PASS: gdb.base/default.exp: disable display
+PASS: gdb.base/default.exp: disassemble
+PASS: gdb.base/default.exp: display
+PASS: gdb.base/default.exp: do
+PASS: gdb.base/default.exp: document
+PASS: gdb.base/default.exp: down
+PASS: gdb.base/default.exp: down-silently
+PASS: gdb.base/default.exp: dump
+PASS: gdb.base/default.exp: dump binary
+PASS: gdb.base/default.exp: dump ihex
+PASS: gdb.base/default.exp: dump memory
+PASS: gdb.base/default.exp: dump srec
+PASS: gdb.base/default.exp: dump tekhex
+PASS: gdb.base/default.exp: dump value
+PASS: gdb.base/default.exp: dump binary memory
+PASS: gdb.base/default.exp: dump binary value
+PASS: gdb.base/default.exp: dump ihex memory
+PASS: gdb.base/default.exp: dump ihex value
+PASS: gdb.base/default.exp: dump srec memory
+PASS: gdb.base/default.exp: dump srec value
+PASS: gdb.base/default.exp: dump tekhex memory
+PASS: gdb.base/default.exp: dump tekhex value
+PASS: gdb.base/default.exp: echo
+PASS: gdb.base/default.exp: enable breakpoints delete
+PASS: gdb.base/default.exp: enable breakpoints once
+PASS: gdb.base/default.exp: enable breakpoints
+PASS: gdb.base/default.exp: enable delete
+PASS: gdb.base/default.exp: enable display
+PASS: gdb.base/default.exp: enable once
+PASS: gdb.base/default.exp: enable
+PASS: gdb.base/default.exp: exec-file
+PASS: gdb.base/default.exp: frame "f" abbreviation
+PASS: gdb.base/default.exp: frame
+PASS: gdb.base/default.exp: fg
+PASS: gdb.base/default.exp: file
+PASS: gdb.base/default.exp: finish
+PASS: gdb.base/default.exp: forward-search
+PASS: gdb.base/default.exp: gcore
+PASS: gdb.base/default.exp: generate-core-file
+PASS: gdb.base/default.exp: help "h" abbreviation
+PASS: gdb.base/default.exp: help
+PASS: gdb.base/default.exp: handle
+PASS: gdb.base/default.exp: info "i" abbreviation
+PASS: gdb.base/default.exp: info
+PASS: gdb.base/default.exp: ignore
+PASS: gdb.base/default.exp: info address
+PASS: gdb.base/default.exp: info all-registers
+PASS: gdb.base/default.exp: info args
+PASS: gdb.base/default.exp: info bogus-gdb-command
+PASS: gdb.base/default.exp: info breakpoints
+PASS: gdb.base/default.exp: info copying
+PASS: gdb.base/default.exp: info display
+PASS: gdb.base/default.exp: info frame "f" abbreviation
+PASS: gdb.base/default.exp: info frame
+PASS: gdb.base/default.exp: info files
+PASS: gdb.base/default.exp: info float
+PASS: gdb.base/default.exp: info functions
+PASS: gdb.base/default.exp: info locals
+PASS: gdb.base/default.exp: info program
+PASS: gdb.base/default.exp: info registers
+PASS: gdb.base/default.exp: info stack "s" abbreviation
+PASS: gdb.base/default.exp: info stack
+PASS: gdb.base/default.exp: info set
+PASS: gdb.base/default.exp: info symbol
+PASS: gdb.base/default.exp: info source
+PASS: gdb.base/default.exp: info sources
+PASS: gdb.base/default.exp: info target
+PASS: gdb.base/default.exp: info terminal
+PASS: gdb.base/default.exp: info threads
+PASS: gdb.base/default.exp: info types
+PASS: gdb.base/default.exp: info variables
+PASS: gdb.base/default.exp: info vector
+PASS: gdb.base/default.exp: info warranty
+PASS: gdb.base/default.exp: info watchpoints
+PASS: gdb.base/default.exp: inspect
+PASS: gdb.base/default.exp: jump
+PASS: gdb.base/default.exp: kill
+PASS: gdb.base/default.exp: list "l" abbreviation
+PASS: gdb.base/default.exp: list
+PASS: gdb.base/default.exp: load
+PASS: gdb.base/default.exp: next "n" abbreviation
+PASS: gdb.base/default.exp: next
+PASS: gdb.base/default.exp: nexti "ni" abbreviation
+PASS: gdb.base/default.exp: nexti
+PASS: gdb.base/default.exp: output
+PASS: gdb.base/default.exp: overlay
+PASS: gdb.base/default.exp: overlay on
+PASS: gdb.base/default.exp: overlay manual #1
+PASS: gdb.base/default.exp: overlay auto
+PASS: gdb.base/default.exp: overlay off
+PASS: gdb.base/default.exp: overlay list
+PASS: gdb.base/default.exp: overlay map #1
+PASS: gdb.base/default.exp: overlay unmap #1
+PASS: gdb.base/default.exp: overlay manual #2
+PASS: gdb.base/default.exp: overlay map #2
+PASS: gdb.base/default.exp: overlay unmap #2
+PASS: gdb.base/default.exp: print "p" abbreviation
+PASS: gdb.base/default.exp: print
+PASS: gdb.base/default.exp: printf
+PASS: gdb.base/default.exp: ptype
+PASS: gdb.base/default.exp: pwd
+PASS: gdb.base/default.exp: rbreak
+PASS: gdb.base/default.exp: restore
+PASS: gdb.base/default.exp: return
+PASS: gdb.base/default.exp: reverse-search
+PASS: gdb.base/default.exp: step "s" abbreviation #1
+PASS: gdb.base/default.exp: step #1
+PASS: gdb.base/default.exp: search
+PASS: gdb.base/default.exp: section
+PASS: gdb.base/default.exp: set annotate
+PASS: gdb.base/default.exp: set args
+PASS: gdb.base/default.exp: set check "c" abbreviation
+PASS: gdb.base/default.exp: set check "ch" abbreviation
+PASS: gdb.base/default.exp: set check "check" abbreviation
+PASS: gdb.base/default.exp: set check range
+PASS: gdb.base/default.exp: set check type
+PASS: gdb.base/default.exp: set complaints
+PASS: gdb.base/default.exp: set confirm
+PASS: gdb.base/default.exp: set environment
+PASS: gdb.base/default.exp: set height
+PASS: gdb.base/default.exp: set history expansion
+PASS: gdb.base/default.exp: set history filename
+PASS: gdb.base/default.exp: set history save
+PASS: gdb.base/default.exp: set history size
+PASS: gdb.base/default.exp: set history
+PASS: gdb.base/default.exp: set language
+PASS: gdb.base/default.exp: set listsize
+PASS: gdb.base/default.exp: set print "p" abbreviation
+PASS: gdb.base/default.exp: set print "pr" abbreviation
+PASS: gdb.base/default.exp: set print
+PASS: gdb.base/default.exp: set print address
+PASS: gdb.base/default.exp: set print array
+PASS: gdb.base/default.exp: set print asm-demangle
+PASS: gdb.base/default.exp: set print demangle
+PASS: gdb.base/default.exp: set print elements
+PASS: gdb.base/default.exp: set print object
+PASS: gdb.base/default.exp: set print pretty
+PASS: gdb.base/default.exp: set print sevenbit-strings
+PASS: gdb.base/default.exp: set print union
+PASS: gdb.base/default.exp: set print vtbl
+PASS: gdb.base/default.exp: set radix
+PASS: gdb.base/default.exp: set variable
+PASS: gdb.base/default.exp: set verbose
+PASS: gdb.base/default.exp: set width
+PASS: gdb.base/default.exp: set write
+PASS: gdb.base/default.exp: set
+PASS: gdb.base/default.exp: shell echo Hi dad!
+PASS: gdb.base/default.exp: show annotate
+PASS: gdb.base/default.exp: show args
+PASS: gdb.base/default.exp: show check "c" abbreviation
+PASS: gdb.base/default.exp: show check "ch" abbreviation
+PASS: gdb.base/default.exp: show check "check" abbreviation
+PASS: gdb.base/default.exp: show check range
+PASS: gdb.base/default.exp: show check type
+PASS: gdb.base/default.exp: show commands
+PASS: gdb.base/default.exp: show complaints
+PASS: gdb.base/default.exp: show confirm
+PASS: gdb.base/default.exp: show convenience
+PASS: gdb.base/default.exp: show directories
+PASS: gdb.base/default.exp: show editing
+PASS: gdb.base/default.exp: show height
+PASS: gdb.base/default.exp: show history expansion
+PASS: gdb.base/default.exp: show history filename
+PASS: gdb.base/default.exp: show history save
+PASS: gdb.base/default.exp: show history size
+PASS: gdb.base/default.exp: show history
+PASS: gdb.base/default.exp: show language
+PASS: gdb.base/default.exp: show listsize
+PASS: gdb.base/default.exp: show p
+PASS: gdb.base/default.exp: show pr
+PASS: gdb.base/default.exp: show print
+PASS: gdb.base/default.exp: show paths
+PASS: gdb.base/default.exp: show print address
+PASS: gdb.base/default.exp: show print array
+PASS: gdb.base/default.exp: show print asm-demangle
+PASS: gdb.base/default.exp: show print demangle
+PASS: gdb.base/default.exp: show print elements
+PASS: gdb.base/default.exp: show print object
+PASS: gdb.base/default.exp: show print pretty
+PASS: gdb.base/default.exp: show print sevenbit-strings
+PASS: gdb.base/default.exp: show print union
+PASS: gdb.base/default.exp: show print vtbl
+PASS: gdb.base/default.exp: show prompt
+PASS: gdb.base/default.exp: show radix
+PASS: gdb.base/default.exp: show user
+PASS: gdb.base/default.exp: show values
+PASS: gdb.base/default.exp: show verbose
+PASS: gdb.base/default.exp: show version
+PASS: gdb.base/default.exp: show width
+PASS: gdb.base/default.exp: show write
+PASS: gdb.base/default.exp: show
+PASS: gdb.base/default.exp: stepi "si" abbreviation
+PASS: gdb.base/default.exp: stepi
+PASS: gdb.base/default.exp: signal
+PASS: gdb.base/default.exp: source
+PASS: gdb.base/default.exp: step "s" abbreviation #2
+PASS: gdb.base/default.exp: step #2
+PASS: gdb.base/default.exp: symbol-file
+PASS: gdb.base/default.exp: target child
+PASS: gdb.base/default.exp: target procfs
+PASS: gdb.base/default.exp: target core
+PASS: gdb.base/default.exp: target exec
+PASS: gdb.base/default.exp: target remote
+PASS: gdb.base/default.exp: target
+PASS: gdb.base/default.exp: tbreak
+PASS: gdb.base/default.exp: thread
+PASS: gdb.base/default.exp: thread apply
+PASS: gdb.base/default.exp: thread find
+PASS: gdb.base/default.exp: thread name
+PASS: gdb.base/default.exp: tty
+PASS: gdb.base/default.exp: until "u" abbreviation
+PASS: gdb.base/default.exp: until
+PASS: gdb.base/default.exp: undisplay prompt
+PASS: gdb.base/default.exp: unset environment prompt
+PASS: gdb.base/default.exp: unset
+PASS: gdb.base/default.exp: up-silently
+PASS: gdb.base/default.exp: watch
+PASS: gdb.base/default.exp: whatis
+PASS: gdb.base/default.exp: where
+PASS: gdb.base/default.exp: x
+Running ./gdb.base/define.exp ...
+PASS: gdb.base/define.exp: define user command: nextwhere
+FAIL: gdb.base/define.exp: use user command: nextwhere
+PASS: gdb.base/define.exp: define user command: nextwh
+PASS: gdb.base/define.exp: redefine user command aborted: nextwhere
+PASS: gdb.base/define.exp: redefine user command: nextwhere
+PASS: gdb.base/define.exp: redocumenting builtin command disallowed
+PASS: gdb.base/define.exp: document user command: nextwhere
+PASS: gdb.base/define.exp: re-document user command: nextwhere
+PASS: gdb.base/define.exp: help user command: nextwhere
+PASS: gdb.base/define.exp: set up whitespace in help string
+PASS: gdb.base/define.exp: preserve whitespace in help string
+PASS: gdb.base/define.exp: define user command: ifnospace
+PASS: gdb.base/define.exp: test ifnospace is parsed correctly
+PASS: gdb.base/define.exp: define user command: whilenospace
+PASS: gdb.base/define.exp: test whilenospace is parsed correctly
+PASS: gdb.base/define.exp: define user command: user-bt
+PASS: gdb.base/define.exp: define hook-stop command
+FAIL: gdb.base/define.exp: use hook-stop command
+PASS: gdb.base/define.exp: define hook undefined command aborted: bar
+PASS: gdb.base/define.exp: define hook undefined command: bar
+PASS: gdb.base/define.exp: define target testsuite
+PASS: gdb.base/define.exp: document target testsuite
+PASS: gdb.base/define.exp: help target
+PASS: gdb.base/define.exp: target testsuite
+PASS: gdb.base/define.exp: show user target testsuite
+PASS: gdb.base/define.exp: define target hook-testsuite
+PASS: gdb.base/define.exp: define target hookpost-testsuite
+PASS: gdb.base/define.exp: target testsuite with hooks
+PASS: gdb.base/define.exp: set gdb_prompt
+PASS: gdb.base/define.exp: reset gdb_prompt
+Running ./gdb.base/del.exp ...
+PASS: gdb.base/del.exp: Remove all breakpoints (del)
+PASS: gdb.base/del.exp: info break after removing break on main
+PASS: gdb.base/del.exp: breakpoint insertion (del)
+PASS: gdb.base/del.exp: Remove last breakpoint (del)
+PASS: gdb.base/del.exp: info break after removing break on main (del)
+PASS: gdb.base/del.exp: Remove all breakpoints (d)
+PASS: gdb.base/del.exp: info break after removing break on main
+PASS: gdb.base/del.exp: breakpoint insertion (d)
+PASS: gdb.base/del.exp: Remove last breakpoint (d)
+PASS: gdb.base/del.exp: info break after removing break on main (d)
+Running ./gdb.base/detach.exp ...
+Running ./gdb.base/dfp-exprs.exp ...
+PASS: gdb.base/dfp-exprs.exp: p 1.2df
+PASS: gdb.base/dfp-exprs.exp: p -1.2df
+PASS: gdb.base/dfp-exprs.exp: p 1.234567df
+PASS: gdb.base/dfp-exprs.exp: p -1.234567df
+PASS: gdb.base/dfp-exprs.exp: p 1234567.df
+PASS: gdb.base/dfp-exprs.exp: p -1234567.df
+PASS: gdb.base/dfp-exprs.exp: p 1.2E1df
+PASS: gdb.base/dfp-exprs.exp: p 1.2E10df
+PASS: gdb.base/dfp-exprs.exp: p 1.2E-10df
+PASS: gdb.base/dfp-exprs.exp: p 1.2E96df
+PASS: gdb.base/dfp-exprs.exp: p 1.2dd
+PASS: gdb.base/dfp-exprs.exp: p -1.2dd
+PASS: gdb.base/dfp-exprs.exp: p 1.234567890123456dd
+PASS: gdb.base/dfp-exprs.exp: p -1.234567890123456dd
+PASS: gdb.base/dfp-exprs.exp: p 1234567890123456.dd
+PASS: gdb.base/dfp-exprs.exp: p -1234567890123456.dd
+PASS: gdb.base/dfp-exprs.exp: p 1.2E1dd
+PASS: gdb.base/dfp-exprs.exp: p 1.2E10dd
+PASS: gdb.base/dfp-exprs.exp: p 1.2E-10dd
+PASS: gdb.base/dfp-exprs.exp: p 1.2E384dd
+PASS: gdb.base/dfp-exprs.exp: p 1.2dl
+PASS: gdb.base/dfp-exprs.exp: p -1.2dl
+PASS: gdb.base/dfp-exprs.exp: p 1.234567890123456789012345678901234dl
+PASS: gdb.base/dfp-exprs.exp: p -1.234567890123456789012345678901234dl
+PASS: gdb.base/dfp-exprs.exp: p 1234567890123456789012345678901234.dl
+PASS: gdb.base/dfp-exprs.exp: p -1234567890123456789012345678901234.dl
+PASS: gdb.base/dfp-exprs.exp: p 1.2E1dl
+PASS: gdb.base/dfp-exprs.exp: p 1.2E10dl
+PASS: gdb.base/dfp-exprs.exp: p 1.2E-10dl
+PASS: gdb.base/dfp-exprs.exp: p 1.2E6144dl
+PASS: gdb.base/dfp-exprs.exp: p 1.4df + 1.2df
+PASS: gdb.base/dfp-exprs.exp: p 1.4df - 1.2df
+PASS: gdb.base/dfp-exprs.exp: p 1.4df * 1.2df
+PASS: gdb.base/dfp-exprs.exp: p 1.4df / 1.2df
+PASS: gdb.base/dfp-exprs.exp: p 1.4dd + 1.2dd
+PASS: gdb.base/dfp-exprs.exp: p 1.4dd - 1.2dd
+PASS: gdb.base/dfp-exprs.exp: p 1.4dd * 1.2dd
+PASS: gdb.base/dfp-exprs.exp: p 1.4dd / 1.2dd
+PASS: gdb.base/dfp-exprs.exp: p 1.4dl + 1.2dl
+PASS: gdb.base/dfp-exprs.exp: p 1.4dl - 1.2dl
+PASS: gdb.base/dfp-exprs.exp: p 1.4dl * 1.2dl
+PASS: gdb.base/dfp-exprs.exp: p 1.4dl / 1.2dl
+PASS: gdb.base/dfp-exprs.exp: ptype 2.df + 2.df
+PASS: gdb.base/dfp-exprs.exp: ptype 2.dd + 2.dd
+PASS: gdb.base/dfp-exprs.exp: ptype 2.dl + 2.dl
+PASS: gdb.base/dfp-exprs.exp: p 2.1df + 2.7dd
+PASS: gdb.base/dfp-exprs.exp: p 2.1dd + 2.7df
+PASS: gdb.base/dfp-exprs.exp: p 2.6df + 2.7dl
+PASS: gdb.base/dfp-exprs.exp: p 2.6dl + 2.7df
+PASS: gdb.base/dfp-exprs.exp: p 2.3dd + 2.2dl
+PASS: gdb.base/dfp-exprs.exp: p 2.3dl + 2.2dd
+PASS: gdb.base/dfp-exprs.exp: ptype 2.df + 2.dd
+PASS: gdb.base/dfp-exprs.exp: ptype 2.df + 2.dl
+PASS: gdb.base/dfp-exprs.exp: ptype 2.dd + 2.dl
+PASS: gdb.base/dfp-exprs.exp: p 1.2df + 1
+PASS: gdb.base/dfp-exprs.exp: p 2 + 1.7dd
+PASS: gdb.base/dfp-exprs.exp: p 3 + 2.1dl
+PASS: gdb.base/dfp-exprs.exp: ptype 1.2df + 1
+PASS: gdb.base/dfp-exprs.exp: ptype 2 + 1.7dd
+PASS: gdb.base/dfp-exprs.exp: ptype 3 + 2.1dl
+PASS: gdb.base/dfp-exprs.exp: p 1.2df + 2ll
+PASS: gdb.base/dfp-exprs.exp: p 1.2df + 1.2f
+PASS: gdb.base/dfp-exprs.exp: p !0.df
+PASS: gdb.base/dfp-exprs.exp: p !0.dd
+PASS: gdb.base/dfp-exprs.exp: p !0.dl
+PASS: gdb.base/dfp-exprs.exp: p !0.5df
+PASS: gdb.base/dfp-exprs.exp: p !0.5dd
+PASS: gdb.base/dfp-exprs.exp: p !0.5dl
+PASS: gdb.base/dfp-exprs.exp: p 1.2df == 1.2df
+PASS: gdb.base/dfp-exprs.exp: p 1.2df == 1.2dd
+PASS: gdb.base/dfp-exprs.exp: p 1.2df == 1.2dl
+PASS: gdb.base/dfp-exprs.exp: p 1.2dd == 1.2df
+PASS: gdb.base/dfp-exprs.exp: p 1.2dd == 1.2dl
+PASS: gdb.base/dfp-exprs.exp: p 1.2dl == 1.2df
+PASS: gdb.base/dfp-exprs.exp: p 1.2dl == 1.2dd
+PASS: gdb.base/dfp-exprs.exp: p 1.2df == 1.3df
+PASS: gdb.base/dfp-exprs.exp: p 1.2df == 1.3dd
+PASS: gdb.base/dfp-exprs.exp: p 1.2df == 1.3dl
+PASS: gdb.base/dfp-exprs.exp: p 1.2dd == 1.3df
+PASS: gdb.base/dfp-exprs.exp: p 1.2dd == 1.3dl
+PASS: gdb.base/dfp-exprs.exp: p 1.2dl == 1.3df
+PASS: gdb.base/dfp-exprs.exp: p 1.2dl == 1.3dd
+PASS: gdb.base/dfp-exprs.exp: p +1.2df
+PASS: gdb.base/dfp-exprs.exp: p +1.2dd
+PASS: gdb.base/dfp-exprs.exp: p +1.2dl
+PASS: gdb.base/dfp-exprs.exp: p 1.2df < 1.3df
+PASS: gdb.base/dfp-exprs.exp: p 1.2df < 1.3dd
+PASS: gdb.base/dfp-exprs.exp: p 1.2dl < 1.3df
+PASS: gdb.base/dfp-exprs.exp: p 1.2dd < 1.3dd
+PASS: gdb.base/dfp-exprs.exp: p 1.2dd < 1.3dl
+PASS: gdb.base/dfp-exprs.exp: p 1.2dl < 1.3dl
+PASS: gdb.base/dfp-exprs.exp: p 1.2dl < 1.3df
+PASS: gdb.base/dfp-exprs.exp: p 1.2df > 1
+PASS: gdb.base/dfp-exprs.exp: p 1.2dl > 2
+PASS: gdb.base/dfp-exprs.exp: p 2 > 1.2dd
+PASS: gdb.base/dfp-exprs.exp: p 2 > 3.1dl
+PASS: gdb.base/dfp-exprs.exp: p (float) -0.1df
+PASS: gdb.base/dfp-exprs.exp: p (int) 8.3dd
+PASS: gdb.base/dfp-exprs.exp: p (_Decimal64) 3.1
+PASS: gdb.base/dfp-exprs.exp: p (_Decimal128) 3.7df
+PASS: gdb.base/dfp-exprs.exp: p (_Decimal32) 4
+Running ./gdb.base/dfp-test.exp ...
+Running ./gdb.base/disabled-location.exp ...
+PASS: gdb.base/disabled-location.exp: setting breakpoint on function
+PASS: gdb.base/disabled-location.exp: disable location
+PASS: gdb.base/disabled-location.exp: step doesn't trip on disabled location
+Running ./gdb.base/disasm-end-cu.exp ...
+PASS: gdb.base/disasm-end-cu.exp: get hexadecimal valueof "&main"
+PASS: gdb.base/disasm-end-cu.exp: get hexadecimal valueof "&dummy_3"
+PASS: gdb.base/disasm-end-cu.exp: disassemble command returned some output
+Running ./gdb.base/display.exp ...
+PASS: gdb.base/display.exp: break do_loops
+PASS: gdb.base/display.exp: get to do_loops
+PASS: gdb.base/display.exp: set watch
+PASS: gdb.base/display.exp: break loop end
+PASS: gdb.base/display.exp: inf disp
+PASS: gdb.base/display.exp: display i
+PASS: gdb.base/display.exp: display j
+PASS: gdb.base/display.exp: display &k
+PASS: gdb.base/display.exp: display/f f
+PASS: gdb.base/display.exp: display/s &sum
+PASS: gdb.base/display.exp: first disp
+PASS: gdb.base/display.exp: second disp
+PASS: gdb.base/display.exp: catch err
+PASS: gdb.base/display.exp: disab disp 1
+PASS: gdb.base/display.exp: disab disp 2
+PASS: gdb.base/display.exp: re-enab
+PASS: gdb.base/display.exp: re-enab of enab
+PASS: gdb.base/display.exp: undisp
+PASS: gdb.base/display.exp: info disp
+PASS: gdb.base/display.exp: next hit
+PASS: gdb.base/display.exp: undisp all
+PASS: gdb.base/display.exp: disp *p_i
+PASS: gdb.base/display.exp: p p_i = 0x0
+PASS: gdb.base/display.exp: display bad address
+PASS: gdb.base/display.exp: p p_i = &i
+PASS: gdb.base/display.exp: display good address
+PASS: gdb.base/display.exp: undisp all again
+PASS: gdb.base/display.exp: disab 3
+PASS: gdb.base/display.exp: watch off
+PASS: gdb.base/display.exp: finish
+PASS: gdb.base/display.exp: step
+PASS: gdb.base/display.exp: tbreak in do_vars
+PASS: gdb.base/display.exp: cont
+PASS: gdb.base/display.exp: printf
+PASS: gdb.base/display.exp: printf %d
+PASS: gdb.base/display.exp: printf "%d
+PASS: gdb.base/display.exp: printf "%d%d",i
+PASS: gdb.base/display.exp: printf "\\!\a\f\r\t\v\b\n"
+PASS: gdb.base/display.exp: re-set term
+PASS: gdb.base/display.exp: printf "\w"
+PASS: gdb.base/display.exp: printf "%d" j
+PASS: gdb.base/display.exp: printf "%p\n", 0
+PASS: gdb.base/display.exp: printf "%p\n", 1
+PASS: gdb.base/display.exp: print/z j
+PASS: gdb.base/display.exp: debug test output 1
+PASS: gdb.base/display.exp: debug test output 1a
+PASS: gdb.base/display.exp: debug test output 2
+PASS: gdb.base/display.exp: debug test output 2a
+PASS: gdb.base/display.exp: debug test output 3
+PASS: gdb.base/display.exp: x/0 j
+PASS: gdb.base/display.exp: print/0 j
+PASS: gdb.base/display.exp: ignored s
+PASS: gdb.base/display.exp: no i
+PASS: gdb.base/display.exp: print/a &sum
+PASS: gdb.base/display.exp: print/a main+4
+PASS: gdb.base/display.exp: print/a $pc
+PASS: gdb.base/display.exp: print/a &&j
+Running ./gdb.base/disp-step-syscall.exp ...
+Running ./gdb.base/dmsym.exp ...
+PASS: gdb.base/dmsym.exp: set lang ada
+PASS: gdb.base/dmsym.exp: break pck__foo__bar__minsym
+PASS: gdb.base/dmsym.exp: info line pck__foo__bar__minsym
+PASS: gdb.base/dmsym.exp: set lang auto
+PASS: gdb.base/dmsym.exp: Run until breakpoint at BREAK
+PASS: gdb.base/dmsym.exp: continue
+PASS: gdb.base/dmsym.exp: print val
+Running ./gdb.base/dprintf.exp ...
+PASS: gdb.base/dprintf.exp: dprintf
+PASS: gdb.base/dprintf.exp: dprintf foo
+PASS: gdb.base/dprintf.exp: dprintf 29
+PASS: gdb.base/dprintf.exp: dprintf foo,"At foo entry\n"
+PASS: gdb.base/dprintf.exp: ignore $bpnum 1
+PASS: gdb.base/dprintf.exp: dprintf 26,"arg=%d, g=%d\n", arg, g
+PASS: gdb.base/dprintf.exp: dprintf info 1
+PASS: gdb.base/dprintf.exp: break 27
+PASS: gdb.base/dprintf.exp: 1st dprintf, gdb
+PASS: gdb.base/dprintf.exp: 2nd dprintf, gdb
+PASS: gdb.base/dprintf.exp: Set dprintf style to agent - can do
+FAIL: gdb.base/dprintf.exp: 1st dprintf, agent
+FAIL: gdb.base/dprintf.exp: 2nd dprintf, agent
+FAIL: gdb.base/dprintf.exp: dprintf info 2 (pattern 6)
+PASS: gdb.base/dprintf.exp: Set dprintf style to an unrecognized type
+Running ./gdb.base/dprintf-next.exp ...
+PASS: gdb.base/dprintf-next.exp: dprintf 24, "%d\n", x
+PASS: gdb.base/dprintf-next.exp: next 1
+PASS: gdb.base/dprintf-next.exp: next 2
+Running ./gdb.base/dprintf-non-stop.exp ...
+UNSUPPORTED: gdb.base/dprintf-non-stop.exp: Testing dprintf with remote/non-stop is not supported.
+Running ./gdb.base/dprintf-pending.exp ...
+PASS: gdb.base/dprintf-pending.exp: without format: set pending dprintf
+FAIL: gdb.base/dprintf-pending.exp: without format: resolved dprintf fails to be re-set
+PASS: gdb.base/dprintf-pending.exp: without symbols: set pending dprintf
+PASS: gdb.base/dprintf-pending.exp: without symbols: single pending dprintf info
+FAIL: gdb.base/dprintf-pending.exp: without symbols: run to resolved dprintf (the program exited)
+PASS: gdb.base/dprintf-pending.exp: set pending dprintf
+PASS: gdb.base/dprintf-pending.exp: single pending dprintf info
+FAIL: gdb.base/dprintf-pending.exp: run to resolved dprintf (the program exited)
+Running ./gdb.base/dump.exp ...
+PASS: gdb.base/dump.exp: inaccessible memory is reported
+PASS: gdb.base/dump.exp: endianness: little
+PASS: gdb.base/dump.exp: dump array as value, default
+PASS: gdb.base/dump.exp: dump struct as value, default
+PASS: gdb.base/dump.exp: dump array as value, binary
+PASS: gdb.base/dump.exp: dump struct as value, binary
+PASS: gdb.base/dump.exp: dump array as value, srec
+PASS: gdb.base/dump.exp: dump struct as value, srec
+PASS: gdb.base/dump.exp: dump array as value, intel hex
+PASS: gdb.base/dump.exp: dump struct as value, intel hex
+PASS: gdb.base/dump.exp: dump array as value, tekhex
+PASS: gdb.base/dump.exp: dump struct as value, tekhex
+PASS: gdb.base/dump.exp: capture /x &intarray[0]
+PASS: gdb.base/dump.exp: capture /x &intarray[32]
+PASS: gdb.base/dump.exp: capture /x &intstruct
+PASS: gdb.base/dump.exp: capture /x &intstruct + 1
+PASS: gdb.base/dump.exp: capture intarray
+PASS: gdb.base/dump.exp: capture intstruct
+PASS: gdb.base/dump.exp: capture type of pointer &intarray
+PASS: gdb.base/dump.exp: capture type of pointer &intstruct
+PASS: gdb.base/dump.exp: dump array as memory, default
+PASS: gdb.base/dump.exp: dump struct as memory, default
+PASS: gdb.base/dump.exp: dump array as memory, binary
+PASS: gdb.base/dump.exp: dump struct as memory, binary
+PASS: gdb.base/dump.exp: dump array as memory, srec
+PASS: gdb.base/dump.exp: dump struct as memory, srec
+PASS: gdb.base/dump.exp: dump array as memory, ihex
+PASS: gdb.base/dump.exp: dump struct as memory, ihex
+PASS: gdb.base/dump.exp: dump array as memory, tekhex
+PASS: gdb.base/dump.exp: dump struct as memory, tekhex
+PASS: gdb.base/dump.exp: dump array as mem, srec, expressions
+PASS: gdb.base/dump.exp: print zero_all ()
+PASS: gdb.base/dump.exp: array as value, srec; file restored ok
+PASS: gdb.base/dump.exp: array as value, srec; capture intarray
+PASS: gdb.base/dump.exp: array as value, srec; value restored ok
+PASS: gdb.base/dump.exp: struct as value, srec; file restored ok
+PASS: gdb.base/dump.exp: struct as value, srec; capture intstruct
+PASS: gdb.base/dump.exp: struct as value, srec; value restored ok
+PASS: gdb.base/dump.exp: zero all
+PASS: gdb.base/dump.exp: array as memory, srec; file restored ok
+PASS: gdb.base/dump.exp: array as memory, srec; capture intarray
+PASS: gdb.base/dump.exp: array as memory, srec; value restored ok
+PASS: gdb.base/dump.exp: struct as memory, srec; file restored ok
+PASS: gdb.base/dump.exp: struct as memory, srec; capture intstruct
+PASS: gdb.base/dump.exp: struct as memory, srec; value restored ok
+PASS: gdb.base/dump.exp: print zero_all ()
+PASS: gdb.base/dump.exp: array as value, ihex; file restored ok
+PASS: gdb.base/dump.exp: array as value, ihex; capture intarray
+PASS: gdb.base/dump.exp: array as value, ihex; value restored ok
+PASS: gdb.base/dump.exp: struct as value, ihex; file restored ok
+PASS: gdb.base/dump.exp: struct as value, ihex; capture intstruct
+PASS: gdb.base/dump.exp: struct as value, ihex; value restored ok
+PASS: gdb.base/dump.exp: print zero_all ()
+PASS: gdb.base/dump.exp: array as memory, ihex; file restored ok
+PASS: gdb.base/dump.exp: array as memory, ihex; capture intarray
+PASS: gdb.base/dump.exp: array as memory, ihex; value restored ok
+PASS: gdb.base/dump.exp: struct as memory, ihex; file restored ok
+PASS: gdb.base/dump.exp: struct as memory, ihex; capture intstruct
+PASS: gdb.base/dump.exp: struct as memory, ihex; value restored ok
+PASS: gdb.base/dump.exp: print zero_all ()
+PASS: gdb.base/dump.exp: array as value, tekhex; file restored ok
+PASS: gdb.base/dump.exp: array as value, tekhex; capture intarray
+PASS: gdb.base/dump.exp: array as value, tekhex; value restored ok
+PASS: gdb.base/dump.exp: struct as value, tekhex; file restored ok
+PASS: gdb.base/dump.exp: struct as value, tekhex; capture intstruct
+PASS: gdb.base/dump.exp: struct as value, tekhex; value restored ok
+PASS: gdb.base/dump.exp: print zero_all ()
+PASS: gdb.base/dump.exp: array as memory, tekhex; file restored ok
+PASS: gdb.base/dump.exp: array as memory, tekhex; capture intarray
+PASS: gdb.base/dump.exp: array as memory, tekhex; value restored ok
+PASS: gdb.base/dump.exp: struct as memory, tekhex; file restored ok
+PASS: gdb.base/dump.exp: struct as memory, tekhex; capture intstruct
+PASS: gdb.base/dump.exp: struct as memory, tekhex; value restored ok
+PASS: gdb.base/dump.exp: print zero_all ()
+PASS: gdb.base/dump.exp: array as value, binary; file restored ok
+PASS: gdb.base/dump.exp: array as value, binary; capture intarray
+PASS: gdb.base/dump.exp: array as value, binary; value restored ok
+PASS: gdb.base/dump.exp: struct as value, binary; file restored ok
+PASS: gdb.base/dump.exp: struct as value, binary; capture intstruct
+PASS: gdb.base/dump.exp: struct as value, binary; value restored ok
+PASS: gdb.base/dump.exp: print zero_all ()
+PASS: gdb.base/dump.exp: array as memory, binary; file restored ok
+PASS: gdb.base/dump.exp: array as memory, binary; capture intarray
+PASS: gdb.base/dump.exp: array as memory, binary; value restored ok
+PASS: gdb.base/dump.exp: struct as memory, binary; file restored ok
+PASS: gdb.base/dump.exp: struct as memory, binary; capture intstruct
+PASS: gdb.base/dump.exp: struct as memory, binary; value restored ok
+PASS: gdb.base/dump.exp: capture /x &intarray2[0]
+PASS: gdb.base/dump.exp: capture /x &intstruct2
+PASS: gdb.base/dump.exp: capture (char *) &intarray2 - (char *) &intarray
+PASS: gdb.base/dump.exp: capture (char *) &intstruct2 - (char *) &intstruct
+PASS: gdb.base/dump.exp: print zero_all ()
+PASS: gdb.base/dump.exp: array copy, srec; file restored ok
+PASS: gdb.base/dump.exp: array copy, srec; capture intarray2
+PASS: gdb.base/dump.exp: array copy, srec; value restored ok
+PASS: gdb.base/dump.exp: struct copy, srec; file restored ok
+PASS: gdb.base/dump.exp: struct copy, srec; capture intstruct2
+PASS: gdb.base/dump.exp: struct copy, srec; value restored ok
+PASS: gdb.base/dump.exp: print zero_all ()
+PASS: gdb.base/dump.exp: array copy, ihex; file restored ok
+PASS: gdb.base/dump.exp: array copy, ihex; capture intarray2
+PASS: gdb.base/dump.exp: array copy, ihex; value restored ok
+PASS: gdb.base/dump.exp: struct copy, ihex; file restored ok
+PASS: gdb.base/dump.exp: struct copy, ihex; capture intstruct2
+PASS: gdb.base/dump.exp: struct copy, ihex; value restored ok
+PASS: gdb.base/dump.exp: print zero_all ()
+PASS: gdb.base/dump.exp: array copy, tekhex; file restored ok
+PASS: gdb.base/dump.exp: array copy, tekhex; capture intarray2
+PASS: gdb.base/dump.exp: array copy, tekhex; value restored ok
+PASS: gdb.base/dump.exp: struct copy, tekhex; file restored ok
+PASS: gdb.base/dump.exp: struct copy, tekhex; capture intstruct2
+PASS: gdb.base/dump.exp: struct copy, tekhex; value restored ok
+PASS: gdb.base/dump.exp: print zero_all ()
+PASS: gdb.base/dump.exp: array copy, binary; file restored ok
+PASS: gdb.base/dump.exp: array copy, binary; capture intarray2
+PASS: gdb.base/dump.exp: array copy, binary; value restored ok
+PASS: gdb.base/dump.exp: struct copy, binary; file restored ok
+PASS: gdb.base/dump.exp: struct copy, binary; capture intstruct2
+PASS: gdb.base/dump.exp: struct copy, binary; value restored ok
+PASS: gdb.base/dump.exp: capture /x &intarray[3]
+PASS: gdb.base/dump.exp: capture /x &intarray[4]
+PASS: gdb.base/dump.exp: capture /x (char *) &intarray[3] - (char *) &intarray[0]
+PASS: gdb.base/dump.exp: capture /x (char *) &intarray[4] - (char *) &intarray[0]
+PASS: gdb.base/dump.exp: print zero_all ()
+PASS: gdb.base/dump.exp: array partial, srec; file restored ok
+PASS: gdb.base/dump.exp: array partial, srec; capture intarray[3]
+PASS: gdb.base/dump.exp: array partial, srec; value restored ok
+PASS: gdb.base/dump.exp: element 2 not changed - 1
+PASS: gdb.base/dump.exp: element 4 not changed - 1
+PASS: gdb.base/dump.exp: print zero_all ()
+PASS: gdb.base/dump.exp: array partial, ihex; file restored ok
+PASS: gdb.base/dump.exp: array partial, ihex; capture intarray[3]
+PASS: gdb.base/dump.exp: array partial, ihex; value restored ok
+PASS: gdb.base/dump.exp: element 2 not changed - 2
+PASS: gdb.base/dump.exp: element 4 not changed - 2
+PASS: gdb.base/dump.exp: print zero_all ()
+PASS: gdb.base/dump.exp: array partial, tekhex; file restored ok
+PASS: gdb.base/dump.exp: array partial, tekhex; capture intarray[3]
+PASS: gdb.base/dump.exp: array partial, tekhex; value restored ok
+PASS: gdb.base/dump.exp: element 2 not changed - 3
+PASS: gdb.base/dump.exp: element 4 not changed - 3
+PASS: gdb.base/dump.exp: print zero_all ()
+PASS: gdb.base/dump.exp: array partial, binary; file restored ok
+PASS: gdb.base/dump.exp: array partial, binary; capture intarray[3]
+PASS: gdb.base/dump.exp: array partial, binary; value restored ok
+PASS: gdb.base/dump.exp: element 2 not changed - 4
+PASS: gdb.base/dump.exp: element 4 not changed - 4
+PASS: gdb.base/dump.exp: array partial with expressions; file restored ok
+PASS: gdb.base/dump.exp: array partial with expressions; capture intarray2[3]
+PASS: gdb.base/dump.exp: array partial with expressions; value restored ok
+PASS: gdb.base/dump.exp: element 2 not changed, == 4
+PASS: gdb.base/dump.exp: element 4 not changed, == 4
+PASS: gdb.base/dump.exp: setting little endianness
+PASS: gdb.base/dump.exp: file binfile; capture intarray
+PASS: gdb.base/dump.exp: start with intarray un-initialized
+PASS: gdb.base/dump.exp: file binfile; capture intstruct
+PASS: gdb.base/dump.exp: start with intstruct un-initialized
+PASS: gdb.base/dump.exp: reload array as value, srec; capture * (int (*)[32]) 0x54ab30c4
+PASS: gdb.base/dump.exp: reload array as value, srec; value restored ok
+PASS: gdb.base/dump.exp: reload struct as value, srec; capture * (struct teststruct *) 0x54ab300c
+PASS: gdb.base/dump.exp: reload struct as value, srec; value restored ok
+PASS: gdb.base/dump.exp: reload array as memory, srec; capture * (int (*)[32]) 0x54ab30c4
+PASS: gdb.base/dump.exp: reload array as memory, srec; value restored ok
+PASS: gdb.base/dump.exp: reload struct as memory, srec; capture * (struct teststruct *) 0x54ab300c
+PASS: gdb.base/dump.exp: reload struct as memory, srec; value restored ok
+PASS: gdb.base/dump.exp: reload array as value, intel hex; capture * (int (*)[32]) 0x54ab30c4
+PASS: gdb.base/dump.exp: reload array as value, intel hex; value restored ok
+PASS: gdb.base/dump.exp: reload struct as value, intel hex; capture * (struct teststruct *) 0x54ab300c
+PASS: gdb.base/dump.exp: reload struct as value, intel hex; value restored ok
+PASS: gdb.base/dump.exp: reload array as memory, intel hex; capture * (int (*)[32]) 0x54ab30c4
+PASS: gdb.base/dump.exp: reload array as memory, intel hex; value restored ok
+PASS: gdb.base/dump.exp: reload struct as memory, intel hex; capture * (struct teststruct *) 0x54ab300c
+PASS: gdb.base/dump.exp: reload struct as memory, intel hex; value restored ok
+PASS: gdb.base/dump.exp: reload array as value, tekhex; capture * (int (*)[32]) 0x54ab30c4
+PASS: gdb.base/dump.exp: reload array as value, tekhex; value restored ok
+PASS: gdb.base/dump.exp: reload struct as value, tekhex; capture * (struct teststruct *) 0x54ab300c
+PASS: gdb.base/dump.exp: reload struct as value, tekhex; value restored ok
+PASS: gdb.base/dump.exp: reload array as memory, tekhex; capture * (int (*)[32]) 0x54ab30c4
+PASS: gdb.base/dump.exp: reload array as memory, tekhex; value restored ok
+PASS: gdb.base/dump.exp: reload struct as memory, tekhex; capture * (struct teststruct *) 0x54ab300c
+PASS: gdb.base/dump.exp: reload struct as memory, tekhex; value restored ok
+Running ./gdb.base/duplicate-bp.exp ...
+PASS: gdb.base/duplicate-bp.exp: del_1_stop_2: set $bp_num_1 = $bpnum
+PASS: gdb.base/duplicate-bp.exp: del_1_stop_2: set $bp_num_2 = $bpnum
+PASS: gdb.base/duplicate-bp.exp: del_1_stop_2: step to place breakpoints
+PASS: gdb.base/duplicate-bp.exp: del_1_stop_2: delete $bp_num_1
+PASS: gdb.base/duplicate-bp.exp: del_1_stop_2: delete #1, stop at #2
+PASS: gdb.base/duplicate-bp.exp: del_2_stop_1: set $bp_num_1 = $bpnum
+PASS: gdb.base/duplicate-bp.exp: del_2_stop_1: set $bp_num_2 = $bpnum
+PASS: gdb.base/duplicate-bp.exp: del_2_stop_1: step to place breakpoints
+PASS: gdb.base/duplicate-bp.exp: del_2_stop_1: delete $bp_num_2
+PASS: gdb.base/duplicate-bp.exp: del_2_stop_1: delete #2, stop at #1
+PASS: gdb.base/duplicate-bp.exp: dis_1_del_2_stop_3: set $bp_num_1 = $bpnum
+PASS: gdb.base/duplicate-bp.exp: dis_1_del_2_stop_3: set $bp_num_2 = $bpnum
+PASS: gdb.base/duplicate-bp.exp: dis_1_del_2_stop_3: set $bp_num_3 = $bpnum
+PASS: gdb.base/duplicate-bp.exp: dis_1_del_2_stop_3: step to place breakpoints
+PASS: gdb.base/duplicate-bp.exp: dis_1_del_2_stop_3: disable $bp_num_1
+PASS: gdb.base/duplicate-bp.exp: dis_1_del_2_stop_3: step
+PASS: gdb.base/duplicate-bp.exp: dis_1_del_2_stop_3: delete $bp_num_2
+PASS: gdb.base/duplicate-bp.exp: dis_1_del_2_stop_3: disable #1, delete #2, stop at #3
+PASS: gdb.base/duplicate-bp.exp: dis_2_del_1_stop_3: set $bp_num_1 = $bpnum
+PASS: gdb.base/duplicate-bp.exp: dis_2_del_1_stop_3: set $bp_num_2 = $bpnum
+PASS: gdb.base/duplicate-bp.exp: dis_2_del_1_stop_3: set $bp_num_3 = $bpnum
+PASS: gdb.base/duplicate-bp.exp: dis_2_del_1_stop_3: step to place breakpoints
+PASS: gdb.base/duplicate-bp.exp: dis_2_del_1_stop_3: disable $bp_num_2
+PASS: gdb.base/duplicate-bp.exp: dis_2_del_1_stop_3: step
+PASS: gdb.base/duplicate-bp.exp: dis_2_del_1_stop_3: delete $bp_num_1
+PASS: gdb.base/duplicate-bp.exp: dis_2_del_1_stop_3: disable #2, delete #1, stop at #3
+PASS: gdb.base/duplicate-bp.exp: dis_1_del_3_stop_1: set $bp_num_1 = $bpnum
+PASS: gdb.base/duplicate-bp.exp: dis_1_del_3_stop_1: set $bp_num_2 = $bpnum
+PASS: gdb.base/duplicate-bp.exp: dis_1_del_3_stop_1: set $bp_num_3 = $bpnum
+PASS: gdb.base/duplicate-bp.exp: dis_1_del_3_stop_1: step to place breakpoints
+PASS: gdb.base/duplicate-bp.exp: dis_1_del_3_stop_1: disable $bp_num_1
+PASS: gdb.base/duplicate-bp.exp: dis_1_del_3_stop_1: step
+PASS: gdb.base/duplicate-bp.exp: dis_1_del_3_stop_1: delete $bp_num_3
+PASS: gdb.base/duplicate-bp.exp: dis_1_del_3_stop_1: disable #1, delete #3, stop at #2
+PASS: gdb.base/duplicate-bp.exp: dis_3_del_1_stop_2: set $bp_num_1 = $bpnum
+PASS: gdb.base/duplicate-bp.exp: dis_3_del_1_stop_2: set $bp_num_2 = $bpnum
+PASS: gdb.base/duplicate-bp.exp: dis_3_del_1_stop_2: set $bp_num_3 = $bpnum
+PASS: gdb.base/duplicate-bp.exp: dis_3_del_1_stop_2: step to place breakpoints
+PASS: gdb.base/duplicate-bp.exp: dis_3_del_1_stop_2: disable $bp_num_3
+PASS: gdb.base/duplicate-bp.exp: dis_3_del_1_stop_2: step
+PASS: gdb.base/duplicate-bp.exp: dis_3_del_1_stop_2: delete $bp_num_1
+PASS: gdb.base/duplicate-bp.exp: dis_3_del_1_stop_2: disable #3, delete #1, stop at #2
+PASS: gdb.base/duplicate-bp.exp: dis_2_del_3_stop_1: set $bp_num_1 = $bpnum
+PASS: gdb.base/duplicate-bp.exp: dis_2_del_3_stop_1: set $bp_num_2 = $bpnum
+PASS: gdb.base/duplicate-bp.exp: dis_2_del_3_stop_1: set $bp_num_3 = $bpnum
+PASS: gdb.base/duplicate-bp.exp: dis_2_del_3_stop_1: step to place breakpoints
+PASS: gdb.base/duplicate-bp.exp: dis_2_del_3_stop_1: disable $bp_num_2
+PASS: gdb.base/duplicate-bp.exp: dis_2_del_3_stop_1: step
+PASS: gdb.base/duplicate-bp.exp: dis_2_del_3_stop_1: delete $bp_num_3
+PASS: gdb.base/duplicate-bp.exp: dis_2_del_3_stop_1: disable #2, delete #3, stop at #1
+PASS: gdb.base/duplicate-bp.exp: dis_3_del_2_stop_1: set $bp_num_1 = $bpnum
+PASS: gdb.base/duplicate-bp.exp: dis_3_del_2_stop_1: set $bp_num_2 = $bpnum
+PASS: gdb.base/duplicate-bp.exp: dis_3_del_2_stop_1: set $bp_num_3 = $bpnum
+PASS: gdb.base/duplicate-bp.exp: dis_3_del_2_stop_1: step to place breakpoints
+PASS: gdb.base/duplicate-bp.exp: dis_3_del_2_stop_1: disable $bp_num_3
+PASS: gdb.base/duplicate-bp.exp: dis_3_del_2_stop_1: step
+PASS: gdb.base/duplicate-bp.exp: dis_3_del_2_stop_1: delete $bp_num_2
+PASS: gdb.base/duplicate-bp.exp: dis_3_del_2_stop_1: disable #3, delete #2, stop at #1
+Running ./gdb.base/dup-sect.exp ...
+PASS: gdb.base/dup-sect.exp: rename section
+PASS: gdb.base/dup-sect.exp: split
+PASS: gdb.base/dup-sect.exp: strip
+PASS: gdb.base/dup-sect.exp: var1 after strip
+PASS: gdb.base/dup-sect.exp: var2 after strip
+Running ./gdb.base/echo.exp ...
+PASS: gdb.base/echo.exp: Echo test
+Running ./gdb.base/empty_exe.exp ...
+PASS: gdb.base/empty_exe.exp: file ''
+PASS: gdb.base/empty_exe.exp: print 1
+Running ./gdb.base/ena-dis-br.exp ...
+PASS: gdb.base/ena-dis-br.exp: break marker1
+PASS: gdb.base/ena-dis-br.exp: enable break marker1
+PASS: gdb.base/ena-dis-br.exp: info break marker1
+PASS: gdb.base/ena-dis-br.exp: continue to break marker1
+PASS: gdb.base/ena-dis-br.exp: delete break marker1
+PASS: gdb.base/ena-dis-br.exp: break marker2
+PASS: gdb.base/ena-dis-br.exp: enable once break marker2
+PASS: gdb.base/ena-dis-br.exp: info auto-disabled break marker2
+PASS: gdb.base/ena-dis-br.exp: continue to auto-disabled break marker2
+PASS: gdb.base/ena-dis-br.exp: info auto-disabled break marker2
+FAIL: gdb.base/ena-dis-br.exp: setting breakpoint at exit
+PASS: gdb.base/ena-dis-br.exp: rerun to main
+FAIL: gdb.base/ena-dis-br.exp: setting breakpoint at exit
+PASS: gdb.base/ena-dis-br.exp: break marker3
+PASS: gdb.base/ena-dis-br.exp: enable del break marker3
+PASS: gdb.base/ena-dis-br.exp: info auto-deleted break marker2
+PASS: gdb.base/ena-dis-br.exp: continue to auto-deleted break marker3
+PASS: gdb.base/ena-dis-br.exp: info auto-deleted break marker3
+PASS: gdb.base/ena-dis-br.exp: break marker4
+PASS: gdb.base/ena-dis-br.exp: disable break marker4
+PASS: gdb.base/ena-dis-br.exp: info break marker4
+PASS: gdb.base/ena-dis-br.exp: break 113
+PASS: gdb.base/ena-dis-br.exp: break marker1
+PASS: gdb.base/ena-dis-br.exp: disable break with count
+PASS: gdb.base/ena-dis-br.exp: continue from enable count, first time
+PASS: gdb.base/ena-dis-br.exp: continue from enable count, second time
+PASS: gdb.base/ena-dis-br.exp: continue through enable count, now disabled
+PASS: gdb.base/ena-dis-br.exp: break marker1
+PASS: gdb.base/ena-dis-br.exp: ignore non-existent break
+PASS: gdb.base/ena-dis-br.exp: ignore break with missing ignore count
+PASS: gdb.base/ena-dis-br.exp: ignore break marker1 -1
+PASS: gdb.base/ena-dis-br.exp: ignore break marker1 0
+PASS: gdb.base/ena-dis-br.exp: ignore break marker1
+PASS: gdb.base/ena-dis-br.exp: info ignored break marker1
+FAIL: gdb.base/ena-dis-br.exp: setting breakpoint at exit
+PASS: gdb.base/ena-dis-br.exp: rerun to main
+FAIL: gdb.base/ena-dis-br.exp: continue to break marker1, 2nd time (the program exited)
+PASS: gdb.base/ena-dis-br.exp: break marker1
+PASS: gdb.base/ena-dis-br.exp: ignore break marker1
+PASS: gdb.base/ena-dis-br.exp: enable del break marker1
+PASS: gdb.base/ena-dis-br.exp: info break marker1
+FAIL: gdb.base/ena-dis-br.exp: setting breakpoint at exit
+PASS: gdb.base/ena-dis-br.exp: rerun to main
+FAIL: gdb.base/ena-dis-br.exp: continue to ignored & auto-deleted break marker1 (the program exited)
+PASS: gdb.base/ena-dis-br.exp: break marker1
+PASS: gdb.base/ena-dis-br.exp: ignore break marker1
+PASS: gdb.base/ena-dis-br.exp: disable break marker1
+FAIL: gdb.base/ena-dis-br.exp: setting breakpoint at exit
+PASS: gdb.base/ena-dis-br.exp: rerun to main
+PASS: gdb.base/ena-dis-br.exp: info ignored & disabled break marker1
+PASS: gdb.base/ena-dis-br.exp: prepare to continue with ignore count
+PASS: gdb.base/ena-dis-br.exp: continue with ignore count
+PASS: gdb.base/ena-dis-br.exp: step
+PASS: gdb.base/ena-dis-br.exp: continue with ignore count, not stopped at bpt
+Running ./gdb.base/ending-run.exp ...
+PASS: gdb.base/ending-run.exp: bpt at line before routine
+PASS: gdb.base/ending-run.exp: b ending-run.c:14, one
+PASS: gdb.base/ending-run.exp: b ending-run.c:31
+PASS: gdb.base/ending-run.exp: run
+PASS: gdb.base/ending-run.exp: clear worked
+PASS: gdb.base/ending-run.exp: cleared bp at line before routine
+PASS: gdb.base/ending-run.exp: b ending-run.c:1
+PASS: gdb.base/ending-run.exp: b ending-run.c:14, two
+PASS: gdb.base/ending-run.exp: Cleared 2 by line
+PASS: gdb.base/ending-run.exp: b ending-run.c:14
+PASS: gdb.base/ending-run.exp: Breakpoint 7 at *ending-run.c:14
+PASS: gdb.base/ending-run.exp: Clear 2 by default
+PASS: gdb.base/ending-run.exp: all set to continue
+PASS: gdb.base/ending-run.exp: cont
+FAIL: gdb.base/ending-run.exp: step out of main
+Running ./gdb.base/enum_cond.exp ...
+gdb compile failed, /usr/x86_64-pc-linux-gnu/armv7a-cros-linux-gnueabi/binutils-bin/2.22/ld.bfd.real: warning: /tmp/ccoeaZYK.o uses variable-size enums yet the output is to use 32-bit enums; use of enum values across objects may fail
+UNTESTED: gdb.base/enum_cond.exp: Could not compile enum_cond.c
+Running ./gdb.base/enumval.exp ...
+PASS: gdb.base/enumval.exp: print e
+PASS: gdb.base/enumval.exp: print f
+PASS: gdb.base/enumval.exp: print J
+PASS: gdb.base/enumval.exp: print K
+Running ./gdb.base/environ.exp ...
+Running ./gdb.base/eu-strip-infcall.exp ...
+PASS: gdb.base/eu-strip-infcall.exp: infcall
+Running ./gdb.base/eval.exp ...
+PASS: gdb.base/eval.exp: Initialize $a.
+PASS: gdb.base/eval.exp: First eval.
+PASS: gdb.base/eval.exp: Second eval.
+Running ./gdb.base/eval-skip.exp ...
+PASS: gdb.base/eval-skip.exp: set variable x=14
+PASS: gdb.base/eval-skip.exp: set variable y=2
+PASS: gdb.base/eval-skip.exp: set variable z=2
+PASS: gdb.base/eval-skip.exp: set variable w=3
+PASS: gdb.base/eval-skip.exp: print value of (0 && (x+y))
+PASS: gdb.base/eval-skip.exp: print value of (0 && (x-y))
+PASS: gdb.base/eval-skip.exp: print value of (0 && (x*y))
+PASS: gdb.base/eval-skip.exp: print value of (0 && (x/y))
+PASS: gdb.base/eval-skip.exp: print value of (0 && (x%y))
+PASS: gdb.base/eval-skip.exp: print value of (0 && (x&&y))
+PASS: gdb.base/eval-skip.exp: print value of (0 && (x||y))
+PASS: gdb.base/eval-skip.exp: print value of (0 && (x&y))
+PASS: gdb.base/eval-skip.exp: print value of (0 && (x|y))
+PASS: gdb.base/eval-skip.exp: print value of (0 && (x^y))
+PASS: gdb.base/eval-skip.exp: print value of (0 && (x < y))
+PASS: gdb.base/eval-skip.exp: print value of (0 && (x <= y))
+PASS: gdb.base/eval-skip.exp: print value of (0 && (x>y))
+PASS: gdb.base/eval-skip.exp: print value of (0 && (x>=y))
+PASS: gdb.base/eval-skip.exp: print value of (0 && (x==y))
+PASS: gdb.base/eval-skip.exp: print value of (0 && (x!=y))
+PASS: gdb.base/eval-skip.exp: print value of (0 && (x<<31))
+PASS: gdb.base/eval-skip.exp: print value of (0 && (x>>31))
+PASS: gdb.base/eval-skip.exp: print value of (0 && (!x))
+PASS: gdb.base/eval-skip.exp: print value of (0 && (~x))
+PASS: gdb.base/eval-skip.exp: print value of (0 && (-x))
+PASS: gdb.base/eval-skip.exp: print value of (0 && (x++))
+PASS: gdb.base/eval-skip.exp: print value of (0 && (++x))
+PASS: gdb.base/eval-skip.exp: print value of (0 && (x--))
+PASS: gdb.base/eval-skip.exp: print value of (0 && (--x))
+PASS: gdb.base/eval-skip.exp: print value of (0 && (x+=7))
+PASS: gdb.base/eval-skip.exp: print value of (0 && (x=y))
+Running ./gdb.base/exe-lock.exp ...
+FAIL: gdb.base/exe-lock.exp: setting breakpoint at exit
+Running ./gdb.base/expand-psymtabs.exp ...
+PASS: gdb.base/expand-psymtabs.exp: Expand psymtabs
+Running ./gdb.base/exprs.exp ...
+PASS: gdb.base/exprs.exp: print char == (setup)
+PASS: gdb.base/exprs.exp: print char == (print v_char == 0)
+PASS: gdb.base/exprs.exp: print char == (print v_char == 127)
+PASS: gdb.base/exprs.exp: print char != (setup)
+PASS: gdb.base/exprs.exp: print char != (print v_char != 0)
+PASS: gdb.base/exprs.exp: print char != (print v_char != 127)
+PASS: gdb.base/exprs.exp: print char < (setup)
+PASS: gdb.base/exprs.exp: print char < (print v_char < 0)
+PASS: gdb.base/exprs.exp: print char < (print v_char < 127)
+PASS: gdb.base/exprs.exp: print char > (setup)
+PASS: gdb.base/exprs.exp: print char > (print v_char > 0)
+PASS: gdb.base/exprs.exp: print char > (print v_char > 127)
+PASS: gdb.base/exprs.exp: print signed char == (setup)
+PASS: gdb.base/exprs.exp: print signed char == (print v_signed_char == 0)
+PASS: gdb.base/exprs.exp: print signed char == (print v_signed_char == 127)
+PASS: gdb.base/exprs.exp: print signed char != (setup)
+PASS: gdb.base/exprs.exp: print signed char != (print v_signed_char != 0)
+PASS: gdb.base/exprs.exp: print signed char != (print v_signed_char != 127)
+PASS: gdb.base/exprs.exp: print signed char < (setup)
+PASS: gdb.base/exprs.exp: print signed char < (print v_signed_char < 0)
+PASS: gdb.base/exprs.exp: print signed char < (print v_signed_char < 127)
+PASS: gdb.base/exprs.exp: print signed char > (setup)
+PASS: gdb.base/exprs.exp: print signed char > (print v_signed_char > 0)
+PASS: gdb.base/exprs.exp: print signed char > (print v_signed_char > 127)
+PASS: gdb.base/exprs.exp: print signed char == (minus) (setup)
+PASS: gdb.base/exprs.exp: print signed char == (minus) (print v_signed_char == 0)
+PASS: gdb.base/exprs.exp: print signed char == (minus) (print v_signed_char == -1)
+PASS: gdb.base/exprs.exp: print signed char != (minus) (setup)
+PASS: gdb.base/exprs.exp: print signed char != (minus) (print v_signed_char != 0)
+PASS: gdb.base/exprs.exp: print signed char != (minus) (print v_signed_char != -1)
+PASS: gdb.base/exprs.exp: print signed char < (minus) (setup)
+PASS: gdb.base/exprs.exp: print signed char < (minus) (print v_signed_char < 0)
+PASS: gdb.base/exprs.exp: print signed char < (minus) (print v_signed_char < 127)
+PASS: gdb.base/exprs.exp: print signed char > (minus) (setup)
+PASS: gdb.base/exprs.exp: print signed char > (minus) (print v_signed_char > 0)
+PASS: gdb.base/exprs.exp: print signed char > (minus) (print v_signed_char > 127)
+PASS: gdb.base/exprs.exp: print unsigned char == (setup)
+PASS: gdb.base/exprs.exp: print unsigned char == (print v_unsigned_char == 0)
+PASS: gdb.base/exprs.exp: print unsigned char == (print v_unsigned_char == 127)
+PASS: gdb.base/exprs.exp: print unsigned char != (setup)
+PASS: gdb.base/exprs.exp: print unsigned char != (print v_unsigned_char != 0)
+PASS: gdb.base/exprs.exp: print unsigned char != (print v_unsigned_char != 127)
+PASS: gdb.base/exprs.exp: print unsigned char < (setup)
+PASS: gdb.base/exprs.exp: print unsigned char < (print v_unsigned_char < 0)
+PASS: gdb.base/exprs.exp: print unsigned char < (print v_unsigned_char < 127)
+PASS: gdb.base/exprs.exp: print unsigned char > (setup)
+PASS: gdb.base/exprs.exp: print unsigned char > (print v_unsigned_char > 0)
+PASS: gdb.base/exprs.exp: print unsigned char > (print v_unsigned_char > 127)
+PASS: gdb.base/exprs.exp: print unsigned char == (~0) (setup)
+PASS: gdb.base/exprs.exp: print unsigned char == (~0) (print v_unsigned_char == 0)
+PASS: gdb.base/exprs.exp: print unsigned char == (~0) (print v_unsigned_char == ~0)
+PASS: gdb.base/exprs.exp: print unsigned char == (~0) (print v_unsigned_char == (unsigned char)~0)
+PASS: gdb.base/exprs.exp: print unsigned char != (~0) (setup)
+PASS: gdb.base/exprs.exp: print unsigned char != (~0) (print v_unsigned_char != 0)
+PASS: gdb.base/exprs.exp: print unsigned char != (~0) (print v_unsigned_char != (unsigned char)~0)
+PASS: gdb.base/exprs.exp: print unsigned char != (~0) (print v_unsigned_char != ~0)
+PASS: gdb.base/exprs.exp: print unsigned char < (~0) (setup)
+PASS: gdb.base/exprs.exp: print unsigned char < (~0) (print v_unsigned_char < 0)
+PASS: gdb.base/exprs.exp: print unsigned char < (~0) (print v_unsigned_char < 127)
+PASS: gdb.base/exprs.exp: print unsigned char > (~0) (setup)
+PASS: gdb.base/exprs.exp: print unsigned char > (~0) (print v_unsigned_char > 0)
+PASS: gdb.base/exprs.exp: print unsigned char > (~0) (print v_unsigned_char > 127)
+PASS: gdb.base/exprs.exp: print signed short == (setup)
+PASS: gdb.base/exprs.exp: print signed short == (print v_short == 0)
+PASS: gdb.base/exprs.exp: print signed short == (print v_short == 0x7FFF)
+PASS: gdb.base/exprs.exp: print signed short != (setup)
+PASS: gdb.base/exprs.exp: print signed short != (print v_short != 0)
+PASS: gdb.base/exprs.exp: print signed short != (print v_short != 0x7FFF)
+PASS: gdb.base/exprs.exp: print signed short < (setup)
+PASS: gdb.base/exprs.exp: print signed short < (print v_short < 0)
+PASS: gdb.base/exprs.exp: print signed short < (print v_short < 0x7FFF)
+PASS: gdb.base/exprs.exp: print signed short > (setup)
+PASS: gdb.base/exprs.exp: print signed short > (print v_short > 0)
+PASS: gdb.base/exprs.exp: print signed short > (print v_short > 0x7FFF)
+PASS: gdb.base/exprs.exp: print signed short == (minus) (setup)
+PASS: gdb.base/exprs.exp: print signed short == (minus) (print v_short == 0)
+PASS: gdb.base/exprs.exp: print signed short == (minus) (print v_short == -1)
+PASS: gdb.base/exprs.exp: print signed short != (minus) (setup)
+PASS: gdb.base/exprs.exp: print signed short != (minus) (print v_short != 0)
+PASS: gdb.base/exprs.exp: print signed short != (minus) (print v_short != -1)
+PASS: gdb.base/exprs.exp: print signed short < (minus) (setup)
+PASS: gdb.base/exprs.exp: print signed short < (minus) (print v_short < 0)
+PASS: gdb.base/exprs.exp: print signed short < (minus) (print v_short < 0x7FFF)
+PASS: gdb.base/exprs.exp: print signed short > (minus) (setup)
+PASS: gdb.base/exprs.exp: print signed short > (minus) (print v_short > 0)
+PASS: gdb.base/exprs.exp: print signed short > (minus) (print v_short > 0x7FFF)
+PASS: gdb.base/exprs.exp: print signed signed short == (setup)
+PASS: gdb.base/exprs.exp: print signed signed short == (print v_signed_short == 0)
+PASS: gdb.base/exprs.exp: print signed signed short == (print v_signed_short == 0x7FFF)
+PASS: gdb.base/exprs.exp: print signed signed short != (setup)
+PASS: gdb.base/exprs.exp: print signed signed short != (print v_signed_short != 0)
+PASS: gdb.base/exprs.exp: print signed signed short != (print v_signed_short != 0x7FFF)
+PASS: gdb.base/exprs.exp: print signed signed short < (setup)
+PASS: gdb.base/exprs.exp: print signed signed short < (print v_signed_short < 0)
+PASS: gdb.base/exprs.exp: print signed signed short < (print v_signed_short < 0x7FFF)
+PASS: gdb.base/exprs.exp: print signed signed short > (setup)
+PASS: gdb.base/exprs.exp: print signed signed short > (print v_signed_short > 0)
+PASS: gdb.base/exprs.exp: print signed signed short > (print v_signed_short > 0x7FFF)
+PASS: gdb.base/exprs.exp: print signed signed short == (minus) (setup)
+PASS: gdb.base/exprs.exp: print signed signed short == (minus) (print v_signed_short == 0)
+PASS: gdb.base/exprs.exp: print signed signed short == (minus) (print v_signed_short == -1)
+PASS: gdb.base/exprs.exp: print signed signed short != (minus) (setup)
+PASS: gdb.base/exprs.exp: print signed signed short != (minus) (print v_signed_short != 0)
+PASS: gdb.base/exprs.exp: print signed signed short != (minus) (print v_signed_short != -1)
+PASS: gdb.base/exprs.exp: print signed signed short < (minus) (setup)
+PASS: gdb.base/exprs.exp: print signed signed short < (minus) (print v_signed_short < 0)
+PASS: gdb.base/exprs.exp: print signed signed short < (minus) (print v_signed_short < 0x7FFF)
+PASS: gdb.base/exprs.exp: print signed signed short > (minus) (setup)
+PASS: gdb.base/exprs.exp: print signed signed short > (minus) (print v_signed_short > 0)
+PASS: gdb.base/exprs.exp: print signed signed short > (minus) (print v_signed_short > 0x7FFF)
+PASS: gdb.base/exprs.exp: print unsigned short == (setup)
+PASS: gdb.base/exprs.exp: print unsigned short == (print v_unsigned_short == 0)
+PASS: gdb.base/exprs.exp: print unsigned short == (print v_unsigned_short == 0x7FFF)
+PASS: gdb.base/exprs.exp: print unsigned short != (setup)
+PASS: gdb.base/exprs.exp: print unsigned short != (print v_unsigned_short != 0)
+PASS: gdb.base/exprs.exp: print unsigned short != (print v_unsigned_short != 0x7FFF)
+PASS: gdb.base/exprs.exp: print unsigned short < (setup)
+PASS: gdb.base/exprs.exp: print unsigned short < (print v_unsigned_short < 0)
+PASS: gdb.base/exprs.exp: print unsigned short < (print v_unsigned_short < 0x7FFF)
+PASS: gdb.base/exprs.exp: print unsigned short > (setup)
+PASS: gdb.base/exprs.exp: print unsigned short > (print v_unsigned_short > 0)
+PASS: gdb.base/exprs.exp: print unsigned short > (print v_unsigned_short > 0x7FFF)
+PASS: gdb.base/exprs.exp: print unsigned short == (~0) (setup)
+PASS: gdb.base/exprs.exp: print unsigned short == (~0) (print v_unsigned_short == 0)
+PASS: gdb.base/exprs.exp: print unsigned short == (~0) (print sizeof (v_unsigned_short) < sizeof (~0) && v_unsigned_short == ~0)
+PASS: gdb.base/exprs.exp: print unsigned short == (~0) (print v_unsigned_short == (unsigned short)~0)
+PASS: gdb.base/exprs.exp: print unsigned short != (~0) (setup)
+PASS: gdb.base/exprs.exp: print unsigned short != (~0) (print v_unsigned_short != 0)
+PASS: gdb.base/exprs.exp: print unsigned short != (~0) (print v_unsigned_short != (unsigned short)~0)
+PASS: gdb.base/exprs.exp: print unsigned short < (~0) (setup)
+PASS: gdb.base/exprs.exp: print unsigned short < (~0) (print v_unsigned_short < 0)
+PASS: gdb.base/exprs.exp: print unsigned short < (~0) (print v_unsigned_short < 0x7FFF)
+PASS: gdb.base/exprs.exp: print unsigned short > (~0) (setup)
+PASS: gdb.base/exprs.exp: print unsigned short > (~0) (print v_unsigned_short > 0)
+PASS: gdb.base/exprs.exp: print unsigned short > (~0) (print v_unsigned_short > 0x7FFF)
+PASS: gdb.base/exprs.exp: print signed int == (setup)
+PASS: gdb.base/exprs.exp: print signed int == (print v_int == 0)
+PASS: gdb.base/exprs.exp: print signed int == (print v_int == 0x7FFF)
+PASS: gdb.base/exprs.exp: print signed int != (setup)
+PASS: gdb.base/exprs.exp: print signed int != (print v_int != 0)
+PASS: gdb.base/exprs.exp: print signed int != (print v_int != 0x7FFF)
+PASS: gdb.base/exprs.exp: print signed int < (setup)
+PASS: gdb.base/exprs.exp: print signed int < (print v_int < 0)
+PASS: gdb.base/exprs.exp: print signed int < (print v_int < 0x7FFF)
+PASS: gdb.base/exprs.exp: print signed int > (setup)
+PASS: gdb.base/exprs.exp: print signed int > (print v_int > 0)
+PASS: gdb.base/exprs.exp: print signed int > (print v_int > 0x7FFF)
+PASS: gdb.base/exprs.exp: print signed int == (minus) (setup)
+PASS: gdb.base/exprs.exp: print signed int == (minus) (print v_int == 0)
+PASS: gdb.base/exprs.exp: print signed int == (minus) (print v_int == -1)
+PASS: gdb.base/exprs.exp: print signed int != (minus) (setup)
+PASS: gdb.base/exprs.exp: print signed int != (minus) (print v_int != 0)
+PASS: gdb.base/exprs.exp: print signed int != (minus) (print v_int != -1)
+PASS: gdb.base/exprs.exp: print signed int < (minus) (setup)
+PASS: gdb.base/exprs.exp: print signed int < (minus) (print v_int < 0)
+PASS: gdb.base/exprs.exp: print signed int < (minus) (print v_int < 0x7FFF)
+PASS: gdb.base/exprs.exp: print signed int > (minus) (setup)
+PASS: gdb.base/exprs.exp: print signed int > (minus) (print v_int > 0)
+PASS: gdb.base/exprs.exp: print signed int > (minus) (print v_int > 0x7FFF)
+PASS: gdb.base/exprs.exp: print signed signed int == (setup)
+PASS: gdb.base/exprs.exp: print signed signed int == (print v_signed_int == 0)
+PASS: gdb.base/exprs.exp: print signed signed int == (print v_signed_int == 0x7FFF)
+PASS: gdb.base/exprs.exp: print signed signed int != (setup)
+PASS: gdb.base/exprs.exp: print signed signed int != (print v_signed_int != 0)
+PASS: gdb.base/exprs.exp: print signed signed int != (print v_signed_int != 0x7FFF)
+PASS: gdb.base/exprs.exp: print signed signed int < (setup)
+PASS: gdb.base/exprs.exp: print signed signed int < (print v_signed_int < 0)
+PASS: gdb.base/exprs.exp: print signed signed int < (print v_signed_int < 0x7FFF)
+PASS: gdb.base/exprs.exp: print signed signed int > (setup)
+PASS: gdb.base/exprs.exp: print signed signed int > (print v_signed_int > 0)
+PASS: gdb.base/exprs.exp: print signed signed int > (print v_signed_int > 0x7FFF)
+PASS: gdb.base/exprs.exp: print signed signed int == (minus) (setup)
+PASS: gdb.base/exprs.exp: print signed signed int == (minus) (print v_signed_int == 0)
+PASS: gdb.base/exprs.exp: print signed signed int == (minus) (print v_signed_int == -1)
+PASS: gdb.base/exprs.exp: print signed signed int != (minus) (setup)
+PASS: gdb.base/exprs.exp: print signed signed int != (minus) (print v_signed_int != 0)
+PASS: gdb.base/exprs.exp: print signed signed int != (minus) (print v_signed_int != -1)
+PASS: gdb.base/exprs.exp: print signed signed int < (minus) (setup)
+PASS: gdb.base/exprs.exp: print signed signed int < (minus) (print v_signed_int < 0)
+PASS: gdb.base/exprs.exp: print signed signed int < (minus) (print v_signed_int < 0x7FFF)
+PASS: gdb.base/exprs.exp: print signed signed int > (minus) (setup)
+PASS: gdb.base/exprs.exp: print signed signed int > (minus) (print v_signed_int > 0)
+PASS: gdb.base/exprs.exp: print signed signed int > (minus) (print v_signed_int > 0x7FFF)
+PASS: gdb.base/exprs.exp: print unsigned int == (setup)
+PASS: gdb.base/exprs.exp: print unsigned int == (print v_unsigned_int == 0)
+PASS: gdb.base/exprs.exp: print unsigned int == (print v_unsigned_int == 0x7FFF)
+PASS: gdb.base/exprs.exp: print unsigned int != (setup)
+PASS: gdb.base/exprs.exp: print unsigned int != (print v_unsigned_int != 0)
+PASS: gdb.base/exprs.exp: print unsigned int != (print v_unsigned_int != 0x7FFF)
+PASS: gdb.base/exprs.exp: print unsigned int < (setup)
+PASS: gdb.base/exprs.exp: print unsigned int < (print v_unsigned_int < 0)
+PASS: gdb.base/exprs.exp: print unsigned int < (print v_unsigned_int < 0x7FFF)
+PASS: gdb.base/exprs.exp: print unsigned int > (setup)
+PASS: gdb.base/exprs.exp: print unsigned int > (print v_unsigned_int > 0)
+PASS: gdb.base/exprs.exp: print unsigned int > (print v_unsigned_int > 0x7FFF)
+PASS: gdb.base/exprs.exp: print unsigned int == (~0) (setup)
+PASS: gdb.base/exprs.exp: print unsigned int == (~0) (print v_unsigned_int == 0)
+PASS: gdb.base/exprs.exp: print unsigned int == (~0) (print v_unsigned_int == ~0)
+PASS: gdb.base/exprs.exp: print unsigned int == (~0) (print v_unsigned_int == (unsigned int)~0)
+PASS: gdb.base/exprs.exp: print unsigned int != (~0) (setup)
+PASS: gdb.base/exprs.exp: print unsigned int != (~0) (print v_unsigned_int != 0)
+PASS: gdb.base/exprs.exp: print unsigned int != (~0) (print v_unsigned_int != (unsigned int)~0)
+PASS: gdb.base/exprs.exp: print unsigned int < (~0) (setup)
+PASS: gdb.base/exprs.exp: print unsigned int < (~0) (print v_unsigned_int < 0)
+PASS: gdb.base/exprs.exp: print unsigned int < (~0) (print v_unsigned_int < 0x7FFF)
+PASS: gdb.base/exprs.exp: print unsigned int > (~0) (setup)
+PASS: gdb.base/exprs.exp: print unsigned int > (~0) (print v_unsigned_int > 0)
+PASS: gdb.base/exprs.exp: print unsigned int > (~0) (print v_unsigned_int > 0x7FFF)
+PASS: gdb.base/exprs.exp: print signed long == (setup)
+PASS: gdb.base/exprs.exp: print signed long == (print v_long == 0)
+PASS: gdb.base/exprs.exp: print signed long == (print v_long == 0x7FFF)
+PASS: gdb.base/exprs.exp: print signed long != (setup)
+PASS: gdb.base/exprs.exp: print signed long != (print v_long != 0)
+PASS: gdb.base/exprs.exp: print signed long != (print v_long != 0x7FFF)
+PASS: gdb.base/exprs.exp: print signed long < (setup)
+PASS: gdb.base/exprs.exp: print signed long < (print v_long < 0)
+PASS: gdb.base/exprs.exp: print signed long < (print v_long < 0x7FFF)
+PASS: gdb.base/exprs.exp: print signed long > (setup)
+PASS: gdb.base/exprs.exp: print signed long > (print v_long > 0)
+PASS: gdb.base/exprs.exp: print signed long > (print v_long > 0x7FFF)
+PASS: gdb.base/exprs.exp: print signed long == (minus) (setup)
+PASS: gdb.base/exprs.exp: print signed long == (minus) (print v_long == 0)
+PASS: gdb.base/exprs.exp: print signed long == (minus) (print v_long == -1)
+PASS: gdb.base/exprs.exp: print signed long != (minus) (setup)
+PASS: gdb.base/exprs.exp: print signed long != (minus) (print v_long != 0)
+PASS: gdb.base/exprs.exp: print signed long != (minus) (print v_long != -1)
+PASS: gdb.base/exprs.exp: print signed long < (minus) (setup)
+PASS: gdb.base/exprs.exp: print signed long < (minus) (print v_long < 0)
+PASS: gdb.base/exprs.exp: print signed long < (minus) (print v_long < 0x7FFF)
+PASS: gdb.base/exprs.exp: print signed long > (minus) (setup)
+PASS: gdb.base/exprs.exp: print signed long > (minus) (print v_long > 0)
+PASS: gdb.base/exprs.exp: print signed long > (minus) (print v_long > 0x7FFF)
+PASS: gdb.base/exprs.exp: print signed signed long == (setup)
+PASS: gdb.base/exprs.exp: print signed signed long == (print v_signed_long == 0)
+PASS: gdb.base/exprs.exp: print signed signed long == (print v_signed_long == 0x7FFF)
+PASS: gdb.base/exprs.exp: print signed signed long != (setup)
+PASS: gdb.base/exprs.exp: print signed signed long != (print v_signed_long != 0)
+PASS: gdb.base/exprs.exp: print signed signed long != (print v_signed_long != 0x7FFF)
+PASS: gdb.base/exprs.exp: print signed signed long < (setup)
+PASS: gdb.base/exprs.exp: print signed signed long < (print v_signed_long < 0)
+PASS: gdb.base/exprs.exp: print signed signed long < (print v_signed_long < 0x7FFF)
+PASS: gdb.base/exprs.exp: print signed signed long > (setup)
+PASS: gdb.base/exprs.exp: print signed signed long > (print v_signed_long > 0)
+PASS: gdb.base/exprs.exp: print signed signed long > (print v_signed_long > 0x7FFF)
+PASS: gdb.base/exprs.exp: print signed signed long == (minus) (setup)
+PASS: gdb.base/exprs.exp: print signed signed long == (minus) (print v_signed_long == 0)
+PASS: gdb.base/exprs.exp: print signed signed long == (minus) (print v_signed_long == -1)
+PASS: gdb.base/exprs.exp: print signed signed long != (minus) (setup)
+PASS: gdb.base/exprs.exp: print signed signed long != (minus) (print v_signed_long != 0)
+PASS: gdb.base/exprs.exp: print signed signed long != (minus) (print v_signed_long != -1)
+PASS: gdb.base/exprs.exp: print signed signed long < (minus) (setup)
+PASS: gdb.base/exprs.exp: print signed signed long < (minus) (print v_signed_long < 0)
+PASS: gdb.base/exprs.exp: print signed signed long < (minus) (print v_signed_long < 0x7FFF)
+PASS: gdb.base/exprs.exp: print signed signed long > (minus) (setup)
+PASS: gdb.base/exprs.exp: print signed signed long > (minus) (print v_signed_long > 0)
+PASS: gdb.base/exprs.exp: print signed signed long > (minus) (print v_signed_long > 0x7FFF)
+PASS: gdb.base/exprs.exp: print unsigned long == (setup)
+PASS: gdb.base/exprs.exp: print unsigned long == (print v_unsigned_long == 0)
+PASS: gdb.base/exprs.exp: print unsigned long == (print v_unsigned_long == 0x7FFF)
+PASS: gdb.base/exprs.exp: print unsigned long != (setup)
+PASS: gdb.base/exprs.exp: print unsigned long != (print v_unsigned_long != 0)
+PASS: gdb.base/exprs.exp: print unsigned long != (print v_unsigned_long != 0x7FFF)
+PASS: gdb.base/exprs.exp: print unsigned long < (setup)
+PASS: gdb.base/exprs.exp: print unsigned long < (print v_unsigned_long < 0)
+PASS: gdb.base/exprs.exp: print unsigned long < (print v_unsigned_long < 0x7FFF)
+PASS: gdb.base/exprs.exp: print unsigned long > (setup)
+PASS: gdb.base/exprs.exp: print unsigned long > (print v_unsigned_long > 0)
+PASS: gdb.base/exprs.exp: print unsigned long > (print v_unsigned_long > 0x7FFF)
+PASS: gdb.base/exprs.exp: print unsigned long == (~0) (setup)
+PASS: gdb.base/exprs.exp: print unsigned long == (~0) (print v_unsigned_long == 0)
+PASS: gdb.base/exprs.exp: print unsigned long == (~0) (print v_unsigned_long == ~0)
+PASS: gdb.base/exprs.exp: print unsigned long == (~0) (print v_unsigned_long == (unsigned long)~0)
+PASS: gdb.base/exprs.exp: print unsigned long != (~0) (setup)
+PASS: gdb.base/exprs.exp: print unsigned long != (~0) (print v_unsigned_long != 0)
+PASS: gdb.base/exprs.exp: print unsigned long != (~0) (print v_unsigned_long != (unsigned long)~0)
+PASS: gdb.base/exprs.exp: print unsigned long < (~0) (setup)
+PASS: gdb.base/exprs.exp: print unsigned long < (~0) (print v_unsigned_long < 0)
+PASS: gdb.base/exprs.exp: print unsigned long < (~0) (print v_unsigned_long < 0x7FFF)
+PASS: gdb.base/exprs.exp: print unsigned long > (~0) (setup)
+PASS: gdb.base/exprs.exp: print unsigned long > (~0) (print v_unsigned_long > 0)
+PASS: gdb.base/exprs.exp: print unsigned long > (~0) (print v_unsigned_long > 0x7FFF)
+PASS: gdb.base/exprs.exp: print (void*)v_signed_char (setup)
+PASS: gdb.base/exprs.exp: print (void*)v_signed_char (print (void*)v_signed_char)
+PASS: gdb.base/exprs.exp: print (void*)v_signed_short (setup)
+PASS: gdb.base/exprs.exp: print (void*)v_signed_short (print (void*)v_signed_short)
+PASS: gdb.base/exprs.exp: print (void*)v_signed_int (setup)
+PASS: gdb.base/exprs.exp: print (void*)v_signed_int (print (void*)v_signed_int)
+PASS: gdb.base/exprs.exp: print (void*)v_signed_long (setup)
+PASS: gdb.base/exprs.exp: print (void*)v_signed_long (print (void*)v_signed_long)
+PASS: gdb.base/exprs.exp: print (void*)v_unsigned_char (setup)
+PASS: gdb.base/exprs.exp: print (void*)v_unsigned_char (print (void*)v_unsigned_char)
+PASS: gdb.base/exprs.exp: print (void*)v_unsigned_short (setup)
+PASS: gdb.base/exprs.exp: print (void*)v_unsigned_short (print (void*)v_unsigned_short)
+PASS: gdb.base/exprs.exp: print (void*)v_unsigned_int (setup)
+PASS: gdb.base/exprs.exp: print (void*)v_unsigned_int (print (void*)v_unsigned_int)
+PASS: gdb.base/exprs.exp: print (void*)v_unsigned_long (setup)
+PASS: gdb.base/exprs.exp: print (void*)v_unsigned_long (print (void*)v_unsigned_long)
+PASS: gdb.base/exprs.exp: sizeof (long long) > sizeof (long) (true)
+PASS: gdb.base/exprs.exp: truncate (void*) 0x00000000ffffffff + 1
+PASS: gdb.base/exprs.exp: truncate (void*) 0xffffffff00000000 - 1
+PASS: gdb.base/exprs.exp: \$[0-9]* = "xy" (setup)
+PASS: gdb.base/exprs.exp: \$[0-9]* = "xyz" (setup)
+PASS: gdb.base/exprs.exp: \$[0-9]* = red (setup)
+PASS: gdb.base/exprs.exp: set output-radix 8
+PASS: gdb.base/exprs.exp: \$[0-9]* = red (setup)
+PASS: gdb.base/exprs.exp: \$[0-9]* = 0 (setup)
+PASS: gdb.base/exprs.exp: set output-radix 10
+PASS: gdb.base/exprs.exp: set variable v_int = 1
+PASS: gdb.base/exprs.exp: print v_int++
+PASS: gdb.base/exprs.exp: print ++v_int
+PASS: gdb.base/exprs.exp: print v_int--
+PASS: gdb.base/exprs.exp: print --v_int
+PASS: gdb.base/exprs.exp: print v_int++ = 5
+PASS: gdb.base/exprs.exp: print v_int-- = 5
+PASS: gdb.base/exprs.exp: print v_int_array_init
+PASS: gdb.base/exprs.exp: print *v_int_array_init@1
+PASS: gdb.base/exprs.exp: print *v_int_array_init@2
+PASS: gdb.base/exprs.exp: print v_int_array_init[0]@1
+PASS: gdb.base/exprs.exp: print v_int_array_init[0]@2
+PASS: gdb.base/exprs.exp: print v_int_array_init[1]@1
+PASS: gdb.base/exprs.exp: set variable v_short_array[0] = 42
+PASS: gdb.base/exprs.exp: print {short} v_short_array
+PASS: gdb.base/exprs.exp: print (void) v_int_pointer
+PASS: gdb.base/exprs.exp: print & (void) v_char
+Running ./gdb.base/fileio.exp ...
+Running ./gdb.base/find.exp ...
+PASS: gdb.base/find.exp: breakpoint function in file
+PASS: gdb.base/find.exp: run until function breakpoint
+PASS: gdb.base/find.exp: find string pattern
+PASS: gdb.base/find.exp: pattern not found at end of range
+PASS: gdb.base/find.exp: pattern found at end of range
+PASS: gdb.base/find.exp: max-count
+PASS: gdb.base/find.exp: $_
+PASS: gdb.base/find.exp: $numfound
+PASS: gdb.base/find.exp: size,max-count, /1b
+PASS: gdb.base/find.exp: size,max-count, /b1
+PASS: gdb.base/find.exp: size,max-count, /b/1
+PASS: gdb.base/find.exp: size,max-count, /1/b
+PASS: gdb.base/find.exp: find byte pattern with end address
+PASS: gdb.base/find.exp: find 16-bit pattern
+PASS: gdb.base/find.exp: find 16-bit pattern
+PASS: gdb.base/find.exp: find 32-bit pattern
+PASS: gdb.base/find.exp: find 32-bit pattern
+PASS: gdb.base/find.exp: find 64-bit pattern
+PASS: gdb.base/find.exp: find 64-bit pattern
+PASS: gdb.base/find.exp: find mixed-sized pattern
+PASS: gdb.base/find.exp: search spanning large range
+PASS: gdb.base/find.exp: find int64_search_buf, +64/8*100, int64_search_buf
+Running ./gdb.base/find-unmapped.exp ...
+Running ./gdb.base/finish.exp ...
+PASS: gdb.base/finish.exp: set break on void_func
+PASS: gdb.base/finish.exp: continue to void_func
+PASS: gdb.base/finish.exp: finish from void_func
+PASS: gdb.base/finish.exp: set break on char_func
+PASS: gdb.base/finish.exp: continue to char_func
+PASS: gdb.base/finish.exp: finish from char_func
+PASS: gdb.base/finish.exp: set break on short_func
+PASS: gdb.base/finish.exp: continue to short_func
+PASS: gdb.base/finish.exp: finish from short_func
+PASS: gdb.base/finish.exp: set break on int_func
+PASS: gdb.base/finish.exp: continue to int_func
+PASS: gdb.base/finish.exp: finish from int_func
+PASS: gdb.base/finish.exp: set break on long_func
+PASS: gdb.base/finish.exp: continue to long_func
+PASS: gdb.base/finish.exp: finish from long_func
+PASS: gdb.base/finish.exp: set break on long_long_func
+PASS: gdb.base/finish.exp: continue to long_long_func
+PASS: gdb.base/finish.exp: finish from long_long_func
+PASS: gdb.base/finish.exp: set break on float_func
+PASS: gdb.base/finish.exp: continue to float_func
+PASS: gdb.base/finish.exp: finish from float_func
+PASS: gdb.base/finish.exp: set break on double_func
+PASS: gdb.base/finish.exp: continue to double_func
+PASS: gdb.base/finish.exp: finish from double_func
+PASS: gdb.base/finish.exp: Testing the "fin" abbreviation for "finish"
+Running ./gdb.base/fixsection.exp ...
+PASS: gdb.base/fixsection.exp: breakpoint at static_fun
+Running ./gdb.base/float.exp ...
+PASS: gdb.base/float.exp: info float (VFP)
+PASS: gdb.base/float.exp: step
+PASS: gdb.base/float.exp: finish
+Running ./gdb.base/foll-exec.exp ...
+Running ./gdb.base/foll-fork.exp ...
+Running ./gdb.base/foll-vfork.exp ...
+Running ./gdb.base/fortran-sym-case.exp ...
+PASS: gdb.base/fortran-sym-case.exp: set language fortran
+PASS: gdb.base/fortran-sym-case.exp: frame
+Running ./gdb.base/frame-args.exp ...
+PASS: gdb.base/frame-args.exp: set print frame-arguments all
+PASS: gdb.base/frame-args.exp: frame 1 with print frame-arguments set to all
+PASS: gdb.base/frame-args.exp: set print frame-arguments scalars
+PASS: gdb.base/frame-args.exp: frame 1 with print frame-arguments set to scalars
+PASS: gdb.base/frame-args.exp: set print frame-arguments none
+PASS: gdb.base/frame-args.exp: frame 1 with print frame-arguments set to none
+Running ./gdb.base/freebpcmd.exp ...
+PASS: gdb.base/freebpcmd.exp: set breakpoint
+PASS: gdb.base/freebpcmd.exp: send breakpoint commands
+PASS: gdb.base/freebpcmd.exp: run program with breakpoint commands
+Running ./gdb.base/fullname.exp ...
+PASS: gdb.base/fullname.exp: set breakpoint by full path before loading symbols - built absolute
+PASS: gdb.base/fullname.exp: set breakpoint at main - built absolute
+PASS: gdb.base/fullname.exp: set breakpoint by full path after loading symbols - built absolute
+PASS: gdb.base/fullname.exp: set breakpoint by full path before loading symbols - built relative
+PASS: gdb.base/fullname.exp: set breakpoint at main - built relative
+PASS: gdb.base/fullname.exp: set breakpoint by full path after loading symbols - built relative
+PASS: gdb.base/fullname.exp: set breakpoint by full path before loading symbols - built other
+PASS: gdb.base/fullname.exp: set breakpoint at main - built other
+PASS: gdb.base/fullname.exp: set breakpoint by full path after loading symbols - built other
+Running ./gdb.base/fullpath-expand.exp ...
+PASS: gdb.base/fullpath-expand.exp: rbreak XXX/fullpath-expand-func.c:func
+PASS: gdb.base/fullpath-expand.exp: list func
+PASS: gdb.base/fullpath-expand.exp: info source
+Running ./gdb.base/funcargs.exp ...
+PASS: gdb.base/funcargs.exp: set print frame-arguments all
+PASS: gdb.base/funcargs.exp: run to call0a
+PASS: gdb.base/funcargs.exp: print c after run to call0a
+PASS: gdb.base/funcargs.exp: print s after run to call0a
+PASS: gdb.base/funcargs.exp: print i after run to call0a
+PASS: gdb.base/funcargs.exp: print l after run to call0a
+PASS: gdb.base/funcargs.exp: continue to call0b
+PASS: gdb.base/funcargs.exp: continue to call0c
+PASS: gdb.base/funcargs.exp: continue to call0d
+PASS: gdb.base/funcargs.exp: continue to call0e
+PASS: gdb.base/funcargs.exp: run to call1a
+PASS: gdb.base/funcargs.exp: print uc
+PASS: gdb.base/funcargs.exp: print us
+PASS: gdb.base/funcargs.exp: print ui
+PASS: gdb.base/funcargs.exp: print ul
+PASS: gdb.base/funcargs.exp: continue to call1b
+PASS: gdb.base/funcargs.exp: continue to call1c
+PASS: gdb.base/funcargs.exp: continue to call1d
+PASS: gdb.base/funcargs.exp: continue to call1e
+PASS: gdb.base/funcargs.exp: run to call2a
+PASS: gdb.base/funcargs.exp: print c after run to call2a
+PASS: gdb.base/funcargs.exp: print f1 after run to call2a
+PASS: gdb.base/funcargs.exp: print s after run to call2a
+PASS: gdb.base/funcargs.exp: print d1 after run to call2a
+PASS: gdb.base/funcargs.exp: print i after run to call2a
+PASS: gdb.base/funcargs.exp: print f2 after run to call2a
+PASS: gdb.base/funcargs.exp: print l after run to call2a
+PASS: gdb.base/funcargs.exp: print d2 after run to call2a
+PASS: gdb.base/funcargs.exp: continue to call2b
+PASS: gdb.base/funcargs.exp: continue to call2c
+PASS: gdb.base/funcargs.exp: continue to call2d
+PASS: gdb.base/funcargs.exp: continue to call2e
+PASS: gdb.base/funcargs.exp: continue to call2f
+PASS: gdb.base/funcargs.exp: continue to call2g
+PASS: gdb.base/funcargs.exp: continue to call2h
+PASS: gdb.base/funcargs.exp: continue to call2i
+PASS: gdb.base/funcargs.exp: run to call2a
+PASS: gdb.base/funcargs.exp: continue to callcb
+PASS: gdb.base/funcargs.exp: continue to callcc
+PASS: gdb.base/funcargs.exp: continue to callcd
+PASS: gdb.base/funcargs.exp: continue to callce
+PASS: gdb.base/funcargs.exp: continue to callcf
+PASS: gdb.base/funcargs.exp: run to callc1a
+PASS: gdb.base/funcargs.exp: continue to callc1b
+PASS: gdb.base/funcargs.exp: run to callc2a
+PASS: gdb.base/funcargs.exp: continue to callc2b
+PASS: gdb.base/funcargs.exp: run to call3a
+PASS: gdb.base/funcargs.exp: print *cp
+PASS: gdb.base/funcargs.exp: print *sp
+PASS: gdb.base/funcargs.exp: print *ip
+PASS: gdb.base/funcargs.exp: print *lp
+PASS: gdb.base/funcargs.exp: continue to call3b
+PASS: gdb.base/funcargs.exp: print *ucp
+PASS: gdb.base/funcargs.exp: print *usp
+PASS: gdb.base/funcargs.exp: print *uip
+PASS: gdb.base/funcargs.exp: print *ulp
+PASS: gdb.base/funcargs.exp: continue to call3c
+PASS: gdb.base/funcargs.exp: print *fp
+PASS: gdb.base/funcargs.exp: print *dp
+PASS: gdb.base/funcargs.exp: run to call4a
+PASS: gdb.base/funcargs.exp: print *stp
+PASS: gdb.base/funcargs.exp: continue to call4b
+PASS: gdb.base/funcargs.exp: print *unp (sizeof long == sizeof int)
+PASS: gdb.base/funcargs.exp: locate actual args, structs/unions passed by reference
+PASS: gdb.base/funcargs.exp: run to call5a
+PASS: gdb.base/funcargs.exp: print st
+PASS: gdb.base/funcargs.exp: continue to call5b (sizeof long == sizeof int)
+PASS: gdb.base/funcargs.exp: print un (sizeof long == sizeof int)
+PASS: gdb.base/funcargs.exp: run to call6a
+PASS: gdb.base/funcargs.exp: backtrace from call6a
+PASS: gdb.base/funcargs.exp: continue to call6b
+PASS: gdb.base/funcargs.exp: backtrace from call6b
+PASS: gdb.base/funcargs.exp: continue to call6c
+PASS: gdb.base/funcargs.exp: backtrace from call6c
+PASS: gdb.base/funcargs.exp: continue to call6d
+PASS: gdb.base/funcargs.exp: backtrace from call6d
+PASS: gdb.base/funcargs.exp: continue to call6e
+PASS: gdb.base/funcargs.exp: backtrace from call6e
+PASS: gdb.base/funcargs.exp: continue to call6f
+PASS: gdb.base/funcargs.exp: backtrace from call6f
+PASS: gdb.base/funcargs.exp: continue to call6g
+PASS: gdb.base/funcargs.exp: backtrace from call6g
+PASS: gdb.base/funcargs.exp: continue to call6h
+PASS: gdb.base/funcargs.exp: backtrace from call6h
+PASS: gdb.base/funcargs.exp: continue to call6i
+PASS: gdb.base/funcargs.exp: backtrace from call6i
+PASS: gdb.base/funcargs.exp: continue to call6j
+PASS: gdb.base/funcargs.exp: backtrace from call6j
+PASS: gdb.base/funcargs.exp: continue to call6k
+PASS: gdb.base/funcargs.exp: backtrace from call6k
+PASS: gdb.base/funcargs.exp: run to call7a
+PASS: gdb.base/funcargs.exp: backtrace from call7a
+PASS: gdb.base/funcargs.exp: continue to call7b
+PASS: gdb.base/funcargs.exp: backtrace from call7b
+PASS: gdb.base/funcargs.exp: continue to call7c
+PASS: gdb.base/funcargs.exp: backtrace from call7c
+PASS: gdb.base/funcargs.exp: continue to call7d
+PASS: gdb.base/funcargs.exp: backtrace from call7d
+PASS: gdb.base/funcargs.exp: continue to call7e
+PASS: gdb.base/funcargs.exp: backtrace from call7e
+PASS: gdb.base/funcargs.exp: continue to call7f
+PASS: gdb.base/funcargs.exp: backtrace from call7f
+PASS: gdb.base/funcargs.exp: continue to call7g
+PASS: gdb.base/funcargs.exp: backtrace from call7g
+PASS: gdb.base/funcargs.exp: continue to call7h
+PASS: gdb.base/funcargs.exp: backtrace from call7h
+PASS: gdb.base/funcargs.exp: continue to call7i
+PASS: gdb.base/funcargs.exp: backtrace from call7i
+PASS: gdb.base/funcargs.exp: continue to call7j
+PASS: gdb.base/funcargs.exp: backtrace from call7j
+PASS: gdb.base/funcargs.exp: continue to call7k
+PASS: gdb.base/funcargs.exp: backtrace from call7k
+PASS: gdb.base/funcargs.exp: run to hitbottom
+PASS: gdb.base/funcargs.exp: recursive passing of structs by value
+PASS: gdb.base/funcargs.exp: print c after runto localvars_after_alloca
+PASS: gdb.base/funcargs.exp: print s after runto localvars_after_alloca
+PASS: gdb.base/funcargs.exp: print i after runto localvars_after_alloca
+PASS: gdb.base/funcargs.exp: print l after runto localvars_after_alloca
+PASS: gdb.base/funcargs.exp: next in localvars_after_alloca()
+PASS: gdb.base/funcargs.exp: print c in localvars_after_alloca
+PASS: gdb.base/funcargs.exp: print s in localvars_after_alloca
+PASS: gdb.base/funcargs.exp: print i in localvars_after_alloca
+PASS: gdb.base/funcargs.exp: print l in localvars_after_alloca
+PASS: gdb.base/funcargs.exp: backtrace after alloca
+PASS: gdb.base/funcargs.exp: print c in call_after_alloca
+PASS: gdb.base/funcargs.exp: print s in call_after_alloca
+PASS: gdb.base/funcargs.exp: print i in call_after_alloca
+PASS: gdb.base/funcargs.exp: print l in call_after_alloca
+PASS: gdb.base/funcargs.exp: backtrace from call_after_alloca_subr
+PASS: gdb.base/funcargs.exp: continue to call0a
+PASS: gdb.base/funcargs.exp: print c in localvars_in_indirect_call
+PASS: gdb.base/funcargs.exp: print s in localvars_in_indirect_call
+PASS: gdb.base/funcargs.exp: print i in localvars_in_indirect_call
+PASS: gdb.base/funcargs.exp: print l in localvars_in_indirect_call
+PASS: gdb.base/funcargs.exp: backtrace in indirectly called function
+PASS: gdb.base/funcargs.exp: finish from indirectly called function
+PASS: gdb.base/funcargs.exp: stepping into indirectly called function
+PASS: gdb.base/funcargs.exp: finish from marker_call_with_trampolines
+PASS: gdb.base/funcargs.exp: stepping into function called with trampolines
+PASS: gdb.base/funcargs.exp: backtrace through call with trampolines
+PASS: gdb.base/funcargs.exp: stepping back to main from function called with trampolines
+Running ./gdb.base/gcore-buffer-overflow.exp ...
+PASS: gdb.base/gcore-buffer-overflow.exp: help gcore
+PASS: gdb.base/gcore-buffer-overflow.exp: Set buffer exceeding arguments
+PASS: gdb.base/gcore-buffer-overflow.exp: save a corefile
+Running ./gdb.base/gcore.exp ...
+PASS: gdb.base/gcore.exp: help gcore
+PASS: gdb.base/gcore.exp: set breakpoint at terminal_func
+PASS: gdb.base/gcore.exp: continue to terminal_func
+PASS: gdb.base/gcore.exp: save a corefile
+PASS: gdb.base/gcore.exp: re-load generated corefile
+PASS: gdb.base/gcore.exp: where in corefile
+PASS: gdb.base/gcore.exp: corefile restored general registers
+PASS: gdb.base/gcore.exp: corefile restored all registers
+PASS: gdb.base/gcore.exp: corefile restored extern array
+PASS: gdb.base/gcore.exp: corefile restored static array
+PASS: gdb.base/gcore.exp: corefile restored un-initialized array
+PASS: gdb.base/gcore.exp: corefile restored heap array
+PASS: gdb.base/gcore.exp: corefile restored stack array
+PASS: gdb.base/gcore.exp: corefile restored backtrace
+Running ./gdb.base/gcore-relro.exp ...
+PASS: gdb.base/gcore-relro.exp: help gcore
+Running ./gdb.base/gdb1056.exp ...
+PASS: gdb.base/gdb1056.exp: print 1/0
+PASS: gdb.base/gdb1056.exp: Test unsigned division by zero
+Running ./gdb.base/gdb1090.exp ...
+PASS: gdb.base/gdb1090.exp: continue to breakpoint: break-here
+PASS: gdb.base/gdb1090.exp: print s24
+Running ./gdb.base/gdb11530.exp ...
+PASS: gdb.base/gdb11530.exp: print a.i
+PASS: gdb.base/gdb11530.exp: print sizeof (a.i)
+PASS: gdb.base/gdb11530.exp: print sizeof (a.i) == sizeof (int)
+Running ./gdb.base/gdb11531.exp ...
+PASS: gdb.base/gdb11531.exp: Set watchpoint
+PASS: gdb.base/gdb11531.exp: watchpoint variable triggers at next
+PASS: gdb.base/gdb11531.exp: watchpoint variable triggers at continue
+Running ./gdb.base/gdb1250.exp ...
+Running ./gdb.base/gdb1555.exp ...
+FAIL: gdb.base/gdb1555.exp: Step into shared lib function
+FAIL: gdb.base/gdb1555.exp: Next while in a shared lib function
+Running ./gdb.base/gdb1821.exp ...
+PASS: gdb.base/gdb1821.exp: print /x bar
+Running ./gdb.base/gdbindex-stabs.exp ...
+PASS: gdb.base/gdbindex-stabs.exp: list stabs_function
+Running ./gdb.base/gdbvars.exp ...
+PASS: gdb.base/gdbvars.exp: set print sevenbit-strings
+PASS: gdb.base/gdbvars.exp: Set value-history[1] using $1
+PASS: gdb.base/gdbvars.exp: Set value-history[2] using $2
+PASS: gdb.base/gdbvars.exp: Set value-history[3] using $3
+PASS: gdb.base/gdbvars.exp: Print value-history[MAX-1] using inplicit index $$
+PASS: gdb.base/gdbvars.exp: Print value-history[MAX-1] again using implicit index $$
+PASS: gdb.base/gdbvars.exp: Print value-history[MAX] using implicit index $
+PASS: gdb.base/gdbvars.exp: Print value-history[MAX-2] using explicit index $$2
+PASS: gdb.base/gdbvars.exp: Print value-history[MAX] using explicit index $0
+PASS: gdb.base/gdbvars.exp: print 108
+PASS: gdb.base/gdbvars.exp: Print value-history[MAX] using explicit index $$0
+PASS: gdb.base/gdbvars.exp: Print value-history[1] using explicit index $1
+PASS: gdb.base/gdbvars.exp: Print value-history[2] using explicit index $2
+PASS: gdb.base/gdbvars.exp: Print value-history[3] using explicit index $3
+PASS: gdb.base/gdbvars.exp: Print (value-history[MAX] - 3) using implicit index $
+PASS: gdb.base/gdbvars.exp: Use value-history element in arithmetic expression
+PASS: gdb.base/gdbvars.exp: Set a new convenience variable
+PASS: gdb.base/gdbvars.exp: Print contents of new convenience variable
+PASS: gdb.base/gdbvars.exp: Set convenience variable to a new value
+PASS: gdb.base/gdbvars.exp: Print new contents of convenience variable
+PASS: gdb.base/gdbvars.exp: Set convenience variable $_
+PASS: gdb.base/gdbvars.exp: Print contents of convenience variable $_
+PASS: gdb.base/gdbvars.exp: Use convenience variable in arithmetic expression
+PASS: gdb.base/gdbvars.exp: Use convenience variable assignment in arithmetic expression
+PASS: gdb.base/gdbvars.exp: Print contents of uninitialized convenience variable
+PASS: gdb.base/gdbvars.exp: Set a new convenience variable to a program variable
+PASS: gdb.base/gdbvars.exp: Print contents of new convenience variable of program variable
+Running ./gdb.base/gnu-debugdata.exp ...
+PASS: gdb.base/gnu-debugdata.exp: nm -D - invoke armv7a-cros-linux-gnueabi-nm
+PASS: gdb.base/gnu-debugdata.exp: nm -D - invoke awk
+PASS: gdb.base/gnu-debugdata.exp: nm -D - invoke sort
+PASS: gdb.base/gnu-debugdata.exp: nm - invoke armv7a-cros-linux-gnueabi-nm
+PASS: gdb.base/gnu-debugdata.exp: nm - invoke awk
+PASS: gdb.base/gnu-debugdata.exp: nm - invoke sort
+PASS: gdb.base/gnu-debugdata.exp: comm
+PASS: gdb.base/gnu-debugdata.exp: objcopy 1
+PASS: gdb.base/gnu-debugdata.exp: strip
+PASS: gdb.base/gnu-debugdata.exp: copydebug
+PASS: gdb.base/gnu-debugdata.exp: addlink
+PASS: gdb.base/gnu-debugdata.exp: xz
+PASS: gdb.base/gnu-debugdata.exp: objcopy 2
+PASS: gdb.base/gnu-debugdata.exp: no symtab
+PASS: gdb.base/gnu-debugdata.exp: have symtab
+PASS: gdb.base/gnu-debugdata.exp: unload MiniDebugInfo
+Running ./gdb.base/gnu-ifunc.exp ...
+gdb compile failed, /tmp/cctHw26J.s: Assembler messages:
+/tmp/cctHw26J.s:42: Error: unrecognized symbol type ""
+UNTESTED: gdb.base/gnu-ifunc.exp: Could not compile dynamic executable /var/tmp/portage/cross-armv7a-cros-linux-gnueabi/gdb-7.6.1/work/gdb-7.6.1/gdb/testsuite/gdb.base/gnu-ifunc.
+Running ./gdb.base/gnu_vector.exp ...
+PASS: gdb.base/gnu_vector.exp: print c4
+PASS: gdb.base/gnu_vector.exp: print c4[2]
+PASS: gdb.base/gnu_vector.exp: print i4a
+PASS: gdb.base/gnu_vector.exp: print i4b
+PASS: gdb.base/gnu_vector.exp: print i4a + i4b
+PASS: gdb.base/gnu_vector.exp: print i4a - i4b
+PASS: gdb.base/gnu_vector.exp: print i4a * i4b
+PASS: gdb.base/gnu_vector.exp: print i4a / i4b
+PASS: gdb.base/gnu_vector.exp: print i4a % i4b
+PASS: gdb.base/gnu_vector.exp: print i4a++
+PASS: gdb.base/gnu_vector.exp: print ++i4a
+PASS: gdb.base/gnu_vector.exp: print i4a--
+PASS: gdb.base/gnu_vector.exp: print --i4a
+PASS: gdb.base/gnu_vector.exp: print +i4a
+PASS: gdb.base/gnu_vector.exp: print -i4a
+PASS: gdb.base/gnu_vector.exp: print i4a & i4b
+PASS: gdb.base/gnu_vector.exp: print i4a | i4b
+PASS: gdb.base/gnu_vector.exp: print i4a ^ i4b
+PASS: gdb.base/gnu_vector.exp: print ~i4a
+PASS: gdb.base/gnu_vector.exp: print i4a << i4b
+PASS: gdb.base/gnu_vector.exp: print i4a >> i4b
+PASS: gdb.base/gnu_vector.exp: print f4a
+PASS: gdb.base/gnu_vector.exp: print f4b
+PASS: gdb.base/gnu_vector.exp: print f4a + f4b
+PASS: gdb.base/gnu_vector.exp: print f4a - f4b
+PASS: gdb.base/gnu_vector.exp: print f4a * f4b
+PASS: gdb.base/gnu_vector.exp: print f4a / f4b
+PASS: gdb.base/gnu_vector.exp: print +f4a
+PASS: gdb.base/gnu_vector.exp: print -f4a
+PASS: gdb.base/gnu_vector.exp: print (char4) 0x01010101
+PASS: gdb.base/gnu_vector.exp: print (char4) ia
+PASS: gdb.base/gnu_vector.exp: print (int2) lla
+PASS: gdb.base/gnu_vector.exp: print (int2) 1
+PASS: gdb.base/gnu_vector.exp: print (longlong2) 2
+PASS: gdb.base/gnu_vector.exp: print (float2) 3
+PASS: gdb.base/gnu_vector.exp: print (double2) 4
+PASS: gdb.base/gnu_vector.exp: print (uint4) ia
+PASS: gdb.base/gnu_vector.exp: print (int4) -3
+PASS: gdb.base/gnu_vector.exp: print (float4) 4
+PASS: gdb.base/gnu_vector.exp: print i4b = ia
+PASS: gdb.base/gnu_vector.exp: print i4a = 3
+PASS: gdb.base/gnu_vector.exp: print f4a = fb
+PASS: gdb.base/gnu_vector.exp: print f4b = 2
+PASS: gdb.base/gnu_vector.exp: print c4 + lla
+PASS: gdb.base/gnu_vector.exp: print i4a + lla
+PASS: gdb.base/gnu_vector.exp: print lla + c4
+PASS: gdb.base/gnu_vector.exp: print lla + i4a
+PASS: gdb.base/gnu_vector.exp: print c4 + ib
+PASS: gdb.base/gnu_vector.exp: print i4a + ib
+PASS: gdb.base/gnu_vector.exp: print i4a + 1
+PASS: gdb.base/gnu_vector.exp: print 1 + i4a
+PASS: gdb.base/gnu_vector.exp: print fa - f4b
+PASS: gdb.base/gnu_vector.exp: print 2 - f4b
+PASS: gdb.base/gnu_vector.exp: print f4a * fb
+PASS: gdb.base/gnu_vector.exp: print f4a * 1
+PASS: gdb.base/gnu_vector.exp: print ia / i4b
+PASS: gdb.base/gnu_vector.exp: print 2 / i4b
+PASS: gdb.base/gnu_vector.exp: print i4a % ib
+PASS: gdb.base/gnu_vector.exp: print i4a % 1
+PASS: gdb.base/gnu_vector.exp: print ia & i4b
+PASS: gdb.base/gnu_vector.exp: print 2 & i4b
+PASS: gdb.base/gnu_vector.exp: print i4a | ib
+PASS: gdb.base/gnu_vector.exp: print i4a | 1
+PASS: gdb.base/gnu_vector.exp: print ia ^ i4b
+PASS: gdb.base/gnu_vector.exp: print 2 ^ i4b
+PASS: gdb.base/gnu_vector.exp: print i4a << ib
+PASS: gdb.base/gnu_vector.exp: print i4a << 1
+PASS: gdb.base/gnu_vector.exp: print i4a >> ib
+PASS: gdb.base/gnu_vector.exp: print i4a >> 1
+PASS: gdb.base/gnu_vector.exp: print i4a = {2, 4, 8, 16}
+PASS: gdb.base/gnu_vector.exp: print i4a <<= ib
+PASS: gdb.base/gnu_vector.exp: print i4a + d2
+PASS: gdb.base/gnu_vector.exp: print d2 + i4a
+PASS: gdb.base/gnu_vector.exp: print f4a + ll2
+PASS: gdb.base/gnu_vector.exp: print ll2 + f4a
+PASS: gdb.base/gnu_vector.exp: print i2 + ll2
+PASS: gdb.base/gnu_vector.exp: print ll2 + i2
+PASS: gdb.base/gnu_vector.exp: print i4a + ll2
+PASS: gdb.base/gnu_vector.exp: print ll2 + i4a
+PASS: gdb.base/gnu_vector.exp: print f4a + d2
+PASS: gdb.base/gnu_vector.exp: print d2 + f4a
+PASS: gdb.base/gnu_vector.exp: print ui4 + i4a
+PASS: gdb.base/gnu_vector.exp: print i4a + ui4
+PASS: gdb.base/gnu_vector.exp: print i4a + i2
+PASS: gdb.base/gnu_vector.exp: print i2 + i4a
+PASS: gdb.base/gnu_vector.exp: print f4a + f2
+PASS: gdb.base/gnu_vector.exp: print f2 + f4a
+PASS: gdb.base/gnu_vector.exp: print (double2) f2
+PASS: gdb.base/gnu_vector.exp: print (int4) c4
+PASS: gdb.base/gnu_vector.exp: print (char4) i4a
+PASS: gdb.base/gnu_vector.exp: ptype c4
+PASS: gdb.base/gnu_vector.exp: ptype char4
+PASS: gdb.base/gnu_vector.exp: ptype i4a
+PASS: gdb.base/gnu_vector.exp: ptype int4
+PASS: gdb.base/gnu_vector.exp: ptype f4b
+PASS: gdb.base/gnu_vector.exp: ptype float4
+PASS: gdb.base/gnu_vector.exp: ptype union_with_vector_1
+PASS: gdb.base/gnu_vector.exp: ptype struct_with_vector_1
+Running ./gdb.base/hashline1.exp ...
+PASS: gdb.base/hashline1.exp: set breakpoint
+Running ./gdb.base/hashline2.exp ...
+PASS: gdb.base/hashline2.exp: set breakpoint
+Running ./gdb.base/hashline3.exp ...
+PASS: gdb.base/hashline3.exp: set breakpoint
+Running ./gdb.base/hbreak2.exp ...
+PASS: gdb.base/hbreak2.exp: hardware breakpoint support
+FAIL: gdb.base/hbreak2.exp: hardware breakpoint insertion
+PASS: gdb.base/hbreak2.exp: hardware breakpoint function
+PASS: gdb.base/hbreak2.exp: hardware breakpoint quoted function
+PASS: gdb.base/hbreak2.exp: hardware breakpoint function in file
+PASS: gdb.base/hbreak2.exp: use `list' to establish default source file
+PASS: gdb.base/hbreak2.exp: hardware breakpoint line number
+PASS: gdb.base/hbreak2.exp: hardware breakpoint line number in file
+PASS: gdb.base/hbreak2.exp: hardware breakpoint at start of multi line if conditional
+PASS: gdb.base/hbreak2.exp: hardware breakpoint at start of multi line while conditional
+PASS: gdb.base/hbreak2.exp: hardware breakpoint info
+PASS: gdb.base/hbreak2.exp: hardware breakpoint function (2)
+FAIL: gdb.base/hbreak2.exp: run until function breakpoint
+PASS: gdb.base/hbreak2.exp: hardware breakpoint line number (2)
+PASS: gdb.base/hbreak2.exp: run until breakpoint set at a line number
+PASS: gdb.base/hbreak2.exp: hardware breakpoint function in file (2)
+PASS: gdb.base/hbreak2.exp: run until file:function(6) breakpoint
+PASS: gdb.base/hbreak2.exp: run until file:function(5) breakpoint
+PASS: gdb.base/hbreak2.exp: run until file:function(4) breakpoint
+PASS: gdb.base/hbreak2.exp: run until file:function(3) breakpoint
+PASS: gdb.base/hbreak2.exp: run until file:function(2) breakpoint
+PASS: gdb.base/hbreak2.exp: run until file:function(1) breakpoint
+PASS: gdb.base/hbreak2.exp: hardware breakpoint quoted function (2)
+PASS: gdb.base/hbreak2.exp: run until quoted breakpoint
+PASS: gdb.base/hbreak2.exp: hardware breakpoint line number in file (2)
+PASS: gdb.base/hbreak2.exp: run until file:linenum breakpoint
+PASS: gdb.base/hbreak2.exp: hardware breakpoint offset +1
+PASS: gdb.base/hbreak2.exp: step onto hardware breakpoint
+PASS: gdb.base/hbreak2.exp: setting hardware breakpoint at }
+PASS: gdb.base/hbreak2.exp: continue to hardware breakpoint at }
+PASS: gdb.base/hbreak2.exp: temporary hardware breakpoint function
+PASS: gdb.base/hbreak2.exp: temporary hardware breakpoint function in file
+PASS: gdb.base/hbreak2.exp: temporary hardware breakpoint line number #1
+PASS: gdb.base/hbreak2.exp: temporary hardware breakpoint line number #2
+PASS: gdb.base/hbreak2.exp: temporary hardware breakpoint line number in file #1
+PASS: gdb.base/hbreak2.exp: temporary hardware breakpoint line number in file #2
+PASS: gdb.base/hbreak2.exp: temporary hardware breakpoint info
+PASS: gdb.base/hbreak2.exp: set breakpoint pending off
+PASS: gdb.base/hbreak2.exp: hardware break on non-existent source line
+PASS: gdb.base/hbreak2.exp: until bp_location1
+PASS: gdb.base/hbreak2.exp: hardware break on default location
+PASS: gdb.base/hbreak2.exp: set to-be-silent hardware break bp_location1
+PASS: gdb.base/hbreak2.exp: set silent break bp_location1
+PASS: gdb.base/hbreak2.exp: info silent hardware break bp_location1
+PASS: gdb.base/hbreak2.exp: hit silent hardware break bp_location1
+PASS: gdb.base/hbreak2.exp: stopped for silent hardware break bp_location1
+PASS: gdb.base/hbreak2.exp: thread-specific hardware breakpoint on non-existent thread disallowed
+PASS: gdb.base/hbreak2.exp: thread-specific hardware breakpoint on bogus thread ID disallowed
+PASS: gdb.base/hbreak2.exp: hardware breakpoint with trailing garbage disallowed
+PASS: gdb.base/hbreak2.exp: step over hardware breakpoint
+PASS: gdb.base/hbreak2.exp: clear line has no breakpoint disallowed
+PASS: gdb.base/hbreak2.exp: clear current line has no breakpoint disallowed
+PASS: gdb.base/hbreak2.exp: set convenience variable $foo to bp_location11
+PASS: gdb.base/hbreak2.exp: set hardware breakpoint via convenience variable
+PASS: gdb.base/hbreak2.exp: set convenience variable $foo to 81.5
+PASS: gdb.base/hbreak2.exp: set hardware breakpoint via non-integer convenience variable disallowed
+PASS: gdb.base/hbreak2.exp: set hardware breakpoint on to-be-called function
+PASS: gdb.base/hbreak2.exp: hit hardware breakpoint on called function
+PASS: gdb.base/hbreak2.exp: backtrace while in called function
+PASS: gdb.base/hbreak2.exp: finish from called function
+PASS: gdb.base/hbreak2.exp: hardware break at factorial
+PASS: gdb.base/hbreak2.exp: kill program
+PASS: gdb.base/hbreak2.exp: run to factorial(6)
+PASS: gdb.base/hbreak2.exp: continue to factorial(5)
+PASS: gdb.base/hbreak2.exp: backtrace from factorial(5)
+PASS: gdb.base/hbreak2.exp: next to recursive call
+PASS: gdb.base/hbreak2.exp: next over recursive call
+PASS: gdb.base/hbreak2.exp: backtrace from factorial(5.1)
+FAIL: gdb.base/hbreak2.exp: setting breakpoint at exit
+PASS: gdb.base/hbreak2.exp: hardware breakpoint function, optimized file
+PASS: gdb.base/hbreak2.exp: run until hardware function breakpoint, optimized file (code motion)
+PASS: gdb.base/hbreak2.exp: hardware breakpoint small function, optimized file
+PASS: gdb.base/hbreak2.exp: run until hardware breakpoint set at small function, optimized file
+Running ./gdb.base/hbreak.exp ...
+Running ./gdb.base/help.exp ...
+PASS: gdb.base/help.exp: disable pagination
+PASS: gdb.base/help.exp: help aliases
+PASS: gdb.base/help.exp: help breakpoints
+PASS: gdb.base/help.exp: help data
+PASS: gdb.base/help.exp: help files
+PASS: gdb.base/help.exp: help internals
+PASS: gdb.base/help.exp: help obscure
+PASS: gdb.base/help.exp: help running
+PASS: gdb.base/help.exp: help stack
+PASS: gdb.base/help.exp: help status
+PASS: gdb.base/help.exp: help support
+PASS: gdb.base/help.exp: help tracepoints
+PASS: gdb.base/help.exp: help user-defined
+PASS: gdb.base/help.exp: help breakpoint "b" abbreviation
+PASS: gdb.base/help.exp: help breakpoint "br" abbreviation
+PASS: gdb.base/help.exp: help breakpoint "bre" abbreviation
+PASS: gdb.base/help.exp: help breakpoint "brea" abbreviation
+PASS: gdb.base/help.exp: help breakpoint "break" abbreviation
+PASS: gdb.base/help.exp: help backtrace "bt" abbreviation
+PASS: gdb.base/help.exp: help backtrace
+PASS: gdb.base/help.exp: help commands
+PASS: gdb.base/help.exp: help delete "d" abbreviation
+PASS: gdb.base/help.exp: help delete
+PASS: gdb.base/help.exp: help help "h" abbreviation
+PASS: gdb.base/help.exp: help help
+PASS: gdb.base/help.exp: help show copying
+PASS: gdb.base/help.exp: help show warranty
+PASS: gdb.base/help.exp: help show commands
+PASS: gdb.base/help.exp: help show confirm
+PASS: gdb.base/help.exp: help info bogus-gdb-command
+PASS: gdb.base/help.exp: help gotcha
+PASS: gdb.base/help.exp: apropos \(print[^ bsiedf\".-]\)
+PASS: gdb.base/help.exp: apropos handle signal
+PASS: gdb.base/help.exp: apropos apropos
+Running ./gdb.base/hook-stop-continue.exp ...
+PASS: gdb.base/hook-stop-continue.exp: breakpoint line number
+PASS: gdb.base/hook-stop-continue.exp: print $do_continue = 1
+PASS: gdb.base/hook-stop-continue.exp: define hook-stop command
+PASS: gdb.base/hook-stop-continue.exp: next triggering hook-stop
+PASS: gdb.base/hook-stop-continue.exp: next no hook-stop
+Running ./gdb.base/hook-stop-frame.exp ...
+PASS: gdb.base/hook-stop-frame.exp: breakpoint line number
+PASS: gdb.base/hook-stop-frame.exp: define hook-stop command
+PASS: gdb.base/hook-stop-frame.exp: hook-stop runs before frame print
+Running ./gdb.base/huge.exp ...
+PASS: gdb.base/huge.exp: print a very large data object
+Running ./gdb.base/ifelse.exp ...
+PASS: gdb.base/ifelse.exp: if 1 with empty body
+PASS: gdb.base/ifelse.exp: if 0 with empty body
+PASS: gdb.base/ifelse.exp: if true else false #1
+PASS: gdb.base/ifelse.exp: if 1 .. else with empty body
+PASS: gdb.base/ifelse.exp: if true else false #2
+PASS: gdb.base/ifelse.exp: if 0 .. else with empty body
+PASS: gdb.base/ifelse.exp: if true else false #3
+PASS: gdb.base/ifelse.exp: create define with empty else
+PASS: gdb.base/ifelse.exp: call original define
+PASS: gdb.base/ifelse.exp: replace define with if .. else with empty body
+PASS: gdb.base/ifelse.exp: call replacement define
+Running ./gdb.base/included.exp ...
+PASS: gdb.base/included.exp: set listsize 1
+PASS: gdb.base/included.exp: list main
+PASS: gdb.base/included.exp: list integer
+PASS: gdb.base/included.exp: ptype integer
+PASS: gdb.base/included.exp: info variables integer
+Running ./gdb.base/inferior-died.exp ...
+UNSUPPORTED: gdb.base/inferior-died.exp: inferior-died.exp
+Running ./gdb.base/infnan.exp ...
+PASS: gdb.base/infnan.exp: print a
+PASS: gdb.base/infnan.exp: print b
+Running ./gdb.base/info-fun.exp ...
+Running ./gdb.base/infoline.exp ...
+PASS: gdb.base/infoline.exp: info line infoline.c:18
+Running ./gdb.base/info-macros.exp ...
+FAIL: gdb.base/info-macros.exp: info macro -- -all
+FAIL: gdb.base/info-macros.exp: info macro -- -all
+PASS: gdb.base/info-macros.exp: info macro -all --
+PASS: gdb.base/info-macros.exp: info macro -all --
+PASS: gdb.base/info-macros.exp: info macro -all --
+PASS: gdb.base/info-macros.exp: info macro --
+PASS: gdb.base/info-macros.exp: 'info macro -- '
+PASS: gdb.base/info-macros.exp: 'info macro -- '
+PASS: gdb.base/info-macros.exp: info macro -invalid-option 1
+PASS: gdb.base/info-macros.exp: info macro -invalid-option
+PASS: gdb.base/info-macros.exp: info macro -invalid-option FOO
+PASS: gdb.base/info-macros.exp: info macro -invalid-option FOO
+FAIL: gdb.base/info-macros.exp: info macro -- FOO
+FAIL: gdb.base/info-macros.exp: info macro -- FOO
+FAIL: gdb.base/info-macros.exp: info macro -- FOO
+FAIL: gdb.base/info-macros.exp: info macro FOO
+FAIL: gdb.base/info-macros.exp: info macro FOO
+FAIL: gdb.base/info-macros.exp: info macro -a FOO 1
+FAIL: gdb.base/info-macros.exp: info macro -a -- FOO 1
+FAIL: gdb.base/info-macros.exp: info macro -all -- FOO 1
+FAIL: gdb.base/info-macros.exp: info macro -a -- FOO
+FAIL: gdb.base/info-macros.exp: info macro -a -- FOO
+FAIL: gdb.base/info-macros.exp: info macros 2
+FAIL: gdb.base/info-macros.exp: info macros 3
+FAIL: gdb.base/info-macros.exp: info macros 4
+FAIL: gdb.base/info-macros.exp: info macros *$pc
+FAIL: gdb.base/info-macros.exp: info macros
+FAIL: gdb.base/info-macros.exp: info macros 6
+FAIL: gdb.base/info-macros.exp: info macros 7
+KFAIL: gdb.base/info-macros.exp: info macros info-macros.c:42 (PRMS: gdb/NNNN)
+Running ./gdb.base/info-os.exp ...
+PASS: gdb.base/info-os.exp: get inferior process ID
+PASS: gdb.base/info-os.exp: continue to breakpoint: Set breakpoint here
+PASS: gdb.base/info-os.exp: get shared memory key
+PASS: gdb.base/info-os.exp: get shared memory ID
+PASS: gdb.base/info-os.exp: get semaphore key
+PASS: gdb.base/info-os.exp: get semaphore ID
+PASS: gdb.base/info-os.exp: get message queue key
+PASS: gdb.base/info-os.exp: get message queue ID
+PASS: gdb.base/info-os.exp: get socket port number
+PASS: gdb.base/info-os.exp: get process list
+PASS: gdb.base/info-os.exp: get process groups
+PASS: gdb.base/info-os.exp: get threads
+PASS: gdb.base/info-os.exp: get threads
+PASS: gdb.base/info-os.exp: get file descriptors
+PASS: gdb.base/info-os.exp: get internet-domain sockets
+PASS: gdb.base/info-os.exp: get shared-memory regions
+PASS: gdb.base/info-os.exp: get semaphores
+PASS: gdb.base/info-os.exp: get message queues
+PASS: gdb.base/info-os.exp: continue
+Running ./gdb.base/info-proc.exp ...
+PASS: gdb.base/info-proc.exp: help info proc
+PASS: gdb.base/info-proc.exp: info proc without a process
+PASS: gdb.base/info-proc.exp: info proc with process
+PASS: gdb.base/info-proc.exp: info proc mapping
+PASS: gdb.base/info-proc.exp: save a core file
+PASS: gdb.base/info-proc.exp: core break.gcore
+PASS: gdb.base/info-proc.exp: info proc mapping with core file
+Running ./gdb.base/info-target.exp ...
+PASS: gdb.base/info-target.exp: info target
+Running ./gdb.base/interact.exp ...
+PASS: gdb.base/interact.exp: set interactive-mode auto
+PASS: gdb.base/interact.exp: source script with interactive-mode auto
+PASS: gdb.base/interact.exp: sanity check with interactive-mode auto
+PASS: gdb.base/interact.exp: show interactive-mode (auto)
+PASS: gdb.base/interact.exp: set interactive-mode on
+PASS: gdb.base/interact.exp: source script with interactive-mode on
+PASS: gdb.base/interact.exp: sanity check with interactive-mode on
+PASS: gdb.base/interact.exp: show interactive-mode (on)
+PASS: gdb.base/interact.exp: set interactive-mode off
+PASS: gdb.base/interact.exp: source script with interactive-mode off
+PASS: gdb.base/interact.exp: sanity check with interactive-mode off
+PASS: gdb.base/interact.exp: show interactive-mode (off)
+Running ./gdb.base/interp.exp ...
+PASS: gdb.base/interp.exp: interpreter-exec mi "-var-update *"
+PASS: gdb.base/interp.exp: interpreter-exec console "show version"
+PASS: gdb.base/interp.exp: interpreter-exec mi "-var-update *"
+PASS: gdb.base/interp.exp: interpreter-exec mi "-stack-info-frame"
+PASS: gdb.base/interp.exp: interpreter-exec mi1 "-break-insert main"
+PASS: gdb.base/interp.exp: interpreter-exec mi2 "-break-insert main"
+PASS: gdb.base/interp.exp: interpreter-exec mi3 "-break-insert main"
+PASS: gdb.base/interp.exp: can list sources
+Running ./gdb.base/interrupt.exp ...
+Running ./gdb.base/jit.exp ...
+PASS: gdb.base/jit.exp: one_jit_test-1: continue to breakpoint: break here 0
+PASS: gdb.base/jit.exp: one_jit_test-1: set var argc = 2
+FAIL: gdb.base/jit.exp: one_jit_test-1: set var libname = "SHLIBDIR/jit-solib.so"
+FAIL: gdb.base/jit.exp: one_jit_test-1: set var count = 1
+FAIL: gdb.base/jit.exp: one_jit_test-1: continue to breakpoint: break here 1
+FAIL: gdb.base/jit.exp: one_jit_test-1: info function jit_function
+FAIL: gdb.base/jit.exp: one_jit_test-1: continue to breakpoint: break here 2
+PASS: gdb.base/jit.exp: one_jit_test-1: info function jit_function
+PASS: gdb.base/jit.exp: one_jit_test-2: continue to breakpoint: break here 0
+PASS: gdb.base/jit.exp: one_jit_test-2: set var argc = 2
+FAIL: gdb.base/jit.exp: one_jit_test-2: set var libname = "SHLIBDIR/jit-solib.so"
+FAIL: gdb.base/jit.exp: one_jit_test-2: set var count = 2
+FAIL: gdb.base/jit.exp: one_jit_test-2: continue to breakpoint: break here 1
+FAIL: gdb.base/jit.exp: one_jit_test-2: info function jit_function
+FAIL: gdb.base/jit.exp: one_jit_test-2: continue to breakpoint: break here 2
+PASS: gdb.base/jit.exp: one_jit_test-2: info function jit_function
+PASS: gdb.base/jit.exp: PIE: one_jit_test-1: continue to breakpoint: break here 0
+PASS: gdb.base/jit.exp: PIE: one_jit_test-1: set var argc = 2
+FAIL: gdb.base/jit.exp: PIE: one_jit_test-1: set var libname = "SHLIBDIR/jit-solib.so"
+FAIL: gdb.base/jit.exp: PIE: one_jit_test-1: set var count = 1
+FAIL: gdb.base/jit.exp: PIE: one_jit_test-1: continue to breakpoint: break here 1
+FAIL: gdb.base/jit.exp: PIE: one_jit_test-1: info function jit_function
+FAIL: gdb.base/jit.exp: PIE: one_jit_test-1: continue to breakpoint: break here 2
+PASS: gdb.base/jit.exp: PIE: one_jit_test-1: info function jit_function
+Running ./gdb.base/jit-simple.exp ...
+PASS: gdb.base/jit-simple.exp: blah 1
+PASS: gdb.base/jit-simple.exp: recompile jit-simple.c
+PASS: gdb.base/jit-simple.exp: blah 1
+Running ./gdb.base/jit-so.exp ...
+PASS: gdb.base/jit-so.exp: one_jit_test-1: continue to breakpoint: break here before-dlopen
+FAIL: gdb.base/jit-so.exp: one_jit_test-1: set var jit_libname = "jit-main.so"
+FAIL: gdb.base/jit-so.exp: one_jit_test-1: continue to breakpoint: break here after-dlopen
+FAIL: gdb.base/jit-so.exp: one_jit_test-1: setting breakpoint at jit-main.c:131
+FAIL: gdb.base/jit-so.exp: one_jit_test-1: continue to breakpoint: break here 0
+FAIL: gdb.base/jit-so.exp: one_jit_test-1: set var argc = 2
+FAIL: gdb.base/jit-so.exp: one_jit_test-1: set var libname = "SHLIBDIR/jit-solib.so"
+FAIL: gdb.base/jit-so.exp: one_jit_test-1: set var count = 1
+FAIL: gdb.base/jit-so.exp: one_jit_test-1: setting breakpoint at jit-main.c:194
+FAIL: gdb.base/jit-so.exp: one_jit_test-1: continue to breakpoint: break here 1
+FAIL: gdb.base/jit-so.exp: one_jit_test-1: info function jit_function
+FAIL: gdb.base/jit-so.exp: one_jit_test-1: setting breakpoint at jit-main.c:219
+FAIL: gdb.base/jit-so.exp: one_jit_test-1: continue to breakpoint: break here 2
+PASS: gdb.base/jit-so.exp: one_jit_test-1: info function jit_function
+PASS: gdb.base/jit-so.exp: one_jit_test-2: continue to breakpoint: break here before-dlopen
+FAIL: gdb.base/jit-so.exp: one_jit_test-2: set var jit_libname = "jit-main.so"
+FAIL: gdb.base/jit-so.exp: one_jit_test-2: continue to breakpoint: break here after-dlopen
+FAIL: gdb.base/jit-so.exp: one_jit_test-2: setting breakpoint at jit-main.c:131
+FAIL: gdb.base/jit-so.exp: one_jit_test-2: continue to breakpoint: break here 0
+FAIL: gdb.base/jit-so.exp: one_jit_test-2: set var argc = 2
+FAIL: gdb.base/jit-so.exp: one_jit_test-2: set var libname = "SHLIBDIR/jit-solib.so"
+FAIL: gdb.base/jit-so.exp: one_jit_test-2: set var count = 2
+FAIL: gdb.base/jit-so.exp: one_jit_test-2: setting breakpoint at jit-main.c:194
+FAIL: gdb.base/jit-so.exp: one_jit_test-2: continue to breakpoint: break here 1
+FAIL: gdb.base/jit-so.exp: one_jit_test-2: info function jit_function
+FAIL: gdb.base/jit-so.exp: one_jit_test-2: setting breakpoint at jit-main.c:219
+FAIL: gdb.base/jit-so.exp: one_jit_test-2: continue to breakpoint: break here 2
+PASS: gdb.base/jit-so.exp: one_jit_test-2: info function jit_function
+Running ./gdb.base/jump.exp ...
+PASS: gdb.base/jump.exp: break before jump to non-call
+PASS: gdb.base/jump.exp: jump to non-call
+PASS: gdb.base/jump.exp: break before jump to call
+PASS: gdb.base/jump.exp: jump to call
+PASS: gdb.base/jump.exp: disable breakpoint on call
+PASS: gdb.base/jump.exp: jump to call with disabled breakpoint
+PASS: gdb.base/jump.exp: jump without argument disallowed
+PASS: gdb.base/jump.exp: jump with trailing argument junk
+PASS: gdb.base/jump.exp: aborted jump out of current function
+PASS: gdb.base/jump.exp: jump out of current function
+Running ./gdb.base/kill-after-signal.exp ...
+UNTESTED: gdb.base/kill-after-signal.exp: kill-after-signal.exp
+Running ./gdb.base/label.exp ...
+Running ./gdb.base/langs.exp ...
+PASS: gdb.base/langs.exp: break on nonexistent function in langs.exp
+PASS: gdb.base/langs.exp: show language at csub in langs.exp
+PASS: gdb.base/langs.exp: backtrace in langs.exp
+PASS: gdb.base/langs.exp: up to foo in langs.exp
+PASS: gdb.base/langs.exp: show language at foo in langs.exp
+PASS: gdb.base/langs.exp: up to cppsub_ in langs.exp
+PASS: gdb.base/langs.exp: show language at cppsub_ in langs.exp
+PASS: gdb.base/langs.exp: up to fsub in langs.exp
+PASS: gdb.base/langs.exp: show language at fsub in langs.exp
+PASS: gdb.base/langs.exp: up to langs0__2do in langs.exp
+PASS: gdb.base/langs.exp: show language at langs0__2do in langs.exp
+PASS: gdb.base/langs.exp: up to main in langs.exp
+PASS: gdb.base/langs.exp: show language at main in langs.exp
+FAIL: gdb.base/langs.exp: setting breakpoint at exit
+PASS: gdb.base/langs.exp: set lang to minimal
+PASS: gdb.base/langs.exp: print parameter value
+Running ./gdb.base/ldbl_e308.exp ...
+PASS: gdb.base/ldbl_e308.exp: set variable ldbl_308 = 1.6e+308l
+PASS: gdb.base/ldbl_e308.exp: print ldbl_308
+Running ./gdb.base/lineinc.exp ...
+PASS: gdb.base/lineinc.exp: tolerate macro info with multiple #inclusions per line
+Running ./gdb.base/linespecs.exp ...
+PASS: gdb.base/linespecs.exp: list c:/foo/bar/baz.c:1
+PASS: gdb.base/linespecs.exp: list c:/foo/bar/baz.c
+PASS: gdb.base/linespecs.exp: list fooc:/foo/bar/baz.c:1
+PASS: gdb.base/linespecs.exp: list fooc:/foo/bar/baz.c
+Running ./gdb.base/list.exp ...
+PASS: gdb.base/list.exp: set width 0
+PASS: gdb.base/list.exp: show default list size
+PASS: gdb.base/list.exp: list default lines around main
+PASS: gdb.base/list.exp: setting listsize to 1 #1
+PASS: gdb.base/list.exp: show listsize 1 #1
+PASS: gdb.base/list.exp: list line 1 with listsize 1
+PASS: gdb.base/list.exp: list line 2 with listsize 1
+PASS: gdb.base/list.exp: setting listsize to 2 #2
+PASS: gdb.base/list.exp: show listsize 2 #2
+PASS: gdb.base/list.exp: list line 1 with listsize 2
+PASS: gdb.base/list.exp: list line 2 with listsize 2
+PASS: gdb.base/list.exp: list line 3 with listsize 2
+PASS: gdb.base/list.exp: setting listsize to 3 #3
+PASS: gdb.base/list.exp: show listsize 3 #3
+PASS: gdb.base/list.exp: list line 1 with listsize 3
+PASS: gdb.base/list.exp: list line 2 with listsize 3
+PASS: gdb.base/list.exp: list line 3 with listsize 3
+PASS: gdb.base/list.exp: setting listsize to 4 #4
+PASS: gdb.base/list.exp: show listsize 4 #4
+PASS: gdb.base/list.exp: list line 1 with listsize 4
+PASS: gdb.base/list.exp: list line 2 with listsize 4
+PASS: gdb.base/list.exp: list line 3 with listsize 4
+PASS: gdb.base/list.exp: list line 4 with listsize 4
+PASS: gdb.base/list.exp: setting listsize to 100 #5
+PASS: gdb.base/list.exp: show listsize 100 #5
+PASS: gdb.base/list.exp: list line 1 with listsize 100
+PASS: gdb.base/list.exp: list line 10 with listsize 100
+PASS: gdb.base/list.exp: setting listsize to 0 #6
+PASS: gdb.base/list.exp: show listsize unlimited #6
+PASS: gdb.base/list.exp: list line 1 with unlimited listsize
+PASS: gdb.base/list.exp: setting listsize to 10 #7
+PASS: gdb.base/list.exp: show listsize 10 #7
+PASS: gdb.base/list.exp: list line 1 in include file
+PASS: gdb.base/list.exp: list message for lines past EOF
+PASS: gdb.base/list.exp: list filename:number (4 tests)
+PASS: gdb.base/list.exp: list function in source file 1
+PASS: gdb.base/list.exp: list function in source file 2
+PASS: gdb.base/list.exp: list function in include file
+PASS: gdb.base/list.exp: successive list commands to page forward (4 tests)
+PASS: gdb.base/list.exp: 4 successive "list -" commands to page backwards
+PASS: gdb.base/list.exp: repeat list commands to page forward using 'return' (4 tests)
+PASS: gdb.base/list.exp: list range; filename:line1,filename:line2
+PASS: gdb.base/list.exp: list range; line1,line2
+PASS: gdb.base/list.exp: list range; upper bound past EOF
+PASS: gdb.base/list.exp: list range; both bounds past EOF
+PASS: gdb.base/list.exp: list range, must be same files
+PASS: gdb.base/list.exp: list filename:function (5 tests)
+PASS: gdb.base/list.exp: list 'list0.c:main'
+XFAIL: gdb.base/list.exp: list filename:function; wrong filename rejected
+PASS: gdb.base/list.exp: list filename:function; nonexistant file
+PASS: gdb.base/list.exp: list filename:function; nonexistant function
+PASS: gdb.base/list.exp: set listsize 4
+PASS: gdb.base/list.exp: list long_line
+PASS: gdb.base/list.exp: search 4321
+PASS: gdb.base/list.exp: search 6789
+PASS: gdb.base/list.exp: search extremely long line (> 5000 chars)
+PASS: gdb.base/list.exp: set listsize 2
+PASS: gdb.base/list.exp: list 1
+PASS: gdb.base/list.exp: list ,5
+Running ./gdb.base/logical.exp ...
+PASS: gdb.base/logical.exp: evaluate x; variables x = 0; expecting 0
+PASS: gdb.base/logical.exp: evaluate !x; variables x = 0; expecting 1
+PASS: gdb.base/logical.exp: evaluate !!x; variables x = 0; expecting 0
+PASS: gdb.base/logical.exp: evaluate x; variables x = 1; expecting 1
+PASS: gdb.base/logical.exp: evaluate !x; variables x = 1; expecting 0
+PASS: gdb.base/logical.exp: evaluate !!x; variables x = 1; expecting 1
+PASS: gdb.base/logical.exp: evaluate x && y; variables x = 0, y = 0; expecting 0
+PASS: gdb.base/logical.exp: evaluate !x && y; variables x = 0, y = 0; expecting 0
+PASS: gdb.base/logical.exp: evaluate x && !y; variables x = 0, y = 0; expecting 0
+PASS: gdb.base/logical.exp: evaluate !x && !y; variables x = 0, y = 0; expecting 1
+PASS: gdb.base/logical.exp: evaluate x || y; variables x = 0, y = 0; expecting 0
+PASS: gdb.base/logical.exp: evaluate !x || y; variables x = 0, y = 0; expecting 1
+PASS: gdb.base/logical.exp: evaluate x || !y; variables x = 0, y = 0; expecting 1
+PASS: gdb.base/logical.exp: evaluate !x || !y; variables x = 0, y = 0; expecting 1
+PASS: gdb.base/logical.exp: evaluate x < y; variables x = 0, y = 0; expecting 0
+PASS: gdb.base/logical.exp: evaluate x <= y; variables x = 0, y = 0; expecting 1
+PASS: gdb.base/logical.exp: evaluate x == y; variables x = 0, y = 0; expecting 1
+PASS: gdb.base/logical.exp: evaluate x != y; variables x = 0, y = 0; expecting 0
+PASS: gdb.base/logical.exp: evaluate x >= y; variables x = 0, y = 0; expecting 1
+PASS: gdb.base/logical.exp: evaluate x > y; variables x = 0, y = 0; expecting 0
+PASS: gdb.base/logical.exp: evaluate x && y; variables x = 0, y = 1; expecting 0
+PASS: gdb.base/logical.exp: evaluate !x && y; variables x = 0, y = 1; expecting 1
+PASS: gdb.base/logical.exp: evaluate x && !y; variables x = 0, y = 1; expecting 0
+PASS: gdb.base/logical.exp: evaluate !x && !y; variables x = 0, y = 1; expecting 0
+PASS: gdb.base/logical.exp: evaluate x || y; variables x = 0, y = 1; expecting 1
+PASS: gdb.base/logical.exp: evaluate !x || y; variables x = 0, y = 1; expecting 1
+PASS: gdb.base/logical.exp: evaluate x || !y; variables x = 0, y = 1; expecting 0
+PASS: gdb.base/logical.exp: evaluate !x || !y; variables x = 0, y = 1; expecting 1
+PASS: gdb.base/logical.exp: evaluate x < y; variables x = 0, y = 1; expecting 1
+PASS: gdb.base/logical.exp: evaluate x <= y; variables x = 0, y = 1; expecting 1
+PASS: gdb.base/logical.exp: evaluate x == y; variables x = 0, y = 1; expecting 0
+PASS: gdb.base/logical.exp: evaluate x != y; variables x = 0, y = 1; expecting 1
+PASS: gdb.base/logical.exp: evaluate x >= y; variables x = 0, y = 1; expecting 0
+PASS: gdb.base/logical.exp: evaluate x > y; variables x = 0, y = 1; expecting 0
+PASS: gdb.base/logical.exp: evaluate x && y; variables x = 1, y = 0; expecting 0
+PASS: gdb.base/logical.exp: evaluate !x && y; variables x = 1, y = 0; expecting 0
+PASS: gdb.base/logical.exp: evaluate x && !y; variables x = 1, y = 0; expecting 1
+PASS: gdb.base/logical.exp: evaluate !x && !y; variables x = 1, y = 0; expecting 0
+PASS: gdb.base/logical.exp: evaluate x || y; variables x = 1, y = 0; expecting 1
+PASS: gdb.base/logical.exp: evaluate !x || y; variables x = 1, y = 0; expecting 0
+PASS: gdb.base/logical.exp: evaluate x || !y; variables x = 1, y = 0; expecting 1
+PASS: gdb.base/logical.exp: evaluate !x || !y; variables x = 1, y = 0; expecting 1
+PASS: gdb.base/logical.exp: evaluate x < y; variables x = 1, y = 0; expecting 0
+PASS: gdb.base/logical.exp: evaluate x <= y; variables x = 1, y = 0; expecting 0
+PASS: gdb.base/logical.exp: evaluate x == y; variables x = 1, y = 0; expecting 0
+PASS: gdb.base/logical.exp: evaluate x != y; variables x = 1, y = 0; expecting 1
+PASS: gdb.base/logical.exp: evaluate x >= y; variables x = 1, y = 0; expecting 1
+PASS: gdb.base/logical.exp: evaluate x > y; variables x = 1, y = 0; expecting 1
+PASS: gdb.base/logical.exp: evaluate x && y; variables x = 1, y = 1; expecting 1
+PASS: gdb.base/logical.exp: evaluate !x && y; variables x = 1, y = 1; expecting 0
+PASS: gdb.base/logical.exp: evaluate x && !y; variables x = 1, y = 1; expecting 0
+PASS: gdb.base/logical.exp: evaluate !x && !y; variables x = 1, y = 1; expecting 0
+PASS: gdb.base/logical.exp: evaluate x || y; variables x = 1, y = 1; expecting 1
+PASS: gdb.base/logical.exp: evaluate !x || y; variables x = 1, y = 1; expecting 1
+PASS: gdb.base/logical.exp: evaluate x || !y; variables x = 1, y = 1; expecting 1
+PASS: gdb.base/logical.exp: evaluate !x || !y; variables x = 1, y = 1; expecting 0
+PASS: gdb.base/logical.exp: evaluate x < y; variables x = 1, y = 1; expecting 0
+PASS: gdb.base/logical.exp: evaluate x <= y; variables x = 1, y = 1; expecting 1
+PASS: gdb.base/logical.exp: evaluate x == y; variables x = 1, y = 1; expecting 1
+PASS: gdb.base/logical.exp: evaluate x != y; variables x = 1, y = 1; expecting 0
+PASS: gdb.base/logical.exp: evaluate x >= y; variables x = 1, y = 1; expecting 1
+PASS: gdb.base/logical.exp: evaluate x > y; variables x = 1, y = 1; expecting 0
+PASS: gdb.base/logical.exp: evaluate x && y && z; variables x = 0, y = 0, z = 0; expecting 0
+PASS: gdb.base/logical.exp: evaluate x || y && z; variables x = 0, y = 0, z = 0; expecting 0
+PASS: gdb.base/logical.exp: evaluate x && y || z; variables x = 0, y = 0, z = 0; expecting 0
+PASS: gdb.base/logical.exp: evaluate x || y || z; variables x = 0, y = 0, z = 0; expecting 0
+PASS: gdb.base/logical.exp: evaluate x || !y && z; variables x = 0, y = 0, z = 0; expecting 0
+PASS: gdb.base/logical.exp: evaluate !x || y && z; variables x = 0, y = 0, z = 0; expecting 1
+PASS: gdb.base/logical.exp: evaluate !x || y && !z; variables x = 0, y = 0, z = 0; expecting 1
+PASS: gdb.base/logical.exp: evaluate x && y && z; variables x = 0, y = 0, z = 1; expecting 0
+PASS: gdb.base/logical.exp: evaluate x || y && z; variables x = 0, y = 0, z = 1; expecting 0
+PASS: gdb.base/logical.exp: evaluate x && y || z; variables x = 0, y = 0, z = 1; expecting 1
+PASS: gdb.base/logical.exp: evaluate x || y || z; variables x = 0, y = 0, z = 1; expecting 1
+PASS: gdb.base/logical.exp: evaluate x || !y && z; variables x = 0, y = 0, z = 1; expecting 1
+PASS: gdb.base/logical.exp: evaluate !x || y && z; variables x = 0, y = 0, z = 1; expecting 1
+PASS: gdb.base/logical.exp: evaluate !x || y && !z; variables x = 0, y = 0, z = 1; expecting 1
+PASS: gdb.base/logical.exp: evaluate x && y && z; variables x = 0, y = 1, z = 0; expecting 0
+PASS: gdb.base/logical.exp: evaluate x || y && z; variables x = 0, y = 1, z = 0; expecting 0
+PASS: gdb.base/logical.exp: evaluate x && y || z; variables x = 0, y = 1, z = 0; expecting 0
+PASS: gdb.base/logical.exp: evaluate x || y || z; variables x = 0, y = 1, z = 0; expecting 1
+PASS: gdb.base/logical.exp: evaluate x || !y && z; variables x = 0, y = 1, z = 0; expecting 0
+PASS: gdb.base/logical.exp: evaluate !x || y && z; variables x = 0, y = 1, z = 0; expecting 1
+PASS: gdb.base/logical.exp: evaluate !x || y && !z; variables x = 0, y = 1, z = 0; expecting 1
+PASS: gdb.base/logical.exp: evaluate x && y && z; variables x = 0, y = 1, z = 1; expecting 0
+PASS: gdb.base/logical.exp: evaluate x || y && z; variables x = 0, y = 1, z = 1; expecting 1
+PASS: gdb.base/logical.exp: evaluate x && y || z; variables x = 0, y = 1, z = 1; expecting 1
+PASS: gdb.base/logical.exp: evaluate x || y || z; variables x = 0, y = 1, z = 1; expecting 1
+PASS: gdb.base/logical.exp: evaluate x || !y && z; variables x = 0, y = 1, z = 1; expecting 0
+PASS: gdb.base/logical.exp: evaluate !x || y && z; variables x = 0, y = 1, z = 1; expecting 1
+PASS: gdb.base/logical.exp: evaluate !x || y && !z; variables x = 0, y = 1, z = 1; expecting 1
+PASS: gdb.base/logical.exp: evaluate x && y && z; variables x = 1, y = 0, z = 0; expecting 0
+PASS: gdb.base/logical.exp: evaluate x || y && z; variables x = 1, y = 0, z = 0; expecting 1
+PASS: gdb.base/logical.exp: evaluate x && y || z; variables x = 1, y = 0, z = 0; expecting 0
+PASS: gdb.base/logical.exp: evaluate x || y || z; variables x = 1, y = 0, z = 0; expecting 1
+PASS: gdb.base/logical.exp: evaluate x || !y && z; variables x = 1, y = 0, z = 0; expecting 1
+PASS: gdb.base/logical.exp: evaluate !x || y && z; variables x = 1, y = 0, z = 0; expecting 0
+PASS: gdb.base/logical.exp: evaluate !x || y && !z; variables x = 1, y = 0, z = 0; expecting 0
+PASS: gdb.base/logical.exp: evaluate x && y && z; variables x = 1, y = 0, z = 1; expecting 0
+PASS: gdb.base/logical.exp: evaluate x || y && z; variables x = 1, y = 0, z = 1; expecting 1
+PASS: gdb.base/logical.exp: evaluate x && y || z; variables x = 1, y = 0, z = 1; expecting 1
+PASS: gdb.base/logical.exp: evaluate x || y || z; variables x = 1, y = 0, z = 1; expecting 1
+PASS: gdb.base/logical.exp: evaluate x || !y && z; variables x = 1, y = 0, z = 1; expecting 1
+PASS: gdb.base/logical.exp: evaluate !x || y && z; variables x = 1, y = 0, z = 1; expecting 0
+PASS: gdb.base/logical.exp: evaluate !x || y && !z; variables x = 1, y = 0, z = 1; expecting 0
+PASS: gdb.base/logical.exp: evaluate x && y && z; variables x = 1, y = 1, z = 0; expecting 0
+PASS: gdb.base/logical.exp: evaluate x || y && z; variables x = 1, y = 1, z = 0; expecting 1
+PASS: gdb.base/logical.exp: evaluate x && y || z; variables x = 1, y = 1, z = 0; expecting 1
+PASS: gdb.base/logical.exp: evaluate x || y || z; variables x = 1, y = 1, z = 0; expecting 1
+PASS: gdb.base/logical.exp: evaluate x || !y && z; variables x = 1, y = 1, z = 0; expecting 1
+PASS: gdb.base/logical.exp: evaluate !x || y && z; variables x = 1, y = 1, z = 0; expecting 0
+PASS: gdb.base/logical.exp: evaluate !x || y && !z; variables x = 1, y = 1, z = 0; expecting 1
+PASS: gdb.base/logical.exp: evaluate x && y && z; variables x = 1, y = 1, z = 1; expecting 1
+PASS: gdb.base/logical.exp: evaluate x || y && z; variables x = 1, y = 1, z = 1; expecting 1
+PASS: gdb.base/logical.exp: evaluate x && y || z; variables x = 1, y = 1, z = 1; expecting 1
+PASS: gdb.base/logical.exp: evaluate x || y || z; variables x = 1, y = 1, z = 1; expecting 1
+PASS: gdb.base/logical.exp: evaluate x || !y && z; variables x = 1, y = 1, z = 1; expecting 1
+PASS: gdb.base/logical.exp: evaluate !x || y && z; variables x = 1, y = 1, z = 1; expecting 1
+PASS: gdb.base/logical.exp: evaluate !x || y && !z; variables x = 1, y = 1, z = 1; expecting 0
+PASS: gdb.base/logical.exp: evaluate x > y || w == z; variables x = 1, y = 2, w = 3, z = 3; expecting 1
+PASS: gdb.base/logical.exp: evaluate x >= y && w != z; variables x = 1, y = 2, w = 3, z = 3; expecting 0
+PASS: gdb.base/logical.exp: evaluate ! x > y || w + z; variables x = 1, y = 2, w = 3, z = 3; expecting 1
+PASS: gdb.base/logical.exp: evaluate x > y || w == z; variables x = 1, y = 2, w = 1, z = 3; expecting 0
+PASS: gdb.base/logical.exp: evaluate x >= y && w != z; variables x = 1, y = 2, w = 1, z = 3; expecting 0
+PASS: gdb.base/logical.exp: evaluate ! x > y || w + z; variables x = 1, y = 2, w = 1, z = 3; expecting 1
+PASS: gdb.base/logical.exp: evaluate x > y || w == z; variables x = 2, y = 2, w = 2, z = 3; expecting 0
+PASS: gdb.base/logical.exp: evaluate x >= y && w != z; variables x = 2, y = 2, w = 2, z = 3; expecting 1
+PASS: gdb.base/logical.exp: evaluate ! x > y || w + z; variables x = 2, y = 2, w = 2, z = 3; expecting 1
+Running ./gdb.base/longest-types.exp ...
+UNTESTED: gdb.base/longest-types.exp: longest-types.exp
+Running ./gdb.base/longjmp.exp ...
+PASS: gdb.base/longjmp.exp: breakpoint at pattern 1 start
+PASS: gdb.base/longjmp.exp: continue to breakpoint at pattern 1 start
+PASS: gdb.base/longjmp.exp: breakpoint at miss_step_1
+PASS: gdb.base/longjmp.exp: next over setjmp (1)
+PASS: gdb.base/longjmp.exp: next to longjmp (1)
+FAIL: gdb.base/longjmp.exp: next over longjmp(1)
+PASS: gdb.base/longjmp.exp: breakpoint at pattern 2 start
+PASS: gdb.base/longjmp.exp: continue to breakpoint at pattern 2 start
+PASS: gdb.base/longjmp.exp: breakpoint at miss_step_2
+PASS: gdb.base/longjmp.exp: next over setjmp (2)
+FAIL: gdb.base/longjmp.exp: next over call_longjmp (2)
+PASS: gdb.base/longjmp.exp: breakpoint at pattern 3 start
+PASS: gdb.base/longjmp.exp: continue to breakpoint at pattern 3 start
+PASS: gdb.base/longjmp.exp: next over patt3
+Running ./gdb.base/long_long.exp ...
+PASS: gdb.base/long_long.exp: get integer valueof "sizeof (char)" (1)
+PASS: gdb.base/long_long.exp: get integer valueof "sizeof (short)" (2)
+PASS: gdb.base/long_long.exp: get integer valueof "sizeof (int)" (4)
+PASS: gdb.base/long_long.exp: get integer valueof "sizeof (long)" (4)
+PASS: gdb.base/long_long.exp: get integer valueof "sizeof (long long)" (8)
+PASS: gdb.base/long_long.exp: get integer valueof "sizeof (void *)" (4)
+PASS: gdb.base/long_long.exp: get integer valueof "sizeof (double)" (8)
+PASS: gdb.base/long_long.exp: get integer valueof "sizeof (long double)" (8)
+PASS: gdb.base/long_long.exp: continue to breakpoint: Stop here and look
+PASS: gdb.base/long_long.exp: hex print p/x
+PASS: gdb.base/long_long.exp: decimal print p/x
+PASS: gdb.base/long_long.exp: default print val.dec
+PASS: gdb.base/long_long.exp: default print val.bin
+PASS: gdb.base/long_long.exp: default print val.oct
+PASS: gdb.base/long_long.exp: default print hex
+PASS: gdb.base/long_long.exp: decimal print p/u
+PASS: gdb.base/long_long.exp: binary print
+PASS: gdb.base/long_long.exp: octal print
+PASS: gdb.base/long_long.exp: print +ve long long
+PASS: gdb.base/long_long.exp: decimal print p/d
+PASS: gdb.base/long_long.exp: p/d val.oct
+PASS: gdb.base/long_long.exp: p/u val.oct
+PASS: gdb.base/long_long.exp: p/o val.oct
+PASS: gdb.base/long_long.exp: p/t val.oct
+PASS: gdb.base/long_long.exp: p/a val.oct
+PASS: gdb.base/long_long.exp: p/c val.oct
+PASS: gdb.base/long_long.exp: p/f val.oct
+PASS: gdb.base/long_long.exp: p/x *(char *)c
+PASS: gdb.base/long_long.exp: p/d *(char *)c
+PASS: gdb.base/long_long.exp: p/u *(char *)c
+PASS: gdb.base/long_long.exp: p/o *(char *)c
+PASS: gdb.base/long_long.exp: p/t *(char *)c
+PASS: gdb.base/long_long.exp: p/a *(char *)c
+PASS: gdb.base/long_long.exp: p/f *(char *)c
+PASS: gdb.base/long_long.exp: p/c *(char *)c
+PASS: gdb.base/long_long.exp: p/x *(short *)s
+PASS: gdb.base/long_long.exp: p/d *(short *)s
+PASS: gdb.base/long_long.exp: p/u *(short *)s
+PASS: gdb.base/long_long.exp: p/o *(short *)s
+PASS: gdb.base/long_long.exp: p/t *(short *)s
+PASS: gdb.base/long_long.exp: p/a *(short *)s
+PASS: gdb.base/long_long.exp: p/f *(short *)s
+PASS: gdb.base/long_long.exp: p/c *(short *)s
+PASS: gdb.base/long_long.exp: p/x *(int *)i
+PASS: gdb.base/long_long.exp: p/d *(int *)i
+PASS: gdb.base/long_long.exp: p/u *(int *)i
+PASS: gdb.base/long_long.exp: p/o *(int *)i
+PASS: gdb.base/long_long.exp: p/t *(int *)i
+PASS: gdb.base/long_long.exp: p/a *(int *)i
+PASS: gdb.base/long_long.exp: p/f *(int *)i
+PASS: gdb.base/long_long.exp: p/c *(int *)i
+PASS: gdb.base/long_long.exp: p/x *(long *)l
+PASS: gdb.base/long_long.exp: p/d *(long *)l
+PASS: gdb.base/long_long.exp: p/u *(long *)l
+PASS: gdb.base/long_long.exp: p/o *(long *)l
+PASS: gdb.base/long_long.exp: p/t *(long *)l
+PASS: gdb.base/long_long.exp: p/a *(long *)l
+PASS: gdb.base/long_long.exp: p/f *(long *)l
+PASS: gdb.base/long_long.exp: p/c *(long *)l
+PASS: gdb.base/long_long.exp: p/x *(long long *)ll
+PASS: gdb.base/long_long.exp: p/d *(long long *)ll
+PASS: gdb.base/long_long.exp: p/u *(long long *)ll
+PASS: gdb.base/long_long.exp: p/o *(long long *)ll
+PASS: gdb.base/long_long.exp: p/t *(long long *)ll
+PASS: gdb.base/long_long.exp: p/a *(long long *)ll
+PASS: gdb.base/long_long.exp: p/f *(long long *)ll
+PASS: gdb.base/long_long.exp: p/c *(long long *)ll
+PASS: gdb.base/long_long.exp: set examine size to w
+PASS: gdb.base/long_long.exp: x/x w
+PASS: gdb.base/long_long.exp: x/d w
+PASS: gdb.base/long_long.exp: x/u w
+PASS: gdb.base/long_long.exp: x/o w
+PASS: gdb.base/long_long.exp: x/t w
+PASS: gdb.base/long_long.exp: x/a
+PASS: gdb.base/long_long.exp: x/c b
+PASS: gdb.base/long_long.exp: x/f &val.oct
+PASS: gdb.base/long_long.exp: set examine size to g
+PASS: gdb.base/long_long.exp: x/2x g
+PASS: gdb.base/long_long.exp: x/2d g
+PASS: gdb.base/long_long.exp: x/2u g
+PASS: gdb.base/long_long.exp: x/2o g
+PASS: gdb.base/long_long.exp: x/2t g
+PASS: gdb.base/long_long.exp: x/2a
+PASS: gdb.base/long_long.exp: x/2c b
+PASS: gdb.base/long_long.exp: x/2f &val.oct
+PASS: gdb.base/long_long.exp: x/2bx b
+PASS: gdb.base/long_long.exp: x/2bd b
+PASS: gdb.base/long_long.exp: x/2bu b
+PASS: gdb.base/long_long.exp: x/2bo b
+PASS: gdb.base/long_long.exp: x/2bt b
+PASS: gdb.base/long_long.exp: x/2ba b
+PASS: gdb.base/long_long.exp: x/2bc b
+PASS: gdb.base/long_long.exp: x/2bf b
+PASS: gdb.base/long_long.exp: x/2hx h
+PASS: gdb.base/long_long.exp: x/2hd h
+PASS: gdb.base/long_long.exp: x/2hu h
+PASS: gdb.base/long_long.exp: x/2ho h
+PASS: gdb.base/long_long.exp: x/2ht h
+PASS: gdb.base/long_long.exp: x/2ha h
+PASS: gdb.base/long_long.exp: x/2hc h
+PASS: gdb.base/long_long.exp: x/2hf h
+PASS: gdb.base/long_long.exp: x/2wx w
+PASS: gdb.base/long_long.exp: x/2wd w
+PASS: gdb.base/long_long.exp: x/2wu w
+PASS: gdb.base/long_long.exp: x/2wo w
+PASS: gdb.base/long_long.exp: x/2wt w
+PASS: gdb.base/long_long.exp: x/2wa w
+PASS: gdb.base/long_long.exp: x/2wc w
+PASS: gdb.base/long_long.exp: x/2wf w
+PASS: gdb.base/long_long.exp: x/2gx g
+PASS: gdb.base/long_long.exp: x/2gd g
+PASS: gdb.base/long_long.exp: x/2gu g
+PASS: gdb.base/long_long.exp: x/2go g
+PASS: gdb.base/long_long.exp: x/2gt g
+PASS: gdb.base/long_long.exp: x/2ga g
+PASS: gdb.base/long_long.exp: x/2gc g
+PASS: gdb.base/long_long.exp: x/2gf g
+Running ./gdb.base/macscp.exp ...
+PASS: gdb.base/macscp.exp: list main for support check
+UNSUPPORTED: gdb.base/macscp.exp: Skipping test because debug information does not include macro information.
+Running ./gdb.base/maint.exp ...
+PASS: gdb.base/maint.exp: set height 0
+PASS: gdb.base/maint.exp: maint print registers
+PASS: gdb.base/maint.exp: maint check-symtabs
+PASS: gdb.base/maint.exp: maint space
+PASS: gdb.base/maint.exp: maint space 1
+PASS: gdb.base/maint.exp: maint time
+PASS: gdb.base/maint.exp: maint time 1
+PASS: gdb.base/maint.exp: maint time 0
+PASS: gdb.base/maint.exp: maint space 0
+PASS: gdb.base/maint.exp: maint demangle
+PASS: gdb.base/maint.exp: maint demangle main
+PASS: gdb.base/maint.exp: maint print statistics
+PASS: gdb.base/maint.exp: maint print dummy-frames
+PASS: gdb.base/maint.exp: maint print objfiles: header
+PASS: gdb.base/maint.exp: maint print objfiles: psymtabs
+PASS: gdb.base/maint.exp: maint print objfiles: symtabs
+PASS: gdb.base/maint.exp: maint print psymbols w/o args
+PASS: gdb.base/maint.exp: maint print psymbols 1
+PASS: gdb.base/maint.exp: shell rm -f psymbols_output
+PASS: gdb.base/maint.exp: maint print msymbols w/o args
+PASS: gdb.base/maint.exp: maint print msymbols
+PASS: gdb.base/maint.exp: shell rm -f msymbols_output
+PASS: gdb.base/maint.exp: cd to objdir
+PASS: gdb.base/maint.exp: maint print msymbols
+PASS: gdb.base/maint.exp: shell rm -f msymbols_output2
+PASS: gdb.base/maint.exp: cd to mydir
+PASS: gdb.base/maint.exp: maint print symbols w/o args
+PASS: gdb.base/maint.exp: maint print symbols
+PASS: gdb.base/maint.exp: shell rm -f symbols_output
+PASS: gdb.base/maint.exp: maint print type
+PASS: gdb.base/maint.exp: maint info sections
+PASS: gdb.base/maint.exp: maint info sections .text
+PASS: gdb.base/maint.exp: maint info sections CODE
+PASS: gdb.base/maint.exp: maint info sections DATA
+FAIL: gdb.base/maint.exp: maint info breakpoints
+PASS: gdb.base/maint.exp: maint print w/o args
+PASS: gdb.base/maint.exp: maint info w/o args
+PASS: gdb.base/maint.exp: maint w/o args
+PASS: gdb.base/maint.exp: help maint
+PASS: gdb.base/maint.exp: help maint check-symtabs
+PASS: gdb.base/maint.exp: help maint space
+PASS: gdb.base/maint.exp: help maint time
+PASS: gdb.base/maint.exp: help maint demangle
+PASS: gdb.base/maint.exp: help maint dump-me
+PASS: gdb.base/maint.exp: help maint internal-error
+PASS: gdb.base/maint.exp: help maint internal-warning
+PASS: gdb.base/maint.exp: help maint print statistics
+PASS: gdb.base/maint.exp: help maint print dummy-frames
+PASS: gdb.base/maint.exp: help maint print objfiles
+PASS: gdb.base/maint.exp: help maint print psymbols
+PASS: gdb.base/maint.exp: help maint print msymbols
+PASS: gdb.base/maint.exp: help maint print symbols
+PASS: gdb.base/maint.exp: help maint print type
+PASS: gdb.base/maint.exp: help maint info sections
+PASS: gdb.base/maint.exp: help maint info breakpoints
+PASS: gdb.base/maint.exp: help maint info
+PASS: gdb.base/maint.exp: help maint print
+PASS: gdb.base/maint.exp: help maint
+PASS: gdb.base/maint.exp: maint dump-me
+PASS: gdb.base/maint.exp: maint internal-error
+PASS: gdb.base/maint.exp: internal-error resync
+Running ./gdb.base/memattr.exp ...
+PASS: gdb.base/memattr.exp: create mem region 1
+PASS: gdb.base/memattr.exp: create mem region 2
+PASS: gdb.base/memattr.exp: create mem region 3
+PASS: gdb.base/memattr.exp: create mem region 4
+PASS: gdb.base/memattr.exp: create mem region 5
+PASS: gdb.base/memattr.exp: info mem (1)
+PASS: gdb.base/memattr.exp: mem1 cannot be read
+PASS: gdb.base/memattr.exp: mem1 can be written
+PASS: gdb.base/memattr.exp: mem2 cannot be written
+PASS: gdb.base/memattr.exp: mem2 can be read
+PASS: gdb.base/memattr.exp: disable mem 1
+PASS: gdb.base/memattr.exp: mem 1 was disabled
+PASS: gdb.base/memattr.exp: enable mem 1
+PASS: gdb.base/memattr.exp: mem 1 was enabled
+PASS: gdb.base/memattr.exp: disable mem 2 4
+PASS: gdb.base/memattr.exp: mem 2 and 4 were disabled
+PASS: gdb.base/memattr.exp: enable mem 2-4
+PASS: gdb.base/memattr.exp: mem 2-4 were enabled
+PASS: gdb.base/memattr.exp: disable mem
+PASS: gdb.base/memattr.exp: mem 1 to 5 were disabled
+PASS: gdb.base/memattr.exp: enable mem
+PASS: gdb.base/memattr.exp: mem 1 to 5 were enabled
+PASS: gdb.base/memattr.exp: disable non-existant regions
+PASS: gdb.base/memattr.exp: delete mem 1
+PASS: gdb.base/memattr.exp: mem 1 was deleted
+PASS: gdb.base/memattr.exp: delete mem 2 4
+PASS: gdb.base/memattr.exp: mem 2 and 4 were deleted
+PASS: gdb.base/memattr.exp: delete mem 2-4
+PASS: gdb.base/memattr.exp: mem 2-4 were deleted
+PASS: gdb.base/memattr.exp: delete non-existant region
+PASS: gdb.base/memattr.exp: mem 0x30 0x60 ro
+PASS: gdb.base/memattr.exp: 0x30 0x60: 0x20 0x40: overlap
+PASS: gdb.base/memattr.exp: 0x30 0x60: 0x30 0x40: overlap
+PASS: gdb.base/memattr.exp: 0x30 0x60: 0x40 0x50: overlap
+PASS: gdb.base/memattr.exp: 0x30 0x60: 0x50 0x60: overlap
+PASS: gdb.base/memattr.exp: 0x30 0x60: 0x50 0x70: overlap
+PASS: gdb.base/memattr.exp: 0x30 0x60: 0x30 0x60: overlap
+PASS: gdb.base/memattr.exp: 0x30 0x60: 0x20 0x70: overlap
+PASS: gdb.base/memattr.exp: 0x30 0x60: 0x20 0x0: overlap
+PASS: gdb.base/memattr.exp: 0x30 0x60: 0x30 0x0: overlap
+PASS: gdb.base/memattr.exp: 0x30 0x60: 0x40 0x0: overlap
+PASS: gdb.base/memattr.exp: 0x30 0x60: 0x20 0x30: no-overlap
+PASS: gdb.base/memattr.exp: 0x30 0x60: 0x60 0x70: no-overlap
+PASS: gdb.base/memattr.exp: 0x30 0x60: 0x80 0x0: no-overlap
+PASS: gdb.base/memattr.exp: mem 0x30 0x0 ro
+PASS: gdb.base/memattr.exp: 0x30 0x0: 0x20 0x50: overlap
+PASS: gdb.base/memattr.exp: 0x30 0x0: 0x30 0x50: overlap
+PASS: gdb.base/memattr.exp: 0x30 0x0: 0x40 0x50: overlap
+PASS: gdb.base/memattr.exp: 0x30 0x0: 0x20 0x0: overlap
+PASS: gdb.base/memattr.exp: 0x30 0x0: 0x30 0x0: overlap
+PASS: gdb.base/memattr.exp: 0x30 0x0: 0x40 0x0: overlap
+PASS: gdb.base/memattr.exp: 0x30 0x0: 0x20 0x30: no-overlap
+PASS: gdb.base/memattr.exp: 0x30 0x0: 0x00 0x10: no-overlap
+Running ./gdb.base/mips_pro.exp ...
+PASS: gdb.base/mips_pro.exp: backtrace
+Running ./gdb.base/miscexprs.exp ...
+PASS: gdb.base/miscexprs.exp: continue to marker1
+PASS: gdb.base/miscexprs.exp: up from marker1
+PASS: gdb.base/miscexprs.exp: print value of &ibig.i[0]
+PASS: gdb.base/miscexprs.exp: print value of &cbig.c[0]
+PASS: gdb.base/miscexprs.exp: print value of &fbig.f[0]
+PASS: gdb.base/miscexprs.exp: print value of &dbig.d[0]
+PASS: gdb.base/miscexprs.exp: print value of &sbig.s[0]
+PASS: gdb.base/miscexprs.exp: print value of &lbig.l[0]
+PASS: gdb.base/miscexprs.exp: print value of ibig.i[100] | 1
+PASS: gdb.base/miscexprs.exp: print value of sbig.s[90] & 127
+PASS: gdb.base/miscexprs.exp: print value of !ibig.i[100]
+PASS: gdb.base/miscexprs.exp: print value of !sbig.s[90]
+PASS: gdb.base/miscexprs.exp: print value of !ibig.i[100]
+PASS: gdb.base/miscexprs.exp: print value of !ibig.i[100]
+PASS: gdb.base/miscexprs.exp: print value of !sbig.s[90] * 10
+PASS: gdb.base/miscexprs.exp: print value of ibig.i[100] * sbig.s[90]
+PASS: gdb.base/miscexprs.exp: print value of fbig.f[100] * dbig.d[202]
+PASS: gdb.base/miscexprs.exp: print value of !(sbig.s[90] * 2)
+PASS: gdb.base/miscexprs.exp: print value of sizeof sbig
+PASS: gdb.base/miscexprs.exp: print value of sizeof cbig
+PASS: gdb.base/miscexprs.exp: print value of sizeof lbig / sizeof long
+PASS: gdb.base/miscexprs.exp: print value of ibig.i[100] << 2
+PASS: gdb.base/miscexprs.exp: print value of sbig.s[90] >> 4
+PASS: gdb.base/miscexprs.exp: print value of lbig.l[333] >> 6
+Running ./gdb.base/morestack.exp ...
+gdb compile failed, cc1: error: '-fsplit-stack' is not supported by this compiler configuration
+UNTESTED: gdb.base/morestack.exp: morestack.exp
+Running ./gdb.base/moribund-step.exp ...
+PASS: gdb.base/moribund-step.exp: set non-stop on
+Running ./gdb.base/multi-forks.exp ...
+Running ./gdb.base/nextoverexit.exp ...
+PASS: gdb.base/nextoverexit.exp: next over exit
+Running ./gdb.base/nodebug.exp ...
+PASS: gdb.base/nodebug.exp: p top
+PASS: gdb.base/nodebug.exp: whatis top
+PASS: gdb.base/nodebug.exp: ptype top
+PASS: gdb.base/nodebug.exp: p middle
+PASS: gdb.base/nodebug.exp: whatis middle
+PASS: gdb.base/nodebug.exp: ptype middle
+PASS: gdb.base/nodebug.exp: p dataglobal
+PASS: gdb.base/nodebug.exp: whatis dataglobal
+PASS: gdb.base/nodebug.exp: ptype dataglobal
+PASS: gdb.base/nodebug.exp: p datalocal
+PASS: gdb.base/nodebug.exp: whatis datalocal
+PASS: gdb.base/nodebug.exp: ptype datalocal
+PASS: gdb.base/nodebug.exp: p bssglobal
+PASS: gdb.base/nodebug.exp: whatis bssglobal
+PASS: gdb.base/nodebug.exp: ptype bssglobal
+PASS: gdb.base/nodebug.exp: p bsslocal
+PASS: gdb.base/nodebug.exp: whatis bsslocal
+PASS: gdb.base/nodebug.exp: ptype bsslocal
+PASS: gdb.base/nodebug.exp: backtrace from inner in nodebug.exp
+FAIL: gdb.base/nodebug.exp: p/c array_index("abcdef",2)
+PASS: gdb.base/nodebug.exp: backtrace from middle in nodebug.exp
+Running ./gdb.base/nofield.exp ...
+PASS: gdb.base/nofield.exp: ptype struct not_empty
+PASS: gdb.base/nofield.exp: ptype struct empty
+PASS: gdb.base/nofield.exp: ptype union empty_union
+Running ./gdb.base/nostdlib.exp ...
+UNTESTED: gdb.base/nostdlib.exp: nostdlib.exp
+Running ./gdb.base/opaque.exp ...
+PASS: gdb.base/opaque.exp: whatis on opaque struct pointer (statically)
+PASS: gdb.base/opaque.exp: ptype on opaque struct pointer (statically)
+PASS: gdb.base/opaque.exp: whatis on opaque struct instance (statically)
+PASS: gdb.base/opaque.exp: ptype on opaque struct instance (statically)
+PASS: gdb.base/opaque.exp: ptype on opaque struct tagname (statically)
+PASS: gdb.base/opaque.exp: whatis on opaque struct pointer (dynamically)
+PASS: gdb.base/opaque.exp: ptype on opaque struct pointer (dynamically) 1
+PASS: gdb.base/opaque.exp: whatis on opaque struct instance (dynamically) 1
+PASS: gdb.base/opaque.exp: ptype on opaque struct instance (dynamically) 1
+PASS: gdb.base/opaque.exp: ptype on opaque struct tagname (dynamically) 1
+PASS: gdb.base/opaque.exp: whatis on opaque struct pointer (dynamically) 1
+PASS: gdb.base/opaque.exp: ptype on opaque struct pointer (dynamically) 2
+PASS: gdb.base/opaque.exp: whatis on opaque struct instance (dynamically) 2
+PASS: gdb.base/opaque.exp: ptype on opaque struct instance (dynamically) 2
+PASS: gdb.base/opaque.exp: ptype on opaque struct tagname (dynamically) 2
+Running ./gdb.base/overlays.exp ...
+Running ./gdb.base/page.exp ...
+PASS: gdb.base/page.exp: set pagination off
+PASS: gdb.base/page.exp: pagination is off
+PASS: gdb.base/page.exp: unpaged help
+PASS: gdb.base/page.exp: set pagination on
+PASS: gdb.base/page.exp: pagination is on
+PASS: gdb.base/page.exp: set height 10
+PASS: gdb.base/page.exp: paged help
+PASS: gdb.base/page.exp: q
+Running ./gdb.base/pc-fp.exp ...
+PASS: gdb.base/pc-fp.exp: get hexadecimal valueof "$pc"
+PASS: gdb.base/pc-fp.exp: get hexadecimal valueof "$fp"
+PASS: gdb.base/pc-fp.exp: display/i $pc
+PASS: gdb.base/pc-fp.exp: display/w $fp
+PASS: gdb.base/pc-fp.exp: info register $pc
+PASS: gdb.base/pc-fp.exp: info register $fp
+PASS: gdb.base/pc-fp.exp: info register pc fp
+Running ./gdb.base/pending.exp ...
+PASS: gdb.base/pending.exp: set pending breakpoint (without symbols)
+PASS: gdb.base/pending.exp: complete condition
+PASS: gdb.base/pending.exp: single pending breakpoint info (without symbols)
+FAIL: gdb.base/pending.exp: run to resolved breakpoint 1 (without symbols) (the program exited)
+PASS: gdb.base/pending.exp: set pending breakpoint
+PASS: gdb.base/pending.exp: single pending breakpoint info
+PASS: gdb.base/pending.exp: breakpoint function
+PASS: gdb.base/pending.exp: pending plus real breakpoint info
+PASS: gdb.base/pending.exp: Don't set pending breakpoint
+PASS: gdb.base/pending.exp: condition 1 k == 1
+PASS: gdb.base/pending.exp: pending plus condition
+PASS: gdb.base/pending.exp: disable 1
+PASS: gdb.base/pending.exp: pending disabled
+PASS: gdb.base/pending.exp: Set commands for pending breakpoint
+PASS: gdb.base/pending.exp: pending disabled plus commands
+PASS: gdb.base/pending.exp: Set pending breakpoint 2
+PASS: gdb.base/pending.exp: multiple pending breakpoints
+PASS: gdb.base/pending.exp: Set pending breakpoint 3
+PASS: gdb.base/pending.exp: set ignore count on pending breakpoint 3
+PASS: gdb.base/pending.exp: multiple pending breakpoints 2
+PASS: gdb.base/pending.exp: running to main
+PASS: gdb.base/pending.exp: re-enabling pending breakpoint that can resolve instantly
+FAIL: gdb.base/pending.exp: continue to resolved breakpoint 2 (the program exited)
+FAIL: gdb.base/pending.exp: continue to resolved breakpoint 1 (the program is no longer running)
+PASS: gdb.base/pending.exp: Disable other breakpoints
+PASS: gdb.base/pending.exp: Disable other breakpoints
+FAIL: gdb.base/pending.exp: continue to resolved breakpoint 3 (the program is no longer running)
+PASS: gdb.base/pending.exp: set imaginary pending breakpoint
+PASS: gdb.base/pending.exp: rerun to main
+PASS: gdb.base/pending.exp: verify pending breakpoint after restart
+Running ./gdb.base/permissions.exp ...
+PASS: gdb.base/permissions.exp: show may-write-registers
+PASS: gdb.base/permissions.exp: show may-write-memory
+PASS: gdb.base/permissions.exp: show may-insert-breakpoints
+PASS: gdb.base/permissions.exp: show may-insert-tracepoints
+PASS: gdb.base/permissions.exp: show may-insert-fast-tracepoints
+PASS: gdb.base/permissions.exp: show may-interrupt
+PASS: gdb.base/permissions.exp: enable observer mode
+PASS: gdb.base/permissions.exp: show may-write-memory
+PASS: gdb.base/permissions.exp: show may-write-registers
+PASS: gdb.base/permissions.exp: show may-insert-breakpoints
+PASS: gdb.base/permissions.exp: show may-insert-tracepoints
+PASS: gdb.base/permissions.exp: show may-insert-fast-tracepoints
+PASS: gdb.base/permissions.exp: show may-interrupt
+PASS: gdb.base/permissions.exp: disable observer mode
+PASS: gdb.base/permissions.exp: set non-stop off
+PASS: gdb.base/permissions.exp: set a global
+PASS: gdb.base/permissions.exp: print x
+PASS: gdb.base/permissions.exp: set may-write-memory off
+PASS: gdb.base/permissions.exp: try to set a global
+PASS: gdb.base/permissions.exp: print x
+Running ./gdb.base/pie-execl.exp ...
+Running ./gdb.base/pointers.exp ...
+FAIL: gdb.base/pointers.exp: continuing after dummy()
+PASS: gdb.base/pointers.exp: set pointer to beginning of array
+PASS: gdb.base/pointers.exp: set pointer to end of array
+FAIL: gdb.base/pointers.exp: print object pointed to
+FAIL: gdb.base/pointers.exp: print object pointed to #2
+PASS: gdb.base/pointers.exp: pointer1==pointer2
+PASS: gdb.base/pointers.exp: pointer1!=pointer2
+PASS: gdb.base/pointers.exp: pointer1<=pointer2
+PASS: gdb.base/pointers.exp: pointer1>=pointer2
+PASS: gdb.base/pointers.exp: pointer1<pointer2
+PASS: gdb.base/pointers.exp: pointer1>pointer2
+PASS: gdb.base/pointers.exp: set y = *v_int_pointer++
+FAIL: gdb.base/pointers.exp: pointer assignment
+FAIL: gdb.base/pointers.exp: and post-increment
+PASS: gdb.base/pointers.exp: set y = *--v_int_pointer2
+FAIL: gdb.base/pointers.exp: pointer assignment
+FAIL: gdb.base/pointers.exp: and pre-decrement
+PASS: gdb.base/pointers.exp: set y =v_int_pointer-v_int_pointer2
+PASS: gdb.base/pointers.exp: pointer1-pointer2
+PASS: gdb.base/pointers.exp: set v_int_pointer=v_int_array
+FAIL: gdb.base/pointers.exp: print array element through pointer
+FAIL: gdb.base/pointers.exp: print array element through pointer #2
+PASS: gdb.base/pointers.exp: print array element through pointer #3
+PASS: gdb.base/pointers.exp: print array element through pointer #4
+PASS: gdb.base/pointers.exp: print array element through pointer #5
+PASS: gdb.base/pointers.exp: increment rptr
+PASS: gdb.base/pointers.exp: print array element through pointer #6
+PASS: gdb.base/pointers.exp: print array element through pointer #7
+PASS: gdb.base/pointers.exp: print array element through pointer #8
+PASS: gdb.base/pointers.exp: print array element w/ pointer arithmetic
+FAIL: gdb.base/pointers.exp: print through ptr to ptr
+PASS: gdb.base/pointers.exp: continue
+PASS: gdb.base/pointers.exp: up from marker1
+PASS: gdb.base/pointers.exp: print value of *pUC
+PASS: gdb.base/pointers.exp: ptype pUC
+PASS: gdb.base/pointers.exp: print value of *pS
+PASS: gdb.base/pointers.exp: ptype pS
+PASS: gdb.base/pointers.exp: print value of *pUS
+PASS: gdb.base/pointers.exp: ptype pUS
+PASS: gdb.base/pointers.exp: print value of *pI
+PASS: gdb.base/pointers.exp: ptype pI
+PASS: gdb.base/pointers.exp: print value of *pUI
+PASS: gdb.base/pointers.exp: ptype pUI
+PASS: gdb.base/pointers.exp: print value of *pL
+PASS: gdb.base/pointers.exp: ptype pL
+PASS: gdb.base/pointers.exp: print value of *pUL
+PASS: gdb.base/pointers.exp: ptype pUL
+PASS: gdb.base/pointers.exp: print value of *pF
+PASS: gdb.base/pointers.exp: ptype pF
+PASS: gdb.base/pointers.exp: print value of *pD
+PASS: gdb.base/pointers.exp: ptype pD
+PASS: gdb.base/pointers.exp: print value of ******ppppppC
+PASS: gdb.base/pointers.exp: ptype pC
+PASS: gdb.base/pointers.exp: ptype ppC
+PASS: gdb.base/pointers.exp: ptype pppC
+PASS: gdb.base/pointers.exp: ptype ppppC
+PASS: gdb.base/pointers.exp: ptype pppppC
+PASS: gdb.base/pointers.exp: ptype ppppppC
+PASS: gdb.base/pointers.exp: p instance.array_variable + 0
+Running ./gdb.base/pr10179.exp ...
+PASS: gdb.base/pr10179.exp: rbreak foo.*
+PASS: gdb.base/pr10179.exp: rbreak pr10179-a.c:foo.*
+PASS: gdb.base/pr10179.exp: rbreak pr10179-a.c : .*
+Running ./gdb.base/pr11022.exp ...
+Running ./gdb.base/prelink.exp ...
+Running ./gdb.base/printcmds.exp ...
+PASS: gdb.base/printcmds.exp: print $pc
+PASS: gdb.base/printcmds.exp: print "abc"
+PASS: gdb.base/printcmds.exp: print sizeof ("abc")
+PASS: gdb.base/printcmds.exp: ptype "abc"
+PASS: gdb.base/printcmds.exp: print $cvar = "abc"
+PASS: gdb.base/printcmds.exp: print sizeof ($cvar)
+PASS: gdb.base/printcmds.exp: print $pc (with file)
+PASS: gdb.base/printcmds.exp: set print sevenbit-strings
+PASS: gdb.base/printcmds.exp: set print address off
+PASS: gdb.base/printcmds.exp: set width 0
+PASS: gdb.base/printcmds.exp: p ctable1[120] #1
+PASS: gdb.base/printcmds.exp: p 123
+PASS: gdb.base/printcmds.exp: p -123
+PASS: gdb.base/printcmds.exp: p/d 123
+PASS: gdb.base/printcmds.exp: p 0123
+PASS: gdb.base/printcmds.exp: p 00123
+PASS: gdb.base/printcmds.exp: p -0123
+PASS: gdb.base/printcmds.exp: p/o 0123
+PASS: gdb.base/printcmds.exp: p 0x123
+PASS: gdb.base/printcmds.exp: p -0x123
+PASS: gdb.base/printcmds.exp: p 0x0123
+PASS: gdb.base/printcmds.exp: p -0x0123
+PASS: gdb.base/printcmds.exp: p 0xABCDEF
+PASS: gdb.base/printcmds.exp: p 0xabcdef
+PASS: gdb.base/printcmds.exp: p 0xAbCdEf
+PASS: gdb.base/printcmds.exp: p/x 0x123
+PASS: gdb.base/printcmds.exp: p 0b0
+PASS: gdb.base/printcmds.exp: p 0b1111
+PASS: gdb.base/printcmds.exp: p 0B1111
+PASS: gdb.base/printcmds.exp: p -0b1111
+PASS: gdb.base/printcmds.exp: reject p 0x
+PASS: gdb.base/printcmds.exp: reject p 0b
+PASS: gdb.base/printcmds.exp: p ''
+PASS: gdb.base/printcmds.exp: p '''
+PASS: gdb.base/printcmds.exp: reject p '\'
+PASS: gdb.base/printcmds.exp: reject p '\\\'
+PASS: gdb.base/printcmds.exp: reject p DEADBEEF
+PASS: gdb.base/printcmds.exp: reject p 09
+PASS: gdb.base/printcmds.exp: reject p 079
+PASS: gdb.base/printcmds.exp: reject p 0xG
+PASS: gdb.base/printcmds.exp: reject p 0xAG
+PASS: gdb.base/printcmds.exp: reject p 0b2
+PASS: gdb.base/printcmds.exp: reject p 0b12
+PASS: gdb.base/printcmds.exp: check for floating addition
+PASS: gdb.base/printcmds.exp: p 1.
+PASS: gdb.base/printcmds.exp: p 1.5
+PASS: gdb.base/printcmds.exp: p 1.f
+PASS: gdb.base/printcmds.exp: p 1.5f
+PASS: gdb.base/printcmds.exp: p 1.l
+PASS: gdb.base/printcmds.exp: p 1.5l
+PASS: gdb.base/printcmds.exp: p 0x1.1
+PASS: gdb.base/printcmds.exp: reject p 123DEADBEEF
+PASS: gdb.base/printcmds.exp: reject p 123foobar.bazfoo3
+PASS: gdb.base/printcmds.exp: reject p 123EEEEEEEEEEEEEEEEE33333k333
+PASS: gdb.base/printcmds.exp: reject p 1.1x
+PASS: gdb.base/printcmds.exp: reject p 1.1ff
+PASS: gdb.base/printcmds.exp: reject p 1.1ll
+PASS: gdb.base/printcmds.exp: p 'a'
+PASS: gdb.base/printcmds.exp: p/c 'a'
+PASS: gdb.base/printcmds.exp: p/x 'a'
+PASS: gdb.base/printcmds.exp: p/d 'a'
+PASS: gdb.base/printcmds.exp: p/t 'a'
+PASS: gdb.base/printcmds.exp: p '\141'
+PASS: gdb.base/printcmds.exp: p/x '\377'
+PASS: gdb.base/printcmds.exp: p '\''
+PASS: gdb.base/printcmds.exp: p '\\'
+PASS: gdb.base/printcmds.exp: p ctable1[0]
+PASS: gdb.base/printcmds.exp: p ctable1[1]
+PASS: gdb.base/printcmds.exp: p ctable1[2]
+PASS: gdb.base/printcmds.exp: p ctable1[3]
+PASS: gdb.base/printcmds.exp: p ctable1[4]
+PASS: gdb.base/printcmds.exp: p ctable1[5]
+PASS: gdb.base/printcmds.exp: p ctable1[6]
+PASS: gdb.base/printcmds.exp: p ctable1[7]
+PASS: gdb.base/printcmds.exp: p ctable1[8]
+PASS: gdb.base/printcmds.exp: p ctable1[9]
+PASS: gdb.base/printcmds.exp: p ctable1[10]
+PASS: gdb.base/printcmds.exp: p ctable1[11]
+PASS: gdb.base/printcmds.exp: p ctable1[12]
+PASS: gdb.base/printcmds.exp: p ctable1[13]
+PASS: gdb.base/printcmds.exp: p ctable1[14]
+PASS: gdb.base/printcmds.exp: p ctable1[15]
+PASS: gdb.base/printcmds.exp: p ctable1[16]
+PASS: gdb.base/printcmds.exp: p ctable1[17]
+PASS: gdb.base/printcmds.exp: p ctable1[18]
+PASS: gdb.base/printcmds.exp: p ctable1[19]
+PASS: gdb.base/printcmds.exp: p ctable1[20]
+PASS: gdb.base/printcmds.exp: p ctable1[21]
+PASS: gdb.base/printcmds.exp: p ctable1[22]
+PASS: gdb.base/printcmds.exp: p ctable1[23]
+PASS: gdb.base/printcmds.exp: p ctable1[24]
+PASS: gdb.base/printcmds.exp: p ctable1[25]
+PASS: gdb.base/printcmds.exp: p ctable1[26]
+PASS: gdb.base/printcmds.exp: p ctable1[27]
+PASS: gdb.base/printcmds.exp: p ctable1[28]
+PASS: gdb.base/printcmds.exp: p ctable1[29]
+PASS: gdb.base/printcmds.exp: p ctable1[30]
+PASS: gdb.base/printcmds.exp: p ctable1[31]
+PASS: gdb.base/printcmds.exp: p ctable1[32]
+PASS: gdb.base/printcmds.exp: p ctable1[33]
+PASS: gdb.base/printcmds.exp: p ctable1[34]
+PASS: gdb.base/printcmds.exp: p ctable1[35]
+PASS: gdb.base/printcmds.exp: p ctable1[36]
+PASS: gdb.base/printcmds.exp: p ctable1[37]
+PASS: gdb.base/printcmds.exp: p ctable1[38]
+PASS: gdb.base/printcmds.exp: p ctable1[39]
+PASS: gdb.base/printcmds.exp: p ctable1[40]
+PASS: gdb.base/printcmds.exp: p ctable1[41]
+PASS: gdb.base/printcmds.exp: p ctable1[42]
+PASS: gdb.base/printcmds.exp: p ctable1[43]
+PASS: gdb.base/printcmds.exp: p ctable1[44]
+PASS: gdb.base/printcmds.exp: p ctable1[45]
+PASS: gdb.base/printcmds.exp: p ctable1[46]
+PASS: gdb.base/printcmds.exp: p ctable1[47]
+PASS: gdb.base/printcmds.exp: p ctable1[48]
+PASS: gdb.base/printcmds.exp: p ctable1[49]
+PASS: gdb.base/printcmds.exp: p ctable1[50]
+PASS: gdb.base/printcmds.exp: p ctable1[51]
+PASS: gdb.base/printcmds.exp: p ctable1[52]
+PASS: gdb.base/printcmds.exp: p ctable1[53]
+PASS: gdb.base/printcmds.exp: p ctable1[54]
+PASS: gdb.base/printcmds.exp: p ctable1[55]
+PASS: gdb.base/printcmds.exp: p ctable1[56]
+PASS: gdb.base/printcmds.exp: p ctable1[57]
+PASS: gdb.base/printcmds.exp: p ctable1[58]
+PASS: gdb.base/printcmds.exp: p ctable1[59]
+PASS: gdb.base/printcmds.exp: p ctable1[60]
+PASS: gdb.base/printcmds.exp: p ctable1[61]
+PASS: gdb.base/printcmds.exp: p ctable1[62]
+PASS: gdb.base/printcmds.exp: p ctable1[63]
+PASS: gdb.base/printcmds.exp: p ctable1[64]
+PASS: gdb.base/printcmds.exp: p ctable1[65]
+PASS: gdb.base/printcmds.exp: p ctable1[66]
+PASS: gdb.base/printcmds.exp: p ctable1[67]
+PASS: gdb.base/printcmds.exp: p ctable1[68]
+PASS: gdb.base/printcmds.exp: p ctable1[69]
+PASS: gdb.base/printcmds.exp: p ctable1[70]
+PASS: gdb.base/printcmds.exp: p ctable1[71]
+PASS: gdb.base/printcmds.exp: p ctable1[72]
+PASS: gdb.base/printcmds.exp: p ctable1[73]
+PASS: gdb.base/printcmds.exp: p ctable1[74]
+PASS: gdb.base/printcmds.exp: p ctable1[75]
+PASS: gdb.base/printcmds.exp: p ctable1[76]
+PASS: gdb.base/printcmds.exp: p ctable1[77]
+PASS: gdb.base/printcmds.exp: p ctable1[78]
+PASS: gdb.base/printcmds.exp: p ctable1[79]
+PASS: gdb.base/printcmds.exp: p ctable1[80]
+PASS: gdb.base/printcmds.exp: p ctable1[81]
+PASS: gdb.base/printcmds.exp: p ctable1[82]
+PASS: gdb.base/printcmds.exp: p ctable1[83]
+PASS: gdb.base/printcmds.exp: p ctable1[84]
+PASS: gdb.base/printcmds.exp: p ctable1[85]
+PASS: gdb.base/printcmds.exp: p ctable1[86]
+PASS: gdb.base/printcmds.exp: p ctable1[87]
+PASS: gdb.base/printcmds.exp: p ctable1[88]
+PASS: gdb.base/printcmds.exp: p ctable1[89]
+PASS: gdb.base/printcmds.exp: p ctable1[90]
+PASS: gdb.base/printcmds.exp: p ctable1[91]
+PASS: gdb.base/printcmds.exp: p ctable1[92]
+PASS: gdb.base/printcmds.exp: p ctable1[93]
+PASS: gdb.base/printcmds.exp: p ctable1[94]
+PASS: gdb.base/printcmds.exp: p ctable1[95]
+PASS: gdb.base/printcmds.exp: p ctable1[96]
+PASS: gdb.base/printcmds.exp: p ctable1[97]
+PASS: gdb.base/printcmds.exp: p ctable1[98]
+PASS: gdb.base/printcmds.exp: p ctable1[99]
+PASS: gdb.base/printcmds.exp: p ctable1[100]
+PASS: gdb.base/printcmds.exp: p ctable1[101]
+PASS: gdb.base/printcmds.exp: p ctable1[102]
+PASS: gdb.base/printcmds.exp: p ctable1[103]
+PASS: gdb.base/printcmds.exp: p ctable1[104]
+PASS: gdb.base/printcmds.exp: p ctable1[105]
+PASS: gdb.base/printcmds.exp: p ctable1[106]
+PASS: gdb.base/printcmds.exp: p ctable1[107]
+PASS: gdb.base/printcmds.exp: p ctable1[108]
+PASS: gdb.base/printcmds.exp: p ctable1[109]
+PASS: gdb.base/printcmds.exp: p ctable1[110]
+PASS: gdb.base/printcmds.exp: p ctable1[111]
+PASS: gdb.base/printcmds.exp: p ctable1[112]
+PASS: gdb.base/printcmds.exp: p ctable1[113]
+PASS: gdb.base/printcmds.exp: p ctable1[114]
+PASS: gdb.base/printcmds.exp: p ctable1[115]
+PASS: gdb.base/printcmds.exp: p ctable1[116]
+PASS: gdb.base/printcmds.exp: p ctable1[117]
+PASS: gdb.base/printcmds.exp: p ctable1[118]
+PASS: gdb.base/printcmds.exp: p ctable1[119]
+PASS: gdb.base/printcmds.exp: p ctable1[120]
+PASS: gdb.base/printcmds.exp: p ctable1[121]
+PASS: gdb.base/printcmds.exp: p ctable1[122]
+PASS: gdb.base/printcmds.exp: p ctable1[123]
+PASS: gdb.base/printcmds.exp: p ctable1[124]
+PASS: gdb.base/printcmds.exp: p ctable1[125]
+PASS: gdb.base/printcmds.exp: p ctable1[126]
+PASS: gdb.base/printcmds.exp: p ctable1[127]
+PASS: gdb.base/printcmds.exp: p ctable1[128]
+PASS: gdb.base/printcmds.exp: p ctable1[129]
+PASS: gdb.base/printcmds.exp: p ctable1[130]
+PASS: gdb.base/printcmds.exp: p ctable1[131]
+PASS: gdb.base/printcmds.exp: p ctable1[132]
+PASS: gdb.base/printcmds.exp: p ctable1[133]
+PASS: gdb.base/printcmds.exp: p ctable1[134]
+PASS: gdb.base/printcmds.exp: p ctable1[135]
+PASS: gdb.base/printcmds.exp: p ctable1[136]
+PASS: gdb.base/printcmds.exp: p ctable1[137]
+PASS: gdb.base/printcmds.exp: p ctable1[138]
+PASS: gdb.base/printcmds.exp: p ctable1[139]
+PASS: gdb.base/printcmds.exp: p ctable1[140]
+PASS: gdb.base/printcmds.exp: p ctable1[141]
+PASS: gdb.base/printcmds.exp: p ctable1[142]
+PASS: gdb.base/printcmds.exp: p ctable1[143]
+PASS: gdb.base/printcmds.exp: p ctable1[144]
+PASS: gdb.base/printcmds.exp: p ctable1[145]
+PASS: gdb.base/printcmds.exp: p ctable1[146]
+PASS: gdb.base/printcmds.exp: p ctable1[147]
+PASS: gdb.base/printcmds.exp: p ctable1[148]
+PASS: gdb.base/printcmds.exp: p ctable1[149]
+PASS: gdb.base/printcmds.exp: p ctable1[150]
+PASS: gdb.base/printcmds.exp: p ctable1[151]
+PASS: gdb.base/printcmds.exp: p ctable1[152]
+PASS: gdb.base/printcmds.exp: p ctable1[153]
+PASS: gdb.base/printcmds.exp: p ctable1[154]
+PASS: gdb.base/printcmds.exp: p ctable1[155]
+PASS: gdb.base/printcmds.exp: p ctable1[156]
+PASS: gdb.base/printcmds.exp: p ctable1[157]
+PASS: gdb.base/printcmds.exp: p ctable1[158]
+PASS: gdb.base/printcmds.exp: p ctable1[159]
+PASS: gdb.base/printcmds.exp: p ctable1[160]
+PASS: gdb.base/printcmds.exp: p ctable1[161]
+PASS: gdb.base/printcmds.exp: p ctable1[162]
+PASS: gdb.base/printcmds.exp: p ctable1[163]
+PASS: gdb.base/printcmds.exp: p ctable1[164]
+PASS: gdb.base/printcmds.exp: p ctable1[165]
+PASS: gdb.base/printcmds.exp: p ctable1[166]
+PASS: gdb.base/printcmds.exp: p ctable1[167]
+PASS: gdb.base/printcmds.exp: p ctable1[168]
+PASS: gdb.base/printcmds.exp: p ctable1[169]
+PASS: gdb.base/printcmds.exp: p ctable1[170]
+PASS: gdb.base/printcmds.exp: p ctable1[171]
+PASS: gdb.base/printcmds.exp: p ctable1[172]
+PASS: gdb.base/printcmds.exp: p ctable1[173]
+PASS: gdb.base/printcmds.exp: p ctable1[174]
+PASS: gdb.base/printcmds.exp: p ctable1[175]
+PASS: gdb.base/printcmds.exp: p ctable1[176]
+PASS: gdb.base/printcmds.exp: p ctable1[177]
+PASS: gdb.base/printcmds.exp: p ctable1[178]
+PASS: gdb.base/printcmds.exp: p ctable1[179]
+PASS: gdb.base/printcmds.exp: p ctable1[180]
+PASS: gdb.base/printcmds.exp: p ctable1[181]
+PASS: gdb.base/printcmds.exp: p ctable1[182]
+PASS: gdb.base/printcmds.exp: p ctable1[183]
+PASS: gdb.base/printcmds.exp: p ctable1[184]
+PASS: gdb.base/printcmds.exp: p ctable1[185]
+PASS: gdb.base/printcmds.exp: p ctable1[186]
+PASS: gdb.base/printcmds.exp: p ctable1[187]
+PASS: gdb.base/printcmds.exp: p ctable1[188]
+PASS: gdb.base/printcmds.exp: p ctable1[189]
+PASS: gdb.base/printcmds.exp: p ctable1[190]
+PASS: gdb.base/printcmds.exp: p ctable1[191]
+PASS: gdb.base/printcmds.exp: p ctable1[192]
+PASS: gdb.base/printcmds.exp: p ctable1[193]
+PASS: gdb.base/printcmds.exp: p ctable1[194]
+PASS: gdb.base/printcmds.exp: p ctable1[195]
+PASS: gdb.base/printcmds.exp: p ctable1[196]
+PASS: gdb.base/printcmds.exp: p ctable1[197]
+PASS: gdb.base/printcmds.exp: p ctable1[198]
+PASS: gdb.base/printcmds.exp: p ctable1[199]
+PASS: gdb.base/printcmds.exp: p ctable1[200]
+PASS: gdb.base/printcmds.exp: p ctable1[201]
+PASS: gdb.base/printcmds.exp: p ctable1[202]
+PASS: gdb.base/printcmds.exp: p ctable1[203]
+PASS: gdb.base/printcmds.exp: p ctable1[204]
+PASS: gdb.base/printcmds.exp: p ctable1[205]
+PASS: gdb.base/printcmds.exp: p ctable1[206]
+PASS: gdb.base/printcmds.exp: p ctable1[207]
+PASS: gdb.base/printcmds.exp: p ctable1[208]
+PASS: gdb.base/printcmds.exp: p ctable1[209]
+PASS: gdb.base/printcmds.exp: p ctable1[210]
+PASS: gdb.base/printcmds.exp: p ctable1[211]
+PASS: gdb.base/printcmds.exp: p ctable1[212]
+PASS: gdb.base/printcmds.exp: p ctable1[213]
+PASS: gdb.base/printcmds.exp: p ctable1[214]
+PASS: gdb.base/printcmds.exp: p ctable1[215]
+PASS: gdb.base/printcmds.exp: p ctable1[216]
+PASS: gdb.base/printcmds.exp: p ctable1[217]
+PASS: gdb.base/printcmds.exp: p ctable1[218]
+PASS: gdb.base/printcmds.exp: p ctable1[219]
+PASS: gdb.base/printcmds.exp: p ctable1[220]
+PASS: gdb.base/printcmds.exp: p ctable1[221]
+PASS: gdb.base/printcmds.exp: p ctable1[222]
+PASS: gdb.base/printcmds.exp: p ctable1[223]
+PASS: gdb.base/printcmds.exp: p ctable1[224]
+PASS: gdb.base/printcmds.exp: p ctable1[225]
+PASS: gdb.base/printcmds.exp: p ctable1[226]
+PASS: gdb.base/printcmds.exp: p ctable1[227]
+PASS: gdb.base/printcmds.exp: p ctable1[228]
+PASS: gdb.base/printcmds.exp: p ctable1[229]
+PASS: gdb.base/printcmds.exp: p ctable1[230]
+PASS: gdb.base/printcmds.exp: p ctable1[231]
+PASS: gdb.base/printcmds.exp: p ctable1[232]
+PASS: gdb.base/printcmds.exp: p ctable1[233]
+PASS: gdb.base/printcmds.exp: p ctable1[234]
+PASS: gdb.base/printcmds.exp: p ctable1[235]
+PASS: gdb.base/printcmds.exp: p ctable1[236]
+PASS: gdb.base/printcmds.exp: p ctable1[237]
+PASS: gdb.base/printcmds.exp: p ctable1[238]
+PASS: gdb.base/printcmds.exp: p ctable1[239]
+PASS: gdb.base/printcmds.exp: p ctable1[240]
+PASS: gdb.base/printcmds.exp: p ctable1[241]
+PASS: gdb.base/printcmds.exp: p ctable1[242]
+PASS: gdb.base/printcmds.exp: p ctable1[243]
+PASS: gdb.base/printcmds.exp: p ctable1[244]
+PASS: gdb.base/printcmds.exp: p ctable1[245]
+PASS: gdb.base/printcmds.exp: p ctable1[246]
+PASS: gdb.base/printcmds.exp: p ctable1[247]
+PASS: gdb.base/printcmds.exp: p ctable1[248]
+PASS: gdb.base/printcmds.exp: p ctable1[249]
+PASS: gdb.base/printcmds.exp: p ctable1[250]
+PASS: gdb.base/printcmds.exp: p ctable1[251]
+PASS: gdb.base/printcmds.exp: p ctable1[252]
+PASS: gdb.base/printcmds.exp: p ctable1[253]
+PASS: gdb.base/printcmds.exp: p ctable1[254]
+PASS: gdb.base/printcmds.exp: p ctable1[255]
+PASS: gdb.base/printcmds.exp: set print elements 1
+PASS: gdb.base/printcmds.exp: p &ctable2[0*16] with print elements set to 1
+PASS: gdb.base/printcmds.exp: p &ctable2[1*16] with print elements set to 1
+PASS: gdb.base/printcmds.exp: p &ctable2[2*16] with print elements set to 1
+PASS: gdb.base/printcmds.exp: p &ctable2[3*16] with print elements set to 1
+PASS: gdb.base/printcmds.exp: p &ctable2[4*16] with print elements set to 1
+PASS: gdb.base/printcmds.exp: p &ctable2[5*16] with print elements set to 1
+PASS: gdb.base/printcmds.exp: p &ctable2[6*16] with print elements set to 1
+PASS: gdb.base/printcmds.exp: p &ctable2[7*16] with print elements set to 1
+PASS: gdb.base/printcmds.exp: p &ctable2[8*16] with print elements set to 1
+PASS: gdb.base/printcmds.exp: p &ctable2[9*16] with print elements set to 1
+PASS: gdb.base/printcmds.exp: p &ctable2[10*16] with print elements set to 1
+PASS: gdb.base/printcmds.exp: p &ctable2[11*16] with print elements set to 1
+PASS: gdb.base/printcmds.exp: p &ctable2[12*16] with print elements set to 1
+PASS: gdb.base/printcmds.exp: p &ctable2[13*16] with print elements set to 1
+PASS: gdb.base/printcmds.exp: p &ctable2[14*16] with print elements set to 1
+PASS: gdb.base/printcmds.exp: p &ctable2[15*16] with print elements set to 1
+PASS: gdb.base/printcmds.exp: set print elements 2
+PASS: gdb.base/printcmds.exp: p &ctable2[0*16] with print elements set to 2
+PASS: gdb.base/printcmds.exp: p &ctable2[1*16] with print elements set to 2
+PASS: gdb.base/printcmds.exp: p &ctable2[2*16] with print elements set to 2
+PASS: gdb.base/printcmds.exp: p &ctable2[3*16] with print elements set to 2
+PASS: gdb.base/printcmds.exp: p &ctable2[4*16] with print elements set to 2
+PASS: gdb.base/printcmds.exp: p &ctable2[5*16] with print elements set to 2
+PASS: gdb.base/printcmds.exp: p &ctable2[6*16] with print elements set to 2
+PASS: gdb.base/printcmds.exp: p &ctable2[7*16] with print elements set to 2
+PASS: gdb.base/printcmds.exp: p &ctable2[8*16] with print elements set to 2
+PASS: gdb.base/printcmds.exp: p &ctable2[9*16] with print elements set to 2
+PASS: gdb.base/printcmds.exp: p &ctable2[10*16] with print elements set to 2
+PASS: gdb.base/printcmds.exp: p &ctable2[11*16] with print elements set to 2
+PASS: gdb.base/printcmds.exp: p &ctable2[12*16] with print elements set to 2
+PASS: gdb.base/printcmds.exp: p &ctable2[13*16] with print elements set to 2
+PASS: gdb.base/printcmds.exp: p &ctable2[14*16] with print elements set to 2
+PASS: gdb.base/printcmds.exp: p &ctable2[15*16] with print elements set to 2
+PASS: gdb.base/printcmds.exp: set print elements 3
+PASS: gdb.base/printcmds.exp: p &ctable2[0*16] with print elements set to 3
+PASS: gdb.base/printcmds.exp: p &ctable2[1*16] with print elements set to 3
+PASS: gdb.base/printcmds.exp: p &ctable2[2*16] with print elements set to 3
+PASS: gdb.base/printcmds.exp: p &ctable2[3*16] with print elements set to 3
+PASS: gdb.base/printcmds.exp: p &ctable2[4*16] with print elements set to 3
+PASS: gdb.base/printcmds.exp: p &ctable2[5*16] with print elements set to 3
+PASS: gdb.base/printcmds.exp: p &ctable2[6*16] with print elements set to 3
+PASS: gdb.base/printcmds.exp: p &ctable2[7*16] with print elements set to 3
+PASS: gdb.base/printcmds.exp: p &ctable2[8*16] with print elements set to 3
+PASS: gdb.base/printcmds.exp: p &ctable2[9*16] with print elements set to 3
+PASS: gdb.base/printcmds.exp: p &ctable2[10*16] with print elements set to 3
+PASS: gdb.base/printcmds.exp: p &ctable2[11*16] with print elements set to 3
+PASS: gdb.base/printcmds.exp: p &ctable2[12*16] with print elements set to 3
+PASS: gdb.base/printcmds.exp: p &ctable2[13*16] with print elements set to 3
+PASS: gdb.base/printcmds.exp: p &ctable2[14*16] with print elements set to 3
+PASS: gdb.base/printcmds.exp: p &ctable2[15*16] with print elements set to 3
+PASS: gdb.base/printcmds.exp: set print elements 4
+PASS: gdb.base/printcmds.exp: p &ctable2[0*16] with print elements set to 4
+PASS: gdb.base/printcmds.exp: p &ctable2[1*16] with print elements set to 4
+PASS: gdb.base/printcmds.exp: p &ctable2[2*16] with print elements set to 4
+PASS: gdb.base/printcmds.exp: p &ctable2[3*16] with print elements set to 4
+PASS: gdb.base/printcmds.exp: p &ctable2[4*16] with print elements set to 4
+PASS: gdb.base/printcmds.exp: p &ctable2[5*16] with print elements set to 4
+PASS: gdb.base/printcmds.exp: p &ctable2[6*16] with print elements set to 4
+PASS: gdb.base/printcmds.exp: p &ctable2[7*16] with print elements set to 4
+PASS: gdb.base/printcmds.exp: p &ctable2[8*16] with print elements set to 4
+PASS: gdb.base/printcmds.exp: p &ctable2[9*16] with print elements set to 4
+PASS: gdb.base/printcmds.exp: p &ctable2[10*16] with print elements set to 4
+PASS: gdb.base/printcmds.exp: p &ctable2[11*16] with print elements set to 4
+PASS: gdb.base/printcmds.exp: p &ctable2[12*16] with print elements set to 4
+PASS: gdb.base/printcmds.exp: p &ctable2[13*16] with print elements set to 4
+PASS: gdb.base/printcmds.exp: p &ctable2[14*16] with print elements set to 4
+PASS: gdb.base/printcmds.exp: p &ctable2[15*16] with print elements set to 4
+PASS: gdb.base/printcmds.exp: set print elements 5
+PASS: gdb.base/printcmds.exp: p &ctable2[0*16] with print elements set to 5
+PASS: gdb.base/printcmds.exp: p &ctable2[1*16] with print elements set to 5
+PASS: gdb.base/printcmds.exp: p &ctable2[2*16] with print elements set to 5
+PASS: gdb.base/printcmds.exp: p &ctable2[3*16] with print elements set to 5
+PASS: gdb.base/printcmds.exp: p &ctable2[4*16] with print elements set to 5
+PASS: gdb.base/printcmds.exp: p &ctable2[5*16] with print elements set to 5
+PASS: gdb.base/printcmds.exp: p &ctable2[6*16] with print elements set to 5
+PASS: gdb.base/printcmds.exp: p &ctable2[7*16] with print elements set to 5
+PASS: gdb.base/printcmds.exp: p &ctable2[8*16] with print elements set to 5
+PASS: gdb.base/printcmds.exp: p &ctable2[9*16] with print elements set to 5
+PASS: gdb.base/printcmds.exp: p &ctable2[10*16] with print elements set to 5
+PASS: gdb.base/printcmds.exp: p &ctable2[11*16] with print elements set to 5
+PASS: gdb.base/printcmds.exp: p &ctable2[12*16] with print elements set to 5
+PASS: gdb.base/printcmds.exp: p &ctable2[13*16] with print elements set to 5
+PASS: gdb.base/printcmds.exp: p &ctable2[14*16] with print elements set to 5
+PASS: gdb.base/printcmds.exp: p &ctable2[15*16] with print elements set to 5
+PASS: gdb.base/printcmds.exp: set print elements 6
+PASS: gdb.base/printcmds.exp: p &ctable2[0*16] with print elements set to 6
+PASS: gdb.base/printcmds.exp: p &ctable2[1*16] with print elements set to 6
+PASS: gdb.base/printcmds.exp: p &ctable2[2*16] with print elements set to 6
+PASS: gdb.base/printcmds.exp: p &ctable2[3*16] with print elements set to 6
+PASS: gdb.base/printcmds.exp: p &ctable2[4*16] with print elements set to 6
+PASS: gdb.base/printcmds.exp: p &ctable2[5*16] with print elements set to 6
+PASS: gdb.base/printcmds.exp: p &ctable2[6*16] with print elements set to 6
+PASS: gdb.base/printcmds.exp: p &ctable2[7*16] with print elements set to 6
+PASS: gdb.base/printcmds.exp: p &ctable2[8*16] with print elements set to 6
+PASS: gdb.base/printcmds.exp: p &ctable2[9*16] with print elements set to 6
+PASS: gdb.base/printcmds.exp: p &ctable2[10*16] with print elements set to 6
+PASS: gdb.base/printcmds.exp: p &ctable2[11*16] with print elements set to 6
+PASS: gdb.base/printcmds.exp: p &ctable2[12*16] with print elements set to 6
+PASS: gdb.base/printcmds.exp: p &ctable2[13*16] with print elements set to 6
+PASS: gdb.base/printcmds.exp: p &ctable2[14*16] with print elements set to 6
+PASS: gdb.base/printcmds.exp: p &ctable2[15*16] with print elements set to 6
+PASS: gdb.base/printcmds.exp: set print elements 7
+PASS: gdb.base/printcmds.exp: p &ctable2[0*16] with print elements set to 7
+PASS: gdb.base/printcmds.exp: p &ctable2[1*16] with print elements set to 7
+PASS: gdb.base/printcmds.exp: p &ctable2[2*16] with print elements set to 7
+PASS: gdb.base/printcmds.exp: p &ctable2[3*16] with print elements set to 7
+PASS: gdb.base/printcmds.exp: p &ctable2[4*16] with print elements set to 7
+PASS: gdb.base/printcmds.exp: p &ctable2[5*16] with print elements set to 7
+PASS: gdb.base/printcmds.exp: p &ctable2[6*16] with print elements set to 7
+PASS: gdb.base/printcmds.exp: p &ctable2[7*16] with print elements set to 7
+PASS: gdb.base/printcmds.exp: p &ctable2[8*16] with print elements set to 7
+PASS: gdb.base/printcmds.exp: p &ctable2[9*16] with print elements set to 7
+PASS: gdb.base/printcmds.exp: p &ctable2[10*16] with print elements set to 7
+PASS: gdb.base/printcmds.exp: p &ctable2[11*16] with print elements set to 7
+PASS: gdb.base/printcmds.exp: p &ctable2[12*16] with print elements set to 7
+PASS: gdb.base/printcmds.exp: p &ctable2[13*16] with print elements set to 7
+PASS: gdb.base/printcmds.exp: p &ctable2[14*16] with print elements set to 7
+PASS: gdb.base/printcmds.exp: p &ctable2[15*16] with print elements set to 7
+PASS: gdb.base/printcmds.exp: set print elements 8
+PASS: gdb.base/printcmds.exp: p &ctable2[0*16] with print elements set to 8
+PASS: gdb.base/printcmds.exp: p &ctable2[1*16] with print elements set to 8
+PASS: gdb.base/printcmds.exp: p &ctable2[2*16] with print elements set to 8
+PASS: gdb.base/printcmds.exp: p &ctable2[3*16] with print elements set to 8
+PASS: gdb.base/printcmds.exp: p &ctable2[4*16] with print elements set to 8
+PASS: gdb.base/printcmds.exp: p &ctable2[5*16] with print elements set to 8
+PASS: gdb.base/printcmds.exp: p &ctable2[6*16] with print elements set to 8
+PASS: gdb.base/printcmds.exp: p &ctable2[7*16] with print elements set to 8
+PASS: gdb.base/printcmds.exp: p &ctable2[8*16] with print elements set to 8
+PASS: gdb.base/printcmds.exp: p &ctable2[9*16] with print elements set to 8
+PASS: gdb.base/printcmds.exp: p &ctable2[10*16] with print elements set to 8
+PASS: gdb.base/printcmds.exp: p &ctable2[11*16] with print elements set to 8
+PASS: gdb.base/printcmds.exp: p &ctable2[12*16] with print elements set to 8
+PASS: gdb.base/printcmds.exp: p &ctable2[13*16] with print elements set to 8
+PASS: gdb.base/printcmds.exp: p &ctable2[14*16] with print elements set to 8
+PASS: gdb.base/printcmds.exp: p &ctable2[15*16] with print elements set to 8
+PASS: gdb.base/printcmds.exp: set print elements 9
+PASS: gdb.base/printcmds.exp: p &ctable2[0*16] with print elements set to 9
+PASS: gdb.base/printcmds.exp: p &ctable2[1*16] with print elements set to 9
+PASS: gdb.base/printcmds.exp: p &ctable2[2*16] with print elements set to 9
+PASS: gdb.base/printcmds.exp: p &ctable2[3*16] with print elements set to 9
+PASS: gdb.base/printcmds.exp: p &ctable2[4*16] with print elements set to 9
+PASS: gdb.base/printcmds.exp: p &ctable2[5*16] with print elements set to 9
+PASS: gdb.base/printcmds.exp: p &ctable2[6*16] with print elements set to 9
+PASS: gdb.base/printcmds.exp: p &ctable2[7*16] with print elements set to 9
+PASS: gdb.base/printcmds.exp: p &ctable2[8*16] with print elements set to 9
+PASS: gdb.base/printcmds.exp: p &ctable2[9*16] with print elements set to 9
+PASS: gdb.base/printcmds.exp: p &ctable2[10*16] with print elements set to 9
+PASS: gdb.base/printcmds.exp: p &ctable2[11*16] with print elements set to 9
+PASS: gdb.base/printcmds.exp: p &ctable2[12*16] with print elements set to 9
+PASS: gdb.base/printcmds.exp: p &ctable2[13*16] with print elements set to 9
+PASS: gdb.base/printcmds.exp: p &ctable2[14*16] with print elements set to 9
+PASS: gdb.base/printcmds.exp: p &ctable2[15*16] with print elements set to 9
+PASS: gdb.base/printcmds.exp: set print elements 10
+PASS: gdb.base/printcmds.exp: p &ctable2[0*16] with print elements set to 10
+PASS: gdb.base/printcmds.exp: p &ctable2[1*16] with print elements set to 10
+PASS: gdb.base/printcmds.exp: p &ctable2[2*16] with print elements set to 10
+PASS: gdb.base/printcmds.exp: p &ctable2[3*16] with print elements set to 10
+PASS: gdb.base/printcmds.exp: p &ctable2[4*16] with print elements set to 10
+PASS: gdb.base/printcmds.exp: p &ctable2[5*16] with print elements set to 10
+PASS: gdb.base/printcmds.exp: p &ctable2[6*16] with print elements set to 10
+PASS: gdb.base/printcmds.exp: p &ctable2[7*16] with print elements set to 10
+PASS: gdb.base/printcmds.exp: p &ctable2[8*16] with print elements set to 10
+PASS: gdb.base/printcmds.exp: p &ctable2[9*16] with print elements set to 10
+PASS: gdb.base/printcmds.exp: p &ctable2[10*16] with print elements set to 10
+PASS: gdb.base/printcmds.exp: p &ctable2[11*16] with print elements set to 10
+PASS: gdb.base/printcmds.exp: p &ctable2[12*16] with print elements set to 10
+PASS: gdb.base/printcmds.exp: p &ctable2[13*16] with print elements set to 10
+PASS: gdb.base/printcmds.exp: p &ctable2[14*16] with print elements set to 10
+PASS: gdb.base/printcmds.exp: p &ctable2[15*16] with print elements set to 10
+PASS: gdb.base/printcmds.exp: set print elements 11
+PASS: gdb.base/printcmds.exp: p &ctable2[0*16] with print elements set to 11
+PASS: gdb.base/printcmds.exp: p &ctable2[1*16] with print elements set to 11
+PASS: gdb.base/printcmds.exp: p &ctable2[2*16] with print elements set to 11
+PASS: gdb.base/printcmds.exp: p &ctable2[3*16] with print elements set to 11
+PASS: gdb.base/printcmds.exp: p &ctable2[4*16] with print elements set to 11
+PASS: gdb.base/printcmds.exp: p &ctable2[5*16] with print elements set to 11
+PASS: gdb.base/printcmds.exp: p &ctable2[6*16] with print elements set to 11
+PASS: gdb.base/printcmds.exp: p &ctable2[7*16] with print elements set to 11
+PASS: gdb.base/printcmds.exp: p &ctable2[8*16] with print elements set to 11
+PASS: gdb.base/printcmds.exp: p &ctable2[9*16] with print elements set to 11
+PASS: gdb.base/printcmds.exp: p &ctable2[10*16] with print elements set to 11
+PASS: gdb.base/printcmds.exp: p &ctable2[11*16] with print elements set to 11
+PASS: gdb.base/printcmds.exp: p &ctable2[12*16] with print elements set to 11
+PASS: gdb.base/printcmds.exp: p &ctable2[13*16] with print elements set to 11
+PASS: gdb.base/printcmds.exp: p &ctable2[14*16] with print elements set to 11
+PASS: gdb.base/printcmds.exp: p &ctable2[15*16] with print elements set to 11
+PASS: gdb.base/printcmds.exp: set print elements 12
+PASS: gdb.base/printcmds.exp: p &ctable2[0*16] with print elements set to 12
+PASS: gdb.base/printcmds.exp: p &ctable2[1*16] with print elements set to 12
+PASS: gdb.base/printcmds.exp: p &ctable2[2*16] with print elements set to 12
+PASS: gdb.base/printcmds.exp: p &ctable2[3*16] with print elements set to 12
+PASS: gdb.base/printcmds.exp: p &ctable2[4*16] with print elements set to 12
+PASS: gdb.base/printcmds.exp: p &ctable2[5*16] with print elements set to 12
+PASS: gdb.base/printcmds.exp: p &ctable2[6*16] with print elements set to 12
+PASS: gdb.base/printcmds.exp: p &ctable2[7*16] with print elements set to 12
+PASS: gdb.base/printcmds.exp: p &ctable2[8*16] with print elements set to 12
+PASS: gdb.base/printcmds.exp: p &ctable2[9*16] with print elements set to 12
+PASS: gdb.base/printcmds.exp: p &ctable2[10*16] with print elements set to 12
+PASS: gdb.base/printcmds.exp: p &ctable2[11*16] with print elements set to 12
+PASS: gdb.base/printcmds.exp: p &ctable2[12*16] with print elements set to 12
+PASS: gdb.base/printcmds.exp: p &ctable2[13*16] with print elements set to 12
+PASS: gdb.base/printcmds.exp: p &ctable2[14*16] with print elements set to 12
+PASS: gdb.base/printcmds.exp: p &ctable2[15*16] with print elements set to 12
+PASS: gdb.base/printcmds.exp: set print elements 13
+PASS: gdb.base/printcmds.exp: p &ctable2[0*16] with print elements set to 13
+PASS: gdb.base/printcmds.exp: p &ctable2[1*16] with print elements set to 13
+PASS: gdb.base/printcmds.exp: p &ctable2[2*16] with print elements set to 13
+PASS: gdb.base/printcmds.exp: p &ctable2[3*16] with print elements set to 13
+PASS: gdb.base/printcmds.exp: p &ctable2[4*16] with print elements set to 13
+PASS: gdb.base/printcmds.exp: p &ctable2[5*16] with print elements set to 13
+PASS: gdb.base/printcmds.exp: p &ctable2[6*16] with print elements set to 13
+PASS: gdb.base/printcmds.exp: p &ctable2[7*16] with print elements set to 13
+PASS: gdb.base/printcmds.exp: p &ctable2[8*16] with print elements set to 13
+PASS: gdb.base/printcmds.exp: p &ctable2[9*16] with print elements set to 13
+PASS: gdb.base/printcmds.exp: p &ctable2[10*16] with print elements set to 13
+PASS: gdb.base/printcmds.exp: p &ctable2[11*16] with print elements set to 13
+PASS: gdb.base/printcmds.exp: p &ctable2[12*16] with print elements set to 13
+PASS: gdb.base/printcmds.exp: p &ctable2[13*16] with print elements set to 13
+PASS: gdb.base/printcmds.exp: p &ctable2[14*16] with print elements set to 13
+PASS: gdb.base/printcmds.exp: p &ctable2[15*16] with print elements set to 13
+PASS: gdb.base/printcmds.exp: set print elements 14
+PASS: gdb.base/printcmds.exp: p &ctable2[0*16] with print elements set to 14
+PASS: gdb.base/printcmds.exp: p &ctable2[1*16] with print elements set to 14
+PASS: gdb.base/printcmds.exp: p &ctable2[2*16] with print elements set to 14
+PASS: gdb.base/printcmds.exp: p &ctable2[3*16] with print elements set to 14
+PASS: gdb.base/printcmds.exp: p &ctable2[4*16] with print elements set to 14
+PASS: gdb.base/printcmds.exp: p &ctable2[5*16] with print elements set to 14
+PASS: gdb.base/printcmds.exp: p &ctable2[6*16] with print elements set to 14
+PASS: gdb.base/printcmds.exp: p &ctable2[7*16] with print elements set to 14
+PASS: gdb.base/printcmds.exp: p &ctable2[8*16] with print elements set to 14
+PASS: gdb.base/printcmds.exp: p &ctable2[9*16] with print elements set to 14
+PASS: gdb.base/printcmds.exp: p &ctable2[10*16] with print elements set to 14
+PASS: gdb.base/printcmds.exp: p &ctable2[11*16] with print elements set to 14
+PASS: gdb.base/printcmds.exp: p &ctable2[12*16] with print elements set to 14
+PASS: gdb.base/printcmds.exp: p &ctable2[13*16] with print elements set to 14
+PASS: gdb.base/printcmds.exp: p &ctable2[14*16] with print elements set to 14
+PASS: gdb.base/printcmds.exp: p &ctable2[15*16] with print elements set to 14
+PASS: gdb.base/printcmds.exp: set print elements 15
+PASS: gdb.base/printcmds.exp: p &ctable2[0*16] with print elements set to 15
+PASS: gdb.base/printcmds.exp: p &ctable2[1*16] with print elements set to 15
+PASS: gdb.base/printcmds.exp: p &ctable2[2*16] with print elements set to 15
+PASS: gdb.base/printcmds.exp: p &ctable2[3*16] with print elements set to 15
+PASS: gdb.base/printcmds.exp: p &ctable2[4*16] with print elements set to 15
+PASS: gdb.base/printcmds.exp: p &ctable2[5*16] with print elements set to 15
+PASS: gdb.base/printcmds.exp: p &ctable2[6*16] with print elements set to 15
+PASS: gdb.base/printcmds.exp: p &ctable2[7*16] with print elements set to 15
+PASS: gdb.base/printcmds.exp: p &ctable2[8*16] with print elements set to 15
+PASS: gdb.base/printcmds.exp: p &ctable2[9*16] with print elements set to 15
+PASS: gdb.base/printcmds.exp: p &ctable2[10*16] with print elements set to 15
+PASS: gdb.base/printcmds.exp: p &ctable2[11*16] with print elements set to 15
+PASS: gdb.base/printcmds.exp: p &ctable2[12*16] with print elements set to 15
+PASS: gdb.base/printcmds.exp: p &ctable2[13*16] with print elements set to 15
+PASS: gdb.base/printcmds.exp: p &ctable2[14*16] with print elements set to 15
+PASS: gdb.base/printcmds.exp: p &ctable2[15*16] with print elements set to 15
+PASS: gdb.base/printcmds.exp: set print elements 16
+PASS: gdb.base/printcmds.exp: p &ctable2[0*16] with print elements set to 16
+PASS: gdb.base/printcmds.exp: p &ctable2[1*16] with print elements set to 16
+PASS: gdb.base/printcmds.exp: p &ctable2[2*16] with print elements set to 16
+PASS: gdb.base/printcmds.exp: p &ctable2[3*16] with print elements set to 16
+PASS: gdb.base/printcmds.exp: p &ctable2[4*16] with print elements set to 16
+PASS: gdb.base/printcmds.exp: p &ctable2[5*16] with print elements set to 16
+PASS: gdb.base/printcmds.exp: p &ctable2[6*16] with print elements set to 16
+PASS: gdb.base/printcmds.exp: p &ctable2[7*16] with print elements set to 16
+PASS: gdb.base/printcmds.exp: p &ctable2[8*16] with print elements set to 16
+PASS: gdb.base/printcmds.exp: p &ctable2[9*16] with print elements set to 16
+PASS: gdb.base/printcmds.exp: p &ctable2[10*16] with print elements set to 16
+PASS: gdb.base/printcmds.exp: p &ctable2[11*16] with print elements set to 16
+PASS: gdb.base/printcmds.exp: p &ctable2[12*16] with print elements set to 16
+PASS: gdb.base/printcmds.exp: p &ctable2[13*16] with print elements set to 16
+PASS: gdb.base/printcmds.exp: p &ctable2[14*16] with print elements set to 16
+PASS: gdb.base/printcmds.exp: p &ctable2[15*16] with print elements set to 16
+PASS: gdb.base/printcmds.exp: correct element repeats in array embedded at offset > 0
+PASS: gdb.base/printcmds.exp: set print elements 0
+PASS: gdb.base/printcmds.exp: p teststring with elements set to 0
+PASS: gdb.base/printcmds.exp: set print elements 1
+PASS: gdb.base/printcmds.exp: p teststring with elements set to 1
+PASS: gdb.base/printcmds.exp: set print elements 5
+PASS: gdb.base/printcmds.exp: p teststring with elements set to 5
+PASS: gdb.base/printcmds.exp: set print elements 19
+PASS: gdb.base/printcmds.exp: p teststring with elements set to 19
+PASS: gdb.base/printcmds.exp: set print elements 20
+PASS: gdb.base/printcmds.exp: p teststring with elements set to 20
+PASS: gdb.base/printcmds.exp: set print elements 8
+PASS: gdb.base/printcmds.exp: p &ctable1[0]
+PASS: gdb.base/printcmds.exp: p &ctable1[1]
+PASS: gdb.base/printcmds.exp: p &ctable1[1*8]
+PASS: gdb.base/printcmds.exp: p &ctable1[2*8]
+PASS: gdb.base/printcmds.exp: p &ctable1[3*8]
+PASS: gdb.base/printcmds.exp: p &ctable1[4*8]
+PASS: gdb.base/printcmds.exp: p &ctable1[5*8]
+PASS: gdb.base/printcmds.exp: p &ctable1[6*8]
+PASS: gdb.base/printcmds.exp: p &ctable1[7*8]
+PASS: gdb.base/printcmds.exp: p &ctable1[8*8]
+PASS: gdb.base/printcmds.exp: p &ctable1[9*8]
+PASS: gdb.base/printcmds.exp: p &ctable1[10*8]
+PASS: gdb.base/printcmds.exp: p &ctable1[11*8]
+PASS: gdb.base/printcmds.exp: p &ctable1[12*8]
+PASS: gdb.base/printcmds.exp: p &ctable1[13*8]
+PASS: gdb.base/printcmds.exp: p &ctable1[14*8]
+PASS: gdb.base/printcmds.exp: p &ctable1[15*8]
+PASS: gdb.base/printcmds.exp: p &ctable1[16*8]
+PASS: gdb.base/printcmds.exp: p &ctable1[17*8]
+PASS: gdb.base/printcmds.exp: p &ctable1[18*8]
+PASS: gdb.base/printcmds.exp: p &ctable1[19*8]
+PASS: gdb.base/printcmds.exp: p &ctable1[20*8]
+PASS: gdb.base/printcmds.exp: p &ctable1[21*8]
+PASS: gdb.base/printcmds.exp: p &ctable1[22*8]
+PASS: gdb.base/printcmds.exp: p &ctable1[23*8]
+PASS: gdb.base/printcmds.exp: p &ctable1[24*8]
+PASS: gdb.base/printcmds.exp: p &ctable1[25*8]
+PASS: gdb.base/printcmds.exp: p &ctable1[26*8]
+PASS: gdb.base/printcmds.exp: p &ctable1[27*8]
+PASS: gdb.base/printcmds.exp: p &ctable1[28*8]
+PASS: gdb.base/printcmds.exp: p &ctable1[29*8]
+PASS: gdb.base/printcmds.exp: p &ctable1[30*8]
+PASS: gdb.base/printcmds.exp: p &ctable1[31*8]
+PASS: gdb.base/printcmds.exp: set print elements 24
+PASS: gdb.base/printcmds.exp: set print elements 24
+PASS: gdb.base/printcmds.exp: p a1[0]
+PASS: gdb.base/printcmds.exp: p a1[9]
+PASS: gdb.base/printcmds.exp: p a2
+PASS: gdb.base/printcmds.exp: p a2[0]
+PASS: gdb.base/printcmds.exp: p a2[3]
+PASS: gdb.base/printcmds.exp: set print null-stop on
+PASS: gdb.base/printcmds.exp: print a2 with null-stop on
+PASS: gdb.base/printcmds.exp: set print null-stop off
+PASS: gdb.base/printcmds.exp: p int1dim[0]@2
+PASS: gdb.base/printcmds.exp: p int1dim[0]@2@3
+PASS: gdb.base/printcmds.exp: set print elements 24
+PASS: gdb.base/printcmds.exp: set print address on
+PASS: gdb.base/printcmds.exp: p arrays
+PASS: gdb.base/printcmds.exp: p parrays
+PASS: gdb.base/printcmds.exp: p parrays->array1
+PASS: gdb.base/printcmds.exp: p &parrays->array1
+PASS: gdb.base/printcmds.exp: p parrays->array2
+PASS: gdb.base/printcmds.exp: p &parrays->array2
+PASS: gdb.base/printcmds.exp: p parrays->array3
+PASS: gdb.base/printcmds.exp: p &parrays->array3
+PASS: gdb.base/printcmds.exp: p parrays->array4
+PASS: gdb.base/printcmds.exp: p &parrays->array4
+PASS: gdb.base/printcmds.exp: p parrays->array5
+PASS: gdb.base/printcmds.exp: p &parrays->array5
+PASS: gdb.base/printcmds.exp: set print address off
+PASS: gdb.base/printcmds.exp: set print elements 50
+PASS: gdb.base/printcmds.exp: p "a string"
+PASS: gdb.base/printcmds.exp: p "embedded \000 null"
+PASS: gdb.base/printcmds.exp: p "abcd"[2]
+PASS: gdb.base/printcmds.exp: p sizeof ("abcdef")
+PASS: gdb.base/printcmds.exp: ptype "foo"
+FAIL: gdb.base/printcmds.exp: p *"foo" (the program exited)
+PASS: gdb.base/printcmds.exp: ptype *"foo"
+FAIL: gdb.base/printcmds.exp: p &*"foo"
+FAIL: gdb.base/printcmds.exp: ptype &*"foo"
+FAIL: gdb.base/printcmds.exp: p (char *)"foo"
+PASS: gdb.base/printcmds.exp: print {'a','b','c'}
+PASS: gdb.base/printcmds.exp: print {4,5,6}[2]
+PASS: gdb.base/printcmds.exp: print *&{4,5,6}[1]
+PASS: gdb.base/printcmds.exp: print some_volatile_enum
+PASS: gdb.base/printcmds.exp: print three
+PASS: gdb.base/printcmds.exp: printf "x=%d,y=%d,z=%d\n", 5, 6, 7
+FAIL: gdb.base/printcmds.exp: printf "string=%.4sxx\n", teststring
+FAIL: gdb.base/printcmds.exp: printf "string=%sxx\n", teststring
+PASS: gdb.base/printcmds.exp: printf "%f is fun\n", 1.0
+PASS: gdb.base/printcmds.exp: printf "x=%d,y=%f,z=%d\n", 5, 6.0, 7
+PASS: gdb.base/printcmds.exp: printf "%x %f, %c %x, %x, %f\n", 0xbad, -99.541, 'z', 0xfeedface, 0xdeadbeef, 5.0
+PASS: gdb.base/printcmds.exp: printf "%c\n", "x"[1,0]
+PASS: gdb.base/printcmds.exp: printf "%%%d%%\n", 5
+PASS: gdb.base/printcmds.exp: printf "%Hf\n",1.2df
+PASS: gdb.base/printcmds.exp: printf "%Hf\n",-1.2df
+PASS: gdb.base/printcmds.exp: printf "%Hf\n",1.234567df
+PASS: gdb.base/printcmds.exp: printf "%Hf\n",-1.234567df
+PASS: gdb.base/printcmds.exp: printf "%Hf\n",1234567.df
+PASS: gdb.base/printcmds.exp: printf "%Hf\n",-1234567.df
+PASS: gdb.base/printcmds.exp: printf "%Hf\n",1.2E1df
+PASS: gdb.base/printcmds.exp: printf "%Hf\n",1.2E10df
+PASS: gdb.base/printcmds.exp: printf "%Hf\n",1.2E-10df
+PASS: gdb.base/printcmds.exp: printf "%Hf\n",1.2E96df
+PASS: gdb.base/printcmds.exp: printf "%Df\n",1.2dd
+PASS: gdb.base/printcmds.exp: printf "%Df\n",-1.2dd
+PASS: gdb.base/printcmds.exp: printf "%Df\n",1.234567890123456dd
+PASS: gdb.base/printcmds.exp: printf "%Df\n",-1.234567890123456dd
+PASS: gdb.base/printcmds.exp: printf "%Df\n",1234567890123456.dd
+PASS: gdb.base/printcmds.exp: printf "%Df\n",-1234567890123456.dd
+PASS: gdb.base/printcmds.exp: printf "%Df\n",1.2E1dd
+PASS: gdb.base/printcmds.exp: printf "%Df\n",1.2E10dd
+PASS: gdb.base/printcmds.exp: printf "%Df\n",1.2E-10dd
+PASS: gdb.base/printcmds.exp: printf "%Df\n",1.2E384dd
+PASS: gdb.base/printcmds.exp: printf "%DDf\n",1.2dl
+PASS: gdb.base/printcmds.exp: printf "%DDf\n",-1.2dl
+PASS: gdb.base/printcmds.exp: printf "%DDf\n",1.234567890123456789012345678901234dl
+PASS: gdb.base/printcmds.exp: printf "%DDf\n",-1.234567890123456789012345678901234dl
+PASS: gdb.base/printcmds.exp: printf "%DDf\n",1234567890123456789012345678901234.dl
+PASS: gdb.base/printcmds.exp: printf "%DDf\n",-1234567890123456789012345678901234.dl
+PASS: gdb.base/printcmds.exp: printf "%DDf\n",1.2E1dl
+PASS: gdb.base/printcmds.exp: printf "%DDf\n",1.2E10dl
+PASS: gdb.base/printcmds.exp: printf "%DDf\n",1.2E-10dl
+PASS: gdb.base/printcmds.exp: printf "%DDf\n",1.2E6144dl
+PASS: gdb.base/printcmds.exp: printf "%Hf %Hf\n",1.2df,1.3df
+PASS: gdb.base/printcmds.exp: set print symbol on
+PASS: gdb.base/printcmds.exp: print &three
+FAIL: gdb.base/printcmds.exp: print parrays
+PASS: gdb.base/printcmds.exp: set print symbol off
+PASS: gdb.base/printcmds.exp: print invalid_LLL
+PASS: gdb.base/printcmds.exp: print invalid_LLE
+PASS: gdb.base/printcmds.exp: print invalid_LLR
+PASS: gdb.base/printcmds.exp: print invalid_LLS
+PASS: gdb.base/printcmds.exp: print invalid_ELL
+PASS: gdb.base/printcmds.exp: print invalid_ELR
+PASS: gdb.base/printcmds.exp: print invalid_ELS
+PASS: gdb.base/printcmds.exp: print invalid_RLL
+PASS: gdb.base/printcmds.exp: print invalid_RLE
+PASS: gdb.base/printcmds.exp: print invalid_RLR
+PASS: gdb.base/printcmds.exp: print invalid_RLS
+PASS: gdb.base/printcmds.exp: print invalid_SLL
+PASS: gdb.base/printcmds.exp: print invalid_SLE
+PASS: gdb.base/printcmds.exp: print invalid_SLR
+PASS: gdb.base/printcmds.exp: print invalid_SLS
+PASS: gdb.base/printcmds.exp: print invalid_LRL
+PASS: gdb.base/printcmds.exp: print invalid_LRE
+PASS: gdb.base/printcmds.exp: print invalid_LRR
+PASS: gdb.base/printcmds.exp: print invalid_LRS
+PASS: gdb.base/printcmds.exp: print invalid_ERL
+PASS: gdb.base/printcmds.exp: print invalid_ERR
+PASS: gdb.base/printcmds.exp: print invalid_ERS
+PASS: gdb.base/printcmds.exp: print invalid_RRL
+PASS: gdb.base/printcmds.exp: print invalid_RRE
+PASS: gdb.base/printcmds.exp: print invalid_RRR
+PASS: gdb.base/printcmds.exp: print invalid_RRS
+PASS: gdb.base/printcmds.exp: print invalid_SRL
+PASS: gdb.base/printcmds.exp: print invalid_SRE
+PASS: gdb.base/printcmds.exp: print invalid_SRR
+PASS: gdb.base/printcmds.exp: print invalid_SRS
+PASS: gdb.base/printcmds.exp: print invalid_LSL
+PASS: gdb.base/printcmds.exp: print invalid_LSE
+PASS: gdb.base/printcmds.exp: print invalid_LSR
+PASS: gdb.base/printcmds.exp: print invalid_LSS
+PASS: gdb.base/printcmds.exp: print invalid_ESL
+PASS: gdb.base/printcmds.exp: print invalid_ESR
+PASS: gdb.base/printcmds.exp: print invalid_ESS
+PASS: gdb.base/printcmds.exp: print invalid_RSL
+PASS: gdb.base/printcmds.exp: print invalid_RSE
+PASS: gdb.base/printcmds.exp: print invalid_RSR
+PASS: gdb.base/printcmds.exp: print invalid_RSS
+PASS: gdb.base/printcmds.exp: print invalid_SSL
+PASS: gdb.base/printcmds.exp: print invalid_SSE
+PASS: gdb.base/printcmds.exp: print invalid_SSR
+PASS: gdb.base/printcmds.exp: print invalid_SSS
+Running ./gdb.base/print-file-var.exp ...
+PASS: gdb.base/print-file-var.exp: breapoint past v1 & v2 initialization
+PASS: gdb.base/print-file-var.exp: continue to STOP marker
+FAIL: gdb.base/print-file-var.exp: print 'print-file-var-lib1.c'::this_version_id == v1
+FAIL: gdb.base/print-file-var.exp: print 'print-file-var-lib2.c'::this_version_id == v2
+Running ./gdb.base/prologue.exp ...
+PASS: gdb.base/prologue.exp: setting breakpoint at marker
+PASS: gdb.base/prologue.exp: continue to marker
+PASS: gdb.base/prologue.exp: reading $pc: marker
+PASS: gdb.base/prologue.exp: setting breakpoint at other
+PASS: gdb.base/prologue.exp: continue to other
+PASS: gdb.base/prologue.exp: reading $pc: other
+PASS: gdb.base/prologue.exp: same pc from minimal symbol
+Running ./gdb.base/prologue-include.exp ...
+PASS: gdb.base/prologue-include.exp: breakpoint main
+Running ./gdb.base/psymtab.exp ...
+PASS: gdb.base/psymtab.exp: psymtab pending setup
+PASS: gdb.base/psymtab.exp: Don't search past end of psymtab.
+Running ./gdb.base/ptr-typedef.exp ...
+PASS: gdb.base/ptr-typedef.exp: print foo_ptr
+PASS: gdb.base/ptr-typedef.exp: print foz_ptr
+Running ./gdb.base/ptype.exp ...
+PASS: gdb.base/ptype.exp: ptype unnamed enumeration member
+PASS: gdb.base/ptype.exp: ptype structure
+PASS: gdb.base/ptype.exp: ptype v_struct1.v_float_member
+PASS: gdb.base/ptype.exp: ptype v_struct1->v_float_member
+PASS: gdb.base/ptype.exp: ptype v_t_struct_p.v_float_member
+PASS: gdb.base/ptype.exp: ptype v_t_struct_p->v_float_member
+PASS: gdb.base/ptype.exp: ptype linked list structure
+PASS: gdb.base/ptype.exp: ptype union
+PASS: gdb.base/ptype.exp: ptype linked list union
+PASS: gdb.base/ptype.exp: ptype unnamed enumeration
+PASS: gdb.base/ptype.exp: ptype named enumeration
+PASS: gdb.base/ptype.exp: ptype unnamed typedef'd enumeration
+PASS: gdb.base/ptype.exp: list main
+PASS: gdb.base/ptype.exp: whatis unnamed typedef'd enum (compiler bug in IBM's xlc)
+PASS: gdb.base/ptype.exp: printing typedef'd struct
+PASS: gdb.base/ptype.exp: printing typedef'd union
+PASS: gdb.base/ptype.exp: ptype named typedef'd enumf'd enum
+PASS: gdb.base/ptype.exp: ptype misordered enumeration
+PASS: gdb.base/ptype.exp: ptype named enumeration member
+PASS: gdb.base/ptype.exp: ptype unnamed enumeration member #2
+PASS: gdb.base/ptype.exp: ptype short
+PASS: gdb.base/ptype.exp: ptype int
+PASS: gdb.base/ptype.exp: ptype t_char_array
+PASS: gdb.base/ptype.exp: ptype pv_char_array
+PASS: gdb.base/ptype.exp: ptype outer structure
+PASS: gdb.base/ptype.exp: ptype inner structure
+PASS: gdb.base/ptype.exp: ptype inner union
+PASS: gdb.base/ptype.exp: ptype nested structure
+PASS: gdb.base/ptype.exp: ptype outer int
+PASS: gdb.base/ptype.exp: ptype nested structure #2
+PASS: gdb.base/ptype.exp: ptype inner int
+PASS: gdb.base/ptype.exp: ptype nested union
+PASS: gdb.base/ptype.exp: ptype the_highest
+PASS: gdb.base/ptype.exp: ptype the_highest
+PASS: gdb.base/ptype.exp: ptype func_type
+PASS: gdb.base/ptype.exp: ptype old_fptr
+PASS: gdb.base/ptype.exp: ptype new_fptr
+PASS: gdb.base/ptype.exp: ptype fptr
+PASS: gdb.base/ptype.exp: ptype fptr2
+PASS: gdb.base/ptype.exp: ptype xptr
+PASS: gdb.base/ptype.exp: ptype ffptr
+PASS: gdb.base/ptype.exp: ptype fffptr
+PASS: gdb.base/ptype.exp: list intfoo
+PASS: gdb.base/ptype.exp: ptype foo typedef after first list of intfoo
+PASS: gdb.base/ptype.exp: list charfoo
+PASS: gdb.base/ptype.exp: ptype foo typedef after first list of charfoo
+PASS: gdb.base/ptype.exp: list intfoo
+PASS: gdb.base/ptype.exp: ptype foo typedef after second list of intfoo
+PASS: gdb.base/ptype.exp: list charfoo
+PASS: gdb.base/ptype.exp: ptype foo typedef after second list of charfoo
+PASS: gdb.base/ptype.exp: ptype "abc"
+PASS: gdb.base/ptype.exp: ptype {'a','b','c'}
+PASS: gdb.base/ptype.exp: ptype {0,1,2}
+PASS: gdb.base/ptype.exp: ptype {(long)0,(long)1,(long)2}
+PASS: gdb.base/ptype.exp: ptype {(float)0,(float)1,(float)2}
+PASS: gdb.base/ptype.exp: ptype {{0,1,2},{3,4,5}}
+PASS: gdb.base/ptype.exp: ptype {4,5,6}[2]
+PASS: gdb.base/ptype.exp: ptype *&{4,5,6}[1]
+PASS: gdb.base/ptype.exp: ptype $pc
+Running ./gdb.base/radix.exp ...
+PASS: gdb.base/radix.exp: initialize radix, input radix 2
+PASS: gdb.base/radix.exp: set input-radix 2
+PASS: gdb.base/radix.exp: show radix, input radix 2
+PASS: gdb.base/radix.exp: print 010; expect 8; input radix 2
+PASS: gdb.base/radix.exp: print 20.; expect 20; input radix 2
+PASS: gdb.base/radix.exp: print (int) 20.; expect 20; input radix 2
+PASS: gdb.base/radix.exp: print 0xf; expect 15; input radix 2
+PASS: gdb.base/radix.exp: print 0; expect 0; input radix 2
+PASS: gdb.base/radix.exp: print 1; expect 1; input radix 2
+PASS: gdb.base/radix.exp: print -1; expect -1; input radix 2
+PASS: gdb.base/radix.exp: print 10; expect 2; input radix 2
+PASS: gdb.base/radix.exp: print 11; expect 3; input radix 2
+PASS: gdb.base/radix.exp: print -10; expect -2; input radix 2
+PASS: gdb.base/radix.exp: print -11; expect -3; input radix 2
+PASS: gdb.base/radix.exp: print 100; expect 4; input radix 2
+PASS: gdb.base/radix.exp: print 101; expect 5; input radix 2
+PASS: gdb.base/radix.exp: print -100; expect -4; input radix 2
+PASS: gdb.base/radix.exp: print -101; expect -5; input radix 2
+PASS: gdb.base/radix.exp: print 10101; expect 21; input radix 2
+PASS: gdb.base/radix.exp: print 4; expect Invalid number "4"\.; input radix 2
+PASS: gdb.base/radix.exp: print -2; expect Invalid number "2"\.; input radix 2
+PASS: gdb.base/radix.exp: initialize radix, input radix 3
+PASS: gdb.base/radix.exp: set input-radix 3
+PASS: gdb.base/radix.exp: show radix, input radix 3
+PASS: gdb.base/radix.exp: print 010; expect 8; input radix 3
+PASS: gdb.base/radix.exp: print 20.; expect 20; input radix 3
+PASS: gdb.base/radix.exp: print (int) 20.; expect 20; input radix 3
+PASS: gdb.base/radix.exp: print 0xf; expect 15; input radix 3
+PASS: gdb.base/radix.exp: print 0; expect 0; input radix 3
+PASS: gdb.base/radix.exp: print 1; expect 1; input radix 3
+PASS: gdb.base/radix.exp: print -1; expect -1; input radix 3
+PASS: gdb.base/radix.exp: print 10; expect 3; input radix 3
+PASS: gdb.base/radix.exp: print 11; expect 4; input radix 3
+PASS: gdb.base/radix.exp: print -10; expect -3; input radix 3
+PASS: gdb.base/radix.exp: print -11; expect -4; input radix 3
+PASS: gdb.base/radix.exp: print 100; expect 9; input radix 3
+PASS: gdb.base/radix.exp: print 101; expect 10; input radix 3
+PASS: gdb.base/radix.exp: print -100; expect -9; input radix 3
+PASS: gdb.base/radix.exp: print -101; expect -10; input radix 3
+PASS: gdb.base/radix.exp: print 10101; expect 91; input radix 3
+PASS: gdb.base/radix.exp: print 2; expect 2; input radix 3
+PASS: gdb.base/radix.exp: print 20; expect 6; input radix 3
+PASS: gdb.base/radix.exp: print 3; expect Invalid number "3"\.; input radix 3
+PASS: gdb.base/radix.exp: print 30; expect Invalid number "30"\.; input radix 2
+PASS: gdb.base/radix.exp: initialize radix, input radix 8
+PASS: gdb.base/radix.exp: set input-radix 8
+PASS: gdb.base/radix.exp: show radix, input radix 8
+PASS: gdb.base/radix.exp: print 010; expect 8; input radix 8
+PASS: gdb.base/radix.exp: print 20.; expect 20; input radix 8
+PASS: gdb.base/radix.exp: print (int) 20.; expect 20; input radix 8
+PASS: gdb.base/radix.exp: print 0xf; expect 15; input radix 8
+PASS: gdb.base/radix.exp: print 0; expect 0; input radix 8
+PASS: gdb.base/radix.exp: print 1; expect 1; input radix 8
+PASS: gdb.base/radix.exp: print -1; expect -1; input radix 8
+PASS: gdb.base/radix.exp: print 10; expect 8; input radix 8
+PASS: gdb.base/radix.exp: print 11; expect 9; input radix 8
+PASS: gdb.base/radix.exp: print -10; expect -8; input radix 8
+PASS: gdb.base/radix.exp: print -11; expect -9; input radix 8
+PASS: gdb.base/radix.exp: print 100; expect 64; input radix 8
+PASS: gdb.base/radix.exp: print 101; expect 65; input radix 8
+PASS: gdb.base/radix.exp: print -100; expect -64; input radix 8
+PASS: gdb.base/radix.exp: print -101; expect -65; input radix 8
+PASS: gdb.base/radix.exp: print 10101; expect 4161; input radix 8
+PASS: gdb.base/radix.exp: print 20; expect 16; input radix 8
+PASS: gdb.base/radix.exp: print -20; expect -16; input radix 8
+PASS: gdb.base/radix.exp: print 8; expect Invalid number "8".; input radix 8
+PASS: gdb.base/radix.exp: print -9; expect Invalid number "9".; input radix 8
+PASS: gdb.base/radix.exp: initialize radix, input radix 10
+PASS: gdb.base/radix.exp: set input-radix 10
+PASS: gdb.base/radix.exp: show radix, input radix 10
+PASS: gdb.base/radix.exp: print 010; expect 8; input radix 10
+PASS: gdb.base/radix.exp: print 20.; expect 20; input radix 10
+PASS: gdb.base/radix.exp: print (int) 20.; expect 20; input radix 10
+PASS: gdb.base/radix.exp: print 0xf; expect 15; input radix 10
+PASS: gdb.base/radix.exp: print 0; expect 0; input radix 10
+PASS: gdb.base/radix.exp: print 1; expect 1; input radix 10
+PASS: gdb.base/radix.exp: print -1; expect -1; input radix 10
+PASS: gdb.base/radix.exp: print 10; expect 10; input radix 10
+PASS: gdb.base/radix.exp: print 11; expect 11; input radix 10
+PASS: gdb.base/radix.exp: print -10; expect -10; input radix 10
+PASS: gdb.base/radix.exp: print -11; expect -11; input radix 10
+PASS: gdb.base/radix.exp: print 100; expect 100; input radix 10
+PASS: gdb.base/radix.exp: print 101; expect 101; input radix 10
+PASS: gdb.base/radix.exp: print -100; expect -100; input radix 10
+PASS: gdb.base/radix.exp: print -101; expect -101; input radix 10
+PASS: gdb.base/radix.exp: print 10101; expect 10101; input radix 10
+PASS: gdb.base/radix.exp: print -12; expect -12; input radix 10
+PASS: gdb.base/radix.exp: initialize radix, input radix 16
+PASS: gdb.base/radix.exp: set input-radix 16
+PASS: gdb.base/radix.exp: show radix, input radix 16
+PASS: gdb.base/radix.exp: print 010; expect 8; input radix 16
+PASS: gdb.base/radix.exp: print 20.; expect 20; input radix 16
+PASS: gdb.base/radix.exp: print (int) 20.; expect 20; input radix 16
+PASS: gdb.base/radix.exp: print 0xf; expect 15; input radix 16
+PASS: gdb.base/radix.exp: print 0; expect 0; input radix 16
+PASS: gdb.base/radix.exp: print 1; expect 1; input radix 16
+PASS: gdb.base/radix.exp: print -1; expect -1; input radix 16
+PASS: gdb.base/radix.exp: print 10; expect 16; input radix 16
+PASS: gdb.base/radix.exp: print 11; expect 17; input radix 16
+PASS: gdb.base/radix.exp: print -10; expect -16; input radix 16
+PASS: gdb.base/radix.exp: print -11; expect -17; input radix 16
+PASS: gdb.base/radix.exp: print 100; expect 256; input radix 16
+PASS: gdb.base/radix.exp: print 101; expect 257; input radix 16
+PASS: gdb.base/radix.exp: print -100; expect -256; input radix 16
+PASS: gdb.base/radix.exp: print -101; expect -257; input radix 16
+PASS: gdb.base/radix.exp: print 10101; expect 65793; input radix 16
+PASS: gdb.base/radix.exp: initialize radix, output radix 8
+PASS: gdb.base/radix.exp: set output-radix 8
+PASS: gdb.base/radix.exp: show radix, output radix 8
+PASS: gdb.base/radix.exp: print 010; expect 010; output radix 8
+PASS: gdb.base/radix.exp: print 0xf; expect 17; output radix 8
+PASS: gdb.base/radix.exp: print 10; expect 12; output radix 8
+PASS: gdb.base/radix.exp: print 100; expect 144; output radix 8
+KFAIL: gdb.base/radix.exp: print 20.; expect 24; output radix 8 (PRMS: gdb/1715)
+PASS: gdb.base/radix.exp: print (int) 20.; expect 24; output radix 8
+PASS: gdb.base/radix.exp: initialize radix, output radix 10
+PASS: gdb.base/radix.exp: set output-radix 10
+PASS: gdb.base/radix.exp: show radix, output radix 10
+PASS: gdb.base/radix.exp: print 010; expect 8; output radix 10
+PASS: gdb.base/radix.exp: print 0xf; expect 15; output radix 10
+PASS: gdb.base/radix.exp: print 10; expect 10; output radix 10
+PASS: gdb.base/radix.exp: print 100; expect 100; output radix 10
+PASS: gdb.base/radix.exp: print 20.; expect 20; output radix 10
+PASS: gdb.base/radix.exp: print (int) 20.; expect 20; output radix 10
+PASS: gdb.base/radix.exp: initialize radix, output radix 16
+PASS: gdb.base/radix.exp: set output-radix 16
+PASS: gdb.base/radix.exp: show radix, output radix 16
+PASS: gdb.base/radix.exp: print 010; expect 8; output radix 16
+PASS: gdb.base/radix.exp: print 0xf; expect f; output radix 16
+PASS: gdb.base/radix.exp: print 10; expect a; output radix 16
+PASS: gdb.base/radix.exp: print 100; expect 64; output radix 16
+KFAIL: gdb.base/radix.exp: print 20.; expect 14; output radix 16 (PRMS: gdb/1715)
+PASS: gdb.base/radix.exp: print (int) 20.; expect 14; output radix 16
+PASS: gdb.base/radix.exp: Reset radices
+PASS: gdb.base/radix.exp: Reject input-radix 0
+PASS: gdb.base/radix.exp: Input radix unchanged after rejecting 0
+PASS: gdb.base/radix.exp: Reject input-radix 1
+PASS: gdb.base/radix.exp: Input radix unchanged after rejecting 1
+PASS: gdb.base/radix.exp: Reject output-radix 0
+PASS: gdb.base/radix.exp: Output radix unchanged after rejecting 0
+PASS: gdb.base/radix.exp: Reject output-radix 1
+PASS: gdb.base/radix.exp: Output radix unchanged after rejecting 1
+PASS: gdb.base/radix.exp: set radix 7 rejected
+PASS: gdb.base/radix.exp: Output radix unchanged after rejection through set radix command
+Running ./gdb.base/randomize.exp ...
+UNTESTED: gdb.base/randomize.exp: Disabling randomization is not supported on this Linux GDB
+Running ./gdb.base/random-signal.exp ...
+PASS: gdb.base/random-signal.exp: set can-use-hw-watchpoints 0
+PASS: gdb.base/random-signal.exp: watch v
+PASS: gdb.base/random-signal.exp: continue
+FAIL: gdb.base/random-signal.exp: stop with control-c
+Running ./gdb.base/readline-ask.exp ...
+PASS: gdb.base/readline-ask.exp: set width 50
+PASS: gdb.base/readline-ask.exp: set height 3
+PASS: gdb.base/readline-ask.exp: bell for more message
+FAIL: gdb.base/readline-ask.exp: more message for 01 and 02
+FAIL: gdb.base/readline-ask.exp: more message for 03
+FAIL: gdb.base/readline-ask.exp: more finish for 04
+ERROR: Undefined command "foo".
+UNRESOLVED: gdb.base/readline-ask.exp: abort more message
+PASS: gdb.base/readline-ask.exp: bell for ask message
+FAIL: gdb.base/readline-ask.exp: ask message
+Running ./gdb.base/readline.exp ...
+PASS: gdb.base/readline.exp: Simple operate-and-get-next - send p 1
+PASS: gdb.base/readline.exp: Simple operate-and-get-next - send p 2
+PASS: gdb.base/readline.exp: Simple operate-and-get-next - send p 3
+PASS: gdb.base/readline.exp: Simple operate-and-get-next - C-p to p 3
+PASS: gdb.base/readline.exp: Simple operate-and-get-next - C-p to p 2
+PASS: gdb.base/readline.exp: Simple operate-and-get-next - C-p to p 1
+PASS: gdb.base/readline.exp: Simple operate-and-get-next - C-o for p 1
+PASS: gdb.base/readline.exp: Simple operate-and-get-next - C-o for p 2
+PASS: gdb.base/readline.exp: Simple operate-and-get-next - C-o for p 3
+PASS: gdb.base/readline.exp: Simple operate-and-get-next - final prompt
+PASS: gdb.base/readline.exp: operate-and-get-next with secondary prompt - send if 1 > 0
+PASS: gdb.base/readline.exp: operate-and-get-next with secondary prompt - send p 5
+PASS: gdb.base/readline.exp: operate-and-get-next with secondary prompt - send end
+PASS: gdb.base/readline.exp: operate-and-get-next with secondary prompt - C-p to end
+PASS: gdb.base/readline.exp: operate-and-get-next with secondary prompt - C-p to p 5
+PASS: gdb.base/readline.exp: operate-and-get-next with secondary prompt - C-p to if 1 > 0
+PASS: gdb.base/readline.exp: operate-and-get-next with secondary prompt - C-o for if 1 > 0
+PASS: gdb.base/readline.exp: operate-and-get-next with secondary prompt - C-o for p 5
+PASS: gdb.base/readline.exp: operate-and-get-next with secondary prompt - C-o for end
+PASS: gdb.base/readline.exp: operate-and-get-next with secondary prompt - final prompt
+PASS: gdb.base/readline.exp: print 42
+PASS: gdb.base/readline.exp: arrow keys with secondary prompt
+PASS: gdb.base/readline.exp: Simple operate-and-get-next - send p 7
+PASS: gdb.base/readline.exp: Simple operate-and-get-next - send p 8
+PASS: gdb.base/readline.exp: Simple operate-and-get-next - send p 9
+PASS: gdb.base/readline.exp: Simple operate-and-get-next - C-p to p 9
+PASS: gdb.base/readline.exp: Simple operate-and-get-next - C-p to p 8
+PASS: gdb.base/readline.exp: Simple operate-and-get-next - C-p to p 7
+PASS: gdb.base/readline.exp: Simple operate-and-get-next - C-o for p 7
+PASS: gdb.base/readline.exp: Simple operate-and-get-next - C-o for p 8
+PASS: gdb.base/readline.exp: Simple operate-and-get-next - C-o for p 9
+PASS: gdb.base/readline.exp: Simple operate-and-get-next - final prompt
+Running ./gdb.base/realname-expand.exp ...
+PASS: gdb.base/realname-expand.exp: set basenames-may-differ on
+PASS: gdb.base/realname-expand.exp: rbreak realname-expand-real.c:func
+PASS: gdb.base/realname-expand.exp: set basenames-may-differ on
+PASS: gdb.base/realname-expand.exp: break realname-expand-real.c:func
+Running ./gdb.base/recpar.exp ...
+PASS: gdb.base/recpar.exp: break recpar.c:26 if n == 3
+PASS: gdb.base/recpar.exp: continue
+PASS: gdb.base/recpar.exp: backtrace
+PASS: gdb.base/recpar.exp: frame 2
+PASS: gdb.base/recpar.exp: print foo::val
+Running ./gdb.base/recurse.exp ...
+PASS: gdb.base/recurse.exp: next over b = 0 in first instance
+PASS: gdb.base/recurse.exp: set first instance watchpoint
+PASS: gdb.base/recurse.exp: continue to first instance watchpoint, first time
+PASS: gdb.base/recurse.exp: continue to recurse (a = 9)
+PASS: gdb.base/recurse.exp: continue to recurse (a = 8)
+PASS: gdb.base/recurse.exp: continue to recurse (a = 7)
+PASS: gdb.base/recurse.exp: continue to recurse (a = 6)
+PASS: gdb.base/recurse.exp: continue to recurse (a = 5)
+PASS: gdb.base/recurse.exp: next over b = 0 in second instance
+PASS: gdb.base/recurse.exp: set second instance watchpoint
+PASS: gdb.base/recurse.exp: continue to second instance watchpoint, first time
+PASS: gdb.base/recurse.exp: continue to recurse (a = 4)
+PASS: gdb.base/recurse.exp: continue to recurse (a = 3)
+PASS: gdb.base/recurse.exp: continue to recurse (a = 2)
+PASS: gdb.base/recurse.exp: continue to recurse (a = 1)
+PASS: gdb.base/recurse.exp: continue to second instance watchpoint, second time
+PASS: gdb.base/recurse.exp: second instance watchpoint deleted when leaving scope
+PASS: gdb.base/recurse.exp: continue to first instance watchpoint, second time
+PASS: gdb.base/recurse.exp: first instance watchpoint deleted when leaving scope
+Running ./gdb.base/relational.exp ...
+PASS: gdb.base/relational.exp: set variable x=14
+PASS: gdb.base/relational.exp: set variable y=2
+PASS: gdb.base/relational.exp: set variable z=2
+PASS: gdb.base/relational.exp: set variable w=3
+PASS: gdb.base/relational.exp: print value of x
+PASS: gdb.base/relational.exp: print value of y
+PASS: gdb.base/relational.exp: print value of z
+PASS: gdb.base/relational.exp: print value of w
+PASS: gdb.base/relational.exp: print value of x<y
+PASS: gdb.base/relational.exp: print value of x<=y
+PASS: gdb.base/relational.exp: print value of x>y
+PASS: gdb.base/relational.exp: print value of x>=y
+PASS: gdb.base/relational.exp: print value of x==y
+PASS: gdb.base/relational.exp: print value of x!=y
+PASS: gdb.base/relational.exp: set variable x
+PASS: gdb.base/relational.exp: set variable y
+PASS: gdb.base/relational.exp: set variable z
+PASS: gdb.base/relational.exp: print value of x<y<z
+PASS: gdb.base/relational.exp: print value of x<=y<=z
+PASS: gdb.base/relational.exp: print value of x>y>z
+PASS: gdb.base/relational.exp: print value of x>=y>=z
+PASS: gdb.base/relational.exp: set variable x
+PASS: gdb.base/relational.exp: set variable y
+PASS: gdb.base/relational.exp: set variable z
+PASS: gdb.base/relational.exp: print value of x==y==z
+PASS: gdb.base/relational.exp: set variable z
+PASS: gdb.base/relational.exp: print value of x!=y!=z
+PASS: gdb.base/relational.exp: set variable x
+PASS: gdb.base/relational.exp: set variable y
+PASS: gdb.base/relational.exp: set variable z
+PASS: gdb.base/relational.exp: print value of x<y==z
+PASS: gdb.base/relational.exp: print value of x<y!=z
+PASS: gdb.base/relational.exp: set variable x
+PASS: gdb.base/relational.exp: set variable y
+PASS: gdb.base/relational.exp: set variable z
+PASS: gdb.base/relational.exp: print value of x<y<=z
+PASS: gdb.base/relational.exp: print value of x<y>=z
+PASS: gdb.base/relational.exp: set variable z
+PASS: gdb.base/relational.exp: print value of x<y>z
+PASS: gdb.base/relational.exp: set variable x
+PASS: gdb.base/relational.exp: print value of x>y>=z
+PASS: gdb.base/relational.exp: set variable z
+PASS: gdb.base/relational.exp: print value of x>y==z
+PASS: gdb.base/relational.exp: set variable x
+PASS: gdb.base/relational.exp: set variable z
+PASS: gdb.base/relational.exp: print value of x>y!=z
+PASS: gdb.base/relational.exp: set x to 4
+PASS: gdb.base/relational.exp: print value of x>y<=z
+PASS: gdb.base/relational.exp: print value of x>=y==z
+PASS: gdb.base/relational.exp: set variable x
+PASS: gdb.base/relational.exp: print value of x>=y!=z
+PASS: gdb.base/relational.exp: set variable x
+PASS: gdb.base/relational.exp: set variable z
+PASS: gdb.base/relational.exp: print value of x>=y<=z
+PASS: gdb.base/relational.exp: print value of x<=y==z
+PASS: gdb.base/relational.exp: set variable x
+PASS: gdb.base/relational.exp: print value of x<=y!=z
+PASS: gdb.base/relational.exp: print value of x==y!=z
+PASS: gdb.base/relational.exp: set variable z
+PASS: gdb.base/relational.exp: print value of x>=(y<z)
+PASS: gdb.base/relational.exp: print value of x>=(y!=z)
+PASS: gdb.base/relational.exp: print value of x==(y==z)
+PASS: gdb.base/relational.exp: set variable x
+PASS: gdb.base/relational.exp: set variable z
+PASS: gdb.base/relational.exp: print value of (x==y)<z
+Running ./gdb.base/relativedebug.exp ...
+PASS: gdb.base/relativedebug.exp: continue
+FAIL: gdb.base/relativedebug.exp: pause found in backtrace
+Running ./gdb.base/relocate.exp ...
+PASS: gdb.base/relocate.exp: add-symbol-file relocate.o 0
+PASS: gdb.base/relocate.exp: get address of static_foo
+PASS: gdb.base/relocate.exp: get address of static_bar
+PASS: gdb.base/relocate.exp: static variables have different addresses
+PASS: gdb.base/relocate.exp: get address of global_foo
+PASS: gdb.base/relocate.exp: get address of global_bar
+PASS: gdb.base/relocate.exp: global variables have different addresses
+PASS: gdb.base/relocate.exp: get address of function_foo
+PASS: gdb.base/relocate.exp: get address of function_bar
+PASS: gdb.base/relocate.exp: functions have different addresses
+PASS: gdb.base/relocate.exp: set $offset = 0x10000
+PASS: gdb.base/relocate.exp: add-symbol-file relocate.o $offset
+PASS: gdb.base/relocate.exp: get address of function_foo
+PASS: gdb.base/relocate.exp: function foo has a different address
+PASS: gdb.base/relocate.exp: print static_foo
+PASS: gdb.base/relocate.exp: print static_bar
+PASS: gdb.base/relocate.exp: print global_foo
+PASS: gdb.base/relocate.exp: print global_bar
+Running ./gdb.base/remote.exp ...
+PASS: gdb.base/remote.exp: write-packet default
+PASS: gdb.base/remote.exp: set write-packet - NULL
+PASS: gdb.base/remote.exp: set remote memory-write-packet-size 20
+PASS: gdb.base/remote.exp: set write-packet - small
+PASS: gdb.base/remote.exp: set remote memory-write-packet-size 1
+PASS: gdb.base/remote.exp: set write-packet - very-small
+PASS: gdb.base/remote.exp: timed download `remote' - limit, 398 - set packet size
+PASS: gdb.base/remote.exp: timed download `remote' - limit, 398
+PASS: gdb.base/remote.exp: timed download `remote' - limit, 400 - set packet size
+PASS: gdb.base/remote.exp: timed download `remote' - limit, 400
+PASS: gdb.base/remote.exp: timed download `remote' - fixed, 0 - set packet size
+PASS: gdb.base/remote.exp: timed download `remote' - fixed, 0 - set write size class
+PASS: gdb.base/remote.exp: timed download `remote' - fixed, 16385 - set packet size
+PASS: gdb.base/remote.exp: timed download `remote' - limit, 0 - set packet size
+PASS: gdb.base/remote.exp: timed download `remote' - limit, 0
+PASS: gdb.base/remote.exp: get integer valueof "sizeof (random_data)" (49152)
+PASS: gdb.base/remote.exp: x/8ub random_data
+PASS: gdb.base/remote.exp: x/8ub random_data + 400 - 4
+PASS: gdb.base/remote.exp: x/8ub random_data + 16384 - 4
+PASS: gdb.base/remote.exp: set remote memory-read-packet-size 16
+PASS: gdb.base/remote.exp: show remote memory-read-packet-size
+PASS: gdb.base/remote.exp: x/17ub random_data
+PASS: gdb.base/remote.exp: set remote hardware-watchpoint-limit -1
+PASS: gdb.base/remote.exp: set remote hardware-breakpoint-limit -1
+PASS: gdb.base/remote.exp: set remote hardware-watchpoint-limit 2147483647
+PASS: gdb.base/remote.exp: set remote hardware-breakpoint-limit 2147483647
+Running ./gdb.base/remotetimeout.exp ...
+Running ./gdb.base/reread.exp ...
+FAIL: gdb.base/reread.exp: breakpoint foo in first file
+FAIL: gdb.base/reread.exp: run to foo()
+UNSUPPORTED: gdb.base/reread.exp: run to foo() second time
+UNSUPPORTED: gdb.base/reread.exp: second pass: GDB should check for changes before running
+Running ./gdb.base/restore.exp ...
+PASS: gdb.base/restore.exp: tbreak caller1
+PASS: gdb.base/restore.exp: run to caller1
+PASS: gdb.base/restore.exp: caller1 calls callee1; tbreak callee
+PASS: gdb.base/restore.exp: caller1 calls callee1; continue to callee
+PASS: gdb.base/restore.exp: caller1 calls callee1; return callee now
+PASS: gdb.base/restore.exp: caller1 calls callee1; return restored l1 to 32492
+PASS: gdb.base/restore.exp: caller1 calls callee2; tbreak callee
+PASS: gdb.base/restore.exp: caller1 calls callee2; continue to callee
+PASS: gdb.base/restore.exp: caller1 calls callee2; return callee now
+PASS: gdb.base/restore.exp: caller1 calls callee2; return restored l1 to 32492
+PASS: gdb.base/restore.exp: caller1 calls callee3; tbreak callee
+PASS: gdb.base/restore.exp: caller1 calls callee3; continue to callee
+PASS: gdb.base/restore.exp: caller1 calls callee3; return callee now
+PASS: gdb.base/restore.exp: caller1 calls callee3; return restored l1 to 32492
+PASS: gdb.base/restore.exp: caller1 calls callee4; tbreak callee
+PASS: gdb.base/restore.exp: caller1 calls callee4; continue to callee
+PASS: gdb.base/restore.exp: caller1 calls callee4; return callee now
+PASS: gdb.base/restore.exp: caller1 calls callee4; return restored l1 to 32492
+PASS: gdb.base/restore.exp: caller1 calls callee5; tbreak callee
+PASS: gdb.base/restore.exp: caller1 calls callee5; continue to callee
+PASS: gdb.base/restore.exp: caller1 calls callee5; return callee now
+PASS: gdb.base/restore.exp: caller1 calls callee5; return restored l1 to 32492
+PASS: gdb.base/restore.exp: tbreak caller2
+PASS: gdb.base/restore.exp: run to caller2
+PASS: gdb.base/restore.exp: caller2 calls callee1; tbreak callee
+PASS: gdb.base/restore.exp: caller2 calls callee1; continue to callee
+PASS: gdb.base/restore.exp: caller2 calls callee1; return callee now
+PASS: gdb.base/restore.exp: caller2 calls callee1; return restored l1 to 32492
+PASS: gdb.base/restore.exp: caller2 calls callee1; return restored l2 to 32493
+PASS: gdb.base/restore.exp: caller2 calls callee2; tbreak callee
+PASS: gdb.base/restore.exp: caller2 calls callee2; continue to callee
+PASS: gdb.base/restore.exp: caller2 calls callee2; return callee now
+PASS: gdb.base/restore.exp: caller2 calls callee2; return restored l1 to 32492
+PASS: gdb.base/restore.exp: caller2 calls callee2; return restored l2 to 32493
+PASS: gdb.base/restore.exp: caller2 calls callee3; tbreak callee
+PASS: gdb.base/restore.exp: caller2 calls callee3; continue to callee
+PASS: gdb.base/restore.exp: caller2 calls callee3; return callee now
+PASS: gdb.base/restore.exp: caller2 calls callee3; return restored l1 to 32492
+PASS: gdb.base/restore.exp: caller2 calls callee3; return restored l2 to 32493
+PASS: gdb.base/restore.exp: caller2 calls callee4; tbreak callee
+PASS: gdb.base/restore.exp: caller2 calls callee4; continue to callee
+PASS: gdb.base/restore.exp: caller2 calls callee4; return callee now
+PASS: gdb.base/restore.exp: caller2 calls callee4; return restored l1 to 32492
+PASS: gdb.base/restore.exp: caller2 calls callee4; return restored l2 to 32493
+PASS: gdb.base/restore.exp: caller2 calls callee5; tbreak callee
+PASS: gdb.base/restore.exp: caller2 calls callee5; continue to callee
+PASS: gdb.base/restore.exp: caller2 calls callee5; return callee now
+PASS: gdb.base/restore.exp: caller2 calls callee5; return restored l1 to 32492
+PASS: gdb.base/restore.exp: caller2 calls callee5; return restored l2 to 32493
+PASS: gdb.base/restore.exp: tbreak caller3
+PASS: gdb.base/restore.exp: run to caller3
+PASS: gdb.base/restore.exp: caller3 calls callee1; tbreak callee
+PASS: gdb.base/restore.exp: caller3 calls callee1; continue to callee
+PASS: gdb.base/restore.exp: caller3 calls callee1; return callee now
+PASS: gdb.base/restore.exp: caller3 calls callee1; return restored l1 to 32492
+PASS: gdb.base/restore.exp: caller3 calls callee1; return restored l2 to 32493
+PASS: gdb.base/restore.exp: caller3 calls callee1; return restored l3 to 32494
+PASS: gdb.base/restore.exp: caller3 calls callee2; tbreak callee
+PASS: gdb.base/restore.exp: caller3 calls callee2; continue to callee
+PASS: gdb.base/restore.exp: caller3 calls callee2; return callee now
+PASS: gdb.base/restore.exp: caller3 calls callee2; return restored l1 to 32492
+PASS: gdb.base/restore.exp: caller3 calls callee2; return restored l2 to 32493
+PASS: gdb.base/restore.exp: caller3 calls callee2; return restored l3 to 32494
+PASS: gdb.base/restore.exp: caller3 calls callee3; tbreak callee
+PASS: gdb.base/restore.exp: caller3 calls callee3; continue to callee
+PASS: gdb.base/restore.exp: caller3 calls callee3; return callee now
+PASS: gdb.base/restore.exp: caller3 calls callee3; return restored l1 to 32492
+PASS: gdb.base/restore.exp: caller3 calls callee3; return restored l2 to 32493
+PASS: gdb.base/restore.exp: caller3 calls callee3; return restored l3 to 32494
+PASS: gdb.base/restore.exp: caller3 calls callee4; tbreak callee
+PASS: gdb.base/restore.exp: caller3 calls callee4; continue to callee
+PASS: gdb.base/restore.exp: caller3 calls callee4; return callee now
+PASS: gdb.base/restore.exp: caller3 calls callee4; return restored l1 to 32492
+PASS: gdb.base/restore.exp: caller3 calls callee4; return restored l2 to 32493
+PASS: gdb.base/restore.exp: caller3 calls callee4; return restored l3 to 32494
+PASS: gdb.base/restore.exp: caller3 calls callee5; tbreak callee
+PASS: gdb.base/restore.exp: caller3 calls callee5; continue to callee
+PASS: gdb.base/restore.exp: caller3 calls callee5; return callee now
+PASS: gdb.base/restore.exp: caller3 calls callee5; return restored l1 to 32492
+PASS: gdb.base/restore.exp: caller3 calls callee5; return restored l2 to 32493
+PASS: gdb.base/restore.exp: caller3 calls callee5; return restored l3 to 32494
+PASS: gdb.base/restore.exp: tbreak caller4
+PASS: gdb.base/restore.exp: run to caller4
+PASS: gdb.base/restore.exp: caller4 calls callee1; tbreak callee
+PASS: gdb.base/restore.exp: caller4 calls callee1; continue to callee
+PASS: gdb.base/restore.exp: caller4 calls callee1; return callee now
+PASS: gdb.base/restore.exp: caller4 calls callee1; return restored l1 to 32492
+PASS: gdb.base/restore.exp: caller4 calls callee1; return restored l2 to 32493
+PASS: gdb.base/restore.exp: caller4 calls callee1; return restored l3 to 32494
+PASS: gdb.base/restore.exp: caller4 calls callee1; return restored l4 to 32495
+PASS: gdb.base/restore.exp: caller4 calls callee2; tbreak callee
+PASS: gdb.base/restore.exp: caller4 calls callee2; continue to callee
+PASS: gdb.base/restore.exp: caller4 calls callee2; return callee now
+PASS: gdb.base/restore.exp: caller4 calls callee2; return restored l1 to 32492
+PASS: gdb.base/restore.exp: caller4 calls callee2; return restored l2 to 32493
+PASS: gdb.base/restore.exp: caller4 calls callee2; return restored l3 to 32494
+PASS: gdb.base/restore.exp: caller4 calls callee2; return restored l4 to 32495
+PASS: gdb.base/restore.exp: caller4 calls callee3; tbreak callee
+PASS: gdb.base/restore.exp: caller4 calls callee3; continue to callee
+PASS: gdb.base/restore.exp: caller4 calls callee3; return callee now
+PASS: gdb.base/restore.exp: caller4 calls callee3; return restored l1 to 32492
+PASS: gdb.base/restore.exp: caller4 calls callee3; return restored l2 to 32493
+PASS: gdb.base/restore.exp: caller4 calls callee3; return restored l3 to 32494
+PASS: gdb.base/restore.exp: caller4 calls callee3; return restored l4 to 32495
+PASS: gdb.base/restore.exp: caller4 calls callee4; tbreak callee
+PASS: gdb.base/restore.exp: caller4 calls callee4; continue to callee
+PASS: gdb.base/restore.exp: caller4 calls callee4; return callee now
+PASS: gdb.base/restore.exp: caller4 calls callee4; return restored l1 to 32492
+PASS: gdb.base/restore.exp: caller4 calls callee4; return restored l2 to 32493
+PASS: gdb.base/restore.exp: caller4 calls callee4; return restored l3 to 32494
+PASS: gdb.base/restore.exp: caller4 calls callee4; return restored l4 to 32495
+PASS: gdb.base/restore.exp: caller4 calls callee5; tbreak callee
+PASS: gdb.base/restore.exp: caller4 calls callee5; continue to callee
+PASS: gdb.base/restore.exp: caller4 calls callee5; return callee now
+PASS: gdb.base/restore.exp: caller4 calls callee5; return restored l1 to 32492
+PASS: gdb.base/restore.exp: caller4 calls callee5; return restored l2 to 32493
+PASS: gdb.base/restore.exp: caller4 calls callee5; return restored l3 to 32494
+PASS: gdb.base/restore.exp: caller4 calls callee5; return restored l4 to 32495
+PASS: gdb.base/restore.exp: tbreak caller5
+PASS: gdb.base/restore.exp: run to caller5
+PASS: gdb.base/restore.exp: caller5 calls callee1; tbreak callee
+PASS: gdb.base/restore.exp: caller5 calls callee1; continue to callee
+PASS: gdb.base/restore.exp: caller5 calls callee1; return callee now
+PASS: gdb.base/restore.exp: caller5 calls callee1; return restored l1 to 32492
+PASS: gdb.base/restore.exp: caller5 calls callee1; return restored l2 to 32493
+PASS: gdb.base/restore.exp: caller5 calls callee1; return restored l3 to 32494
+PASS: gdb.base/restore.exp: caller5 calls callee1; return restored l4 to 32495
+PASS: gdb.base/restore.exp: caller5 calls callee1; return restored l5 to 32496
+PASS: gdb.base/restore.exp: caller5 calls callee2; tbreak callee
+PASS: gdb.base/restore.exp: caller5 calls callee2; continue to callee
+PASS: gdb.base/restore.exp: caller5 calls callee2; return callee now
+PASS: gdb.base/restore.exp: caller5 calls callee2; return restored l1 to 32492
+PASS: gdb.base/restore.exp: caller5 calls callee2; return restored l2 to 32493
+PASS: gdb.base/restore.exp: caller5 calls callee2; return restored l3 to 32494
+PASS: gdb.base/restore.exp: caller5 calls callee2; return restored l4 to 32495
+PASS: gdb.base/restore.exp: caller5 calls callee2; return restored l5 to 32496
+PASS: gdb.base/restore.exp: caller5 calls callee3; tbreak callee
+PASS: gdb.base/restore.exp: caller5 calls callee3; continue to callee
+PASS: gdb.base/restore.exp: caller5 calls callee3; return callee now
+PASS: gdb.base/restore.exp: caller5 calls callee3; return restored l1 to 32492
+PASS: gdb.base/restore.exp: caller5 calls callee3; return restored l2 to 32493
+PASS: gdb.base/restore.exp: caller5 calls callee3; return restored l3 to 32494
+PASS: gdb.base/restore.exp: caller5 calls callee3; return restored l4 to 32495
+PASS: gdb.base/restore.exp: caller5 calls callee3; return restored l5 to 32496
+PASS: gdb.base/restore.exp: caller5 calls callee4; tbreak callee
+PASS: gdb.base/restore.exp: caller5 calls callee4; continue to callee
+PASS: gdb.base/restore.exp: caller5 calls callee4; return callee now
+PASS: gdb.base/restore.exp: caller5 calls callee4; return restored l1 to 32492
+PASS: gdb.base/restore.exp: caller5 calls callee4; return restored l2 to 32493
+PASS: gdb.base/restore.exp: caller5 calls callee4; return restored l3 to 32494
+PASS: gdb.base/restore.exp: caller5 calls callee4; return restored l4 to 32495
+PASS: gdb.base/restore.exp: caller5 calls callee4; return restored l5 to 32496
+PASS: gdb.base/restore.exp: caller5 calls callee5; tbreak callee
+PASS: gdb.base/restore.exp: caller5 calls callee5; continue to callee
+PASS: gdb.base/restore.exp: caller5 calls callee5; return callee now
+PASS: gdb.base/restore.exp: caller5 calls callee5; return restored l1 to 32492
+PASS: gdb.base/restore.exp: caller5 calls callee5; return restored l2 to 32493
+PASS: gdb.base/restore.exp: caller5 calls callee5; return restored l3 to 32494
+PASS: gdb.base/restore.exp: caller5 calls callee5; return restored l4 to 32495
+PASS: gdb.base/restore.exp: caller5 calls callee5; return restored l5 to 32496
+Running ./gdb.base/return2.exp ...
+PASS: gdb.base/return2.exp: set break on void_func
+PASS: gdb.base/return2.exp: continue to void_func
+PASS: gdb.base/return2.exp: return from void_func
+PASS: gdb.base/return2.exp: void function returned successfully
+PASS: gdb.base/return2.exp: set break on char_func
+PASS: gdb.base/return2.exp: continue to char_func
+PASS: gdb.base/return2.exp: return from char_func
+PASS: gdb.base/return2.exp: char value returned successfully
+PASS: gdb.base/return2.exp: validate result value not equal to program return value
+PASS: gdb.base/return2.exp: set break on short_func
+PASS: gdb.base/return2.exp: continue to short_func
+PASS: gdb.base/return2.exp: return from short_func
+PASS: gdb.base/return2.exp: short value returned successfully
+PASS: gdb.base/return2.exp: validate result value not equal to program return value
+PASS: gdb.base/return2.exp: set break on int_func
+PASS: gdb.base/return2.exp: continue to int_func
+PASS: gdb.base/return2.exp: return from int_func
+PASS: gdb.base/return2.exp: int value returned successfully
+PASS: gdb.base/return2.exp: validate result value not equal to program return value
+PASS: gdb.base/return2.exp: set break on long_func
+PASS: gdb.base/return2.exp: continue to long_func
+PASS: gdb.base/return2.exp: return from long_func
+PASS: gdb.base/return2.exp: long value returned successfully
+PASS: gdb.base/return2.exp: validate result value not equal to program return value
+PASS: gdb.base/return2.exp: set break on long_long_func
+PASS: gdb.base/return2.exp: continue to long_long_func
+PASS: gdb.base/return2.exp: return from long_long_func
+PASS: gdb.base/return2.exp: long_long value returned successfully
+PASS: gdb.base/return2.exp: validate result value not equal to program return value
+PASS: gdb.base/return2.exp: set break on float_func
+PASS: gdb.base/return2.exp: continue to float_func
+PASS: gdb.base/return2.exp: return from float_func
+PASS: gdb.base/return2.exp: float value returned successfully
+PASS: gdb.base/return2.exp: validate result value not equal to program return value
+PASS: gdb.base/return2.exp: set break on double_func
+PASS: gdb.base/return2.exp: continue to double_func
+PASS: gdb.base/return2.exp: return from double_func
+FAIL: gdb.base/return2.exp: double value returned successfully
+PASS: gdb.base/return2.exp: validate result value not equal to program return value
+Running ./gdb.base/return.exp ...
+PASS: gdb.base/return.exp: simple return
+PASS: gdb.base/return.exp: break func2
+PASS: gdb.base/return.exp: break func3
+PASS: gdb.base/return.exp: continue to return of -5
+PASS: gdb.base/return.exp: next over call to func2
+PASS: gdb.base/return.exp: correct value returned (integer test)
+PASS: gdb.base/return.exp: continue to return of -5.0
+PASS: gdb.base/return.exp: next over call to func3
+FAIL: gdb.base/return.exp: correct value returned double test (known problem with sparc solaris)
+Running ./gdb.base/return-nodebug.exp ...
+PASS: gdb.base/return-nodebug.exp: signed-char: return from function with no debug info without a cast
+PASS: gdb.base/return-nodebug.exp: signed-char: return from function with no debug info with a cast
+PASS: gdb.base/return-nodebug.exp: signed-char: advance to marker
+PASS: gdb.base/return-nodebug.exp: signed-char: full width of the returned result
+PASS: gdb.base/return-nodebug.exp: short: return from function with no debug info without a cast
+PASS: gdb.base/return-nodebug.exp: short: return from function with no debug info with a cast
+PASS: gdb.base/return-nodebug.exp: short: advance to marker
+PASS: gdb.base/return-nodebug.exp: short: full width of the returned result
+PASS: gdb.base/return-nodebug.exp: int: return from function with no debug info without a cast
+PASS: gdb.base/return-nodebug.exp: int: return from function with no debug info with a cast
+PASS: gdb.base/return-nodebug.exp: int: advance to marker
+PASS: gdb.base/return-nodebug.exp: int: full width of the returned result
+PASS: gdb.base/return-nodebug.exp: long: return from function with no debug info without a cast
+PASS: gdb.base/return-nodebug.exp: long: return from function with no debug info with a cast
+PASS: gdb.base/return-nodebug.exp: long: advance to marker
+PASS: gdb.base/return-nodebug.exp: long: full width of the returned result
+PASS: gdb.base/return-nodebug.exp: long-long: return from function with no debug info without a cast
+PASS: gdb.base/return-nodebug.exp: long-long: return from function with no debug info with a cast
+PASS: gdb.base/return-nodebug.exp: long-long: advance to marker
+PASS: gdb.base/return-nodebug.exp: long-long: full width of the returned result
+PASS: gdb.base/return-nodebug.exp: float: return from function with no debug info without a cast
+PASS: gdb.base/return-nodebug.exp: float: return from function with no debug info with a cast
+PASS: gdb.base/return-nodebug.exp: float: advance to marker
+FAIL: gdb.base/return-nodebug.exp: float: full width of the returned result
+PASS: gdb.base/return-nodebug.exp: double: return from function with no debug info without a cast
+PASS: gdb.base/return-nodebug.exp: double: return from function with no debug info with a cast
+PASS: gdb.base/return-nodebug.exp: double: advance to marker
+FAIL: gdb.base/return-nodebug.exp: double: full width of the returned result
+Running ./gdb.base/save-bp.exp ...
+PASS: gdb.base/save-bp.exp: add breakpoint commands
+PASS: gdb.base/save-bp.exp: dprintf save-bp.c:33,"At foo entry\n"
+PASS: gdb.base/save-bp.exp: save breakpoint bps
+PASS: gdb.base/save-bp.exp: source bps
+PASS: gdb.base/save-bp.exp: info break
+Running ./gdb.base/savedregs.exp ...
+PASS: gdb.base/savedregs.exp: advance thrower
+PASS: gdb.base/savedregs.exp: Get main info frame
+PASS: gdb.base/savedregs.exp: handle SIGSEGV pass print nostop
+PASS: gdb.base/savedregs.exp: handle SIGILL pass print nostop
+PASS: gdb.base/savedregs.exp: advance catcher
+PASS: gdb.base/savedregs.exp: Get sigtramp info frame
+PASS: gdb.base/savedregs.exp: Get thrower info frame
+PASS: gdb.base/savedregs.exp: Check main info frame; stack contains catcher sigtramp thrower main
+PASS: gdb.base/savedregs.exp: break caller
+PASS: gdb.base/savedregs.exp: call caller (1,2,3,4,5,6,7,8)
+PASS: gdb.base/savedregs.exp: Get dummy info frame
+PASS: gdb.base/savedregs.exp: Get catcher info frame
+PASS: gdb.base/savedregs.exp: Check sigtramp info frame; stack contains caller dummy catcher sigtramp thrower main
+PASS: gdb.base/savedregs.exp: Check thrower info frame; stack contains caller dummy catcher sigtramp thrower main
+PASS: gdb.base/savedregs.exp: Check main info frame; stack contains caller dummy catcher sigtramp thrower main
+PASS: gdb.base/savedregs.exp: advance callee
+PASS: gdb.base/savedregs.exp: Get caller info frame
+PASS: gdb.base/savedregs.exp: Check dummy info frame; stack contains callee caller dummy catcher sigtramp thrower main
+PASS: gdb.base/savedregs.exp: Check catcher info frame; stack contains callee caller dummy catcher sigtramp thrower main
+PASS: gdb.base/savedregs.exp: Check sigtramp info frame; stack contains callee caller dummy catcher sigtramp thrower main
+PASS: gdb.base/savedregs.exp: Check thrower info frame; stack contains callee caller dummy catcher sigtramp thrower main
+PASS: gdb.base/savedregs.exp: Check main info frame; stack contains callee caller dummy catcher sigtramp thrower main
+Running ./gdb.base/scope.exp ...
+PASS: gdb.base/scope.exp: print 'scope0.c'::filelocal_ro
+UNSUPPORTED: gdb.base/scope.exp: print 'scope0.c'::filelocal_bss before run
+PASS: gdb.base/scope.exp: print 'scope0.c'::filelocal before run
+PASS: gdb.base/scope.exp: next over init0() in main
+PASS: gdb.base/scope.exp: print filelocal
+PASS: gdb.base/scope.exp: print 'scope0.c'::filelocal at main
+PASS: gdb.base/scope.exp: print filelocal_bss
+PASS: gdb.base/scope.exp: print 'scope0.c'::filelocal_bss in test_at_main
+PASS: gdb.base/scope.exp: print filelocal_ro in test_at_main
+PASS: gdb.base/scope.exp: print 'scope0.c'::filelocal_ro
+PASS: gdb.base/scope.exp: print 'scope1.c'::filelocal
+PASS: gdb.base/scope.exp: print 'scope1.c'::filelocal_bss
+PASS: gdb.base/scope.exp: print 'scope1.c'::filelocal_ro
+PASS: gdb.base/scope.exp: print foo::funclocal
+PASS: gdb.base/scope.exp: print 'scope1.c'::foo::funclocal
+PASS: gdb.base/scope.exp: print foo::funclocal_ro
+PASS: gdb.base/scope.exp: print 'scope1.c'::foo::funclocal_ro
+PASS: gdb.base/scope.exp: print bar::funclocal
+PASS: gdb.base/scope.exp: print 'scope1.c'::bar::funclocal
+PASS: gdb.base/scope.exp: print 'scope0.c'::filelocal at foo
+PASS: gdb.base/scope.exp: print 'scope0.c'::filelocal_bss in test_at_foo
+PASS: gdb.base/scope.exp: print 'scope0.c'::filelocal_ro
+PASS: gdb.base/scope.exp: print filelocal at foo
+PASS: gdb.base/scope.exp: print 'scope1.c'::filelocal at foo
+PASS: gdb.base/scope.exp: print filelocal_bss at foo
+PASS: gdb.base/scope.exp: print 'scope1.c'::filelocal_bss at foo
+PASS: gdb.base/scope.exp: print filelocal_ro at foo
+PASS: gdb.base/scope.exp: print 'scope1.c'::filelocal_ro at foo
+PASS: gdb.base/scope.exp: print funclocal at foo
+PASS: gdb.base/scope.exp: print foo::funclocal at foo
+PASS: gdb.base/scope.exp: print 'scope1.c'::foo::funclocal at foo
+PASS: gdb.base/scope.exp: print funclocal_bss at foo
+PASS: gdb.base/scope.exp: print foo::funclocal_bss at foo
+PASS: gdb.base/scope.exp: print 'scope1.c'::foo::funclocal_bss at foo
+PASS: gdb.base/scope.exp: print funclocal_ro at foo
+PASS: gdb.base/scope.exp: print foo::funclocal_ro at foo
+PASS: gdb.base/scope.exp: print 'scope1.c'::foo::funclocal_ro at foo
+PASS: gdb.base/scope.exp: print bar::funclocal at foo
+PASS: gdb.base/scope.exp: print 'scope1.c'::bar::funclocal at foo
+PASS: gdb.base/scope.exp: print 'scope0.c'::filelocal at bar
+PASS: gdb.base/scope.exp: print 'scope0.c'::filelocal_bss in test_at_bar
+PASS: gdb.base/scope.exp: print 'scope0.c'::filelocal_ro at bar
+PASS: gdb.base/scope.exp: print filelocal at bar
+PASS: gdb.base/scope.exp: print 'scope1.c'::filelocal at bar
+PASS: gdb.base/scope.exp: print filelocal_bss at bar
+PASS: gdb.base/scope.exp: print 'scope1.c'::filelocal_bss at bar
+PASS: gdb.base/scope.exp: print filelocal_ro in test_at_bar
+PASS: gdb.base/scope.exp: print 'scope1.c'::filelocal_ro at bar
+PASS: gdb.base/scope.exp: print foo::funclocal at bar
+PASS: gdb.base/scope.exp: print 'scope1.c'::foo::funclocal at bar
+PASS: gdb.base/scope.exp: print foo::funclocal_bss at bar
+PASS: gdb.base/scope.exp: print 'scope1.c'::foo::funclocal_bss at bar
+PASS: gdb.base/scope.exp: print foo::funclocal_ro at bar
+PASS: gdb.base/scope.exp: print 'scope1.c'::foo::funclocal_ro at bar
+PASS: gdb.base/scope.exp: print funclocal at bar
+PASS: gdb.base/scope.exp: print bar::funclocal at bar
+PASS: gdb.base/scope.exp: print 'scope1.c'::bar::funclocal at bar
+PASS: gdb.base/scope.exp: print funclocal_bss at bar
+PASS: gdb.base/scope.exp: print bar::funclocal_bss at bar
+PASS: gdb.base/scope.exp: print 'scope1.c'::bar::funclocal_bss at bar
+PASS: gdb.base/scope.exp: continue to marker2
+PASS: gdb.base/scope.exp: up from marker2 in scopes.exp
+PASS: gdb.base/scope.exp: print localval, outer scope
+PASS: gdb.base/scope.exp: print localval1, outer scope
+PASS: gdb.base/scope.exp: print localval2, outer scope
+PASS: gdb.base/scope.exp: print localval3, outer scope
+PASS: gdb.base/scope.exp: continue to marker3 in scope.exp
+PASS: gdb.base/scope.exp: up from marker3 in scope.exp
+PASS: gdb.base/scope.exp: print localval, first nested scope
+PASS: gdb.base/scope.exp: print localval1, first nested scope
+PASS: gdb.base/scope.exp: print localval2, first nested scope
+PASS: gdb.base/scope.exp: print localval3, first nested scope
+PASS: gdb.base/scope.exp: continue to marker4 in scope.exp
+PASS: gdb.base/scope.exp: up from marker4 in scope.exp
+PASS: gdb.base/scope.exp: print localval, innermost scope
+PASS: gdb.base/scope.exp: print localval1, innermost scope
+PASS: gdb.base/scope.exp: print localval2, innermost scope
+PASS: gdb.base/scope.exp: print localval3, innermost scope
+PASS: gdb.base/scope.exp: continue to marker1
+PASS: gdb.base/scope.exp: up from marker1 in scope.exp
+PASS: gdb.base/scope.exp: 100 auto variables correctly initialized
+PASS: gdb.base/scope.exp: args in correct order
+Running ./gdb.base/sect-cmd.exp ...
+Running ./gdb.base/sepdebug.exp ...
+PASS: gdb.base/sepdebug.exp: breakpoint function
+PASS: gdb.base/sepdebug.exp: breakpoint quoted function
+PASS: gdb.base/sepdebug.exp: breakpoint function in file
+PASS: gdb.base/sepdebug.exp: use `list' to establish default source file
+PASS: gdb.base/sepdebug.exp: breakpoint line number
+PASS: gdb.base/sepdebug.exp: breakpoint duplicate
+PASS: gdb.base/sepdebug.exp: breakpoint line number in file
+PASS: gdb.base/sepdebug.exp: breakpoint at start of multi line if conditional
+PASS: gdb.base/sepdebug.exp: breakpoint at start of multi line while conditional
+FAIL: gdb.base/sepdebug.exp: breakpoint info
+FAIL: gdb.base/sepdebug.exp: run until function breakpoint
+PASS: gdb.base/sepdebug.exp: run until breakpoint set at a line number
+PASS: gdb.base/sepdebug.exp: run until file:function(6) breakpoint
+PASS: gdb.base/sepdebug.exp: run until file:function(5) breakpoint
+PASS: gdb.base/sepdebug.exp: run until file:function(4) breakpoint
+PASS: gdb.base/sepdebug.exp: run until file:function(3) breakpoint
+PASS: gdb.base/sepdebug.exp: run until file:function(2) breakpoint
+PASS: gdb.base/sepdebug.exp: run until file:function(1) breakpoint
+PASS: gdb.base/sepdebug.exp: run until quoted breakpoint
+PASS: gdb.base/sepdebug.exp: run until file:linenum breakpoint
+PASS: gdb.base/sepdebug.exp: breakpoint offset +1
+PASS: gdb.base/sepdebug.exp: step onto breakpoint
+PASS: gdb.base/sepdebug.exp: Temporary breakpoint function
+PASS: gdb.base/sepdebug.exp: Temporary breakpoint function in file
+PASS: gdb.base/sepdebug.exp: Temporary breakpoint line number #1
+PASS: gdb.base/sepdebug.exp: Temporary breakpoint line number #2
+PASS: gdb.base/sepdebug.exp: Temporary breakpoint line number in file #1
+PASS: gdb.base/sepdebug.exp: Temporary breakpoint line number in file #2
+FAIL: gdb.base/sepdebug.exp: Temporary breakpoint info
+PASS: gdb.base/sepdebug.exp: catch requires an event name
+PASS: gdb.base/sepdebug.exp: set catch fork, never expected to trigger
+PASS: gdb.base/sepdebug.exp: set catch vfork, never expected to trigger
+PASS: gdb.base/sepdebug.exp: set catch exec, never expected to trigger
+PASS: gdb.base/sepdebug.exp: set breakpoint pending off
+PASS: gdb.base/sepdebug.exp: break on non-existent source line
+PASS: gdb.base/sepdebug.exp: until bp_location1
+PASS: gdb.base/sepdebug.exp: break on default location, 1st time
+PASS: gdb.base/sepdebug.exp: break on default location, 2nd time
+PASS: gdb.base/sepdebug.exp: break on default location, 3rd time
+PASS: gdb.base/sepdebug.exp: break on default location, 4th time
+PASS: gdb.base/sepdebug.exp: set to-be-silent break bp_location1
+PASS: gdb.base/sepdebug.exp: set silent break bp_location1
+PASS: gdb.base/sepdebug.exp: info silent break bp_location1
+PASS: gdb.base/sepdebug.exp: hit silent break bp_location1
+PASS: gdb.base/sepdebug.exp: stopped for silent break bp_location1
+PASS: gdb.base/sepdebug.exp: thread-specific breakpoint on non-existent thread disallowed
+PASS: gdb.base/sepdebug.exp: thread-specific breakpoint on bogus thread ID disallowed
+PASS: gdb.base/sepdebug.exp: breakpoint with trailing garbage disallowed
+PASS: gdb.base/sepdebug.exp: step over breakpoint
+PASS: gdb.base/sepdebug.exp: clear line has no breakpoint disallowed
+PASS: gdb.base/sepdebug.exp: clear current line has no breakpoint disallowed
+PASS: gdb.base/sepdebug.exp: break marker3 #1
+PASS: gdb.base/sepdebug.exp: break marker3 #2
+PASS: gdb.base/sepdebug.exp: clear marker3
+PASS: gdb.base/sepdebug.exp: set convenience variable $foo to bp_location11
+PASS: gdb.base/sepdebug.exp: set breakpoint via convenience variable
+PASS: gdb.base/sepdebug.exp: set convenience variable $foo to 81.5
+PASS: gdb.base/sepdebug.exp: set breakpoint via non-integer convenience variable disallowed
+PASS: gdb.base/sepdebug.exp: set breakpoint on to-be-called function
+PASS: gdb.base/sepdebug.exp: hit breakpoint on called function
+PASS: gdb.base/sepdebug.exp: backtrace while in called function
+PASS: gdb.base/sepdebug.exp: finish from called function
+PASS: gdb.base/sepdebug.exp: finish with arguments disallowed
+PASS: gdb.base/sepdebug.exp: finish from outermost frame disallowed
+PASS: gdb.base/sepdebug.exp: kill program
+PASS: gdb.base/sepdebug.exp: break at factorial
+PASS: gdb.base/sepdebug.exp: continue to factorial(5)
+PASS: gdb.base/sepdebug.exp: backtrace from factorial(5)
+PASS: gdb.base/sepdebug.exp: next to recursive call
+PASS: gdb.base/sepdebug.exp: next over recursive call
+PASS: gdb.base/sepdebug.exp: backtrace from factorial(5.1)
+FAIL: gdb.base/sepdebug.exp: setting breakpoint at exit
+PASS: gdb.base/sepdebug.exp: debuglink: set separate debug location
+PASS: gdb.base/sepdebug.exp: debuglink: breakpoint function, optimized file
+PASS: gdb.base/sepdebug.exp: debuglink: breakpoint small function, optimized file
+PASS: gdb.base/sepdebug.exp: debuglink: run until function breakpoint, optimized file (code motion)
+PASS: gdb.base/sepdebug.exp: debuglink: run until breakpoint set at small function, optimized file
+PASS: gdb.base/sepdebug.exp: CRC mismatch is reported
+PASS: gdb.base/sepdebug.exp: build-id support by binutils
+PASS: gdb.base/sepdebug.exp: build-id: set separate debug location
+PASS: gdb.base/sepdebug.exp: build-id: breakpoint function, optimized file
+PASS: gdb.base/sepdebug.exp: build-id: breakpoint small function, optimized file
+PASS: gdb.base/sepdebug.exp: build-id: run until function breakpoint, optimized file (code motion)
+PASS: gdb.base/sepdebug.exp: build-id: run until breakpoint set at small function, optimized file
+PASS: gdb.base/sepdebug.exp: multiple-dirs: set separate debug location
+PASS: gdb.base/sepdebug.exp: multiple-dirs: breakpoint function, optimized file
+PASS: gdb.base/sepdebug.exp: multiple-dirs: breakpoint small function, optimized file
+PASS: gdb.base/sepdebug.exp: multiple-dirs: run until function breakpoint, optimized file (code motion)
+PASS: gdb.base/sepdebug.exp: multiple-dirs: run until breakpoint set at small function, optimized file
+Running ./gdb.base/sep.exp ...
+PASS: gdb.base/sep.exp: list using location inside included file
+PASS: gdb.base/sep.exp: breakpoint inside included file
+Running ./gdb.base/sepsymtab.exp ...
+PASS: gdb.base/sepsymtab.exp: info sym main
+Running ./gdb.base/set-lang-auto.exp ...
+PASS: gdb.base/set-lang-auto.exp: show lang after loading binary
+PASS: gdb.base/set-lang-auto.exp: forcing the language to ada
+PASS: gdb.base/set-lang-auto.exp: show lang after switching language to ada
+PASS: gdb.base/set-lang-auto.exp: switching the language back to auto
+PASS: gdb.base/set-lang-auto.exp: show lang after having switched back to auto
+Running ./gdb.base/set-noassign.exp ...
+PASS: gdb.base/set-noassign.exp: set language ada
+PASS: gdb.base/set-noassign.exp: warning for set without assignment
+Running ./gdb.base/setshow.exp ...
+PASS: gdb.base/setshow.exp: default annotation_level is zero
+PASS: gdb.base/setshow.exp: set annotate 2
+PASS: gdb.base/setshow.exp: show annotate 2
+PASS: gdb.base/setshow.exp: annotation_level 2
+PASS: gdb.base/setshow.exp: set annotate 1
+PASS: gdb.base/setshow.exp: show annotate (1)
+PASS: gdb.base/setshow.exp: annotation_level 1
+PASS: gdb.base/setshow.exp: set annotate 0
+PASS: gdb.base/setshow.exp: show annotate (0)
+PASS: gdb.base/setshow.exp: annotation_level 0
+PASS: gdb.base/setshow.exp: set args ~
+PASS: gdb.base/setshow.exp: show args ~
+PASS: gdb.base/setshow.exp: set args
+PASS: gdb.base/setshow.exp: show args
+PASS: gdb.base/setshow.exp: set check range on
+PASS: gdb.base/setshow.exp: show check range (on)
+PASS: gdb.base/setshow.exp: set check range off
+PASS: gdb.base/setshow.exp: show check range (off)
+PASS: gdb.base/setshow.exp: set check range auto
+PASS: gdb.base/setshow.exp: show check range (auto)
+PASS: gdb.base/setshow.exp: set check type on
+PASS: gdb.base/setshow.exp: show check type (on)
+PASS: gdb.base/setshow.exp: set check type off
+PASS: gdb.base/setshow.exp: show check type (off)
+PASS: gdb.base/setshow.exp: set complaints 100
+PASS: gdb.base/setshow.exp: show complaints (100)
+PASS: gdb.base/setshow.exp: set complaints 0
+PASS: gdb.base/setshow.exp: show complaints (0)
+PASS: gdb.base/setshow.exp: set confirm off
+PASS: gdb.base/setshow.exp: show confirm (off)
+PASS: gdb.base/setshow.exp: set confirm on
+PASS: gdb.base/setshow.exp: show confirm (on)
+PASS: gdb.base/setshow.exp: set editing off
+PASS: gdb.base/setshow.exp: show editing (off)
+PASS: gdb.base/setshow.exp: set environment FOOBARBAZ
+PASS: gdb.base/setshow.exp: show environment FOOBARBAZ
+PASS: gdb.base/setshow.exp: set height 100
+PASS: gdb.base/setshow.exp: show height
+PASS: gdb.base/setshow.exp: set history expansion on
+PASS: gdb.base/setshow.exp: show history expansion
+PASS: gdb.base/setshow.exp: set history filename foobar.baz
+PASS: gdb.base/setshow.exp: show history filename (foobar.baz)
+PASS: gdb.base/setshow.exp: set history save on
+PASS: gdb.base/setshow.exp: show history save (on)
+PASS: gdb.base/setshow.exp: set history size 100
+PASS: gdb.base/setshow.exp: show history size (100)
+PASS: gdb.base/setshow.exp: set language asm
+PASS: gdb.base/setshow.exp: show language (asm)
+PASS: gdb.base/setshow.exp: set language java
+PASS: gdb.base/setshow.exp: show language (java)
+PASS: gdb.base/setshow.exp: complete set language minimal
+PASS: gdb.base/setshow.exp: set language auto
+PASS: gdb.base/setshow.exp: show language (auto)
+PASS: gdb.base/setshow.exp: set listsize 100
+PASS: gdb.base/setshow.exp: show listsize (100)
+PASS: gdb.base/setshow.exp: set prompt FooBarBaz
+PASS: gdb.base/setshow.exp: show prompt FooBarBaz
+PASS: gdb.base/setshow.exp: set prompt gdb
+PASS: gdb.base/setshow.exp: set radix 11
+PASS: gdb.base/setshow.exp: set radix 16
+PASS: gdb.base/setshow.exp: show radix (16)
+PASS: gdb.base/setshow.exp: set radix 10
+PASS: gdb.base/setshow.exp: show radix (10)
+PASS: gdb.base/setshow.exp: set width 90
+PASS: gdb.base/setshow.exp: show width (90)
+PASS: gdb.base/setshow.exp: set write on
+PASS: gdb.base/setshow.exp: show write (on)
+PASS: gdb.base/setshow.exp: show user
+PASS: gdb.base/setshow.exp: set verbose on
+PASS: gdb.base/setshow.exp: show verbose (on)
+PASS: gdb.base/setshow.exp: set verbose off
+PASS: gdb.base/setshow.exp: show verbose (off)
+Running ./gdb.base/setvar.exp ...
+PASS: gdb.base/setvar.exp: set print sevenbit-strings
+PASS: gdb.base/setvar.exp: set variable char=0
+PASS: gdb.base/setvar.exp: set variable char=1
+PASS: gdb.base/setvar.exp: set variable char=7 (Bel)
+PASS: gdb.base/setvar.exp: set variable char=32 (SPC)
+PASS: gdb.base/setvar.exp: set variable char=65 ('A')
+PASS: gdb.base/setvar.exp: set variable char=97 ('a')
+PASS: gdb.base/setvar.exp: set variable char=126 ('~')
+PASS: gdb.base/setvar.exp: set variable char=127 (8-bit)
+PASS: gdb.base/setvar.exp: set variable signed char=0
+PASS: gdb.base/setvar.exp: set variable signed char=1
+PASS: gdb.base/setvar.exp: set variable signed char=7 (Bel)
+PASS: gdb.base/setvar.exp: set variable signed char=32 (SPC)
+PASS: gdb.base/setvar.exp: set variable signed char=65 ('A')
+PASS: gdb.base/setvar.exp: set variable signed char=97 ('a')
+PASS: gdb.base/setvar.exp: set variable signed char=126 ('~')
+PASS: gdb.base/setvar.exp: set variable signed char=127 (8-bit)
+PASS: gdb.base/setvar.exp: set variable v_signed_char=-1
+PASS: gdb.base/setvar.exp: set variable signed char=-1 (-1)
+PASS: gdb.base/setvar.exp: set variable v_signed_char=0xFF
+PASS: gdb.base/setvar.exp: set variable signed char=0xFF (0xFF)
+PASS: gdb.base/setvar.exp: set variable unsigned char=0
+PASS: gdb.base/setvar.exp: set variable unsigned char=1
+PASS: gdb.base/setvar.exp: set variable unsigned char=7 (Bel)
+PASS: gdb.base/setvar.exp: set variable unsigned char=32 (SPC)
+PASS: gdb.base/setvar.exp: set variable unsigned char=65 ('A')
+PASS: gdb.base/setvar.exp: set variable unsigned char=97 ('a')
+PASS: gdb.base/setvar.exp: set variable unsigned char=126 ('~')
+PASS: gdb.base/setvar.exp: set variable unsigned char=255 (8-bit)
+PASS: gdb.base/setvar.exp: set variable short=0
+PASS: gdb.base/setvar.exp: set variable short=1
+PASS: gdb.base/setvar.exp: set variable short=-1 (minus)
+PASS: gdb.base/setvar.exp: set variable signed short=0
+PASS: gdb.base/setvar.exp: set variable signed short=1
+PASS: gdb.base/setvar.exp: set variable signed short=-1 (minus)
+PASS: gdb.base/setvar.exp: set variable unsigned short=0
+PASS: gdb.base/setvar.exp: set variable unsigned short=1
+PASS: gdb.base/setvar.exp: set variable unsigned short=~0 (minus)
+PASS: gdb.base/setvar.exp: set variable int=0
+PASS: gdb.base/setvar.exp: set variable int=1
+PASS: gdb.base/setvar.exp: set variable int=-1 (minus)
+PASS: gdb.base/setvar.exp: set variable signed int=0
+PASS: gdb.base/setvar.exp: set variable signed int=1
+PASS: gdb.base/setvar.exp: set variable signed int=-1 (minus)
+PASS: gdb.base/setvar.exp: set variable unsigned int=0
+PASS: gdb.base/setvar.exp: set variable unsigned int=1
+PASS: gdb.base/setvar.exp: set variable unsigned int=~0 (minus)
+PASS: gdb.base/setvar.exp: set variable long=0
+PASS: gdb.base/setvar.exp: set variable long=1
+PASS: gdb.base/setvar.exp: set variable long=-1 (minus)
+PASS: gdb.base/setvar.exp: set variable signed long=0
+PASS: gdb.base/setvar.exp: set variable signed long=1
+PASS: gdb.base/setvar.exp: set variable signed long=-1 (minus)
+PASS: gdb.base/setvar.exp: set variable unsigned long=0
+PASS: gdb.base/setvar.exp: set variable unsigned long=1
+PASS: gdb.base/setvar.exp: set variable unsigned long=~0 (minus)
+PASS: gdb.base/setvar.exp: set variable float=0
+PASS: gdb.base/setvar.exp: set variable float=1
+PASS: gdb.base/setvar.exp: set variable float=-1 (minus)
+PASS: gdb.base/setvar.exp: set variable double=0
+PASS: gdb.base/setvar.exp: set variable double=1
+PASS: gdb.base/setvar.exp: set variable double=-1 (minus)
+PASS: gdb.base/setvar.exp: set variable char array="hi" (string)
+PASS: gdb.base/setvar.exp: set variable signed char array="hi" (string)
+PASS: gdb.base/setvar.exp: set variable unsigned char array="hi" (string)
+PASS: gdb.base/setvar.exp: set variable short array
+PASS: gdb.base/setvar.exp: set variable signed short array
+PASS: gdb.base/setvar.exp: set variable unsigned short array
+PASS: gdb.base/setvar.exp: set variable int array
+PASS: gdb.base/setvar.exp: set variable signed int array
+PASS: gdb.base/setvar.exp: set variable unsigned int array
+PASS: gdb.base/setvar.exp: set variable long array
+PASS: gdb.base/setvar.exp: set variable signed long array
+PASS: gdb.base/setvar.exp: set variable unsigned long array
+PASS: gdb.base/setvar.exp: set variable float array
+PASS: gdb.base/setvar.exp: set variable double array
+PASS: gdb.base/setvar.exp: set variable char pointer="hi" (string)
+PASS: gdb.base/setvar.exp: set variable char pointer="hi" (string) (#2)
+PASS: gdb.base/setvar.exp: set variable signed char pointer="hi" (string)
+PASS: gdb.base/setvar.exp: set variable signed char pointer="hi" (string) (#2)
+PASS: gdb.base/setvar.exp: set variable unsigned char pointer="hi" (string)
+PASS: gdb.base/setvar.exp: set variable unsigned char pointer="hi" (string) (#2)
+PASS: gdb.base/setvar.exp: set variable short pointer
+PASS: gdb.base/setvar.exp: set variable short pointer (#2)
+PASS: gdb.base/setvar.exp: set v_signed_short_pointer=v_signed_short_array
+PASS: gdb.base/setvar.exp: set variable *(v_signed_short_pointer)=123
+PASS: gdb.base/setvar.exp: set variable *(v_signed_short_pointer+1)=-456
+PASS: gdb.base/setvar.exp: set variable signed short pointer
+PASS: gdb.base/setvar.exp: print *(v_signed_short_pointer+1)
+PASS: gdb.base/setvar.exp: set v_unsigned_short_pointer=v_unsigned_short_array
+PASS: gdb.base/setvar.exp: set variable *(v_unsigned_short_pointer)=123
+PASS: gdb.base/setvar.exp: set variable *(v_unsigned_short_pointer+1)=-456
+PASS: gdb.base/setvar.exp: set variable unsigned short pointer
+PASS: gdb.base/setvar.exp: print *(v_unsigned_short_pointer+1)
+PASS: gdb.base/setvar.exp: set variable int pointer
+PASS: gdb.base/setvar.exp: set variable int pointer (#2)
+PASS: gdb.base/setvar.exp: set variable signed int pointer
+PASS: gdb.base/setvar.exp: set variable signed int pointer (#2)
+PASS: gdb.base/setvar.exp: set variable unsigned int pointer
+PASS: gdb.base/setvar.exp: print variable unsigned int pointer+1
+PASS: gdb.base/setvar.exp: set variable long pointer
+PASS: gdb.base/setvar.exp: set variable long pointer (#2)
+PASS: gdb.base/setvar.exp: set variable signed long pointer
+PASS: gdb.base/setvar.exp: set variable signed long pointer (#2)
+PASS: gdb.base/setvar.exp: set variable unsigned long pointer
+PASS: gdb.base/setvar.exp: set variable unsigned long pointer (#2)
+PASS: gdb.base/setvar.exp: set variable float pointer
+PASS: gdb.base/setvar.exp: set variable float pointer (#2)
+PASS: gdb.base/setvar.exp: set variable double pointer
+PASS: gdb.base/setvar.exp: set variable double pointer (#2)
+PASS: gdb.base/setvar.exp: set variable structure char member
+PASS: gdb.base/setvar.exp: set variable structure short member
+PASS: gdb.base/setvar.exp: set variable structure int member
+PASS: gdb.base/setvar.exp: set variable structure long member
+PASS: gdb.base/setvar.exp: set variable structure float member
+PASS: gdb.base/setvar.exp: set variable structure double member
+PASS: gdb.base/setvar.exp: set print structure #1
+PASS: gdb.base/setvar.exp: set print structure #2
+PASS: gdb.base/setvar.exp: set print structure #3
+PASS: gdb.base/setvar.exp: set print structure #4
+PASS: gdb.base/setvar.exp: print sef.field=sm1
+PASS: gdb.base/setvar.exp: print sef.field (sm1)
+PASS: gdb.base/setvar.exp: print sef.field=s1
+PASS: gdb.base/setvar.exp: print sef.field (s1)
+PASS: gdb.base/setvar.exp: print uef.field=u2
+PASS: gdb.base/setvar.exp: print uef.field (u2)
+PASS: gdb.base/setvar.exp: print uef.field=u1
+PASS: gdb.base/setvar.exp: print uef.field (u1)
+PASS: gdb.base/setvar.exp: print sef.field=7
+PASS: gdb.base/setvar.exp: print uef.field=6
+Running ./gdb.base/shell.exp ...
+PASS: gdb.base/shell.exp: shell echo foo
+PASS: gdb.base/shell.exp: ! echo foo
+PASS: gdb.base/shell.exp: !echo foo
+Running ./gdb.base/shlib-call.exp ...
+PASS: gdb.base/shlib-call.exp: set print sevenbit-strings
+PASS: gdb.base/shlib-call.exp: set print address off
+PASS: gdb.base/shlib-call.exp: set width 0
+FAIL: gdb.base/shlib-call.exp: next to shr1
+FAIL: gdb.base/shlib-call.exp: print g
+FAIL: gdb.base/shlib-call.exp: print g
+FAIL: gdb.base/shlib-call.exp: breakpoint function shr2 (got interactive prompt)
+FAIL: gdb.base/shlib-call.exp: run until breakpoint set at a function (the program exited)
+FAIL: gdb.base/shlib-call.exp: print mainshr1(1) from shlib func
+FAIL: gdb.base/shlib-call.exp: step out of shr2 to main (the program is no longer running)
+FAIL: gdb.base/shlib-call.exp: print mainshr1(1)
+FAIL: gdb.base/shlib-call.exp: step into mainshr1 (the program is no longer running)
+PASS: gdb.base/shlib-call.exp: set print sevenbit-strings
+PASS: gdb.base/shlib-call.exp: set print address off
+PASS: gdb.base/shlib-call.exp: set width 0
+Running ./gdb.base/shreloc.exp ...
+FAIL: gdb.base/shreloc.exp: get address of fn_1
+FAIL: gdb.base/shreloc.exp: get address of fn_2
+FAIL: gdb.base/shreloc.exp: relocated extern functions have different addresses
+FAIL: gdb.base/shreloc.exp: get address of extern_var_1
+FAIL: gdb.base/shreloc.exp: get address of extern_var_2
+FAIL: gdb.base/shreloc.exp: relocated extern variables have different addresses
+FAIL: gdb.base/shreloc.exp: get address of static_var_1
+FAIL: gdb.base/shreloc.exp: get address of static_var_2
+FAIL: gdb.base/shreloc.exp: relocated static variables have different addresses
+PASS: gdb.base/shreloc.exp: get_msym_addrs static_var_[12]
+FAIL: gdb.base/shreloc.exp: (msymbol) relocated static vars have different addresses
+PASS: gdb.base/shreloc.exp: get_msym_addrs extern_var_[12]
+FAIL: gdb.base/shreloc.exp: (msymbol) relocated extern vars have different addresses
+PASS: gdb.base/shreloc.exp: get_msym_addrs fn_[12]
+FAIL: gdb.base/shreloc.exp: (msymbol) relocated functions have different addresses
+Running ./gdb.base/sigall.exp ...
+PASS: gdb.base/sigall.exp: handle SIGABRT stop print
+PASS: gdb.base/sigall.exp: b handle_ABRT
+PASS: gdb.base/sigall.exp: b gen_HUP
+PASS: gdb.base/sigall.exp: get signal ABRT
+PASS: gdb.base/sigall.exp: send signal ABRT
+PASS: gdb.base/sigall.exp: advance to HUP
+PASS: gdb.base/sigall.exp: handle SIGHUP stop print
+PASS: gdb.base/sigall.exp: b handle_HUP
+PASS: gdb.base/sigall.exp: b gen_QUIT
+PASS: gdb.base/sigall.exp: get signal HUP
+PASS: gdb.base/sigall.exp: send signal HUP
+PASS: gdb.base/sigall.exp: advance to QUIT
+PASS: gdb.base/sigall.exp: handle SIGQUIT stop print
+PASS: gdb.base/sigall.exp: b handle_QUIT
+PASS: gdb.base/sigall.exp: b gen_ILL
+PASS: gdb.base/sigall.exp: get signal QUIT
+PASS: gdb.base/sigall.exp: send signal QUIT
+PASS: gdb.base/sigall.exp: advance to ILL
+PASS: gdb.base/sigall.exp: handle SIGILL stop print
+PASS: gdb.base/sigall.exp: b handle_ILL
+PASS: gdb.base/sigall.exp: b gen_EMT
+PASS: gdb.base/sigall.exp: get signal ILL
+PASS: gdb.base/sigall.exp: send signal ILL
+PASS: gdb.base/sigall.exp: advance to EMT
+PASS: gdb.base/sigall.exp: handle SIGEMT stop print
+PASS: gdb.base/sigall.exp: b handle_EMT
+PASS: gdb.base/sigall.exp: b gen_FPE
+PASS: gdb.base/sigall.exp: send signal EMT
+PASS: gdb.base/sigall.exp: advance to FPE
+PASS: gdb.base/sigall.exp: handle SIGFPE stop print
+PASS: gdb.base/sigall.exp: b handle_FPE
+PASS: gdb.base/sigall.exp: b gen_BUS
+PASS: gdb.base/sigall.exp: get signal FPE
+PASS: gdb.base/sigall.exp: send signal FPE
+PASS: gdb.base/sigall.exp: advance to BUS
+PASS: gdb.base/sigall.exp: handle SIGBUS stop print
+PASS: gdb.base/sigall.exp: b handle_BUS
+PASS: gdb.base/sigall.exp: b gen_SEGV
+PASS: gdb.base/sigall.exp: get signal BUS
+PASS: gdb.base/sigall.exp: send signal BUS
+PASS: gdb.base/sigall.exp: advance to SEGV
+PASS: gdb.base/sigall.exp: handle SIGSEGV stop print
+PASS: gdb.base/sigall.exp: b handle_SEGV
+PASS: gdb.base/sigall.exp: b gen_SYS
+PASS: gdb.base/sigall.exp: get signal SEGV
+PASS: gdb.base/sigall.exp: send signal SEGV
+PASS: gdb.base/sigall.exp: advance to SYS
+PASS: gdb.base/sigall.exp: handle SIGSYS stop print
+PASS: gdb.base/sigall.exp: b handle_SYS
+PASS: gdb.base/sigall.exp: b gen_PIPE
+PASS: gdb.base/sigall.exp: get signal SYS
+PASS: gdb.base/sigall.exp: send signal SYS
+PASS: gdb.base/sigall.exp: advance to PIPE
+PASS: gdb.base/sigall.exp: handle SIGPIPE stop print
+PASS: gdb.base/sigall.exp: b handle_PIPE
+PASS: gdb.base/sigall.exp: b gen_ALRM
+PASS: gdb.base/sigall.exp: get signal PIPE
+PASS: gdb.base/sigall.exp: send signal PIPE
+PASS: gdb.base/sigall.exp: advance to ALRM
+PASS: gdb.base/sigall.exp: handle SIGALRM stop print
+PASS: gdb.base/sigall.exp: b handle_ALRM
+PASS: gdb.base/sigall.exp: b gen_URG
+PASS: gdb.base/sigall.exp: get signal ALRM
+PASS: gdb.base/sigall.exp: send signal ALRM
+PASS: gdb.base/sigall.exp: advance to URG
+PASS: gdb.base/sigall.exp: handle SIGURG stop print
+PASS: gdb.base/sigall.exp: b handle_URG
+PASS: gdb.base/sigall.exp: b gen_TSTP
+PASS: gdb.base/sigall.exp: get signal URG
+PASS: gdb.base/sigall.exp: send signal URG
+PASS: gdb.base/sigall.exp: advance to TSTP
+PASS: gdb.base/sigall.exp: handle SIGTSTP stop print
+PASS: gdb.base/sigall.exp: b handle_TSTP
+PASS: gdb.base/sigall.exp: b gen_CONT
+PASS: gdb.base/sigall.exp: get signal TSTP
+PASS: gdb.base/sigall.exp: send signal TSTP
+PASS: gdb.base/sigall.exp: advance to CONT
+PASS: gdb.base/sigall.exp: handle SIGCONT stop print
+PASS: gdb.base/sigall.exp: b handle_CONT
+PASS: gdb.base/sigall.exp: b gen_CHLD
+PASS: gdb.base/sigall.exp: get signal CONT
+PASS: gdb.base/sigall.exp: send signal CONT
+PASS: gdb.base/sigall.exp: advance to CHLD
+PASS: gdb.base/sigall.exp: handle SIGCHLD stop print
+PASS: gdb.base/sigall.exp: b handle_CHLD
+PASS: gdb.base/sigall.exp: b gen_TTIN
+PASS: gdb.base/sigall.exp: get signal CHLD
+PASS: gdb.base/sigall.exp: send signal CHLD
+PASS: gdb.base/sigall.exp: advance to TTIN
+PASS: gdb.base/sigall.exp: handle SIGTTIN stop print
+PASS: gdb.base/sigall.exp: b handle_TTIN
+PASS: gdb.base/sigall.exp: b gen_TTOU
+PASS: gdb.base/sigall.exp: get signal TTIN
+PASS: gdb.base/sigall.exp: send signal TTIN
+PASS: gdb.base/sigall.exp: advance to TTOU
+PASS: gdb.base/sigall.exp: handle SIGTTOU stop print
+PASS: gdb.base/sigall.exp: b handle_TTOU
+PASS: gdb.base/sigall.exp: b gen_IO
+PASS: gdb.base/sigall.exp: get signal TTOU
+PASS: gdb.base/sigall.exp: send signal TTOU
+PASS: gdb.base/sigall.exp: advance to IO
+PASS: gdb.base/sigall.exp: handle SIGIO stop print
+PASS: gdb.base/sigall.exp: b handle_IO
+PASS: gdb.base/sigall.exp: b gen_XCPU
+PASS: gdb.base/sigall.exp: get signal IO
+PASS: gdb.base/sigall.exp: send signal IO
+PASS: gdb.base/sigall.exp: advance to XCPU
+PASS: gdb.base/sigall.exp: handle SIGXCPU stop print
+PASS: gdb.base/sigall.exp: b handle_XCPU
+PASS: gdb.base/sigall.exp: b gen_XFSZ
+PASS: gdb.base/sigall.exp: get signal XCPU
+PASS: gdb.base/sigall.exp: send signal XCPU
+PASS: gdb.base/sigall.exp: advance to XFSZ
+PASS: gdb.base/sigall.exp: handle SIGXFSZ stop print
+PASS: gdb.base/sigall.exp: b handle_XFSZ
+PASS: gdb.base/sigall.exp: b gen_VTALRM
+PASS: gdb.base/sigall.exp: get signal XFSZ
+PASS: gdb.base/sigall.exp: send signal XFSZ
+PASS: gdb.base/sigall.exp: advance to VTALRM
+PASS: gdb.base/sigall.exp: handle SIGVTALRM stop print
+PASS: gdb.base/sigall.exp: b handle_VTALRM
+PASS: gdb.base/sigall.exp: b gen_PROF
+PASS: gdb.base/sigall.exp: get signal VTALRM
+PASS: gdb.base/sigall.exp: send signal VTALRM
+PASS: gdb.base/sigall.exp: advance to PROF
+PASS: gdb.base/sigall.exp: handle SIGPROF stop print
+PASS: gdb.base/sigall.exp: b handle_PROF
+PASS: gdb.base/sigall.exp: b gen_WINCH
+PASS: gdb.base/sigall.exp: get signal PROF
+PASS: gdb.base/sigall.exp: send signal PROF
+PASS: gdb.base/sigall.exp: advance to WINCH
+PASS: gdb.base/sigall.exp: handle SIGWINCH stop print
+PASS: gdb.base/sigall.exp: b handle_WINCH
+PASS: gdb.base/sigall.exp: b gen_LOST
+PASS: gdb.base/sigall.exp: get signal WINCH
+PASS: gdb.base/sigall.exp: send signal WINCH
+PASS: gdb.base/sigall.exp: advance to LOST
+PASS: gdb.base/sigall.exp: handle SIGLOST stop print
+PASS: gdb.base/sigall.exp: b handle_LOST
+PASS: gdb.base/sigall.exp: b gen_USR1
+PASS: gdb.base/sigall.exp: send signal LOST
+PASS: gdb.base/sigall.exp: advance to USR1
+PASS: gdb.base/sigall.exp: handle SIGUSR1 stop print
+PASS: gdb.base/sigall.exp: b handle_USR1
+PASS: gdb.base/sigall.exp: b gen_USR2
+PASS: gdb.base/sigall.exp: get signal USR1
+PASS: gdb.base/sigall.exp: send signal USR1
+PASS: gdb.base/sigall.exp: advance to USR2
+PASS: gdb.base/sigall.exp: handle SIGUSR2 stop print
+PASS: gdb.base/sigall.exp: b handle_USR2
+PASS: gdb.base/sigall.exp: b gen_PWR
+PASS: gdb.base/sigall.exp: get signal USR2
+PASS: gdb.base/sigall.exp: send signal USR2
+PASS: gdb.base/sigall.exp: advance to PWR
+PASS: gdb.base/sigall.exp: handle SIGPWR stop print
+PASS: gdb.base/sigall.exp: b handle_PWR
+PASS: gdb.base/sigall.exp: b gen_POLL
+PASS: gdb.base/sigall.exp: get signal PWR
+PASS: gdb.base/sigall.exp: send signal PWR
+PASS: gdb.base/sigall.exp: advance to POLL
+PASS: gdb.base/sigall.exp: handle SIGPOLL stop print
+PASS: gdb.base/sigall.exp: b handle_POLL
+PASS: gdb.base/sigall.exp: b gen_WIND
+PASS: gdb.base/sigall.exp: send signal POLL
+PASS: gdb.base/sigall.exp: advance to WIND
+PASS: gdb.base/sigall.exp: handle SIGWIND stop print
+PASS: gdb.base/sigall.exp: b handle_WIND
+PASS: gdb.base/sigall.exp: b gen_PHONE
+PASS: gdb.base/sigall.exp: send signal WIND
+PASS: gdb.base/sigall.exp: advance to PHONE
+PASS: gdb.base/sigall.exp: handle SIGPHONE stop print
+PASS: gdb.base/sigall.exp: b handle_PHONE
+PASS: gdb.base/sigall.exp: b gen_WAITING
+PASS: gdb.base/sigall.exp: send signal PHONE
+PASS: gdb.base/sigall.exp: advance to WAITING
+PASS: gdb.base/sigall.exp: handle SIGWAITING stop print
+PASS: gdb.base/sigall.exp: b handle_WAITING
+PASS: gdb.base/sigall.exp: b gen_LWP
+PASS: gdb.base/sigall.exp: send signal WAITING
+PASS: gdb.base/sigall.exp: advance to LWP
+PASS: gdb.base/sigall.exp: handle SIGLWP stop print
+PASS: gdb.base/sigall.exp: b handle_LWP
+PASS: gdb.base/sigall.exp: b gen_DANGER
+PASS: gdb.base/sigall.exp: send signal LWP
+PASS: gdb.base/sigall.exp: advance to DANGER
+PASS: gdb.base/sigall.exp: handle SIGDANGER stop print
+PASS: gdb.base/sigall.exp: b handle_DANGER
+PASS: gdb.base/sigall.exp: b gen_GRANT
+PASS: gdb.base/sigall.exp: send signal DANGER
+PASS: gdb.base/sigall.exp: advance to GRANT
+PASS: gdb.base/sigall.exp: handle SIGGRANT stop print
+PASS: gdb.base/sigall.exp: b handle_GRANT
+PASS: gdb.base/sigall.exp: b gen_RETRACT
+PASS: gdb.base/sigall.exp: send signal GRANT
+PASS: gdb.base/sigall.exp: advance to RETRACT
+PASS: gdb.base/sigall.exp: handle SIGRETRACT stop print
+PASS: gdb.base/sigall.exp: b handle_RETRACT
+PASS: gdb.base/sigall.exp: b gen_MSG
+PASS: gdb.base/sigall.exp: send signal RETRACT
+PASS: gdb.base/sigall.exp: advance to MSG
+PASS: gdb.base/sigall.exp: handle SIGMSG stop print
+PASS: gdb.base/sigall.exp: b handle_MSG
+PASS: gdb.base/sigall.exp: b gen_SOUND
+PASS: gdb.base/sigall.exp: send signal MSG
+PASS: gdb.base/sigall.exp: advance to SOUND
+PASS: gdb.base/sigall.exp: handle SIGSOUND stop print
+PASS: gdb.base/sigall.exp: b handle_SOUND
+PASS: gdb.base/sigall.exp: b gen_SAK
+PASS: gdb.base/sigall.exp: send signal SOUND
+PASS: gdb.base/sigall.exp: advance to SAK
+PASS: gdb.base/sigall.exp: handle SIGSAK stop print
+PASS: gdb.base/sigall.exp: b handle_SAK
+PASS: gdb.base/sigall.exp: b gen_PRIO
+PASS: gdb.base/sigall.exp: send signal SAK
+PASS: gdb.base/sigall.exp: advance to PRIO
+PASS: gdb.base/sigall.exp: handle SIGPRIO stop print
+PASS: gdb.base/sigall.exp: b handle_PRIO
+PASS: gdb.base/sigall.exp: b gen_33
+PASS: gdb.base/sigall.exp: send signal PRIO
+PASS: gdb.base/sigall.exp: advance to 33
+PASS: gdb.base/sigall.exp: handle SIG33 stop print
+PASS: gdb.base/sigall.exp: b handle_33
+PASS: gdb.base/sigall.exp: b gen_34
+PASS: gdb.base/sigall.exp: send signal 33
+PASS: gdb.base/sigall.exp: advance to 34
+PASS: gdb.base/sigall.exp: handle SIG34 stop print
+PASS: gdb.base/sigall.exp: b handle_34
+PASS: gdb.base/sigall.exp: b gen_35
+PASS: gdb.base/sigall.exp: send signal 34
+PASS: gdb.base/sigall.exp: advance to 35
+PASS: gdb.base/sigall.exp: handle SIG35 stop print
+PASS: gdb.base/sigall.exp: b handle_35
+PASS: gdb.base/sigall.exp: b gen_36
+PASS: gdb.base/sigall.exp: send signal 35
+PASS: gdb.base/sigall.exp: advance to 36
+PASS: gdb.base/sigall.exp: handle SIG36 stop print
+PASS: gdb.base/sigall.exp: b handle_36
+PASS: gdb.base/sigall.exp: b gen_37
+PASS: gdb.base/sigall.exp: send signal 36
+PASS: gdb.base/sigall.exp: advance to 37
+PASS: gdb.base/sigall.exp: handle SIG37 stop print
+PASS: gdb.base/sigall.exp: b handle_37
+PASS: gdb.base/sigall.exp: b gen_38
+PASS: gdb.base/sigall.exp: send signal 37
+PASS: gdb.base/sigall.exp: advance to 38
+PASS: gdb.base/sigall.exp: handle SIG38 stop print
+PASS: gdb.base/sigall.exp: b handle_38
+PASS: gdb.base/sigall.exp: b gen_39
+PASS: gdb.base/sigall.exp: send signal 38
+PASS: gdb.base/sigall.exp: advance to 39
+PASS: gdb.base/sigall.exp: handle SIG39 stop print
+PASS: gdb.base/sigall.exp: b handle_39
+PASS: gdb.base/sigall.exp: b gen_40
+PASS: gdb.base/sigall.exp: send signal 39
+PASS: gdb.base/sigall.exp: advance to 40
+PASS: gdb.base/sigall.exp: handle SIG40 stop print
+PASS: gdb.base/sigall.exp: b handle_40
+PASS: gdb.base/sigall.exp: b gen_41
+PASS: gdb.base/sigall.exp: send signal 40
+PASS: gdb.base/sigall.exp: advance to 41
+PASS: gdb.base/sigall.exp: handle SIG41 stop print
+PASS: gdb.base/sigall.exp: b handle_41
+PASS: gdb.base/sigall.exp: b gen_42
+PASS: gdb.base/sigall.exp: send signal 41
+PASS: gdb.base/sigall.exp: advance to 42
+PASS: gdb.base/sigall.exp: handle SIG42 stop print
+PASS: gdb.base/sigall.exp: b handle_42
+PASS: gdb.base/sigall.exp: b gen_43
+PASS: gdb.base/sigall.exp: send signal 42
+PASS: gdb.base/sigall.exp: advance to 43
+PASS: gdb.base/sigall.exp: handle SIG43 stop print
+PASS: gdb.base/sigall.exp: b handle_43
+PASS: gdb.base/sigall.exp: b gen_44
+PASS: gdb.base/sigall.exp: send signal 43
+PASS: gdb.base/sigall.exp: advance to 44
+PASS: gdb.base/sigall.exp: handle SIG44 stop print
+PASS: gdb.base/sigall.exp: b handle_44
+PASS: gdb.base/sigall.exp: b gen_45
+PASS: gdb.base/sigall.exp: send signal 44
+PASS: gdb.base/sigall.exp: advance to 45
+PASS: gdb.base/sigall.exp: handle SIG45 stop print
+PASS: gdb.base/sigall.exp: b handle_45
+PASS: gdb.base/sigall.exp: b gen_46
+PASS: gdb.base/sigall.exp: send signal 45
+PASS: gdb.base/sigall.exp: advance to 46
+PASS: gdb.base/sigall.exp: handle SIG46 stop print
+PASS: gdb.base/sigall.exp: b handle_46
+PASS: gdb.base/sigall.exp: b gen_47
+PASS: gdb.base/sigall.exp: send signal 46
+PASS: gdb.base/sigall.exp: advance to 47
+PASS: gdb.base/sigall.exp: handle SIG47 stop print
+PASS: gdb.base/sigall.exp: b handle_47
+PASS: gdb.base/sigall.exp: b gen_48
+PASS: gdb.base/sigall.exp: send signal 47
+PASS: gdb.base/sigall.exp: advance to 48
+PASS: gdb.base/sigall.exp: handle SIG48 stop print
+PASS: gdb.base/sigall.exp: b handle_48
+PASS: gdb.base/sigall.exp: b gen_49
+PASS: gdb.base/sigall.exp: send signal 48
+PASS: gdb.base/sigall.exp: advance to 49
+PASS: gdb.base/sigall.exp: handle SIG49 stop print
+PASS: gdb.base/sigall.exp: b handle_49
+PASS: gdb.base/sigall.exp: b gen_50
+PASS: gdb.base/sigall.exp: send signal 49
+PASS: gdb.base/sigall.exp: advance to 50
+PASS: gdb.base/sigall.exp: handle SIG50 stop print
+PASS: gdb.base/sigall.exp: b handle_50
+PASS: gdb.base/sigall.exp: b gen_51
+PASS: gdb.base/sigall.exp: send signal 50
+PASS: gdb.base/sigall.exp: advance to 51
+PASS: gdb.base/sigall.exp: handle SIG51 stop print
+PASS: gdb.base/sigall.exp: b handle_51
+PASS: gdb.base/sigall.exp: b gen_52
+PASS: gdb.base/sigall.exp: send signal 51
+PASS: gdb.base/sigall.exp: advance to 52
+PASS: gdb.base/sigall.exp: handle SIG52 stop print
+PASS: gdb.base/sigall.exp: b handle_52
+PASS: gdb.base/sigall.exp: b gen_53
+PASS: gdb.base/sigall.exp: send signal 52
+PASS: gdb.base/sigall.exp: advance to 53
+PASS: gdb.base/sigall.exp: handle SIG53 stop print
+PASS: gdb.base/sigall.exp: b handle_53
+PASS: gdb.base/sigall.exp: b gen_54
+PASS: gdb.base/sigall.exp: send signal 53
+PASS: gdb.base/sigall.exp: advance to 54
+PASS: gdb.base/sigall.exp: handle SIG54 stop print
+PASS: gdb.base/sigall.exp: b handle_54
+PASS: gdb.base/sigall.exp: b gen_55
+PASS: gdb.base/sigall.exp: send signal 54
+PASS: gdb.base/sigall.exp: advance to 55
+PASS: gdb.base/sigall.exp: handle SIG55 stop print
+PASS: gdb.base/sigall.exp: b handle_55
+PASS: gdb.base/sigall.exp: b gen_56
+PASS: gdb.base/sigall.exp: send signal 55
+PASS: gdb.base/sigall.exp: advance to 56
+PASS: gdb.base/sigall.exp: handle SIG56 stop print
+PASS: gdb.base/sigall.exp: b handle_56
+PASS: gdb.base/sigall.exp: b gen_57
+PASS: gdb.base/sigall.exp: send signal 56
+PASS: gdb.base/sigall.exp: advance to 57
+PASS: gdb.base/sigall.exp: handle SIG57 stop print
+PASS: gdb.base/sigall.exp: b handle_57
+PASS: gdb.base/sigall.exp: b gen_58
+PASS: gdb.base/sigall.exp: send signal 57
+PASS: gdb.base/sigall.exp: advance to 58
+PASS: gdb.base/sigall.exp: handle SIG58 stop print
+PASS: gdb.base/sigall.exp: b handle_58
+PASS: gdb.base/sigall.exp: b gen_59
+PASS: gdb.base/sigall.exp: send signal 58
+PASS: gdb.base/sigall.exp: advance to 59
+PASS: gdb.base/sigall.exp: handle SIG59 stop print
+PASS: gdb.base/sigall.exp: b handle_59
+PASS: gdb.base/sigall.exp: b gen_60
+PASS: gdb.base/sigall.exp: send signal 59
+PASS: gdb.base/sigall.exp: advance to 60
+PASS: gdb.base/sigall.exp: handle SIG60 stop print
+PASS: gdb.base/sigall.exp: b handle_60
+PASS: gdb.base/sigall.exp: b gen_61
+PASS: gdb.base/sigall.exp: send signal 60
+PASS: gdb.base/sigall.exp: advance to 61
+PASS: gdb.base/sigall.exp: handle SIG61 stop print
+PASS: gdb.base/sigall.exp: b handle_61
+PASS: gdb.base/sigall.exp: b gen_62
+PASS: gdb.base/sigall.exp: send signal 61
+PASS: gdb.base/sigall.exp: advance to 62
+PASS: gdb.base/sigall.exp: handle SIG62 stop print
+PASS: gdb.base/sigall.exp: b handle_62
+PASS: gdb.base/sigall.exp: b gen_63
+PASS: gdb.base/sigall.exp: send signal 62
+PASS: gdb.base/sigall.exp: advance to 63
+PASS: gdb.base/sigall.exp: handle SIG63 stop print
+PASS: gdb.base/sigall.exp: b handle_63
+PASS: gdb.base/sigall.exp: b gen_TERM
+PASS: gdb.base/sigall.exp: send signal 63
+PASS: gdb.base/sigall.exp: advance to TERM
+PASS: gdb.base/sigall.exp: handle SIGTERM stop print
+PASS: gdb.base/sigall.exp: b handle_TERM
+PASS: gdb.base/sigall.exp: get signal TERM
+PASS: gdb.base/sigall.exp: send signal TERM
+FAIL: gdb.base/sigall.exp: setting breakpoint at exit
+Running ./gdb.base/sigaltstack.exp ...
+PASS: gdb.base/sigaltstack.exp: handle SIGALRM print pass nostop
+PASS: gdb.base/sigaltstack.exp: handle SIGVTALRM print pass nostop
+PASS: gdb.base/sigaltstack.exp: handle SIGPROF print pass nostop
+PASS: gdb.base/sigaltstack.exp: break catcher if level == INNER
+PASS: gdb.base/sigaltstack.exp: continue to catch
+PASS: gdb.base/sigaltstack.exp: next
+PASS: gdb.base/sigaltstack.exp: backtrace
+FAIL: gdb.base/sigaltstack.exp: finish from catch LEAF
+FAIL: gdb.base/sigaltstack.exp: finish to throw INNER
+FAIL: gdb.base/sigaltstack.exp: finish to catch INNER (GDB internal error)
+FAIL: gdb.base/sigaltstack.exp: finish from catch INNER (GDB internal error)
+FAIL: gdb.base/sigaltstack.exp: finish to OUTER (GDB internal error)
+FAIL: gdb.base/sigaltstack.exp: finish to catch MAIN (GDB internal error)
+FAIL: gdb.base/sigaltstack.exp: finish to MAIN (GDB internal error)
+Running ./gdb.base/sigbpt.exp ...
+PASS: gdb.base/sigbpt.exp: break keeper
+PASS: gdb.base/sigbpt.exp: display/i $pc
+PASS: gdb.base/sigbpt.exp: advance to the bowler
+PASS: gdb.base/sigbpt.exp: stepping to fault
+PASS: gdb.base/sigbpt.exp: get insn after fault
+PASS: gdb.base/sigbpt.exp: Verify that SIGSEGV occurs at the last STEPI insn
+PASS: gdb.base/sigbpt.exp: rerun to main
+PASS: gdb.base/sigbpt.exp: stepi; pass SIGSEGV
+PASS: gdb.base/sigbpt.exp: stepi; continue to keeper
+PASS: gdb.base/sigbpt.exp: stepi; nopass SIGSEGV
+KFAIL: gdb.base/sigbpt.exp: stepi; stepi out of handler (corrupt pc) (PRMS: gdb/1702)
+PASS: gdb.base/sigbpt.exp: rerun to main
+PASS: gdb.base/sigbpt.exp: stepi bp before segv; pass SIGSEGV
+PASS: gdb.base/sigbpt.exp: stepi bp before segv; continue to keeper
+PASS: gdb.base/sigbpt.exp: stepi bp before segv; nopass SIGSEGV
+PASS: gdb.base/sigbpt.exp: stepi bp before segv; set breakpoint 0 of 1
+KFAIL: gdb.base/sigbpt.exp: stepi bp before segv; stepi out of handler (corrupt pc) (PRMS: gdb/1702)
+PASS: gdb.base/sigbpt.exp: stepi bp before segv; clear breakpoint 0 of 1
+PASS: gdb.base/sigbpt.exp: rerun to main
+PASS: gdb.base/sigbpt.exp: stepi bp at segv; pass SIGSEGV
+PASS: gdb.base/sigbpt.exp: stepi bp at segv; continue to keeper
+PASS: gdb.base/sigbpt.exp: stepi bp at segv; nopass SIGSEGV
+PASS: gdb.base/sigbpt.exp: stepi bp at segv; set breakpoint 0 of 1
+KFAIL: gdb.base/sigbpt.exp: stepi bp at segv; stepi out of handler (corrupt pc) (PRMS: gdb/1702)
+PASS: gdb.base/sigbpt.exp: stepi bp at segv; clear breakpoint 0 of 1
+PASS: gdb.base/sigbpt.exp: rerun to main
+PASS: gdb.base/sigbpt.exp: stepi bp before and at segv; pass SIGSEGV
+PASS: gdb.base/sigbpt.exp: stepi bp before and at segv; continue to keeper
+PASS: gdb.base/sigbpt.exp: stepi bp before and at segv; nopass SIGSEGV
+PASS: gdb.base/sigbpt.exp: stepi bp before and at segv; set breakpoint 0 of 2
+PASS: gdb.base/sigbpt.exp: stepi bp before and at segv; set breakpoint 1 of 2
+KFAIL: gdb.base/sigbpt.exp: stepi bp before and at segv; stepi out of handler (corrupt pc) (PRMS: gdb/1702)
+PASS: gdb.base/sigbpt.exp: stepi bp before and at segv; clear breakpoint 0 of 2
+PASS: gdb.base/sigbpt.exp: stepi bp before and at segv; clear breakpoint 1 of 2
+PASS: gdb.base/sigbpt.exp: rerun to main
+PASS: gdb.base/sigbpt.exp: cont; pass SIGSEGV
+PASS: gdb.base/sigbpt.exp: cont; continue to keeper
+PASS: gdb.base/sigbpt.exp: cont; nopass SIGSEGV
+PASS: gdb.base/sigbpt.exp: cont; set breakpoint 0 of 1
+PASS: gdb.base/sigbpt.exp: cont; continue to breakpoint at fault
+PASS: gdb.base/sigbpt.exp: cont; stepi fault
+PASS: gdb.base/sigbpt.exp: cont; clear breakpoint 0 of 1
+PASS: gdb.base/sigbpt.exp: rerun to main
+PASS: gdb.base/sigbpt.exp: cont bp after segv; pass SIGSEGV
+PASS: gdb.base/sigbpt.exp: cont bp after segv; continue to keeper
+PASS: gdb.base/sigbpt.exp: cont bp after segv; nopass SIGSEGV
+PASS: gdb.base/sigbpt.exp: cont bp after segv; set breakpoint 0 of 2
+PASS: gdb.base/sigbpt.exp: cont bp after segv; set breakpoint 1 of 2
+PASS: gdb.base/sigbpt.exp: cont bp after segv; continue to breakpoint at fault
+PASS: gdb.base/sigbpt.exp: cont bp after segv; stepi fault
+PASS: gdb.base/sigbpt.exp: cont bp after segv; clear breakpoint 0 of 2
+PASS: gdb.base/sigbpt.exp: cont bp after segv; clear breakpoint 1 of 2
+PASS: gdb.base/sigbpt.exp: rerun to main
+PASS: gdb.base/sigbpt.exp: cont bp before and after segv; pass SIGSEGV
+PASS: gdb.base/sigbpt.exp: cont bp before and after segv; continue to keeper
+PASS: gdb.base/sigbpt.exp: cont bp before and after segv; nopass SIGSEGV
+PASS: gdb.base/sigbpt.exp: cont bp before and after segv; set breakpoint 0 of 3
+PASS: gdb.base/sigbpt.exp: cont bp before and after segv; set breakpoint 1 of 3
+PASS: gdb.base/sigbpt.exp: cont bp before and after segv; set breakpoint 2 of 3
+PASS: gdb.base/sigbpt.exp: cont bp before and after segv; continue to breakpoint at fault
+PASS: gdb.base/sigbpt.exp: cont bp before and after segv; stepi fault
+PASS: gdb.base/sigbpt.exp: cont bp before and after segv; clear breakpoint 0 of 3
+PASS: gdb.base/sigbpt.exp: cont bp before and after segv; clear breakpoint 1 of 3
+PASS: gdb.base/sigbpt.exp: cont bp before and after segv; clear breakpoint 2 of 3
+Running ./gdb.base/sigchld.exp ...
+PASS: gdb.base/sigchld.exp: set breakpoint at success exit
+PASS: gdb.base/sigchld.exp: set breakpoint at failure exit
+PASS: gdb.base/sigchld.exp: SIGCHLD blocked in inferior
+Running ./gdb.base/siginfo-addr.exp ...
+Running ./gdb.base/siginfo.exp ...
+PASS: gdb.base/siginfo.exp: display/i $pc
+PASS: gdb.base/siginfo.exp: break handler
+PASS: gdb.base/siginfo.exp: continue to stepi handler
+PASS: gdb.base/siginfo.exp: backtrace for nexti
+PASS: gdb.base/siginfo.exp: step out of handler
+Running ./gdb.base/siginfo-infcall.exp ...
+PASS: gdb.base/siginfo-infcall.exp: continue to SIGUSR1
+PASS: gdb.base/siginfo-infcall.exp: p callme ()
+PASS: gdb.base/siginfo-infcall.exp: continue to the handler
+Running ./gdb.base/siginfo-obj.exp ...
+PASS: gdb.base/siginfo-obj.exp: continue to signal
+PASS: gdb.base/siginfo-obj.exp: save a core file
+PASS: gdb.base/siginfo-obj.exp: Extract si_addr
+PASS: gdb.base/siginfo-obj.exp: Extract si_errno
+PASS: gdb.base/siginfo-obj.exp: Extract si_code
+PASS: gdb.base/siginfo-obj.exp: Extract si_signo
+PASS: gdb.base/siginfo-obj.exp: break 38
+PASS: gdb.base/siginfo-obj.exp: continue to handler
+PASS: gdb.base/siginfo-obj.exp: p ssi_addr
+PASS: gdb.base/siginfo-obj.exp: p ssi_errno
+PASS: gdb.base/siginfo-obj.exp: p ssi_code
+PASS: gdb.base/siginfo-obj.exp: p ssi_signo
+PASS: gdb.base/siginfo-obj.exp: continue to signal
+PASS: gdb.base/siginfo-obj.exp: p $_siginfo._sifields._sigfault.si_addr = 0x666
+PASS: gdb.base/siginfo-obj.exp: p $_siginfo.si_errno = 666
+PASS: gdb.base/siginfo-obj.exp: p $_siginfo.si_code = 999
+PASS: gdb.base/siginfo-obj.exp: p $_siginfo.si_signo = 11
+PASS: gdb.base/siginfo-obj.exp: break 38
+PASS: gdb.base/siginfo-obj.exp: continue to handler
+PASS: gdb.base/siginfo-obj.exp: p ssi_addr
+PASS: gdb.base/siginfo-obj.exp: p ssi_errno
+PASS: gdb.base/siginfo-obj.exp: p ssi_code
+PASS: gdb.base/siginfo-obj.exp: p ssi_signo
+PASS: gdb.base/siginfo-obj.exp: core siginfo-obj.gcore
+PASS: gdb.base/siginfo-obj.exp: p $_siginfo.si_signo from core file
+PASS: gdb.base/siginfo-obj.exp: p $_siginfo.si_errno from core file
+PASS: gdb.base/siginfo-obj.exp: p $_siginfo.si_code from core file
+PASS: gdb.base/siginfo-obj.exp: p $_siginfo._sifields._sigfault.si_addr from core file
+Running ./gdb.base/siginfo-thread.exp ...
+PASS: gdb.base/siginfo-thread.exp: successfully compiled posix threads test case
+PASS: gdb.base/siginfo-thread.exp: continue to signal
+PASS: gdb.base/siginfo-thread.exp: save a core file
+PASS: gdb.base/siginfo-thread.exp: Extract si_addr
+PASS: gdb.base/siginfo-thread.exp: Extract si_errno
+PASS: gdb.base/siginfo-thread.exp: Extract si_code
+PASS: gdb.base/siginfo-thread.exp: Extract si_signo
+PASS: gdb.base/siginfo-thread.exp: break 39
+PASS: gdb.base/siginfo-thread.exp: continue to handler
+PASS: gdb.base/siginfo-thread.exp: p ssi_addr
+PASS: gdb.base/siginfo-thread.exp: p ssi_errno
+PASS: gdb.base/siginfo-thread.exp: p ssi_code
+PASS: gdb.base/siginfo-thread.exp: p ssi_signo
+PASS: gdb.base/siginfo-thread.exp: thread 1
+PASS: gdb.base/siginfo-thread.exp: test signal in main thread
+PASS: gdb.base/siginfo-thread.exp: core siginfo-thread.gcore
+PASS: gdb.base/siginfo-thread.exp: p $_siginfo.si_signo from core file
+PASS: gdb.base/siginfo-thread.exp: p $_siginfo.si_errno from core file
+PASS: gdb.base/siginfo-thread.exp: p $_siginfo.si_code from core file
+PASS: gdb.base/siginfo-thread.exp: p $_siginfo._sifields._sigfault.si_addr from core file
+PASS: gdb.base/siginfo-thread.exp: set variable $count = 0
+PASS: gdb.base/siginfo-thread.exp: select thread 1 with core file
+PASS: gdb.base/siginfo-thread.exp: update counter in thread 1
+PASS: gdb.base/siginfo-thread.exp: select thread 2 with core file
+PASS: gdb.base/siginfo-thread.exp: update counter in thread 2
+PASS: gdb.base/siginfo-thread.exp: print $count
+Running ./gdb.base/signals.exp ...
+PASS: gdb.base/signals.exp: handle all print
+PASS: gdb.base/signals.exp: set variable count = 0
+PASS: gdb.base/signals.exp: break handler if 0
+PASS: gdb.base/signals.exp: set $handler_breakpoint_number = $bpnum
+PASS: gdb.base/signals.exp: next to signal
+PASS: gdb.base/signals.exp: next to alarm #1
+PASS: gdb.base/signals.exp: next to ++count #1
+PASS: gdb.base/signals.exp: p func1 () #1
+PASS: gdb.base/signals.exp: p count #1
+PASS: gdb.base/signals.exp: condition $handler_breakpoint_number
+PASS: gdb.base/signals.exp: next to alarm #2
+PASS: gdb.base/signals.exp: next to ++count #2
+PASS: gdb.base/signals.exp: p func1 () #2
+PASS: gdb.base/signals.exp: backtrace from handler when calling func1
+PASS: gdb.base/signals.exp: continue
+PASS: gdb.base/signals.exp: p count #2
+PASS: gdb.base/signals.exp: info signals
+PASS: gdb.base/signals.exp: info signal SIGTRAP
+PASS: gdb.base/signals.exp: info signal 5
+PASS: gdb.base/signals.exp: handle without arguments
+PASS: gdb.base/signals.exp: handle with bogus SIG
+PASS: gdb.base/signals.exp: handle SIG with bogus action
+PASS: gdb.base/signals.exp: handle SIG with multiple conflicting actions
+PASS: gdb.base/signals.exp: handle SIG parses all legal actions
+PASS: gdb.base/signals.exp: handle multiple SIGs
+PASS: gdb.base/signals.exp: override SIGTRAP
+PASS: gdb.base/signals.exp: invalid signal number rejected
+PASS: gdb.base/signals.exp: handle multiple SIGs via integer range
+PASS: gdb.base/signals.exp: handle multiple SIGs via reverse integer range
+PASS: gdb.base/signals.exp: override SIGINT
+PASS: gdb.base/signals.exp: signal without arguments disallowed
+PASS: gdb.base/signals.exp: signal SIGUSR1
+PASS: gdb.base/signals.exp: backtrace for SIGUSR1
+Running ./gdb.base/signest.exp ...
+PASS: gdb.base/signest.exp: continue to fault
+PASS: gdb.base/signest.exp: set conditional breakpoint
+PASS: gdb.base/signest.exp: pass SIGSEGV
+PASS: gdb.base/signest.exp: pass SIGBUS
+PASS: gdb.base/signest.exp: run through nested faults
+Running ./gdb.base/signull.exp ...
+PASS: gdb.base/signull.exp: set for function pointer probe
+PASS: gdb.base/signull.exp: probe function pointer (function entry-point)
+PASS: gdb.base/signull.exp: rerun to main
+PASS: gdb.base/signull.exp: break bowler
+PASS: gdb.base/signull.exp: break keeper
+PASS: gdb.base/signull.exp: handle SIGSEGV
+PASS: gdb.base/signull.exp: handle SIGBUS
+PASS: gdb.base/signull.exp: data read; start with the bowler
+PASS: gdb.base/signull.exp: data read; select the pointer type
+PASS: gdb.base/signull.exp: data read; take the SIGSEGV
+PASS: gdb.base/signull.exp: data read; backtrace from SIGSEGV
+PASS: gdb.base/signull.exp: data read; continue to the keeper
+PASS: gdb.base/signull.exp: data read; backtrace from keeper through SIGSEGV
+PASS: gdb.base/signull.exp: data write; start with the bowler
+PASS: gdb.base/signull.exp: data write; select the pointer type
+PASS: gdb.base/signull.exp: data write; take the SIGSEGV
+PASS: gdb.base/signull.exp: data write; backtrace from SIGSEGV
+PASS: gdb.base/signull.exp: data write; continue to the keeper
+PASS: gdb.base/signull.exp: data write; backtrace from keeper through SIGSEGV
+PASS: gdb.base/signull.exp: code; start with the bowler
+PASS: gdb.base/signull.exp: code; select the pointer type
+PASS: gdb.base/signull.exp: code; take the SIGSEGV
+PASS: gdb.base/signull.exp: code; backtrace from SIGSEGV
+PASS: gdb.base/signull.exp: code; continue to the keeper
+PASS: gdb.base/signull.exp: code; backtrace from keeper through SIGSEGV
+Running ./gdb.base/sigrepeat.exp ...
+PASS: gdb.base/sigrepeat.exp: advance to infinite loop
+PASS: gdb.base/sigrepeat.exp: next
+Running ./gdb.base/sigstep.exp ...
+PASS: gdb.base/sigstep.exp: display/i $pc
+PASS: gdb.base/sigstep.exp: break handler
+PASS: gdb.base/sigstep.exp: continue to stepi handler
+PASS: gdb.base/sigstep.exp: backtrace for nexti
+PASS: gdb.base/sigstep.exp: step from handler; continue to handler
+PASS: gdb.base/sigstep.exp: step from handler; leave handler
+PASS: gdb.base/sigstep.exp: stepi from handleri; continue to handler
+PASS: gdb.base/sigstep.exp: stepi from handleri; leave handler
+PASS: gdb.base/sigstep.exp: stepi from handleri; leave signal trampoline (in main)
+PASS: gdb.base/sigstep.exp: next from handler; continue to handler
+PASS: gdb.base/sigstep.exp: next from handler; leave handler
+PASS: gdb.base/sigstep.exp: nexti from handleri; continue to handler
+PASS: gdb.base/sigstep.exp: nexti from handleri; leave handler
+PASS: gdb.base/sigstep.exp: nexti from handleri; leave signal trampoline (in main)
+PASS: gdb.base/sigstep.exp: finish from handleri; continue to handler
+FAIL: gdb.base/sigstep.exp: finish from handleri; leave handler
+FAIL: gdb.base/sigstep.exp: finish from handleri; leave signal trampoline
+FAIL: gdb.base/sigstep.exp: return from handleri; continue to handler
+FAIL: gdb.base/sigstep.exp: return from handleri; leave handler
+FAIL: gdb.base/sigstep.exp: return from handleri; leave signal trampoline
+FAIL: gdb.base/sigstep.exp: Set done as return will have skipped it
+FAIL: gdb.base/sigstep.exp: set itimer = itimer_real
+PASS: gdb.base/sigstep.exp: break 79
+FAIL: gdb.base/sigstep.exp: step to handler; resync (the program is no longer running)
+PASS: gdb.base/sigstep.exp: step to handler; advance to infinite loop
+PASS: gdb.base/sigstep.exp: step to handler; break handler
+FAIL: gdb.base/sigstep.exp: step to handler; performing step (the program is no longer running)
+PASS: gdb.base/sigstep.exp: step to handler; clear handler
+FAIL: gdb.base/sigstep.exp: next to handler; resync (the program is no longer running)
+PASS: gdb.base/sigstep.exp: next to handler; advance to infinite loop
+PASS: gdb.base/sigstep.exp: next to handler; break handler
+FAIL: gdb.base/sigstep.exp: next to handler; performing next (the program is no longer running)
+PASS: gdb.base/sigstep.exp: next to handler; clear handler
+FAIL: gdb.base/sigstep.exp: continue to handler; resync (the program is no longer running)
+PASS: gdb.base/sigstep.exp: continue to handler; advance to infinite loop
+PASS: gdb.base/sigstep.exp: continue to handler; break handler
+FAIL: gdb.base/sigstep.exp: continue to handler; performing continue (the program is no longer running)
+PASS: gdb.base/sigstep.exp: continue to handler; clear handler
+FAIL: gdb.base/sigstep.exp: step to handler entry; resync (the program is no longer running)
+PASS: gdb.base/sigstep.exp: step to handler entry; advance to infinite loop
+PASS: gdb.base/sigstep.exp: step to handler entry; break handler
+FAIL: gdb.base/sigstep.exp: step to handler entry; performing step (the program is no longer running)
+PASS: gdb.base/sigstep.exp: step to handler entry; clear handler
+FAIL: gdb.base/sigstep.exp: next to handler entry; resync (the program is no longer running)
+PASS: gdb.base/sigstep.exp: next to handler entry; advance to infinite loop
+PASS: gdb.base/sigstep.exp: next to handler entry; break handler
+FAIL: gdb.base/sigstep.exp: next to handler entry; performing next (the program is no longer running)
+PASS: gdb.base/sigstep.exp: next to handler entry; clear handler
+FAIL: gdb.base/sigstep.exp: continue to handler entry; resync (the program is no longer running)
+PASS: gdb.base/sigstep.exp: continue to handler entry; advance to infinite loop
+PASS: gdb.base/sigstep.exp: continue to handler entry; break handler
+FAIL: gdb.base/sigstep.exp: continue to handler entry; performing continue (the program is no longer running)
+PASS: gdb.base/sigstep.exp: continue to handler entry; clear handler
+FAIL: gdb.base/sigstep.exp: step over handler; resync (the program is no longer running)
+PASS: gdb.base/sigstep.exp: step over handler; advance to infinite loop
+FAIL: gdb.base/sigstep.exp: step over handler; performing step (the program is no longer running)
+FAIL: gdb.base/sigstep.exp: next over handler; resync (the program is no longer running)
+PASS: gdb.base/sigstep.exp: next over handler; advance to infinite loop
+FAIL: gdb.base/sigstep.exp: next over handler; performing next (the program is no longer running)
+FAIL: gdb.base/sigstep.exp: continue over handler; resync (the program is no longer running)
+PASS: gdb.base/sigstep.exp: continue over handler; advance to infinite loop
+FAIL: gdb.base/sigstep.exp: continue over handler; performing continue (the program is no longer running)
+FAIL: gdb.base/sigstep.exp: step on breakpoint, to handler; resync (the program is no longer running)
+PASS: gdb.base/sigstep.exp: step on breakpoint, to handler; break infinite loop
+PASS: gdb.base/sigstep.exp: step on breakpoint, to handler; break handler
+FAIL: gdb.base/sigstep.exp: step on breakpoint, to handler; continue to infinite loop (the program is no longer running)
+FAIL: gdb.base/sigstep.exp: step on breakpoint, to handler; performing step (the program is no longer running)
+PASS: gdb.base/sigstep.exp: step on breakpoint, to handler; clear infinite loop
+PASS: gdb.base/sigstep.exp: step on breakpoint, to handler; clear handler
+FAIL: gdb.base/sigstep.exp: next on breakpoint, to handler; resync (the program is no longer running)
+PASS: gdb.base/sigstep.exp: next on breakpoint, to handler; break infinite loop
+PASS: gdb.base/sigstep.exp: next on breakpoint, to handler; break handler
+FAIL: gdb.base/sigstep.exp: next on breakpoint, to handler; continue to infinite loop (the program is no longer running)
+FAIL: gdb.base/sigstep.exp: next on breakpoint, to handler; performing next (the program is no longer running)
+PASS: gdb.base/sigstep.exp: next on breakpoint, to handler; clear infinite loop
+PASS: gdb.base/sigstep.exp: next on breakpoint, to handler; clear handler
+FAIL: gdb.base/sigstep.exp: continue on breakpoint, to handler; resync (the program is no longer running)
+PASS: gdb.base/sigstep.exp: continue on breakpoint, to handler; break infinite loop
+PASS: gdb.base/sigstep.exp: continue on breakpoint, to handler; break handler
+FAIL: gdb.base/sigstep.exp: continue on breakpoint, to handler; continue to infinite loop (the program is no longer running)
+FAIL: gdb.base/sigstep.exp: continue on breakpoint, to handler; performing continue (the program is no longer running)
+PASS: gdb.base/sigstep.exp: continue on breakpoint, to handler; clear infinite loop
+PASS: gdb.base/sigstep.exp: continue on breakpoint, to handler; clear handler
+FAIL: gdb.base/sigstep.exp: step on breakpoint, to handler entry; resync (the program is no longer running)
+PASS: gdb.base/sigstep.exp: step on breakpoint, to handler entry; break infinite loop
+PASS: gdb.base/sigstep.exp: step on breakpoint, to handler entry; break handler
+FAIL: gdb.base/sigstep.exp: step on breakpoint, to handler entry; continue to infinite loop (the program is no longer running)
+FAIL: gdb.base/sigstep.exp: step on breakpoint, to handler entry; performing step (the program is no longer running)
+PASS: gdb.base/sigstep.exp: step on breakpoint, to handler entry; clear infinite loop
+PASS: gdb.base/sigstep.exp: step on breakpoint, to handler entry; clear handler
+FAIL: gdb.base/sigstep.exp: next on breakpoint, to handler entry; resync (the program is no longer running)
+PASS: gdb.base/sigstep.exp: next on breakpoint, to handler entry; break infinite loop
+PASS: gdb.base/sigstep.exp: next on breakpoint, to handler entry; break handler
+FAIL: gdb.base/sigstep.exp: next on breakpoint, to handler entry; continue to infinite loop (the program is no longer running)
+FAIL: gdb.base/sigstep.exp: next on breakpoint, to handler entry; performing next (the program is no longer running)
+PASS: gdb.base/sigstep.exp: next on breakpoint, to handler entry; clear infinite loop
+PASS: gdb.base/sigstep.exp: next on breakpoint, to handler entry; clear handler
+FAIL: gdb.base/sigstep.exp: continue on breakpoint, to handler entry; resync (the program is no longer running)
+PASS: gdb.base/sigstep.exp: continue on breakpoint, to handler entry; break infinite loop
+PASS: gdb.base/sigstep.exp: continue on breakpoint, to handler entry; break handler
+FAIL: gdb.base/sigstep.exp: continue on breakpoint, to handler entry; continue to infinite loop (the program is no longer running)
+FAIL: gdb.base/sigstep.exp: continue on breakpoint, to handler entry; performing continue (the program is no longer running)
+PASS: gdb.base/sigstep.exp: continue on breakpoint, to handler entry; clear infinite loop
+PASS: gdb.base/sigstep.exp: continue on breakpoint, to handler entry; clear handler
+FAIL: gdb.base/sigstep.exp: step on breakpoint, skip handler; resync (the program is no longer running)
+PASS: gdb.base/sigstep.exp: step on breakpoint, skip handler; break infinite loop
+FAIL: gdb.base/sigstep.exp: step on breakpoint, skip handler; continue to infinite loop (the program is no longer running)
+FAIL: gdb.base/sigstep.exp: step on breakpoint, skip handler; performing step (the program is no longer running)
+PASS: gdb.base/sigstep.exp: step on breakpoint, skip handler; clear infinite loop
+FAIL: gdb.base/sigstep.exp: next on breakpoint, skip handler; resync (the program is no longer running)
+PASS: gdb.base/sigstep.exp: next on breakpoint, skip handler; break infinite loop
+FAIL: gdb.base/sigstep.exp: next on breakpoint, skip handler; continue to infinite loop (the program is no longer running)
+FAIL: gdb.base/sigstep.exp: next on breakpoint, skip handler; performing next (the program is no longer running)
+PASS: gdb.base/sigstep.exp: next on breakpoint, skip handler; clear infinite loop
+FAIL: gdb.base/sigstep.exp: continue on breakpoint, skip handler; resync (the program is no longer running)
+PASS: gdb.base/sigstep.exp: continue on breakpoint, skip handler; break infinite loop
+FAIL: gdb.base/sigstep.exp: continue on breakpoint, skip handler; continue to infinite loop (the program is no longer running)
+FAIL: gdb.base/sigstep.exp: continue on breakpoint, skip handler; performing continue (the program is no longer running)
+PASS: gdb.base/sigstep.exp: continue on breakpoint, skip handler; clear infinite loop
+Running ./gdb.base/sizeof.exp ...
+Running ./gdb.base/skip.exp ...
+PASS: gdb.base/skip.exp: skip file (no default file)
+PASS: gdb.base/skip.exp: skip function
+PASS: gdb.base/skip.exp: skip (no default function)
+PASS: gdb.base/skip.exp: info skip empty
+PASS: gdb.base/skip.exp: skip file (skip.c)
+PASS: gdb.base/skip.exp: skip (main)
+PASS: gdb.base/skip.exp: skip file skip1.c
+PASS: gdb.base/skip.exp: skip function baz
+PASS: gdb.base/skip.exp: skip enable 999
+PASS: gdb.base/skip.exp: skip disable 999
+PASS: gdb.base/skip.exp: skip delete 999
+PASS: gdb.base/skip.exp: skip enable a
+PASS: gdb.base/skip.exp: skip disable a
+PASS: gdb.base/skip.exp: skip delete a
+PASS: gdb.base/skip.exp: info skip 999
+PASS: gdb.base/skip.exp: info skip
+PASS: gdb.base/skip.exp: step in the main
+PASS: gdb.base/skip.exp: step after all ignored
+PASS: gdb.base/skip.exp: skip delete 1
+PASS: gdb.base/skip.exp: info skip (delete 1)
+PASS: gdb.base/skip.exp: step after deleting 1 (1)
+PASS: gdb.base/skip.exp: step after deleting 1 (2)
+PASS: gdb.base/skip.exp: step after deleting 1 (3)
+PASS: gdb.base/skip.exp: skip disable 3
+PASS: gdb.base/skip.exp: info skip shows entry as disabled
+FAIL: gdb.base/skip.exp: step after disabling 3 (1)
+PASS: gdb.base/skip.exp: step after disabling 3 (2)
+FAIL: gdb.base/skip.exp: step after disabling 3 (3)
+PASS: gdb.base/skip.exp: step after disabling 3 (4)
+PASS: gdb.base/skip.exp: step after disabling 3 (5)
+PASS: gdb.base/skip.exp: skip enable 3
+PASS: gdb.base/skip.exp: info skip shows entry as enabled
+PASS: gdb.base/skip.exp: step after enable 3 (1)
+PASS: gdb.base/skip.exp: step after enable 3 (2)
+PASS: gdb.base/skip.exp: step after enable 3 (3)
+PASS: gdb.base/skip.exp: skip disable
+PASS: gdb.base/skip.exp: info skip after disabling all
+PASS: gdb.base/skip.exp: skip enable
+PASS: gdb.base/skip.exp: info skip after enabling all
+PASS: gdb.base/skip.exp: skip disable 4 2-3
+PASS: gdb.base/skip.exp: info skip after disabling 4 2-3
+PASS: gdb.base/skip.exp: skip enable 2-3
+PASS: gdb.base/skip.exp: info skip after enabling 2-3
+PASS: gdb.base/skip.exp: info skip 2-3
+PASS: gdb.base/skip.exp: skip delete 2 3
+PASS: gdb.base/skip.exp: info skip after deleting 2 3
+PASS: gdb.base/skip.exp: skip delete
+PASS: gdb.base/skip.exp: info skip after deleting all
+Running ./gdb.base/skip-solib.exp ...
+Running ./gdb.base/so-impl-ld.exp ...
+PASS: gdb.base/so-impl-ld.exp: step over solib call
+FAIL: gdb.base/so-impl-ld.exp: step into solib call
+FAIL: gdb.base/so-impl-ld.exp: step in solib call
+FAIL: gdb.base/so-impl-ld.exp: step out of solib call
+Running ./gdb.base/so-indr-cl.exp ...
+Running ./gdb.base/solib-corrupted.exp ...
+Running ./gdb.base/solib-disc.exp ...
+PASS: gdb.base/solib-disc.exp: set stop-on-solib-events 1
+FAIL: gdb.base/solib-disc.exp: continue to load (the program exited)
+FAIL: gdb.base/solib-disc.exp: save $pc after load
+FAIL: gdb.base/solib-disc.exp: disconnect after load
+FAIL: gdb.base/solib-disc.exp: reconnect after load
+Running ./gdb.base/solib-display.exp ...
+Running ./gdb.base/solib.exp ...
+Running ./gdb.base/solib-nodir.exp ...
+Running ./gdb.base/solib-overlap.exp ...
+Running ./gdb.base/solib-symbol.exp ...
+PASS: gdb.base/solib-symbol.exp: foo2 in main
+FAIL: gdb.base/solib-symbol.exp: foo in libmd (got interactive prompt)
+PASS: gdb.base/solib-symbol.exp: continue
+FAIL: gdb.base/solib-symbol.exp: foo2 in mdlib
+Running ./gdb.base/solib-weak.exp ...
+FAIL: gdb.base/solib-weak.exp: setting breakpoint at bar
+FAIL: gdb.base/solib-weak.exp: run to breakpoint - lib1 nodebug, lib2 nodebug, lib1 first (the program exited)
+FAIL: gdb.base/solib-weak.exp: setting breakpoint at bar
+FAIL: gdb.base/solib-weak.exp: run to breakpoint - lib1 nodebug, lib2 nodebug, lib2 first (the program exited)
+FAIL: gdb.base/solib-weak.exp: setting breakpoint at bar
+FAIL: gdb.base/solib-weak.exp: run to breakpoint - lib1 nodebug, lib2 debug, lib1 first (the program exited)
+FAIL: gdb.base/solib-weak.exp: setting breakpoint at bar
+FAIL: gdb.base/solib-weak.exp: run to breakpoint - lib1 nodebug, lib2 debug, lib2 first (the program exited)
+FAIL: gdb.base/solib-weak.exp: setting breakpoint at bar
+FAIL: gdb.base/solib-weak.exp: run to breakpoint - lib1 debug, lib2 nodebug, lib1 first (the program exited)
+FAIL: gdb.base/solib-weak.exp: setting breakpoint at bar
+FAIL: gdb.base/solib-weak.exp: run to breakpoint - lib1 debug, lib2 nodebug, lib2 first (the program exited)
+FAIL: gdb.base/solib-weak.exp: setting breakpoint at bar
+FAIL: gdb.base/solib-weak.exp: run to breakpoint - lib1 debug, lib2 debug, lib1 first (the program exited)
+FAIL: gdb.base/solib-weak.exp: setting breakpoint at bar
+FAIL: gdb.base/solib-weak.exp: run to breakpoint - lib1 debug, lib2 debug, lib2 first (the program exited)
+Running ./gdb.base/source.exp ...
+PASS: gdb.base/source.exp: script contains error
+PASS: gdb.base/source.exp: source -v
+PASS: gdb.base/source.exp: source after -v
+PASS: gdb.base/source.exp: set search directories
+PASS: gdb.base/source.exp: source -s
+PASS: gdb.base/source.exp: source -s -v
+PASS: gdb.base/source.exp: source -v -s
+Running ./gdb.base/stack-checking.exp ...
+PASS: gdb.base/stack-checking.exp: continue to breakpoint: breakpoint for small frame
+PASS: gdb.base/stack-checking.exp: bt
+PASS: gdb.base/stack-checking.exp: continue to breakpoint: breakpoint for medium frame
+PASS: gdb.base/stack-checking.exp: bt
+PASS: gdb.base/stack-checking.exp: continue to breakpoint: breakpoint for big frame
+PASS: gdb.base/stack-checking.exp: bt
+Running ./gdb.base/stale-infcall.exp ...
+PASS: gdb.base/stale-infcall.exp: continue to breakpoint: test-next
+PASS: gdb.base/stale-infcall.exp: set $test_fail_bpnum=$bpnum
+XFAIL: gdb.base/stale-infcall.exp: test system longjmp tracking support
+UNTESTED: gdb.base/stale-infcall.exp: System lacks support for tracking longjmps
+Running ./gdb.base/stap-probe.exp ...
+gdb compile failed, ./gdb.base/stap-probe.c:39:21: fatal error: sys/sdt.h: No such file or directory
+ #include <sys/sdt.h>
+ ^
+compilation terminated.
+UNTESTED: gdb.base/stap-probe.exp: without semaphore, not optimized: stap-probe.exp
+UNTESTED: gdb.base/stap-probe.exp: without semaphore, not optimized: stap-probe.exp
+Running ./gdb.base/start.exp ...
+UNTESTED: gdb.base/start.exp: start
+Running ./gdb.base/step-break.exp ...
+PASS: gdb.base/step-break.exp: breakpoint line number
+PASS: gdb.base/step-break.exp: run until breakpoint set at a line number
+PASS: gdb.base/step-break.exp: next 2 (1)
+PASS: gdb.base/step-break.exp: next 2 (2)
+PASS: gdb.base/step-break.exp: next 2 (3)
+PASS: gdb.base/step-break.exp: next 2 (4)
+PASS: gdb.base/step-break.exp: next 2 (5)
+PASS: gdb.base/step-break.exp: next 2 (6)
+Running ./gdb.base/step-bt.exp ...
+PASS: gdb.base/step-bt.exp: breakpoint at first instruction of hello()
+PASS: gdb.base/step-bt.exp: run to hello()
+PASS: gdb.base/step-bt.exp: step first instruction
+PASS: gdb.base/step-bt.exp: backtrace after first instruction step
+PASS: gdb.base/step-bt.exp: step second instruction
+PASS: gdb.base/step-bt.exp: backtrace after second instruction step
+Running ./gdb.base/step-line.exp ...
+PASS: gdb.base/step-line.exp: break f1
+PASS: gdb.base/step-line.exp: continue to f1
+PASS: gdb.base/step-line.exp: next over dummy 1
+PASS: gdb.base/step-line.exp: next to dummy 2
+PASS: gdb.base/step-line.exp: next over dummy 2
+PASS: gdb.base/step-line.exp: step into f2
+PASS: gdb.base/step-line.exp: next over dummy 4
+PASS: gdb.base/step-line.exp: next to dummy 5
+PASS: gdb.base/step-line.exp: next to dummy 6
+PASS: gdb.base/step-line.exp: next over dummy 6
+PASS: gdb.base/step-line.exp: next to dummy 7
+PASS: gdb.base/step-line.exp: next to dummy 8
+PASS: gdb.base/step-line.exp: next over dummy 8
+PASS: gdb.base/step-line.exp: next to dummy 9
+PASS: gdb.base/step-line.exp: next to dummy 10
+PASS: gdb.base/step-line.exp: next over dummy 10
+Running ./gdb.base/step-resume-infcall.exp ...
+PASS: gdb.base/step-resume-infcall.exp: step
+PASS: gdb.base/step-resume-infcall.exp: up
+PASS: gdb.base/step-resume-infcall.exp: set $b=$pc
+PASS: gdb.base/step-resume-infcall.exp: print $bpnum
+PASS: gdb.base/step-resume-infcall.exp: disass/m
+PASS: gdb.base/step-resume-infcall.exp: info breakpoints
+PASS: gdb.base/step-resume-infcall.exp: next
+PASS: gdb.base/step-resume-infcall.exp: p cond_hit
+Running ./gdb.base/step-symless.exp ...
+PASS: gdb.base/step-symless.exp: strip stub symbols
+PASS: gdb.base/step-symless.exp: step
+Running ./gdb.base/step-test.exp ...
+PASS: gdb.base/step-test.exp: next 1
+PASS: gdb.base/step-test.exp: step 1
+PASS: gdb.base/step-test.exp: next 2
+PASS: gdb.base/step-test.exp: step 3
+PASS: gdb.base/step-test.exp: next 3
+PASS: gdb.base/step-test.exp: next over
+PASS: gdb.base/step-test.exp: step into
+PASS: gdb.base/step-test.exp: step out
+PASS: gdb.base/step-test.exp: stepi to next line
+PASS: gdb.base/step-test.exp: stepi into function
+PASS: gdb.base/step-test.exp: stepi into function's first source line
+PASS: gdb.base/step-test.exp: stepi: finish call
+PASS: gdb.base/step-test.exp: nexti over function
+PASS: gdb.base/step-test.exp: set breakpoint at call to large_struct_by_value
+PASS: gdb.base/step-test.exp: run to pass large struct
+PASS: gdb.base/step-test.exp: large struct by value
+FAIL: gdb.base/step-test.exp: setting breakpoint at exit
+Running ./gdb.base/store.exp ...
+PASS: gdb.base/store.exp: tbreak wack_charest
+PASS: gdb.base/store.exp: continue to wack_charest
+PASS: gdb.base/store.exp: var charest l; print old l, expecting -1 .*
+PASS: gdb.base/store.exp: var charest l; print old r, expecting -2 .*
+PASS: gdb.base/store.exp: var charest l; setting l to 4
+PASS: gdb.base/store.exp: var charest l; print new l, expecting 4 ..004.
+PASS: gdb.base/store.exp: var charest l; next over add call
+PASS: gdb.base/store.exp: var charest l; print incremented l, expecting 2 ..002.
+PASS: gdb.base/store.exp: tbreak wack_short
+PASS: gdb.base/store.exp: continue to wack_short
+PASS: gdb.base/store.exp: var short l; print old l, expecting -1
+PASS: gdb.base/store.exp: var short l; print old r, expecting -2
+PASS: gdb.base/store.exp: var short l; setting l to 4
+PASS: gdb.base/store.exp: var short l; print new l, expecting 4
+PASS: gdb.base/store.exp: var short l; next over add call
+FAIL: gdb.base/store.exp: var short l; print incremented l, expecting 2
+PASS: gdb.base/store.exp: tbreak wack_int
+PASS: gdb.base/store.exp: continue to wack_int
+PASS: gdb.base/store.exp: var int l; print old l, expecting -1
+PASS: gdb.base/store.exp: var int l; print old r, expecting -2
+PASS: gdb.base/store.exp: var int l; setting l to 4
+PASS: gdb.base/store.exp: var int l; print new l, expecting 4
+PASS: gdb.base/store.exp: var int l; next over add call
+PASS: gdb.base/store.exp: var int l; print incremented l, expecting 2
+PASS: gdb.base/store.exp: tbreak wack_long
+PASS: gdb.base/store.exp: continue to wack_long
+PASS: gdb.base/store.exp: var long l; print old l, expecting -1
+PASS: gdb.base/store.exp: var long l; print old r, expecting -2
+PASS: gdb.base/store.exp: var long l; setting l to 4
+PASS: gdb.base/store.exp: var long l; print new l, expecting 4
+PASS: gdb.base/store.exp: var long l; next over add call
+PASS: gdb.base/store.exp: var long l; print incremented l, expecting 2
+PASS: gdb.base/store.exp: tbreak wack_longest
+PASS: gdb.base/store.exp: continue to wack_longest
+PASS: gdb.base/store.exp: var longest l; print old l, expecting -1
+PASS: gdb.base/store.exp: var longest l; print old r, expecting -2
+PASS: gdb.base/store.exp: var longest l; setting l to 4
+PASS: gdb.base/store.exp: var longest l; print new l, expecting 4
+PASS: gdb.base/store.exp: var longest l; next over add call
+PASS: gdb.base/store.exp: var longest l; print incremented l, expecting 2
+PASS: gdb.base/store.exp: tbreak wack_float
+PASS: gdb.base/store.exp: continue to wack_float
+PASS: gdb.base/store.exp: var float l; print old l, expecting -1
+PASS: gdb.base/store.exp: var float l; print old r, expecting -2
+PASS: gdb.base/store.exp: var float l; setting l to 4
+PASS: gdb.base/store.exp: var float l; print new l, expecting 4
+PASS: gdb.base/store.exp: var float l; next over add call
+FAIL: gdb.base/store.exp: var float l; print incremented l, expecting 2
+PASS: gdb.base/store.exp: tbreak wack_double
+PASS: gdb.base/store.exp: continue to wack_double
+PASS: gdb.base/store.exp: var double l; print old l, expecting -1
+PASS: gdb.base/store.exp: var double l; print old r, expecting -2
+PASS: gdb.base/store.exp: var double l; setting l to 4
+PASS: gdb.base/store.exp: var double l; print new l, expecting 4
+PASS: gdb.base/store.exp: var double l; next over add call
+FAIL: gdb.base/store.exp: var double l; print incremented l, expecting 2
+PASS: gdb.base/store.exp: tbreak wack_doublest
+PASS: gdb.base/store.exp: continue to wack_doublest
+PASS: gdb.base/store.exp: var doublest l; print old l, expecting -1
+PASS: gdb.base/store.exp: var doublest l; print old r, expecting -2
+PASS: gdb.base/store.exp: var doublest l; setting l to 4
+PASS: gdb.base/store.exp: var doublest l; print new l, expecting 4
+PASS: gdb.base/store.exp: var doublest l; next over add call
+FAIL: gdb.base/store.exp: var doublest l; print incremented l, expecting 2
+PASS: gdb.base/store.exp: tbreak add_charest
+PASS: gdb.base/store.exp: continue to add_charest
+PASS: gdb.base/store.exp: upvar charest l; up
+PASS: gdb.base/store.exp: upvar charest l; print old l, expecting -1 .*
+PASS: gdb.base/store.exp: upvar charest l; print old r, expecting -2 .*
+PASS: gdb.base/store.exp: upvar charest l; set l to 4
+PASS: gdb.base/store.exp: upvar charest l; print new l, expecting 4 ..004.
+PASS: gdb.base/store.exp: tbreak add_short
+PASS: gdb.base/store.exp: continue to add_short
+PASS: gdb.base/store.exp: upvar short l; up
+PASS: gdb.base/store.exp: upvar short l; print old l, expecting -1
+PASS: gdb.base/store.exp: upvar short l; print old r, expecting -2
+PASS: gdb.base/store.exp: upvar short l; set l to 4
+PASS: gdb.base/store.exp: upvar short l; print new l, expecting 4
+PASS: gdb.base/store.exp: tbreak add_int
+PASS: gdb.base/store.exp: continue to add_int
+PASS: gdb.base/store.exp: upvar int l; up
+PASS: gdb.base/store.exp: upvar int l; print old l, expecting -1
+PASS: gdb.base/store.exp: upvar int l; print old r, expecting -2
+PASS: gdb.base/store.exp: upvar int l; set l to 4
+PASS: gdb.base/store.exp: upvar int l; print new l, expecting 4
+PASS: gdb.base/store.exp: tbreak add_long
+PASS: gdb.base/store.exp: continue to add_long
+PASS: gdb.base/store.exp: upvar long l; up
+PASS: gdb.base/store.exp: upvar long l; print old l, expecting -1
+PASS: gdb.base/store.exp: upvar long l; print old r, expecting -2
+PASS: gdb.base/store.exp: upvar long l; set l to 4
+PASS: gdb.base/store.exp: upvar long l; print new l, expecting 4
+PASS: gdb.base/store.exp: tbreak add_longest
+PASS: gdb.base/store.exp: continue to add_longest
+PASS: gdb.base/store.exp: upvar longest l; up
+PASS: gdb.base/store.exp: upvar longest l; print old l, expecting -1
+PASS: gdb.base/store.exp: upvar longest l; print old r, expecting -2
+PASS: gdb.base/store.exp: upvar longest l; set l to 4
+PASS: gdb.base/store.exp: upvar longest l; print new l, expecting 4
+PASS: gdb.base/store.exp: tbreak add_float
+PASS: gdb.base/store.exp: continue to add_float
+PASS: gdb.base/store.exp: upvar float l; up
+PASS: gdb.base/store.exp: upvar float l; print old l, expecting -1
+PASS: gdb.base/store.exp: upvar float l; print old r, expecting -2
+PASS: gdb.base/store.exp: upvar float l; set l to 4
+PASS: gdb.base/store.exp: upvar float l; print new l, expecting 4
+PASS: gdb.base/store.exp: tbreak add_double
+PASS: gdb.base/store.exp: continue to add_double
+PASS: gdb.base/store.exp: upvar double l; up
+PASS: gdb.base/store.exp: upvar double l; print old l, expecting -1
+PASS: gdb.base/store.exp: upvar double l; print old r, expecting -2
+PASS: gdb.base/store.exp: upvar double l; set l to 4
+PASS: gdb.base/store.exp: upvar double l; print new l, expecting 4
+PASS: gdb.base/store.exp: tbreak add_doublest
+PASS: gdb.base/store.exp: continue to add_doublest
+PASS: gdb.base/store.exp: upvar doublest l; up
+PASS: gdb.base/store.exp: upvar doublest l; print old l, expecting -1
+PASS: gdb.base/store.exp: upvar doublest l; print old r, expecting -2
+PASS: gdb.base/store.exp: upvar doublest l; set l to 4
+PASS: gdb.base/store.exp: upvar doublest l; print new l, expecting 4
+PASS: gdb.base/store.exp: tbreak wack_struct_1
+FAIL: gdb.base/store.exp: continue to wack_struct_1
+FAIL: gdb.base/store.exp: var struct 1 u; next to add_struct_1 call
+PASS: gdb.base/store.exp: var struct 1 u; print old u, expecting {s = \{0}}
+PASS: gdb.base/store.exp: var struct 1 u; set u to s_1
+FAIL: gdb.base/store.exp: var struct 1 u; print new u, expecting {s = \{1}}
+PASS: gdb.base/store.exp: tbreak wack_struct_2
+FAIL: gdb.base/store.exp: continue to wack_struct_2
+FAIL: gdb.base/store.exp: var struct 2 u; next to add_struct_2 call
+PASS: gdb.base/store.exp: var struct 2 u; print old u, expecting {s = \{0, 0}}
+PASS: gdb.base/store.exp: var struct 2 u; set u to s_2
+FAIL: gdb.base/store.exp: var struct 2 u; print new u, expecting {s = \{1, 2}}
+PASS: gdb.base/store.exp: tbreak wack_struct_3
+FAIL: gdb.base/store.exp: continue to wack_struct_3
+FAIL: gdb.base/store.exp: var struct 3 u; next to add_struct_3 call
+PASS: gdb.base/store.exp: var struct 3 u; print old u, expecting {s = \{0, 0, 0}}
+PASS: gdb.base/store.exp: var struct 3 u; set u to s_3
+FAIL: gdb.base/store.exp: var struct 3 u; print new u, expecting {s = \{1, 2, 3}}
+PASS: gdb.base/store.exp: tbreak wack_struct_4
+FAIL: gdb.base/store.exp: continue to wack_struct_4
+FAIL: gdb.base/store.exp: var struct 4 u; next to add_struct_4 call
+PASS: gdb.base/store.exp: var struct 4 u; print old u, expecting {s = \{0, 0, 0, 0}}
+PASS: gdb.base/store.exp: var struct 4 u; set u to s_4
+FAIL: gdb.base/store.exp: var struct 4 u; print new u, expecting {s = \{1, 2, 3, 4}}
+PASS: gdb.base/store.exp: tbreak add_struct_1
+PASS: gdb.base/store.exp: continue to add_struct_1
+PASS: gdb.base/store.exp: up struct 1 u; up
+PASS: gdb.base/store.exp: up struct 1 u; print old u, expecting {s = \{0}}
+PASS: gdb.base/store.exp: up struct 1 u; set u to s_1
+PASS: gdb.base/store.exp: up struct 1 u; print new u, expecting {s = \{1}}
+PASS: gdb.base/store.exp: tbreak add_struct_2
+PASS: gdb.base/store.exp: continue to add_struct_2
+PASS: gdb.base/store.exp: up struct 2 u; up
+PASS: gdb.base/store.exp: up struct 2 u; print old u, expecting {s = \{0, 0}}
+PASS: gdb.base/store.exp: up struct 2 u; set u to s_2
+PASS: gdb.base/store.exp: up struct 2 u; print new u, expecting {s = \{1, 2}}
+PASS: gdb.base/store.exp: tbreak add_struct_3
+PASS: gdb.base/store.exp: continue to add_struct_3
+PASS: gdb.base/store.exp: up struct 3 u; up
+PASS: gdb.base/store.exp: up struct 3 u; print old u, expecting {s = \{0, 0, 0}}
+PASS: gdb.base/store.exp: up struct 3 u; set u to s_3
+PASS: gdb.base/store.exp: up struct 3 u; print new u, expecting {s = \{1, 2, 3}}
+PASS: gdb.base/store.exp: tbreak add_struct_4
+PASS: gdb.base/store.exp: continue to add_struct_4
+PASS: gdb.base/store.exp: up struct 4 u; up
+PASS: gdb.base/store.exp: up struct 4 u; print old u, expecting {s = \{0, 0, 0, 0}}
+PASS: gdb.base/store.exp: up struct 4 u; set u to s_4
+PASS: gdb.base/store.exp: up struct 4 u; print new u, expecting {s = \{1, 2, 3, 4}}
+PASS: gdb.base/store.exp: tbreak wack_field_1
+PASS: gdb.base/store.exp: continue field 1
+PASS: gdb.base/store.exp: next field 1
+PASS: gdb.base/store.exp: old field 1
+PASS: gdb.base/store.exp: set variable u = F_1
+PASS: gdb.base/store.exp: new field 1
+PASS: gdb.base/store.exp: set variable u = F_1, u.i = f_1.i
+PASS: gdb.base/store.exp: f_1.i
+PASS: gdb.base/store.exp: set variable u = F_1, u.j = f_1.j
+PASS: gdb.base/store.exp: f_1.j
+PASS: gdb.base/store.exp: set variable u = F_1, u.k = f_1.k
+PASS: gdb.base/store.exp: f_1.k
+PASS: gdb.base/store.exp: set variable u = f_1, u.i = F_1.i
+PASS: gdb.base/store.exp: F_1.i
+PASS: gdb.base/store.exp: set variable u = f_1, u.j = F_1.j
+PASS: gdb.base/store.exp: F_1.j
+PASS: gdb.base/store.exp: set variable u = f_1, u.k = F_1.k
+PASS: gdb.base/store.exp: F_1.k
+PASS: gdb.base/store.exp: tbreak wack_field_2
+PASS: gdb.base/store.exp: continue field 2
+PASS: gdb.base/store.exp: next field 2
+PASS: gdb.base/store.exp: old field 2
+PASS: gdb.base/store.exp: set variable u = F_2
+PASS: gdb.base/store.exp: new field 2
+PASS: gdb.base/store.exp: set variable u = F_2, u.i = f_2.i
+PASS: gdb.base/store.exp: f_2.i
+PASS: gdb.base/store.exp: set variable u = F_2, u.j = f_2.j
+PASS: gdb.base/store.exp: f_2.j
+PASS: gdb.base/store.exp: set variable u = F_2, u.k = f_2.k
+PASS: gdb.base/store.exp: f_2.k
+PASS: gdb.base/store.exp: set variable u = f_2, u.i = F_2.i
+PASS: gdb.base/store.exp: F_2.i
+PASS: gdb.base/store.exp: set variable u = f_2, u.j = F_2.j
+PASS: gdb.base/store.exp: F_2.j
+PASS: gdb.base/store.exp: set variable u = f_2, u.k = F_2.k
+PASS: gdb.base/store.exp: F_2.k
+PASS: gdb.base/store.exp: tbreak wack_field_3
+PASS: gdb.base/store.exp: continue field 3
+PASS: gdb.base/store.exp: next field 3
+PASS: gdb.base/store.exp: old field 3
+PASS: gdb.base/store.exp: set variable u = F_3
+PASS: gdb.base/store.exp: new field 3
+PASS: gdb.base/store.exp: set variable u = F_3, u.i = f_3.i
+PASS: gdb.base/store.exp: f_3.i
+PASS: gdb.base/store.exp: set variable u = F_3, u.j = f_3.j
+PASS: gdb.base/store.exp: f_3.j
+PASS: gdb.base/store.exp: set variable u = F_3, u.k = f_3.k
+PASS: gdb.base/store.exp: f_3.k
+PASS: gdb.base/store.exp: set variable u = f_3, u.i = F_3.i
+PASS: gdb.base/store.exp: F_3.i
+PASS: gdb.base/store.exp: set variable u = f_3, u.j = F_3.j
+PASS: gdb.base/store.exp: F_3.j
+PASS: gdb.base/store.exp: set variable u = f_3, u.k = F_3.k
+PASS: gdb.base/store.exp: F_3.k
+PASS: gdb.base/store.exp: tbreak wack_field_4
+PASS: gdb.base/store.exp: continue field 4
+PASS: gdb.base/store.exp: next field 4
+PASS: gdb.base/store.exp: old field 4
+PASS: gdb.base/store.exp: set variable u = F_4
+PASS: gdb.base/store.exp: new field 4
+PASS: gdb.base/store.exp: set variable u = F_4, u.i = f_4.i
+PASS: gdb.base/store.exp: f_4.i
+PASS: gdb.base/store.exp: set variable u = F_4, u.j = f_4.j
+PASS: gdb.base/store.exp: f_4.j
+PASS: gdb.base/store.exp: set variable u = F_4, u.k = f_4.k
+PASS: gdb.base/store.exp: f_4.k
+PASS: gdb.base/store.exp: set variable u = f_4, u.i = F_4.i
+PASS: gdb.base/store.exp: F_4.i
+PASS: gdb.base/store.exp: set variable u = f_4, u.j = F_4.j
+PASS: gdb.base/store.exp: F_4.j
+PASS: gdb.base/store.exp: set variable u = f_4, u.k = F_4.k
+PASS: gdb.base/store.exp: F_4.k
+Running ./gdb.base/structs2.exp ...
+PASS: gdb.base/structs2.exp: set width 0
+FAIL: gdb.base/structs2.exp: structs2 sanity check
+PASS: gdb.base/structs2.exp: structs2 breakpoint set
+FAIL: gdb.base/structs2.exp: structs2 continue1
+FAIL: gdb.base/structs2.exp: structs2 continue2
+Running ./gdb.base/structs3.exp ...
+PASS: gdb.base/structs3.exp: print two
+PASS: gdb.base/structs3.exp: print *twop
+PASS: gdb.base/structs3.exp: print *(struct Two *)onep
+PASS: gdb.base/structs3.exp: print *(tTwo *)onep
+Running ./gdb.base/structs.exp ...
+PASS: gdb.base/structs.exp: set print sevenbit-strings
+PASS: gdb.base/structs.exp: set print address off
+PASS: gdb.base/structs.exp: set width 0
+PASS: gdb.base/structs.exp: set print elements 300
+PASS: gdb.base/structs.exp: continue to breakpoint: chartest-done
+PASS: gdb.base/structs.exp: p chartest
+PASS: gdb.base/structs.exp: ptype foo1; structs-tc
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 1 structs-tc
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 1 structs-tc
+PASS: gdb.base/structs.exp: p/c L<n>; call 1 structs-tc
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 2 structs-tc
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 2 structs-tc
+PASS: gdb.base/structs.exp: p/c L<n>; call 2 structs-tc
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 3 structs-tc
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 3 structs-tc
+PASS: gdb.base/structs.exp: p/c L<n>; call 3 structs-tc
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 4 structs-tc
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 4 structs-tc
+PASS: gdb.base/structs.exp: p/c L<n>; call 4 structs-tc
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 5 structs-tc
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 5 structs-tc
+PASS: gdb.base/structs.exp: p/c L<n>; call 5 structs-tc
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 6 structs-tc
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 6 structs-tc
+PASS: gdb.base/structs.exp: p/c L<n>; call 6 structs-tc
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 7 structs-tc
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 7 structs-tc
+PASS: gdb.base/structs.exp: p/c L<n>; call 7 structs-tc
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 8 structs-tc
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 8 structs-tc
+PASS: gdb.base/structs.exp: p/c L<n>; call 8 structs-tc
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 9 structs-tc
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 9 structs-tc
+PASS: gdb.base/structs.exp: p/c L<n>; call 9 structs-tc
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 10 structs-tc
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 10 structs-tc
+PASS: gdb.base/structs.exp: p/c L<n>; call 10 structs-tc
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 11 structs-tc
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 11 structs-tc
+PASS: gdb.base/structs.exp: p/c L<n>; call 11 structs-tc
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 12 structs-tc
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 12 structs-tc
+PASS: gdb.base/structs.exp: p/c L<n>; call 12 structs-tc
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 13 structs-tc
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 13 structs-tc
+PASS: gdb.base/structs.exp: p/c L<n>; call 13 structs-tc
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 14 structs-tc
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 14 structs-tc
+PASS: gdb.base/structs.exp: p/c L<n>; call 14 structs-tc
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 15 structs-tc
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 15 structs-tc
+PASS: gdb.base/structs.exp: p/c L<n>; call 15 structs-tc
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 16 structs-tc
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 16 structs-tc
+PASS: gdb.base/structs.exp: p/c L<n>; call 16 structs-tc
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 17 structs-tc
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 17 structs-tc
+PASS: gdb.base/structs.exp: p/c L<n>; call 17 structs-tc
+PASS: gdb.base/structs.exp: advance to fun<n> for return; return 1 structs-tc
+PASS: gdb.base/structs.exp: zed L<n> for return; return 1 structs-tc
+PASS: gdb.base/structs.exp: return foo<n>; return 1 structs-tc
+PASS: gdb.base/structs.exp: value foo<n> returned; return 1 structs-tc
+PASS: gdb.base/structs.exp: advance to fun<n> for finish; return 1 structs-tc
+PASS: gdb.base/structs.exp: zed L<n> for finish; return 1 structs-tc
+PASS: gdb.base/structs.exp: finish foo<n>; return 1 structs-tc
+PASS: gdb.base/structs.exp: value foo<n> finished; return 1 structs-tc
+PASS: gdb.base/structs.exp: return value known implies finish value known; return 1 structs-tc
+PASS: gdb.base/structs.exp: advance to fun<n> for return; return 2 structs-tc
+PASS: gdb.base/structs.exp: zed L<n> for return; return 2 structs-tc
+PASS: gdb.base/structs.exp: return foo<n>; return 2 structs-tc
+PASS: gdb.base/structs.exp: value foo<n> returned; return 2 structs-tc
+PASS: gdb.base/structs.exp: advance to fun<n> for finish; return 2 structs-tc
+PASS: gdb.base/structs.exp: zed L<n> for finish; return 2 structs-tc
+PASS: gdb.base/structs.exp: finish foo<n>; return 2 structs-tc
+PASS: gdb.base/structs.exp: value foo<n> finished; return 2 structs-tc
+PASS: gdb.base/structs.exp: return value known implies finish value known; return 2 structs-tc
+PASS: gdb.base/structs.exp: advance to fun<n> for return; return 3 structs-tc
+PASS: gdb.base/structs.exp: zed L<n> for return; return 3 structs-tc
+PASS: gdb.base/structs.exp: return foo<n>; return 3 structs-tc
+PASS: gdb.base/structs.exp: value foo<n> returned; return 3 structs-tc
+PASS: gdb.base/structs.exp: advance to fun<n> for finish; return 3 structs-tc
+PASS: gdb.base/structs.exp: zed L<n> for finish; return 3 structs-tc
+PASS: gdb.base/structs.exp: finish foo<n>; return 3 structs-tc
+PASS: gdb.base/structs.exp: value foo<n> finished; return 3 structs-tc
+PASS: gdb.base/structs.exp: return value known implies finish value known; return 3 structs-tc
+PASS: gdb.base/structs.exp: advance to fun<n> for return; return 4 structs-tc
+PASS: gdb.base/structs.exp: zed L<n> for return; return 4 structs-tc
+PASS: gdb.base/structs.exp: return foo<n>; return 4 structs-tc
+PASS: gdb.base/structs.exp: value foo<n> returned; return 4 structs-tc
+PASS: gdb.base/structs.exp: advance to fun<n> for finish; return 4 structs-tc
+PASS: gdb.base/structs.exp: zed L<n> for finish; return 4 structs-tc
+PASS: gdb.base/structs.exp: finish foo<n>; return 4 structs-tc
+PASS: gdb.base/structs.exp: value foo<n> finished; return 4 structs-tc
+PASS: gdb.base/structs.exp: return value known implies finish value known; return 4 structs-tc
+PASS: gdb.base/structs.exp: advance to fun<n> for return; return 5 structs-tc
+PASS: gdb.base/structs.exp: zed L<n> for return; return 5 structs-tc
+PASS: gdb.base/structs.exp: return foo<n>; return 5 structs-tc
+PASS: gdb.base/structs.exp: value foo<n> returned; return 5 structs-tc
+PASS: gdb.base/structs.exp: advance to fun<n> for finish; return 5 structs-tc
+PASS: gdb.base/structs.exp: zed L<n> for finish; return 5 structs-tc
+PASS: gdb.base/structs.exp: finish foo<n>; return 5 structs-tc
+PASS: gdb.base/structs.exp: value foo<n> finished; return 5 structs-tc
+PASS: gdb.base/structs.exp: return value known implies finish value known; return 5 structs-tc
+PASS: gdb.base/structs.exp: advance to fun<n> for return; return 6 structs-tc
+PASS: gdb.base/structs.exp: zed L<n> for return; return 6 structs-tc
+PASS: gdb.base/structs.exp: return foo<n>; return 6 structs-tc
+PASS: gdb.base/structs.exp: value foo<n> returned; return 6 structs-tc
+PASS: gdb.base/structs.exp: advance to fun<n> for finish; return 6 structs-tc
+PASS: gdb.base/structs.exp: zed L<n> for finish; return 6 structs-tc
+PASS: gdb.base/structs.exp: finish foo<n>; return 6 structs-tc
+PASS: gdb.base/structs.exp: value foo<n> finished; return 6 structs-tc
+PASS: gdb.base/structs.exp: return value known implies finish value known; return 6 structs-tc
+PASS: gdb.base/structs.exp: advance to fun<n> for return; return 7 structs-tc
+PASS: gdb.base/structs.exp: zed L<n> for return; return 7 structs-tc
+PASS: gdb.base/structs.exp: return foo<n>; return 7 structs-tc
+PASS: gdb.base/structs.exp: value foo<n> returned; return 7 structs-tc
+PASS: gdb.base/structs.exp: advance to fun<n> for finish; return 7 structs-tc
+PASS: gdb.base/structs.exp: zed L<n> for finish; return 7 structs-tc
+PASS: gdb.base/structs.exp: finish foo<n>; return 7 structs-tc
+PASS: gdb.base/structs.exp: value foo<n> finished; return 7 structs-tc
+PASS: gdb.base/structs.exp: return value known implies finish value known; return 7 structs-tc
+PASS: gdb.base/structs.exp: advance to fun<n> for return; return 8 structs-tc
+PASS: gdb.base/structs.exp: zed L<n> for return; return 8 structs-tc
+PASS: gdb.base/structs.exp: return foo<n>; return 8 structs-tc
+PASS: gdb.base/structs.exp: value foo<n> returned; return 8 structs-tc
+PASS: gdb.base/structs.exp: advance to fun<n> for finish; return 8 structs-tc
+PASS: gdb.base/structs.exp: zed L<n> for finish; return 8 structs-tc
+PASS: gdb.base/structs.exp: finish foo<n>; return 8 structs-tc
+PASS: gdb.base/structs.exp: value foo<n> finished; return 8 structs-tc
+PASS: gdb.base/structs.exp: return value known implies finish value known; return 8 structs-tc
+PASS: gdb.base/structs.exp: set print sevenbit-strings
+PASS: gdb.base/structs.exp: set print address off
+PASS: gdb.base/structs.exp: set width 0
+PASS: gdb.base/structs.exp: set print elements 300
+PASS: gdb.base/structs.exp: ptype foo1; structs-ts
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 1 structs-ts
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 1 structs-ts
+PASS: gdb.base/structs.exp: p/c L<n>; call 1 structs-ts
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 2 structs-ts
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 2 structs-ts
+PASS: gdb.base/structs.exp: p/c L<n>; call 2 structs-ts
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 3 structs-ts
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 3 structs-ts
+PASS: gdb.base/structs.exp: p/c L<n>; call 3 structs-ts
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 4 structs-ts
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 4 structs-ts
+PASS: gdb.base/structs.exp: p/c L<n>; call 4 structs-ts
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 5 structs-ts
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 5 structs-ts
+PASS: gdb.base/structs.exp: p/c L<n>; call 5 structs-ts
+PASS: gdb.base/structs.exp: advance to fun<n> for return; return 1 structs-ts
+PASS: gdb.base/structs.exp: zed L<n> for return; return 1 structs-ts
+PASS: gdb.base/structs.exp: return foo<n>; return 1 structs-ts
+PASS: gdb.base/structs.exp: value foo<n> returned; return 1 structs-ts
+PASS: gdb.base/structs.exp: advance to fun<n> for finish; return 1 structs-ts
+PASS: gdb.base/structs.exp: zed L<n> for finish; return 1 structs-ts
+PASS: gdb.base/structs.exp: finish foo<n>; return 1 structs-ts
+PASS: gdb.base/structs.exp: value foo<n> finished; return 1 structs-ts
+PASS: gdb.base/structs.exp: return value known implies finish value known; return 1 structs-ts
+PASS: gdb.base/structs.exp: advance to fun<n> for return; return 2 structs-ts
+PASS: gdb.base/structs.exp: zed L<n> for return; return 2 structs-ts
+PASS: gdb.base/structs.exp: return foo<n>; return 2 structs-ts
+PASS: gdb.base/structs.exp: value foo<n> returned; return 2 structs-ts
+PASS: gdb.base/structs.exp: advance to fun<n> for finish; return 2 structs-ts
+PASS: gdb.base/structs.exp: zed L<n> for finish; return 2 structs-ts
+PASS: gdb.base/structs.exp: finish foo<n>; return 2 structs-ts
+PASS: gdb.base/structs.exp: value foo<n> finished; return 2 structs-ts
+PASS: gdb.base/structs.exp: return value known implies finish value known; return 2 structs-ts
+PASS: gdb.base/structs.exp: advance to fun<n> for return; return 3 structs-ts
+PASS: gdb.base/structs.exp: zed L<n> for return; return 3 structs-ts
+PASS: gdb.base/structs.exp: return foo<n>; return 3 structs-ts
+PASS: gdb.base/structs.exp: value foo<n> returned; return 3 structs-ts
+PASS: gdb.base/structs.exp: advance to fun<n> for finish; return 3 structs-ts
+PASS: gdb.base/structs.exp: zed L<n> for finish; return 3 structs-ts
+PASS: gdb.base/structs.exp: finish foo<n>; return 3 structs-ts
+PASS: gdb.base/structs.exp: value foo<n> finished; return 3 structs-ts
+PASS: gdb.base/structs.exp: return value known implies finish value known; return 3 structs-ts
+PASS: gdb.base/structs.exp: advance to fun<n> for return; return 4 structs-ts
+PASS: gdb.base/structs.exp: zed L<n> for return; return 4 structs-ts
+PASS: gdb.base/structs.exp: return foo<n>; return 4 structs-ts
+PASS: gdb.base/structs.exp: value foo<n> returned; return 4 structs-ts
+PASS: gdb.base/structs.exp: advance to fun<n> for finish; return 4 structs-ts
+PASS: gdb.base/structs.exp: zed L<n> for finish; return 4 structs-ts
+PASS: gdb.base/structs.exp: finish foo<n>; return 4 structs-ts
+PASS: gdb.base/structs.exp: value foo<n> finished; return 4 structs-ts
+PASS: gdb.base/structs.exp: return value known implies finish value known; return 4 structs-ts
+PASS: gdb.base/structs.exp: set print sevenbit-strings
+PASS: gdb.base/structs.exp: set print address off
+PASS: gdb.base/structs.exp: set width 0
+PASS: gdb.base/structs.exp: set print elements 300
+PASS: gdb.base/structs.exp: ptype foo1; structs-ti
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 1 structs-ti
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 1 structs-ti
+PASS: gdb.base/structs.exp: p/c L<n>; call 1 structs-ti
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 2 structs-ti
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 2 structs-ti
+PASS: gdb.base/structs.exp: p/c L<n>; call 2 structs-ti
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 3 structs-ti
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 3 structs-ti
+PASS: gdb.base/structs.exp: p/c L<n>; call 3 structs-ti
+PASS: gdb.base/structs.exp: advance to fun<n> for return; return 1 structs-ti
+PASS: gdb.base/structs.exp: zed L<n> for return; return 1 structs-ti
+PASS: gdb.base/structs.exp: return foo<n>; return 1 structs-ti
+PASS: gdb.base/structs.exp: value foo<n> returned; return 1 structs-ti
+PASS: gdb.base/structs.exp: advance to fun<n> for finish; return 1 structs-ti
+PASS: gdb.base/structs.exp: zed L<n> for finish; return 1 structs-ti
+PASS: gdb.base/structs.exp: finish foo<n>; return 1 structs-ti
+PASS: gdb.base/structs.exp: value foo<n> finished; return 1 structs-ti
+PASS: gdb.base/structs.exp: return value known implies finish value known; return 1 structs-ti
+PASS: gdb.base/structs.exp: advance to fun<n> for return; return 2 structs-ti
+PASS: gdb.base/structs.exp: zed L<n> for return; return 2 structs-ti
+PASS: gdb.base/structs.exp: return foo<n>; return 2 structs-ti
+PASS: gdb.base/structs.exp: value foo<n> returned; return 2 structs-ti
+PASS: gdb.base/structs.exp: advance to fun<n> for finish; return 2 structs-ti
+PASS: gdb.base/structs.exp: zed L<n> for finish; return 2 structs-ti
+PASS: gdb.base/structs.exp: finish foo<n>; return 2 structs-ti
+PASS: gdb.base/structs.exp: value foo<n> finished; return 2 structs-ti
+PASS: gdb.base/structs.exp: return value known implies finish value known; return 2 structs-ti
+PASS: gdb.base/structs.exp: set print sevenbit-strings
+PASS: gdb.base/structs.exp: set print address off
+PASS: gdb.base/structs.exp: set width 0
+PASS: gdb.base/structs.exp: set print elements 300
+PASS: gdb.base/structs.exp: ptype foo1; structs-tl
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 1 structs-tl
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 1 structs-tl
+PASS: gdb.base/structs.exp: p/c L<n>; call 1 structs-tl
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 2 structs-tl
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 2 structs-tl
+PASS: gdb.base/structs.exp: p/c L<n>; call 2 structs-tl
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 3 structs-tl
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 3 structs-tl
+PASS: gdb.base/structs.exp: p/c L<n>; call 3 structs-tl
+PASS: gdb.base/structs.exp: advance to fun<n> for return; return 1 structs-tl
+PASS: gdb.base/structs.exp: zed L<n> for return; return 1 structs-tl
+PASS: gdb.base/structs.exp: return foo<n>; return 1 structs-tl
+PASS: gdb.base/structs.exp: value foo<n> returned; return 1 structs-tl
+PASS: gdb.base/structs.exp: advance to fun<n> for finish; return 1 structs-tl
+PASS: gdb.base/structs.exp: zed L<n> for finish; return 1 structs-tl
+PASS: gdb.base/structs.exp: finish foo<n>; return 1 structs-tl
+PASS: gdb.base/structs.exp: value foo<n> finished; return 1 structs-tl
+PASS: gdb.base/structs.exp: return value known implies finish value known; return 1 structs-tl
+PASS: gdb.base/structs.exp: advance to fun<n> for return; return 2 structs-tl
+PASS: gdb.base/structs.exp: zed L<n> for return; return 2 structs-tl
+PASS: gdb.base/structs.exp: return foo<n>; return 2 structs-tl
+PASS: gdb.base/structs.exp: value foo<n> returned; return 2 structs-tl
+PASS: gdb.base/structs.exp: advance to fun<n> for finish; return 2 structs-tl
+PASS: gdb.base/structs.exp: zed L<n> for finish; return 2 structs-tl
+PASS: gdb.base/structs.exp: finish foo<n>; return 2 structs-tl
+PASS: gdb.base/structs.exp: value foo<n> finished; return 2 structs-tl
+PASS: gdb.base/structs.exp: return value known implies finish value known; return 2 structs-tl
+PASS: gdb.base/structs.exp: set print sevenbit-strings
+PASS: gdb.base/structs.exp: set print address off
+PASS: gdb.base/structs.exp: set width 0
+PASS: gdb.base/structs.exp: set print elements 300
+PASS: gdb.base/structs.exp: ptype foo1; structs-tll
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 1 structs-tll
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 1 structs-tll
+PASS: gdb.base/structs.exp: p/c L<n>; call 1 structs-tll
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 2 structs-tll
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 2 structs-tll
+PASS: gdb.base/structs.exp: p/c L<n>; call 2 structs-tll
+PASS: gdb.base/structs.exp: advance to fun<n> for return; return 1 structs-tll
+PASS: gdb.base/structs.exp: zed L<n> for return; return 1 structs-tll
+PASS: gdb.base/structs.exp: return foo<n>; return 1 structs-tll
+PASS: gdb.base/structs.exp: value foo<n> returned; return 1 structs-tll
+PASS: gdb.base/structs.exp: advance to fun<n> for finish; return 1 structs-tll
+PASS: gdb.base/structs.exp: zed L<n> for finish; return 1 structs-tll
+PASS: gdb.base/structs.exp: finish foo<n>; return 1 structs-tll
+PASS: gdb.base/structs.exp: value foo<n> finished; return 1 structs-tll
+PASS: gdb.base/structs.exp: return value known implies finish value known; return 1 structs-tll
+PASS: gdb.base/structs.exp: set print sevenbit-strings
+PASS: gdb.base/structs.exp: set print address off
+PASS: gdb.base/structs.exp: set width 0
+PASS: gdb.base/structs.exp: set print elements 300
+PASS: gdb.base/structs.exp: ptype foo1; structs-tf
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 1 structs-tf
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 1 structs-tf
+PASS: gdb.base/structs.exp: p/c L<n>; call 1 structs-tf
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 2 structs-tf
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 2 structs-tf
+PASS: gdb.base/structs.exp: p/c L<n>; call 2 structs-tf
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 3 structs-tf
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 3 structs-tf
+PASS: gdb.base/structs.exp: p/c L<n>; call 3 structs-tf
+PASS: gdb.base/structs.exp: advance to fun<n> for return; return 1 structs-tf
+PASS: gdb.base/structs.exp: zed L<n> for return; return 1 structs-tf
+PASS: gdb.base/structs.exp: return foo<n>; return 1 structs-tf
+FAIL: gdb.base/structs.exp: value foo<n> returned; return 1 structs-tf
+PASS: gdb.base/structs.exp: advance to fun<n> for finish; return 1 structs-tf
+PASS: gdb.base/structs.exp: zed L<n> for finish; return 1 structs-tf
+PASS: gdb.base/structs.exp: finish foo<n>; return 1 structs-tf
+PASS: gdb.base/structs.exp: value foo<n> finished; return 1 structs-tf
+PASS: gdb.base/structs.exp: return value known implies finish value known; return 1 structs-tf
+PASS: gdb.base/structs.exp: advance to fun<n> for return; return 2 structs-tf
+PASS: gdb.base/structs.exp: zed L<n> for return; return 2 structs-tf
+PASS: gdb.base/structs.exp: return foo<n>; return 2 structs-tf
+FAIL: gdb.base/structs.exp: value foo<n> returned; return 2 structs-tf
+PASS: gdb.base/structs.exp: advance to fun<n> for finish; return 2 structs-tf
+PASS: gdb.base/structs.exp: zed L<n> for finish; return 2 structs-tf
+PASS: gdb.base/structs.exp: finish foo<n>; return 2 structs-tf
+PASS: gdb.base/structs.exp: value foo<n> finished; return 2 structs-tf
+PASS: gdb.base/structs.exp: return value known implies finish value known; return 2 structs-tf
+PASS: gdb.base/structs.exp: set print sevenbit-strings
+PASS: gdb.base/structs.exp: set print address off
+PASS: gdb.base/structs.exp: set width 0
+PASS: gdb.base/structs.exp: set print elements 300
+PASS: gdb.base/structs.exp: ptype foo1; structs-td
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 1 structs-td
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 1 structs-td
+PASS: gdb.base/structs.exp: p/c L<n>; call 1 structs-td
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 2 structs-td
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 2 structs-td
+PASS: gdb.base/structs.exp: p/c L<n>; call 2 structs-td
+PASS: gdb.base/structs.exp: advance to fun<n> for return; return 1 structs-td
+PASS: gdb.base/structs.exp: zed L<n> for return; return 1 structs-td
+PASS: gdb.base/structs.exp: return foo<n>; return 1 structs-td
+FAIL: gdb.base/structs.exp: value foo<n> returned; return 1 structs-td
+PASS: gdb.base/structs.exp: advance to fun<n> for finish; return 1 structs-td
+PASS: gdb.base/structs.exp: zed L<n> for finish; return 1 structs-td
+PASS: gdb.base/structs.exp: finish foo<n>; return 1 structs-td
+PASS: gdb.base/structs.exp: value foo<n> finished; return 1 structs-td
+PASS: gdb.base/structs.exp: return value known implies finish value known; return 1 structs-td
+PASS: gdb.base/structs.exp: set print sevenbit-strings
+PASS: gdb.base/structs.exp: set print address off
+PASS: gdb.base/structs.exp: set width 0
+PASS: gdb.base/structs.exp: set print elements 300
+PASS: gdb.base/structs.exp: ptype foo1; structs-tld
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 1 structs-tld
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 1 structs-tld
+PASS: gdb.base/structs.exp: p/c L<n>; call 1 structs-tld
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 2 structs-tld
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 2 structs-tld
+PASS: gdb.base/structs.exp: p/c L<n>; call 2 structs-tld
+PASS: gdb.base/structs.exp: advance to fun<n> for return; return 1 structs-tld
+PASS: gdb.base/structs.exp: zed L<n> for return; return 1 structs-tld
+PASS: gdb.base/structs.exp: return foo<n>; return 1 structs-tld
+FAIL: gdb.base/structs.exp: value foo<n> returned; return 1 structs-tld
+PASS: gdb.base/structs.exp: advance to fun<n> for finish; return 1 structs-tld
+PASS: gdb.base/structs.exp: zed L<n> for finish; return 1 structs-tld
+PASS: gdb.base/structs.exp: finish foo<n>; return 1 structs-tld
+PASS: gdb.base/structs.exp: value foo<n> finished; return 1 structs-tld
+PASS: gdb.base/structs.exp: return value known implies finish value known; return 1 structs-tld
+PASS: gdb.base/structs.exp: set print sevenbit-strings
+PASS: gdb.base/structs.exp: set print address off
+PASS: gdb.base/structs.exp: set width 0
+PASS: gdb.base/structs.exp: set print elements 300
+PASS: gdb.base/structs.exp: ptype foo2; structs-ts-tc
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 2 structs-ts-tc
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 2 structs-ts-tc
+PASS: gdb.base/structs.exp: p/c L<n>; call 2 structs-ts-tc
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 3 structs-ts-tc
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 3 structs-ts-tc
+PASS: gdb.base/structs.exp: p/c L<n>; call 3 structs-ts-tc
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 4 structs-ts-tc
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 4 structs-ts-tc
+PASS: gdb.base/structs.exp: p/c L<n>; call 4 structs-ts-tc
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 5 structs-ts-tc
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 5 structs-ts-tc
+PASS: gdb.base/structs.exp: p/c L<n>; call 5 structs-ts-tc
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 6 structs-ts-tc
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 6 structs-ts-tc
+PASS: gdb.base/structs.exp: p/c L<n>; call 6 structs-ts-tc
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 7 structs-ts-tc
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 7 structs-ts-tc
+PASS: gdb.base/structs.exp: p/c L<n>; call 7 structs-ts-tc
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 8 structs-ts-tc
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 8 structs-ts-tc
+PASS: gdb.base/structs.exp: p/c L<n>; call 8 structs-ts-tc
+PASS: gdb.base/structs.exp: advance to fun<n> for return; return 2 structs-ts-tc
+PASS: gdb.base/structs.exp: zed L<n> for return; return 2 structs-ts-tc
+PASS: gdb.base/structs.exp: return foo<n>; return 2 structs-ts-tc
+PASS: gdb.base/structs.exp: value foo<n> returned; return 2 structs-ts-tc
+PASS: gdb.base/structs.exp: advance to fun<n> for finish; return 2 structs-ts-tc
+PASS: gdb.base/structs.exp: zed L<n> for finish; return 2 structs-ts-tc
+PASS: gdb.base/structs.exp: finish foo<n>; return 2 structs-ts-tc
+PASS: gdb.base/structs.exp: value foo<n> finished; return 2 structs-ts-tc
+PASS: gdb.base/structs.exp: return value known implies finish value known; return 2 structs-ts-tc
+PASS: gdb.base/structs.exp: set print sevenbit-strings
+PASS: gdb.base/structs.exp: set print address off
+PASS: gdb.base/structs.exp: set width 0
+PASS: gdb.base/structs.exp: set print elements 300
+PASS: gdb.base/structs.exp: ptype foo2; structs-ti-tc
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 2 structs-ti-tc
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 2 structs-ti-tc
+PASS: gdb.base/structs.exp: p/c L<n>; call 2 structs-ti-tc
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 3 structs-ti-tc
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 3 structs-ti-tc
+PASS: gdb.base/structs.exp: p/c L<n>; call 3 structs-ti-tc
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 4 structs-ti-tc
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 4 structs-ti-tc
+PASS: gdb.base/structs.exp: p/c L<n>; call 4 structs-ti-tc
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 5 structs-ti-tc
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 5 structs-ti-tc
+PASS: gdb.base/structs.exp: p/c L<n>; call 5 structs-ti-tc
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 6 structs-ti-tc
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 6 structs-ti-tc
+PASS: gdb.base/structs.exp: p/c L<n>; call 6 structs-ti-tc
+PASS: gdb.base/structs.exp: advance to fun<n> for return; return 2 structs-ti-tc
+PASS: gdb.base/structs.exp: zed L<n> for return; return 2 structs-ti-tc
+PASS: gdb.base/structs.exp: return foo<n>; return 2 structs-ti-tc
+PASS: gdb.base/structs.exp: value foo<n> returned; return 2 structs-ti-tc
+PASS: gdb.base/structs.exp: advance to fun<n> for finish; return 2 structs-ti-tc
+PASS: gdb.base/structs.exp: zed L<n> for finish; return 2 structs-ti-tc
+PASS: gdb.base/structs.exp: finish foo<n>; return 2 structs-ti-tc
+PASS: gdb.base/structs.exp: value foo<n> finished; return 2 structs-ti-tc
+PASS: gdb.base/structs.exp: return value known implies finish value known; return 2 structs-ti-tc
+PASS: gdb.base/structs.exp: set print sevenbit-strings
+PASS: gdb.base/structs.exp: set print address off
+PASS: gdb.base/structs.exp: set width 0
+PASS: gdb.base/structs.exp: set print elements 300
+PASS: gdb.base/structs.exp: ptype foo2; structs-tl-tc
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 2 structs-tl-tc
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 2 structs-tl-tc
+PASS: gdb.base/structs.exp: p/c L<n>; call 2 structs-tl-tc
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 3 structs-tl-tc
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 3 structs-tl-tc
+PASS: gdb.base/structs.exp: p/c L<n>; call 3 structs-tl-tc
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 4 structs-tl-tc
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 4 structs-tl-tc
+PASS: gdb.base/structs.exp: p/c L<n>; call 4 structs-tl-tc
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 5 structs-tl-tc
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 5 structs-tl-tc
+PASS: gdb.base/structs.exp: p/c L<n>; call 5 structs-tl-tc
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 6 structs-tl-tc
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 6 structs-tl-tc
+PASS: gdb.base/structs.exp: p/c L<n>; call 6 structs-tl-tc
+PASS: gdb.base/structs.exp: advance to fun<n> for return; return 2 structs-tl-tc
+PASS: gdb.base/structs.exp: zed L<n> for return; return 2 structs-tl-tc
+PASS: gdb.base/structs.exp: return foo<n>; return 2 structs-tl-tc
+PASS: gdb.base/structs.exp: value foo<n> returned; return 2 structs-tl-tc
+PASS: gdb.base/structs.exp: advance to fun<n> for finish; return 2 structs-tl-tc
+PASS: gdb.base/structs.exp: zed L<n> for finish; return 2 structs-tl-tc
+PASS: gdb.base/structs.exp: finish foo<n>; return 2 structs-tl-tc
+PASS: gdb.base/structs.exp: value foo<n> finished; return 2 structs-tl-tc
+PASS: gdb.base/structs.exp: return value known implies finish value known; return 2 structs-tl-tc
+PASS: gdb.base/structs.exp: set print sevenbit-strings
+PASS: gdb.base/structs.exp: set print address off
+PASS: gdb.base/structs.exp: set width 0
+PASS: gdb.base/structs.exp: set print elements 300
+PASS: gdb.base/structs.exp: ptype foo2; structs-tll-tc
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 2 structs-tll-tc
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 2 structs-tll-tc
+PASS: gdb.base/structs.exp: p/c L<n>; call 2 structs-tll-tc
+PASS: gdb.base/structs.exp: set print sevenbit-strings
+PASS: gdb.base/structs.exp: set print address off
+PASS: gdb.base/structs.exp: set width 0
+PASS: gdb.base/structs.exp: set print elements 300
+PASS: gdb.base/structs.exp: ptype foo2; structs-tf-tc
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 2 structs-tf-tc
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 2 structs-tf-tc
+PASS: gdb.base/structs.exp: p/c L<n>; call 2 structs-tf-tc
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 3 structs-tf-tc
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 3 structs-tf-tc
+PASS: gdb.base/structs.exp: p/c L<n>; call 3 structs-tf-tc
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 4 structs-tf-tc
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 4 structs-tf-tc
+PASS: gdb.base/structs.exp: p/c L<n>; call 4 structs-tf-tc
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 5 structs-tf-tc
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 5 structs-tf-tc
+PASS: gdb.base/structs.exp: p/c L<n>; call 5 structs-tf-tc
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 6 structs-tf-tc
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 6 structs-tf-tc
+PASS: gdb.base/structs.exp: p/c L<n>; call 6 structs-tf-tc
+PASS: gdb.base/structs.exp: advance to fun<n> for return; return 2 structs-tf-tc
+PASS: gdb.base/structs.exp: zed L<n> for return; return 2 structs-tf-tc
+PASS: gdb.base/structs.exp: return foo<n>; return 2 structs-tf-tc
+PASS: gdb.base/structs.exp: value foo<n> returned; return 2 structs-tf-tc
+PASS: gdb.base/structs.exp: advance to fun<n> for finish; return 2 structs-tf-tc
+PASS: gdb.base/structs.exp: zed L<n> for finish; return 2 structs-tf-tc
+PASS: gdb.base/structs.exp: finish foo<n>; return 2 structs-tf-tc
+PASS: gdb.base/structs.exp: value foo<n> finished; return 2 structs-tf-tc
+PASS: gdb.base/structs.exp: return value known implies finish value known; return 2 structs-tf-tc
+PASS: gdb.base/structs.exp: set print sevenbit-strings
+PASS: gdb.base/structs.exp: set print address off
+PASS: gdb.base/structs.exp: set width 0
+PASS: gdb.base/structs.exp: set print elements 300
+PASS: gdb.base/structs.exp: ptype foo2; structs-td-tc
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 2 structs-td-tc
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 2 structs-td-tc
+PASS: gdb.base/structs.exp: p/c L<n>; call 2 structs-td-tc
+PASS: gdb.base/structs.exp: set print sevenbit-strings
+PASS: gdb.base/structs.exp: set print address off
+PASS: gdb.base/structs.exp: set width 0
+PASS: gdb.base/structs.exp: set print elements 300
+PASS: gdb.base/structs.exp: ptype foo2; structs-tld-tc
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 2 structs-tld-tc
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 2 structs-tld-tc
+PASS: gdb.base/structs.exp: p/c L<n>; call 2 structs-tld-tc
+PASS: gdb.base/structs.exp: set print sevenbit-strings
+PASS: gdb.base/structs.exp: set print address off
+PASS: gdb.base/structs.exp: set width 0
+PASS: gdb.base/structs.exp: set print elements 300
+PASS: gdb.base/structs.exp: ptype foo2; structs-tc-ts
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 2 structs-tc-ts
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 2 structs-tc-ts
+PASS: gdb.base/structs.exp: p/c L<n>; call 2 structs-tc-ts
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 3 structs-tc-ts
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 3 structs-tc-ts
+PASS: gdb.base/structs.exp: p/c L<n>; call 3 structs-tc-ts
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 4 structs-tc-ts
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 4 structs-tc-ts
+PASS: gdb.base/structs.exp: p/c L<n>; call 4 structs-tc-ts
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 5 structs-tc-ts
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 5 structs-tc-ts
+PASS: gdb.base/structs.exp: p/c L<n>; call 5 structs-tc-ts
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 6 structs-tc-ts
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 6 structs-tc-ts
+PASS: gdb.base/structs.exp: p/c L<n>; call 6 structs-tc-ts
+PASS: gdb.base/structs.exp: advance to fun<n> for return; return 2 structs-tc-ts
+PASS: gdb.base/structs.exp: zed L<n> for return; return 2 structs-tc-ts
+PASS: gdb.base/structs.exp: return foo<n>; return 2 structs-tc-ts
+PASS: gdb.base/structs.exp: value foo<n> returned; return 2 structs-tc-ts
+PASS: gdb.base/structs.exp: advance to fun<n> for finish; return 2 structs-tc-ts
+PASS: gdb.base/structs.exp: zed L<n> for finish; return 2 structs-tc-ts
+PASS: gdb.base/structs.exp: finish foo<n>; return 2 structs-tc-ts
+PASS: gdb.base/structs.exp: value foo<n> finished; return 2 structs-tc-ts
+PASS: gdb.base/structs.exp: return value known implies finish value known; return 2 structs-tc-ts
+PASS: gdb.base/structs.exp: set print sevenbit-strings
+PASS: gdb.base/structs.exp: set print address off
+PASS: gdb.base/structs.exp: set width 0
+PASS: gdb.base/structs.exp: set print elements 300
+PASS: gdb.base/structs.exp: ptype foo2; structs-tc-ti
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 2 structs-tc-ti
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 2 structs-tc-ti
+PASS: gdb.base/structs.exp: p/c L<n>; call 2 structs-tc-ti
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 3 structs-tc-ti
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 3 structs-tc-ti
+PASS: gdb.base/structs.exp: p/c L<n>; call 3 structs-tc-ti
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 4 structs-tc-ti
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 4 structs-tc-ti
+PASS: gdb.base/structs.exp: p/c L<n>; call 4 structs-tc-ti
+PASS: gdb.base/structs.exp: advance to fun<n> for return; return 2 structs-tc-ti
+PASS: gdb.base/structs.exp: zed L<n> for return; return 2 structs-tc-ti
+PASS: gdb.base/structs.exp: return foo<n>; return 2 structs-tc-ti
+PASS: gdb.base/structs.exp: value foo<n> returned; return 2 structs-tc-ti
+PASS: gdb.base/structs.exp: advance to fun<n> for finish; return 2 structs-tc-ti
+PASS: gdb.base/structs.exp: zed L<n> for finish; return 2 structs-tc-ti
+PASS: gdb.base/structs.exp: finish foo<n>; return 2 structs-tc-ti
+PASS: gdb.base/structs.exp: value foo<n> finished; return 2 structs-tc-ti
+PASS: gdb.base/structs.exp: return value known implies finish value known; return 2 structs-tc-ti
+PASS: gdb.base/structs.exp: set print sevenbit-strings
+PASS: gdb.base/structs.exp: set print address off
+PASS: gdb.base/structs.exp: set width 0
+PASS: gdb.base/structs.exp: set print elements 300
+PASS: gdb.base/structs.exp: ptype foo2; structs-tc-tl
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 2 structs-tc-tl
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 2 structs-tc-tl
+PASS: gdb.base/structs.exp: p/c L<n>; call 2 structs-tc-tl
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 3 structs-tc-tl
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 3 structs-tc-tl
+PASS: gdb.base/structs.exp: p/c L<n>; call 3 structs-tc-tl
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 4 structs-tc-tl
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 4 structs-tc-tl
+PASS: gdb.base/structs.exp: p/c L<n>; call 4 structs-tc-tl
+PASS: gdb.base/structs.exp: advance to fun<n> for return; return 2 structs-tc-tl
+PASS: gdb.base/structs.exp: zed L<n> for return; return 2 structs-tc-tl
+PASS: gdb.base/structs.exp: return foo<n>; return 2 structs-tc-tl
+PASS: gdb.base/structs.exp: value foo<n> returned; return 2 structs-tc-tl
+PASS: gdb.base/structs.exp: advance to fun<n> for finish; return 2 structs-tc-tl
+PASS: gdb.base/structs.exp: zed L<n> for finish; return 2 structs-tc-tl
+PASS: gdb.base/structs.exp: finish foo<n>; return 2 structs-tc-tl
+PASS: gdb.base/structs.exp: value foo<n> finished; return 2 structs-tc-tl
+PASS: gdb.base/structs.exp: return value known implies finish value known; return 2 structs-tc-tl
+PASS: gdb.base/structs.exp: set print sevenbit-strings
+PASS: gdb.base/structs.exp: set print address off
+PASS: gdb.base/structs.exp: set width 0
+PASS: gdb.base/structs.exp: set print elements 300
+PASS: gdb.base/structs.exp: ptype foo2; structs-tc-tll
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 2 structs-tc-tll
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 2 structs-tc-tll
+PASS: gdb.base/structs.exp: p/c L<n>; call 2 structs-tc-tll
+PASS: gdb.base/structs.exp: set print sevenbit-strings
+PASS: gdb.base/structs.exp: set print address off
+PASS: gdb.base/structs.exp: set width 0
+PASS: gdb.base/structs.exp: set print elements 300
+PASS: gdb.base/structs.exp: ptype foo2; structs-tc-tf
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 2 structs-tc-tf
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 2 structs-tc-tf
+PASS: gdb.base/structs.exp: p/c L<n>; call 2 structs-tc-tf
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 3 structs-tc-tf
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 3 structs-tc-tf
+PASS: gdb.base/structs.exp: p/c L<n>; call 3 structs-tc-tf
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 4 structs-tc-tf
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 4 structs-tc-tf
+PASS: gdb.base/structs.exp: p/c L<n>; call 4 structs-tc-tf
+PASS: gdb.base/structs.exp: set print sevenbit-strings
+PASS: gdb.base/structs.exp: set print address off
+PASS: gdb.base/structs.exp: set width 0
+PASS: gdb.base/structs.exp: set print elements 300
+PASS: gdb.base/structs.exp: ptype foo2; structs-tc-td
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 2 structs-tc-td
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 2 structs-tc-td
+PASS: gdb.base/structs.exp: p/c L<n>; call 2 structs-tc-td
+PASS: gdb.base/structs.exp: set print sevenbit-strings
+PASS: gdb.base/structs.exp: set print address off
+PASS: gdb.base/structs.exp: set width 0
+PASS: gdb.base/structs.exp: set print elements 300
+PASS: gdb.base/structs.exp: ptype foo2; structs-tc-tld
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 2 structs-tc-tld
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 2 structs-tc-tld
+PASS: gdb.base/structs.exp: p/c L<n>; call 2 structs-tc-tld
+PASS: gdb.base/structs.exp: set print sevenbit-strings
+PASS: gdb.base/structs.exp: set print address off
+PASS: gdb.base/structs.exp: set width 0
+PASS: gdb.base/structs.exp: set print elements 300
+PASS: gdb.base/structs.exp: ptype foo2; structs-td-tf
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 2 structs-td-tf
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 2 structs-td-tf
+PASS: gdb.base/structs.exp: p/c L<n>; call 2 structs-td-tf
+PASS: gdb.base/structs.exp: advance to fun<n> for return; return 2 structs-td-tf
+PASS: gdb.base/structs.exp: zed L<n> for return; return 2 structs-td-tf
+PASS: gdb.base/structs.exp: return foo<n>; return 2 structs-td-tf
+PASS: gdb.base/structs.exp: value foo<n> returned; return 2 structs-td-tf
+PASS: gdb.base/structs.exp: advance to fun<n> for finish; return 2 structs-td-tf
+PASS: gdb.base/structs.exp: zed L<n> for finish; return 2 structs-td-tf
+PASS: gdb.base/structs.exp: finish foo<n>; return 2 structs-td-tf
+PASS: gdb.base/structs.exp: value foo<n> finished; return 2 structs-td-tf
+PASS: gdb.base/structs.exp: return value known implies finish value known; return 2 structs-td-tf
+PASS: gdb.base/structs.exp: set print sevenbit-strings
+PASS: gdb.base/structs.exp: set print address off
+PASS: gdb.base/structs.exp: set width 0
+PASS: gdb.base/structs.exp: set print elements 300
+PASS: gdb.base/structs.exp: ptype foo2; structs-tf-td
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 2 structs-tf-td
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 2 structs-tf-td
+PASS: gdb.base/structs.exp: p/c L<n>; call 2 structs-tf-td
+PASS: gdb.base/structs.exp: advance to fun<n> for return; return 2 structs-tf-td
+PASS: gdb.base/structs.exp: zed L<n> for return; return 2 structs-tf-td
+PASS: gdb.base/structs.exp: return foo<n>; return 2 structs-tf-td
+PASS: gdb.base/structs.exp: value foo<n> returned; return 2 structs-tf-td
+PASS: gdb.base/structs.exp: advance to fun<n> for finish; return 2 structs-tf-td
+PASS: gdb.base/structs.exp: zed L<n> for finish; return 2 structs-tf-td
+PASS: gdb.base/structs.exp: finish foo<n>; return 2 structs-tf-td
+PASS: gdb.base/structs.exp: value foo<n> finished; return 2 structs-tf-td
+PASS: gdb.base/structs.exp: return value known implies finish value known; return 2 structs-tf-td
+Running ./gdb.base/subst.exp ...
+PASS: gdb.base/subst.exp: deactivate GDB's confirmation interface
+PASS: gdb.base/subst.exp: show substitute-path, no rule entered yet
+PASS: gdb.base/subst.exp: show substitute-path from, no rule entered yet
+PASS: gdb.base/subst.exp: show substitute-path, too many arguments
+PASS: gdb.base/subst.exp: unset substitute-path from, no rule entered yet
+PASS: gdb.base/subst.exp: unset substitute-path, no rule entered yet
+PASS: gdb.base/subst.exp: unset substitute-path from, no rule entered yet
+PASS: gdb.base/subst.exp: unset substitute-path, too many arguments
+PASS: gdb.base/subst.exp: set substitute-path, too many arguments
+PASS: gdb.base/subst.exp: set substitute-path, too few arguments
+PASS: gdb.base/subst.exp: set substitute-path, first argument is empty string
+PASS: gdb.base/subst.exp: add from -> to substitution rule
+PASS: gdb.base/subst.exp: add from1 -> to1 substitution rule
+PASS: gdb.base/subst.exp: add source -> destination substitution rule
+PASS: gdb.base/subst.exp: add depuis -> vers substitution rule
+PASS: gdb.base/subst.exp: add substitution rule to empty string
+PASS: gdb.base/subst.exp: show substitute-path after all paths added
+PASS: gdb.base/subst.exp: show substitute-path from, after all paths added
+PASS: gdb.base/subst.exp: show substitute-path depuis, after all paths added
+PASS: gdb.base/subst.exp: show substitute-path garbage, after all paths added
+PASS: gdb.base/subst.exp: unset substitute-path from
+PASS: gdb.base/subst.exp: show substitute-path from, after unsetting it
+PASS: gdb.base/subst.exp: show substitute-path after from rule removed
+PASS: gdb.base/subst.exp: unset substitute-path from after the rule was removed
+PASS: gdb.base/subst.exp: unset substitute-path depuis (middle of list)
+PASS: gdb.base/subst.exp: show substitute-path after depuis rule removed
+PASS: gdb.base/subst.exp: unset substitute-path empty (end of list)
+PASS: gdb.base/subst.exp: show substitute-path after empty rule removed
+PASS: gdb.base/subst.exp: remove all remaining substitution rules
+PASS: gdb.base/subst.exp: show substitute-path after all remaining rules removed
+Running ./gdb.base/symbol-without-target_section.exp ...
+PASS: gdb.base/symbol-without-target_section.exp: add-symbol-file
+PASS: gdb.base/symbol-without-target_section.exp: list main
+PASS: gdb.base/symbol-without-target_section.exp: print symbol_without_target_section
+Running ./gdb.base/term.exp ...
+Running ./gdb.base/testenv.exp ...
+Running ./gdb.base/trace-commands.exp ...
+PASS: gdb.base/trace-commands.exp: show trace-commands says off
+PASS: gdb.base/trace-commands.exp: source -v
+PASS: gdb.base/trace-commands.exp: set trace-commands
+PASS: gdb.base/trace-commands.exp: show trace-commands says on
+PASS: gdb.base/trace-commands.exp: simple trace-commands test
+PASS: gdb.base/trace-commands.exp: nested trace-commands test
+PASS: gdb.base/trace-commands.exp: define user command
+PASS: gdb.base/trace-commands.exp: nested trace-commands test with source
+PASS: gdb.base/trace-commands.exp: depth resets on error part 1
+PASS: gdb.base/trace-commands.exp: depth resets on error part 2
+Running ./gdb.base/tui-layout.exp ...
+PASS: gdb.base/tui-layout.exp: layout asm
+Running ./gdb.base/twice.exp ...
+PASS: gdb.base/twice.exp: step
+Running ./gdb.base/type-opaque.exp ...
+FAIL: gdb.base/type-opaque.exp: opaque struct type resolving
+PASS: gdb.base/type-opaque.exp: empty struct type resolving
+PASS: gdb.base/type-opaque.exp: filled struct type resolving
+FAIL: gdb.base/type-opaque.exp: opaque union type resolving
+PASS: gdb.base/type-opaque.exp: empty union type resolving
+PASS: gdb.base/type-opaque.exp: filled union type resolving
+Running ./gdb.base/ui-redirect.exp ...
+PASS: gdb.base/ui-redirect.exp: commands
+PASS: gdb.base/ui-redirect.exp: print 1
+PASS: gdb.base/ui-redirect.exp: end
+PASS: gdb.base/ui-redirect.exp: set logging file /dev/null
+PASS: gdb.base/ui-redirect.exp: set logging on
+PASS: gdb.base/ui-redirect.exp: save breakpoints /dev/null
+PASS: gdb.base/ui-redirect.exp: set logging off
+PASS: gdb.base/ui-redirect.exp: help
+Running ./gdb.base/unload.exp ...
+PASS: gdb.base/unload.exp: pending breakpoint info before run
+FAIL: gdb.base/unload.exp: running program (the program exited)
+FAIL: gdb.base/unload.exp: pending breakpoint info on first run at shrfunc1
+FAIL: gdb.base/unload.exp: continuing to unloaded libfile (the program is no longer running)
+FAIL: gdb.base/unload.exp: print y from libfile
+FAIL: gdb.base/unload.exp: rerun to shared library breakpoint
+FAIL: gdb.base/unload.exp: pending breakpoint info on second run at shrfunc1
+FAIL: gdb.base/unload.exp: continuing to unloaded libfile (the program exited)
+FAIL: gdb.base/unload.exp: continue to shrfunc2 (the program is no longer running)
+FAIL: gdb.base/unload.exp: pending breakpoint info on second run at shrfunc2
+FAIL: gdb.base/unload.exp: continuing to unloaded libfile2 (the program is no longer running)
+FAIL: gdb.base/unload.exp: print y from libfile2
+Running ./gdb.base/until.exp ...
+PASS: gdb.base/until.exp: until line number
+PASS: gdb.base/until.exp: malformed until
+PASS: gdb.base/until.exp: until factorial, recursive function
+PASS: gdb.base/until.exp: until func, not called by current frame
+Running ./gdb.base/unwindonsignal.exp ...
+Running ./gdb.base/valgrind-db-attach.exp ...
+Running ./gdb.base/valgrind-infcall.exp ...
+Running ./gdb.base/value-double-free.exp ...
+FAIL: gdb.base/value-double-free.exp: watch var
+PASS: gdb.base/value-double-free.exp: continue
+PASS: gdb.base/value-double-free.exp: print empty()
+PASS: gdb.base/value-double-free.exp: help help
+Running ./gdb.base/varargs.exp ...
+PASS: gdb.base/varargs.exp: set print sevenbit-strings
+PASS: gdb.base/varargs.exp: set print address off
+PASS: gdb.base/varargs.exp: set width 0
+Running ./gdb.base/volatile.exp ...
+PASS: gdb.base/volatile.exp: continue to marker1
+PASS: gdb.base/volatile.exp: up from marker1
+PASS: gdb.base/volatile.exp: ptype vox
+PASS: gdb.base/volatile.exp: ptype victuals
+PASS: gdb.base/volatile.exp: ptype vixen
+PASS: gdb.base/volatile.exp: ptype vitriol
+PASS: gdb.base/volatile.exp: ptype vellum
+PASS: gdb.base/volatile.exp: ptype valve
+PASS: gdb.base/volatile.exp: ptype vacuity
+PASS: gdb.base/volatile.exp: ptype vertigo
+PASS: gdb.base/volatile.exp: ptype vampire
+PASS: gdb.base/volatile.exp: ptype viper
+PASS: gdb.base/volatile.exp: ptype vigour
+PASS: gdb.base/volatile.exp: ptype vapour
+PASS: gdb.base/volatile.exp: ptype ventricle
+PASS: gdb.base/volatile.exp: ptype vigintillion
+PASS: gdb.base/volatile.exp: ptype vocation
+PASS: gdb.base/volatile.exp: ptype veracity
+PASS: gdb.base/volatile.exp: ptype vapidity
+PASS: gdb.base/volatile.exp: ptype velocity
+PASS: gdb.base/volatile.exp: ptype veneer
+PASS: gdb.base/volatile.exp: ptype video
+PASS: gdb.base/volatile.exp: ptype vacuum
+PASS: gdb.base/volatile.exp: ptype veniality
+PASS: gdb.base/volatile.exp: ptype vitality
+PASS: gdb.base/volatile.exp: ptype voracity
+PASS: gdb.base/volatile.exp: ptype victor
+PASS: gdb.base/volatile.exp: ptype vicar
+PASS: gdb.base/volatile.exp: ptype victory
+PASS: gdb.base/volatile.exp: ptype vicarage
+PASS: gdb.base/volatile.exp: ptype vein
+PASS: gdb.base/volatile.exp: ptype vogue
+PASS: gdb.base/volatile.exp: ptype cavern
+PASS: gdb.base/volatile.exp: ptype coverlet
+PASS: gdb.base/volatile.exp: ptype caveat
+PASS: gdb.base/volatile.exp: ptype covenant
+PASS: gdb.base/volatile.exp: ptype vizier
+PASS: gdb.base/volatile.exp: ptype vanadium
+PASS: gdb.base/volatile.exp: ptype vane
+PASS: gdb.base/volatile.exp: ptype veldt
+PASS: gdb.base/volatile.exp: ptype cove
+PASS: gdb.base/volatile.exp: ptype cavity
+PASS: gdb.base/volatile.exp: ptype vagus
+PASS: gdb.base/volatile.exp: ptype vagrancy
+PASS: gdb.base/volatile.exp: ptype vagary
+PASS: gdb.base/volatile.exp: ptype vendor
+PASS: gdb.base/volatile.exp: ptype qux2
+Running ./gdb.base/watch-cond.exp ...
+PASS: gdb.base/watch-cond.exp: set write watchpoint on global variable, local condition
+PASS: gdb.base/watch-cond.exp: watchpoint with global expression, local condition evaluates in correct frame
+PASS: gdb.base/watch-cond.exp: set write watchpoint on local variable, local condition
+PASS: gdb.base/watch-cond.exp: watchpoint with local expression, local condition evaluates in correct frame
+PASS: gdb.base/watch-cond.exp: set write watchpoint on global2 variable
+PASS: gdb.base/watch-cond.exp: watchpoint on global2 variable triggers
+PASS: gdb.base/watch-cond.exp: condition of watchpoint 2 changes
+PASS: gdb.base/watch-cond.exp: watchpoint stops with untestable local expression
+Running ./gdb.base/watch-cond-infcall.exp ...
+PASS: gdb.base/watch-cond-infcall.exp: sw: watch var if return_1 ()
+PASS: gdb.base/watch-cond-infcall.exp: sw: continue
+Running ./gdb.base/watch-non-mem.exp ...
+PASS: gdb.base/watch-non-mem.exp: set write watchpoint on $pc
+PASS: gdb.base/watch-non-mem.exp: watchpoint on $pc works
+Running ./gdb.base/watchpoint-cond-gone.exp ...
+PASS: gdb.base/watchpoint-cond-gone.exp: set can-use-hw-watchpoints 0
+PASS: gdb.base/watchpoint-cond-gone.exp: continue to breakpoint: Place to set the watchpoint
+PASS: gdb.base/watchpoint-cond-gone.exp: Place the watchpoint
+PASS: gdb.base/watchpoint-cond-gone.exp: Catch the no longer valid watchpoint
+Running ./gdb.base/watchpoint-delete.exp ...
+PASS: gdb.base/watchpoint-delete.exp: set can-use-hw-watchpoints 0
+PASS: gdb.base/watchpoint-delete.exp: continue to breakpoint: break-here
+PASS: gdb.base/watchpoint-delete.exp: watch x
+PASS: gdb.base/watchpoint-delete.exp: delete $bpnum
+Running ./gdb.base/watchpoint.exp ...
+PASS: gdb.base/watchpoint.exp: disable fast watches
+PASS: gdb.base/watchpoint.exp: show disable fast watches
+PASS: gdb.base/watchpoint.exp: set slow conditional watch
+PASS: gdb.base/watchpoint.exp: trigger slow conditional watch
+PASS: gdb.base/watchpoint.exp: delete watch ival3
+PASS: gdb.base/watchpoint.exp: set slow condition watch w/thread
+PASS: gdb.base/watchpoint.exp: delete watch w/condition and thread
+PASS: gdb.base/watchpoint.exp: rwatch disallowed when can-set-hw-watchpoints cleared
+PASS: gdb.base/watchpoint.exp: set breakpoint at marker1
+PASS: gdb.base/watchpoint.exp: set breakpoint at marker2
+PASS: gdb.base/watchpoint.exp: info break in watchpoint.exp
+PASS: gdb.base/watchpoint.exp: set watchpoint on ival3
+PASS: gdb.base/watchpoint.exp: watchpoint found in watchpoint/breakpoint table
+PASS: gdb.base/watchpoint.exp: disable watchpoint
+PASS: gdb.base/watchpoint.exp: disable watchpoint in test_simple_watchpoint
+PASS: gdb.base/watchpoint.exp: run to marker1 in test_simple_watchpoint
+PASS: gdb.base/watchpoint.exp: enable watchpoint
+PASS: gdb.base/watchpoint.exp: break func1
+PASS: gdb.base/watchpoint.exp: set $func1_breakpoint_number = $bpnum
+PASS: gdb.base/watchpoint.exp: continue to breakpoint at func1
+PASS: gdb.base/watchpoint.exp: watchpoint hit, first time
+PASS: gdb.base/watchpoint.exp: Watchpoint hit count is 1
+PASS: gdb.base/watchpoint.exp: delete $func1_breakpoint_number
+PASS: gdb.base/watchpoint.exp: watchpoint hit, second time
+PASS: gdb.base/watchpoint.exp: Watchpoint hit count is 2
+PASS: gdb.base/watchpoint.exp: watchpoint hit, third time
+PASS: gdb.base/watchpoint.exp: Watchpoint hit count is 3
+PASS: gdb.base/watchpoint.exp: watchpoint hit, fourth time
+PASS: gdb.base/watchpoint.exp: Watchpoint hit count is 4
+PASS: gdb.base/watchpoint.exp: watchpoint hit, fifth time
+PASS: gdb.base/watchpoint.exp: Watchpoint hit count is 5
+PASS: gdb.base/watchpoint.exp: continue to marker2
+PASS: gdb.base/watchpoint.exp: watchpoint disabled
+FAIL: gdb.base/watchpoint.exp: setting breakpoint at exit
+PASS: gdb.base/watchpoint.exp: watchpoints found in watchpoint/breakpoint table
+PASS: gdb.base/watchpoint.exp: disable watchpoint in test_disabling_watchpoints
+PASS: gdb.base/watchpoint.exp: run to marker1 in test_disabling_watchpoints
+PASS: gdb.base/watchpoint.exp: watchpoint enabled
+PASS: gdb.base/watchpoint.exp: watchpoint hit in test_disabling_watchpoints, first time
+PASS: gdb.base/watchpoint.exp: watchpoint hit in test_disabling_watchpoints, second time
+PASS: gdb.base/watchpoint.exp: disable watchpoint #2 in test_disabling_watchpoints
+PASS: gdb.base/watchpoint.exp: watchpoint disabled in table
+PASS: gdb.base/watchpoint.exp: disabled watchpoint skipped
+FAIL: gdb.base/watchpoint.exp: setting breakpoint at exit
+PASS: gdb.base/watchpoint.exp: watch ival2
+PASS: gdb.base/watchpoint.exp: break func2 if 0
+PASS: gdb.base/watchpoint.exp: p $func2_breakpoint_number = $bpnum
+PASS: gdb.base/watchpoint.exp: calling function with watchpoint enabled
+PASS: gdb.base/watchpoint.exp: finish from marker1
+PASS: gdb.base/watchpoint.exp: back at main from marker1
+PASS: gdb.base/watchpoint.exp: next to `for' in watchpoint.exp
+PASS: gdb.base/watchpoint.exp: until to ival1 assignment
+PASS: gdb.base/watchpoint.exp: until to ival3 assignment
+PASS: gdb.base/watchpoint.exp: until out of loop
+PASS: gdb.base/watchpoint.exp: step to ival2 assignment
+PASS: gdb.base/watchpoint.exp: watch ptr1->val
+PASS: gdb.base/watchpoint.exp: break marker5
+PASS: gdb.base/watchpoint.exp: Test complex watchpoint
+PASS: gdb.base/watchpoint.exp: did not trigger wrong watchpoint
+PASS: gdb.base/watchpoint.exp: disable in test_complex_watchpoint
+PASS: gdb.base/watchpoint.exp: break marker6
+PASS: gdb.base/watchpoint.exp: continue to marker6
+PASS: gdb.base/watchpoint.exp: continue to breakpoint: func2 breakpoint here
+PASS: gdb.base/watchpoint.exp: set local watch
+PASS: gdb.base/watchpoint.exp: trigger local watch
+PASS: gdb.base/watchpoint.exp: self-delete local watch
+PASS: gdb.base/watchpoint.exp: continue to breakpoint: func2 breakpoint here
+PASS: gdb.base/watchpoint.exp: set partially local watch
+PASS: gdb.base/watchpoint.exp: trigger1 partially local watch
+PASS: gdb.base/watchpoint.exp: trigger2 partially local watch
+PASS: gdb.base/watchpoint.exp: self-delete partially local watch
+PASS: gdb.base/watchpoint.exp: continue to breakpoint: func2 breakpoint here
+PASS: gdb.base/watchpoint.exp: set static local watch
+PASS: gdb.base/watchpoint.exp: trigger static local watch
+PASS: gdb.base/watchpoint.exp: continue after trigger static local watch
+PASS: gdb.base/watchpoint.exp: static local watch did not self-delete
+PASS: gdb.base/watchpoint.exp: tbreak recurser
+PASS: gdb.base/watchpoint.exp: cont
+PASS: gdb.base/watchpoint.exp: next past local_x initialization
+PASS: gdb.base/watchpoint.exp: set local watch in recursive call
+PASS: gdb.base/watchpoint.exp: trigger local watch in recursive call
+PASS: gdb.base/watchpoint.exp: self-delete local watch in recursive call
+PASS: gdb.base/watchpoint.exp: cont
+PASS: gdb.base/watchpoint.exp: tbreak recurser
+PASS: gdb.base/watchpoint.exp: cont
+PASS: gdb.base/watchpoint.exp: next past local_x initialization
+PASS: gdb.base/watchpoint.exp: set local watch in recursive call with explicit scope
+PASS: gdb.base/watchpoint.exp: trigger local watch with explicit scope in recursive call
+PASS: gdb.base/watchpoint.exp: self-delete local watch with explicit scope in recursive call (2)
+PASS: gdb.base/watchpoint.exp: disable in test_complex_watchpoint
+FAIL: gdb.base/watchpoint.exp: setting breakpoint at exit
+PASS: gdb.base/watchpoint.exp: watchpoint refused to insert on nonexistent struct member
+PASS: gdb.base/watchpoint.exp: watch global_ptr
+PASS: gdb.base/watchpoint.exp: watch *(int *) 0
+PASS: gdb.base/watchpoint.exp: watch -location *global_ptr
+PASS: gdb.base/watchpoint.exp: watch *global_ptr
+PASS: gdb.base/watchpoint.exp: set $global_ptr_breakpoint_number = $bpnum
+FAIL: gdb.base/watchpoint.exp: global_ptr next
+FAIL: gdb.base/watchpoint.exp: next over ptr init
+FAIL: gdb.base/watchpoint.exp: next over buffer set
+PASS: gdb.base/watchpoint.exp: delete $global_ptr_breakpoint_number
+PASS: gdb.base/watchpoint.exp: watch **global_ptr_ptr
+PASS: gdb.base/watchpoint.exp: set $global_ptr_ptr_breakpoint_number = $bpnum
+FAIL: gdb.base/watchpoint.exp: global_ptr_ptr next
+FAIL: gdb.base/watchpoint.exp: next over global_ptr_ptr init
+FAIL: gdb.base/watchpoint.exp: next over global_ptr_ptr buffer set
+FAIL: gdb.base/watchpoint.exp: next over global_ptr_ptr pointer advance
+PASS: gdb.base/watchpoint.exp: delete $global_ptr_ptr_breakpoint_number
+PASS: gdb.base/watchpoint.exp: continue to breakpoint: second x assignment
+PASS: gdb.base/watchpoint.exp: watch x
+PASS: gdb.base/watchpoint.exp: next after watch x
+PASS: gdb.base/watchpoint.exp: delete watch x
+PASS: gdb.base/watchpoint.exp: watch buf
+PASS: gdb.base/watchpoint.exp: watchpoint on buf hit
+PASS: gdb.base/watchpoint.exp: delete watch buf
+PASS: gdb.base/watchpoint.exp: number is constant
+PASS: gdb.base/watchpoint.exp: number with cast is constant
+PASS: gdb.base/watchpoint.exp: marker1 is constant
+PASS: gdb.base/watchpoint.exp: watch count + 6
+PASS: gdb.base/watchpoint.exp: delete watchpoint `count + 6'
+PASS: gdb.base/watchpoint.exp: watch 7 + count
+PASS: gdb.base/watchpoint.exp: delete watchpoint `7 + count'
+PASS: gdb.base/watchpoint.exp: watch $pc
+PASS: gdb.base/watchpoint.exp: disable watchpoint `$pc'
+PASS: gdb.base/watchpoint.exp: reenable watchpoint `$pc'
+PASS: gdb.base/watchpoint.exp: watchpoint `$pc' is enabled
+PASS: gdb.base/watchpoint.exp: delete watchpoint `$pc'
+PASS: gdb.base/watchpoint.exp: continue to breakpoint: func5 breakpoint here
+PASS: gdb.base/watchpoint.exp: watch -location .x
+PASS: gdb.base/watchpoint.exp: continue with watch -location
+PASS: gdb.base/watchpoint.exp: delete watch -location
+PASS: gdb.base/watchpoint.exp: continue to breakpoint: func6 breakpoint here
+PASS: gdb.base/watchpoint.exp: watch foo2
+PASS: gdb.base/watchpoint.exp: continue with watch foo2
+PASS: gdb.base/watchpoint.exp: delete watch foo2
+PASS: gdb.base/watchpoint.exp: continue to breakpoint: func7 breakpoint here
+PASS: gdb.base/watchpoint.exp: watch foo4
+PASS: gdb.base/watchpoint.exp: continue with watch foo4
+PASS: gdb.base/watchpoint.exp: delete watch foo4
+Running ./gdb.base/watchpoint-hw.exp ...
+Running ./gdb.base/watchpoint-hw-hit-once.exp ...
+Running ./gdb.base/watchpoints.exp ...
+PASS: gdb.base/watchpoints.exp: watchpoint hit, first time
+PASS: gdb.base/watchpoints.exp: watchpoint hit, first time
+PASS: gdb.base/watchpoints.exp: Watchpoint hit count is 1
+PASS: gdb.base/watchpoints.exp: watchpoint ival1 hit, second time
+PASS: gdb.base/watchpoints.exp: Watchpoint ival1 hit count is 2
+PASS: gdb.base/watchpoints.exp: watchpoint hit, second time
+PASS: gdb.base/watchpoints.exp: Watchpoint hit count is 2
+PASS: gdb.base/watchpoints.exp: watchpoint ival1 hit, third time
+PASS: gdb.base/watchpoints.exp: Watchpoint ival1 hit count is 3
+PASS: gdb.base/watchpoints.exp: watchpoint hit, third time
+PASS: gdb.base/watchpoints.exp: Watchpoint hit count is 3
+PASS: gdb.base/watchpoints.exp: watchpoint hit, fourth time
+PASS: gdb.base/watchpoints.exp: Watchpoint hit count is 4
+PASS: gdb.base/watchpoints.exp: watchpoint hit, fifth time
+PASS: gdb.base/watchpoints.exp: Watchpoint hit count is 5
+Running ./gdb.base/watchpoint-solib.exp ...
+PASS: gdb.base/watchpoint-solib.exp: set pending breakpoint
+FAIL: gdb.base/watchpoint-solib.exp: continue to foo (the program exited)
+FAIL: gdb.base/watchpoint-solib.exp: set watchpoint on g
+FAIL: gdb.base/watchpoint-solib.exp: continue to watchpoint hit (the program is no longer running)
+PASS: gdb.base/watchpoint-solib.exp: rerun to main
+FAIL: gdb.base/watchpoint-solib.exp: continue to foo again (the program exited)
+FAIL: gdb.base/watchpoint-solib.exp: continue to watchpoint hit again (the program is no longer running)
+Running ./gdb.base/watch-read.exp ...
+Running ./gdb.base/watch_thread_num.exp ...
+Running ./gdb.base/watch-vfork.exp ...
+Running ./gdb.base/wchar.exp ...
+PASS: gdb.base/wchar.exp: print narrow
+PASS: gdb.base/wchar.exp: print single
+PASS: gdb.base/wchar.exp: print simple
+PASS: gdb.base/wchar.exp: print difficile
+PASS: gdb.base/wchar.exp: print simple[2]
+PASS: gdb.base/wchar.exp: print difficile[2]
+PASS: gdb.base/wchar.exp: print repeat
+PASS: gdb.base/wchar.exp: print repeat_p
+PASS: gdb.base/wchar.exp: set print null on
+PASS: gdb.base/wchar.exp: print repeat (print null on)
+PASS: gdb.base/wchar.exp: set print elements 3
+PASS: gdb.base/wchar.exp: print repeat (print elements 3)
+PASS: gdb.base/wchar.exp: print repeat_p (print elements 3)
+Running ./gdb.base/whatis.exp ...
+PASS: gdb.base/whatis.exp: whatis char
+PASS: gdb.base/whatis.exp: whatis signed char
+PASS: gdb.base/whatis.exp: whatis unsigned char
+PASS: gdb.base/whatis.exp: whatis short
+PASS: gdb.base/whatis.exp: whatis signed short
+PASS: gdb.base/whatis.exp: whatis unsigned short
+PASS: gdb.base/whatis.exp: whatis int
+PASS: gdb.base/whatis.exp: whatis signed int
+PASS: gdb.base/whatis.exp: whatis unsigned int
+PASS: gdb.base/whatis.exp: whatis long
+PASS: gdb.base/whatis.exp: whatis signed long
+PASS: gdb.base/whatis.exp: whatis unsigned long
+PASS: gdb.base/whatis.exp: whatis unsigned long long
+PASS: gdb.base/whatis.exp: whatis float
+PASS: gdb.base/whatis.exp: whatis double
+PASS: gdb.base/whatis.exp: whatis char array
+PASS: gdb.base/whatis.exp: whatis signed char array
+PASS: gdb.base/whatis.exp: whatis unsigned char array
+PASS: gdb.base/whatis.exp: whatis short array
+PASS: gdb.base/whatis.exp: whatis signed short array
+PASS: gdb.base/whatis.exp: whatis unsigned short array
+PASS: gdb.base/whatis.exp: whatis int array
+PASS: gdb.base/whatis.exp: whatis signed int array
+PASS: gdb.base/whatis.exp: whatis unsigned int array
+PASS: gdb.base/whatis.exp: whatis long array
+PASS: gdb.base/whatis.exp: whatis signed long array
+PASS: gdb.base/whatis.exp: whatis unsigned long array
+PASS: gdb.base/whatis.exp: whatis unsigned long array
+PASS: gdb.base/whatis.exp: whatis float array
+PASS: gdb.base/whatis.exp: whatis double array
+PASS: gdb.base/whatis.exp: whatis char pointer
+PASS: gdb.base/whatis.exp: whatis signed char pointer
+PASS: gdb.base/whatis.exp: whatis unsigned char pointer
+PASS: gdb.base/whatis.exp: whatis short pointer
+PASS: gdb.base/whatis.exp: whatis signed short pointer
+PASS: gdb.base/whatis.exp: whatis unsigned short pointer
+PASS: gdb.base/whatis.exp: whatis int pointer
+PASS: gdb.base/whatis.exp: whatis signed int pointer
+PASS: gdb.base/whatis.exp: whatis unsigned int pointer
+PASS: gdb.base/whatis.exp: whatis long pointer
+PASS: gdb.base/whatis.exp: whatis signed long pointer
+PASS: gdb.base/whatis.exp: whatis unsigned long pointer
+PASS: gdb.base/whatis.exp: whatis long long pointer
+PASS: gdb.base/whatis.exp: whatis signed long long pointer
+PASS: gdb.base/whatis.exp: whatis unsigned long long pointer
+PASS: gdb.base/whatis.exp: whatis float pointer
+PASS: gdb.base/whatis.exp: whatis double pointer
+PASS: gdb.base/whatis.exp: whatis named structure
+PASS: gdb.base/whatis.exp: whatis named structure using type name
+PASS: gdb.base/whatis.exp: whatis unnamed structure
+PASS: gdb.base/whatis.exp: whatis named union
+PASS: gdb.base/whatis.exp: whatis named union using type name
+PASS: gdb.base/whatis.exp: whatis unnamed union
+PASS: gdb.base/whatis.exp: whatis char function
+PASS: gdb.base/whatis.exp: whatis signed char function
+PASS: gdb.base/whatis.exp: whatis unsigned char function
+PASS: gdb.base/whatis.exp: whatis short function
+PASS: gdb.base/whatis.exp: whatis signed short function
+PASS: gdb.base/whatis.exp: whatis unsigned short function
+PASS: gdb.base/whatis.exp: whatis int function
+PASS: gdb.base/whatis.exp: whatis signed int function
+PASS: gdb.base/whatis.exp: whatis unsigned int function
+PASS: gdb.base/whatis.exp: whatis long function
+PASS: gdb.base/whatis.exp: whatis signed long function
+PASS: gdb.base/whatis.exp: whatis unsigned long function
+PASS: gdb.base/whatis.exp: whatis long long function
+PASS: gdb.base/whatis.exp: whatis signed long long function
+PASS: gdb.base/whatis.exp: whatis unsigned long long function
+PASS: gdb.base/whatis.exp: whatis float function
+PASS: gdb.base/whatis.exp: whatis double function
+PASS: gdb.base/whatis.exp: whatis complicated structure
+PASS: gdb.base/whatis.exp: whatis complicated union
+PASS: gdb.base/whatis.exp: whatis enumeration
+PASS: gdb.base/whatis.exp: whatis enumeration using type name
+PASS: gdb.base/whatis.exp: whatis outer structure
+PASS: gdb.base/whatis.exp: whatis outer structure member
+PASS: gdb.base/whatis.exp: whatis inner structure
+PASS: gdb.base/whatis.exp: whatis inner structure member
+PASS: gdb.base/whatis.exp: whatis inner union
+PASS: gdb.base/whatis.exp: whatis inner union member
+PASS: gdb.base/whatis.exp: whatis using typedef type name
+PASS: gdb.base/whatis.exp: whatis applied to variable defined by typedef
+PASS: gdb.base/whatis.exp: whatis applied to pointer to pointer to function
+PASS: gdb.base/whatis.exp: whatis applied to const pointer to pointer to function
+PASS: gdb.base/whatis.exp: whatis applied to pointer to const pointer to function
+PASS: gdb.base/whatis.exp: whatis applied to pointer to function returning pointer to int
+PASS: gdb.base/whatis.exp: whatis applied to pointer to pointer to function returning pointer to int
+PASS: gdb.base/whatis.exp: whatis applied to pointer to function returning pointer to array
+PASS: gdb.base/whatis.exp: whatis applied to pointer to function taking int,int and returning int
+PASS: gdb.base/whatis.exp: whatis applied to pointer to function taking const int ptr and varargs and returning int
+PASS: gdb.base/whatis.exp: whatis applied to function with types trailing 'void'
+PASS: gdb.base/whatis.exp: whatis applied to function with 'void' parameter type
+Running ./gdb.base/whatis-exp.exp ...
+PASS: gdb.base/whatis-exp.exp: set variable x=14
+PASS: gdb.base/whatis-exp.exp: set variable y=2
+PASS: gdb.base/whatis-exp.exp: set variable z=2
+PASS: gdb.base/whatis-exp.exp: set variable w=3
+PASS: gdb.base/whatis-exp.exp: print value of x
+PASS: gdb.base/whatis-exp.exp: print value of y
+PASS: gdb.base/whatis-exp.exp: print value of z
+PASS: gdb.base/whatis-exp.exp: print value of w
+PASS: gdb.base/whatis-exp.exp: whatis value of x+y
+PASS: gdb.base/whatis-exp.exp: whatis value of x-y
+PASS: gdb.base/whatis-exp.exp: whatis value of x*y
+PASS: gdb.base/whatis-exp.exp: whatis value of x/y
+PASS: gdb.base/whatis-exp.exp: whatis value of x%y
+PASS: gdb.base/whatis-exp.exp: whatis value of x=y
+PASS: gdb.base/whatis-exp.exp: whatis value of x+=2
+PASS: gdb.base/whatis-exp.exp: whatis value of ++x
+PASS: gdb.base/whatis-exp.exp: whatis value of --x
+PASS: gdb.base/whatis-exp.exp: whatis value of x++
+PASS: gdb.base/whatis-exp.exp: whatis value of x--
+Running ./gdb.btrace/enable.exp ...
+Running ./gdb.btrace/function_call_history.exp ...
+Running ./gdb.btrace/instruction_history.exp ...
+Running ./gdb.cell/arch.exp ...
+Running ./gdb.cell/break.exp ...
+Running ./gdb.cell/bt.exp ...
+Running ./gdb.cell/core.exp ...
+Running ./gdb.cell/data.exp ...
+Running ./gdb.cell/dwarfaddr.exp ...
+Running ./gdb.cell/ea-cache.exp ...
+Running ./gdb.cell/ea-standalone.exp ...
+Running ./gdb.cell/ea-test.exp ...
+Running ./gdb.cell/fork.exp ...
+Running ./gdb.cell/f-regs.exp ...
+Running ./gdb.cell/gcore.exp ...
+Running ./gdb.cell/mem-access.exp ...
+Running ./gdb.cell/ptype.exp ...
+Running ./gdb.cell/registers.exp ...
+Running ./gdb.cell/sizeof.exp ...
+Running ./gdb.cell/solib.exp ...
+Running ./gdb.cell/solib-symbol.exp ...
+Running ./gdb.cp/abstract-origin.exp ...
+PASS: gdb.cp/abstract-origin.exp: continue to breakpoint: break-here
+PASS: gdb.cp/abstract-origin.exp: p problem
+Running ./gdb.cp/ambiguous.exp ...
+Running ./gdb.cp/annota2.exp ...
+Running ./gdb.cp/annota3.exp ...
+Running ./gdb.cp/anon-ns.exp ...
+PASS: gdb.cp/anon-ns.exp: list (anonymous namespace)::doit1(void)
+PASS: gdb.cp/anon-ns.exp: list '(anonymous namespace)::doit1(void)'
+PASS: gdb.cp/anon-ns.exp: break (anonymous namespace)::doit1(void)
+PASS: gdb.cp/anon-ns.exp: break '(anonymous namespace)::doit1(void)'
+PASS: gdb.cp/anon-ns.exp: list (anonymous namespace)::one::one(void)
+PASS: gdb.cp/anon-ns.exp: list '(anonymous namespace)::one::one(void)'
+PASS: gdb.cp/anon-ns.exp: break (anonymous namespace)::one::one(void)
+PASS: gdb.cp/anon-ns.exp: break '(anonymous namespace)::one::one(void)'
+PASS: gdb.cp/anon-ns.exp: list (anonymous namespace)::A::doit2(void)
+PASS: gdb.cp/anon-ns.exp: list '(anonymous namespace)::A::doit2(void)'
+PASS: gdb.cp/anon-ns.exp: break (anonymous namespace)::A::doit2(void)
+PASS: gdb.cp/anon-ns.exp: break '(anonymous namespace)::A::doit2(void)'
+PASS: gdb.cp/anon-ns.exp: list (anonymous namespace)::A::two::two(void)
+PASS: gdb.cp/anon-ns.exp: list '(anonymous namespace)::A::two::two(void)'
+PASS: gdb.cp/anon-ns.exp: break (anonymous namespace)::A::two::two(void)
+PASS: gdb.cp/anon-ns.exp: break '(anonymous namespace)::A::two::two(void)'
+PASS: gdb.cp/anon-ns.exp: list (anonymous namespace)::A::(anonymous namespace)::(anonymous namespace)::doit3(void)
+PASS: gdb.cp/anon-ns.exp: list '(anonymous namespace)::A::(anonymous namespace)::(anonymous namespace)::doit3(void)'
+PASS: gdb.cp/anon-ns.exp: break (anonymous namespace)::A::(anonymous namespace)::(anonymous namespace)::doit3(void)
+PASS: gdb.cp/anon-ns.exp: break '(anonymous namespace)::A::(anonymous namespace)::(anonymous namespace)::doit3(void)'
+PASS: gdb.cp/anon-ns.exp: list (anonymous namespace)::A::(anonymous namespace)::(anonymous namespace)::three::three(void)
+PASS: gdb.cp/anon-ns.exp: list '(anonymous namespace)::A::(anonymous namespace)::(anonymous namespace)::three::three(void)'
+PASS: gdb.cp/anon-ns.exp: break (anonymous namespace)::A::(anonymous namespace)::(anonymous namespace)::three::three(void)
+PASS: gdb.cp/anon-ns.exp: break '(anonymous namespace)::A::(anonymous namespace)::(anonymous namespace)::three::three(void)'
+PASS: gdb.cp/anon-ns.exp: list (anonymous namespace)::doit1(int)
+PASS: gdb.cp/anon-ns.exp: list '(anonymous namespace)::doit1(int)'
+PASS: gdb.cp/anon-ns.exp: break (anonymous namespace)::doit1(int)
+PASS: gdb.cp/anon-ns.exp: break '(anonymous namespace)::doit1(int)'
+PASS: gdb.cp/anon-ns.exp: list (anonymous namespace)::one::one(int)
+PASS: gdb.cp/anon-ns.exp: list '(anonymous namespace)::one::one(int)'
+PASS: gdb.cp/anon-ns.exp: break (anonymous namespace)::one::one(int)
+PASS: gdb.cp/anon-ns.exp: break '(anonymous namespace)::one::one(int)'
+PASS: gdb.cp/anon-ns.exp: list (anonymous namespace)::A::doit2(int)
+PASS: gdb.cp/anon-ns.exp: list '(anonymous namespace)::A::doit2(int)'
+PASS: gdb.cp/anon-ns.exp: break (anonymous namespace)::A::doit2(int)
+PASS: gdb.cp/anon-ns.exp: break '(anonymous namespace)::A::doit2(int)'
+PASS: gdb.cp/anon-ns.exp: list (anonymous namespace)::A::two::two(int)
+PASS: gdb.cp/anon-ns.exp: list '(anonymous namespace)::A::two::two(int)'
+PASS: gdb.cp/anon-ns.exp: break (anonymous namespace)::A::two::two(int)
+PASS: gdb.cp/anon-ns.exp: break '(anonymous namespace)::A::two::two(int)'
+PASS: gdb.cp/anon-ns.exp: list (anonymous namespace)::A::(anonymous namespace)::(anonymous namespace)::doit3(int)
+PASS: gdb.cp/anon-ns.exp: list '(anonymous namespace)::A::(anonymous namespace)::(anonymous namespace)::doit3(int)'
+PASS: gdb.cp/anon-ns.exp: break (anonymous namespace)::A::(anonymous namespace)::(anonymous namespace)::doit3(int)
+PASS: gdb.cp/anon-ns.exp: break '(anonymous namespace)::A::(anonymous namespace)::(anonymous namespace)::doit3(int)'
+PASS: gdb.cp/anon-ns.exp: list (anonymous namespace)::A::(anonymous namespace)::(anonymous namespace)::three::three(int)
+PASS: gdb.cp/anon-ns.exp: list '(anonymous namespace)::A::(anonymous namespace)::(anonymous namespace)::three::three(int)'
+PASS: gdb.cp/anon-ns.exp: break (anonymous namespace)::A::(anonymous namespace)::(anonymous namespace)::three::three(int)
+PASS: gdb.cp/anon-ns.exp: break '(anonymous namespace)::A::(anonymous namespace)::(anonymous namespace)::three::three(int)'
+PASS: gdb.cp/anon-ns.exp: list (anonymous namespace)::doit1(char *)
+PASS: gdb.cp/anon-ns.exp: list '(anonymous namespace)::doit1(char *)'
+PASS: gdb.cp/anon-ns.exp: break (anonymous namespace)::doit1(char *)
+PASS: gdb.cp/anon-ns.exp: break '(anonymous namespace)::doit1(char *)'
+PASS: gdb.cp/anon-ns.exp: list (anonymous namespace)::one::one(char *)
+PASS: gdb.cp/anon-ns.exp: list '(anonymous namespace)::one::one(char *)'
+PASS: gdb.cp/anon-ns.exp: break (anonymous namespace)::one::one(char *)
+PASS: gdb.cp/anon-ns.exp: break '(anonymous namespace)::one::one(char *)'
+PASS: gdb.cp/anon-ns.exp: list (anonymous namespace)::A::doit2(char *)
+PASS: gdb.cp/anon-ns.exp: list '(anonymous namespace)::A::doit2(char *)'
+PASS: gdb.cp/anon-ns.exp: break (anonymous namespace)::A::doit2(char *)
+PASS: gdb.cp/anon-ns.exp: break '(anonymous namespace)::A::doit2(char *)'
+PASS: gdb.cp/anon-ns.exp: list (anonymous namespace)::A::two::two(char *)
+PASS: gdb.cp/anon-ns.exp: list '(anonymous namespace)::A::two::two(char *)'
+PASS: gdb.cp/anon-ns.exp: break (anonymous namespace)::A::two::two(char *)
+PASS: gdb.cp/anon-ns.exp: break '(anonymous namespace)::A::two::two(char *)'
+PASS: gdb.cp/anon-ns.exp: list (anonymous namespace)::A::(anonymous namespace)::(anonymous namespace)::doit3(char *)
+PASS: gdb.cp/anon-ns.exp: list '(anonymous namespace)::A::(anonymous namespace)::(anonymous namespace)::doit3(char *)'
+PASS: gdb.cp/anon-ns.exp: break (anonymous namespace)::A::(anonymous namespace)::(anonymous namespace)::doit3(char *)
+PASS: gdb.cp/anon-ns.exp: break '(anonymous namespace)::A::(anonymous namespace)::(anonymous namespace)::doit3(char *)'
+PASS: gdb.cp/anon-ns.exp: list (anonymous namespace)::A::(anonymous namespace)::(anonymous namespace)::three::three(char *)
+PASS: gdb.cp/anon-ns.exp: list '(anonymous namespace)::A::(anonymous namespace)::(anonymous namespace)::three::three(char *)'
+PASS: gdb.cp/anon-ns.exp: break (anonymous namespace)::A::(anonymous namespace)::(anonymous namespace)::three::three(char *)
+PASS: gdb.cp/anon-ns.exp: break '(anonymous namespace)::A::(anonymous namespace)::(anonymous namespace)::three::three(char *)'
+PASS: gdb.cp/anon-ns.exp: list (anonymous namespace)::one::doit(void)
+PASS: gdb.cp/anon-ns.exp: list '(anonymous namespace)::one::doit(void)'
+PASS: gdb.cp/anon-ns.exp: break (anonymous namespace)::one::doit(void)
+PASS: gdb.cp/anon-ns.exp: break '(anonymous namespace)::one::doit(void)'
+PASS: gdb.cp/anon-ns.exp: list (anonymous namespace)::A::two::doit(void)
+PASS: gdb.cp/anon-ns.exp: list '(anonymous namespace)::A::two::doit(void)'
+PASS: gdb.cp/anon-ns.exp: break (anonymous namespace)::A::two::doit(void)
+PASS: gdb.cp/anon-ns.exp: break '(anonymous namespace)::A::two::doit(void)'
+PASS: gdb.cp/anon-ns.exp: list (anonymous namespace)::A::(anonymous namespace)::(anonymous namespace)::three::doit(void)
+PASS: gdb.cp/anon-ns.exp: list '(anonymous namespace)::A::(anonymous namespace)::(anonymous namespace)::three::doit(void)'
+PASS: gdb.cp/anon-ns.exp: break (anonymous namespace)::A::(anonymous namespace)::(anonymous namespace)::three::doit(void)
+PASS: gdb.cp/anon-ns.exp: break '(anonymous namespace)::A::(anonymous namespace)::(anonymous namespace)::three::doit(void)'
+Running ./gdb.cp/anon-struct.exp ...
+FAIL: gdb.cp/anon-struct.exp: print type of t::t
+PASS: gdb.cp/anon-struct.exp: print type of X::t2
+FAIL: gdb.cp/anon-struct.exp: print type of X::t2::t2
+FAIL: gdb.cp/anon-struct.exp: print type of t3::~t3
+Running ./gdb.cp/anon-union.exp ...
+PASS: gdb.cp/anon-union.exp: set width 0
+PASS: gdb.cp/anon-union.exp: next 1
+PASS: gdb.cp/anon-union.exp: print foo 1
+PASS: gdb.cp/anon-union.exp: next 2
+PASS: gdb.cp/anon-union.exp: print foo 2
+PASS: gdb.cp/anon-union.exp: set var foo.cloth
+PASS: gdb.cp/anon-union.exp: print foo 3
+PASS: gdb.cp/anon-union.exp: next 3
+PASS: gdb.cp/anon-union.exp: print foo 4
+PASS: gdb.cp/anon-union.exp: set var foo.pebble
+PASS: gdb.cp/anon-union.exp: print foo 5
+PASS: gdb.cp/anon-union.exp: set var foo.qux
+PASS: gdb.cp/anon-union.exp: print foo 6
+PASS: gdb.cp/anon-union.exp: set var foo.mux
+PASS: gdb.cp/anon-union.exp: print foo 7
+PASS: gdb.cp/anon-union.exp: set var foo.x.rock
+PASS: gdb.cp/anon-union.exp: print foo 8
+PASS: gdb.cp/anon-union.exp: set var foo.x.rock2
+PASS: gdb.cp/anon-union.exp: print foo 9
+PASS: gdb.cp/anon-union.exp: next 4
+PASS: gdb.cp/anon-union.exp: print w 1
+PASS: gdb.cp/anon-union.exp: print z 1
+PASS: gdb.cp/anon-union.exp: next 5
+PASS: gdb.cp/anon-union.exp: print w 2
+PASS: gdb.cp/anon-union.exp: print z 2
+PASS: gdb.cp/anon-union.exp: set var z
+PASS: gdb.cp/anon-union.exp: print w 3
+PASS: gdb.cp/anon-union.exp: print z 3
+Running ./gdb.cp/arg-reference.exp ...
+PASS: gdb.cp/arg-reference.exp: No false reference
+Running ./gdb.cp/baseenum.exp ...
+PASS: gdb.cp/baseenum.exp: continue to breakpoint: breakpoint 1
+PASS: gdb.cp/baseenum.exp: Print enum constant X of class A
+PASS: gdb.cp/baseenum.exp: continue to breakpoint: breakpoint 2
+PASS: gdb.cp/baseenum.exp: Print enum constant X of class A in namespace N
+Running ./gdb.cp/bool.exp ...
+PASS: gdb.cp/bool.exp: print return_true()
+PASS: gdb.cp/bool.exp: print return_false()
+Running ./gdb.cp/breakpoint.exp ...
+PASS: gdb.cp/breakpoint.exp: continue to C1::Nested::foo
+PASS: gdb.cp/breakpoint.exp: conditional breakpoint in method
+PASS: gdb.cp/breakpoint.exp: conditional breakpoint in method 2
+PASS: gdb.cp/breakpoint.exp: continue to breakpoint
+PASS: gdb.cp/breakpoint.exp: check the member variable
+PASS: gdb.cp/breakpoint.exp: continue to breakpoint
+PASS: gdb.cp/breakpoint.exp: check the member variable
+Running ./gdb.cp/bs15503.exp ...
+PASS: gdb.cp/bs15503.exp: break StringTest<wchar_t>::testFunction
+PASS: gdb.cp/bs15503.exp: continue to StringTest<wchar_t>
+PASS: gdb.cp/bs15503.exp: continue to breakpoint: find position where blank needs to be inserted
+FAIL: gdb.cp/bs15503.exp: print s.length()
+FAIL: gdb.cp/bs15503.exp: print s[0]
+FAIL: gdb.cp/bs15503.exp: print s[s.length()-1]
+PASS: gdb.cp/bs15503.exp: print (const char *) s
+FAIL: gdb.cp/bs15503.exp: print (const char *) s.substr(0,4)
+FAIL: gdb.cp/bs15503.exp: print (const char *) (s=s.substr(0,4))
+Running ./gdb.cp/call-c.exp ...
+PASS: gdb.cp/call-c.exp: b 43
+PASS: gdb.cp/call-c.exp: print foo(1)
+PASS: gdb.cp/call-c.exp: continue to bp
+PASS: gdb.cp/call-c.exp: print rf->func()
+PASS: gdb.cp/call-c.exp: print handle->func()
+Running ./gdb.cp/casts.exp ...
+PASS: gdb.cp/casts.exp: cast base class pointer to derived class pointer
+PASS: gdb.cp/casts.exp: let compiler cast base class pointer to derived class pointer
+PASS: gdb.cp/casts.exp: cast derived class pointer to base class pointer
+PASS: gdb.cp/casts.exp: cast derived class reference to base class reference
+PASS: gdb.cp/casts.exp: cast base class reference to derived class reference
+PASS: gdb.cp/casts.exp: let compiler cast base class reference to derived class reference
+PASS: gdb.cp/casts.exp: basic test of const_cast
+PASS: gdb.cp/casts.exp: const_cast of 0
+PASS: gdb.cp/casts.exp: basic test of static_cast
+PASS: gdb.cp/casts.exp: static_cast to reference type
+PASS: gdb.cp/casts.exp: basic test of reinterpret_cast
+PASS: gdb.cp/casts.exp: test invalid reinterpret_cast
+PASS: gdb.cp/casts.exp: reinterpret_cast to reference type
+PASS: gdb.cp/casts.exp: whatis decltype(5)
+PASS: gdb.cp/casts.exp: old-style cast using __typeof__
+PASS: gdb.cp/casts.exp: static_cast using __typeof__
+PASS: gdb.cp/casts.exp: reinterpret_cast using __typeof__
+PASS: gdb.cp/casts.exp: old-style cast using __typeof
+PASS: gdb.cp/casts.exp: static_cast using __typeof
+PASS: gdb.cp/casts.exp: reinterpret_cast using __typeof
+PASS: gdb.cp/casts.exp: old-style cast using __decltype
+PASS: gdb.cp/casts.exp: static_cast using __decltype
+PASS: gdb.cp/casts.exp: reinterpret_cast using __decltype
+PASS: gdb.cp/casts.exp: whatis __decltype(*a)
+PASS: gdb.cp/casts.exp: invalid dynamic_cast
+PASS: gdb.cp/casts.exp: dynamic_cast of 0 to void*
+PASS: gdb.cp/casts.exp: dynamic_cast simple upcast
+PASS: gdb.cp/casts.exp: dynamic_cast upcast to unique base
+PASS: gdb.cp/casts.exp: dynamic_cast simple upcast to reference
+PASS: gdb.cp/casts.exp: dynamic_cast simple downcast
+PASS: gdb.cp/casts.exp: dynamic_cast simple downcast to intermediate class
+PASS: gdb.cp/casts.exp: dynamic_cast to non-existing base
+PASS: gdb.cp/casts.exp: dynamic_cast to reference to non-existing base
+PASS: gdb.cp/casts.exp: dynamic_cast unique downcast
+PASS: gdb.cp/casts.exp: dynamic_cast to sibling
+Running ./gdb.cp/class2.exp ...
+PASS: gdb.cp/class2.exp: set print object off
+PASS: gdb.cp/class2.exp: print alpha at marker return 0
+PASS: gdb.cp/class2.exp: print beta at marker return 0
+PASS: gdb.cp/class2.exp: print * aap at marker return 0
+PASS: gdb.cp/class2.exp: print * bbp at marker return 0
+PASS: gdb.cp/class2.exp: print * abp at marker return 0, s-p-o off
+PASS: gdb.cp/class2.exp: print * (B *) abp at marker return 0
+PASS: gdb.cp/class2.exp: print object with no data fields
+PASS: gdb.cp/class2.exp: set print object on
+PASS: gdb.cp/class2.exp: p acp
+PASS: gdb.cp/class2.exp: p acp->c1
+PASS: gdb.cp/class2.exp: p acp->c2
+Running ./gdb.cp/classes.exp ...
+PASS: gdb.cp/classes.exp: ptype struct default_public_struct
+PASS: gdb.cp/classes.exp: ptype struct explicit_public_struct
+PASS: gdb.cp/classes.exp: ptype struct protected_struct
+PASS: gdb.cp/classes.exp: ptype struct private_struct
+PASS: gdb.cp/classes.exp: ptype struct mixed_protection_struct
+PASS: gdb.cp/classes.exp: ptype class public_class
+PASS: gdb.cp/classes.exp: ptype class protected_class
+PASS: gdb.cp/classes.exp: ptype class default_private_class
+PASS: gdb.cp/classes.exp: ptype class explicit_private_class
+PASS: gdb.cp/classes.exp: ptype class mixed_protection_class
+PASS: gdb.cp/classes.exp: ptype class A
+PASS: gdb.cp/classes.exp: ptype class B
+PASS: gdb.cp/classes.exp: ptype class C
+PASS: gdb.cp/classes.exp: ptype class D
+PASS: gdb.cp/classes.exp: ptype class E
+PASS: gdb.cp/classes.exp: ptype class Static
+PASS: gdb.cp/classes.exp: ptype class vA
+PASS: gdb.cp/classes.exp: ptype class vB
+PASS: gdb.cp/classes.exp: ptype class vC
+PASS: gdb.cp/classes.exp: ptype class vD
+PASS: gdb.cp/classes.exp: ptype class vE
+PASS: gdb.cp/classes.exp: ptype class Base1
+PASS: gdb.cp/classes.exp: ptype class Foo
+PASS: gdb.cp/classes.exp: ptype class Bar
+PASS: gdb.cp/classes.exp: print g_A.a
+PASS: gdb.cp/classes.exp: print g_A.x
+PASS: gdb.cp/classes.exp: print g_B.b
+PASS: gdb.cp/classes.exp: print g_B.x
+PASS: gdb.cp/classes.exp: print g_C.c
+PASS: gdb.cp/classes.exp: print g_C.x
+PASS: gdb.cp/classes.exp: print g_D.d
+PASS: gdb.cp/classes.exp: print g_D.x
+PASS: gdb.cp/classes.exp: print g_E.e
+PASS: gdb.cp/classes.exp: print g_E.x
+PASS: gdb.cp/classes.exp: print g_A.b
+PASS: gdb.cp/classes.exp: print g_B.c
+PASS: gdb.cp/classes.exp: print g_B.d
+PASS: gdb.cp/classes.exp: print g_C.b
+PASS: gdb.cp/classes.exp: print g_C.d
+PASS: gdb.cp/classes.exp: print g_D.e
+PASS: gdb.cp/classes.exp: print g_A.y
+PASS: gdb.cp/classes.exp: print g_B.z
+PASS: gdb.cp/classes.exp: print g_C.q
+PASS: gdb.cp/classes.exp: print g_D.p
+PASS: gdb.cp/classes.exp: call class_param.Aptr_a (&g_A)
+PASS: gdb.cp/classes.exp: call class_param.Aptr_x (&g_A)
+PASS: gdb.cp/classes.exp: call class_param.Aptr_a (&g_B)
+PASS: gdb.cp/classes.exp: call class_param.Aptr_x (&g_B)
+PASS: gdb.cp/classes.exp: call class_param.Aref_a (g_A)
+PASS: gdb.cp/classes.exp: call class_param.Aref_x (g_A)
+PASS: gdb.cp/classes.exp: call class_param.Aref_a (g_B)
+PASS: gdb.cp/classes.exp: call class_param.Aref_x (g_B)
+PASS: gdb.cp/classes.exp: call class_param.Aval_a (g_A)
+PASS: gdb.cp/classes.exp: call class_param.Aval_x (g_A)
+PASS: gdb.cp/classes.exp: call class_param.Aval_a (g_B)
+PASS: gdb.cp/classes.exp: call class_param.Aval_x (g_B)
+PASS: gdb.cp/classes.exp: unrelated class *param
+PASS: gdb.cp/classes.exp: unrelated class &param
+PASS: gdb.cp/classes.exp: unrelated class param
+PASS: gdb.cp/classes.exp: continue to enums2(\(\)|)
+PASS: gdb.cp/classes.exp: print obj_with_enum (1)
+PASS: gdb.cp/classes.exp: next
+PASS: gdb.cp/classes.exp: print obj_with_enum (2)
+PASS: gdb.cp/classes.exp: print obj_with_enum.priv_enum
+PASS: gdb.cp/classes.exp: ptype obj_with_enum.priv_enum
+PASS: gdb.cp/classes.exp: ptype obj_with_enum
+PASS: gdb.cp/classes.exp: print (ClassWithEnum::PrivEnum) 42
+PASS: gdb.cp/classes.exp: print ('ClassWithEnum::PrivEnum') 42
+PASS: gdb.cp/classes.exp: print Bar::z
+PASS: gdb.cp/classes.exp: print &Foo::x
+PASS: gdb.cp/classes.exp: print (int)&Foo::x
+PASS: gdb.cp/classes.exp: print (int)&Bar::y == 2*sizeof(int)
+PASS: gdb.cp/classes.exp: ptype Bar::z
+PASS: gdb.cp/classes.exp: ptype &Bar::z
+PASS: gdb.cp/classes.exp: print (int)pmi == sizeof(int)
+PASS: gdb.cp/classes.exp: print Foo::st
+PASS: gdb.cp/classes.exp: print bar.st
+PASS: gdb.cp/classes.exp: print &foo.st
+PASS: gdb.cp/classes.exp: print &Bar::st
+PASS: gdb.cp/classes.exp: print *$
+PASS: gdb.cp/classes.exp: set print static-members off
+PASS: gdb.cp/classes.exp: print csi without static members
+PASS: gdb.cp/classes.exp: print cnsi without static members
+PASS: gdb.cp/classes.exp: set print static-members on
+PASS: gdb.cp/classes.exp: print csi with static members
+PASS: gdb.cp/classes.exp: print cnsi with static members
+PASS: gdb.cp/classes.exp: finish from marker_reg1
+PASS: gdb.cp/classes.exp: calling method for small class
+FAIL: gdb.cp/classes.exp: print ctor of typedef class
+FAIL: gdb.cp/classes.exp: print dtor of typedef class
+PASS: gdb.cp/classes.exp: list ByAnyOtherName::times
+Running ./gdb.cp/cmpd-minsyms.exp ...
+PASS: gdb.cp/cmpd-minsyms.exp: setting breakpoint at 'GDB<int>::a() const'
+PASS: gdb.cp/cmpd-minsyms.exp: setting breakpoint at 'GDB<int>::b() volatile'
+PASS: gdb.cp/cmpd-minsyms.exp: setting breakpoint at 'GDB<int>::c() const volatile'
+PASS: gdb.cp/cmpd-minsyms.exp: set language c++
+PASS: gdb.cp/cmpd-minsyms.exp: setting breakpoint at GDB<int>::operator ==
+PASS: gdb.cp/cmpd-minsyms.exp: setting breakpoint at GDB<int>::operator==(GDB<int> const&)
+PASS: gdb.cp/cmpd-minsyms.exp: setting breakpoint at GDB<char>::harder(char)
+PASS: gdb.cp/cmpd-minsyms.exp: setting breakpoint at GDB<int>::harder(int)
+PASS: gdb.cp/cmpd-minsyms.exp: setting breakpoint at "int GDB<char>::even_harder<int>(char)"
+PASS: gdb.cp/cmpd-minsyms.exp: setting breakpoint at GDB<int>::simple()
+Running ./gdb.cp/converts.exp ...
+PASS: gdb.cp/converts.exp: continue to breakpoint: end of main
+PASS: gdb.cp/converts.exp: typedef to another typedef
+PASS: gdb.cp/converts.exp: typedef to typedef of a typedef
+PASS: gdb.cp/converts.exp: Pointer-to-pointer-to-pointer derived to Pointer-to-pointer-to-pointer base.
+PASS: gdb.cp/converts.exp: pointer to pointer
+PASS: gdb.cp/converts.exp: pointer to array
+PASS: gdb.cp/converts.exp: pointer to pointer of wrong type
+PASS: gdb.cp/converts.exp: pointer to pointer of wrong type
+PASS: gdb.cp/converts.exp: pointer to ancestor pointer
+PASS: gdb.cp/converts.exp: pointer to void pointer
+PASS: gdb.cp/converts.exp: pointer to void pointer pointer
+PASS: gdb.cp/converts.exp: pointer to boolean
+PASS: gdb.cp/converts.exp: pointer to long int
+PASS: gdb.cp/converts.exp: pointer pointer to void pointer
+PASS: gdb.cp/converts.exp: pointer pointer to pointer pointer
+PASS: gdb.cp/converts.exp: pointer pointer to array of arrays
+PASS: gdb.cp/converts.exp: pointer pointer to array of pointers
+PASS: gdb.cp/converts.exp: pointer pointer to array of wrong pointers
+PASS: gdb.cp/converts.exp: check all parameters for badness
+PASS: gdb.cp/converts.exp: null pointer conversion
+PASS: gdb.cp/converts.exp: p foo3_1 (0, 1)
+PASS: gdb.cp/converts.exp: p foo3_1 (0, (const char**) 1)
+PASS: gdb.cp/converts.exp: p foo3_2 (0, 0)
+PASS: gdb.cp/converts.exp: p foo3_2 (0, (char const**) 0)
+PASS: gdb.cp/converts.exp: p foo1_7(0)
+PASS: gdb.cp/converts.exp: p foo1_7(integer)
+PASS: gdb.cp/converts.exp: p foo1_7(long_int)
+PASS: gdb.cp/converts.exp: p foo1_7(*a)
+PASS: gdb.cp/converts.exp: p foo1_7(MY_A)
+PASS: gdb.cp/converts.exp: p foo1_7(&foo1_7)
+PASS: gdb.cp/converts.exp: p foo1_7(&A::member_)
+PASS: gdb.cp/converts.exp: p foo1_7(a)
+PASS: gdb.cp/converts.exp: p foo1_7(fp)
+PASS: gdb.cp/converts.exp: p foo1_7(dp)
+PASS: gdb.cp/converts.exp: p foo1_7(-1.23)
+PASS: gdb.cp/converts.exp: p foo1_7(ta)
+PASS: gdb.cp/converts.exp: show check type
+PASS: gdb.cp/converts.exp: p foo1_type_check (123)
+PASS: gdb.cp/converts.exp: p foo2_type_check (0, 1)
+PASS: gdb.cp/converts.exp: p foo2_type_check (1, 0)
+PASS: gdb.cp/converts.exp: p foo2_type_check (1, 1)
+PASS: gdb.cp/converts.exp: p foo3_type_check (0, 0, 1)
+PASS: gdb.cp/converts.exp: p foo3_type_check (0, 1, 0)
+PASS: gdb.cp/converts.exp: p foo3_type_check (1, 0, 0)
+PASS: gdb.cp/converts.exp: p foo3_type_check (0, 1, 1)
+PASS: gdb.cp/converts.exp: p foo3_type_check (1, 1, 0)
+PASS: gdb.cp/converts.exp: p foo3_type_check (1, 1, 1)
+PASS: gdb.cp/converts.exp: set check type off
+PASS: gdb.cp/converts.exp: show check type
+PASS: gdb.cp/converts.exp: p foo1_type_check (123)
+PASS: gdb.cp/converts.exp: p foo2_type_check (0, 1)
+PASS: gdb.cp/converts.exp: p foo2_type_check (1, 0)
+PASS: gdb.cp/converts.exp: p foo2_type_check (1, 1)
+PASS: gdb.cp/converts.exp: p foo3_type_check (0, 0, 1)
+PASS: gdb.cp/converts.exp: p foo3_type_check (0, 1, 0)
+PASS: gdb.cp/converts.exp: p foo3_type_check (1, 0, 0)
+PASS: gdb.cp/converts.exp: p foo3_type_check (0, 1, 1)
+PASS: gdb.cp/converts.exp: p foo3_type_check (1, 1, 0)
+PASS: gdb.cp/converts.exp: p foo3_type_check (1, 1, 1)
+PASS: gdb.cp/converts.exp: p foo3_2 (1,1)
+Running ./gdb.cp/cpcompletion.exp ...
+PASS: gdb.cp/cpcompletion.exp: complete class methods
+PASS: gdb.cp/cpcompletion.exp: complete class methods beginning with F
+PASS: gdb.cp/cpcompletion.exp: complete p foo1.g
+PASS: gdb.cp/cpcompletion.exp: complete p foo1.base
+PASS: gdb.cp/cpcompletion.exp: complete p foo1.Fo
+PASS: gdb.cp/cpcompletion.exp: complete p a.g
+Running ./gdb.cp/cpexprs.exp ...
+PASS: gdb.cp/cpexprs.exp: set listsize 1
+PASS: gdb.cp/cpexprs.exp: print base1::a_function
+FAIL: gdb.cp/cpexprs.exp: print base1::base1(int)
+FAIL: gdb.cp/cpexprs.exp: print base1::base1(void)
+PASS: gdb.cp/cpexprs.exp: print base2::a_function
+FAIL: gdb.cp/cpexprs.exp: print base2::base2
+FAIL: gdb.cp/cpexprs.exp: print base::base(int)
+FAIL: gdb.cp/cpexprs.exp: print base::base(void)
+PASS: gdb.cp/cpexprs.exp: print base::operator char*
+PASS: gdb.cp/cpexprs.exp: print base::operator delete
+PASS: gdb.cp/cpexprs.exp: print base::operator delete[]
+PASS: gdb.cp/cpexprs.exp: print base::operator fluff*
+PASS: gdb.cp/cpexprs.exp: print base::operator fluff**
+PASS: gdb.cp/cpexprs.exp: print base::operator int
+PASS: gdb.cp/cpexprs.exp: print base::operator new
+PASS: gdb.cp/cpexprs.exp: print base::operator new[]
+PASS: gdb.cp/cpexprs.exp: print base::operator!
+PASS: gdb.cp/cpexprs.exp: print base::operator!=
+PASS: gdb.cp/cpexprs.exp: print base::operator%
+PASS: gdb.cp/cpexprs.exp: print base::operator%=
+PASS: gdb.cp/cpexprs.exp: print base::operator&
+PASS: gdb.cp/cpexprs.exp: print base::operator&&
+PASS: gdb.cp/cpexprs.exp: print base::operator&=
+PASS: gdb.cp/cpexprs.exp: print base::operator()
+PASS: gdb.cp/cpexprs.exp: print base::operator*
+PASS: gdb.cp/cpexprs.exp: print base::operator*=
+PASS: gdb.cp/cpexprs.exp: print base::operator+
+PASS: gdb.cp/cpexprs.exp: print base::operator++
+PASS: gdb.cp/cpexprs.exp: print base::operator+=
+PASS: gdb.cp/cpexprs.exp: print base::operator-
+PASS: gdb.cp/cpexprs.exp: print base::operator--
+PASS: gdb.cp/cpexprs.exp: print base::operator-=
+PASS: gdb.cp/cpexprs.exp: print base::operator/
+PASS: gdb.cp/cpexprs.exp: print base::operator/=
+PASS: gdb.cp/cpexprs.exp: print base::operator<
+PASS: gdb.cp/cpexprs.exp: print base::operator<<
+PASS: gdb.cp/cpexprs.exp: print base::operator<<=
+PASS: gdb.cp/cpexprs.exp: print base::operator<=
+PASS: gdb.cp/cpexprs.exp: print base::operator=
+PASS: gdb.cp/cpexprs.exp: print base::operator==
+PASS: gdb.cp/cpexprs.exp: print base::operator>
+PASS: gdb.cp/cpexprs.exp: print base::operator>=
+PASS: gdb.cp/cpexprs.exp: print base::operator>>
+PASS: gdb.cp/cpexprs.exp: print base::operator>>=
+PASS: gdb.cp/cpexprs.exp: print base::operator[]
+PASS: gdb.cp/cpexprs.exp: print base::operator^
+PASS: gdb.cp/cpexprs.exp: print base::operator^=
+PASS: gdb.cp/cpexprs.exp: print base::operator|
+PASS: gdb.cp/cpexprs.exp: print base::operator|=
+PASS: gdb.cp/cpexprs.exp: print base::operator||
+PASS: gdb.cp/cpexprs.exp: print base::operator~
+PASS: gdb.cp/cpexprs.exp: print base::overload(base&) const
+PASS: gdb.cp/cpexprs.exp: print base::overload(char*) const
+PASS: gdb.cp/cpexprs.exp: print base::overload(int) const
+PASS: gdb.cp/cpexprs.exp: print base::overload(long) const
+PASS: gdb.cp/cpexprs.exp: print base::overload(short) const
+PASS: gdb.cp/cpexprs.exp: print base::overload(void) const
+FAIL: gdb.cp/cpexprs.exp: print base::~base
+PASS: gdb.cp/cpexprs.exp: print derived::a_function
+FAIL: gdb.cp/cpexprs.exp: print derived::derived
+PASS: gdb.cp/cpexprs.exp: print flubber<int, int, int, char, char>
+PASS: gdb.cp/cpexprs.exp: print flubber<int, int, int, char, int>
+PASS: gdb.cp/cpexprs.exp: print flubber<int, int, int, char, long>
+PASS: gdb.cp/cpexprs.exp: print flubber<int, int, int, char, short>
+PASS: gdb.cp/cpexprs.exp: print flubber<int, int, int, int, char>
+PASS: gdb.cp/cpexprs.exp: print flubber<int, int, int, int, int>
+PASS: gdb.cp/cpexprs.exp: print flubber<int, int, int, int, long>
+PASS: gdb.cp/cpexprs.exp: print flubber<int, int, int, int, short>
+PASS: gdb.cp/cpexprs.exp: print flubber<int, int, int, long, char>
+PASS: gdb.cp/cpexprs.exp: print flubber<int, int, int, long, int>
+PASS: gdb.cp/cpexprs.exp: print flubber<int, int, int, long, long>
+PASS: gdb.cp/cpexprs.exp: print flubber<int, int, int, long, short>
+PASS: gdb.cp/cpexprs.exp: print flubber<int, int, int, short, char>
+PASS: gdb.cp/cpexprs.exp: print flubber<int, int, int, short, int>
+PASS: gdb.cp/cpexprs.exp: print flubber<int, int, int, short, long>
+PASS: gdb.cp/cpexprs.exp: print flubber<int, int, int, short, short>
+PASS: gdb.cp/cpexprs.exp: print flubber<int, int, short, int, char>
+PASS: gdb.cp/cpexprs.exp: print flubber<int, int, short, int, int>
+PASS: gdb.cp/cpexprs.exp: print flubber<int, int, short, int, long>
+PASS: gdb.cp/cpexprs.exp: print flubber<int, int, short, int, short>
+PASS: gdb.cp/cpexprs.exp: print flubber<int, int, short, short, int>
+PASS: gdb.cp/cpexprs.exp: print flubber<long, short, long, short, long>
+PASS: gdb.cp/cpexprs.exp: print flubber<short, int, short, int, short>
+PASS: gdb.cp/cpexprs.exp: print policy1::function
+FAIL: gdb.cp/cpexprs.exp: print policy1::policy
+PASS: gdb.cp/cpexprs.exp: print policy2::function
+FAIL: gdb.cp/cpexprs.exp: print policy2::policy
+PASS: gdb.cp/cpexprs.exp: print policy3::function
+FAIL: gdb.cp/cpexprs.exp: print policy3::policy
+PASS: gdb.cp/cpexprs.exp: print policy4::function
+FAIL: gdb.cp/cpexprs.exp: print policy4::policy
+PASS: gdb.cp/cpexprs.exp: print policyd1::function
+FAIL: gdb.cp/cpexprs.exp: print policyd1::policyd
+FAIL: gdb.cp/cpexprs.exp: print policyd1::~policyd
+PASS: gdb.cp/cpexprs.exp: print policyd2::function
+FAIL: gdb.cp/cpexprs.exp: print policyd2::policyd
+FAIL: gdb.cp/cpexprs.exp: print policyd2::~policyd
+PASS: gdb.cp/cpexprs.exp: print policyd3::function
+FAIL: gdb.cp/cpexprs.exp: print policyd3::policyd
+FAIL: gdb.cp/cpexprs.exp: print policyd3::~policyd
+PASS: gdb.cp/cpexprs.exp: print policyd4::function
+FAIL: gdb.cp/cpexprs.exp: print policyd4::policyd
+FAIL: gdb.cp/cpexprs.exp: print policyd4::~policyd
+PASS: gdb.cp/cpexprs.exp: print policyd5::function
+FAIL: gdb.cp/cpexprs.exp: print policyd5::policyd
+FAIL: gdb.cp/cpexprs.exp: print policyd5::~policyd
+PASS: gdb.cp/cpexprs.exp: print policyd<base, operation_1<base> >::function
+FAIL: gdb.cp/cpexprs.exp: print policyd<base, operation_1<base> >::policyd
+FAIL: gdb.cp/cpexprs.exp: print policyd<base, operation_1<base> >::~policyd
+PASS: gdb.cp/cpexprs.exp: print policyd<char, operation_1<char> >::function
+FAIL: gdb.cp/cpexprs.exp: print policyd<char, operation_1<char> >::policyd
+FAIL: gdb.cp/cpexprs.exp: print policyd<char, operation_1<char> >::~policyd
+PASS: gdb.cp/cpexprs.exp: print policyd<int, operation_1<int> >::function
+FAIL: gdb.cp/cpexprs.exp: print policyd<int, operation_1<int> >::policyd
+FAIL: gdb.cp/cpexprs.exp: print policyd<int, operation_1<int> >::~policyd
+FAIL: gdb.cp/cpexprs.exp: print policyd<long, operation_1<long> >::policyd
+FAIL: gdb.cp/cpexprs.exp: print policyd<long, operation_1<long> >::~policyd
+PASS: gdb.cp/cpexprs.exp: print policyd<tclass<int>, operation_1<tclass<int> > >::function
+FAIL: gdb.cp/cpexprs.exp: print policyd<tclass<int>, operation_1<tclass<int> > >::policyd
+FAIL: gdb.cp/cpexprs.exp: print policyd<tclass<int>, operation_1<tclass<int> > >::~policyd
+PASS: gdb.cp/cpexprs.exp: print tclass<base>::do_something
+PASS: gdb.cp/cpexprs.exp: print tclass<char>::do_something
+PASS: gdb.cp/cpexprs.exp: print tclass<int>::do_something
+PASS: gdb.cp/cpexprs.exp: print tclass<long>::do_something
+PASS: gdb.cp/cpexprs.exp: print tclass<short>::do_something
+PASS: gdb.cp/cpexprs.exp: print test_function
+PASS: gdb.cp/cpexprs.exp: list base1::a_function
+PASS: gdb.cp/cpexprs.exp: list base1::base1(int)
+PASS: gdb.cp/cpexprs.exp: list base1::base1(void)
+PASS: gdb.cp/cpexprs.exp: list base2::a_function
+PASS: gdb.cp/cpexprs.exp: list base2::base2
+PASS: gdb.cp/cpexprs.exp: list base::base(int)
+PASS: gdb.cp/cpexprs.exp: list base::base(void)
+PASS: gdb.cp/cpexprs.exp: list base::operator char*
+PASS: gdb.cp/cpexprs.exp: list base::operator delete
+PASS: gdb.cp/cpexprs.exp: list base::operator delete[]
+PASS: gdb.cp/cpexprs.exp: list base::operator fluff*
+PASS: gdb.cp/cpexprs.exp: list base::operator fluff**
+PASS: gdb.cp/cpexprs.exp: list base::operator int
+PASS: gdb.cp/cpexprs.exp: list base::operator new
+PASS: gdb.cp/cpexprs.exp: list base::operator new[]
+PASS: gdb.cp/cpexprs.exp: list base::operator!
+PASS: gdb.cp/cpexprs.exp: list base::operator!=
+PASS: gdb.cp/cpexprs.exp: list base::operator%
+PASS: gdb.cp/cpexprs.exp: list base::operator%=
+PASS: gdb.cp/cpexprs.exp: list base::operator&
+PASS: gdb.cp/cpexprs.exp: list base::operator&&
+PASS: gdb.cp/cpexprs.exp: list base::operator&=
+PASS: gdb.cp/cpexprs.exp: list base::operator()
+PASS: gdb.cp/cpexprs.exp: list base::operator*
+PASS: gdb.cp/cpexprs.exp: list base::operator*=
+PASS: gdb.cp/cpexprs.exp: list base::operator+
+PASS: gdb.cp/cpexprs.exp: list base::operator++
+PASS: gdb.cp/cpexprs.exp: list base::operator+=
+PASS: gdb.cp/cpexprs.exp: list base::operator-
+PASS: gdb.cp/cpexprs.exp: list base::operator--
+PASS: gdb.cp/cpexprs.exp: list base::operator-=
+PASS: gdb.cp/cpexprs.exp: list base::operator/
+PASS: gdb.cp/cpexprs.exp: list base::operator/=
+PASS: gdb.cp/cpexprs.exp: list base::operator<
+PASS: gdb.cp/cpexprs.exp: list base::operator<<
+PASS: gdb.cp/cpexprs.exp: list base::operator<<=
+PASS: gdb.cp/cpexprs.exp: list base::operator<=
+PASS: gdb.cp/cpexprs.exp: list base::operator=
+PASS: gdb.cp/cpexprs.exp: list base::operator==
+PASS: gdb.cp/cpexprs.exp: list base::operator>
+PASS: gdb.cp/cpexprs.exp: list base::operator>=
+PASS: gdb.cp/cpexprs.exp: list base::operator>>
+PASS: gdb.cp/cpexprs.exp: list base::operator>>=
+PASS: gdb.cp/cpexprs.exp: list base::operator[]
+PASS: gdb.cp/cpexprs.exp: list base::operator^
+PASS: gdb.cp/cpexprs.exp: list base::operator^=
+PASS: gdb.cp/cpexprs.exp: list base::operator|
+PASS: gdb.cp/cpexprs.exp: list base::operator|=
+PASS: gdb.cp/cpexprs.exp: list base::operator||
+PASS: gdb.cp/cpexprs.exp: list base::operator~
+PASS: gdb.cp/cpexprs.exp: list base::overload(base&) const
+PASS: gdb.cp/cpexprs.exp: list base::overload(char*) const
+PASS: gdb.cp/cpexprs.exp: list base::overload(int) const
+PASS: gdb.cp/cpexprs.exp: list base::overload(long) const
+PASS: gdb.cp/cpexprs.exp: list base::overload(short) const
+PASS: gdb.cp/cpexprs.exp: list base::overload(void) const
+PASS: gdb.cp/cpexprs.exp: list base::~base
+PASS: gdb.cp/cpexprs.exp: list derived::a_function
+PASS: gdb.cp/cpexprs.exp: list derived::derived
+PASS: gdb.cp/cpexprs.exp: list flubber<int, int, int, char, char>
+PASS: gdb.cp/cpexprs.exp: list flubber<int, int, int, char, int>
+PASS: gdb.cp/cpexprs.exp: list flubber<int, int, int, char, long>
+PASS: gdb.cp/cpexprs.exp: list flubber<int, int, int, char, short>
+PASS: gdb.cp/cpexprs.exp: list flubber<int, int, int, int, char>
+PASS: gdb.cp/cpexprs.exp: list flubber<int, int, int, int, int>
+PASS: gdb.cp/cpexprs.exp: list flubber<int, int, int, int, long>
+PASS: gdb.cp/cpexprs.exp: list flubber<int, int, int, int, short>
+PASS: gdb.cp/cpexprs.exp: list flubber<int, int, int, long, char>
+PASS: gdb.cp/cpexprs.exp: list flubber<int, int, int, long, int>
+PASS: gdb.cp/cpexprs.exp: list flubber<int, int, int, long, long>
+PASS: gdb.cp/cpexprs.exp: list flubber<int, int, int, long, short>
+PASS: gdb.cp/cpexprs.exp: list flubber<int, int, int, short, char>
+PASS: gdb.cp/cpexprs.exp: list flubber<int, int, int, short, int>
+PASS: gdb.cp/cpexprs.exp: list flubber<int, int, int, short, long>
+PASS: gdb.cp/cpexprs.exp: list flubber<int, int, int, short, short>
+PASS: gdb.cp/cpexprs.exp: list flubber<int, int, short, int, char>
+PASS: gdb.cp/cpexprs.exp: list flubber<int, int, short, int, int>
+PASS: gdb.cp/cpexprs.exp: list flubber<int, int, short, int, long>
+PASS: gdb.cp/cpexprs.exp: list flubber<int, int, short, int, short>
+PASS: gdb.cp/cpexprs.exp: list flubber<int, int, short, short, int>
+PASS: gdb.cp/cpexprs.exp: list flubber<long, short, long, short, long>
+PASS: gdb.cp/cpexprs.exp: list flubber<short, int, short, int, short>
+PASS: gdb.cp/cpexprs.exp: list policy1::function
+PASS: gdb.cp/cpexprs.exp: list policy1::policy
+PASS: gdb.cp/cpexprs.exp: list policy2::function
+PASS: gdb.cp/cpexprs.exp: list policy2::policy
+PASS: gdb.cp/cpexprs.exp: list policy3::function
+PASS: gdb.cp/cpexprs.exp: list policy3::policy
+PASS: gdb.cp/cpexprs.exp: list policy4::function
+PASS: gdb.cp/cpexprs.exp: list policy4::policy
+PASS: gdb.cp/cpexprs.exp: list policyd1::function
+PASS: gdb.cp/cpexprs.exp: list policyd1::policyd
+FAIL: gdb.cp/cpexprs.exp: list policyd1::~policyd
+PASS: gdb.cp/cpexprs.exp: list policyd2::function
+PASS: gdb.cp/cpexprs.exp: list policyd2::policyd
+FAIL: gdb.cp/cpexprs.exp: list policyd2::~policyd
+PASS: gdb.cp/cpexprs.exp: list policyd3::function
+PASS: gdb.cp/cpexprs.exp: list policyd3::policyd
+FAIL: gdb.cp/cpexprs.exp: list policyd3::~policyd
+PASS: gdb.cp/cpexprs.exp: list policyd4::function
+PASS: gdb.cp/cpexprs.exp: list policyd4::policyd
+FAIL: gdb.cp/cpexprs.exp: list policyd4::~policyd
+PASS: gdb.cp/cpexprs.exp: list policyd5::function
+PASS: gdb.cp/cpexprs.exp: list policyd5::policyd
+FAIL: gdb.cp/cpexprs.exp: list policyd5::~policyd
+PASS: gdb.cp/cpexprs.exp: list policyd<base, operation_1<base> >::function
+PASS: gdb.cp/cpexprs.exp: list policyd<base, operation_1<base> >::policyd
+PASS: gdb.cp/cpexprs.exp: list policyd<base, operation_1<base> >::~policyd
+PASS: gdb.cp/cpexprs.exp: list policyd<char, operation_1<char> >::function
+PASS: gdb.cp/cpexprs.exp: list policyd<char, operation_1<char> >::policyd
+PASS: gdb.cp/cpexprs.exp: list policyd<char, operation_1<char> >::~policyd
+PASS: gdb.cp/cpexprs.exp: list policyd<int, operation_1<int> >::function
+PASS: gdb.cp/cpexprs.exp: list policyd<int, operation_1<int> >::policyd
+PASS: gdb.cp/cpexprs.exp: list policyd<int, operation_1<int> >::~policyd
+PASS: gdb.cp/cpexprs.exp: list policyd<long, operation_1<long> >::policyd
+PASS: gdb.cp/cpexprs.exp: list policyd<long, operation_1<long> >::~policyd
+PASS: gdb.cp/cpexprs.exp: list policyd<tclass<int>, operation_1<tclass<int> > >::function
+PASS: gdb.cp/cpexprs.exp: list policyd<tclass<int>, operation_1<tclass<int> > >::policyd
+PASS: gdb.cp/cpexprs.exp: list policyd<tclass<int>, operation_1<tclass<int> > >::~policyd
+PASS: gdb.cp/cpexprs.exp: list tclass<base>::do_something
+PASS: gdb.cp/cpexprs.exp: list tclass<char>::do_something
+PASS: gdb.cp/cpexprs.exp: list tclass<int>::do_something
+PASS: gdb.cp/cpexprs.exp: list tclass<long>::do_something
+PASS: gdb.cp/cpexprs.exp: list tclass<short>::do_something
+PASS: gdb.cp/cpexprs.exp: list test_function
+PASS: gdb.cp/cpexprs.exp: continue to base1::a_function
+PASS: gdb.cp/cpexprs.exp: continue to base1::base1(int)
+PASS: gdb.cp/cpexprs.exp: continue to base1::base1(void)
+PASS: gdb.cp/cpexprs.exp: continue to base2::a_function
+PASS: gdb.cp/cpexprs.exp: continue to base2::base2
+PASS: gdb.cp/cpexprs.exp: continue to base::base(int)
+PASS: gdb.cp/cpexprs.exp: continue to base::base(void)
+PASS: gdb.cp/cpexprs.exp: continue to base::operator char*
+PASS: gdb.cp/cpexprs.exp: continue to base::operator delete
+PASS: gdb.cp/cpexprs.exp: continue to base::operator delete[]
+PASS: gdb.cp/cpexprs.exp: continue to base::operator fluff*
+PASS: gdb.cp/cpexprs.exp: continue to base::operator fluff**
+PASS: gdb.cp/cpexprs.exp: continue to base::operator int
+PASS: gdb.cp/cpexprs.exp: continue to base::operator new
+PASS: gdb.cp/cpexprs.exp: continue to base::operator new[]
+PASS: gdb.cp/cpexprs.exp: continue to base::operator!
+PASS: gdb.cp/cpexprs.exp: continue to base::operator!=
+PASS: gdb.cp/cpexprs.exp: continue to base::operator%
+PASS: gdb.cp/cpexprs.exp: continue to base::operator%=
+PASS: gdb.cp/cpexprs.exp: continue to base::operator&
+PASS: gdb.cp/cpexprs.exp: continue to base::operator&&
+PASS: gdb.cp/cpexprs.exp: continue to base::operator&=
+PASS: gdb.cp/cpexprs.exp: continue to base::operator()
+PASS: gdb.cp/cpexprs.exp: continue to base::operator*
+PASS: gdb.cp/cpexprs.exp: continue to base::operator*=
+PASS: gdb.cp/cpexprs.exp: continue to base::operator+
+PASS: gdb.cp/cpexprs.exp: continue to base::operator++
+PASS: gdb.cp/cpexprs.exp: continue to base::operator+=
+PASS: gdb.cp/cpexprs.exp: continue to base::operator-
+PASS: gdb.cp/cpexprs.exp: continue to base::operator--
+PASS: gdb.cp/cpexprs.exp: continue to base::operator-=
+PASS: gdb.cp/cpexprs.exp: continue to base::operator/
+PASS: gdb.cp/cpexprs.exp: continue to base::operator/=
+PASS: gdb.cp/cpexprs.exp: continue to base::operator<
+PASS: gdb.cp/cpexprs.exp: continue to base::operator<<
+PASS: gdb.cp/cpexprs.exp: continue to base::operator<<=
+PASS: gdb.cp/cpexprs.exp: continue to base::operator<=
+PASS: gdb.cp/cpexprs.exp: continue to base::operator=
+PASS: gdb.cp/cpexprs.exp: continue to base::operator==
+PASS: gdb.cp/cpexprs.exp: continue to base::operator>
+PASS: gdb.cp/cpexprs.exp: continue to base::operator>=
+PASS: gdb.cp/cpexprs.exp: continue to base::operator>>
+PASS: gdb.cp/cpexprs.exp: continue to base::operator>>=
+PASS: gdb.cp/cpexprs.exp: continue to base::operator[]
+PASS: gdb.cp/cpexprs.exp: continue to base::operator^
+PASS: gdb.cp/cpexprs.exp: continue to base::operator^=
+PASS: gdb.cp/cpexprs.exp: continue to base::operator|
+PASS: gdb.cp/cpexprs.exp: continue to base::operator|=
+PASS: gdb.cp/cpexprs.exp: continue to base::operator||
+PASS: gdb.cp/cpexprs.exp: continue to base::operator~
+PASS: gdb.cp/cpexprs.exp: continue to base::overload(base&) const
+PASS: gdb.cp/cpexprs.exp: continue to base::overload(char*) const
+PASS: gdb.cp/cpexprs.exp: continue to base::overload(int) const
+PASS: gdb.cp/cpexprs.exp: continue to base::overload(long) const
+PASS: gdb.cp/cpexprs.exp: continue to base::overload(short) const
+PASS: gdb.cp/cpexprs.exp: continue to base::overload(void) const
+PASS: gdb.cp/cpexprs.exp: continue to base::~base
+PASS: gdb.cp/cpexprs.exp: continue to derived::a_function
+PASS: gdb.cp/cpexprs.exp: continue to derived::derived
+PASS: gdb.cp/cpexprs.exp: continue to flubber<int, int, int, char, char>
+PASS: gdb.cp/cpexprs.exp: continue to flubber<int, int, int, char, int>
+PASS: gdb.cp/cpexprs.exp: continue to flubber<int, int, int, char, long>
+PASS: gdb.cp/cpexprs.exp: continue to flubber<int, int, int, char, short>
+PASS: gdb.cp/cpexprs.exp: continue to flubber<int, int, int, int, char>
+PASS: gdb.cp/cpexprs.exp: continue to flubber<int, int, int, int, int>
+PASS: gdb.cp/cpexprs.exp: continue to flubber<int, int, int, int, long>
+PASS: gdb.cp/cpexprs.exp: continue to flubber<int, int, int, int, short>
+PASS: gdb.cp/cpexprs.exp: continue to flubber<int, int, int, long, char>
+PASS: gdb.cp/cpexprs.exp: continue to flubber<int, int, int, long, int>
+PASS: gdb.cp/cpexprs.exp: continue to flubber<int, int, int, long, long>
+PASS: gdb.cp/cpexprs.exp: continue to flubber<int, int, int, long, short>
+PASS: gdb.cp/cpexprs.exp: continue to flubber<int, int, int, short, char>
+PASS: gdb.cp/cpexprs.exp: continue to flubber<int, int, int, short, int>
+PASS: gdb.cp/cpexprs.exp: continue to flubber<int, int, int, short, long>
+PASS: gdb.cp/cpexprs.exp: continue to flubber<int, int, int, short, short>
+PASS: gdb.cp/cpexprs.exp: continue to flubber<int, int, short, int, char>
+PASS: gdb.cp/cpexprs.exp: continue to flubber<int, int, short, int, int>
+PASS: gdb.cp/cpexprs.exp: continue to flubber<int, int, short, int, long>
+PASS: gdb.cp/cpexprs.exp: continue to flubber<int, int, short, int, short>
+PASS: gdb.cp/cpexprs.exp: continue to flubber<int, int, short, short, int>
+PASS: gdb.cp/cpexprs.exp: continue to flubber<long, short, long, short, long>
+PASS: gdb.cp/cpexprs.exp: continue to flubber<short, int, short, int, short>
+PASS: gdb.cp/cpexprs.exp: continue to policy1::function
+PASS: gdb.cp/cpexprs.exp: continue to policy1::policy
+PASS: gdb.cp/cpexprs.exp: continue to policy2::function
+PASS: gdb.cp/cpexprs.exp: continue to policy2::policy
+PASS: gdb.cp/cpexprs.exp: continue to policy3::function
+PASS: gdb.cp/cpexprs.exp: continue to policy3::policy
+PASS: gdb.cp/cpexprs.exp: continue to policy4::function
+PASS: gdb.cp/cpexprs.exp: continue to policy4::policy
+PASS: gdb.cp/cpexprs.exp: continue to policyd1::function
+PASS: gdb.cp/cpexprs.exp: continue to policyd1::policyd
+FAIL: gdb.cp/cpexprs.exp: setting breakpoint at policyd1::~policyd
+FAIL: gdb.cp/cpexprs.exp: continue to policyd1::~policyd
+PASS: gdb.cp/cpexprs.exp: continue to policyd2::function
+PASS: gdb.cp/cpexprs.exp: continue to policyd2::policyd
+FAIL: gdb.cp/cpexprs.exp: setting breakpoint at policyd2::~policyd
+FAIL: gdb.cp/cpexprs.exp: continue to policyd2::~policyd
+PASS: gdb.cp/cpexprs.exp: continue to policyd3::function
+PASS: gdb.cp/cpexprs.exp: continue to policyd3::policyd
+FAIL: gdb.cp/cpexprs.exp: setting breakpoint at policyd3::~policyd
+FAIL: gdb.cp/cpexprs.exp: continue to policyd3::~policyd
+PASS: gdb.cp/cpexprs.exp: continue to policyd4::function
+PASS: gdb.cp/cpexprs.exp: continue to policyd4::policyd
+FAIL: gdb.cp/cpexprs.exp: setting breakpoint at policyd4::~policyd
+FAIL: gdb.cp/cpexprs.exp: continue to policyd4::~policyd
+PASS: gdb.cp/cpexprs.exp: continue to policyd5::function
+PASS: gdb.cp/cpexprs.exp: continue to policyd5::policyd
+FAIL: gdb.cp/cpexprs.exp: setting breakpoint at policyd5::~policyd
+FAIL: gdb.cp/cpexprs.exp: continue to policyd5::~policyd
+PASS: gdb.cp/cpexprs.exp: continue to policyd<base, operation_1<base> >::function
+PASS: gdb.cp/cpexprs.exp: continue to policyd<base, operation_1<base> >::policyd
+PASS: gdb.cp/cpexprs.exp: continue to policyd<base, operation_1<base> >::~policyd
+PASS: gdb.cp/cpexprs.exp: continue to policyd<char, operation_1<char> >::function
+PASS: gdb.cp/cpexprs.exp: continue to policyd<char, operation_1<char> >::policyd
+PASS: gdb.cp/cpexprs.exp: continue to policyd<char, operation_1<char> >::~policyd
+PASS: gdb.cp/cpexprs.exp: continue to policyd<int, operation_1<int> >::function
+PASS: gdb.cp/cpexprs.exp: continue to policyd<int, operation_1<int> >::policyd
+PASS: gdb.cp/cpexprs.exp: continue to policyd<int, operation_1<int> >::~policyd
+PASS: gdb.cp/cpexprs.exp: continue to policyd<long, operation_1<long> >::policyd
+PASS: gdb.cp/cpexprs.exp: continue to policyd<long, operation_1<long> >::~policyd
+PASS: gdb.cp/cpexprs.exp: continue to policyd<tclass<int>, operation_1<tclass<int> > >::function
+PASS: gdb.cp/cpexprs.exp: continue to policyd<tclass<int>, operation_1<tclass<int> > >::policyd
+PASS: gdb.cp/cpexprs.exp: continue to policyd<tclass<int>, operation_1<tclass<int> > >::~policyd
+PASS: gdb.cp/cpexprs.exp: continue to tclass<base>::do_something
+PASS: gdb.cp/cpexprs.exp: continue to tclass<char>::do_something
+PASS: gdb.cp/cpexprs.exp: continue to tclass<int>::do_something
+PASS: gdb.cp/cpexprs.exp: continue to tclass<long>::do_something
+PASS: gdb.cp/cpexprs.exp: continue to tclass<short>::do_something
+PASS: gdb.cp/cpexprs.exp: p 'CV::m(int)'
+PASS: gdb.cp/cpexprs.exp: p CV::m(int)
+PASS: gdb.cp/cpexprs.exp: p 'CV::m(int) const'
+KFAIL: gdb.cp/cpexprs.exp: p CV::m(int) const (PRMS: c++/14186)
+PASS: gdb.cp/cpexprs.exp: p 'CV::m(int) volatile'
+KFAIL: gdb.cp/cpexprs.exp: p CV::m(int) volatile (PRMS: c++/14186)
+PASS: gdb.cp/cpexprs.exp: p 'CV::m(int) const volatile'
+KFAIL: gdb.cp/cpexprs.exp: p CV::m(int) const volatile (PRMS: c++/14186)
+PASS: gdb.cp/cpexprs.exp: p CV_f(int)
+PASS: gdb.cp/cpexprs.exp: p CV_f(CV::t)
+PASS: gdb.cp/cpexprs.exp: p CV_f(CV::i)
+Running ./gdb.cp/cplabel.exp ...
+PASS: gdb.cp/cplabel.exp: break foo::bar:to_the_top
+PASS: gdb.cp/cplabel.exp: break foo::bar:get_out_of_here
+PASS: gdb.cp/cplabel.exp: break foo::baz:to_the_top
+PASS: gdb.cp/cplabel.exp: break foo::baz:get_out_of_here
+Running ./gdb.cp/cplusfuncs.exp ...
+PASS: gdb.cp/cplusfuncs.exp: set width 0
+PASS: gdb.cp/cplusfuncs.exp: set language c++
+PASS: gdb.cp/cplusfuncs.exp: detect dm_operator_comma
+PASS: gdb.cp/cplusfuncs.exp: detect dm_operator_char_star
+PASS: gdb.cp/cplusfuncs.exp: detect dm_type_char_star
+PASS: gdb.cp/cplusfuncs.exp: detect dm_type_foo_ref
+PASS: gdb.cp/cplusfuncs.exp: detect dm_type_int_star
+PASS: gdb.cp/cplusfuncs.exp: detect dm_type_long_star
+PASS: gdb.cp/cplusfuncs.exp: detect dm_type_unsigned_int
+PASS: gdb.cp/cplusfuncs.exp: detect dm_type_void
+PASS: gdb.cp/cplusfuncs.exp: detect dm_type_void_star
+PASS: gdb.cp/cplusfuncs.exp: detect dm_type_short
+PASS: gdb.cp/cplusfuncs.exp: detect dm_type_unsigned_short
+PASS: gdb.cp/cplusfuncs.exp: detect dm_type_long
+PASS: gdb.cp/cplusfuncs.exp: detect dm_type_unsigned_long
+PASS: gdb.cp/cplusfuncs.exp: detect dm_type_typedef
+PASS: gdb.cp/cplusfuncs.exp: print &'overload1arg(void)'
+PASS: gdb.cp/cplusfuncs.exp: print &'overload1arg(char)'
+PASS: gdb.cp/cplusfuncs.exp: print &'overload1arg(signed char)'
+PASS: gdb.cp/cplusfuncs.exp: print &'overload1arg(unsigned char)'
+PASS: gdb.cp/cplusfuncs.exp: print &'overload1arg(short)'
+PASS: gdb.cp/cplusfuncs.exp: print &'overload1arg(unsigned short)'
+PASS: gdb.cp/cplusfuncs.exp: print &'overload1arg(int)'
+PASS: gdb.cp/cplusfuncs.exp: print &'overload1arg(unsigned int)'
+PASS: gdb.cp/cplusfuncs.exp: print &'overload1arg(long)'
+PASS: gdb.cp/cplusfuncs.exp: print &'overload1arg(unsigned long)'
+PASS: gdb.cp/cplusfuncs.exp: print &'overload1arg(float)'
+PASS: gdb.cp/cplusfuncs.exp: print &'overload1arg(double)'
+PASS: gdb.cp/cplusfuncs.exp: print &'overloadargs(int)'
+PASS: gdb.cp/cplusfuncs.exp: print &'overloadargs(int, int)'
+PASS: gdb.cp/cplusfuncs.exp: print &'overloadargs(int, int, int)'
+PASS: gdb.cp/cplusfuncs.exp: print &'overloadargs(int, int, int, int)'
+PASS: gdb.cp/cplusfuncs.exp: print &'overloadargs(int, int, int, int, int)'
+PASS: gdb.cp/cplusfuncs.exp: print &'overloadargs(int, int, int, int, int, int)'
+PASS: gdb.cp/cplusfuncs.exp: print &'overloadargs(int, int, int, int, int, int, int)'
+PASS: gdb.cp/cplusfuncs.exp: print &'overloadargs(int, int, int, int, int, int, int, int)'
+PASS: gdb.cp/cplusfuncs.exp: print &'overloadargs(int, int, int, int, int, int, int, int, int)'
+PASS: gdb.cp/cplusfuncs.exp: print &'overloadargs(int, int, int, int, int, int, int, int, int, int)'
+PASS: gdb.cp/cplusfuncs.exp: print &'overloadargs(int, int, int, int, int, int, int, int, int, int, int)'
+PASS: gdb.cp/cplusfuncs.exp: print &foo::operator*(foo&)
+PASS: gdb.cp/cplusfuncs.exp: print &foo::operator%(foo&)
+PASS: gdb.cp/cplusfuncs.exp: print &foo::operator-(foo&)
+PASS: gdb.cp/cplusfuncs.exp: print &foo::operator>>(foo&)
+PASS: gdb.cp/cplusfuncs.exp: print &foo::operator!=(foo&)
+PASS: gdb.cp/cplusfuncs.exp: print &foo::operator>(foo&)
+PASS: gdb.cp/cplusfuncs.exp: print &foo::operator>=(foo&)
+PASS: gdb.cp/cplusfuncs.exp: print &foo::operator|(foo&)
+PASS: gdb.cp/cplusfuncs.exp: print &foo::operator&&(foo&)
+PASS: gdb.cp/cplusfuncs.exp: print &foo::operator!(void)
+PASS: gdb.cp/cplusfuncs.exp: print &foo::operator++(int)
+PASS: gdb.cp/cplusfuncs.exp: print &foo::operator=(foo&)
+PASS: gdb.cp/cplusfuncs.exp: print &foo::operator+=(foo&)
+PASS: gdb.cp/cplusfuncs.exp: print &foo::operator*=(foo&)
+PASS: gdb.cp/cplusfuncs.exp: print &foo::operator%=(foo&)
+PASS: gdb.cp/cplusfuncs.exp: print &foo::operator>>=(foo&)
+PASS: gdb.cp/cplusfuncs.exp: print &foo::operator|=(foo&)
+PASS: gdb.cp/cplusfuncs.exp: print &foo::operator,(foo&)
+PASS: gdb.cp/cplusfuncs.exp: print &foo::operator/(foo&)
+PASS: gdb.cp/cplusfuncs.exp: print &foo::operator+(foo&)
+PASS: gdb.cp/cplusfuncs.exp: print &foo::operator<<(foo&)
+PASS: gdb.cp/cplusfuncs.exp: print &foo::operator==(foo&)
+PASS: gdb.cp/cplusfuncs.exp: print &foo::operator<(foo&)
+PASS: gdb.cp/cplusfuncs.exp: print &foo::operator<=(foo&)
+PASS: gdb.cp/cplusfuncs.exp: print &foo::operator&(foo&)
+PASS: gdb.cp/cplusfuncs.exp: print &foo::operator^(foo&)
+PASS: gdb.cp/cplusfuncs.exp: print &foo::operator||(foo&)
+PASS: gdb.cp/cplusfuncs.exp: print &foo::operator~(void)
+PASS: gdb.cp/cplusfuncs.exp: print &foo::operator--(int)
+PASS: gdb.cp/cplusfuncs.exp: print &foo::operator->(void)
+PASS: gdb.cp/cplusfuncs.exp: print &foo::operator-=(foo&)
+PASS: gdb.cp/cplusfuncs.exp: print &foo::operator/=(foo&)
+PASS: gdb.cp/cplusfuncs.exp: print &foo::operator<<=(foo&)
+PASS: gdb.cp/cplusfuncs.exp: print &foo::operator&=(foo&)
+PASS: gdb.cp/cplusfuncs.exp: print &foo::operator^=(foo&)
+PASS: gdb.cp/cplusfuncs.exp: print &foo::operator->*(foo&)
+PASS: gdb.cp/cplusfuncs.exp: print &foo::operator[](foo&)
+PASS: gdb.cp/cplusfuncs.exp: print &foo::operator()(foo&)
+PASS: gdb.cp/cplusfuncs.exp: print &foo::operator new
+PASS: gdb.cp/cplusfuncs.exp: print &foo::operator new[]
+PASS: gdb.cp/cplusfuncs.exp: print &foo::operator delete(void*)
+PASS: gdb.cp/cplusfuncs.exp: print &foo::operator delete(void*)
+PASS: gdb.cp/cplusfuncs.exp: print &foo::operator int(void)
+PASS: gdb.cp/cplusfuncs.exp: print &foo::operator char*(void)
+PASS: gdb.cp/cplusfuncs.exp: print &hairyfunc1
+PASS: gdb.cp/cplusfuncs.exp: print &hairyfunc2
+PASS: gdb.cp/cplusfuncs.exp: print &hairyfunc3
+PASS: gdb.cp/cplusfuncs.exp: print &hairyfunc4
+PASS: gdb.cp/cplusfuncs.exp: print &hairyfunc5
+PASS: gdb.cp/cplusfuncs.exp: print &hairyfunc6
+PASS: gdb.cp/cplusfuncs.exp: print &hairyfunc7
+PASS: gdb.cp/cplusfuncs.exp: info function for "operator\*("
+PASS: gdb.cp/cplusfuncs.exp: info function for "operator%("
+PASS: gdb.cp/cplusfuncs.exp: info function for "operator-("
+PASS: gdb.cp/cplusfuncs.exp: info function for "operator>>("
+PASS: gdb.cp/cplusfuncs.exp: info function for "operator!=("
+PASS: gdb.cp/cplusfuncs.exp: info function for "operator>("
+PASS: gdb.cp/cplusfuncs.exp: info function for "operator>=("
+PASS: gdb.cp/cplusfuncs.exp: info function for "operator|("
+PASS: gdb.cp/cplusfuncs.exp: info function for "operator&&("
+PASS: gdb.cp/cplusfuncs.exp: info function for "operator!("
+PASS: gdb.cp/cplusfuncs.exp: info function for "operator++("
+PASS: gdb.cp/cplusfuncs.exp: info function for "operator=("
+PASS: gdb.cp/cplusfuncs.exp: info function for "operator+=("
+PASS: gdb.cp/cplusfuncs.exp: info function for "operator\*=("
+PASS: gdb.cp/cplusfuncs.exp: info function for "operator%=("
+PASS: gdb.cp/cplusfuncs.exp: info function for "operator>>=("
+PASS: gdb.cp/cplusfuncs.exp: info function for "operator|=("
+PASS: gdb.cp/cplusfuncs.exp: info function for "operator,("
+PASS: gdb.cp/cplusfuncs.exp: info function for "operator/("
+PASS: gdb.cp/cplusfuncs.exp: info function for "operator+("
+PASS: gdb.cp/cplusfuncs.exp: info function for "operator<<("
+PASS: gdb.cp/cplusfuncs.exp: info function for "operator==("
+PASS: gdb.cp/cplusfuncs.exp: info function for "operator<("
+PASS: gdb.cp/cplusfuncs.exp: info function for "operator<=("
+PASS: gdb.cp/cplusfuncs.exp: info function for "operator&("
+PASS: gdb.cp/cplusfuncs.exp: info function for "operator^("
+PASS: gdb.cp/cplusfuncs.exp: info function for "operator||("
+PASS: gdb.cp/cplusfuncs.exp: info function for "operator~("
+PASS: gdb.cp/cplusfuncs.exp: info function for "operator--("
+PASS: gdb.cp/cplusfuncs.exp: info function for "operator->("
+PASS: gdb.cp/cplusfuncs.exp: info function for "operator-=("
+PASS: gdb.cp/cplusfuncs.exp: info function for "operator/=("
+PASS: gdb.cp/cplusfuncs.exp: info function for "operator<<=("
+PASS: gdb.cp/cplusfuncs.exp: info function for "operator&=("
+PASS: gdb.cp/cplusfuncs.exp: info function for "operator^=("
+PASS: gdb.cp/cplusfuncs.exp: info function for "operator->\*("
+PASS: gdb.cp/cplusfuncs.exp: info function for "operator\[\]("
+PASS: gdb.cp/cplusfuncs.exp: info function for "operator new("
+PASS: gdb.cp/cplusfuncs.exp: info function for "operator delete("
+PASS: gdb.cp/cplusfuncs.exp: info function for "operator int("
+PASS: gdb.cp/cplusfuncs.exp: info function for "operator()("
+PASS: gdb.cp/cplusfuncs.exp: info function for "operator char\*("
+PASS: gdb.cp/cplusfuncs.exp: list foo::operator int*
+Running ./gdb.cp/cp-relocate.exp ...
+PASS: gdb.cp/cp-relocate.exp: info functions
+PASS: gdb.cp/cp-relocate.exp: get address of func<1>(int)
+PASS: gdb.cp/cp-relocate.exp: get address of func<2>(int)
+PASS: gdb.cp/cp-relocate.exp: get address of caller
+PASS: gdb.cp/cp-relocate.exp: C++ functions have different addresses
+PASS: gdb.cp/cp-relocate.exp: info file
+PASS: gdb.cp/cp-relocate.exp: add-symbol-file cp-relocate.o
+PASS: gdb.cp/cp-relocate.exp: break *func<1>(int)
+PASS: gdb.cp/cp-relocate.exp: break *func<2>(int)
+Running ./gdb.cp/ctti.exp ...
+PASS: gdb.cp/ctti.exp: continue to breakpoint: marker add1
+PASS: gdb.cp/ctti.exp: print c
+PASS: gdb.cp/ctti.exp: print f
+PASS: gdb.cp/ctti.exp: print i
+Running ./gdb.cp/debug-expr.exp ...
+PASS: gdb.cp/debug-expr.exp: set language c++
+PASS: gdb.cp/debug-expr.exp: set debug expression 1
+PASS: gdb.cp/debug-expr.exp: print static_cast<void*>(0)
+PASS: gdb.cp/debug-expr.exp: print reinterpret_cast<void*>(0)
+PASS: gdb.cp/debug-expr.exp: print dynamic_cast<void*>(0)
+Running ./gdb.cp/demangle.exp ...
+PASS: gdb.cp/demangle.exp: set language c++
+PASS: gdb.cp/demangle.exp: set width 0
+PASS: gdb.cp/demangle.exp: lucid: set demangle-style
+PASS: gdb.cp/demangle.exp: lucid: check demangling style
+PASS: gdb.cp/demangle.exp: lucid: WS__FR7istream
+PASS: gdb.cp/demangle.exp: lucid: __aa__3fooFR3foo
+PASS: gdb.cp/demangle.exp: lucid: __aad__3fooFR3foo
+PASS: gdb.cp/demangle.exp: lucid: __ad__3fooFR3foo
+PASS: gdb.cp/demangle.exp: lucid: __adv__3fooFR3foo
+PASS: gdb.cp/demangle.exp: lucid: __adv__7complexF7complex
+PASS: gdb.cp/demangle.exp: lucid: __aer__3fooFR3foo
+PASS: gdb.cp/demangle.exp: lucid: __als__3fooFR3foo
+PASS: gdb.cp/demangle.exp: lucid: __amd__3fooFR3foo
+PASS: gdb.cp/demangle.exp: lucid: __ami__3fooFR3foo
+PASS: gdb.cp/demangle.exp: lucid: __amu__3fooFR3foo
+PASS: gdb.cp/demangle.exp: lucid: __amu__7complexF7complex
+PASS: gdb.cp/demangle.exp: lucid: __aor__3fooFR3foo
+PASS: gdb.cp/demangle.exp: lucid: __apl__3fooFR3foo
+PASS: gdb.cp/demangle.exp: lucid: __ars__3fooFR3foo
+PASS: gdb.cp/demangle.exp: lucid: __as__18istream_withassignFP9streambuf
+PASS: gdb.cp/demangle.exp: lucid: __as__18istream_withassignFR7istream
+PASS: gdb.cp/demangle.exp: lucid: __as__3fooFR3foo
+PASS: gdb.cp/demangle.exp: lucid: __as__3iosFR3ios
+PASS: gdb.cp/demangle.exp: lucid: __cl__3fooFR3foo
+PASS: gdb.cp/demangle.exp: lucid: __cm__3fooFR3foo
+PASS: gdb.cp/demangle.exp: lucid: __co__3fooFv
+PASS: gdb.cp/demangle.exp: lucid: __ct__10istrstreamFPc
+PASS: gdb.cp/demangle.exp: lucid: __ct__10istrstreamFPci
+PASS: gdb.cp/demangle.exp: lucid: __ct__10ostrstreamFPciT2
+PASS: gdb.cp/demangle.exp: lucid: __ct__10ostrstreamFv
+PASS: gdb.cp/demangle.exp: lucid: __ct__10smanip_intFPFR3iosi_R3iosi
+PASS: gdb.cp/demangle.exp: lucid: __ct__11c_exceptionFPcRC7complexT2
+PASS: gdb.cp/demangle.exp: lucid: __ct__11fstreambaseFPCciT2
+PASS: gdb.cp/demangle.exp: lucid: __ct__11fstreambaseFi
+PASS: gdb.cp/demangle.exp: lucid: __ct__11fstreambaseFiPcT1
+PASS: gdb.cp/demangle.exp: lucid: __ct__11fstreambaseFv
+PASS: gdb.cp/demangle.exp: lucid: __ct__11smanip_longFPFR3iosl_R3iosl
+PASS: gdb.cp/demangle.exp: lucid: __ct__11stdiostreamFP4FILE
+PASS: gdb.cp/demangle.exp: lucid: __ct__12strstreambufFPFl_PvPFPv_v
+PASS: gdb.cp/demangle.exp: lucid: __ct__12strstreambufFPUciT1
+PASS: gdb.cp/demangle.exp: lucid: __ct__12strstreambufFPciT1
+PASS: gdb.cp/demangle.exp: lucid: __ct__12strstreambufFi
+PASS: gdb.cp/demangle.exp: lucid: __ct__12strstreambufFv
+PASS: gdb.cp/demangle.exp: lucid: __ct__13strstreambaseFPciT1
+PASS: gdb.cp/demangle.exp: lucid: __ct__3fooFR3foo
+PASS: gdb.cp/demangle.exp: lucid: __ct__3fooFi
+PASS: gdb.cp/demangle.exp: lucid: __ct__3fooFiN31
+PASS: gdb.cp/demangle.exp: lucid: __ct__3fooFiPCc
+PASS: gdb.cp/demangle.exp: lucid: __ct__3fooFiR3fooT1T2T1T2
+PASS: gdb.cp/demangle.exp: lucid: __ct__3iosFP9streambuf
+PASS: gdb.cp/demangle.exp: lucid: __ct__7filebufFiPcT1
+PASS: gdb.cp/demangle.exp: lucid: __ct__7fstreamFPCciT2
+PASS: gdb.cp/demangle.exp: lucid: __ct__7fstreamFiPcT1
+PASS: gdb.cp/demangle.exp: lucid: __ct__7istreamFP9streambuf
+PASS: gdb.cp/demangle.exp: lucid: __ct__7istreamFP9streambufiP7ostream
+PASS: gdb.cp/demangle.exp: lucid: __ct__7istreamFiPcT1
+PASS: gdb.cp/demangle.exp: lucid: __ct__7istreamFiT1P7ostream
+PASS: gdb.cp/demangle.exp: lucid: __ct__7ostreamFP9streambuf
+PASS: gdb.cp/demangle.exp: lucid: __ct__7ostreamFiPc
+PASS: gdb.cp/demangle.exp: lucid: __ct__8ifstreamFPCciT2
+PASS: gdb.cp/demangle.exp: lucid: __ct__8ifstreamFiPcT1
+PASS: gdb.cp/demangle.exp: lucid: __ct__Q23foo3barFv
+PASS: gdb.cp/demangle.exp: lucid: __ct__Q33foo3bar4bellFv
+PASS: gdb.cp/demangle.exp: lucid: __dl__3fooSFPv
+PASS: gdb.cp/demangle.exp: lucid: __dl__FPv
+PASS: gdb.cp/demangle.exp: lucid: __dt__10istrstreamFv
+PASS: gdb.cp/demangle.exp: lucid: __dt__Q23foo3barFv
+PASS: gdb.cp/demangle.exp: lucid: __dt__Q33foo3bar4bellFv
+PASS: gdb.cp/demangle.exp: lucid: __dv__3fooFR3foo
+PASS: gdb.cp/demangle.exp: lucid: __dv__F7complexT1
+PASS: gdb.cp/demangle.exp: lucid: __eq__3fooFR3foo
+PASS: gdb.cp/demangle.exp: lucid: __er__3fooFR3foo
+PASS: gdb.cp/demangle.exp: lucid: __ge__3fooFR3foo
+PASS: gdb.cp/demangle.exp: lucid: __gt__3fooFR3foo
+PASS: gdb.cp/demangle.exp: lucid: __le__3fooFR3foo
+PASS: gdb.cp/demangle.exp: lucid: __ls__3fooFR3foo
+PASS: gdb.cp/demangle.exp: lucid: __ls__7ostreamFP9streambuf
+PASS: gdb.cp/demangle.exp: lucid: __ls__7ostreamFPCc
+PASS: gdb.cp/demangle.exp: lucid: __ls__7ostreamFPFR3ios_R3ios
+PASS: gdb.cp/demangle.exp: lucid: __ls__7ostreamFPv
+PASS: gdb.cp/demangle.exp: lucid: __ls__7ostreamFUi
+PASS: gdb.cp/demangle.exp: lucid: __ls__7ostreamFUl
+PASS: gdb.cp/demangle.exp: lucid: __ls__7ostreamFd
+PASS: gdb.cp/demangle.exp: lucid: __ls__7ostreamFf
+PASS: gdb.cp/demangle.exp: lucid: __ls__7ostreamFi
+PASS: gdb.cp/demangle.exp: lucid: __ls__7ostreamFl
+PASS: gdb.cp/demangle.exp: lucid: __ls__FR7ostream7complex
+PASS: gdb.cp/demangle.exp: lucid: __lt__3fooFR3foo
+PASS: gdb.cp/demangle.exp: lucid: __md__3fooFR3foo
+PASS: gdb.cp/demangle.exp: lucid: __mi__3fooFR3foo
+PASS: gdb.cp/demangle.exp: lucid: __ml__3fooFR3foo
+PASS: gdb.cp/demangle.exp: lucid: __ml__F7complexT1
+PASS: gdb.cp/demangle.exp: lucid: __mm__3fooFi
+PASS: gdb.cp/demangle.exp: lucid: __ne__3fooFR3foo
+PASS: gdb.cp/demangle.exp: lucid: __nt__3fooFv
+PASS: gdb.cp/demangle.exp: lucid: __nw__3fooSFi
+PASS: gdb.cp/demangle.exp: lucid: __nw__FUi
+PASS: gdb.cp/demangle.exp: lucid: __nw__FUiPv
+PASS: gdb.cp/demangle.exp: lucid: __oo__3fooFR3foo
+PASS: gdb.cp/demangle.exp: lucid: __opPc__3fooFv
+PASS: gdb.cp/demangle.exp: lucid: __opi__3fooFv
+PASS: gdb.cp/demangle.exp: lucid: __or__3fooFR3foo
+PASS: gdb.cp/demangle.exp: lucid: __pl__3fooFR3foo
+PASS: gdb.cp/demangle.exp: lucid: __pp__3fooFi
+PASS: gdb.cp/demangle.exp: lucid: __pt__3fooFv
+PASS: gdb.cp/demangle.exp: lucid: __rm__3fooFR3foo
+PASS: gdb.cp/demangle.exp: lucid: __rs__3fooFR3foo
+PASS: gdb.cp/demangle.exp: lucid: __rs__7istreamFP9streambuf
+PASS: gdb.cp/demangle.exp: lucid: __rs__7istreamFPFR3ios_R3ios
+PASS: gdb.cp/demangle.exp: lucid: __rs__7istreamFPFR7istream_R7istream
+PASS: gdb.cp/demangle.exp: lucid: __rs__7istreamFPUc
+PASS: gdb.cp/demangle.exp: lucid: __rs__7istreamFPc
+PASS: gdb.cp/demangle.exp: lucid: __rs__7istreamFRUi
+PASS: gdb.cp/demangle.exp: lucid: __rs__7istreamFRUl
+PASS: gdb.cp/demangle.exp: lucid: __rs__7istreamFRUs
+PASS: gdb.cp/demangle.exp: lucid: __rs__7istreamFRd
+PASS: gdb.cp/demangle.exp: lucid: __rs__7istreamFRf
+PASS: gdb.cp/demangle.exp: lucid: __rs__7istreamFRi
+PASS: gdb.cp/demangle.exp: lucid: __rs__7istreamFRl
+PASS: gdb.cp/demangle.exp: lucid: __rs__7istreamFRs
+PASS: gdb.cp/demangle.exp: lucid: __rs__FR7istreamR7complex
+PASS: gdb.cp/demangle.exp: lucid: __vc__3fooFR3foo
+PASS: gdb.cp/demangle.exp: lucid: __vtbl__10istrstream
+PASS: gdb.cp/demangle.exp: lucid: __vtbl__17ostream__iostream__19iostream_withassign
+PASS: gdb.cp/demangle.exp: lucid: __vtbl__3ios
+PASS: gdb.cp/demangle.exp: lucid: __vtbl__3ios__13strstreambase
+KFAIL: gdb.cp/demangle.exp: lucid: __vtbl__3foo__vt_cc_main_ (PRMS: gdb/945)
+PASS: gdb.cp/demangle.exp: lucid: abs__F7complex
+PASS: gdb.cp/demangle.exp: lucid: allocate__9streambufFv
+PASS: gdb.cp/demangle.exp: lucid: attach__11fstreambaseFi
+PASS: gdb.cp/demangle.exp: lucid: bitalloc__3iosSFv
+PASS: gdb.cp/demangle.exp: lucid: chr__FiT1
+PASS: gdb.cp/demangle.exp: lucid: complex_error__FR11c_exception
+PASS: gdb.cp/demangle.exp: lucid: complexfunc2__FPFPc_i
+PASS: gdb.cp/demangle.exp: lucid: complexfunc3__FPFPFPl_s_i
+PASS: gdb.cp/demangle.exp: lucid: complexfunc4__FPFPFPc_s_i
+PASS: gdb.cp/demangle.exp: lucid: complexfunc5__FPFPc_PFl_i
+PASS: gdb.cp/demangle.exp: lucid: complexfunc6__FPFPi_PFl_i
+PASS: gdb.cp/demangle.exp: lucid: complexfunc7__FPFPFPc_i_PFl_i
+PASS: gdb.cp/demangle.exp: lucid: complicated_put__7ostreamFc
+PASS: gdb.cp/demangle.exp: lucid: conv10__FlPc
+PASS: gdb.cp/demangle.exp: lucid: conv16__FUlPc
+PASS: gdb.cp/demangle.exp: lucid: dec__FR3ios
+PASS: gdb.cp/demangle.exp: lucid: dec__Fli
+PASS: gdb.cp/demangle.exp: lucid: dofield__FP7ostreamPciT2T3
+PASS: gdb.cp/demangle.exp: lucid: flags__3iosFl
+PASS: gdb.cp/demangle.exp: lucid: flags__3iosFv
+PASS: gdb.cp/demangle.exp: lucid: foo__FiN31
+PASS: gdb.cp/demangle.exp: lucid: foo__FiR3fooT1T2T1T2
+PASS: gdb.cp/demangle.exp: lucid: foo___3barFl
+PASS: gdb.cp/demangle.exp: lucid: form__FPCce
+PASS: gdb.cp/demangle.exp: lucid: get__7istreamFPcic
+PASS: gdb.cp/demangle.exp: lucid: get__7istreamFR9streambufc
+PASS: gdb.cp/demangle.exp: lucid: get_complicated__7istreamFRUc
+PASS: gdb.cp/demangle.exp: lucid: get_complicated__7istreamFRc
+PASS: gdb.cp/demangle.exp: lucid: getline__7istreamFPUcic
+PASS: gdb.cp/demangle.exp: lucid: getline__7istreamFPcic
+PASS: gdb.cp/demangle.exp: lucid: ignore__7istreamFiT1
+PASS: gdb.cp/demangle.exp: lucid: init__12strstreambufFPciT1
+PASS: gdb.cp/demangle.exp: lucid: init__3iosFP9streambuf
+PASS: gdb.cp/demangle.exp: lucid: initcount__13Iostream_init
+PASS: gdb.cp/demangle.exp: lucid: ipfx__7istreamFi
+PASS: gdb.cp/demangle.exp: lucid: ls_complicated__7ostreamFUc
+PASS: gdb.cp/demangle.exp: lucid: ls_complicated__7ostreamFc
+PASS: gdb.cp/demangle.exp: lucid: open__11fstreambaseFPCciT2
+PASS: gdb.cp/demangle.exp: lucid: open__7filebufFPCciT2
+PASS: gdb.cp/demangle.exp: lucid: overload1arg__FSc
+PASS: gdb.cp/demangle.exp: lucid: overload1arg__FUc
+PASS: gdb.cp/demangle.exp: lucid: overload1arg__FUi
+PASS: gdb.cp/demangle.exp: lucid: overload1arg__FUl
+PASS: gdb.cp/demangle.exp: lucid: overload1arg__FUs
+PASS: gdb.cp/demangle.exp: lucid: overload1arg__Fc
+PASS: gdb.cp/demangle.exp: lucid: overload1arg__Fd
+PASS: gdb.cp/demangle.exp: lucid: overload1arg__Ff
+PASS: gdb.cp/demangle.exp: lucid: overload1arg__Fi
+PASS: gdb.cp/demangle.exp: lucid: overload1arg__Fl
+PASS: gdb.cp/demangle.exp: lucid: overload1arg__Fs
+PASS: gdb.cp/demangle.exp: lucid: overload1arg__Fv
+PASS: gdb.cp/demangle.exp: lucid: overloadargs__FiN21
+PASS: gdb.cp/demangle.exp: lucid: overloadargs__FiN31
+PASS: gdb.cp/demangle.exp: lucid: overloadargs__FiN41
+PASS: gdb.cp/demangle.exp: lucid: overloadargs__FiN51
+PASS: gdb.cp/demangle.exp: lucid: overloadargs__FiN61
+PASS: gdb.cp/demangle.exp: lucid: overloadargs__FiN71
+PASS: gdb.cp/demangle.exp: lucid: overloadargs__FiN81
+PASS: gdb.cp/demangle.exp: lucid: overloadargs__FiN91
+PASS: gdb.cp/demangle.exp: lucid: overloadargs__FiN91N11
+PASS: gdb.cp/demangle.exp: lucid: overloadargs__FiT1
+PASS: gdb.cp/demangle.exp: lucid: polar__FdT1
+PASS: gdb.cp/demangle.exp: lucid: pow__F7complexT1
+PASS: gdb.cp/demangle.exp: lucid: pow__F7complexd
+PASS: gdb.cp/demangle.exp: lucid: pow__F7complexi
+PASS: gdb.cp/demangle.exp: lucid: pow__Fd7complex
+PASS: gdb.cp/demangle.exp: lucid: pstart__FPciT2
+PASS: gdb.cp/demangle.exp: lucid: put__7ostreamFc
+PASS: gdb.cp/demangle.exp: lucid: read__7istreamFPci
+PASS: gdb.cp/demangle.exp: lucid: resetiosflags__FR3iosl
+PASS: gdb.cp/demangle.exp: lucid: restore_errno__FRi
+PASS: gdb.cp/demangle.exp: lucid: rs_complicated__7istreamFRUc
+PASS: gdb.cp/demangle.exp: lucid: rs_complicated__7istreamFRc
+PASS: gdb.cp/demangle.exp: lucid: seekg__7istreamFl8seek_dir
+PASS: gdb.cp/demangle.exp: lucid: seekoff__12strstreambufFl8seek_diri
+PASS: gdb.cp/demangle.exp: lucid: seekoff__9streambufFlQ2_3ios12ios_seek_diri
+PASS: gdb.cp/demangle.exp: lucid: seekpos__9streambufFli
+PASS: gdb.cp/demangle.exp: lucid: set_new_handler__FPFv_v
+PASS: gdb.cp/demangle.exp: lucid: setb__9streambufFPcT1i
+PASS: gdb.cp/demangle.exp: lucid: setb__FR3iosi
+PASS: gdb.cp/demangle.exp: lucid: setbuf__11fstreambaseFPci
+PASS: gdb.cp/demangle.exp: lucid: setbuf__9streambufFPUci
+PASS: gdb.cp/demangle.exp: lucid: setbuf__9streambufFPciT2
+PASS: gdb.cp/demangle.exp: lucid: setf__3iosFlT1
+PASS: gdb.cp/demangle.exp: lucid: setfill__FR3iosi
+PASS: gdb.cp/demangle.exp: lucid: setg__9streambufFPcN21
+PASS: gdb.cp/demangle.exp: lucid: setp__9streambufFPcT1
+PASS: gdb.cp/demangle.exp: lucid: sputn__9streambufFPCci
+PASS: gdb.cp/demangle.exp: lucid: str__FPCci
+PASS: gdb.cp/demangle.exp: lucid: tie__3iosFP7ostream
+PASS: gdb.cp/demangle.exp: lucid: uconv10__FUlPc
+PASS: gdb.cp/demangle.exp: lucid: write__7ostreamFPCci
+PASS: gdb.cp/demangle.exp: lucid: xget__7istreamFPc
+PASS: gdb.cp/demangle.exp: lucid: xsgetn__9streambufFPci
+PASS: gdb.cp/demangle.exp: lucid: xsputn__9streambufFPCci
+PASS: gdb.cp/demangle.exp: lucid: _Utf390_1__1_9223372036854775807__9223372036854775
+PASS: gdb.cp/demangle.exp: gnu: set demangle-style
+PASS: gdb.cp/demangle.exp: gnu: check demangling style
+PASS: gdb.cp/demangle.exp: gnu: Abort__FP6EditoriPCc
+PASS: gdb.cp/demangle.exp: gnu: AddAlignment__9ivTSolverUiP12ivInteractorP7ivTGlue
+PASS: gdb.cp/demangle.exp: gnu: Append__15NameChooserViewPCc
+PASS: gdb.cp/demangle.exp: gnu: ArrowheadIntersects__9ArrowLineP9ArrowheadR6BoxObjP7Graphic
+PASS: gdb.cp/demangle.exp: gnu: AtEnd__13ivRubberGroup
+PASS: gdb.cp/demangle.exp: gnu: BgFilter__9ivTSolverP12ivInteractor
+PASS: gdb.cp/demangle.exp: gnu: BitPatterntoa__FRC10BitPatternccc
+PASS: gdb.cp/demangle.exp: gnu: Check__6UArrayi
+PASS: gdb.cp/demangle.exp: gnu: CoreConstDecls__8TextCodeR7ostream
+PASS: gdb.cp/demangle.exp: gnu: Detach__8StateVarP12StateVarView
+PASS: gdb.cp/demangle.exp: gnu: Done__9ComponentG8Iterator
+PASS: gdb.cp/demangle.exp: gnu: DrawDestinationTransformedImage__FP7_XImageiiT0iiUlUiiiUiUlUlP4_XGCRC13ivTransformeriiii
+PASS: gdb.cp/demangle.exp: gnu: Edit__12StringEditorPCcii
+PASS: gdb.cp/demangle.exp: gnu: Effect__11RelateManipR7ivEvent
+PASS: gdb.cp/demangle.exp: gnu: FilterName__FPCc
+PASS: gdb.cp/demangle.exp: gnu: Filter__6PSTextPCci
+PASS: gdb.cp/demangle.exp: gnu: FindColor__7CatalogPCciii
+PASS: gdb.cp/demangle.exp: gnu: FindFixed__FRP4CNetP4CNet
+PASS: gdb.cp/demangle.exp: gnu: FindFont__7CatalogPCcN21
+PASS: gdb.cp/demangle.exp: gnu: Fix48_abort__FR8twolongs
+PASS: gdb.cp/demangle.exp: gnu: GetBarInfo__15iv2_6_VScrollerP13ivPerspectiveRiT2
+PASS: gdb.cp/demangle.exp: gnu: GetBgColor__C9ivPainter
+PASS: gdb.cp/demangle.exp: gnu: Iisdouble__FPC6IntRep
+PASS: gdb.cp/demangle.exp: gnu: InsertBody__15H_PullrightMenuii
+PASS: gdb.cp/demangle.exp: gnu: InsertCharacter__9TextManipc
+PASS: gdb.cp/demangle.exp: gnu: InsertToplevel__7ivWorldP12ivInteractorT1
+PASS: gdb.cp/demangle.exp: gnu: InsertToplevel__7ivWorldP12ivInteractorT1iiUi
+PASS: gdb.cp/demangle.exp: gnu: IsADirectory__FPCcR4stat
+PASS: gdb.cp/demangle.exp: gnu: IsAGroup__FP11GraphicViewP11GraphicComp
+PASS: gdb.cp/demangle.exp: gnu: IsA__10ButtonCodeUl
+PASS: gdb.cp/demangle.exp: gnu: ReadName__FR7istreamPc
+PASS: gdb.cp/demangle.exp: gnu: Redraw__13StringBrowseriiii
+PASS: gdb.cp/demangle.exp: gnu: Rotate__13ivTransformerf
+PASS: gdb.cp/demangle.exp: gnu: Rotated__C13ivTransformerf
+PASS: gdb.cp/demangle.exp: gnu: Round__Ff
+PASS: gdb.cp/demangle.exp: gnu: SetExport__16MemberSharedNameUi
+PASS: gdb.cp/demangle.exp: gnu: Set__14ivControlState13ControlStatusUi
+PASS: gdb.cp/demangle.exp: gnu: Set__5DFacePcii
+PASS: gdb.cp/demangle.exp: gnu: VConvert__9ivTSolverP12ivInteractorRP8TElementT2
+PASS: gdb.cp/demangle.exp: gnu: VConvert__9ivTSolverP7ivTGlueRP8TElement
+PASS: gdb.cp/demangle.exp: gnu: VOrder__9ivTSolverUiRP12ivInteractorT2
+PASS: gdb.cp/demangle.exp: gnu: Valid__7CatalogPCcRP4Tool
+PASS: gdb.cp/demangle.exp: gnu: _10PageButton$__both
+PASS: gdb.cp/demangle.exp: gnu: _3RNG$singleMantissa
+PASS: gdb.cp/demangle.exp: gnu: _5IComp$_release
+PASS: gdb.cp/demangle.exp: gnu: _$_10BitmapComp
+PASS: gdb.cp/demangle.exp: gnu: _$_9__io_defs
+PASS: gdb.cp/demangle.exp: gnu: _$_Q23foo3bar
+PASS: gdb.cp/demangle.exp: gnu: _$_Q33foo3bar4bell
+PASS: gdb.cp/demangle.exp: gnu: __10ivTelltaleiP7ivGlyph
+PASS: gdb.cp/demangle.exp: gnu: __10ivViewportiP12ivInteractorUi
+PASS: gdb.cp/demangle.exp: gnu: __10ostrstream
+PASS: gdb.cp/demangle.exp: gnu: __10ostrstreamPcii
+PASS: gdb.cp/demangle.exp: gnu: __11BasicDialogiPCcP13ivButtonStateN22Ui
+PASS: gdb.cp/demangle.exp: gnu: __11BitmapTablei
+PASS: gdb.cp/demangle.exp: gnu: __12ViewportCodeP12ViewportComp
+PASS: gdb.cp/demangle.exp: gnu: __12iv2_6_BorderiPCci
+PASS: gdb.cp/demangle.exp: gnu: __12iv2_6_Borderii
+PASS: gdb.cp/demangle.exp: gnu: __12ivBackgroundiP7ivGlyphPC7ivColor
+PASS: gdb.cp/demangle.exp: gnu: __12ivBreak_Listl
+PASS: gdb.cp/demangle.exp: gnu: __14TextInteractoriPCcUi
+PASS: gdb.cp/demangle.exp: gnu: __14iv2_6_MenuItemiP12ivInteractor
+PASS: gdb.cp/demangle.exp: gnu: __14iv2_6_MenuItemiPCcP12ivInteractor
+PASS: gdb.cp/demangle.exp: gnu: __20DisplayList_IteratorR11DisplayList
+PASS: gdb.cp/demangle.exp: gnu: __3fooRT0
+PASS: gdb.cp/demangle.exp: gnu: __3fooiN31
+PASS: gdb.cp/demangle.exp: gnu: __3fooiPCc
+PASS: gdb.cp/demangle.exp: gnu: __3fooiRT0iT2iT2
+PASS: gdb.cp/demangle.exp: gnu: __6GetOptiPPcPCc
+PASS: gdb.cp/demangle.exp: gnu: __6KeyMapPT0
+PASS: gdb.cp/demangle.exp: gnu: __7ivWorldPCcRiPPcPC12ivOptionDescPC14ivPropertyData
+PASS: gdb.cp/demangle.exp: gnu: __7procbufPCci
+PASS: gdb.cp/demangle.exp: gnu: __8ArrowCmdP6EditorUiUi
+PASS: gdb.cp/demangle.exp: gnu: __9F_EllipseiiiiP7Graphic
+PASS: gdb.cp/demangle.exp: gnu: __9FrameDataP9FrameCompi
+PASS: gdb.cp/demangle.exp: gnu: __9HVGraphicP9CanvasVarP7Graphic
+PASS: gdb.cp/demangle.exp: gnu: __Q23foo3bar
+PASS: gdb.cp/demangle.exp: gnu: __Q33foo3bar4bell
+PASS: gdb.cp/demangle.exp: gnu: __aa__3fooRT0
+PASS: gdb.cp/demangle.exp: gnu: __aad__3fooRT0
+PASS: gdb.cp/demangle.exp: gnu: __ad__3fooRT0
+PASS: gdb.cp/demangle.exp: gnu: __adv__3fooRT0
+PASS: gdb.cp/demangle.exp: gnu: __aer__3fooRT0
+PASS: gdb.cp/demangle.exp: gnu: __als__3fooRT0
+PASS: gdb.cp/demangle.exp: gnu: __amd__3fooRT0
+PASS: gdb.cp/demangle.exp: gnu: __ami__3fooRT0
+PASS: gdb.cp/demangle.exp: gnu: __aml__3FixRT0
+PASS: gdb.cp/demangle.exp: gnu: __aml__5Fix16i
+PASS: gdb.cp/demangle.exp: gnu: __aml__5Fix32RT0
+PASS: gdb.cp/demangle.exp: gnu: __aor__3fooRT0
+PASS: gdb.cp/demangle.exp: gnu: __apl__3fooRT0
+PASS: gdb.cp/demangle.exp: gnu: __ars__3fooRT0
+PASS: gdb.cp/demangle.exp: gnu: __as__3fooRT0
+PASS: gdb.cp/demangle.exp: gnu: __cl__3fooRT0
+PASS: gdb.cp/demangle.exp: gnu: __cl__6Normal
+PASS: gdb.cp/demangle.exp: gnu: __cl__6Stringii
+PASS: gdb.cp/demangle.exp: gnu: __cm__3fooRT0
+PASS: gdb.cp/demangle.exp: gnu: __co__3foo
+PASS: gdb.cp/demangle.exp: gnu: __dl__3fooPv
+PASS: gdb.cp/demangle.exp: gnu: __dv__3fooRT0
+PASS: gdb.cp/demangle.exp: gnu: __eq__3fooRT0
+PASS: gdb.cp/demangle.exp: gnu: __er__3fooRT0
+PASS: gdb.cp/demangle.exp: gnu: __ge__3fooRT0
+PASS: gdb.cp/demangle.exp: gnu: __gt__3fooRT0
+PASS: gdb.cp/demangle.exp: gnu: __le__3fooRT0
+PASS: gdb.cp/demangle.exp: gnu: __ls__3fooRT0
+PASS: gdb.cp/demangle.exp: gnu: __ls__FR7ostreamPFR3ios_R3ios
+PASS: gdb.cp/demangle.exp: gnu: __ls__FR7ostreamR3Fix
+PASS: gdb.cp/demangle.exp: gnu: __lt__3fooRT0
+PASS: gdb.cp/demangle.exp: gnu: __md__3fooRT0
+PASS: gdb.cp/demangle.exp: gnu: __mi__3fooRT0
+PASS: gdb.cp/demangle.exp: gnu: __ml__3fooRT0
+PASS: gdb.cp/demangle.exp: gnu: __mm__3fooi
+PASS: gdb.cp/demangle.exp: gnu: __ne__3fooRT0
+PASS: gdb.cp/demangle.exp: gnu: __ne__FRC7ComplexT0
+PASS: gdb.cp/demangle.exp: gnu: __ne__FRC7Complexd
+PASS: gdb.cp/demangle.exp: gnu: __ne__FRC9SubStringRC6String
+PASS: gdb.cp/demangle.exp: gnu: __nt__3foo
+PASS: gdb.cp/demangle.exp: gnu: __nw__3fooi
+PASS: gdb.cp/demangle.exp: gnu: __oo__3fooRT0
+PASS: gdb.cp/demangle.exp: gnu: __opPc__3foo
+PASS: gdb.cp/demangle.exp: gnu: __opi__3foo
+PASS: gdb.cp/demangle.exp: gnu: __or__3fooRT0
+PASS: gdb.cp/demangle.exp: gnu: __pl__3fooRT0
+PASS: gdb.cp/demangle.exp: gnu: __pp__3fooi
+PASS: gdb.cp/demangle.exp: gnu: __rf__3foo
+PASS: gdb.cp/demangle.exp: gnu: __rm__3fooRT0
+PASS: gdb.cp/demangle.exp: gnu: __rs__3fooRT0
+PASS: gdb.cp/demangle.exp: gnu: __vc__3fooRT0
+PASS: gdb.cp/demangle.exp: gnu: _gsub__6StringRC5RegexPCci
+PASS: gdb.cp/demangle.exp: gnu: _new_Fix__FUs
+PASS: gdb.cp/demangle.exp: gnu: _vt.foo
+PASS: gdb.cp/demangle.exp: gnu: _vt.foo.bar
+PASS: gdb.cp/demangle.exp: gnu: _vt$foo
+PASS: gdb.cp/demangle.exp: gnu: _vt$foo$bar
+PASS: gdb.cp/demangle.exp: gnu: append__7ivGlyphPT0
+PASS: gdb.cp/demangle.exp: gnu: arg__FRC7Complex
+PASS: gdb.cp/demangle.exp: gnu: clearok__FP7_win_sti
+PASS: gdb.cp/demangle.exp: gnu: complexfunc2__FPFPc_i
+PASS: gdb.cp/demangle.exp: gnu: complexfunc3__FPFPFPl_s_i
+PASS: gdb.cp/demangle.exp: gnu: complexfunc4__FPFPFPc_s_i
+PASS: gdb.cp/demangle.exp: gnu: complexfunc5__FPFPc_PFl_i
+PASS: gdb.cp/demangle.exp: gnu: complexfunc6__FPFPi_PFl_i
+PASS: gdb.cp/demangle.exp: gnu: complexfunc7__FPFPFPc_i_PFl_i
+PASS: gdb.cp/demangle.exp: gnu: contains__C9BitStringRC10BitPattern
+PASS: gdb.cp/demangle.exp: gnu: contains__C9BitStringRC12BitSubStringi
+PASS: gdb.cp/demangle.exp: gnu: contains__C9BitStringRT0
+PASS: gdb.cp/demangle.exp: gnu: div__FPC6IntRepT0P6IntRep
+PASS: gdb.cp/demangle.exp: gnu: div__FPC6IntReplP6IntRep
+PASS: gdb.cp/demangle.exp: gnu: div__FRC8RationalT0R8Rational
+PASS: gdb.cp/demangle.exp: gnu: divide__FRC7IntegerT0R7IntegerT2
+PASS: gdb.cp/demangle.exp: gnu: divide__FRC7IntegerlR7IntegerRl
+PASS: gdb.cp/demangle.exp: gnu: enable__14DocumentViewerPCcUi
+PASS: gdb.cp/demangle.exp: gnu: foo__FiN30
+PASS: gdb.cp/demangle.exp: gnu: foo__FiR3fooiT1iT1
+PASS: gdb.cp/demangle.exp: gnu: foo___3barl
+PASS: gdb.cp/demangle.exp: gnu: insert__15ivClippingStacklRP8_XRegion
+PASS: gdb.cp/demangle.exp: gnu: insert__16ChooserInfo_ListlR11ChooserInfo
+PASS: gdb.cp/demangle.exp: gnu: insert__17FontFamilyRepListlRP15ivFontFamilyRep
+PASS: gdb.cp/demangle.exp: gnu: leaveok__FP7_win_stc
+PASS: gdb.cp/demangle.exp: gnu: left_mover__C7ivMFKitP12ivAdjustableP7ivStyle
+PASS: gdb.cp/demangle.exp: gnu: matches__C9BitStringRC10BitPatterni
+PASS: gdb.cp/demangle.exp: gnu: matches__C9SubStringRC5Regex
+PASS: gdb.cp/demangle.exp: gnu: overload1arg__FSc
+PASS: gdb.cp/demangle.exp: gnu: overload1arg__FUc
+PASS: gdb.cp/demangle.exp: gnu: overload1arg__FUi
+PASS: gdb.cp/demangle.exp: gnu: overload1arg__FUl
+PASS: gdb.cp/demangle.exp: gnu: overload1arg__FUs
+PASS: gdb.cp/demangle.exp: gnu: overload1arg__Fc
+PASS: gdb.cp/demangle.exp: gnu: overload1arg__Fd
+PASS: gdb.cp/demangle.exp: gnu: overload1arg__Ff
+PASS: gdb.cp/demangle.exp: gnu: overload1arg__Fi
+PASS: gdb.cp/demangle.exp: gnu: overload1arg__Fl
+PASS: gdb.cp/demangle.exp: gnu: overload1arg__Fs
+PASS: gdb.cp/demangle.exp: gnu: overload1arg__Fv
+PASS: gdb.cp/demangle.exp: gnu: overloadargs__Fi
+PASS: gdb.cp/demangle.exp: gnu: overloadargs__Fii
+PASS: gdb.cp/demangle.exp: gnu: overloadargs__Fiii
+PASS: gdb.cp/demangle.exp: gnu: overloadargs__Fiiii
+PASS: gdb.cp/demangle.exp: gnu: overloadargs__Fiiiii
+PASS: gdb.cp/demangle.exp: gnu: overloadargs__Fiiiiii
+PASS: gdb.cp/demangle.exp: gnu: overloadargs__Fiiiiiii
+PASS: gdb.cp/demangle.exp: gnu: overloadargs__Fiiiiiiii
+PASS: gdb.cp/demangle.exp: gnu: overloadargs__Fiiiiiiiii
+PASS: gdb.cp/demangle.exp: gnu: overloadargs__Fiiiiiiiiii
+PASS: gdb.cp/demangle.exp: gnu: overloadargs__Fiiiiiiiiiii
+PASS: gdb.cp/demangle.exp: gnu: pick__13ivCompositionP8ivCanvasRC12ivAllocationiR5ivHit
+PASS: gdb.cp/demangle.exp: gnu: pointer__C11ivHScrollerRC7ivEventRC12ivAllocation
+PASS: gdb.cp/demangle.exp: gnu: poke__8ivRasterUlUlffff
+PASS: gdb.cp/demangle.exp: gnu: polar__Fdd
+PASS: gdb.cp/demangle.exp: gnu: read__10osStdInputRPCc
+PASS: gdb.cp/demangle.exp: gnu: scale__13ivTransformerff
+PASS: gdb.cp/demangle.exp: gnu: scanw__12CursesWindowPCce
+PASS: gdb.cp/demangle.exp: gnu: scmp__FPCcT0
+PASS: gdb.cp/demangle.exp: gnu: sgetn__7filebufPci
+PASS: gdb.cp/demangle.exp: gnu: shift__FP5_FrepiT0
+PASS: gdb.cp/demangle.exp: gnu: test__C6BitSeti
+PASS: gdb.cp/demangle.exp: gnu: test__C6BitSetii
+PASS: gdb.cp/demangle.exp: gnu: testbit__FRC7Integerl
+PASS: gdb.cp/demangle.exp: gnu: text_source__8Documentl
+PASS: gdb.cp/demangle.exp: gnu: variance__6Erlangd
+PASS: gdb.cp/demangle.exp: gnu: vform__8iostreamPCcPc
+PASS: gdb.cp/demangle.exp: gnu: view__14DocumentViewerP8ItemViewP11TabularItem
+PASS: gdb.cp/demangle.exp: gnu: xy_extents__11ivExtensionffff
+PASS: gdb.cp/demangle.exp: gnu: zero__8osMemoryPvUi
+PASS: gdb.cp/demangle.exp: gnu: _2T4$N
+PASS: gdb.cp/demangle.exp: gnu: _Q22T42t1$N
+PASS: gdb.cp/demangle.exp: gnu: get__2T1
+PASS: gdb.cp/demangle.exp: gnu: get__Q22T11a
+PASS: gdb.cp/demangle.exp: gnu: get__Q32T11a1b
+PASS: gdb.cp/demangle.exp: gnu: get__Q42T11a1b1c
+PASS: gdb.cp/demangle.exp: gnu: get__Q52T11a1b1c1d
+PASS: gdb.cp/demangle.exp: gnu: put__2T1i
+PASS: gdb.cp/demangle.exp: gnu: put__Q22T11ai
+PASS: gdb.cp/demangle.exp: gnu: put__Q32T11a1bi
+PASS: gdb.cp/demangle.exp: gnu: put__Q42T11a1b1ci
+PASS: gdb.cp/demangle.exp: gnu: put__Q52T11a1b1c1di
+PASS: gdb.cp/demangle.exp: gnu: bar__3fooPv
+PASS: gdb.cp/demangle.exp: gnu: bar__3fooPCv
+PASS: gdb.cp/demangle.exp: gnu: bar__C3fooPv
+PASS: gdb.cp/demangle.exp: gnu: bar__C3fooPCv
+PASS: gdb.cp/demangle.exp: gnu: __eq__3fooRT0
+PASS: gdb.cp/demangle.exp: gnu: __eq__3fooRC3foo
+PASS: gdb.cp/demangle.exp: gnu: __eq__C3fooR3foo
+PASS: gdb.cp/demangle.exp: gnu: __eq__C3fooRT0
+PASS: gdb.cp/demangle.exp: gnu: elem__t6vector1Zdi
+PASS: gdb.cp/demangle.exp: gnu: elem__t6vector1Zii
+PASS: gdb.cp/demangle.exp: gnu: __t6vector1Zdi
+PASS: gdb.cp/demangle.exp: gnu: __t6vector1Zii
+PASS: gdb.cp/demangle.exp: gnu: _$_t6vector1Zdi
+PASS: gdb.cp/demangle.exp: gnu: _$_t6vector1Zii
+PASS: gdb.cp/demangle.exp: gnu: __nw__t2T11ZcUi
+PASS: gdb.cp/demangle.exp: gnu: __nw__t2T11Z1tUi
+PASS: gdb.cp/demangle.exp: gnu: __dl__t2T11ZcPv
+PASS: gdb.cp/demangle.exp: gnu: __dl__t2T11Z1tPv
+PASS: gdb.cp/demangle.exp: gnu: __t2T11Zci
+PASS: gdb.cp/demangle.exp: gnu: __t2T11Zc
+PASS: gdb.cp/demangle.exp: gnu: __t2T11Z1ti
+PASS: gdb.cp/demangle.exp: gnu: __t2T11Z1t
+PASS: gdb.cp/demangle.exp: gnu: __Q2t4List1Z10VHDLEntity3Pix
+PASS: gdb.cp/demangle.exp: gnu: __Q2t4List1Z10VHDLEntity3PixPQ2t4List1Z10VHDLEntity7element
+PASS: gdb.cp/demangle.exp: gnu: __Q2t4List1Z10VHDLEntity3PixRCQ2t4List1Z10VHDLEntity3Pix
+PASS: gdb.cp/demangle.exp: gnu: __Q2t4List1Z10VHDLEntity7elementRC10VHDLEntityPT0
+PASS: gdb.cp/demangle.exp: gnu: __Q2t4List1Z10VHDLEntity7elementRCQ2t4List1Z10VHDLEntity7element
+PASS: gdb.cp/demangle.exp: gnu: __cl__C11VHDLLibraryGt4PixX3Z11VHDLLibraryZ14VHDLLibraryRepZt4List1Z10VHDLEntity
+PASS: gdb.cp/demangle.exp: gnu: __cl__Ct4List1Z10VHDLEntityRCQ2t4List1Z10VHDLEntity3Pix
+PASS: gdb.cp/demangle.exp: gnu: __ne__FPvRCQ2t4List1Z10VHDLEntity3Pix
+PASS: gdb.cp/demangle.exp: gnu: __ne__FPvRCt4PixX3Z11VHDLLibraryZ14VHDLLibraryRepZt4List1Z10VHDLEntity
+PASS: gdb.cp/demangle.exp: gnu: __t4List1Z10VHDLEntityRCt4List1Z10VHDLEntity
+PASS: gdb.cp/demangle.exp: gnu: __t4PixX3Z11VHDLLibraryZ14VHDLLibraryRepZt4List1Z10VHDLEntity
+PASS: gdb.cp/demangle.exp: gnu: __t4PixX3Z11VHDLLibraryZ14VHDLLibraryRepZt4List1Z10VHDLEntityP14VHDLLibraryRepGQ2t4List1Z10VHDLEntity3Pix
+PASS: gdb.cp/demangle.exp: gnu: __t4PixX3Z11VHDLLibraryZ14VHDLLibraryRepZt4List1Z10VHDLEntityRCt4PixX3Z11VHDLLibraryZ14VHDLLibraryRepZt4List1Z10VHDLEntity
+PASS: gdb.cp/demangle.exp: gnu: nextE__C11VHDLLibraryRt4PixX3Z11VHDLLibraryZ14VHDLLibraryRepZt4List1Z10VHDLEntity
+PASS: gdb.cp/demangle.exp: gnu: next__Ct4List1Z10VHDLEntityRQ2t4List1Z10VHDLEntity3Pix
+PASS: gdb.cp/demangle.exp: gnu: _GLOBAL_$D$set
+PASS: gdb.cp/demangle.exp: gnu: _GLOBAL_$I$set
+PASS: gdb.cp/demangle.exp: gnu: __as__t5ListS1ZUiRCt5ListS1ZUi
+PASS: gdb.cp/demangle.exp: gnu: __cl__Ct5ListS1ZUiRCQ2t5ListS1ZUi3Vix
+PASS: gdb.cp/demangle.exp: gnu: __cl__Ct5SetLS1ZUiRCQ2t5SetLS1ZUi3Vix
+PASS: gdb.cp/demangle.exp: gnu: __t10ListS_link1ZUiRCUiPT0
+PASS: gdb.cp/demangle.exp: gnu: __t10ListS_link1ZUiRCt10ListS_link1ZUi
+PASS: gdb.cp/demangle.exp: gnu: __t5ListS1ZUiRCt5ListS1ZUi
+PASS: gdb.cp/demangle.exp: gnu: next__Ct5ListS1ZUiRQ2t5ListS1ZUi3Vix
+PASS: gdb.cp/demangle.exp: gnu: __ne__FPvRCQ2t5SetLS1ZUi3Vix
+PASS: gdb.cp/demangle.exp: gnu: __t8ListElem1Z5LabelRt4List1Z5Label
+PASS: gdb.cp/demangle.exp: gnu: __t8BDDHookV1ZPcRCPc
+PASS: gdb.cp/demangle.exp: gnu: _vt$t8BDDHookV1ZPc
+PASS: gdb.cp/demangle.exp: gnu: __ne__FPvRCQ211BDDFunction4VixB
+PASS: gdb.cp/demangle.exp: gnu: __eq__FPvRCQ211BDDFunction4VixB
+PASS: gdb.cp/demangle.exp: gnu: relativeId__CQ36T_phi210T_preserve8FPC_nextRCQ26T_phi210T_preserveRC10Parameters
+PASS: gdb.cp/demangle.exp: gnu: _Utf390_1__1_9223372036854775807__9223372036854775
+PASS: gdb.cp/demangle.exp: gnu: foo__I40
+PASS: gdb.cp/demangle.exp: gnu: foo__I_200_
+PASS: gdb.cp/demangle.exp: gnu: foo__I_200
+PASS: gdb.cp/demangle.exp: gnu: foo__I_4000000000000000000000000000000000000000000000000000000000000000000000000
+PASS: gdb.cp/demangle.exp: gnu: __thunk_64__0RL__list__Q29CosNaming20_proxy_NamingContextUlRPt25_CORBA_Unbounded_Sequence1ZQ29CosNaming7BindingRPQ29CosNaming15BindingIterator
+PASS: gdb.cp/demangle.exp: arm: set demangle-style
+PASS: gdb.cp/demangle.exp: arm: check demangling style
+PASS: gdb.cp/demangle.exp: arm: __dt__21T5__pt__11_PFiPPdPv_iFv
+PASS: gdb.cp/demangle.exp: arm: __ct__1cFi
+PASS: gdb.cp/demangle.exp: arm: __dt__11T5__pt__2_iFv
+PASS: gdb.cp/demangle.exp: arm: __dt__11T5__pt__2_cFv
+PASS: gdb.cp/demangle.exp: arm: __ct__2T2Fi
+PASS: gdb.cp/demangle.exp: arm: __dt__2T1Fv
+PASS: gdb.cp/demangle.exp: arm: __dt__12T5__pt__3_1xFv
+PASS: gdb.cp/demangle.exp: arm: __dt__17T5__pt__8_PFcPv_iFv
+PASS: gdb.cp/demangle.exp: arm: g__FP1cPC1cT1
+PASS: gdb.cp/demangle.exp: arm: g__FPUlPCUlT1
+PASS: gdb.cp/demangle.exp: arm: g__FPUiPCUiT1
+PASS: gdb.cp/demangle.exp: arm: g__FPUsPCUsT1
+PASS: gdb.cp/demangle.exp: arm: g__FPUcPCUcT1
+PASS: gdb.cp/demangle.exp: arm: g__F1TPlPClT2
+PASS: gdb.cp/demangle.exp: arm: g__F1RRlRClT2
+PASS: gdb.cp/demangle.exp: arm: g__F1TPiPCiT2
+PASS: gdb.cp/demangle.exp: arm: g__F1RRiRCiT2
+PASS: gdb.cp/demangle.exp: arm: g__F1TPsPCsT2
+PASS: gdb.cp/demangle.exp: arm: g__F1RRsRCsT2
+PASS: gdb.cp/demangle.exp: arm: g__F1TPcPCcT2
+PASS: gdb.cp/demangle.exp: arm: g__F1RRcRCcT2
+PASS: gdb.cp/demangle.exp: arm: __ct__21T5__pt__11_PFiPPdPv_iFi
+PASS: gdb.cp/demangle.exp: arm: __gt__FRC2T2c
+PASS: gdb.cp/demangle.exp: arm: __ge__FRC2T2c
+PASS: gdb.cp/demangle.exp: arm: __lt__FRC2T2c
+PASS: gdb.cp/demangle.exp: arm: __le__FRC2T2c
+PASS: gdb.cp/demangle.exp: arm: __ne__FRC2T2c
+PASS: gdb.cp/demangle.exp: arm: __eq__FRC2T2c
+PASS: gdb.cp/demangle.exp: arm: __amd__FR2T2i
+PASS: gdb.cp/demangle.exp: arm: __adv__FR2T2i
+PASS: gdb.cp/demangle.exp: arm: __amu__FR2T2i
+PASS: gdb.cp/demangle.exp: arm: __ami__FR2T2i
+PASS: gdb.cp/demangle.exp: arm: __apl__FR2T2i
+PASS: gdb.cp/demangle.exp: arm: __nw__2T1SFUi
+PASS: gdb.cp/demangle.exp: arm: __dl__2T1SFPv
+PASS: gdb.cp/demangle.exp: arm: put__2T7SFi
+PASS: gdb.cp/demangle.exp: arm: __dl__12T5__pt__3_1xSFPv
+PASS: gdb.cp/demangle.exp: arm: h__FUc
+PASS: gdb.cp/demangle.exp: arm: f__Fic
+PASS: gdb.cp/demangle.exp: arm: h__FUi
+PASS: gdb.cp/demangle.exp: arm: h__Fci
+PASS: gdb.cp/demangle.exp: arm: h__FUl
+PASS: gdb.cp/demangle.exp: arm: h__Fcl
+PASS: gdb.cp/demangle.exp: arm: h__FUs
+PASS: gdb.cp/demangle.exp: arm: h__Fcs
+PASS: gdb.cp/demangle.exp: arm: __amd__FR2T2RC2T2
+PASS: gdb.cp/demangle.exp: arm: __adv__FR2T2RC2T2
+PASS: gdb.cp/demangle.exp: arm: __amu__FR2T2RC2T2
+PASS: gdb.cp/demangle.exp: arm: __ami__FR2T2RC2T2
+PASS: gdb.cp/demangle.exp: arm: __apl__FR2T2RC2T2
+PASS: gdb.cp/demangle.exp: arm: g__F1SRPUlRPCUlT2
+PASS: gdb.cp/demangle.exp: arm: g__F1SRPUiRPCUiT2
+PASS: gdb.cp/demangle.exp: arm: g__F1SRPUsRPCUsT2
+PASS: gdb.cp/demangle.exp: arm: g__F1SRPUcRPCUcT2
+PASS: gdb.cp/demangle.exp: arm: g__F1T1SRPlRPClT3
+PASS: gdb.cp/demangle.exp: arm: g__F1T1SRPiRPCiT3
+PASS: gdb.cp/demangle.exp: arm: g__F1T1SRPcRPCcT3
+PASS: gdb.cp/demangle.exp: arm: X__12T5__pt__3_1x
+PASS: gdb.cp/demangle.exp: arm: __ct__11T5__pt__2_iFi
+PASS: gdb.cp/demangle.exp: arm: __ct__11T5__pt__2_cFi
+PASS: gdb.cp/demangle.exp: arm: __gt__FRC2T2T1
+PASS: gdb.cp/demangle.exp: arm: __ge__FRC2T2T1
+PASS: gdb.cp/demangle.exp: arm: __lt__FRC2T2T1
+PASS: gdb.cp/demangle.exp: arm: __le__FRC2T2T1
+PASS: gdb.cp/demangle.exp: arm: __ne__FRC2T2T1
+PASS: gdb.cp/demangle.exp: arm: __eq__FRC2T2T1
+PASS: gdb.cp/demangle.exp: arm: g__FcR1cRC1cT2
+PASS: gdb.cp/demangle.exp: arm: g__FcRPdRPCdT2
+PASS: gdb.cp/demangle.exp: arm: g__FcRPfRPCfT2
+PASS: gdb.cp/demangle.exp: arm: h__FcT1
+PASS: gdb.cp/demangle.exp: arm: f__Ficd
+PASS: gdb.cp/demangle.exp: arm: g__F1T1SdRPsRPCsT4
+PASS: gdb.cp/demangle.exp: arm: g__F1cC1cT1
+PASS: gdb.cp/demangle.exp: arm: g__FPdPCdT1
+PASS: gdb.cp/demangle.exp: arm: g__FPfPCfT1
+PASS: gdb.cp/demangle.exp: arm: g__FUlCUlT1
+PASS: gdb.cp/demangle.exp: arm: g__FPlPClT1
+PASS: gdb.cp/demangle.exp: arm: g__FUiCUiT1
+PASS: gdb.cp/demangle.exp: arm: g__FPiPCiT1
+PASS: gdb.cp/demangle.exp: arm: g__FUsCUsT1
+PASS: gdb.cp/demangle.exp: arm: g__FPsPCsT1
+PASS: gdb.cp/demangle.exp: arm: g__FUcCUcT1
+PASS: gdb.cp/demangle.exp: arm: g__FPcPCcT1
+PASS: gdb.cp/demangle.exp: arm: g__F1TlClT2
+PASS: gdb.cp/demangle.exp: arm: g__F1TiCiT2
+PASS: gdb.cp/demangle.exp: arm: g__F1TsCsT2
+PASS: gdb.cp/demangle.exp: arm: g__F1TcCcT2
+PASS: gdb.cp/demangle.exp: arm: __dl__17T5__pt__8_PFcPv_iSFPv
+PASS: gdb.cp/demangle.exp: arm: printf__FPCce
+PASS: gdb.cp/demangle.exp: arm: X__17T5__pt__8_PFcPv_i
+PASS: gdb.cp/demangle.exp: arm: __ct__12T5__pt__3_1xFi
+PASS: gdb.cp/demangle.exp: arm: g__F1SRUlRCUlT2
+PASS: gdb.cp/demangle.exp: arm: g__F1SRPlRPClT2
+PASS: gdb.cp/demangle.exp: arm: g__F1RRUiRCUiT2
+PASS: gdb.cp/demangle.exp: arm: g__F1SRPiRPCiT2
+PASS: gdb.cp/demangle.exp: arm: g__F1RRUsRCUsT2
+PASS: gdb.cp/demangle.exp: arm: g__F1SRPsRPCsT2
+PASS: gdb.cp/demangle.exp: arm: g__F1RRUcRCUcT2
+PASS: gdb.cp/demangle.exp: arm: g__F1SRPcRPCcT2
+PASS: gdb.cp/demangle.exp: arm: g__F1T1RRlRClT3
+PASS: gdb.cp/demangle.exp: arm: g__F1T1RRiRCiT3
+PASS: gdb.cp/demangle.exp: arm: g__F1T1RRsRCsT3
+PASS: gdb.cp/demangle.exp: arm: g__F1T1RRcRCcT3
+PASS: gdb.cp/demangle.exp: arm: __dl__21T5__pt__11_PFiPPdPv_iSFPv
+PASS: gdb.cp/demangle.exp: arm: __std__foo
+PASS: gdb.cp/demangle.exp: arm: __sti__bar
+PASS: gdb.cp/demangle.exp: arm: f__FicdPcPFci_v
+PASS: gdb.cp/demangle.exp: arm: f__FicdPcPFic_v
+PASS: gdb.cp/demangle.exp: arm: get__2T7SFv
+PASS: gdb.cp/demangle.exp: arm: X__21T5__pt__11_PFiPPdPv_i
+PASS: gdb.cp/demangle.exp: arm: g__FcRdRCdT2
+PASS: gdb.cp/demangle.exp: arm: g__FcRfRCfT2
+PASS: gdb.cp/demangle.exp: arm: __md__FC2T2i
+PASS: gdb.cp/demangle.exp: arm: __dv__FC2T2i
+PASS: gdb.cp/demangle.exp: arm: __ml__FC2T2i
+PASS: gdb.cp/demangle.exp: arm: __mi__FC2T2i
+PASS: gdb.cp/demangle.exp: arm: __pl__FC2T2i
+PASS: gdb.cp/demangle.exp: arm: __dl__11T5__pt__2_iSFPv
+PASS: gdb.cp/demangle.exp: arm: __dl__11T5__pt__2_cSFPv
+PASS: gdb.cp/demangle.exp: arm: h__Fc
+PASS: gdb.cp/demangle.exp: arm: h__Fd
+PASS: gdb.cp/demangle.exp: arm: h__Ff
+PASS: gdb.cp/demangle.exp: arm: h__Fi
+PASS: gdb.cp/demangle.exp: arm: f__Fi
+PASS: gdb.cp/demangle.exp: arm: h__Fl
+PASS: gdb.cp/demangle.exp: arm: h__Fs
+PASS: gdb.cp/demangle.exp: arm: __md__FC2T2RC2T2
+PASS: gdb.cp/demangle.exp: arm: __dv__FC2T2RC2T2
+PASS: gdb.cp/demangle.exp: arm: __ml__FC2T2RC2T2
+PASS: gdb.cp/demangle.exp: arm: __mi__FC2T2RC2T2
+PASS: gdb.cp/demangle.exp: arm: __pl__FC2T2RC2T2
+PASS: gdb.cp/demangle.exp: arm: g__FcRP1cRPC1cT2
+PASS: gdb.cp/demangle.exp: arm: X__11T5__pt__2_c
+PASS: gdb.cp/demangle.exp: arm: X__11T5__pt__2_i
+PASS: gdb.cp/demangle.exp: arm: g__FdCdT1
+PASS: gdb.cp/demangle.exp: arm: g__FfCfT1
+PASS: gdb.cp/demangle.exp: arm: g__FlClT1
+PASS: gdb.cp/demangle.exp: arm: g__FiCiT1
+PASS: gdb.cp/demangle.exp: arm: g__FsCsT1
+PASS: gdb.cp/demangle.exp: arm: g__FcCcT1
+PASS: gdb.cp/demangle.exp: arm: __ct__17T5__pt__8_PFcPv_iFi
+PASS: gdb.cp/demangle.exp: arm: f__FicdPc
+PASS: gdb.cp/demangle.exp: arm: __nw__FUi
+PASS: gdb.cp/demangle.exp: arm: __ct__Q3_2T11a1bSFi
+PASS: gdb.cp/demangle.exp: arm: __dt__Q3_2T11a1bSFi
+PASS: gdb.cp/demangle.exp: arm: put__Q3_2T11a1bSFi
+PASS: gdb.cp/demangle.exp: arm: get__Q2_2T11aSFv
+PASS: gdb.cp/demangle.exp: arm: put__2T1SFi
+PASS: gdb.cp/demangle.exp: arm: put__Q5_2T11a1b1c1dSFi
+PASS: gdb.cp/demangle.exp: arm: get__Q4_2T11a1b1cSFv
+PASS: gdb.cp/demangle.exp: arm: put__Q2_2T11aSFi
+PASS: gdb.cp/demangle.exp: arm: put__Q4_2T11a1b1cSFi
+PASS: gdb.cp/demangle.exp: arm: get__Q3_2T11a1bSFv
+PASS: gdb.cp/demangle.exp: arm: get__2T1SFv
+PASS: gdb.cp/demangle.exp: arm: get__Q5_2T11a1b1c1dSFv
+PASS: gdb.cp/demangle.exp: arm: __dt__11T1__pt__2_cFv
+PASS: gdb.cp/demangle.exp: arm: __dt__12T1__pt__3_1tFv
+PASS: gdb.cp/demangle.exp: arm: __dl__12T1__pt__3_1tSFPv
+PASS: gdb.cp/demangle.exp: arm: __ct__11T1__pt__2_cFi
+PASS: gdb.cp/demangle.exp: arm: __ct__11T1__pt__2_cFv
+PASS: gdb.cp/demangle.exp: arm: __ct__12T1__pt__3_1tFi
+PASS: gdb.cp/demangle.exp: arm: __ct__12T1__pt__3_1tFv
+PASS: gdb.cp/demangle.exp: arm: __dl__11T1__pt__2_cSFPv
+PASS: gdb.cp/demangle.exp: arm: bar__3fooFPv
+PASS: gdb.cp/demangle.exp: arm: bar__3fooFPCv
+PASS: gdb.cp/demangle.exp: arm: bar__3fooCFPv
+PASS: gdb.cp/demangle.exp: arm: bar__3fooCFPCv
+PASS: gdb.cp/demangle.exp: arm: __eq__3fooFR3foo
+PASS: gdb.cp/demangle.exp: arm: __eq__3fooFRC3foo
+PASS: gdb.cp/demangle.exp: arm: __eq__3fooCFR3foo
+PASS: gdb.cp/demangle.exp: arm: __eq__3fooCFRC3foo
+PASS: gdb.cp/demangle.exp: arm: elem__15vector__pt__2_dFi
+PASS: gdb.cp/demangle.exp: arm: elem__15vector__pt__2_iFi
+PASS: gdb.cp/demangle.exp: arm: __ct__15vector__pt__2_dFi
+PASS: gdb.cp/demangle.exp: arm: __ct__15vector__pt__2_iFi
+PASS: gdb.cp/demangle.exp: arm: __ct__25DListNode__pt__9_R6RLabelFR6RLabelP25DListNode__pt__9_R6RLabelT2
+PASS: gdb.cp/demangle.exp: arm: bar__3fooFiT16FooBar
+PASS: gdb.cp/demangle.exp: arm: bar__3fooFPiN51PdN37PcN211T1iN215
+PASS: gdb.cp/demangle.exp: arm: _Utf390_1__1_9223372036854775807__9223372036854775
+PASS: gdb.cp/demangle.exp: hp: set demangle-style
+PASS: gdb.cp/demangle.exp: hp: check demangling style
+PASS: gdb.cp/demangle.exp: hp: g__FP1cPC1cT1
+PASS: gdb.cp/demangle.exp: hp: g__FPUlPCUlT1
+PASS: gdb.cp/demangle.exp: hp: g__FPUiPCUiT1
+PASS: gdb.cp/demangle.exp: hp: g__FPUsPCUsT1
+PASS: gdb.cp/demangle.exp: hp: g__FPUcPCUcT1
+PASS: gdb.cp/demangle.exp: hp: g__F1TPlPClT2
+PASS: gdb.cp/demangle.exp: hp: g__F1RRlRClT2
+PASS: gdb.cp/demangle.exp: hp: g__F1TPiPCiT2
+PASS: gdb.cp/demangle.exp: hp: g__F1RRiRCiT2
+PASS: gdb.cp/demangle.exp: hp: g__F1TPsPCsT2
+PASS: gdb.cp/demangle.exp: hp: g__F1RRsRCsT2
+PASS: gdb.cp/demangle.exp: hp: g__F1TPcPCcT2
+PASS: gdb.cp/demangle.exp: hp: g__F1RRcRCcT2
+PASS: gdb.cp/demangle.exp: hp: __gt__FRC2T2c
+PASS: gdb.cp/demangle.exp: hp: __ge__FRC2T2c
+PASS: gdb.cp/demangle.exp: hp: __lt__FRC2T2c
+PASS: gdb.cp/demangle.exp: hp: __le__FRC2T2c
+PASS: gdb.cp/demangle.exp: hp: __ne__FRC2T2c
+PASS: gdb.cp/demangle.exp: hp: __eq__FRC2T2c
+PASS: gdb.cp/demangle.exp: hp: __amd__FR2T2i
+PASS: gdb.cp/demangle.exp: hp: __adv__FR2T2i
+PASS: gdb.cp/demangle.exp: hp: __amu__FR2T2i
+PASS: gdb.cp/demangle.exp: hp: __ami__FR2T2i
+PASS: gdb.cp/demangle.exp: hp: __apl__FR2T2i
+PASS: gdb.cp/demangle.exp: hp: __nw__2T1SFUi
+PASS: gdb.cp/demangle.exp: hp: __dl__2T1SFPv
+PASS: gdb.cp/demangle.exp: hp: put__2T7SFi
+PASS: gdb.cp/demangle.exp: hp: h__FUc
+PASS: gdb.cp/demangle.exp: hp: f__Fic
+PASS: gdb.cp/demangle.exp: hp: h__FUi
+PASS: gdb.cp/demangle.exp: hp: h__Fci
+PASS: gdb.cp/demangle.exp: hp: h__FUl
+PASS: gdb.cp/demangle.exp: hp: h__Fcl
+PASS: gdb.cp/demangle.exp: hp: h__FUs
+PASS: gdb.cp/demangle.exp: hp: h__Fcs
+PASS: gdb.cp/demangle.exp: hp: __amd__FR2T2RC2T2
+PASS: gdb.cp/demangle.exp: hp: __adv__FR2T2RC2T2
+PASS: gdb.cp/demangle.exp: hp: __amu__FR2T2RC2T2
+PASS: gdb.cp/demangle.exp: hp: __ami__FR2T2RC2T2
+PASS: gdb.cp/demangle.exp: hp: __apl__FR2T2RC2T2
+PASS: gdb.cp/demangle.exp: hp: g__F1SRPUlRPCUlT2
+PASS: gdb.cp/demangle.exp: hp: g__F1SRPUiRPCUiT2
+PASS: gdb.cp/demangle.exp: hp: g__F1SRPUsRPCUsT2
+PASS: gdb.cp/demangle.exp: hp: g__F1SRPUcRPCUcT2
+PASS: gdb.cp/demangle.exp: hp: g__F1T1SRPlRPClT3
+PASS: gdb.cp/demangle.exp: hp: g__F1T1SRPiRPCiT3
+PASS: gdb.cp/demangle.exp: hp: g__F1T1SRPcRPCcT3
+PASS: gdb.cp/demangle.exp: hp: __gt__FRC2T2T1
+PASS: gdb.cp/demangle.exp: hp: __ge__FRC2T2T1
+PASS: gdb.cp/demangle.exp: hp: __lt__FRC2T2T1
+PASS: gdb.cp/demangle.exp: hp: __le__FRC2T2T1
+PASS: gdb.cp/demangle.exp: hp: __ne__FRC2T2T1
+PASS: gdb.cp/demangle.exp: hp: __eq__FRC2T2T1
+PASS: gdb.cp/demangle.exp: hp: g__FcR1cRC1cT2
+PASS: gdb.cp/demangle.exp: hp: g__FcRPdRPCdT2
+PASS: gdb.cp/demangle.exp: hp: g__FcRPfRPCfT2
+PASS: gdb.cp/demangle.exp: hp: h__FcT1
+PASS: gdb.cp/demangle.exp: hp: f__Ficd
+PASS: gdb.cp/demangle.exp: hp: g__F1T1SdRPsRPCsT4
+PASS: gdb.cp/demangle.exp: hp: g__F1cC1cT1
+PASS: gdb.cp/demangle.exp: hp: g__FPdPCdT1
+PASS: gdb.cp/demangle.exp: hp: g__FPfPCfT1
+PASS: gdb.cp/demangle.exp: hp: g__FUlCUlT1
+PASS: gdb.cp/demangle.exp: hp: g__FPlPClT1
+PASS: gdb.cp/demangle.exp: hp: g__FUiCUiT1
+PASS: gdb.cp/demangle.exp: hp: g__FPiPCiT1
+PASS: gdb.cp/demangle.exp: hp: g__FUsCUsT1
+PASS: gdb.cp/demangle.exp: hp: g__FPsPCsT1
+PASS: gdb.cp/demangle.exp: hp: g__FUcCUcT1
+PASS: gdb.cp/demangle.exp: hp: g__FPcPCcT1
+PASS: gdb.cp/demangle.exp: hp: g__F1TlClT2
+PASS: gdb.cp/demangle.exp: hp: g__F1TiCiT2
+PASS: gdb.cp/demangle.exp: hp: g__F1TsCsT2
+PASS: gdb.cp/demangle.exp: hp: g__F1TcCcT2
+PASS: gdb.cp/demangle.exp: hp: printf__FPCce
+PASS: gdb.cp/demangle.exp: hp: g__F1SRUlRCUlT2
+PASS: gdb.cp/demangle.exp: hp: g__F1SRPlRPClT2
+PASS: gdb.cp/demangle.exp: hp: g__F1RRUiRCUiT2
+PASS: gdb.cp/demangle.exp: hp: g__F1SRPiRPCiT2
+PASS: gdb.cp/demangle.exp: hp: g__F1RRUsRCUsT2
+PASS: gdb.cp/demangle.exp: hp: g__F1SRPsRPCsT2
+PASS: gdb.cp/demangle.exp: hp: g__F1RRUcRCUcT2
+PASS: gdb.cp/demangle.exp: hp: g__F1SRPcRPCcT2
+PASS: gdb.cp/demangle.exp: hp: g__F1T1RRlRClT3
+PASS: gdb.cp/demangle.exp: hp: g__F1T1RRiRCiT3
+PASS: gdb.cp/demangle.exp: hp: g__F1T1RRsRCsT3
+PASS: gdb.cp/demangle.exp: hp: g__F1T1RRcRCcT3
+PASS: gdb.cp/demangle.exp: hp: f__FicdPcPFci_v
+PASS: gdb.cp/demangle.exp: hp: f__FicdPcPFic_v
+PASS: gdb.cp/demangle.exp: hp: get__2T7SFv
+PASS: gdb.cp/demangle.exp: hp: g__FcRdRCdT2
+PASS: gdb.cp/demangle.exp: hp: g__FcRfRCfT2
+PASS: gdb.cp/demangle.exp: hp: __md__FC2T2i
+PASS: gdb.cp/demangle.exp: hp: __dv__FC2T2i
+PASS: gdb.cp/demangle.exp: hp: __ml__FC2T2i
+PASS: gdb.cp/demangle.exp: hp: __mi__FC2T2i
+PASS: gdb.cp/demangle.exp: hp: __pl__FC2T2i
+PASS: gdb.cp/demangle.exp: hp: h__Fc
+PASS: gdb.cp/demangle.exp: hp: h__Fd
+PASS: gdb.cp/demangle.exp: hp: h__Ff
+PASS: gdb.cp/demangle.exp: hp: h__Fi
+PASS: gdb.cp/demangle.exp: hp: f__Fi
+PASS: gdb.cp/demangle.exp: hp: h__Fl
+PASS: gdb.cp/demangle.exp: hp: h__Fs
+PASS: gdb.cp/demangle.exp: hp: __md__FC2T2RC2T2
+PASS: gdb.cp/demangle.exp: hp: __dv__FC2T2RC2T2
+PASS: gdb.cp/demangle.exp: hp: __ml__FC2T2RC2T2
+PASS: gdb.cp/demangle.exp: hp: __mi__FC2T2RC2T2
+PASS: gdb.cp/demangle.exp: hp: __pl__FC2T2RC2T2
+PASS: gdb.cp/demangle.exp: hp: g__FcRP1cRPC1cT2
+PASS: gdb.cp/demangle.exp: hp: g__FdCdT1
+PASS: gdb.cp/demangle.exp: hp: g__FfCfT1
+PASS: gdb.cp/demangle.exp: hp: g__FlClT1
+PASS: gdb.cp/demangle.exp: hp: g__FiCiT1
+PASS: gdb.cp/demangle.exp: hp: g__FsCsT1
+PASS: gdb.cp/demangle.exp: hp: g__FcCcT1
+PASS: gdb.cp/demangle.exp: hp: f__FicdPc
+PASS: gdb.cp/demangle.exp: hp: __nw__FUi
+PASS: gdb.cp/demangle.exp: hp: __ct__Q3_2T11a1bSFi
+PASS: gdb.cp/demangle.exp: hp: __dt__Q3_2T11a1bSFi
+PASS: gdb.cp/demangle.exp: hp: put__Q3_2T11a1bSFi
+PASS: gdb.cp/demangle.exp: hp: get__Q2_2T11aSFv
+PASS: gdb.cp/demangle.exp: hp: put__2T1SFi
+PASS: gdb.cp/demangle.exp: hp: put__Q5_2T11a1b1c1dSFi
+PASS: gdb.cp/demangle.exp: hp: get__Q4_2T11a1b1cSFv
+PASS: gdb.cp/demangle.exp: hp: put__Q2_2T11aSFi
+PASS: gdb.cp/demangle.exp: hp: put__Q4_2T11a1b1cSFi
+PASS: gdb.cp/demangle.exp: hp: get__Q3_2T11a1bSFv
+PASS: gdb.cp/demangle.exp: hp: get__2T1SFv
+PASS: gdb.cp/demangle.exp: hp: get__Q5_2T11a1b1c1dSFv
+PASS: gdb.cp/demangle.exp: hp: bar__3fooFPv
+PASS: gdb.cp/demangle.exp: hp: bar__3fooFPCv
+PASS: gdb.cp/demangle.exp: hp: bar__3fooCFPv
+PASS: gdb.cp/demangle.exp: hp: bar__3fooCFPCv
+PASS: gdb.cp/demangle.exp: hp: __eq__3fooFR3foo
+PASS: gdb.cp/demangle.exp: hp: __eq__3fooFRC3foo
+PASS: gdb.cp/demangle.exp: hp: __eq__3fooCFR3foo
+PASS: gdb.cp/demangle.exp: hp: __eq__3fooCFRC3foo
+PASS: gdb.cp/demangle.exp: hp: bar__3fooFiT16FooBar
+PASS: gdb.cp/demangle.exp: hp: bar__3fooFPiN51PdN37PcN211T1iN215
+PASS: gdb.cp/demangle.exp: hp: __dt__2T5XTPFiPPdPv_i__Fv
+PASS: gdb.cp/demangle.exp: hp: __ct__1cFi
+PASS: gdb.cp/demangle.exp: hp: __dt__2T5XTi__Fv
+PASS: gdb.cp/demangle.exp: hp: __dt__2T5XTc__Fv
+PASS: gdb.cp/demangle.exp: hp: __ct__2T2Fi
+PASS: gdb.cp/demangle.exp: hp: __dt__2T1Fv
+PASS: gdb.cp/demangle.exp: hp: __dt__2T5XT1x__Fv
+PASS: gdb.cp/demangle.exp: hp: __dt__2T5XTPFcPv_i__Fv
+PASS: gdb.cp/demangle.exp: hp: __ct__2T5XTPFiPPdPv_i__Fi
+PASS: gdb.cp/demangle.exp: hp: __dl__2T5XT1x__SFPv
+PASS: gdb.cp/demangle.exp: hp: X__2T5XT1x
+PASS: gdb.cp/demangle.exp: hp: __ct__2T5XTi__Fi
+PASS: gdb.cp/demangle.exp: hp: __ct__2T5XTc__Fi
+PASS: gdb.cp/demangle.exp: hp: __dl__2T5XTPFcPv_i__SFPv
+PASS: gdb.cp/demangle.exp: hp: X__2T5XTPFcPv_i
+PASS: gdb.cp/demangle.exp: hp: __ct__2T5XT1x__Fi
+PASS: gdb.cp/demangle.exp: hp: __dl__2T5XTPFiPPdPv_i__SFPv
+PASS: gdb.cp/demangle.exp: hp: X__2T5XTPFiPPdPv_i
+PASS: gdb.cp/demangle.exp: hp: __dl__2T5XTi__SFPv
+PASS: gdb.cp/demangle.exp: hp: __dl__2T5XTc__SFPv
+PASS: gdb.cp/demangle.exp: hp: X__2T5XTc
+PASS: gdb.cp/demangle.exp: hp: X__2T5XTi
+PASS: gdb.cp/demangle.exp: hp: __ct__2T5XTPFcPv_i__Fi
+PASS: gdb.cp/demangle.exp: hp: __dt__2T1XTc__Fv
+PASS: gdb.cp/demangle.exp: hp: __dt__2T1XT1t__Fv
+PASS: gdb.cp/demangle.exp: hp: __dl__2T1XT1t__SFPv
+PASS: gdb.cp/demangle.exp: hp: __ct__2T1XTc__Fi
+PASS: gdb.cp/demangle.exp: hp: __ct__2T1XTc__Fv
+PASS: gdb.cp/demangle.exp: hp: __ct__2T1XT1t__Fi
+PASS: gdb.cp/demangle.exp: hp: __ct__2T1XT1t__Fv
+PASS: gdb.cp/demangle.exp: hp: __dl__2T1XTc__SFPv
+PASS: gdb.cp/demangle.exp: hp: elem__6vectorXTd__Fi
+PASS: gdb.cp/demangle.exp: hp: elem__6vectorXTi__Fi
+PASS: gdb.cp/demangle.exp: hp: __ct__6vectorXTd__Fi
+PASS: gdb.cp/demangle.exp: hp: __ct__6vectorXTi__Fi
+PASS: gdb.cp/demangle.exp: hp: __ct__9DListNodeXTR6RLabel__FR6RLabelP9DListNodeXTR6RLabel_T2
+PASS: gdb.cp/demangle.exp: hp: elem__6vectorXTiUP34__Fi
+PASS: gdb.cp/demangle.exp: hp: elem__6vectorXUP2701Td__Fi
+PASS: gdb.cp/demangle.exp: hp: elem__6vectorXTiSP334__Fi
+PASS: gdb.cp/demangle.exp: hp: elem__6vectorXTiSN67__Fi
+PASS: gdb.cp/demangle.exp: hp: elem__6vectorXTiSM__SCFPPd
+PASS: gdb.cp/demangle.exp: hp: elem__6vectorXTiSN67UP4000TRs__Fi
+PASS: gdb.cp/demangle.exp: hp: elem__6vectorXTiSN67TRdTFPv_i__Fi
+PASS: gdb.cp/demangle.exp: hp: X__6vectorXTiSN67TdTPvUP5TRs
+PASS: gdb.cp/demangle.exp: hp: elem__6vectorXTiA3foo__Fi
+PASS: gdb.cp/demangle.exp: hp: elem__6vectorXTiA3fooTPvA5Label__FiPPvT2
+PASS: gdb.cp/demangle.exp: hp: elem__6vectorXTiSN42A3foo__Fi
+PASS: gdb.cp/demangle.exp: hp: __ct__2T5XTPFcPv_i__Fi_2
+PASS: gdb.cp/demangle.exp: hp: __ct__2T5XTPFcPv_i__Fi_19
+PASS: gdb.cp/demangle.exp: hp: f__FicdPcPFci_v_34
+PASS: gdb.cp/demangle.exp: hp: spec__13Spec<%1,%1.*>XTiTPi_FPi
+PASS: gdb.cp/demangle.exp: hp: spec__16Spec<%1,%1.&,%1>XTiTRiTi_FPi
+PASS: gdb.cp/demangle.exp: hp: add__XTc_FcT1
+PASS: gdb.cp/demangle.exp: hp: add__XTcSP9A5label_FcPPlT1
+PASS: gdb.cp/demangle.exp: hp: add__XTPfTFPd_f_FcT1
+PASS: gdb.cp/demangle.exp: hp: unLink__12basic_stringXTcT18string_char_traitsXTc_T9allocator_Fv
+PASS: gdb.cp/demangle.exp: hp: _Utf390_1__1_9223372036854775807__9223372036854775
+Running ./gdb.cp/derivation.exp ...
+PASS: gdb.cp/derivation.exp: before run: ptype A::value_type
+PASS: gdb.cp/derivation.exp: before run: whatis A::value_type
+PASS: gdb.cp/derivation.exp: before run: p (A::value_type) 0
+PASS: gdb.cp/derivation.exp: before run: ptype D::value_type
+PASS: gdb.cp/derivation.exp: before run: whatis D::value_type
+PASS: gdb.cp/derivation.exp: before run: p (D::value_type) 0
+PASS: gdb.cp/derivation.exp: before run: ptype E::value_type
+PASS: gdb.cp/derivation.exp: before run: whatis E::value_type
+PASS: gdb.cp/derivation.exp: before run: p (E::value_type) 0
+PASS: gdb.cp/derivation.exp: before run: ptype F::value_type
+PASS: gdb.cp/derivation.exp: before run: whatis F::value_type
+PASS: gdb.cp/derivation.exp: before run: p (F::value_type) 0
+PASS: gdb.cp/derivation.exp: before run: ptype A2::value_type
+PASS: gdb.cp/derivation.exp: before run: whatis A2::value_type
+PASS: gdb.cp/derivation.exp: before run: p (A2::value_type) 0
+PASS: gdb.cp/derivation.exp: before run: ptype D2::value_type
+PASS: gdb.cp/derivation.exp: before run: whatis D2::value_type
+PASS: gdb.cp/derivation.exp: before run: p (D2::value_type) 0
+PASS: gdb.cp/derivation.exp: before run: ptype Z::value_type
+PASS: gdb.cp/derivation.exp: before run: whatis Z::value_type
+PASS: gdb.cp/derivation.exp: before run: p (Z::value_type) 0
+PASS: gdb.cp/derivation.exp: before run: ptype ZZ::value_type
+PASS: gdb.cp/derivation.exp: before run: whatis ZZ::value_type
+PASS: gdb.cp/derivation.exp: before run: p (ZZ::value_type) 0
+PASS: gdb.cp/derivation.exp: at marker1: ptype A::value_type
+PASS: gdb.cp/derivation.exp: at marker1: whatis A::value_type
+PASS: gdb.cp/derivation.exp: at marker1: p (A::value_type) 0
+PASS: gdb.cp/derivation.exp: at marker1: ptype D::value_type
+PASS: gdb.cp/derivation.exp: at marker1: whatis D::value_type
+PASS: gdb.cp/derivation.exp: at marker1: p (D::value_type) 0
+PASS: gdb.cp/derivation.exp: at marker1: ptype A2::value_type
+PASS: gdb.cp/derivation.exp: at marker1: whatis A2::value_type
+PASS: gdb.cp/derivation.exp: at marker1: p (A2::value_type) 0
+PASS: gdb.cp/derivation.exp: at marker1: ptype D2::value_type
+PASS: gdb.cp/derivation.exp: at marker1: whatis D2::value_type
+PASS: gdb.cp/derivation.exp: at marker1: p (D2::value_type) 0
+PASS: gdb.cp/derivation.exp: up from marker1
+PASS: gdb.cp/derivation.exp: print value of a_instance
+PASS: gdb.cp/derivation.exp: ptype a_instance
+PASS: gdb.cp/derivation.exp: print value of d_instance
+PASS: gdb.cp/derivation.exp: ptype d_instance
+PASS: gdb.cp/derivation.exp: print value of e_instance
+PASS: gdb.cp/derivation.exp: ptype e_instance
+PASS: gdb.cp/derivation.exp: print value of f_instance
+PASS: gdb.cp/derivation.exp: ptype f_instance
+PASS: gdb.cp/derivation.exp: ptype g_instance
+PASS: gdb.cp/derivation.exp: print value of d_instance.a
+PASS: gdb.cp/derivation.exp: print value of d_instance.aa
+PASS: gdb.cp/derivation.exp: print value of d_instance.b
+PASS: gdb.cp/derivation.exp: print value of d_instance.bb
+PASS: gdb.cp/derivation.exp: print value of d_instance.c
+PASS: gdb.cp/derivation.exp: print value of d_instance.cc
+PASS: gdb.cp/derivation.exp: print value of d_instance.d
+PASS: gdb.cp/derivation.exp: print value of d_instance.dd
+PASS: gdb.cp/derivation.exp: print value of g_instance.a
+PASS: gdb.cp/derivation.exp: print value of g_instance.b
+PASS: gdb.cp/derivation.exp: print value of g_instance.c
+PASS: gdb.cp/derivation.exp: print value of g_instance.afoo()
+PASS: gdb.cp/derivation.exp: re-selected 'main' frame after inferior call
+PASS: gdb.cp/derivation.exp: print value of g_instance.bfoo()
+PASS: gdb.cp/derivation.exp: print value of g_instance.cfoo()
+PASS: gdb.cp/derivation.exp: whatis c_instance.c
+PASS: gdb.cp/derivation.exp: ptype c_instance.c
+PASS: gdb.cp/derivation.exp: whatis g_instance.g
+PASS: gdb.cp/derivation.exp: ptype g_instance.g
+PASS: gdb.cp/derivation.exp: whatis a_instance.a
+PASS: gdb.cp/derivation.exp: ptype a_instance.a
+PASS: gdb.cp/derivation.exp: p (A::value_type) 0
+PASS: gdb.cp/derivation.exp: whatis b_instance.b
+PASS: gdb.cp/derivation.exp: ptype b_instance.b
+PASS: gdb.cp/derivation.exp: whatis d_instance.d
+PASS: gdb.cp/derivation.exp: ptype d_instance.d
+PASS: gdb.cp/derivation.exp: p (D::value_type) 0
+PASS: gdb.cp/derivation.exp: whatis e_instance.e
+PASS: gdb.cp/derivation.exp: ptype e_instance.e
+PASS: gdb.cp/derivation.exp: p (E::value_type) 0
+PASS: gdb.cp/derivation.exp: whatis f_instance.f
+PASS: gdb.cp/derivation.exp: ptype f_instance.f
+PASS: gdb.cp/derivation.exp: p (F::value_type) 0
+PASS: gdb.cp/derivation.exp: whatis z_instance.z
+PASS: gdb.cp/derivation.exp: ptype z_instance.z
+PASS: gdb.cp/derivation.exp: p (Z::value_type) 0
+PASS: gdb.cp/derivation.exp: whatis zz_instance.zz
+PASS: gdb.cp/derivation.exp: ptype zz_instance.zz
+PASS: gdb.cp/derivation.exp: p (ZZ::value_type) 0
+PASS: gdb.cp/derivation.exp: ptype vderived
+PASS: gdb.cp/derivation.exp: print vderived
+PASS: gdb.cp/derivation.exp: ptype N::value_type
+PASS: gdb.cp/derivation.exp: ptype N::Derived::value_type
+PASS: gdb.cp/derivation.exp: ptype value_type
+Running ./gdb.cp/destrprint.exp ...
+PASS: gdb.cp/destrprint.exp: continue to breakpoint: Break here
+PASS: gdb.cp/destrprint.exp: go up to ~Derived
+PASS: gdb.cp/destrprint.exp: set print object on
+PASS: gdb.cp/destrprint.exp: print *this with print object = on
+PASS: gdb.cp/destrprint.exp: set print object off
+PASS: gdb.cp/destrprint.exp: print *this with print object = off
+Running ./gdb.cp/dispcxx.exp ...
+PASS: gdb.cp/dispcxx.exp: continue to breakpoint: here
+PASS: gdb.cp/dispcxx.exp: display k
+Running ./gdb.cp/exception.exp ...
+PASS: gdb.cp/exception.exp: catch catch (before inferior run)
+PASS: gdb.cp/exception.exp: catch throw (before inferior run)
+PASS: gdb.cp/exception.exp: info breakpoints (before inferior run)
+PASS: gdb.cp/exception.exp: Set temporary breakpoint at main
+PASS: gdb.cp/exception.exp: Run to main
+FAIL: gdb.cp/exception.exp: info breakpoints (after inferior run)
+PASS: gdb.cp/exception.exp: break catcher
+FAIL: gdb.cp/exception.exp: continue to first throw
+FAIL: gdb.cp/exception.exp: backtrace after first throw
+FAIL: gdb.cp/exception.exp: continue to first catch
+FAIL: gdb.cp/exception.exp: backtrace after first catch
+PASS: gdb.cp/exception.exp: continue to catcher for the first time
+FAIL: gdb.cp/exception.exp: continue to second throw
+FAIL: gdb.cp/exception.exp: backtrace after second throw
+FAIL: gdb.cp/exception.exp: continue to second catch
+FAIL: gdb.cp/exception.exp: backtrace after second catch
+FAIL: gdb.cp/exception.exp: continue to catcher for the second time (the program is no longer running)
+Running ./gdb.cp/expand-psymtabs-cxx.exp ...
+PASS: gdb.cp/expand-psymtabs-cxx.exp: set language c++
+PASS: gdb.cp/expand-psymtabs-cxx.exp: before expand
+PASS: gdb.cp/expand-psymtabs-cxx.exp: force expand
+PASS: gdb.cp/expand-psymtabs-cxx.exp: after expand
+Running ./gdb.cp/expand-sals.exp ...
+PASS: gdb.cp/expand-sals.exp: continue to breakpoint: func
+PASS: gdb.cp/expand-sals.exp: up
+PASS: gdb.cp/expand-sals.exp: break
+PASS: gdb.cp/expand-sals.exp: continue to breakpoint: caller
+PASS: gdb.cp/expand-sals.exp: bt from A
+PASS: gdb.cp/expand-sals.exp: continue to breakpoint: next caller func
+Running ./gdb.cp/extern-c.exp ...
+PASS: gdb.cp/extern-c.exp: setting breakpoint at c_func
+PASS: gdb.cp/extern-c.exp: continue to breakpoint: c_func
+PASS: gdb.cp/extern-c.exp: initialize counter
+PASS: gdb.cp/extern-c.exp: rbreak c_funcs
+PASS: gdb.cp/extern-c.exp: command details for multiple breakpoints
+PASS: gdb.cp/extern-c.exp: set commands on multiple breakpoints
+PASS: gdb.cp/extern-c.exp: continue to breakpoint: c_funcs_1
+PASS: gdb.cp/extern-c.exp: verify counter at first breakpoint
+PASS: gdb.cp/extern-c.exp: continue to breakpoint: c_funcs_2
+PASS: gdb.cp/extern-c.exp: verify counter at second breakpoint
+Running ./gdb.cp/formatted-ref.exp ...
+PASS: gdb.cp/formatted-ref.exp: print/x s
+PASS: gdb.cp/formatted-ref.exp: print/x e
+PASS: gdb.cp/formatted-ref.exp: print/x i
+PASS: gdb.cp/formatted-ref.exp: print/x &s
+PASS: gdb.cp/formatted-ref.exp: print/x &e
+PASS: gdb.cp/formatted-ref.exp: print/x &i
+PASS: gdb.cp/formatted-ref.exp: print/x *(&(&s))
+PASS: gdb.cp/formatted-ref.exp: print/x *(&(&i))
+PASS: gdb.cp/formatted-ref.exp: print/x *(&(&e))
+PASS: gdb.cp/formatted-ref.exp: print s.x == 13
+Running ./gdb.cp/fpointer.exp ...
+PASS: gdb.cp/fpointer.exp: p p1()
+PASS: gdb.cp/fpointer.exp: p p2()
+PASS: gdb.cp/fpointer.exp: p p[0]()
+PASS: gdb.cp/fpointer.exp: p p[1]()
+PASS: gdb.cp/fpointer.exp: p p3('a')
+PASS: gdb.cp/fpointer.exp: p p4(1)
+Running ./gdb.cp/gdb1355.exp ...
+PASS: gdb.cp/gdb1355.exp: ptype s1
+PASS: gdb.cp/gdb1355.exp: print s1
+Running ./gdb.cp/gdb2384.exp ...
+PASS: gdb.cp/gdb2384.exp: continue to breakpoint: set breakpoint here
+FAIL: gdb.cp/gdb2384.exp: print d1.meth ()
+PASS: gdb.cp/gdb2384.exp: continue to breakpoint: set breakpoint here
+FAIL: gdb.cp/gdb2384.exp: gdb2384
+PASS: gdb.cp/gdb2384.exp: continue to breakpoint: set breakpoint here (second)
+FAIL: gdb.cp/gdb2384.exp: print d2.meth()
+PASS: gdb.cp/gdb2384.exp: continue to breakpoint: set breakpoint here (second)
+FAIL: gdb.cp/gdb2384.exp: gdb2384 (second)
+Running ./gdb.cp/gdb2495.exp ...
+PASS: gdb.cp/gdb2495.exp: p exceptions.no_throw_function()
+PASS: gdb.cp/gdb2495.exp: p exceptions.throw_function_with_handler()
+FAIL: gdb.cp/gdb2495.exp: Call a function that raises an exception without a handler.
+FAIL: gdb.cp/gdb2495.exp: bt after returning from a popped frame
+PASS: gdb.cp/gdb2495.exp: info breakpoints
+PASS: gdb.cp/gdb2495.exp: set unwinn-on-terminating-exception off
+PASS: gdb.cp/gdb2495.exp: Turn off unwind on terminating exception flag
+PASS: gdb.cp/gdb2495.exp: Call a function that raises an exception with unwinding off..
+PASS: gdb.cp/gdb2495.exp: set unwindonsignal on
+PASS: gdb.cp/gdb2495.exp: Turn on unwind on signal
+PASS: gdb.cp/gdb2495.exp: p exceptions.raise_signal(1)
+PASS: gdb.cp/gdb2495.exp: set unwindonsignal off
+PASS: gdb.cp/gdb2495.exp: Turn off unwind on signal
+PASS: gdb.cp/gdb2495.exp: p exceptions.raise_signal(1)
+Running ./gdb.cp/hang.exp ...
+PASS: gdb.cp/hang.exp: doesn't overwrite struct type
+PASS: gdb.cp/hang.exp: doesn't corrupt cv_type chain
+Running ./gdb.cp/infcall-dlopen.exp ...
+FAIL: gdb.cp/infcall-dlopen.exp: test 0 (GDB internal error)
+PASS: gdb.cp/infcall-dlopen.exp: test 0 stub 1
+PASS: gdb.cp/infcall-dlopen.exp: test 0 stub 2
+FAIL: gdb.cp/infcall-dlopen.exp: test 1
+PASS: gdb.cp/infcall-dlopen.exp: test 1 stub 1
+PASS: gdb.cp/infcall-dlopen.exp: test 1 stub 2
+FAIL: gdb.cp/infcall-dlopen.exp: test 2
+PASS: gdb.cp/infcall-dlopen.exp: test 2 stub 1
+PASS: gdb.cp/infcall-dlopen.exp: test 2 stub 2
+FAIL: gdb.cp/infcall-dlopen.exp: test 3
+PASS: gdb.cp/infcall-dlopen.exp: test 3 stub 1
+PASS: gdb.cp/infcall-dlopen.exp: test 3 stub 2
+FAIL: gdb.cp/infcall-dlopen.exp: test 4
+PASS: gdb.cp/infcall-dlopen.exp: test 4 stub 1
+PASS: gdb.cp/infcall-dlopen.exp: test 4 stub 2
+FAIL: gdb.cp/infcall-dlopen.exp: test 5
+PASS: gdb.cp/infcall-dlopen.exp: test 5 stub 1
+PASS: gdb.cp/infcall-dlopen.exp: test 5 stub 2
+FAIL: gdb.cp/infcall-dlopen.exp: test 6
+PASS: gdb.cp/infcall-dlopen.exp: test 6 stub 1
+PASS: gdb.cp/infcall-dlopen.exp: test 6 stub 2
+FAIL: gdb.cp/infcall-dlopen.exp: test 7
+PASS: gdb.cp/infcall-dlopen.exp: test 7 stub 1
+PASS: gdb.cp/infcall-dlopen.exp: test 7 stub 2
+FAIL: gdb.cp/infcall-dlopen.exp: test 8
+PASS: gdb.cp/infcall-dlopen.exp: test 8 stub 1
+PASS: gdb.cp/infcall-dlopen.exp: test 8 stub 2
+FAIL: gdb.cp/infcall-dlopen.exp: test 9
+PASS: gdb.cp/infcall-dlopen.exp: test 9 stub 1
+PASS: gdb.cp/infcall-dlopen.exp: test 9 stub 2
+Running ./gdb.cp/inherit.exp ...
+PASS: gdb.cp/inherit.exp: set width 0
+PASS: gdb.cp/inherit.exp: set language c++
+PASS: gdb.cp/inherit.exp: ptype A (FIXME)
+PASS: gdb.cp/inherit.exp: ptype class A (FIXME)
+PASS: gdb.cp/inherit.exp: ptype g_A (FIXME)
+PASS: gdb.cp/inherit.exp: ptype B
+PASS: gdb.cp/inherit.exp: ptype class B
+PASS: gdb.cp/inherit.exp: ptype g_B
+PASS: gdb.cp/inherit.exp: ptype C
+PASS: gdb.cp/inherit.exp: ptype class C
+PASS: gdb.cp/inherit.exp: ptype g_C
+PASS: gdb.cp/inherit.exp: ptype tagless struct
+PASS: gdb.cp/inherit.exp: ptype variable of type tagless struct
+PASS: gdb.cp/inherit.exp: ptype D
+PASS: gdb.cp/inherit.exp: ptype class D
+PASS: gdb.cp/inherit.exp: ptype g_D
+PASS: gdb.cp/inherit.exp: ptype E
+PASS: gdb.cp/inherit.exp: ptype class E
+PASS: gdb.cp/inherit.exp: ptype g_E
+PASS: gdb.cp/inherit.exp: ptype vA
+PASS: gdb.cp/inherit.exp: ptype class vA
+PASS: gdb.cp/inherit.exp: ptype g_vA
+PASS: gdb.cp/inherit.exp: ptype vB
+PASS: gdb.cp/inherit.exp: ptype class vB
+PASS: gdb.cp/inherit.exp: ptype g_vB
+PASS: gdb.cp/inherit.exp: ptype vC
+PASS: gdb.cp/inherit.exp: ptype class vC
+PASS: gdb.cp/inherit.exp: ptype g_vC
+PASS: gdb.cp/inherit.exp: ptype vD
+PASS: gdb.cp/inherit.exp: ptype class vD
+PASS: gdb.cp/inherit.exp: ptype g_vD
+PASS: gdb.cp/inherit.exp: ptype vE
+PASS: gdb.cp/inherit.exp: ptype class vE
+PASS: gdb.cp/inherit.exp: ptype g_vE
+PASS: gdb.cp/inherit.exp: print g_A.A::a
+PASS: gdb.cp/inherit.exp: print g_A.A::x
+PASS: gdb.cp/inherit.exp: print g_A.a
+PASS: gdb.cp/inherit.exp: print g_A.x
+PASS: gdb.cp/inherit.exp: print g_B.A::a
+PASS: gdb.cp/inherit.exp: print g_B.A::x
+PASS: gdb.cp/inherit.exp: print g_B.B::b
+PASS: gdb.cp/inherit.exp: print g_B.B::x
+PASS: gdb.cp/inherit.exp: print g_B.a
+PASS: gdb.cp/inherit.exp: print g_B.b
+PASS: gdb.cp/inherit.exp: print g_B.x
+PASS: gdb.cp/inherit.exp: print g_C.A::a
+PASS: gdb.cp/inherit.exp: print g_C.A::x
+PASS: gdb.cp/inherit.exp: print g_C.C::c
+PASS: gdb.cp/inherit.exp: print g_C.C::x
+PASS: gdb.cp/inherit.exp: print g_C.a
+PASS: gdb.cp/inherit.exp: print g_C.c
+PASS: gdb.cp/inherit.exp: print g_C.x
+PASS: gdb.cp/inherit.exp: print g_A
+PASS: gdb.cp/inherit.exp: print g_B
+PASS: gdb.cp/inherit.exp: print g_C
+PASS: gdb.cp/inherit.exp: print g_A.A::a
+PASS: gdb.cp/inherit.exp: print g_A.A::x
+PASS: gdb.cp/inherit.exp: print g_B.A::a
+PASS: gdb.cp/inherit.exp: print g_B.A::x
+PASS: gdb.cp/inherit.exp: print g_B.B::b
+PASS: gdb.cp/inherit.exp: print g_B.B::x
+PASS: gdb.cp/inherit.exp: print g_C.A::a
+PASS: gdb.cp/inherit.exp: print g_C.A::x
+PASS: gdb.cp/inherit.exp: print g_C.C::c
+PASS: gdb.cp/inherit.exp: print g_C.C::x
+PASS: gdb.cp/inherit.exp: print g_D.A::a
+PASS: gdb.cp/inherit.exp: print g_D.C::a
+PASS: gdb.cp/inherit.exp: print g_D.B::a
+PASS: gdb.cp/inherit.exp: print g_D.A::x
+PASS: gdb.cp/inherit.exp: print g_D.B::b
+PASS: gdb.cp/inherit.exp: print g_D.B::x
+PASS: gdb.cp/inherit.exp: print g_D.C::c
+PASS: gdb.cp/inherit.exp: print g_D.C::x
+PASS: gdb.cp/inherit.exp: print g_D.D::d
+PASS: gdb.cp/inherit.exp: print g_D.D::x
+PASS: gdb.cp/inherit.exp: print g_E.A::a
+PASS: gdb.cp/inherit.exp: print g_E.A::x
+PASS: gdb.cp/inherit.exp: print g_E.B::b
+PASS: gdb.cp/inherit.exp: print g_E.B::x
+PASS: gdb.cp/inherit.exp: print g_E.C::c
+PASS: gdb.cp/inherit.exp: print g_E.C::x
+PASS: gdb.cp/inherit.exp: print g_E.D::d
+PASS: gdb.cp/inherit.exp: print g_E.D::x
+PASS: gdb.cp/inherit.exp: print g_E.E::e
+PASS: gdb.cp/inherit.exp: print g_E.E::x
+PASS: gdb.cp/inherit.exp: ptype g_D.b
+PASS: gdb.cp/inherit.exp: ptype g_D.c
+PASS: gdb.cp/inherit.exp: ptype g_D.d
+PASS: gdb.cp/inherit.exp: ptype g_A.A::a
+PASS: gdb.cp/inherit.exp: ptype g_A.A::x
+PASS: gdb.cp/inherit.exp: ptype g_B.A::a
+PASS: gdb.cp/inherit.exp: ptype g_B.A::x
+PASS: gdb.cp/inherit.exp: ptype g_B.B::b
+PASS: gdb.cp/inherit.exp: ptype g_B.B::x
+PASS: gdb.cp/inherit.exp: ptype g_C.A::a
+PASS: gdb.cp/inherit.exp: ptype g_C.A::x
+PASS: gdb.cp/inherit.exp: ptype g_C.C::c
+PASS: gdb.cp/inherit.exp: ptype g_C.C::x
+PASS: gdb.cp/inherit.exp: ptype g_D.A::a
+PASS: gdb.cp/inherit.exp: ptype g_D.A::x
+PASS: gdb.cp/inherit.exp: ptype g_D.B::b
+PASS: gdb.cp/inherit.exp: ptype g_D.B::x
+PASS: gdb.cp/inherit.exp: ptype g_D.C::c
+PASS: gdb.cp/inherit.exp: ptype g_D.C::x
+PASS: gdb.cp/inherit.exp: ptype g_D.D::d
+PASS: gdb.cp/inherit.exp: ptype g_D.D::x
+PASS: gdb.cp/inherit.exp: ptype g_E.A::a
+PASS: gdb.cp/inherit.exp: ptype g_E.A::x
+PASS: gdb.cp/inherit.exp: ptype g_E.B::b
+PASS: gdb.cp/inherit.exp: ptype g_E.B::x
+PASS: gdb.cp/inherit.exp: ptype g_E.C::c
+PASS: gdb.cp/inherit.exp: ptype g_E.C::x
+PASS: gdb.cp/inherit.exp: ptype g_E.D::d
+PASS: gdb.cp/inherit.exp: ptype g_E.D::x
+PASS: gdb.cp/inherit.exp: ptype g_E.E::e
+PASS: gdb.cp/inherit.exp: ptype g_E.E::x
+PASS: gdb.cp/inherit.exp: print g_D
+PASS: gdb.cp/inherit.exp: print g_E
+PASS: gdb.cp/inherit.exp: print anonymous union member
+PASS: gdb.cp/inherit.exp: print variable of type anonymous union
+PASS: gdb.cp/inherit.exp: print type of anonymous union
+PASS: gdb.cp/inherit.exp: print g_vA.vA::va
+PASS: gdb.cp/inherit.exp: print g_vA.vA::vx
+PASS: gdb.cp/inherit.exp: print g_vA.va
+PASS: gdb.cp/inherit.exp: print g_vA.vx
+PASS: gdb.cp/inherit.exp: print g_vB.vA::va
+PASS: gdb.cp/inherit.exp: print g_vB.vA::vx
+PASS: gdb.cp/inherit.exp: print g_vB.vB::vb
+PASS: gdb.cp/inherit.exp: print g_vB.vB::vx
+PASS: gdb.cp/inherit.exp: print g_vB.va
+PASS: gdb.cp/inherit.exp: print g_vB.vb
+PASS: gdb.cp/inherit.exp: print g_vB.vx
+PASS: gdb.cp/inherit.exp: print g_vC.vA::va
+PASS: gdb.cp/inherit.exp: print g_vC.vA::vx
+PASS: gdb.cp/inherit.exp: print g_vC.vC::vc
+PASS: gdb.cp/inherit.exp: print g_vC.vC::vx
+PASS: gdb.cp/inherit.exp: print g_vC.va
+PASS: gdb.cp/inherit.exp: print g_vC.vc
+PASS: gdb.cp/inherit.exp: print g_vC.vx
+PASS: gdb.cp/inherit.exp: print g_vA
+PASS: gdb.cp/inherit.exp: print g_vB (FIXME v3 vtbl ptr)
+PASS: gdb.cp/inherit.exp: print g_vC (FIXME v3 vtbl ptr)
+PASS: gdb.cp/inherit.exp: print g_vD.vA::va
+PASS: gdb.cp/inherit.exp: print g_vD.vA::vx
+PASS: gdb.cp/inherit.exp: print g_vD.vB::vb
+PASS: gdb.cp/inherit.exp: print g_vD.vB::vx
+PASS: gdb.cp/inherit.exp: print g_vD.vC::vc
+PASS: gdb.cp/inherit.exp: print g_vD.vC::vx
+PASS: gdb.cp/inherit.exp: print g_vD.vD::vd
+PASS: gdb.cp/inherit.exp: print g_vD.vD::vx
+PASS: gdb.cp/inherit.exp: print g_vE.vA::va
+PASS: gdb.cp/inherit.exp: print g_vE.vA::vx
+PASS: gdb.cp/inherit.exp: print g_vE.vB::vb
+PASS: gdb.cp/inherit.exp: print g_vE.vB::vx
+PASS: gdb.cp/inherit.exp: print g_vE.vC::vc
+PASS: gdb.cp/inherit.exp: print g_vE.vC::vx
+PASS: gdb.cp/inherit.exp: print g_vE.vD::vd
+PASS: gdb.cp/inherit.exp: print g_vE.vD::vx
+PASS: gdb.cp/inherit.exp: print g_vE.vE::ve
+PASS: gdb.cp/inherit.exp: print g_vE.vE::vx
+PASS: gdb.cp/inherit.exp: print g_vD (FIXME v3 vtbl ptr)
+PASS: gdb.cp/inherit.exp: print g_vE (FIXME v3 vtbl ptr)
+Running ./gdb.cp/koenig.exp ...
+PASS: gdb.cp/koenig.exp: p first(c)
+PASS: gdb.cp/koenig.exp: p second(0,0,c,0,0)
+PASS: gdb.cp/koenig.exp: p entry (c)
+PASS: gdb.cp/koenig.exp: p first(0,c)
+PASS: gdb.cp/koenig.exp: p first(b.c)
+PASS: gdb.cp/koenig.exp: p foo(eo)
+PASS: gdb.cp/koenig.exp: p foo(eo, eo)
+PASS: gdb.cp/koenig.exp: p foo(eo, eo, 1)
+PASS: gdb.cp/koenig.exp: p foo(fo, eo)
+PASS: gdb.cp/koenig.exp: p foo(1 ,fo, eo)
+PASS: gdb.cp/koenig.exp: p foo(go, fo, eo)
+PASS: gdb.cp/koenig.exp: p fake(eo)
+PASS: gdb.cp/koenig.exp: p foo (fake)
+PASS: gdb.cp/koenig.exp: p foo(io)
+PASS: gdb.cp/koenig.exp: p foo(ix)
+PASS: gdb.cp/koenig.exp: p foo(ju)
+PASS: gdb.cp/koenig.exp: p foo(js)
+PASS: gdb.cp/koenig.exp: p foo(je)
+XFAIL: gdb.cp/koenig.exp: p foo(jab)
+PASS: gdb.cp/koenig.exp: p foo(jap)
+PASS: gdb.cp/koenig.exp: p foo(japp)
+PASS: gdb.cp/koenig.exp: p foo(jca)
+PASS: gdb.cp/koenig.exp: p foo(ko,1)
+PASS: gdb.cp/koenig.exp: p foo(ko,1.0f)
+XFAIL: gdb.cp/koenig.exp: p bar(ko,1)
+PASS: gdb.cp/koenig.exp: p foo(labo)
+PASS: gdb.cp/koenig.exp: p ma.foo('a')
+PASS: gdb.cp/koenig.exp: p foo(ma,'a')
+PASS: gdb.cp/koenig.exp: p M::N::foo(ma,'a')
+PASS: gdb.cp/koenig.exp: p M::FAKE::foo(ma,'a')
+PASS: gdb.cp/koenig.exp: p M::N::fake(ma,'a')
+PASS: gdb.cp/koenig.exp: p M::bar('a')
+PASS: gdb.cp/koenig.exp: p M::N::bar('a')
+PASS: gdb.cp/koenig.exp: p foo(ttoa, 'a')
+PASS: gdb.cp/koenig.exp: p foo (p_union)
+PASS: gdb.cp/koenig.exp: p q == 5
+PASS: gdb.cp/koenig.exp: p q == 5.0f
+PASS: gdb.cp/koenig.exp: p q != 5
+PASS: gdb.cp/koenig.exp: p q != 5.0f
+PASS: gdb.cp/koenig.exp: p q + 5.0f
+PASS: gdb.cp/koenig.exp: p q + 5
+PASS: gdb.cp/koenig.exp: p ++q
+PASS: gdb.cp/koenig.exp: p r.rfoo()
+PASS: gdb.cp/koenig.exp: continue to breakpoint: marker1
+PASS: gdb.cp/koenig.exp: p rfoo()
+PASS: gdb.cp/koenig.exp: p this->rfoo()
+Running ./gdb.cp/local.exp ...
+PASS: gdb.cp/local.exp: up from marker1
+PASS: gdb.cp/local.exp: ptype l
+PASS: gdb.cp/local.exp: ptype Local
+PASS: gdb.cp/local.exp: break marker2
+PASS: gdb.cp/local.exp: continuing to marker2
+PASS: gdb.cp/local.exp: up from marker2
+PASS: gdb.cp/local.exp: Local out of scope
+PASS: gdb.cp/local.exp: ptype InnerLocal (pattern 1)
+PASS: gdb.cp/local.exp: ptype NestedInnerLocal
+KFAIL: gdb.cp/local.exp: ptype InnerLocal::NestedInnerLocal (PRMS: gdb/482)
+Running ./gdb.cp/maint.exp ...
+PASS: gdb.cp/maint.exp: help maintenance cplus
+PASS: gdb.cp/maint.exp: help maint cp
+PASS: gdb.cp/maint.exp: maint cp
+PASS: gdb.cp/maint.exp: help maint cp first_component
+PASS: gdb.cp/maint.exp: help maint cp namespace
+PASS: gdb.cp/maint.exp: set complaints 1000
+PASS: gdb.cp/maint.exp: maint cp first_component foo
+PASS: gdb.cp/maint.exp: maint cp first_component operator<<
+PASS: gdb.cp/maint.exp: maint cp first_component operator>>
+PASS: gdb.cp/maint.exp: maint cp first_component operator ->
+PASS: gdb.cp/maint.exp: maint cp first_component operator()
+PASS: gdb.cp/maint.exp: maint cp first_component operator>
+PASS: gdb.cp/maint.exp: maint cp first_component operator<
+PASS: gdb.cp/maint.exp: maint cp first_component operator ->
+PASS: gdb.cp/maint.exp: maint cp first_component operator ->
+PASS: gdb.cp/maint.exp: maint cp first_component foo()
+PASS: gdb.cp/maint.exp: maint cp first_component foo(int)
+PASS: gdb.cp/maint.exp: maint cp first_component foo(X::Y)
+PASS: gdb.cp/maint.exp: maint cp first_component foo(X::Y, A::B)
+PASS: gdb.cp/maint.exp: maint cp first_component foo(std::basic_streambuf<wchar_t,std::char_traits<wchar_t> >)
+PASS: gdb.cp/maint.exp: maint cp first_component operator>(X::Y)
+PASS: gdb.cp/maint.exp: maint cp first_component int operator<< <char>()
+PASS: gdb.cp/maint.exp: maint cp first_component T<Cooperator>
+PASS: gdb.cp/maint.exp: maint cp first_component int foo<&(operator<<(C, C))>()
+PASS: gdb.cp/maint.exp: maint cp first_component int foo<&operator<<(C, C)>()
+PASS: gdb.cp/maint.exp: maint cp first_component int foo<operator<<(C, C)>()
+PASS: gdb.cp/maint.exp: maint cp first_component foo::bar
+PASS: gdb.cp/maint.exp: maint cp first_component foo::bar::baz
+PASS: gdb.cp/maint.exp: maint cp first_component C<A>::bar
+PASS: gdb.cp/maint.exp: maint cp first_component C<std::basic_streambuf<wchar_t,std::char_traits<wchar_t> > >::bar
+PASS: gdb.cp/maint.exp: maint cp first_component foo<
+PASS: gdb.cp/maint.exp: maint cp first_component foo(
+PASS: gdb.cp/maint.exp: maint cp first_component bool operator<<char>
+PASS: gdb.cp/maint.exp: maint cp namespace
+Running ./gdb.cp/mb-ctor.exp ...
+PASS: gdb.cp/mb-ctor.exp: set-breakpoint at ctor
+PASS: gdb.cp/mb-ctor.exp: set-breakpoint at dtor
+PASS: gdb.cp/mb-ctor.exp: run to breakpoint 1 v1
+PASS: gdb.cp/mb-ctor.exp: continue to breakpoint: set breakpoint here
+PASS: gdb.cp/mb-ctor.exp: run to breakpoint 1 v2
+PASS: gdb.cp/mb-ctor.exp: continue to breakpoint: set breakpoint here
+PASS: gdb.cp/mb-ctor.exp: run to breakpoint 3 v1
+PASS: gdb.cp/mb-ctor.exp: run to breakpoint 3 v2
+PASS: gdb.cp/mb-ctor.exp: run to exit
+Running ./gdb.cp/mb-inline.exp ...
+PASS: gdb.cp/mb-inline.exp: set breakpoint
+PASS: gdb.cp/mb-inline.exp: info break
+PASS: gdb.cp/mb-inline.exp: run to breakpoint
+PASS: gdb.cp/mb-inline.exp: run to breakpoint 2
+PASS: gdb.cp/mb-inline.exp: disabling location: disable
+PASS: gdb.cp/mb-inline.exp: disabling location: run to breakpoint
+PASS: gdb.cp/mb-inline.exp: disabled breakpoint 1.2
+PASS: gdb.cp/mb-inline.exp: set multi_line_foo breakpoint
+PASS: gdb.cp/mb-inline.exp: run to multi_line_foo breakpoint 4 afn
+PASS: gdb.cp/mb-inline.exp: run to multi_line_foo breakpoint 4 bfn
+Running ./gdb.cp/mb-templates.exp ...
+PASS: gdb.cp/mb-templates.exp: initial condition: set breakpoint
+PASS: gdb.cp/mb-templates.exp: initial condition: run to breakpoint
+PASS: gdb.cp/mb-templates.exp: initial condition: run to breakpoint 2
+PASS: gdb.cp/mb-templates.exp: kill
+PASS: gdb.cp/mb-templates.exp: separate condition: set breakpoint
+PASS: gdb.cp/mb-templates.exp: separate condition: set condition
+PASS: gdb.cp/mb-templates.exp: separate condition: run to breakpoint
+PASS: gdb.cp/mb-templates.exp: separate condition: run to breakpoint 2
+PASS: gdb.cp/mb-templates.exp: disabling location: disable
+PASS: gdb.cp/mb-templates.exp: disabling location: run to breakpoint
+PASS: gdb.cp/mb-templates.exp: disabling location: enable
+PASS: gdb.cp/mb-templates.exp: disable breakpoint: disable
+PASS: gdb.cp/mb-templates.exp: disable breakpoint: run to breakpoint
+PASS: gdb.cp/mb-templates.exp: instantiation: set breakpoint
+PASS: gdb.cp/mb-templates.exp: instantiation: run to breakpoint
+PASS: gdb.cp/mb-templates.exp: instantiation: run to breakpoint 2
+PASS: gdb.cp/mb-templates.exp: set multi_line_foo breakpoint
+PASS: gdb.cp/mb-templates.exp: run to multi_line_foo breakpoint 2 <int>
+PASS: gdb.cp/mb-templates.exp: run to multi_line_foo breakpoint 2 <double>
+Running ./gdb.cp/m-data.exp ...
+PASS: gdb.cp/m-data.exp: continue to breakpoint: end of first constructors
+PASS: gdb.cp/m-data.exp: simple object, const bool
+PASS: gdb.cp/m-data.exp: simple object, const int
+PASS: gdb.cp/m-data.exp: simple object, long
+PASS: gdb.cp/m-data.exp: simple object, enum
+PASS: gdb.cp/m-data.exp: derived template object, base const bool
+PASS: gdb.cp/m-data.exp: derived template object, base const int
+PASS: gdb.cp/m-data.exp: derived template object, base long
+PASS: gdb.cp/m-data.exp: derived template object, base enum
+PASS: gdb.cp/m-data.exp: derived template object, derived enum
+PASS: gdb.cp/m-data.exp: template object, const bool
+PASS: gdb.cp/m-data.exp: template object, const int
+PASS: gdb.cp/m-data.exp: template object, long
+PASS: gdb.cp/m-data.exp: template object, base enum
+PASS: gdb.cp/m-data.exp: template object, derived enum
+PASS: gdb.cp/m-data.exp: continue to breakpoint: continue to shadow breakpoint
+PASS: gdb.cp/m-data.exp: shadowing member
+PASS: gdb.cp/m-data.exp: shadowed global variable
+Running ./gdb.cp/member-name.exp ...
+PASS: gdb.cp/member-name.exp: continue to breakpoint: continue to first breakpoint
+PASS: gdb.cp/member-name.exp: print C::x from first breakpoint
+PASS: gdb.cp/member-name.exp: print B::b from first breakpoint
+PASS: gdb.cp/member-name.exp: print inner::z from first breakpoint
+PASS: gdb.cp/member-name.exp: continue to breakpoint: continue to second breakpoint
+PASS: gdb.cp/member-name.exp: print C::x from second breakpoint
+PASS: gdb.cp/member-name.exp: print B::b from second breakpoint
+PASS: gdb.cp/member-name.exp: print inner::z from second breakpoint
+PASS: gdb.cp/member-name.exp: continue to breakpoint: continue to third breakpoint
+PASS: gdb.cp/member-name.exp: print Templ::y from third breakpoint
+Running ./gdb.cp/member-ptr.exp ...
+PASS: gdb.cp/member-ptr.exp: continue to breakpoint: continue to pmi = NULL
+PASS: gdb.cp/member-ptr.exp: ptype pmi (A::j)
+PASS: gdb.cp/member-ptr.exp: print pmi (A::j)
+PASS: gdb.cp/member-ptr.exp: print a.*pmi (A::j)
+PASS: gdb.cp/member-ptr.exp: print a_p->*pmi (A::j)
+PASS: gdb.cp/member-ptr.exp: set var pmi = &A::jj
+PASS: gdb.cp/member-ptr.exp: print pmi (A::jj)
+PASS: gdb.cp/member-ptr.exp: print a.*pmi (A::jj)
+PASS: gdb.cp/member-ptr.exp: set var pmi = &A::j
+PASS: gdb.cp/member-ptr.exp: print a.*pmi (A::j) (again)
+PASS: gdb.cp/member-ptr.exp: print a.*pmi = 33
+PASS: gdb.cp/member-ptr.exp: print a.*pmi (A::j) (33)
+PASS: gdb.cp/member-ptr.exp: print a (j = 33)
+PASS: gdb.cp/member-ptr.exp: print a_p->*pmi = 44
+PASS: gdb.cp/member-ptr.exp: print a_p->*pmi (44)
+PASS: gdb.cp/member-ptr.exp: print a (j = 44)
+PASS: gdb.cp/member-ptr.exp: ptype a.*pmi
+PASS: gdb.cp/member-ptr.exp: print *pmi
+PASS: gdb.cp/member-ptr.exp: ptype *pmi
+PASS: gdb.cp/member-ptr.exp: print (int) pmi
+PASS: gdb.cp/member-ptr.exp: print ((int) pmi) == ((char *) &a.j - (char *) &a)
+PASS: gdb.cp/member-ptr.exp: ptype diamond_pfunc_ptr
+PASS: gdb.cp/member-ptr.exp: ptype diamond.*diamond_pfunc_ptr
+PASS: gdb.cp/member-ptr.exp: print diamond.*diamond_pfunc_ptr (20)
+PASS: gdb.cp/member-ptr.exp: print (diamond.*diamond_pfunc_ptr) (20)
+PASS: gdb.cp/member-ptr.exp: print diamond.func_ptr (20)
+PASS: gdb.cp/member-ptr.exp: ptype pmf
+PASS: gdb.cp/member-ptr.exp: print pmf
+PASS: gdb.cp/member-ptr.exp: ptype pmf_p
+PASS: gdb.cp/member-ptr.exp: gdb/NNNN
+PASS: gdb.cp/member-ptr.exp: print a.*pmf
+PASS: gdb.cp/member-ptr.exp: print a_p->*pmf
+PASS: gdb.cp/member-ptr.exp: set var pmf = &A::foo
+PASS: gdb.cp/member-ptr.exp: print *pmf
+PASS: gdb.cp/member-ptr.exp: ptype *pmf
+PASS: gdb.cp/member-ptr.exp: print (a.*pmf)(3)
+PASS: gdb.cp/member-ptr.exp: ptype a.*pmf
+PASS: gdb.cp/member-ptr.exp: ptype (a.*pmf)(3)
+PASS: gdb.cp/member-ptr.exp: print diamond_pmi
+PASS: gdb.cp/member-ptr.exp: print diamond.*diamond_pmi
+PASS: gdb.cp/member-ptr.exp: print diamond.*left_pmf
+PASS: gdb.cp/member-ptr.exp: print diamond.*right_pmf
+PASS: gdb.cp/member-ptr.exp: print (diamond.*left_pmf) ()
+PASS: gdb.cp/member-ptr.exp: print (diamond.*right_pmf) ()
+PASS: gdb.cp/member-ptr.exp: print diamond.*left_vpmf
+PASS: gdb.cp/member-ptr.exp: print diamond.*right_vpmf
+PASS: gdb.cp/member-ptr.exp: print (diamond.*left_vpmf) ()
+PASS: gdb.cp/member-ptr.exp: print (diamond.*left_base_vpmf) ()
+PASS: gdb.cp/member-ptr.exp: print (diamond.*right_vpmf) ()
+PASS: gdb.cp/member-ptr.exp: print left_vpmf
+PASS: gdb.cp/member-ptr.exp: print right_vpmf
+PASS: gdb.cp/member-ptr.exp: print base_vpmf
+PASS: gdb.cp/member-ptr.exp: print diamond.*left_vpmf ()
+PASS: gdb.cp/member-ptr.exp: print null_pmi
+PASS: gdb.cp/member-ptr.exp: print null_pmi = &A::j
+PASS: gdb.cp/member-ptr.exp: print null_pmi = 0
+PASS: gdb.cp/member-ptr.exp: print null_pmf
+PASS: gdb.cp/member-ptr.exp: print null_pmf = &A::foo
+PASS: gdb.cp/member-ptr.exp: print null_pmf = 0
+Running ./gdb.cp/method2.exp ...
+PASS: gdb.cp/method2.exp: set multiple-symbols ask
+PASS: gdb.cp/method2.exp: setting language c
+PASS: gdb.cp/method2.exp: breaking in method (c)
+PASS: gdb.cp/method2.exp: setting language c++
+PASS: gdb.cp/method2.exp: breaking in method (c++)
+FAIL: gdb.cp/method2.exp: setting breakpoint at exit
+Running ./gdb.cp/method.exp ...
+PASS: gdb.cp/method.exp: break A::foo
+PASS: gdb.cp/method.exp: continue to A::foo
+PASS: gdb.cp/method.exp: print x in A::foo
+PASS: gdb.cp/method.exp: print this in A::foo
+PASS: gdb.cp/method.exp: break A::bar
+PASS: gdb.cp/method.exp: continue to A::bar
+PASS: gdb.cp/method.exp: print x in A::bar
+PASS: gdb.cp/method.exp: print this in A::bar
+PASS: gdb.cp/method.exp: break 21
+PASS: gdb.cp/method.exp: continue to 21
+PASS: gdb.cp/method.exp: print data_ in funk::getFunky
+PASS: gdb.cp/method.exp: print this in funk::getFunky
+PASS: gdb.cp/method.exp: print res in funk::getFunky
+PASS: gdb.cp/method.exp: ptype A
+PASS: gdb.cp/method.exp: finish program
+Running ./gdb.cp/meth-typedefs.exp ...
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(my_other_type)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(my_other_type)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(my_other_type)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(my_other_type)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(my_type)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(my_type)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(my_type)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(my_type)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(const char* const*)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(const char* const*)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(const char* const*)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(const char* const*)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(my_other_type_2)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(my_other_type_2)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(my_other_type_2)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(my_other_type_2)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(my_type_2)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(my_type_2)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(my_type_2)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(my_type_2)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(int)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(int)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(int)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(int)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(my_other_type)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(my_other_type)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(my_other_type)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(my_other_type)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(my_type)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(my_type)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(my_type)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(my_type)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(const char* const*)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(const char* const*)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(const char* const*)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(const char* const*)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(my_other_type_2)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(my_other_type_2)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(my_other_type_2)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(my_other_type_2)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(my_type_2)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(my_type_2)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(my_type_2)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(my_type_2)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(int)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(int)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(int)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(int)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(my_other_type_2, const my_other_type)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(my_other_type_2, const my_other_type)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(my_other_type_2, const my_other_type)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(my_other_type_2, const my_other_type)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(my_other_type_2, my_other_type)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(my_other_type_2, my_other_type)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(my_other_type_2, my_other_type)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(my_other_type_2, my_other_type)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(my_other_type_2, const my_type)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(my_other_type_2, const my_type)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(my_other_type_2, const my_type)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(my_other_type_2, const my_type)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(my_other_type_2, my_type)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(my_other_type_2, my_type)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(my_other_type_2, my_type)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(my_other_type_2, my_type)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(my_other_type_2, const const char* const*)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(my_other_type_2, const const char* const*)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(my_other_type_2, const const char* const*)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(my_other_type_2, const const char* const*)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(my_other_type_2, const char* const*)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(my_other_type_2, const char* const*)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(my_other_type_2, const char* const*)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(my_other_type_2, const char* const*)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(my_type_2, const my_other_type)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(my_type_2, const my_other_type)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(my_type_2, const my_other_type)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(my_type_2, const my_other_type)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(my_type_2, my_other_type)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(my_type_2, my_other_type)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(my_type_2, my_other_type)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(my_type_2, my_other_type)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(my_type_2, const my_type)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(my_type_2, const my_type)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(my_type_2, const my_type)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(my_type_2, const my_type)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(my_type_2, my_type)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(my_type_2, my_type)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(my_type_2, my_type)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(my_type_2, my_type)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(my_type_2, const const char* const*)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(my_type_2, const const char* const*)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(my_type_2, const const char* const*)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(my_type_2, const const char* const*)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(my_type_2, const char* const*)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(my_type_2, const char* const*)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(my_type_2, const char* const*)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(my_type_2, const char* const*)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(int, const my_other_type)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(int, const my_other_type)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(int, const my_other_type)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(int, const my_other_type)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(int, my_other_type)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(int, my_other_type)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(int, my_other_type)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(int, my_other_type)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(int, const my_type)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(int, const my_type)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(int, const my_type)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(int, const my_type)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(int, my_type)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(int, my_type)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(int, my_type)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(int, my_type)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(int, const const char* const*)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(int, const const char* const*)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(int, const const char* const*)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(int, const const char* const*)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(int, const char* const*)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(int, const char* const*)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(int, const char* const*)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(int, const char* const*)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(my_other_type_2, const my_other_type)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(my_other_type_2, const my_other_type)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(my_other_type_2, const my_other_type)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(my_other_type_2, const my_other_type)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(my_other_type_2, my_other_type)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(my_other_type_2, my_other_type)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(my_other_type_2, my_other_type)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(my_other_type_2, my_other_type)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(my_other_type_2, const my_type)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(my_other_type_2, const my_type)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(my_other_type_2, const my_type)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(my_other_type_2, const my_type)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(my_other_type_2, my_type)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(my_other_type_2, my_type)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(my_other_type_2, my_type)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(my_other_type_2, my_type)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(my_other_type_2, const const char* const*)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(my_other_type_2, const const char* const*)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(my_other_type_2, const const char* const*)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(my_other_type_2, const const char* const*)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(my_other_type_2, const char* const*)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(my_other_type_2, const char* const*)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(my_other_type_2, const char* const*)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(my_other_type_2, const char* const*)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(my_type_2, const my_other_type)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(my_type_2, const my_other_type)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(my_type_2, const my_other_type)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(my_type_2, const my_other_type)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(my_type_2, my_other_type)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(my_type_2, my_other_type)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(my_type_2, my_other_type)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(my_type_2, my_other_type)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(my_type_2, const my_type)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(my_type_2, const my_type)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(my_type_2, const my_type)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(my_type_2, const my_type)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(my_type_2, my_type)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(my_type_2, my_type)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(my_type_2, my_type)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(my_type_2, my_type)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(my_type_2, const const char* const*)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(my_type_2, const const char* const*)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(my_type_2, const const char* const*)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(my_type_2, const const char* const*)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(my_type_2, const char* const*)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(my_type_2, const char* const*)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(my_type_2, const char* const*)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(my_type_2, const char* const*)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(int, const my_other_type)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(int, const my_other_type)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(int, const my_other_type)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(int, const my_other_type)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(int, my_other_type)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(int, my_other_type)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(int, my_other_type)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(int, my_other_type)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(int, const my_type)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(int, const my_type)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(int, const my_type)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(int, const my_type)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(int, my_type)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(int, my_type)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(int, my_type)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(int, my_type)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(int, const const char* const*)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(int, const const char* const*)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(int, const const char* const*)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(int, const const char* const*)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(int, const char* const*)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(int, const char* const*)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(int, const char* const*)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(int, const char* const*)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(aenum, astruct const&, aunion const***)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(aenum, astruct const&, aunion const***)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(aenum, astruct const&, aunion const***)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(aenum, astruct const&, aunion const***)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(aenum, astruct const&, anon_union const***)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(aenum, astruct const&, anon_union const***)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(aenum, astruct const&, anon_union const***)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(aenum, astruct const&, anon_union const***)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(aenum, anon_struct const&, aunion const***)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(aenum, anon_struct const&, aunion const***)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(aenum, anon_struct const&, aunion const***)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(aenum, anon_struct const&, aunion const***)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(aenum, anon_struct const&, anon_union const***)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(aenum, anon_struct const&, anon_union const***)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(aenum, anon_struct const&, anon_union const***)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(aenum, anon_struct const&, anon_union const***)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(anon_enum, astruct const&, aunion const***)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(anon_enum, astruct const&, aunion const***)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(anon_enum, astruct const&, aunion const***)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(anon_enum, astruct const&, aunion const***)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(anon_enum, astruct const&, anon_union const***)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(anon_enum, astruct const&, anon_union const***)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(anon_enum, astruct const&, anon_union const***)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(anon_enum, astruct const&, anon_union const***)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(anon_enum, anon_struct const&, aunion const***)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(anon_enum, anon_struct const&, aunion const***)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(anon_enum, anon_struct const&, aunion const***)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(anon_enum, anon_struct const&, aunion const***)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(anon_enum, anon_struct const&, anon_union const***)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(anon_enum, anon_struct const&, anon_union const***)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(anon_enum, anon_struct const&, anon_union const***)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(anon_enum, anon_struct const&, anon_union const***)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(aenum, astruct const&, aunion const***)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(aenum, astruct const&, aunion const***)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(aenum, astruct const&, aunion const***)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(aenum, astruct const&, aunion const***)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(aenum, astruct const&, anon_union const***)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(aenum, astruct const&, anon_union const***)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(aenum, astruct const&, anon_union const***)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(aenum, astruct const&, anon_union const***)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(aenum, anon_struct const&, aunion const***)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(aenum, anon_struct const&, aunion const***)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(aenum, anon_struct const&, aunion const***)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(aenum, anon_struct const&, aunion const***)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(aenum, anon_struct const&, anon_union const***)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(aenum, anon_struct const&, anon_union const***)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(aenum, anon_struct const&, anon_union const***)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(aenum, anon_struct const&, anon_union const***)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(anon_enum, astruct const&, aunion const***)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(anon_enum, astruct const&, aunion const***)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(anon_enum, astruct const&, aunion const***)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(anon_enum, astruct const&, aunion const***)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(anon_enum, astruct const&, anon_union const***)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(anon_enum, astruct const&, anon_union const***)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(anon_enum, astruct const&, anon_union const***)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(anon_enum, astruct const&, anon_union const***)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(anon_enum, anon_struct const&, aunion const***)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(anon_enum, anon_struct const&, aunion const***)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(anon_enum, anon_struct const&, aunion const***)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(anon_enum, anon_struct const&, aunion const***)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(anon_enum, anon_struct const&, anon_union const***)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(anon_enum, anon_struct const&, anon_union const***)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(anon_enum, anon_struct const&, anon_union const***)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(anon_enum, anon_struct const&, anon_union const***)'
+PASS: gdb.cp/meth-typedefs.exp: list B::test(aenum, astruct const&, aunion const***)
+PASS: gdb.cp/meth-typedefs.exp: list 'B::test(aenum, astruct const&, aunion const***)'
+PASS: gdb.cp/meth-typedefs.exp: break B::test(aenum, astruct const&, aunion const***)
+PASS: gdb.cp/meth-typedefs.exp: break 'B::test(aenum, astruct const&, aunion const***)'
+PASS: gdb.cp/meth-typedefs.exp: list B::test(aenum, astruct const&, anon_union const***)
+PASS: gdb.cp/meth-typedefs.exp: list 'B::test(aenum, astruct const&, anon_union const***)'
+PASS: gdb.cp/meth-typedefs.exp: break B::test(aenum, astruct const&, anon_union const***)
+PASS: gdb.cp/meth-typedefs.exp: break 'B::test(aenum, astruct const&, anon_union const***)'
+PASS: gdb.cp/meth-typedefs.exp: list B::test(aenum, anon_struct const&, aunion const***)
+PASS: gdb.cp/meth-typedefs.exp: list 'B::test(aenum, anon_struct const&, aunion const***)'
+PASS: gdb.cp/meth-typedefs.exp: break B::test(aenum, anon_struct const&, aunion const***)
+PASS: gdb.cp/meth-typedefs.exp: break 'B::test(aenum, anon_struct const&, aunion const***)'
+PASS: gdb.cp/meth-typedefs.exp: list B::test(aenum, anon_struct const&, anon_union const***)
+PASS: gdb.cp/meth-typedefs.exp: list 'B::test(aenum, anon_struct const&, anon_union const***)'
+PASS: gdb.cp/meth-typedefs.exp: break B::test(aenum, anon_struct const&, anon_union const***)
+PASS: gdb.cp/meth-typedefs.exp: break 'B::test(aenum, anon_struct const&, anon_union const***)'
+PASS: gdb.cp/meth-typedefs.exp: list B::test(anon_enum, astruct const&, aunion const***)
+PASS: gdb.cp/meth-typedefs.exp: list 'B::test(anon_enum, astruct const&, aunion const***)'
+PASS: gdb.cp/meth-typedefs.exp: break B::test(anon_enum, astruct const&, aunion const***)
+PASS: gdb.cp/meth-typedefs.exp: break 'B::test(anon_enum, astruct const&, aunion const***)'
+PASS: gdb.cp/meth-typedefs.exp: list B::test(anon_enum, astruct const&, anon_union const***)
+PASS: gdb.cp/meth-typedefs.exp: list 'B::test(anon_enum, astruct const&, anon_union const***)'
+PASS: gdb.cp/meth-typedefs.exp: break B::test(anon_enum, astruct const&, anon_union const***)
+PASS: gdb.cp/meth-typedefs.exp: break 'B::test(anon_enum, astruct const&, anon_union const***)'
+PASS: gdb.cp/meth-typedefs.exp: list B::test(anon_enum, anon_struct const&, aunion const***)
+PASS: gdb.cp/meth-typedefs.exp: list 'B::test(anon_enum, anon_struct const&, aunion const***)'
+PASS: gdb.cp/meth-typedefs.exp: break B::test(anon_enum, anon_struct const&, aunion const***)
+PASS: gdb.cp/meth-typedefs.exp: break 'B::test(anon_enum, anon_struct const&, aunion const***)'
+PASS: gdb.cp/meth-typedefs.exp: list B::test(anon_enum, anon_struct const&, anon_union const***)
+PASS: gdb.cp/meth-typedefs.exp: list 'B::test(anon_enum, anon_struct const&, anon_union const***)'
+PASS: gdb.cp/meth-typedefs.exp: break B::test(anon_enum, anon_struct const&, anon_union const***)
+PASS: gdb.cp/meth-typedefs.exp: break 'B::test(anon_enum, anon_struct const&, anon_union const***)'
+PASS: gdb.cp/meth-typedefs.exp: list test(aenum, astruct const&, aunion const***)
+PASS: gdb.cp/meth-typedefs.exp: list 'test(aenum, astruct const&, aunion const***)'
+PASS: gdb.cp/meth-typedefs.exp: break test(aenum, astruct const&, aunion const***)
+PASS: gdb.cp/meth-typedefs.exp: break 'test(aenum, astruct const&, aunion const***)'
+PASS: gdb.cp/meth-typedefs.exp: list test(aenum, astruct const&, anon_union const***)
+PASS: gdb.cp/meth-typedefs.exp: list 'test(aenum, astruct const&, anon_union const***)'
+PASS: gdb.cp/meth-typedefs.exp: break test(aenum, astruct const&, anon_union const***)
+PASS: gdb.cp/meth-typedefs.exp: break 'test(aenum, astruct const&, anon_union const***)'
+PASS: gdb.cp/meth-typedefs.exp: list test(aenum, anon_struct const&, aunion const***)
+PASS: gdb.cp/meth-typedefs.exp: list 'test(aenum, anon_struct const&, aunion const***)'
+PASS: gdb.cp/meth-typedefs.exp: break test(aenum, anon_struct const&, aunion const***)
+PASS: gdb.cp/meth-typedefs.exp: break 'test(aenum, anon_struct const&, aunion const***)'
+PASS: gdb.cp/meth-typedefs.exp: list test(aenum, anon_struct const&, anon_union const***)
+PASS: gdb.cp/meth-typedefs.exp: list 'test(aenum, anon_struct const&, anon_union const***)'
+PASS: gdb.cp/meth-typedefs.exp: break test(aenum, anon_struct const&, anon_union const***)
+PASS: gdb.cp/meth-typedefs.exp: break 'test(aenum, anon_struct const&, anon_union const***)'
+PASS: gdb.cp/meth-typedefs.exp: list test(anon_enum, astruct const&, aunion const***)
+PASS: gdb.cp/meth-typedefs.exp: list 'test(anon_enum, astruct const&, aunion const***)'
+PASS: gdb.cp/meth-typedefs.exp: break test(anon_enum, astruct const&, aunion const***)
+PASS: gdb.cp/meth-typedefs.exp: break 'test(anon_enum, astruct const&, aunion const***)'
+PASS: gdb.cp/meth-typedefs.exp: list test(anon_enum, astruct const&, anon_union const***)
+PASS: gdb.cp/meth-typedefs.exp: list 'test(anon_enum, astruct const&, anon_union const***)'
+PASS: gdb.cp/meth-typedefs.exp: break test(anon_enum, astruct const&, anon_union const***)
+PASS: gdb.cp/meth-typedefs.exp: break 'test(anon_enum, astruct const&, anon_union const***)'
+PASS: gdb.cp/meth-typedefs.exp: list test(anon_enum, anon_struct const&, aunion const***)
+PASS: gdb.cp/meth-typedefs.exp: list 'test(anon_enum, anon_struct const&, aunion const***)'
+PASS: gdb.cp/meth-typedefs.exp: break test(anon_enum, anon_struct const&, aunion const***)
+PASS: gdb.cp/meth-typedefs.exp: break 'test(anon_enum, anon_struct const&, aunion const***)'
+PASS: gdb.cp/meth-typedefs.exp: list test(anon_enum, anon_struct const&, anon_union const***)
+PASS: gdb.cp/meth-typedefs.exp: list 'test(anon_enum, anon_struct const&, anon_union const***)'
+PASS: gdb.cp/meth-typedefs.exp: break test(anon_enum, anon_struct const&, anon_union const***)
+PASS: gdb.cp/meth-typedefs.exp: break 'test(anon_enum, anon_struct const&, anon_union const***)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(fptr1*)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(fptr1*)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(fptr1*)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(fptr1*)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(void (**) (my_other_type))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(void (**) (my_other_type))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(void (**) (my_other_type))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(void (**) (my_other_type))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(void (**) (my_type))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(void (**) (my_type))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(void (**) (my_type))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(void (**) (my_type))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(void (**) (const char* const*))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(void (**) (const char* const*))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(void (**) (const char* const*))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(void (**) (const char* const*))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(fptr1*)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(fptr1*)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(fptr1*)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(fptr1*)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(void (**) (my_other_type))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(void (**) (my_other_type))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(void (**) (my_other_type))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(void (**) (my_other_type))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(void (**) (my_type))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(void (**) (my_type))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(void (**) (my_type))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(void (**) (my_type))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(void (**) (const char* const*))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(void (**) (const char* const*))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(void (**) (const char* const*))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(void (**) (const char* const*))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(fptr3)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(fptr3)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(fptr3)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(fptr3)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(void (*)(fptr2, my_other_type))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(void (*)(fptr2, my_other_type))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(void (*)(fptr2, my_other_type))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(void (*)(fptr2, my_other_type))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(void (*)(void (*)(fptr1, my_other_type_2), my_other_type))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(void (*)(void (*)(fptr1, my_other_type_2), my_other_type))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(void (*)(void (*)(fptr1, my_other_type_2), my_other_type))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(void (*)(void (*)(fptr1, my_other_type_2), my_other_type))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(void (*)(void (*)(void (*) (my_other_type), my_other_type_2), my_other_type))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(void (*)(void (*)(void (*) (my_other_type), my_other_type_2), my_other_type))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(void (*)(void (*)(void (*) (my_other_type), my_other_type_2), my_other_type))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(void (*)(void (*)(void (*) (my_other_type), my_other_type_2), my_other_type))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(void (*)(void (*)(void (*) (my_type), my_other_type_2), my_other_type))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(void (*)(void (*)(void (*) (my_type), my_other_type_2), my_other_type))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(void (*)(void (*)(void (*) (my_type), my_other_type_2), my_other_type))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(void (*)(void (*)(void (*) (my_type), my_other_type_2), my_other_type))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(void (*)(void (*)(void (*) (const char* const*), my_other_type_2), my_other_type))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(void (*)(void (*)(void (*) (const char* const*), my_other_type_2), my_other_type))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(void (*)(void (*)(void (*) (const char* const*), my_other_type_2), my_other_type))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(void (*)(void (*)(void (*) (const char* const*), my_other_type_2), my_other_type))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(void (*)(void (*)(fptr1, my_type_2), my_other_type))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(void (*)(void (*)(fptr1, my_type_2), my_other_type))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(void (*)(void (*)(fptr1, my_type_2), my_other_type))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(void (*)(void (*)(fptr1, my_type_2), my_other_type))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(void (*)(void (*)(void (*) (my_other_type), my_type_2), my_other_type))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(void (*)(void (*)(void (*) (my_other_type), my_type_2), my_other_type))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(void (*)(void (*)(void (*) (my_other_type), my_type_2), my_other_type))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(void (*)(void (*)(void (*) (my_other_type), my_type_2), my_other_type))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(void (*)(void (*)(void (*) (my_type), my_type_2), my_other_type))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(void (*)(void (*)(void (*) (my_type), my_type_2), my_other_type))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(void (*)(void (*)(void (*) (my_type), my_type_2), my_other_type))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(void (*)(void (*)(void (*) (my_type), my_type_2), my_other_type))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(void (*)(void (*)(void (*) (const char* const*), my_type_2), my_other_type))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(void (*)(void (*)(void (*) (const char* const*), my_type_2), my_other_type))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(void (*)(void (*)(void (*) (const char* const*), my_type_2), my_other_type))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(void (*)(void (*)(void (*) (const char* const*), my_type_2), my_other_type))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(void (*)(void (*)(fptr1, int), my_other_type))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(void (*)(void (*)(fptr1, int), my_other_type))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(void (*)(void (*)(fptr1, int), my_other_type))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(void (*)(void (*)(fptr1, int), my_other_type))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(void (*)(void (*)(void (*) (my_other_type), int), my_other_type))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(void (*)(void (*)(void (*) (my_other_type), int), my_other_type))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(void (*)(void (*)(void (*) (my_other_type), int), my_other_type))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(void (*)(void (*)(void (*) (my_other_type), int), my_other_type))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(void (*)(void (*)(void (*) (my_type), int), my_other_type))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(void (*)(void (*)(void (*) (my_type), int), my_other_type))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(void (*)(void (*)(void (*) (my_type), int), my_other_type))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(void (*)(void (*)(void (*) (my_type), int), my_other_type))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(void (*)(void (*)(void (*) (const char* const*), int), my_other_type))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(void (*)(void (*)(void (*) (const char* const*), int), my_other_type))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(void (*)(void (*)(void (*) (const char* const*), int), my_other_type))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(void (*)(void (*)(void (*) (const char* const*), int), my_other_type))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(void (*)(fptr2, my_type))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(void (*)(fptr2, my_type))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(void (*)(fptr2, my_type))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(void (*)(fptr2, my_type))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(void (*)(void (*)(fptr1, my_other_type_2), my_type))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(void (*)(void (*)(fptr1, my_other_type_2), my_type))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(void (*)(void (*)(fptr1, my_other_type_2), my_type))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(void (*)(void (*)(fptr1, my_other_type_2), my_type))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(void (*)(void (*)(void (*) (my_other_type), my_other_type_2), my_type))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(void (*)(void (*)(void (*) (my_other_type), my_other_type_2), my_type))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(void (*)(void (*)(void (*) (my_other_type), my_other_type_2), my_type))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(void (*)(void (*)(void (*) (my_other_type), my_other_type_2), my_type))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(void (*)(void (*)(void (*) (my_type), my_other_type_2), my_type))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(void (*)(void (*)(void (*) (my_type), my_other_type_2), my_type))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(void (*)(void (*)(void (*) (my_type), my_other_type_2), my_type))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(void (*)(void (*)(void (*) (my_type), my_other_type_2), my_type))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(void (*)(void (*)(void (*) (const char* const*), my_other_type_2), my_type))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(void (*)(void (*)(void (*) (const char* const*), my_other_type_2), my_type))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(void (*)(void (*)(void (*) (const char* const*), my_other_type_2), my_type))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(void (*)(void (*)(void (*) (const char* const*), my_other_type_2), my_type))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(void (*)(void (*)(fptr1, my_type_2), my_type))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(void (*)(void (*)(fptr1, my_type_2), my_type))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(void (*)(void (*)(fptr1, my_type_2), my_type))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(void (*)(void (*)(fptr1, my_type_2), my_type))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(void (*)(void (*)(void (*) (my_other_type), my_type_2), my_type))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(void (*)(void (*)(void (*) (my_other_type), my_type_2), my_type))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(void (*)(void (*)(void (*) (my_other_type), my_type_2), my_type))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(void (*)(void (*)(void (*) (my_other_type), my_type_2), my_type))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(void (*)(void (*)(void (*) (my_type), my_type_2), my_type))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(void (*)(void (*)(void (*) (my_type), my_type_2), my_type))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(void (*)(void (*)(void (*) (my_type), my_type_2), my_type))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(void (*)(void (*)(void (*) (my_type), my_type_2), my_type))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(void (*)(void (*)(void (*) (const char* const*), my_type_2), my_type))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(void (*)(void (*)(void (*) (const char* const*), my_type_2), my_type))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(void (*)(void (*)(void (*) (const char* const*), my_type_2), my_type))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(void (*)(void (*)(void (*) (const char* const*), my_type_2), my_type))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(void (*)(void (*)(fptr1, int), my_type))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(void (*)(void (*)(fptr1, int), my_type))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(void (*)(void (*)(fptr1, int), my_type))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(void (*)(void (*)(fptr1, int), my_type))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(void (*)(void (*)(void (*) (my_other_type), int), my_type))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(void (*)(void (*)(void (*) (my_other_type), int), my_type))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(void (*)(void (*)(void (*) (my_other_type), int), my_type))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(void (*)(void (*)(void (*) (my_other_type), int), my_type))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(void (*)(void (*)(void (*) (my_type), int), my_type))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(void (*)(void (*)(void (*) (my_type), int), my_type))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(void (*)(void (*)(void (*) (my_type), int), my_type))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(void (*)(void (*)(void (*) (my_type), int), my_type))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(void (*)(void (*)(void (*) (const char* const*), int), my_type))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(void (*)(void (*)(void (*) (const char* const*), int), my_type))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(void (*)(void (*)(void (*) (const char* const*), int), my_type))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(void (*)(void (*)(void (*) (const char* const*), int), my_type))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(void (*)(fptr2, const char* const*))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(void (*)(fptr2, const char* const*))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(void (*)(fptr2, const char* const*))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(void (*)(fptr2, const char* const*))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(void (*)(void (*)(fptr1, my_other_type_2), const char* const*))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(void (*)(void (*)(fptr1, my_other_type_2), const char* const*))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(void (*)(void (*)(fptr1, my_other_type_2), const char* const*))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(void (*)(void (*)(fptr1, my_other_type_2), const char* const*))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(void (*)(void (*)(void (*) (my_other_type), my_other_type_2), const char* const*))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(void (*)(void (*)(void (*) (my_other_type), my_other_type_2), const char* const*))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(void (*)(void (*)(void (*) (my_other_type), my_other_type_2), const char* const*))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(void (*)(void (*)(void (*) (my_other_type), my_other_type_2), const char* const*))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(void (*)(void (*)(void (*) (my_type), my_other_type_2), const char* const*))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(void (*)(void (*)(void (*) (my_type), my_other_type_2), const char* const*))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(void (*)(void (*)(void (*) (my_type), my_other_type_2), const char* const*))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(void (*)(void (*)(void (*) (my_type), my_other_type_2), const char* const*))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(void (*)(void (*)(void (*) (const char* const*), my_other_type_2), const char* const*))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(void (*)(void (*)(void (*) (const char* const*), my_other_type_2), const char* const*))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(void (*)(void (*)(void (*) (const char* const*), my_other_type_2), const char* const*))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(void (*)(void (*)(void (*) (const char* const*), my_other_type_2), const char* const*))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(void (*)(void (*)(fptr1, my_type_2), const char* const*))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(void (*)(void (*)(fptr1, my_type_2), const char* const*))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(void (*)(void (*)(fptr1, my_type_2), const char* const*))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(void (*)(void (*)(fptr1, my_type_2), const char* const*))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(void (*)(void (*)(void (*) (my_other_type), my_type_2), const char* const*))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(void (*)(void (*)(void (*) (my_other_type), my_type_2), const char* const*))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(void (*)(void (*)(void (*) (my_other_type), my_type_2), const char* const*))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(void (*)(void (*)(void (*) (my_other_type), my_type_2), const char* const*))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(void (*)(void (*)(void (*) (my_type), my_type_2), const char* const*))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(void (*)(void (*)(void (*) (my_type), my_type_2), const char* const*))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(void (*)(void (*)(void (*) (my_type), my_type_2), const char* const*))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(void (*)(void (*)(void (*) (my_type), my_type_2), const char* const*))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(void (*)(void (*)(void (*) (const char* const*), my_type_2), const char* const*))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(void (*)(void (*)(void (*) (const char* const*), my_type_2), const char* const*))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(void (*)(void (*)(void (*) (const char* const*), my_type_2), const char* const*))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(void (*)(void (*)(void (*) (const char* const*), my_type_2), const char* const*))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(void (*)(void (*)(fptr1, int), const char* const*))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(void (*)(void (*)(fptr1, int), const char* const*))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(void (*)(void (*)(fptr1, int), const char* const*))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(void (*)(void (*)(fptr1, int), const char* const*))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(void (*)(void (*)(void (*) (my_other_type), int), const char* const*))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(void (*)(void (*)(void (*) (my_other_type), int), const char* const*))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(void (*)(void (*)(void (*) (my_other_type), int), const char* const*))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(void (*)(void (*)(void (*) (my_other_type), int), const char* const*))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(void (*)(void (*)(void (*) (my_type), int), const char* const*))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(void (*)(void (*)(void (*) (my_type), int), const char* const*))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(void (*)(void (*)(void (*) (my_type), int), const char* const*))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(void (*)(void (*)(void (*) (my_type), int), const char* const*))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(void (*)(void (*)(void (*) (const char* const*), int), const char* const*))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(void (*)(void (*)(void (*) (const char* const*), int), const char* const*))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(void (*)(void (*)(void (*) (const char* const*), int), const char* const*))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(void (*)(void (*)(void (*) (const char* const*), int), const char* const*))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(fptr3)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(fptr3)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(fptr3)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(fptr3)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(void (*)(fptr2, my_other_type))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(void (*)(fptr2, my_other_type))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(void (*)(fptr2, my_other_type))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(void (*)(fptr2, my_other_type))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(void (*)(void (*)(fptr1, my_other_type_2), my_other_type))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(void (*)(void (*)(fptr1, my_other_type_2), my_other_type))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(void (*)(void (*)(fptr1, my_other_type_2), my_other_type))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(void (*)(void (*)(fptr1, my_other_type_2), my_other_type))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(void (*)(void (*)(void (*) (my_other_type), my_other_type_2), my_other_type))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(void (*)(void (*)(void (*) (my_other_type), my_other_type_2), my_other_type))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(void (*)(void (*)(void (*) (my_other_type), my_other_type_2), my_other_type))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(void (*)(void (*)(void (*) (my_other_type), my_other_type_2), my_other_type))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(void (*)(void (*)(void (*) (my_type), my_other_type_2), my_other_type))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(void (*)(void (*)(void (*) (my_type), my_other_type_2), my_other_type))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(void (*)(void (*)(void (*) (my_type), my_other_type_2), my_other_type))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(void (*)(void (*)(void (*) (my_type), my_other_type_2), my_other_type))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(void (*)(void (*)(void (*) (const char* const*), my_other_type_2), my_other_type))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(void (*)(void (*)(void (*) (const char* const*), my_other_type_2), my_other_type))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(void (*)(void (*)(void (*) (const char* const*), my_other_type_2), my_other_type))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(void (*)(void (*)(void (*) (const char* const*), my_other_type_2), my_other_type))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(void (*)(void (*)(fptr1, my_type_2), my_other_type))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(void (*)(void (*)(fptr1, my_type_2), my_other_type))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(void (*)(void (*)(fptr1, my_type_2), my_other_type))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(void (*)(void (*)(fptr1, my_type_2), my_other_type))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(void (*)(void (*)(void (*) (my_other_type), my_type_2), my_other_type))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(void (*)(void (*)(void (*) (my_other_type), my_type_2), my_other_type))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(void (*)(void (*)(void (*) (my_other_type), my_type_2), my_other_type))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(void (*)(void (*)(void (*) (my_other_type), my_type_2), my_other_type))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(void (*)(void (*)(void (*) (my_type), my_type_2), my_other_type))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(void (*)(void (*)(void (*) (my_type), my_type_2), my_other_type))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(void (*)(void (*)(void (*) (my_type), my_type_2), my_other_type))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(void (*)(void (*)(void (*) (my_type), my_type_2), my_other_type))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(void (*)(void (*)(void (*) (const char* const*), my_type_2), my_other_type))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(void (*)(void (*)(void (*) (const char* const*), my_type_2), my_other_type))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(void (*)(void (*)(void (*) (const char* const*), my_type_2), my_other_type))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(void (*)(void (*)(void (*) (const char* const*), my_type_2), my_other_type))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(void (*)(void (*)(fptr1, int), my_other_type))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(void (*)(void (*)(fptr1, int), my_other_type))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(void (*)(void (*)(fptr1, int), my_other_type))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(void (*)(void (*)(fptr1, int), my_other_type))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(void (*)(void (*)(void (*) (my_other_type), int), my_other_type))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(void (*)(void (*)(void (*) (my_other_type), int), my_other_type))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(void (*)(void (*)(void (*) (my_other_type), int), my_other_type))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(void (*)(void (*)(void (*) (my_other_type), int), my_other_type))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(void (*)(void (*)(void (*) (my_type), int), my_other_type))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(void (*)(void (*)(void (*) (my_type), int), my_other_type))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(void (*)(void (*)(void (*) (my_type), int), my_other_type))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(void (*)(void (*)(void (*) (my_type), int), my_other_type))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(void (*)(void (*)(void (*) (const char* const*), int), my_other_type))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(void (*)(void (*)(void (*) (const char* const*), int), my_other_type))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(void (*)(void (*)(void (*) (const char* const*), int), my_other_type))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(void (*)(void (*)(void (*) (const char* const*), int), my_other_type))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(void (*)(fptr2, my_type))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(void (*)(fptr2, my_type))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(void (*)(fptr2, my_type))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(void (*)(fptr2, my_type))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(void (*)(void (*)(fptr1, my_other_type_2), my_type))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(void (*)(void (*)(fptr1, my_other_type_2), my_type))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(void (*)(void (*)(fptr1, my_other_type_2), my_type))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(void (*)(void (*)(fptr1, my_other_type_2), my_type))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(void (*)(void (*)(void (*) (my_other_type), my_other_type_2), my_type))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(void (*)(void (*)(void (*) (my_other_type), my_other_type_2), my_type))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(void (*)(void (*)(void (*) (my_other_type), my_other_type_2), my_type))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(void (*)(void (*)(void (*) (my_other_type), my_other_type_2), my_type))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(void (*)(void (*)(void (*) (my_type), my_other_type_2), my_type))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(void (*)(void (*)(void (*) (my_type), my_other_type_2), my_type))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(void (*)(void (*)(void (*) (my_type), my_other_type_2), my_type))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(void (*)(void (*)(void (*) (my_type), my_other_type_2), my_type))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(void (*)(void (*)(void (*) (const char* const*), my_other_type_2), my_type))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(void (*)(void (*)(void (*) (const char* const*), my_other_type_2), my_type))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(void (*)(void (*)(void (*) (const char* const*), my_other_type_2), my_type))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(void (*)(void (*)(void (*) (const char* const*), my_other_type_2), my_type))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(void (*)(void (*)(fptr1, my_type_2), my_type))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(void (*)(void (*)(fptr1, my_type_2), my_type))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(void (*)(void (*)(fptr1, my_type_2), my_type))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(void (*)(void (*)(fptr1, my_type_2), my_type))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(void (*)(void (*)(void (*) (my_other_type), my_type_2), my_type))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(void (*)(void (*)(void (*) (my_other_type), my_type_2), my_type))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(void (*)(void (*)(void (*) (my_other_type), my_type_2), my_type))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(void (*)(void (*)(void (*) (my_other_type), my_type_2), my_type))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(void (*)(void (*)(void (*) (my_type), my_type_2), my_type))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(void (*)(void (*)(void (*) (my_type), my_type_2), my_type))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(void (*)(void (*)(void (*) (my_type), my_type_2), my_type))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(void (*)(void (*)(void (*) (my_type), my_type_2), my_type))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(void (*)(void (*)(void (*) (const char* const*), my_type_2), my_type))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(void (*)(void (*)(void (*) (const char* const*), my_type_2), my_type))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(void (*)(void (*)(void (*) (const char* const*), my_type_2), my_type))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(void (*)(void (*)(void (*) (const char* const*), my_type_2), my_type))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(void (*)(void (*)(fptr1, int), my_type))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(void (*)(void (*)(fptr1, int), my_type))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(void (*)(void (*)(fptr1, int), my_type))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(void (*)(void (*)(fptr1, int), my_type))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(void (*)(void (*)(void (*) (my_other_type), int), my_type))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(void (*)(void (*)(void (*) (my_other_type), int), my_type))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(void (*)(void (*)(void (*) (my_other_type), int), my_type))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(void (*)(void (*)(void (*) (my_other_type), int), my_type))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(void (*)(void (*)(void (*) (my_type), int), my_type))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(void (*)(void (*)(void (*) (my_type), int), my_type))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(void (*)(void (*)(void (*) (my_type), int), my_type))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(void (*)(void (*)(void (*) (my_type), int), my_type))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(void (*)(void (*)(void (*) (const char* const*), int), my_type))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(void (*)(void (*)(void (*) (const char* const*), int), my_type))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(void (*)(void (*)(void (*) (const char* const*), int), my_type))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(void (*)(void (*)(void (*) (const char* const*), int), my_type))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(void (*)(fptr2, const char* const*))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(void (*)(fptr2, const char* const*))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(void (*)(fptr2, const char* const*))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(void (*)(fptr2, const char* const*))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(void (*)(void (*)(fptr1, my_other_type_2), const char* const*))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(void (*)(void (*)(fptr1, my_other_type_2), const char* const*))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(void (*)(void (*)(fptr1, my_other_type_2), const char* const*))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(void (*)(void (*)(fptr1, my_other_type_2), const char* const*))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(void (*)(void (*)(void (*) (my_other_type), my_other_type_2), const char* const*))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(void (*)(void (*)(void (*) (my_other_type), my_other_type_2), const char* const*))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(void (*)(void (*)(void (*) (my_other_type), my_other_type_2), const char* const*))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(void (*)(void (*)(void (*) (my_other_type), my_other_type_2), const char* const*))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(void (*)(void (*)(void (*) (my_type), my_other_type_2), const char* const*))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(void (*)(void (*)(void (*) (my_type), my_other_type_2), const char* const*))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(void (*)(void (*)(void (*) (my_type), my_other_type_2), const char* const*))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(void (*)(void (*)(void (*) (my_type), my_other_type_2), const char* const*))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(void (*)(void (*)(void (*) (const char* const*), my_other_type_2), const char* const*))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(void (*)(void (*)(void (*) (const char* const*), my_other_type_2), const char* const*))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(void (*)(void (*)(void (*) (const char* const*), my_other_type_2), const char* const*))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(void (*)(void (*)(void (*) (const char* const*), my_other_type_2), const char* const*))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(void (*)(void (*)(fptr1, my_type_2), const char* const*))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(void (*)(void (*)(fptr1, my_type_2), const char* const*))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(void (*)(void (*)(fptr1, my_type_2), const char* const*))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(void (*)(void (*)(fptr1, my_type_2), const char* const*))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(void (*)(void (*)(void (*) (my_other_type), my_type_2), const char* const*))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(void (*)(void (*)(void (*) (my_other_type), my_type_2), const char* const*))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(void (*)(void (*)(void (*) (my_other_type), my_type_2), const char* const*))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(void (*)(void (*)(void (*) (my_other_type), my_type_2), const char* const*))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(void (*)(void (*)(void (*) (my_type), my_type_2), const char* const*))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(void (*)(void (*)(void (*) (my_type), my_type_2), const char* const*))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(void (*)(void (*)(void (*) (my_type), my_type_2), const char* const*))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(void (*)(void (*)(void (*) (my_type), my_type_2), const char* const*))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(void (*)(void (*)(void (*) (const char* const*), my_type_2), const char* const*))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(void (*)(void (*)(void (*) (const char* const*), my_type_2), const char* const*))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(void (*)(void (*)(void (*) (const char* const*), my_type_2), const char* const*))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(void (*)(void (*)(void (*) (const char* const*), my_type_2), const char* const*))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(void (*)(void (*)(fptr1, int), const char* const*))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(void (*)(void (*)(fptr1, int), const char* const*))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(void (*)(void (*)(fptr1, int), const char* const*))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(void (*)(void (*)(fptr1, int), const char* const*))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(void (*)(void (*)(void (*) (my_other_type), int), const char* const*))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(void (*)(void (*)(void (*) (my_other_type), int), const char* const*))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(void (*)(void (*)(void (*) (my_other_type), int), const char* const*))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(void (*)(void (*)(void (*) (my_other_type), int), const char* const*))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(void (*)(void (*)(void (*) (my_type), int), const char* const*))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(void (*)(void (*)(void (*) (my_type), int), const char* const*))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(void (*)(void (*)(void (*) (my_type), int), const char* const*))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(void (*)(void (*)(void (*) (my_type), int), const char* const*))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(void (*)(void (*)(void (*) (const char* const*), int), const char* const*))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(void (*)(void (*)(void (*) (const char* const*), int), const char* const*))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(void (*)(void (*)(void (*) (const char* const*), int), const char* const*))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(void (*)(void (*)(void (*) (const char* const*), int), const char* const*))'
+PASS: gdb.cp/meth-typedefs.exp: list test(my_other_type)
+PASS: gdb.cp/meth-typedefs.exp: list 'test(my_other_type)'
+PASS: gdb.cp/meth-typedefs.exp: break test(my_other_type)
+PASS: gdb.cp/meth-typedefs.exp: break 'test(my_other_type)'
+PASS: gdb.cp/meth-typedefs.exp: list test<my_other_type, my_other_type_2>(my_other_type, my_other_type_2)
+PASS: gdb.cp/meth-typedefs.exp: list 'test<my_other_type, my_other_type_2>(my_other_type, my_other_type_2)'
+PASS: gdb.cp/meth-typedefs.exp: break test<my_other_type, my_other_type_2>(my_other_type, my_other_type_2)
+PASS: gdb.cp/meth-typedefs.exp: break 'test<my_other_type, my_other_type_2>(my_other_type, my_other_type_2)'
+PASS: gdb.cp/meth-typedefs.exp: list test<my_other_type, my_other_type_2>(my_other_type, my_type_2)
+PASS: gdb.cp/meth-typedefs.exp: list 'test<my_other_type, my_other_type_2>(my_other_type, my_type_2)'
+PASS: gdb.cp/meth-typedefs.exp: break test<my_other_type, my_other_type_2>(my_other_type, my_type_2)
+PASS: gdb.cp/meth-typedefs.exp: break 'test<my_other_type, my_other_type_2>(my_other_type, my_type_2)'
+PASS: gdb.cp/meth-typedefs.exp: list test<my_other_type, my_other_type_2>(my_other_type, int)
+PASS: gdb.cp/meth-typedefs.exp: list 'test<my_other_type, my_other_type_2>(my_other_type, int)'
+PASS: gdb.cp/meth-typedefs.exp: break test<my_other_type, my_other_type_2>(my_other_type, int)
+PASS: gdb.cp/meth-typedefs.exp: break 'test<my_other_type, my_other_type_2>(my_other_type, int)'
+PASS: gdb.cp/meth-typedefs.exp: list test(my_type)
+PASS: gdb.cp/meth-typedefs.exp: list 'test(my_type)'
+PASS: gdb.cp/meth-typedefs.exp: break test(my_type)
+PASS: gdb.cp/meth-typedefs.exp: break 'test(my_type)'
+PASS: gdb.cp/meth-typedefs.exp: list test<my_other_type, my_other_type_2>(my_type, my_other_type_2)
+PASS: gdb.cp/meth-typedefs.exp: list 'test<my_other_type, my_other_type_2>(my_type, my_other_type_2)'
+PASS: gdb.cp/meth-typedefs.exp: break test<my_other_type, my_other_type_2>(my_type, my_other_type_2)
+PASS: gdb.cp/meth-typedefs.exp: break 'test<my_other_type, my_other_type_2>(my_type, my_other_type_2)'
+PASS: gdb.cp/meth-typedefs.exp: list test<my_other_type, my_other_type_2>(my_type, my_type_2)
+PASS: gdb.cp/meth-typedefs.exp: list 'test<my_other_type, my_other_type_2>(my_type, my_type_2)'
+PASS: gdb.cp/meth-typedefs.exp: break test<my_other_type, my_other_type_2>(my_type, my_type_2)
+PASS: gdb.cp/meth-typedefs.exp: break 'test<my_other_type, my_other_type_2>(my_type, my_type_2)'
+PASS: gdb.cp/meth-typedefs.exp: list test<my_other_type, my_other_type_2>(my_type, int)
+PASS: gdb.cp/meth-typedefs.exp: list 'test<my_other_type, my_other_type_2>(my_type, int)'
+PASS: gdb.cp/meth-typedefs.exp: break test<my_other_type, my_other_type_2>(my_type, int)
+PASS: gdb.cp/meth-typedefs.exp: break 'test<my_other_type, my_other_type_2>(my_type, int)'
+PASS: gdb.cp/meth-typedefs.exp: list test(const char* const*)
+PASS: gdb.cp/meth-typedefs.exp: list 'test(const char* const*)'
+PASS: gdb.cp/meth-typedefs.exp: break test(const char* const*)
+PASS: gdb.cp/meth-typedefs.exp: break 'test(const char* const*)'
+PASS: gdb.cp/meth-typedefs.exp: list test<my_other_type, my_other_type_2>(const char* const*, my_other_type_2)
+PASS: gdb.cp/meth-typedefs.exp: list 'test<my_other_type, my_other_type_2>(const char* const*, my_other_type_2)'
+PASS: gdb.cp/meth-typedefs.exp: break test<my_other_type, my_other_type_2>(const char* const*, my_other_type_2)
+PASS: gdb.cp/meth-typedefs.exp: break 'test<my_other_type, my_other_type_2>(const char* const*, my_other_type_2)'
+PASS: gdb.cp/meth-typedefs.exp: list test<my_other_type, my_other_type_2>(const char* const*, my_type_2)
+PASS: gdb.cp/meth-typedefs.exp: list 'test<my_other_type, my_other_type_2>(const char* const*, my_type_2)'
+PASS: gdb.cp/meth-typedefs.exp: break test<my_other_type, my_other_type_2>(const char* const*, my_type_2)
+PASS: gdb.cp/meth-typedefs.exp: break 'test<my_other_type, my_other_type_2>(const char* const*, my_type_2)'
+PASS: gdb.cp/meth-typedefs.exp: list test<my_other_type, my_other_type_2>(const char* const*, int)
+PASS: gdb.cp/meth-typedefs.exp: list 'test<my_other_type, my_other_type_2>(const char* const*, int)'
+PASS: gdb.cp/meth-typedefs.exp: break test<my_other_type, my_other_type_2>(const char* const*, int)
+PASS: gdb.cp/meth-typedefs.exp: break 'test<my_other_type, my_other_type_2>(const char* const*, int)'
+PASS: gdb.cp/meth-typedefs.exp: list B::test(my_other_type)
+PASS: gdb.cp/meth-typedefs.exp: list 'B::test(my_other_type)'
+PASS: gdb.cp/meth-typedefs.exp: break B::test(my_other_type)
+PASS: gdb.cp/meth-typedefs.exp: break 'B::test(my_other_type)'
+PASS: gdb.cp/meth-typedefs.exp: list B::test<my_other_type, my_other_type_2>(my_other_type, my_other_type_2)
+PASS: gdb.cp/meth-typedefs.exp: list 'B::test<my_other_type, my_other_type_2>(my_other_type, my_other_type_2)'
+PASS: gdb.cp/meth-typedefs.exp: break B::test<my_other_type, my_other_type_2>(my_other_type, my_other_type_2)
+PASS: gdb.cp/meth-typedefs.exp: break 'B::test<my_other_type, my_other_type_2>(my_other_type, my_other_type_2)'
+PASS: gdb.cp/meth-typedefs.exp: list B::test<my_other_type, my_other_type_2>(my_other_type, my_type_2)
+PASS: gdb.cp/meth-typedefs.exp: list 'B::test<my_other_type, my_other_type_2>(my_other_type, my_type_2)'
+PASS: gdb.cp/meth-typedefs.exp: break B::test<my_other_type, my_other_type_2>(my_other_type, my_type_2)
+PASS: gdb.cp/meth-typedefs.exp: break 'B::test<my_other_type, my_other_type_2>(my_other_type, my_type_2)'
+PASS: gdb.cp/meth-typedefs.exp: list B::test<my_other_type, my_other_type_2>(my_other_type, int)
+PASS: gdb.cp/meth-typedefs.exp: list 'B::test<my_other_type, my_other_type_2>(my_other_type, int)'
+PASS: gdb.cp/meth-typedefs.exp: break B::test<my_other_type, my_other_type_2>(my_other_type, int)
+PASS: gdb.cp/meth-typedefs.exp: break 'B::test<my_other_type, my_other_type_2>(my_other_type, int)'
+PASS: gdb.cp/meth-typedefs.exp: list B::test(my_type)
+PASS: gdb.cp/meth-typedefs.exp: list 'B::test(my_type)'
+PASS: gdb.cp/meth-typedefs.exp: break B::test(my_type)
+PASS: gdb.cp/meth-typedefs.exp: break 'B::test(my_type)'
+PASS: gdb.cp/meth-typedefs.exp: list B::test<my_other_type, my_other_type_2>(my_type, my_other_type_2)
+PASS: gdb.cp/meth-typedefs.exp: list 'B::test<my_other_type, my_other_type_2>(my_type, my_other_type_2)'
+PASS: gdb.cp/meth-typedefs.exp: break B::test<my_other_type, my_other_type_2>(my_type, my_other_type_2)
+PASS: gdb.cp/meth-typedefs.exp: break 'B::test<my_other_type, my_other_type_2>(my_type, my_other_type_2)'
+PASS: gdb.cp/meth-typedefs.exp: list B::test<my_other_type, my_other_type_2>(my_type, my_type_2)
+PASS: gdb.cp/meth-typedefs.exp: list 'B::test<my_other_type, my_other_type_2>(my_type, my_type_2)'
+PASS: gdb.cp/meth-typedefs.exp: break B::test<my_other_type, my_other_type_2>(my_type, my_type_2)
+PASS: gdb.cp/meth-typedefs.exp: break 'B::test<my_other_type, my_other_type_2>(my_type, my_type_2)'
+PASS: gdb.cp/meth-typedefs.exp: list B::test<my_other_type, my_other_type_2>(my_type, int)
+PASS: gdb.cp/meth-typedefs.exp: list 'B::test<my_other_type, my_other_type_2>(my_type, int)'
+PASS: gdb.cp/meth-typedefs.exp: break B::test<my_other_type, my_other_type_2>(my_type, int)
+PASS: gdb.cp/meth-typedefs.exp: break 'B::test<my_other_type, my_other_type_2>(my_type, int)'
+PASS: gdb.cp/meth-typedefs.exp: list B::test(const char* const*)
+PASS: gdb.cp/meth-typedefs.exp: list 'B::test(const char* const*)'
+PASS: gdb.cp/meth-typedefs.exp: break B::test(const char* const*)
+PASS: gdb.cp/meth-typedefs.exp: break 'B::test(const char* const*)'
+PASS: gdb.cp/meth-typedefs.exp: list B::test<my_other_type, my_other_type_2>(const char* const*, my_other_type_2)
+PASS: gdb.cp/meth-typedefs.exp: list 'B::test<my_other_type, my_other_type_2>(const char* const*, my_other_type_2)'
+PASS: gdb.cp/meth-typedefs.exp: break B::test<my_other_type, my_other_type_2>(const char* const*, my_other_type_2)
+PASS: gdb.cp/meth-typedefs.exp: break 'B::test<my_other_type, my_other_type_2>(const char* const*, my_other_type_2)'
+PASS: gdb.cp/meth-typedefs.exp: list B::test<my_other_type, my_other_type_2>(const char* const*, my_type_2)
+PASS: gdb.cp/meth-typedefs.exp: list 'B::test<my_other_type, my_other_type_2>(const char* const*, my_type_2)'
+PASS: gdb.cp/meth-typedefs.exp: break B::test<my_other_type, my_other_type_2>(const char* const*, my_type_2)
+PASS: gdb.cp/meth-typedefs.exp: break 'B::test<my_other_type, my_other_type_2>(const char* const*, my_type_2)'
+PASS: gdb.cp/meth-typedefs.exp: list B::test<my_other_type, my_other_type_2>(const char* const*, int)
+PASS: gdb.cp/meth-typedefs.exp: list 'B::test<my_other_type, my_other_type_2>(const char* const*, int)'
+PASS: gdb.cp/meth-typedefs.exp: break B::test<my_other_type, my_other_type_2>(const char* const*, int)
+PASS: gdb.cp/meth-typedefs.exp: break 'B::test<my_other_type, my_other_type_2>(const char* const*, int)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(CORE_ADDR (*) [10])
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(CORE_ADDR (*) [10])'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(CORE_ADDR (*) [10])
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(CORE_ADDR (*) [10])'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(unsigned long (*) [10])
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(unsigned long (*) [10])'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(unsigned long (*) [10])
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(unsigned long (*) [10])'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(CORE_ADDR (*) [10])
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(CORE_ADDR (*) [10])'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(CORE_ADDR (*) [10])
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(CORE_ADDR (*) [10])'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(unsigned long (*) [10])
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(unsigned long (*) [10])'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(unsigned long (*) [10])
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(unsigned long (*) [10])'
+PASS: gdb.cp/meth-typedefs.exp: list test(_BAR_&)
+PASS: gdb.cp/meth-typedefs.exp: list 'test(_BAR_&)'
+PASS: gdb.cp/meth-typedefs.exp: break test(_BAR_&)
+PASS: gdb.cp/meth-typedefs.exp: break 'test(_BAR_&)'
+PASS: gdb.cp/meth-typedefs.exp: list test(a::b::BAR&)
+PASS: gdb.cp/meth-typedefs.exp: list 'test(a::b::BAR&)'
+PASS: gdb.cp/meth-typedefs.exp: break test(a::b::BAR&)
+PASS: gdb.cp/meth-typedefs.exp: break 'test(a::b::BAR&)'
+PASS: gdb.cp/meth-typedefs.exp: list test(a::b::c::d::bar&)
+PASS: gdb.cp/meth-typedefs.exp: list 'test(a::b::c::d::bar&)'
+PASS: gdb.cp/meth-typedefs.exp: break test(a::b::c::d::bar&)
+PASS: gdb.cp/meth-typedefs.exp: break 'test(a::b::c::d::bar&)'
+Running ./gdb.cp/minsym-fallback.exp ...
+PASS: gdb.cp/minsym-fallback.exp: set breakpoint pending off
+PASS: gdb.cp/minsym-fallback.exp: break C::f()
+PASS: gdb.cp/minsym-fallback.exp: break C::operator()()
+Running ./gdb.cp/misc.exp ...
+PASS: gdb.cp/misc.exp: deduced language is C++, before full symbols
+PASS: gdb.cp/misc.exp: deduced language is C++, after full symbols
+PASS: gdb.cp/misc.exp: print s.a for foo struct (known gcc 2.7.2 and earlier bug)
+PASS: gdb.cp/misc.exp: print as bool (setup)
+PASS: gdb.cp/misc.exp: print as bool (print 1 == 1)
+PASS: gdb.cp/misc.exp: print as bool (print 1 == 2)
+PASS: gdb.cp/misc.exp: print a bool var
+PASS: gdb.cp/misc.exp: set a bool var (setup)
+PASS: gdb.cp/misc.exp: set a bool var (print v_bool)
+PASS: gdb.cp/misc.exp: print a bool array
+PASS: gdb.cp/misc.exp: set a bool array elem (setup)
+PASS: gdb.cp/misc.exp: set a bool array elem (print v_bool_array)
+PASS: gdb.cp/misc.exp: print true
+PASS: gdb.cp/misc.exp: print false
+PASS: gdb.cp/misc.exp: 1 + true
+PASS: gdb.cp/misc.exp: 3 + false
+PASS: gdb.cp/misc.exp: 1 < 2 < 3
+PASS: gdb.cp/misc.exp: 2 < 1 > 4
+PASS: gdb.cp/misc.exp: (bool)43
+PASS: gdb.cp/misc.exp: (bool)0
+PASS: gdb.cp/misc.exp: (bool)17.93
+PASS: gdb.cp/misc.exp: (bool)0.0
+PASS: gdb.cp/misc.exp: (int)true
+PASS: gdb.cp/misc.exp: (int)false
+Running ./gdb.cp/m-static.exp ...
+PASS: gdb.cp/m-static.exp: continue to breakpoint: end of constructors
+PASS: gdb.cp/m-static.exp: simple object, static const int, accessing via 'class::method::variable
+PASS: gdb.cp/m-static.exp: simple object, static const bool
+PASS: gdb.cp/m-static.exp: simple object, static const int
+PASS: gdb.cp/m-static.exp: simple object, static long
+PASS: gdb.cp/m-static.exp: simple object, static enum
+FAIL: gdb.cp/m-static.exp: simple object instance, print quoted destructor
+FAIL: gdb.cp/m-static.exp: simple object class, ptype quoted destructor
+PASS: gdb.cp/m-static.exp: derived template object, base static const bool
+PASS: gdb.cp/m-static.exp: derived template object, base static const int
+PASS: gdb.cp/m-static.exp: derived template object, base static long
+PASS: gdb.cp/m-static.exp: derived template object, base static enum
+PASS: gdb.cp/m-static.exp: derived template object, static enum
+PASS: gdb.cp/m-static.exp: template object, static const bool
+PASS: gdb.cp/m-static.exp: template object, static const int
+PASS: gdb.cp/m-static.exp: template object, static long
+PASS: gdb.cp/m-static.exp: template object, static enum
+PASS: gdb.cp/m-static.exp: template object, static derived enum
+PASS: gdb.cp/m-static.exp: static const int initialized elsewhere
+PASS: gdb.cp/m-static.exp: static const int initialized nowhere
+PASS: gdb.cp/m-static.exp: static const int initialized in class definition
+PASS: gdb.cp/m-static.exp: static const float initialized in class definition
+PASS: gdb.cp/m-static.exp: info variable everywhere
+PASS: gdb.cp/m-static.exp: step
+FAIL: gdb.cp/m-static.exp: print svar
+Running ./gdb.cp/namespace-enum.exp ...
+PASS: gdb.cp/namespace-enum.exp: print foo::B::B_B
+PASS: gdb.cp/namespace-enum.exp: print foo::B_B
+PASS: gdb.cp/namespace-enum.exp: print A_A
+Running ./gdb.cp/namespace.exp ...
+PASS: gdb.cp/namespace.exp: show lang
+PASS: gdb.cp/namespace.exp: up from marker1
+PASS: gdb.cp/namespace.exp: print 'AAA::c'
+PASS: gdb.cp/namespace.exp: print AAA::c
+PASS: gdb.cp/namespace.exp: print ina
+PASS: gdb.cp/namespace.exp: ptype ina
+PASS: gdb.cp/namespace.exp: info func xyzq
+PASS: gdb.cp/namespace.exp: print 'AAA::xyzq'('x')
+PASS: gdb.cp/namespace.exp: print AAA::xyzq('x')
+PASS: gdb.cp/namespace.exp: break AAA::xyzq
+PASS: gdb.cp/namespace.exp: break ::ensureOtherRefs
+PASS: gdb.cp/namespace.exp: print 'BBB::CCC::xyzq'('x')
+PASS: gdb.cp/namespace.exp: print BBB::CCC::xyzq('x')
+PASS: gdb.cp/namespace.exp: break BBB::CCC::xyzq
+PASS: gdb.cp/namespace.exp: break ::BBB::CCC::xyzq
+PASS: gdb.cp/namespace.exp: print 'BBB::Class::xyzq'
+PASS: gdb.cp/namespace.exp: print BBB::Class::xyzq
+PASS: gdb.cp/namespace.exp: break BBB::Class::xyzq
+PASS: gdb.cp/namespace.exp: whatis C::cOtherFileType
+PASS: gdb.cp/namespace.exp: whatis ::C::cOtherFileType
+PASS: gdb.cp/namespace.exp: whatis C::cOtherFileVar
+PASS: gdb.cp/namespace.exp: whatis ::C::cOtherFileVar
+PASS: gdb.cp/namespace.exp: print C::cOtherFileVar
+PASS: gdb.cp/namespace.exp: print ::C::cOtherFileVar
+PASS: gdb.cp/namespace.exp: whatis C::OtherFileClass::cOtherFileClassType
+PASS: gdb.cp/namespace.exp: whatis ::C::OtherFileClass::cOtherFileClassType
+PASS: gdb.cp/namespace.exp: print C::OtherFileClass::cOtherFileClassVar
+PASS: gdb.cp/namespace.exp: print ::cOtherFileClassVar
+PASS: gdb.cp/namespace.exp: print ::C::OtherFileClass::cOtherFileClassVar
+PASS: gdb.cp/namespace.exp: print c
+PASS: gdb.cp/namespace.exp: print cc
+PASS: gdb.cp/namespace.exp: print 'C::cc'
+PASS: gdb.cp/namespace.exp: print C::cc
+PASS: gdb.cp/namespace.exp: print cd
+PASS: gdb.cp/namespace.exp: print C::D::cd
+PASS: gdb.cp/namespace.exp: print 'E::cde'
+PASS: gdb.cp/namespace.exp: print E::cde
+PASS: gdb.cp/namespace.exp: print shadow
+PASS: gdb.cp/namespace.exp: print E::ce
+PASS: gdb.cp/namespace.exp: ptype C
+PASS: gdb.cp/namespace.exp: ptype E
+PASS: gdb.cp/namespace.exp: ptype CClass
+PASS: gdb.cp/namespace.exp: ptype CClass::NestedClass
+PASS: gdb.cp/namespace.exp: ptype NestedClass
+PASS: gdb.cp/namespace.exp: ptype ::C::CClass
+PASS: gdb.cp/namespace.exp: ptype ::C::CClass::NestedClass
+PASS: gdb.cp/namespace.exp: ptype ::C::NestedClass
+PASS: gdb.cp/namespace.exp: ptype C::CClass
+PASS: gdb.cp/namespace.exp: ptype C::CClass::NestedClass
+PASS: gdb.cp/namespace.exp: ptype C::NestedClass
+PASS: gdb.cp/namespace.exp: print cOtherFile
+PASS: gdb.cp/namespace.exp: ptype OtherFileClass
+PASS: gdb.cp/namespace.exp: ptype ::C::OtherFileClass
+PASS: gdb.cp/namespace.exp: ptype C::OtherFileClass
+PASS: gdb.cp/namespace.exp: ptype OtherFileClass typedefs
+PASS: gdb.cp/namespace.exp: ptype ::C::OtherFileClass typedefs
+PASS: gdb.cp/namespace.exp: print cX
+PASS: gdb.cp/namespace.exp: print 'F::cXf'
+PASS: gdb.cp/namespace.exp: print F::cXf
+PASS: gdb.cp/namespace.exp: print F::cXfX
+PASS: gdb.cp/namespace.exp: print X
+PASS: gdb.cp/namespace.exp: print 'G::Xg'
+PASS: gdb.cp/namespace.exp: print G::Xg
+PASS: gdb.cp/namespace.exp: print G::XgX
+PASS: gdb.cp/namespace.exp: print cXOtherFile
+PASS: gdb.cp/namespace.exp: print XOtherFile
+PASS: gdb.cp/namespace.exp: print AAA::ALPHA
+PASS: gdb.cp/namespace.exp: whatis ::C::CClass::NestedClass
+PASS: gdb.cp/namespace.exp: whatis ::C::CClass::NestedClass *
+Running ./gdb.cp/namespace-nested-import.exp ...
+PASS: gdb.cp/namespace-nested-import.exp: print C::x
+Running ./gdb.cp/nextoverthrow.exp ...
+UNSUPPORTED: gdb.cp/nextoverthrow.exp: nextoverthrow.exp could not find _Unwind_DebugHook
+Running ./gdb.cp/no-dmgl-verbose.exp ...
+PASS: gdb.cp/no-dmgl-verbose.exp: set breakpoint pending off
+PASS: gdb.cp/no-dmgl-verbose.exp: DMGL_VERBOSE-demangled f(std::string) is not defined
+Running ./gdb.cp/noparam.exp ...
+PASS: gdb.cp/noparam.exp: p C::m (int)
+Running ./gdb.cp/nsdecl.exp ...
+PASS: gdb.cp/nsdecl.exp: print fakex
+Running ./gdb.cp/nsimport.exp ...
+PASS: gdb.cp/nsimport.exp: print x
+PASS: gdb.cp/nsimport.exp: print xx
+PASS: gdb.cp/nsimport.exp: print xxx
+Running ./gdb.cp/nsnested.exp ...
+PASS: gdb.cp/nsnested.exp: print ab
+PASS: gdb.cp/nsnested.exp: continue to breakpoint: C::first
+PASS: gdb.cp/nsnested.exp: print ab
+PASS: gdb.cp/nsnested.exp: print C::D::ab
+PASS: gdb.cp/nsnested.exp: continue to breakpoint: C::D::second
+PASS: gdb.cp/nsnested.exp: print ab
+Running ./gdb.cp/nsnoimports.exp ...
+PASS: gdb.cp/nsnoimports.exp: print A::_a
+PASS: gdb.cp/nsnoimports.exp: print A::B::ab
+PASS: gdb.cp/nsnoimports.exp: print A::B::C::abc
+PASS: gdb.cp/nsnoimports.exp: print _a
+PASS: gdb.cp/nsnoimports.exp: print ab
+PASS: gdb.cp/nsnoimports.exp: print abc
+PASS: gdb.cp/nsnoimports.exp: continue to breakpoint: A::B::first
+PASS: gdb.cp/nsnoimports.exp: print A::_a
+PASS: gdb.cp/nsnoimports.exp: print A::B::ab
+PASS: gdb.cp/nsnoimports.exp: print A::B::C::abc
+PASS: gdb.cp/nsnoimports.exp: print _a
+PASS: gdb.cp/nsnoimports.exp: print ab
+PASS: gdb.cp/nsnoimports.exp: print C::abc
+PASS: gdb.cp/nsnoimports.exp: print abc
+PASS: gdb.cp/nsnoimports.exp: continue to breakpoint: A::B::C::second
+PASS: gdb.cp/nsnoimports.exp: print A::_a
+PASS: gdb.cp/nsnoimports.exp: print A::B::ab
+PASS: gdb.cp/nsnoimports.exp: print A::B::C::abc
+PASS: gdb.cp/nsnoimports.exp: print _a
+PASS: gdb.cp/nsnoimports.exp: print ab
+PASS: gdb.cp/nsnoimports.exp: print abc
+Running ./gdb.cp/nsrecurs.exp ...
+PASS: gdb.cp/nsrecurs.exp: print ax
+PASS: gdb.cp/nsrecurs.exp: print dx
+PASS: gdb.cp/nsrecurs.exp: print xx
+KFAIL: gdb.cp/nsrecurs.exp: ptype G::GF (PRMS: gdb/10541)
+KFAIL: gdb.cp/nsrecurs.exp: print G::GF::FE::ex (PRMS: gdb/10541)
+Running ./gdb.cp/nsstress.exp ...
+PASS: gdb.cp/nsstress.exp: print y
+Running ./gdb.cp/nsusing.exp ...
+PASS: gdb.cp/nsusing.exp: print _a
+PASS: gdb.cp/nsusing.exp: continue to breakpoint: marker3
+PASS: gdb.cp/nsusing.exp: Print _a without import
+PASS: gdb.cp/nsusing.exp: continue to breakpoint: marker1 stop
+PASS: gdb.cp/nsusing.exp: print _a in a nested scope
+PASS: gdb.cp/nsusing.exp: print cc
+PASS: gdb.cp/nsusing.exp: print B::_a
+PASS: gdb.cp/nsusing.exp: print _a in namespace alias scope
+PASS: gdb.cp/nsusing.exp: print x in namespace alias scope
+PASS: gdb.cp/nsusing.exp: Print _a without import
+PASS: gdb.cp/nsusing.exp: print dx
+PASS: gdb.cp/nsusing.exp: print efx
+PASS: gdb.cp/nsusing.exp: print ghx
+PASS: gdb.cp/nsusing.exp: print jx
+PASS: gdb.cp/nsusing.exp: continue to breakpoint: K::marker9
+PASS: gdb.cp/nsusing.exp: print jx
+PASS: gdb.cp/nsusing.exp: continue to breakpoint: marker10 stop
+PASS: gdb.cp/nsusing.exp: print x (from M::x)
+Running ./gdb.cp/operator.exp ...
+PASS: gdb.cp/operator.exp: global operator
+PASS: gdb.cp/operator.exp: global operator overload
+PASS: gdb.cp/operator.exp: ADL operator
+PASS: gdb.cp/operator.exp: ADL operator overload
+PASS: gdb.cp/operator.exp: Fully qualified explicit operator call
+PASS: gdb.cp/operator.exp: anonymous namespace operator
+PASS: gdb.cp/operator.exp: anonymous namespace operator overload
+PASS: gdb.cp/operator.exp: anonymous namespace operator overload float
+PASS: gdb.cp/operator.exp: imported operator
+PASS: gdb.cp/operator.exp: imported operator overload
+PASS: gdb.cp/operator.exp: imported operator overload float
+PASS: gdb.cp/operator.exp: member operator
+PASS: gdb.cp/operator.exp: member operator overload
+PASS: gdb.cp/operator.exp: namespace alias
+PASS: gdb.cp/operator.exp: imported declaration
+PASS: gdb.cp/operator.exp: p l == 1
+PASS: gdb.cp/operator.exp: p x[0]
+Running ./gdb.cp/oranking.exp ...
+PASS: gdb.cp/oranking.exp: continue to breakpoint: end of main
+KFAIL: gdb.cp/oranking.exp: p foo0(b) (PRMS: gdb/12096)
+PASS: gdb.cp/oranking.exp: p test1()
+PASS: gdb.cp/oranking.exp: p foo1(b)
+PASS: gdb.cp/oranking.exp: p test2()
+KFAIL: gdb.cp/oranking.exp: p foo2(b) (PRMS: gdb/12098)
+PASS: gdb.cp/oranking.exp: p test3()
+PASS: gdb.cp/oranking.exp: p foo3(1.0f)
+PASS: gdb.cp/oranking.exp: p test4()
+KFAIL: gdb.cp/oranking.exp: p foo4(&a) (PRMS: gdb/12098)
+PASS: gdb.cp/oranking.exp: p test5()
+PASS: gdb.cp/oranking.exp: p foo5(c)
+PASS: gdb.cp/oranking.exp: p test6()
+PASS: gdb.cp/oranking.exp: p foo6(bp)
+PASS: gdb.cp/oranking.exp: p test7()
+PASS: gdb.cp/oranking.exp: p foo7(cp)
+PASS: gdb.cp/oranking.exp: p test8()
+PASS: gdb.cp/oranking.exp: p foo8(co)
+PASS: gdb.cp/oranking.exp: p test9()
+PASS: gdb.cp/oranking.exp: p foo9(co)
+PASS: gdb.cp/oranking.exp: p test10()
+KFAIL: gdb.cp/oranking.exp: p foo10(amp) (PRMS: gdb/12098)
+PASS: gdb.cp/oranking.exp: p test101()
+KFAIL: gdb.cp/oranking.exp: p foo101("abc") (PRMS: gdb/12098)
+PASS: gdb.cp/oranking.exp: p test11()
+KFAIL: gdb.cp/oranking.exp: p foo11(d) (PRMS: gdb/12096)
+PASS: gdb.cp/oranking.exp: p test12()
+PASS: gdb.cp/oranking.exp: p foo12(1)
+PASS: gdb.cp/oranking.exp: p test13()
+KFAIL: gdb.cp/oranking.exp: p foo13(c) (PRMS: gdb/12098)
+PASS: gdb.cp/oranking.exp: p test14()
+KFAIL: gdb.cp/oranking.exp: p foo14(e) (PRMS: gdb/12096)
+Running ./gdb.cp/overload-const.exp ...
+PASS: gdb.cp/overload-const.exp: set language c++
+PASS: gdb.cp/overload-const.exp: setting breakpoint at myclass::func
+Running ./gdb.cp/overload.exp ...
+PASS: gdb.cp/overload.exp: up from marker1
+PASS: gdb.cp/overload.exp: print foo_instance1
+PASS: gdb.cp/overload.exp: ptype foo_instance1 (shorter match)
+PASS: gdb.cp/overload.exp: print foo_instance2
+PASS: gdb.cp/overload.exp: print foo_instance3
+PASS: gdb.cp/overload.exp: print call overloaded func 1 arg
+PASS: gdb.cp/overload.exp: re-selected 'main' frame after inferior call
+PASS: gdb.cp/overload.exp: print call overloaded func 2 args
+PASS: gdb.cp/overload.exp: print call overloaded func 3 args
+PASS: gdb.cp/overload.exp: print call overloaded func 4 args
+PASS: gdb.cp/overload.exp: print call overloaded func 5 args
+PASS: gdb.cp/overload.exp: print call overloaded func 6 args
+PASS: gdb.cp/overload.exp: print call overloaded func 7 args
+PASS: gdb.cp/overload.exp: print call overloaded func 8 args
+PASS: gdb.cp/overload.exp: print call overloaded func 9 args
+PASS: gdb.cp/overload.exp: print call overloaded func 10 args
+PASS: gdb.cp/overload.exp: print call overloaded func 11 args
+PASS: gdb.cp/overload.exp: print call overloaded func void arg
+PASS: gdb.cp/overload.exp: print call overloaded func char arg
+PASS: gdb.cp/overload.exp: print call overloaded func signed char arg
+PASS: gdb.cp/overload.exp: print call overloaded func unsigned char arg
+PASS: gdb.cp/overload.exp: print call overloaded func short arg
+PASS: gdb.cp/overload.exp: print call overloaded func unsigned short arg
+PASS: gdb.cp/overload.exp: print call overloaded func int arg
+PASS: gdb.cp/overload.exp: print call overloaded func unsigned int arg
+PASS: gdb.cp/overload.exp: print call overloaded func long arg
+PASS: gdb.cp/overload.exp: print call overloaded func unsigned long arg
+PASS: gdb.cp/overload.exp: print call overloaded func float arg
+PASS: gdb.cp/overload.exp: print call overloaded func double arg
+PASS: gdb.cp/overload.exp: print call overloaded func int\* arg
+PASS: gdb.cp/overload.exp: print call overloaded func char\* arg
+PASS: gdb.cp/overload.exp: print bar(a)
+PASS: gdb.cp/overload.exp: print bar(b)
+PASS: gdb.cp/overload.exp: print bar(c)
+PASS: gdb.cp/overload.exp: print bar(d)
+PASS: gdb.cp/overload.exp: list overloaded function with no args
+PASS: gdb.cp/overload.exp: list overloaded function with int arg
+PASS: gdb.cp/overload.exp: list overloaded function with function ptr args
+PASS: gdb.cp/overload.exp: list overloaded function with function ptr args - quotes around argument
+PASS: gdb.cp/overload.exp: list overload.cc:intToChar
+PASS: gdb.cp/overload.exp: list overload.cc:intToChar(char)
+PASS: gdb.cp/overload.exp: list overload.cc:'intToChar(char)'
+PASS: gdb.cp/overload.exp: list 'overload.cc:intToChar(char)'
+PASS: gdb.cp/overload.exp: list 'overload.cc':intToChar(char)
+PASS: gdb.cp/overload.exp: list 'overload.cc':'intToChar(char)'
+PASS: gdb.cp/overload.exp: list overload.cc:foo::overloadfnarg(int)
+PASS: gdb.cp/overload.exp: list overload.cc:'foo::overloadfnarg(int)'
+PASS: gdb.cp/overload.exp: print overloadNamespace(1)
+PASS: gdb.cp/overload.exp: print overloadNamespace('a')
+PASS: gdb.cp/overload.exp: print overloadNamespace(dummyInstance)
+PASS: gdb.cp/overload.exp: print K::staticoverload ()
+PASS: gdb.cp/overload.exp: print K::staticoverload (2)
+PASS: gdb.cp/overload.exp: print K::staticoverload (2, 3)
+PASS: gdb.cp/overload.exp: print N::nsoverload ()
+PASS: gdb.cp/overload.exp: print N::nsoverload (2)
+PASS: gdb.cp/overload.exp: print N::nsoverload (2, 3)
+PASS: gdb.cp/overload.exp: print overloadNamespace(1) in XXX
+PASS: gdb.cp/overload.exp: print overloadNamespace('a') in XXX
+PASS: gdb.cp/overload.exp: print overloadNamespace(dummyInstance) in XXX
+PASS: gdb.cp/overload.exp: print intToChar(1)
+PASS: gdb.cp/overload.exp: print foo::overload1arg
+PASS: gdb.cp/overload.exp: print foo::overload1arg(char***)
+PASS: gdb.cp/overload.exp: print foo::overload1arg(void)
+PASS: gdb.cp/overload.exp: print foo::overload1arg(char)
+PASS: gdb.cp/overload.exp: print foo::overload1arg(signed char)
+PASS: gdb.cp/overload.exp: print foo::overload1arg(unsigned char)
+PASS: gdb.cp/overload.exp: print foo::overload1arg(short)
+PASS: gdb.cp/overload.exp: print foo::overload1arg(unsigned short)
+PASS: gdb.cp/overload.exp: print foo::overload1arg(int)
+PASS: gdb.cp/overload.exp: print foo::overload1arg(unsigned int)
+PASS: gdb.cp/overload.exp: print foo::overload1arg(long)
+PASS: gdb.cp/overload.exp: print foo::overload1arg(unsigned long)
+PASS: gdb.cp/overload.exp: print foo::overload1arg(float)
+PASS: gdb.cp/overload.exp: print foo::overload1arg(double)
+Running ./gdb.cp/ovldbreak.exp ...
+PASS: gdb.cp/ovldbreak.exp: detect void
+PASS: gdb.cp/ovldbreak.exp: detect char
+PASS: gdb.cp/ovldbreak.exp: detect signed_char
+PASS: gdb.cp/ovldbreak.exp: detect unsigned_char
+PASS: gdb.cp/ovldbreak.exp: detect short_int
+PASS: gdb.cp/ovldbreak.exp: detect unsigned_short_int
+PASS: gdb.cp/ovldbreak.exp: detect int
+PASS: gdb.cp/ovldbreak.exp: detect unsigned_int
+PASS: gdb.cp/ovldbreak.exp: detect long_int
+PASS: gdb.cp/ovldbreak.exp: detect unsigned_long_int
+PASS: gdb.cp/ovldbreak.exp: detect float
+PASS: gdb.cp/ovldbreak.exp: detect double
+PASS: gdb.cp/ovldbreak.exp: set multiple-symbols ask
+PASS: gdb.cp/ovldbreak.exp: bp menu for foo::overload1arg choice 2
+PASS: gdb.cp/ovldbreak.exp: set bp 2 on foo::overload1arg 2 line 107
+PASS: gdb.cp/ovldbreak.exp: bp menu for foo::overload1arg choice 3
+PASS: gdb.cp/ovldbreak.exp: set bp 3 on foo::overload1arg 3 line 110
+PASS: gdb.cp/ovldbreak.exp: bp menu for foo::overload1arg choice 4
+PASS: gdb.cp/ovldbreak.exp: set bp 4 on foo::overload1arg 4 line 140
+PASS: gdb.cp/ovldbreak.exp: bp menu for foo::overload1arg choice 5
+PASS: gdb.cp/ovldbreak.exp: set bp 5 on foo::overload1arg 5 line 137
+PASS: gdb.cp/ovldbreak.exp: bp menu for foo::overload1arg choice 6
+PASS: gdb.cp/ovldbreak.exp: set bp 6 on foo::overload1arg 6 line 125
+PASS: gdb.cp/ovldbreak.exp: bp menu for foo::overload1arg choice 7
+PASS: gdb.cp/ovldbreak.exp: set bp 7 on foo::overload1arg 7 line 131
+PASS: gdb.cp/ovldbreak.exp: bp menu for foo::overload1arg choice 8
+PASS: gdb.cp/ovldbreak.exp: set bp 8 on foo::overload1arg 8 line 119
+PASS: gdb.cp/ovldbreak.exp: bp menu for foo::overload1arg choice 9
+PASS: gdb.cp/ovldbreak.exp: set bp 9 on foo::overload1arg 9 line 113
+PASS: gdb.cp/ovldbreak.exp: bp menu for foo::overload1arg choice 10
+PASS: gdb.cp/ovldbreak.exp: set bp 10 on foo::overload1arg 10 line 116
+PASS: gdb.cp/ovldbreak.exp: bp menu for foo::overload1arg choice 11
+PASS: gdb.cp/ovldbreak.exp: set bp 11 on foo::overload1arg 11 line 128
+PASS: gdb.cp/ovldbreak.exp: bp menu for foo::overload1arg choice 12
+PASS: gdb.cp/ovldbreak.exp: set bp 12 on foo::overload1arg 12 line 134
+PASS: gdb.cp/ovldbreak.exp: bp menu for foo::overload1arg choice 13
+PASS: gdb.cp/ovldbreak.exp: set bp 13 on foo::overload1arg 13 line 122
+PASS: gdb.cp/ovldbreak.exp: breakpoint info (after setting one-by-one)
+PASS: gdb.cp/ovldbreak.exp: bp menu for foo::overload1arg choice cancel
+PASS: gdb.cp/ovldbreak.exp: set bp on overload1arg canceled
+PASS: gdb.cp/ovldbreak.exp: breakpoint info (after cancel)
+PASS: gdb.cp/ovldbreak.exp: delete all breakpoints
+PASS: gdb.cp/ovldbreak.exp: breakpoint info (after delete)
+PASS: gdb.cp/ovldbreak.exp: bp menu for foo::overload1arg choice all
+PASS: gdb.cp/ovldbreak.exp: set bp on overload1arg all
+PASS: gdb.cp/ovldbreak.exp: breakpoint info (after setting on all)
+PASS: gdb.cp/ovldbreak.exp: continue to bp overloaded : void
+PASS: gdb.cp/ovldbreak.exp: continue to bp overloaded : char
+PASS: gdb.cp/ovldbreak.exp: continue to bp overloaded : signed_char
+PASS: gdb.cp/ovldbreak.exp: continue to bp overloaded : unsigned_char
+PASS: gdb.cp/ovldbreak.exp: continue to bp overloaded : short_int
+PASS: gdb.cp/ovldbreak.exp: continue to bp overloaded : unsigned_short_int
+PASS: gdb.cp/ovldbreak.exp: continue to bp overloaded : int
+PASS: gdb.cp/ovldbreak.exp: continue to bp overloaded : unsigned_int
+PASS: gdb.cp/ovldbreak.exp: continue to bp overloaded : long_int
+PASS: gdb.cp/ovldbreak.exp: continue to bp overloaded : unsigned_long_int
+PASS: gdb.cp/ovldbreak.exp: continue to bp overloaded : float
+PASS: gdb.cp/ovldbreak.exp: continue to bp overloaded : double
+PASS: gdb.cp/ovldbreak.exp: set multiple-symbols cancel
+PASS: gdb.cp/ovldbreak.exp: break foo::foofunc
+PASS: gdb.cp/ovldbreak.exp: set multiple-symbols all
+PASS: gdb.cp/ovldbreak.exp: break foo::foofunc
+FAIL: gdb.cp/ovldbreak.exp: setting breakpoint at exit
+Running ./gdb.cp/ovsrch.exp ...
+PASS: gdb.cp/ovsrch.exp: break A::stop_here
+PASS: gdb.cp/ovsrch.exp: break 'A::stop_here'
+PASS: gdb.cp/ovsrch.exp: continue to breakpoint: stop_here
+PASS: gdb.cp/ovsrch.exp: break A::outer::foo (char*) const
+PASS: gdb.cp/ovsrch.exp: break 'A::outer::foo (char*) const'
+PASS: gdb.cp/ovsrch.exp: break A::outer::foo (char*) const if (a_param == 3)
+PASS: gdb.cp/ovsrch.exp: break 'A::outer::foo (char*) const' if (a_param == 3)
+PASS: gdb.cp/ovsrch.exp: break A::outer::foo (char*) const if (A::outer::func ())
+PASS: gdb.cp/ovsrch.exp: break 'A::outer::foo (char*) const' if (A::outer::func ())
+PASS: gdb.cp/ovsrch.exp: break A::outer::foo (void) const
+PASS: gdb.cp/ovsrch.exp: break 'A::outer::foo (void) const'
+PASS: gdb.cp/ovsrch.exp: break A::outer::foo (int) const
+PASS: gdb.cp/ovsrch.exp: break 'A::outer::foo (int) const'
+PASS: gdb.cp/ovsrch.exp: break A::outer::foo (int) const if (a_param == 3)
+PASS: gdb.cp/ovsrch.exp: break 'A::outer::foo (int) const' if (a_param == 3)
+PASS: gdb.cp/ovsrch.exp: break A::outer::foo (int) const if (A::outer::func ())
+PASS: gdb.cp/ovsrch.exp: break 'A::outer::foo (int) const' if (A::outer::func ())
+PASS: gdb.cp/ovsrch.exp: break A::outer::hibob if (a_param == 3)
+PASS: gdb.cp/ovsrch.exp: break A::B::stop_here_too
+PASS: gdb.cp/ovsrch.exp: break 'A::B::stop_here_too'
+PASS: gdb.cp/ovsrch.exp: continue to breakpoint: stop_here_too
+PASS: gdb.cp/ovsrch.exp: break A::B::inner::foo (char*) const
+PASS: gdb.cp/ovsrch.exp: break 'A::B::inner::foo (char*) const'
+PASS: gdb.cp/ovsrch.exp: break A::B::inner::foo (char*) const if (a_param == 3)
+PASS: gdb.cp/ovsrch.exp: break 'A::B::inner::foo (char*) const' if (a_param == 3)
+PASS: gdb.cp/ovsrch.exp: break A::B::inner::foo (char*) const if (A::outer::func ())
+PASS: gdb.cp/ovsrch.exp: break 'A::B::inner::foo (char*) const' if (A::outer::func ())
+PASS: gdb.cp/ovsrch.exp: break A::B::inner::foo (void) const
+PASS: gdb.cp/ovsrch.exp: break 'A::B::inner::foo (void) const'
+PASS: gdb.cp/ovsrch.exp: break A::B::inner::foo (int) const
+PASS: gdb.cp/ovsrch.exp: break 'A::B::inner::foo (int) const'
+PASS: gdb.cp/ovsrch.exp: break A::B::inner::foo (int) const if (a_param == 3)
+PASS: gdb.cp/ovsrch.exp: break 'A::B::inner::foo (int) const' if (a_param == 3)
+PASS: gdb.cp/ovsrch.exp: break A::B::inner::foo (int) const if (A::outer::func ())
+PASS: gdb.cp/ovsrch.exp: break 'A::B::inner::foo (int) const' if (A::outer::func ())
+PASS: gdb.cp/ovsrch.exp: break A::B::inner::hibob if (a_param == 3)
+Running ./gdb.cp/paren-type.exp ...
+PASS: gdb.cp/paren-type.exp: set breakpoint pending off
+PASS: gdb.cp/paren-type.exp: break C::f(long)
+PASS: gdb.cp/paren-type.exp: break C::f(short)
+Running ./gdb.cp/parse-lang.exp ...
+PASS: gdb.cp/parse-lang.exp: breakpoint hit
+Running ./gdb.cp/pass-by-ref.exp ...
+PASS: gdb.cp/pass-by-ref.exp: call function in obj
+PASS: gdb.cp/pass-by-ref.exp: call function in derived
+PASS: gdb.cp/pass-by-ref.exp: call function in container
+Running ./gdb.cp/pr-1023.exp ...
+PASS: gdb.cp/pr-1023.exp: break myClass::performBlocking
+PASS: gdb.cp/pr-1023.exp: break myClass::performUnblocking
+Running ./gdb.cp/pr10687.exp ...
+PASS: gdb.cp/pr10687.exp: continue to breakpoint: marker
+PASS: gdb.cp/pr10687.exp: p a
+Running ./gdb.cp/pr10728.exp ...
+PASS: gdb.cp/pr10728.exp: continue to breakpoint: marker 1
+PASS: gdb.cp/pr10728.exp: print x->y2 - x->y1
+Running ./gdb.cp/pr12028.exp ...
+PASS: gdb.cp/pr12028.exp: p D::foo(b)
+Running ./gdb.cp/pr-1210.exp ...
+PASS: gdb.cp/pr-1210.exp: step past initialization
+PASS: gdb.cp/pr-1210.exp: print *obj
+PASS: gdb.cp/pr-1210.exp: print obj->myB
+Running ./gdb.cp/pr-574.exp ...
+PASS: gdb.cp/pr-574.exp: continue to breakpoint: end of constructors
+PASS: gdb.cp/pr-574.exp: PR gdb/574
+Running ./gdb.cp/pr9067.exp ...
+PASS: gdb.cp/pr9067.exp: print b
+Running ./gdb.cp/pr9167.exp ...
+PASS: gdb.cp/pr9167.exp: continue to breakpoint: marker
+PASS: gdb.cp/pr9167.exp: p b
+Running ./gdb.cp/pr9631.exp ...
+PASS: gdb.cp/pr9631.exp: continue to breakpoint: after bar tender is initialized
+PASS: gdb.cp/pr9631.exp: print tender
+Running ./gdb.cp/printmethod.exp ...
+PASS: gdb.cp/printmethod.exp: continue to breakpoint: end of constructors
+PASS: gdb.cp/printmethod.exp: print virtual method.
+PASS: gdb.cp/printmethod.exp: print nonvirtual method.
+Running ./gdb.cp/psmang.exp ...
+PASS: gdb.cp/psmang.exp: break s::method1
+PASS: gdb.cp/psmang.exp: break s::method2
+Running ./gdb.cp/psymtab-parameter.exp ...
+PASS: gdb.cp/psymtab-parameter.exp: set language c++
+PASS: gdb.cp/psymtab-parameter.exp: maintenance info symtabs
+PASS: gdb.cp/psymtab-parameter.exp: complete p 'func<short>(
+Running ./gdb.cp/ptype-cv-cp.exp ...
+PASS: gdb.cp/ptype-cv-cp.exp: whatis v_my_int
+PASS: gdb.cp/ptype-cv-cp.exp: ptype v_my_int
+PASS: gdb.cp/ptype-cv-cp.exp: whatis v_const_my_int
+PASS: gdb.cp/ptype-cv-cp.exp: ptype v_const_my_int
+PASS: gdb.cp/ptype-cv-cp.exp: whatis v_volatile_my_int
+PASS: gdb.cp/ptype-cv-cp.exp: ptype v_volatile_my_int
+PASS: gdb.cp/ptype-cv-cp.exp: whatis v_const_volatile_my_int
+PASS: gdb.cp/ptype-cv-cp.exp: ptype v_const_volatile_my_int
+PASS: gdb.cp/ptype-cv-cp.exp: whatis v_volatile_const_my_int
+PASS: gdb.cp/ptype-cv-cp.exp: ptype v_volatile_const_my_int
+Running ./gdb.cp/ptype-flags.exp ...
+PASS: gdb.cp/ptype-flags.exp: basic test
+PASS: gdb.cp/ptype-flags.exp: no methods
+PASS: gdb.cp/ptype-flags.exp: no typedefs
+PASS: gdb.cp/ptype-flags.exp: no methods or typedefs
+PASS: gdb.cp/ptype-flags.exp: raw
+PASS: gdb.cp/ptype-flags.exp: raw no methods
+PASS: gdb.cp/ptype-flags.exp: raw no typedefs
+PASS: gdb.cp/ptype-flags.exp: raw no methods or typedefs
+PASS: gdb.cp/ptype-flags.exp: set print type methods off
+PASS: gdb.cp/ptype-flags.exp: basic test, default methods off
+PASS: gdb.cp/ptype-flags.exp: methods, default methods off
+PASS: gdb.cp/ptype-flags.exp: no typedefs, default methods off
+PASS: gdb.cp/ptype-flags.exp: methods, no typedefs, default methods off
+PASS: gdb.cp/ptype-flags.exp: set print type typedefs off
+PASS: gdb.cp/ptype-flags.exp: basic test, default methods+typedefs off
+PASS: gdb.cp/ptype-flags.exp: methods, default methods+typedefs off
+PASS: gdb.cp/ptype-flags.exp: typedefs, default methods+typedefs off
+PASS: gdb.cp/ptype-flags.exp: methods typedefs, default methods+typedefs off
+Running ./gdb.cp/punctuator.exp ...
+PASS: gdb.cp/punctuator.exp: set lang c++
+PASS: gdb.cp/punctuator.exp: print (0x5a5a bitand 0xaaaa) == (0x5a5a & 0xaaaa)
+PASS: gdb.cp/punctuator.exp: print (0x5a5a bitor 0xaaaa) == (0x5a5a | 0xaaaa)
+PASS: gdb.cp/punctuator.exp: print (0x5a5a xor 0xaaaa) == (0x5a5a ^ 0xaaaa)
+PASS: gdb.cp/punctuator.exp: print (0x5a5a and 0xaaaa) == (0x5a5a && 0xaaaa)
+PASS: gdb.cp/punctuator.exp: print (0x5a5a or 0xaaaa) == (0x5a5a || 0xaaaa)
+PASS: gdb.cp/punctuator.exp: print (not not 0xaaaa) == (!!0xaaaa)
+PASS: gdb.cp/punctuator.exp: print (compl 0xaaaa) == (~0xaaaa)
+PASS: gdb.cp/punctuator.exp: set $u 1
+PASS: gdb.cp/punctuator.exp: set $v 1
+PASS: gdb.cp/punctuator.exp: print ($u not_eq 0xaaaa) == ($v != 0xaaaa)
+PASS: gdb.cp/punctuator.exp: print ($u and_eq 0xaaaa) == ($v &= 0xaaaa)
+PASS: gdb.cp/punctuator.exp: set $u 2
+PASS: gdb.cp/punctuator.exp: set $v 2
+PASS: gdb.cp/punctuator.exp: print ($u or_eq 0xaaaa) == ($v |= 0xaaaa)
+PASS: gdb.cp/punctuator.exp: set $u 3
+PASS: gdb.cp/punctuator.exp: set $v 3
+PASS: gdb.cp/punctuator.exp: print ($u xor_eq 0xaaaa) == ($v ^= 0xaaaa)
+Running ./gdb.cp/readnow-language.exp ...
+PASS: gdb.cp/readnow-language.exp: show language
+Running ./gdb.cp/ref-params.exp ...
+PASS: gdb.cp/ref-params.exp: print value of a Child in main
+PASS: gdb.cp/ref-params.exp: print value of f1 on Child in main
+PASS: gdb.cp/ref-params.exp: print value of f2 on Child in main
+PASS: gdb.cp/ref-params.exp: print value of f1 on (Child&) in main
+PASS: gdb.cp/ref-params.exp: print value of f2 on (Child&) in main
+PASS: gdb.cp/ref-params.exp: print value of Child& in f2
+PASS: gdb.cp/ref-params.exp: print value of f1 on Child& in f2
+PASS: gdb.cp/ref-params.exp: print value of Parent& in f1
+PASS: gdb.cp/ref-params.exp: print f1(MQ)
+PASS: gdb.cp/ref-params.exp: print mf1(MQ)
+PASS: gdb.cp/ref-params.exp: print mf2(MQ)
+PASS: gdb.cp/ref-params.exp: print f1(MQR)
+PASS: gdb.cp/ref-params.exp: print mf1(MQR)
+PASS: gdb.cp/ref-params.exp: print mf2(MQR)
+Running ./gdb.cp/ref-types.exp ...
+PASS: gdb.cp/ref-types.exp: up from marker1 1
+PASS: gdb.cp/ref-types.exp: print value of s
+PASS: gdb.cp/ref-types.exp: ptype s
+PASS: gdb.cp/ref-types.exp: print value of ps
+PASS: gdb.cp/ref-types.exp: ptype ps
+PASS: gdb.cp/ref-types.exp: print value of as[0]
+PASS: gdb.cp/ref-types.exp: ptype as
+PASS: gdb.cp/ref-types.exp: print value of as[1]
+PASS: gdb.cp/ref-types.exp: print value of as[2]
+PASS: gdb.cp/ref-types.exp: print value of as[3]
+PASS: gdb.cp/ref-types.exp: print value of rs
+PASS: gdb.cp/ref-types.exp: ptype rs
+PASS: gdb.cp/ref-types.exp: print value of *rps
+PASS: gdb.cp/ref-types.exp: examine value at rps
+PASS: gdb.cp/ref-types.exp: ptype rps
+PASS: gdb.cp/ref-types.exp: print value of ras[0]
+PASS: gdb.cp/ref-types.exp: ptype ras
+PASS: gdb.cp/ref-types.exp: print value of ras[1]
+PASS: gdb.cp/ref-types.exp: print value of ras[2]
+PASS: gdb.cp/ref-types.exp: print value of ras[3]
+PASS: gdb.cp/ref-types.exp: up from f
+PASS: gdb.cp/ref-types.exp: print value of C
+PASS: gdb.cp/ref-types.exp: ptype C
+PASS: gdb.cp/ref-types.exp: print value of UC
+PASS: gdb.cp/ref-types.exp: ptype UC
+PASS: gdb.cp/ref-types.exp: print value of S
+PASS: gdb.cp/ref-types.exp: ptype S
+PASS: gdb.cp/ref-types.exp: print value of US
+PASS: gdb.cp/ref-types.exp: ptype US
+PASS: gdb.cp/ref-types.exp: print value of I
+PASS: gdb.cp/ref-types.exp: ptype I
+PASS: gdb.cp/ref-types.exp: print value of UI
+PASS: gdb.cp/ref-types.exp: ptype UI
+PASS: gdb.cp/ref-types.exp: print value of L
+PASS: gdb.cp/ref-types.exp: ptype L
+PASS: gdb.cp/ref-types.exp: print value of UL
+PASS: gdb.cp/ref-types.exp: ptype UL
+PASS: gdb.cp/ref-types.exp: print value of F
+PASS: gdb.cp/ref-types.exp: ptype F
+PASS: gdb.cp/ref-types.exp: print value of D
+PASS: gdb.cp/ref-types.exp: ptype D
+PASS: gdb.cp/ref-types.exp: ptype rC
+PASS: gdb.cp/ref-types.exp: ptype rUC
+PASS: gdb.cp/ref-types.exp: ptype rS
+PASS: gdb.cp/ref-types.exp: ptype rUS
+PASS: gdb.cp/ref-types.exp: ptype rI
+PASS: gdb.cp/ref-types.exp: ptype rUI
+PASS: gdb.cp/ref-types.exp: ptype rL
+PASS: gdb.cp/ref-types.exp: ptype rUL
+PASS: gdb.cp/ref-types.exp: ptype rF
+PASS: gdb.cp/ref-types.exp: ptype rD
+PASS: gdb.cp/ref-types.exp: print value of rC
+PASS: gdb.cp/ref-types.exp: print value of rUC
+PASS: gdb.cp/ref-types.exp: print value of rS
+PASS: gdb.cp/ref-types.exp: print value of rUS
+PASS: gdb.cp/ref-types.exp: print value of rI
+PASS: gdb.cp/ref-types.exp: print value of UI
+PASS: gdb.cp/ref-types.exp: print value of rL
+PASS: gdb.cp/ref-types.exp: print value of rUL
+PASS: gdb.cp/ref-types.exp: print value of rF
+PASS: gdb.cp/ref-types.exp: print value of rD
+Running ./gdb.cp/re-set-overloaded.exp ...
+PASS: gdb.cp/re-set-overloaded.exp: set breakpoint pending yes
+PASS: gdb.cp/re-set-overloaded.exp: break C::C
+PASS: gdb.cp/re-set-overloaded.exp: set variable $brk = $bpnum
+PASS: gdb.cp/re-set-overloaded.exp: start
+KFAIL: gdb.cp/re-set-overloaded.exp: breakpoint resolved (PRMS: breakpoints/11657)
+Running ./gdb.cp/rtti.exp ...
+PASS: gdb.cp/rtti.exp: continue to breakpoint: end of constructors in main
+PASS: gdb.cp/rtti.exp: print *e1
+PASS: gdb.cp/rtti.exp: print *e2
+PASS: gdb.cp/rtti.exp: continue to breakpoint: end of constructors in func
+PASS: gdb.cp/rtti.exp: print *obj
+PASS: gdb.cp/rtti.exp: continue to breakpoint: end of constructors in func3
+PASS: gdb.cp/rtti.exp: print *obj3
+Running ./gdb.cp/shadow.exp ...
+PASS: gdb.cp/shadow.exp: continue to breakpoint: marker1
+PASS: gdb.cp/shadow.exp: Print class x shadowing global x
+PASS: gdb.cp/shadow.exp: continue to breakpoint: marker2
+PASS: gdb.cp/shadow.exp: Print local x shadowing class x
+PASS: gdb.cp/shadow.exp: continue to breakpoint: marker3
+PASS: gdb.cp/shadow.exp: Print inner scope x
+PASS: gdb.cp/shadow.exp: continue to breakpoint: marker4
+PASS: gdb.cp/shadow.exp: Print local x not namespace x
+PASS: gdb.cp/shadow.exp: continue to breakpoint: marker5
+PASS: gdb.cp/shadow.exp: Print imported namespace x
+Running ./gdb.cp/smartp.exp ...
+PASS: gdb.cp/smartp.exp: continue to breakpoint: end of main
+PASS: gdb.cp/smartp.exp: p mp->foo()
+PASS: gdb.cp/smartp.exp: p mtp->foo()
+PASS: gdb.cp/smartp.exp: p mt1.foo()
+PASS: gdb.cp/smartp.exp: p mt4p.a
+PASS: gdb.cp/smartp.exp: p mt4->a
+PASS: gdb.cp/smartp.exp: p sp1->foo()
+PASS: gdb.cp/smartp.exp: p sp2->foo()
+PASS: gdb.cp/smartp.exp: p sp3->foo(1)
+PASS: gdb.cp/smartp.exp: p sp3->foo('a')
+PASS: gdb.cp/smartp.exp: p sp4->a
+PASS: gdb.cp/smartp.exp: p sp4->b
+PASS: gdb.cp/smartp.exp: p mt4p->a
+PASS: gdb.cp/smartp.exp: p mt4p->b
+PASS: gdb.cp/smartp.exp: p mt4->fake
+PASS: gdb.cp/smartp.exp: p mt4->fake()
+PASS: gdb.cp/smartp.exp: p b->foo()
+PASS: gdb.cp/smartp.exp: p c->foo()
+PASS: gdb.cp/smartp.exp: p c->inta
+KFAIL: gdb.cp/smartp.exp: p c2->inta (PRMS: gdb/11606)
+Running ./gdb.cp/static-method.exp ...
+PASS: gdb.cp/static-method.exp: info addr A::func()
+PASS: gdb.cp/static-method.exp: list static-method.cc:xxx::(anonymous namespace)::func
+PASS: gdb.cp/static-method.exp: list 'static-method.cc:xxx::(anonymous namespace)::func'
+PASS: gdb.cp/static-method.exp: list 'static-method.cc':'xxx::(anonymous namespace)::func'
+PASS: gdb.cp/static-method.exp: list static-method.cc:'xxx::(anonymous namespace)::func'
+PASS: gdb.cp/static-method.exp: continue to xxx::(anonymous namespace)::func
+PASS: gdb.cp/static-method.exp: continue to 'xxx::(anonymous namespace)::func'
+PASS: gdb.cp/static-method.exp: list static-method.cc:xxx::(anonymous namespace)::A::func
+PASS: gdb.cp/static-method.exp: list 'static-method.cc:xxx::(anonymous namespace)::A::func'
+PASS: gdb.cp/static-method.exp: list 'static-method.cc':'xxx::(anonymous namespace)::A::func'
+PASS: gdb.cp/static-method.exp: list static-method.cc:'xxx::(anonymous namespace)::A::func'
+PASS: gdb.cp/static-method.exp: continue to xxx::(anonymous namespace)::A::func
+PASS: gdb.cp/static-method.exp: continue to 'xxx::(anonymous namespace)::A::func'
+Running ./gdb.cp/static-print-quit.exp ...
+PASS: gdb.cp/static-print-quit.exp: set width 80
+PASS: gdb.cp/static-print-quit.exp: set height 2
+PASS: gdb.cp/static-print-quit.exp: print c - <return>
+PASS: gdb.cp/static-print-quit.exp: print c - q <return>
+PASS: gdb.cp/static-print-quit.exp: print c - to quit
+PASS: gdb.cp/static-print-quit.exp: q
+PASS: gdb.cp/static-print-quit.exp: set pagination off
+PASS: gdb.cp/static-print-quit.exp: first print
+PASS: gdb.cp/static-print-quit.exp: second print
+Running ./gdb.cp/temargs.exp ...
+PASS: gdb.cp/temargs.exp: set first breakpoint for temargs
+PASS: gdb.cp/temargs.exp: set second breakpoint for temargs
+PASS: gdb.cp/temargs.exp: set third breakpoint for temargs
+PASS: gdb.cp/temargs.exp: set fourth breakpoint for temargs
+PASS: gdb.cp/temargs.exp: set fifth breakpoint for temargs
+PASS: gdb.cp/temargs.exp: set sixth breakpoint for temargs
+PASS: gdb.cp/temargs.exp: continue to breakpoint: continue to first breakpoint for temargs
+PASS: gdb.cp/temargs.exp: test type of T in base_m
+PASS: gdb.cp/temargs.exp: test value of I in base_m
+PASS: gdb.cp/temargs.exp: test value of P in base_m
+PASS: gdb.cp/temargs.exp: test value of MP in base_m
+PASS: gdb.cp/temargs.exp: continue to breakpoint: continue to second breakpoint for temargs
+PASS: gdb.cp/temargs.exp: test type of T in inner_m
+PASS: gdb.cp/temargs.exp: test value of I in inner_m
+PASS: gdb.cp/temargs.exp: test value of P in inner_m
+PASS: gdb.cp/temargs.exp: test value of MP in inner_m
+PASS: gdb.cp/temargs.exp: test type of Z in inner_m
+PASS: gdb.cp/temargs.exp: continue to breakpoint: continue to third breakpoint for temargs
+PASS: gdb.cp/temargs.exp: test type of T in func
+PASS: gdb.cp/temargs.exp: test value of I in func
+PASS: gdb.cp/temargs.exp: test value of P in func
+PASS: gdb.cp/temargs.exp: test value of MP in func
+PASS: gdb.cp/temargs.exp: continue to breakpoint: continue to fourth breakpoint for temargs
+PASS: gdb.cp/temargs.exp: test type of T in templ_m
+PASS: gdb.cp/temargs.exp: test value of I in templ_m
+PASS: gdb.cp/temargs.exp: test value of P in templ_m
+PASS: gdb.cp/temargs.exp: test value of MP in templ_m
+PASS: gdb.cp/temargs.exp: test type of Q in templ_m
+PASS: gdb.cp/temargs.exp: continue to breakpoint: continue to fifth breakpoint for temargs
+PASS: gdb.cp/temargs.exp: test type of F in k2_m
+XFAIL: gdb.cp/temargs.exp: test value of F in k2_m (PRMS gcc/49366)
+PASS: gdb.cp/temargs.exp: continue to breakpoint: continue to sixth breakpoint for temargs
+XFAIL: gdb.cp/temargs.exp: test type of F in k3_m (PRMS gcc/49546)
+XFAIL: gdb.cp/temargs.exp: test value of F in k3_m (PRMS gcc/49546)
+Running ./gdb.cp/templates.exp ...
+PASS: gdb.cp/templates.exp: set multiple-symbols ask
+KFAIL: gdb.cp/templates.exp: ptype T5<int> (PRMS: gdb/8218)
+KFAIL: gdb.cp/templates.exp: ptype T5<int> (PRMS: gdb/8218)
+PASS: gdb.cp/templates.exp: constructor breakpoint
+PASS: gdb.cp/templates.exp: destructor breakpoint
+PASS: gdb.cp/templates.exp: value method breakpoint
+PASS: gdb.cp/templates.exp: breakpoint on a line with no real code
+PASS: gdb.cp/templates.exp: print method of template typedef
+XFAIL: gdb.cp/templates.exp: print destructor of template typedef (PRMS gcc/51668)
+PASS: gdb.cp/templates.exp: verify GCC PR debug/51668
+PASS: gdb.cp/templates.exp: ptype empty
+PASS: gdb.cp/templates.exp: ptype arg
+PASS: gdb.cp/templates.exp: print t5i.value()
+PASS: gdb.cp/templates.exp: b 770
+PASS: gdb.cp/templates.exp: continue to line 770
+PASS: gdb.cp/templates.exp: print fint
+PASS: gdb.cp/templates.exp: print fvpchar
+PASS: gdb.cp/templates.exp: ptype Foo
+PASS: gdb.cp/templates.exp: ptype fint
+PASS: gdb.cp/templates.exp: ptype fchar
+KFAIL: gdb.cp/templates.exp: ptype fvpchar (PRMS: gdb/1512)
+PASS: gdb.cp/templates.exp: print Foo<volatile char *>::foo
+PASS: gdb.cp/templates.exp: print Foo<volatile char*>::foo
+PASS: gdb.cp/templates.exp: ptype Bar
+PASS: gdb.cp/templates.exp: ptype bint
+PASS: gdb.cp/templates.exp: ptype bint2
+PASS: gdb.cp/templates.exp: ptype Baz
+PASS: gdb.cp/templates.exp: ptype bazint
+PASS: gdb.cp/templates.exp: ptype bazint2
+PASS: gdb.cp/templates.exp: ptype Qux
+PASS: gdb.cp/templates.exp: ptype quxint
+PASS: gdb.cp/templates.exp: ptype Spec
+PASS: gdb.cp/templates.exp: ptype siip
+PASS: gdb.cp/templates.exp: ptype Garply<int>
+PASS: gdb.cp/templates.exp: ptype Garply<Garply<char> >
+PASS: gdb.cp/templates.exp: print Garply<Garply<char> >::garply
+PASS: gdb.cp/templates.exp: break Garply<Garply<char> >::garply
+Running ./gdb.cp/try_catch.exp ...
+PASS: gdb.cp/try_catch.exp: continue to breakpoint: marker 1-throw
+PASS: gdb.cp/try_catch.exp: continue to breakpoint: marker 1-catch
+PASS: gdb.cp/try_catch.exp: continue to breakpoint: marker 2-start
+PASS: gdb.cp/try_catch.exp: continue to breakpoint: marker 2-next
+PASS: gdb.cp/try_catch.exp: continue to breakpoint: marker 2-throw
+PASS: gdb.cp/try_catch.exp: continue to breakpoint: marker 2-catch
+PASS: gdb.cp/try_catch.exp: continue to breakpoint: marker 3-throw
+PASS: gdb.cp/try_catch.exp: continue to breakpoint: marker 3-catch
+Running ./gdb.cp/typedef-operator.exp ...
+PASS: gdb.cp/typedef-operator.exp: set language c++
+PASS: gdb.cp/typedef-operator.exp: test crash
+PASS: gdb.cp/typedef-operator.exp: test typedef
+Running ./gdb.cp/userdef.exp ...
+PASS: gdb.cp/userdef.exp: break marker1
+PASS: gdb.cp/userdef.exp: continue to marker1
+PASS: gdb.cp/userdef.exp: up from marker1
+PASS: gdb.cp/userdef.exp: print one + two
+PASS: gdb.cp/userdef.exp: re-selected 'main' frame after inferior call
+PASS: gdb.cp/userdef.exp: print one - two
+PASS: gdb.cp/userdef.exp: print one * two
+PASS: gdb.cp/userdef.exp: print one / two
+PASS: gdb.cp/userdef.exp: print one % two
+PASS: gdb.cp/userdef.exp: print one && two
+PASS: gdb.cp/userdef.exp: print one || two
+PASS: gdb.cp/userdef.exp: print one & two
+PASS: gdb.cp/userdef.exp: print one | two
+PASS: gdb.cp/userdef.exp: print one ^ two
+PASS: gdb.cp/userdef.exp: print one < two
+PASS: gdb.cp/userdef.exp: print one <= two
+PASS: gdb.cp/userdef.exp: print one > two
+PASS: gdb.cp/userdef.exp: print one >= two
+PASS: gdb.cp/userdef.exp: print one == two
+PASS: gdb.cp/userdef.exp: print one.operator== (two)
+PASS: gdb.cp/userdef.exp: print one != two
+PASS: gdb.cp/userdef.exp: print one << 31
+PASS: gdb.cp/userdef.exp: print one >> 31
+PASS: gdb.cp/userdef.exp: print !one
+PASS: gdb.cp/userdef.exp: print +one
+PASS: gdb.cp/userdef.exp: print ~one
+PASS: gdb.cp/userdef.exp: print -one
+PASS: gdb.cp/userdef.exp: print one++
+PASS: gdb.cp/userdef.exp: print ++one
+PASS: gdb.cp/userdef.exp: print one--
+PASS: gdb.cp/userdef.exp: print --one
+PASS: gdb.cp/userdef.exp: print one += 7
+PASS: gdb.cp/userdef.exp: print two = one
+PASS: gdb.cp/userdef.exp: break A2::operator+
+PASS: gdb.cp/userdef.exp: break A2::operator +
+PASS: gdb.cp/userdef.exp: print c
+PASS: gdb.cp/userdef.exp: print *c
+PASS: gdb.cp/userdef.exp: print &*c
+PASS: gdb.cp/userdef.exp: ptype &*c
+PASS: gdb.cp/userdef.exp: print operator== (mem1, mem2)
+PASS: gdb.cp/userdef.exp: print operator== (mem1, mem1)
+Running ./gdb.cp/using-crash.exp ...
+PASS: gdb.cp/using-crash.exp: reload file
+Running ./gdb.cp/virtbase.exp ...
+PASS: gdb.cp/virtbase.exp: continue to breakpoint: first breakpoint
+PASS: gdb.cp/virtbase.exp: print *this
+PASS: gdb.cp/virtbase.exp: print x in get_y
+PASS: gdb.cp/virtbase.exp: continue to breakpoint: second breakpoint
+PASS: gdb.cp/virtbase.exp: print x in get_z
+PASS: gdb.cp/virtbase.exp: continue to breakpoint: third breakpoint
+PASS: gdb.cp/virtbase.exp: print *(D *) e
+PASS: gdb.cp/virtbase.exp: set print object on
+PASS: gdb.cp/virtbase.exp: print/x b->mA
+PASS: gdb.cp/virtbase.exp: print rtti_data
+PASS: gdb.cp/virtbase.exp: print pointer to virtual base at non-zero offset of larger object
+PASS: gdb.cp/virtbase.exp: print same pointer from history value
+PASS: gdb.cp/virtbase.exp: print whole pointed-to object, starting from the virtual base pointer
+Running ./gdb.cp/virtfunc2.exp ...
+PASS: gdb.cp/virtfunc2.exp: continue to breakpoint: marker 1
+PASS: gdb.cp/virtfunc2.exp: print o.do_print()
+PASS: gdb.cp/virtfunc2.exp: print o.do_print3()
+PASS: gdb.cp/virtfunc2.exp: print o2.do_print()
+PASS: gdb.cp/virtfunc2.exp: print o2.do_print2()
+PASS: gdb.cp/virtfunc2.exp: print o2.do_print3()
+PASS: gdb.cp/virtfunc2.exp: print o
+Running ./gdb.cp/virtfunc.exp ...
+PASS: gdb.cp/virtfunc.exp: ptype VA
+PASS: gdb.cp/virtfunc.exp: ptype VB
+PASS: gdb.cp/virtfunc.exp: ptype V
+PASS: gdb.cp/virtfunc.exp: ptype A
+PASS: gdb.cp/virtfunc.exp: ptype B
+PASS: gdb.cp/virtfunc.exp: ptype C
+PASS: gdb.cp/virtfunc.exp: ptype AD
+PASS: gdb.cp/virtfunc.exp: ptype D
+PASS: gdb.cp/virtfunc.exp: ptype E
+PASS: gdb.cp/virtfunc.exp: ptype dd
+PASS: gdb.cp/virtfunc.exp: ptype ppd
+PASS: gdb.cp/virtfunc.exp: ptype pAd
+PASS: gdb.cp/virtfunc.exp: ptype a
+PASS: gdb.cp/virtfunc.exp: ptype b
+PASS: gdb.cp/virtfunc.exp: ptype c
+PASS: gdb.cp/virtfunc.exp: ptype d
+PASS: gdb.cp/virtfunc.exp: ptype e
+PASS: gdb.cp/virtfunc.exp: ptype v
+PASS: gdb.cp/virtfunc.exp: ptype vb
+PASS: gdb.cp/virtfunc.exp: ptype pAa
+PASS: gdb.cp/virtfunc.exp: ptype pAe
+PASS: gdb.cp/virtfunc.exp: ptype pBe
+PASS: gdb.cp/virtfunc.exp: ptype pDd
+PASS: gdb.cp/virtfunc.exp: ptype pDe
+PASS: gdb.cp/virtfunc.exp: ptype pVa
+PASS: gdb.cp/virtfunc.exp: ptype pVv
+PASS: gdb.cp/virtfunc.exp: ptype pVe
+PASS: gdb.cp/virtfunc.exp: ptype pVd
+PASS: gdb.cp/virtfunc.exp: ptype pADe
+PASS: gdb.cp/virtfunc.exp: ptype pEe
+PASS: gdb.cp/virtfunc.exp: ptype pVB
+PASS: gdb.cp/virtfunc.exp: info vtbl a
+PASS: gdb.cp/virtfunc.exp: info vtbl b
+PASS: gdb.cp/virtfunc.exp: info vtbl c
+PASS: gdb.cp/virtfunc.exp: info vtbl d
+FAIL: gdb.cp/virtfunc.exp: info vtbl e
+FAIL: gdb.cp/virtfunc.exp: info vtbl pEe
+PASS: gdb.cp/virtfunc.exp: info vtbl
+PASS: gdb.cp/virtfunc.exp: info vtbl va
+PASS: gdb.cp/virtfunc.exp: info vtbl all_count
+PASS: gdb.cp/virtfunc.exp: print pAe->f()
+PASS: gdb.cp/virtfunc.exp: print pAa->f()
+PASS: gdb.cp/virtfunc.exp: print pDe->vg()
+PASS: gdb.cp/virtfunc.exp: print pADe->vg()
+PASS: gdb.cp/virtfunc.exp: print pDd->vg()
+PASS: gdb.cp/virtfunc.exp: print pEe->vvb()
+PASS: gdb.cp/virtfunc.exp: print pVB->vvb()
+PASS: gdb.cp/virtfunc.exp: print pBe->vvb()
+PASS: gdb.cp/virtfunc.exp: print pDe->vvb()
+PASS: gdb.cp/virtfunc.exp: print pEe->vd()
+PASS: gdb.cp/virtfunc.exp: print pEe->fvb()
+KFAIL: gdb.cp/virtfunc.exp: print pEe->D::vg() (PRMS: gdb/1064)
+PASS: gdb.cp/virtfunc.exp: next to pAa->f call
+PASS: gdb.cp/virtfunc.exp: next to pDe->vg call
+PASS: gdb.cp/virtfunc.exp: step through thunk into E::vg
+Running ./gdb.disasm/am33.exp ...
+Running ./gdb.disasm/h8300s.exp ...
+Running ./gdb.disasm/hppa.exp ...
+Running ./gdb.disasm/mn10300.exp ...
+Running ./gdb.disasm/sh3.exp ...
+Running ./gdb.disasm/t01_mov.exp ...
+Running ./gdb.disasm/t02_mova.exp ...
+Running ./gdb.disasm/t03_add.exp ...
+Running ./gdb.disasm/t04_sub.exp ...
+Running ./gdb.disasm/t05_cmp.exp ...
+Running ./gdb.disasm/t06_ari2.exp ...
+Running ./gdb.disasm/t07_ari3.exp ...
+Running ./gdb.disasm/t08_or.exp ...
+Running ./gdb.disasm/t09_xor.exp ...
+Running ./gdb.disasm/t10_and.exp ...
+Running ./gdb.disasm/t11_logs.exp ...
+Running ./gdb.disasm/t12_bit.exp ...
+Running ./gdb.disasm/t13_otr.exp ...
+Running ./gdb.dwarf2/callframecfa.exp ...
+Running ./gdb.dwarf2/clztest.exp ...
+Running ./gdb.dwarf2/dup-psym.exp ...
+PASS: gdb.dwarf2/dup-psym.exp: info sources should contain only one reference to file1.txt
+Running ./gdb.dwarf2/dw2-ada-ffffffff.exp ...
+PASS: gdb.dwarf2/dw2-ada-ffffffff.exp: p sizeof (t)
+PASS: gdb.dwarf2/dw2-ada-ffffffff.exp: ptype t
+Running ./gdb.dwarf2/dw2-anon-mptr.exp ...
+PASS: gdb.dwarf2/dw2-anon-mptr.exp: set cp-abi gnu-v3
+PASS: gdb.dwarf2/dw2-anon-mptr.exp: show cp-abi
+PASS: gdb.dwarf2/dw2-anon-mptr.exp: ptype crash
+Running ./gdb.dwarf2/dw2-anonymous-func.exp ...
+PASS: gdb.dwarf2/dw2-anonymous-func.exp: list file1.txt
+Running ./gdb.dwarf2/dw2-bad-parameter-type.exp ...
+PASS: gdb.dwarf2/dw2-bad-parameter-type.exp: ptype f
+PASS: gdb.dwarf2/dw2-bad-parameter-type.exp: ptype f
+PASS: gdb.dwarf2/dw2-bad-parameter-type.exp: is alive
+Running ./gdb.dwarf2/dw2-basic.exp ...
+PASS: gdb.dwarf2/dw2-basic.exp: set listsize 1
+PASS: gdb.dwarf2/dw2-basic.exp: list func_cu1
+PASS: gdb.dwarf2/dw2-basic.exp: ptype func_cu1
+Running ./gdb.dwarf2/dw2-canonicalize-type.exp ...
+PASS: gdb.dwarf2/dw2-canonicalize-type.exp: ptype f
+Running ./gdb.dwarf2/dw2-case-insensitive.exp ...
+PASS: gdb.dwarf2/dw2-case-insensitive.exp: show case-sensitive
+PASS: gdb.dwarf2/dw2-case-insensitive.exp: regexp case-sensitive on
+PASS: gdb.dwarf2/dw2-case-insensitive.exp: set case-sensitive off
+PASS: gdb.dwarf2/dw2-case-insensitive.exp: regexp case-sensitive off
+FAIL: gdb.dwarf2/dw2-case-insensitive.exp: p fuNC_lang
+PASS: gdb.dwarf2/dw2-case-insensitive.exp: p fuNC_symtab
+PASS: gdb.dwarf2/dw2-case-insensitive.exp: setting breakpoint at fuNC_lang
+PASS: gdb.dwarf2/dw2-case-insensitive.exp: setting breakpoint at fuNC_symtab
+Running ./gdb.dwarf2/dw2-common-block.exp ...
+Running ./gdb.dwarf2/dw2-compdir-oldgcc.exp ...
+PASS: gdb.dwarf2/dw2-compdir-oldgcc.exp: list gcc42
+PASS: gdb.dwarf2/dw2-compdir-oldgcc.exp: info source gcc42
+PASS: gdb.dwarf2/dw2-compdir-oldgcc.exp: list gcc43
+PASS: gdb.dwarf2/dw2-compdir-oldgcc.exp: info source gcc43
+Running ./gdb.dwarf2/dw2-compressed.exp ...
+PASS: gdb.dwarf2/dw2-compressed.exp: set listsize 1
+PASS: gdb.dwarf2/dw2-compressed.exp: list func_cu1
+PASS: gdb.dwarf2/dw2-compressed.exp: ptype func_cu1
+Running ./gdb.dwarf2/dw2-const.exp ...
+PASS: gdb.dwarf2/dw2-const.exp: print twelve
+PASS: gdb.dwarf2/dw2-const.exp: print/x val8
+Running ./gdb.dwarf2/dw2-cp-infcall-ref-static.exp ...
+PASS: gdb.dwarf2/dw2-cp-infcall-ref-static.exp: set language c++
+PASS: gdb.dwarf2/dw2-cp-infcall-ref-static.exp: set cp-abi gnu-v3
+ERROR: Process no longer exists
+UNRESOLVED: gdb.dwarf2/dw2-cp-infcall-ref-static.exp: p f()
+Running ./gdb.dwarf2/dw2-cu-size.exp ...
+PASS: gdb.dwarf2/dw2-cu-size.exp: ptype noloc
+Running ./gdb.dwarf2/dw2-dir-file-name.exp ...
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: cd .../rdir
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_missing__file_basename: continue to breakpoint: compdir_missing__ldir_missing__file_basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_missing__file_basename: set filename-display absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_missing__file_basename: absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_missing__file_basename: set filename-display basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_missing__file_basename: basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_missing__file_basename: set filename-display relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_missing__file_basename: relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_missing__file_relative: continue to breakpoint: compdir_missing__ldir_missing__file_relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_missing__file_relative: set filename-display absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_missing__file_relative: absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_missing__file_relative: set filename-display basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_missing__file_relative: basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_missing__file_relative: set filename-display relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_missing__file_relative: relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_missing__file_absolute: continue to breakpoint: compdir_missing__ldir_missing__file_absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_missing__file_absolute: set filename-display absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_missing__file_absolute: absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_missing__file_absolute: set filename-display basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_missing__file_absolute: basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_missing__file_absolute: set filename-display relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_missing__file_absolute: relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_relative_file_basename: continue to breakpoint: compdir_missing__ldir_relative_file_basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_relative_file_basename: set filename-display absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_relative_file_basename: absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_relative_file_basename: set filename-display basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_relative_file_basename: basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_relative_file_basename: set filename-display relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_relative_file_basename: relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_relative_file_relative: continue to breakpoint: compdir_missing__ldir_relative_file_relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_relative_file_relative: set filename-display absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_relative_file_relative: absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_relative_file_relative: set filename-display basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_relative_file_relative: basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_relative_file_relative: set filename-display relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_relative_file_relative: relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_relative_file_absolute: continue to breakpoint: compdir_missing__ldir_relative_file_absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_relative_file_absolute: set filename-display absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_relative_file_absolute: absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_relative_file_absolute: set filename-display basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_relative_file_absolute: basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_relative_file_absolute: set filename-display relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_relative_file_absolute: relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_absolute_file_basename: continue to breakpoint: compdir_missing__ldir_absolute_file_basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_absolute_file_basename: set filename-display absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_absolute_file_basename: absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_absolute_file_basename: set filename-display basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_absolute_file_basename: basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_absolute_file_basename: set filename-display relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_absolute_file_basename: relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_absolute_file_relative: continue to breakpoint: compdir_missing__ldir_absolute_file_relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_absolute_file_relative: set filename-display absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_absolute_file_relative: absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_absolute_file_relative: set filename-display basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_absolute_file_relative: basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_absolute_file_relative: set filename-display relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_absolute_file_relative: relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_absolute_file_absolute_same: continue to breakpoint: compdir_missing__ldir_absolute_file_absolute_same
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_absolute_file_absolute_same: set filename-display absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_absolute_file_absolute_same: absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_absolute_file_absolute_same: set filename-display basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_absolute_file_absolute_same: basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_absolute_file_absolute_same: set filename-display relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_absolute_file_absolute_same: relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_absolute_file_absolute_different: continue to breakpoint: compdir_missing__ldir_absolute_file_absolute_different
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_absolute_file_absolute_different: set filename-display absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_absolute_file_absolute_different: absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_absolute_file_absolute_different: set filename-display basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_absolute_file_absolute_different: basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_absolute_file_absolute_different: set filename-display relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_absolute_file_absolute_different: relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_missing__file_basename: continue to breakpoint: compdir_relative_ldir_missing__file_basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_missing__file_basename: set filename-display absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_missing__file_basename: absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_missing__file_basename: set filename-display basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_missing__file_basename: basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_missing__file_basename: set filename-display relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_missing__file_basename: relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_missing__file_relative: continue to breakpoint: compdir_relative_ldir_missing__file_relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_missing__file_relative: set filename-display absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_missing__file_relative: absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_missing__file_relative: set filename-display basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_missing__file_relative: basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_missing__file_relative: set filename-display relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_missing__file_relative: relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_missing__file_absolute: continue to breakpoint: compdir_relative_ldir_missing__file_absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_missing__file_absolute: set filename-display absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_missing__file_absolute: absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_missing__file_absolute: set filename-display basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_missing__file_absolute: basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_missing__file_absolute: set filename-display relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_missing__file_absolute: relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_relative_file_basename: continue to breakpoint: compdir_relative_ldir_relative_file_basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_relative_file_basename: set filename-display absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_relative_file_basename: absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_relative_file_basename: set filename-display basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_relative_file_basename: basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_relative_file_basename: set filename-display relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_relative_file_basename: relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_relative_file_relative: continue to breakpoint: compdir_relative_ldir_relative_file_relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_relative_file_relative: set filename-display absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_relative_file_relative: absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_relative_file_relative: set filename-display basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_relative_file_relative: basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_relative_file_relative: set filename-display relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_relative_file_relative: relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_relative_file_absolute: continue to breakpoint: compdir_relative_ldir_relative_file_absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_relative_file_absolute: set filename-display absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_relative_file_absolute: absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_relative_file_absolute: set filename-display basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_relative_file_absolute: basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_relative_file_absolute: set filename-display relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_relative_file_absolute: relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_absolute_file_basename: continue to breakpoint: compdir_relative_ldir_absolute_file_basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_absolute_file_basename: set filename-display absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_absolute_file_basename: absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_absolute_file_basename: set filename-display basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_absolute_file_basename: basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_absolute_file_basename: set filename-display relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_absolute_file_basename: relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_absolute_file_relative: continue to breakpoint: compdir_relative_ldir_absolute_file_relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_absolute_file_relative: set filename-display absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_absolute_file_relative: absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_absolute_file_relative: set filename-display basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_absolute_file_relative: basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_absolute_file_relative: set filename-display relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_absolute_file_relative: relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_absolute_file_absolute_same: continue to breakpoint: compdir_relative_ldir_absolute_file_absolute_same
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_absolute_file_absolute_same: set filename-display absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_absolute_file_absolute_same: absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_absolute_file_absolute_same: set filename-display basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_absolute_file_absolute_same: basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_absolute_file_absolute_same: set filename-display relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_absolute_file_absolute_same: relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_absolute_file_absolute_different: continue to breakpoint: compdir_relative_ldir_absolute_file_absolute_different
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_absolute_file_absolute_different: set filename-display absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_absolute_file_absolute_different: absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_absolute_file_absolute_different: set filename-display basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_absolute_file_absolute_different: basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_absolute_file_absolute_different: set filename-display relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_absolute_file_absolute_different: relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_missing__file_basename: continue to breakpoint: compdir_absolute_ldir_missing__file_basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_missing__file_basename: set filename-display absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_missing__file_basename: absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_missing__file_basename: set filename-display basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_missing__file_basename: basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_missing__file_basename: set filename-display relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_missing__file_basename: relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_missing__file_relative: continue to breakpoint: compdir_absolute_ldir_missing__file_relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_missing__file_relative: set filename-display absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_missing__file_relative: absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_missing__file_relative: set filename-display basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_missing__file_relative: basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_missing__file_relative: set filename-display relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_missing__file_relative: relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_missing__file_absolute_same: continue to breakpoint: compdir_absolute_ldir_missing__file_absolute_same
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_missing__file_absolute_same: set filename-display absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_missing__file_absolute_same: absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_missing__file_absolute_same: set filename-display basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_missing__file_absolute_same: basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_missing__file_absolute_same: set filename-display relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_missing__file_absolute_same: relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_missing__file_absolute_different: continue to breakpoint: compdir_absolute_ldir_missing__file_absolute_different
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_missing__file_absolute_different: set filename-display absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_missing__file_absolute_different: absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_missing__file_absolute_different: set filename-display basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_missing__file_absolute_different: basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_missing__file_absolute_different: set filename-display relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_missing__file_absolute_different: relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_relative_file_basename: continue to breakpoint: compdir_absolute_ldir_relative_file_basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_relative_file_basename: set filename-display absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_relative_file_basename: absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_relative_file_basename: set filename-display basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_relative_file_basename: basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_relative_file_basename: set filename-display relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_relative_file_basename: relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_relative_file_relative: continue to breakpoint: compdir_absolute_ldir_relative_file_relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_relative_file_relative: set filename-display absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_relative_file_relative: absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_relative_file_relative: set filename-display basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_relative_file_relative: basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_relative_file_relative: set filename-display relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_relative_file_relative: relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_relative_file_absolute_same: continue to breakpoint: compdir_absolute_ldir_relative_file_absolute_same
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_relative_file_absolute_same: set filename-display absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_relative_file_absolute_same: absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_relative_file_absolute_same: set filename-display basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_relative_file_absolute_same: basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_relative_file_absolute_same: set filename-display relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_relative_file_absolute_same: relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_relative_file_absolute_different: continue to breakpoint: compdir_absolute_ldir_relative_file_absolute_different
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_relative_file_absolute_different: set filename-display absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_relative_file_absolute_different: absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_relative_file_absolute_different: set filename-display basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_relative_file_absolute_different: basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_relative_file_absolute_different: set filename-display relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_relative_file_absolute_different: relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_absolute_file_basename_same: continue to breakpoint: compdir_absolute_ldir_absolute_file_basename_same
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_absolute_file_basename_same: set filename-display absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_absolute_file_basename_same: absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_absolute_file_basename_same: set filename-display basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_absolute_file_basename_same: basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_absolute_file_basename_same: set filename-display relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_absolute_file_basename_same: relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_absolute_file_relative_different: continue to breakpoint: compdir_absolute_ldir_absolute_file_relative_different
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_absolute_file_relative_different: set filename-display absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_absolute_file_relative_different: absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_absolute_file_relative_different: set filename-display basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_absolute_file_relative_different: basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_absolute_file_relative_different: set filename-display relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_absolute_file_relative_different: relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_absolute_file_absolute_same: continue to breakpoint: compdir_absolute_ldir_absolute_file_absolute_same
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_absolute_file_absolute_same: set filename-display absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_absolute_file_absolute_same: absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_absolute_file_absolute_same: set filename-display basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_absolute_file_absolute_same: basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_absolute_file_absolute_same: set filename-display relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_absolute_file_absolute_same: relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_absolute_file_absolute_different: continue to breakpoint: compdir_absolute_ldir_absolute_file_absolute_different
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_absolute_file_absolute_different: set filename-display absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_absolute_file_absolute_different: absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_absolute_file_absolute_different: set filename-display basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_absolute_file_absolute_different: basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_absolute_file_absolute_different: set filename-display relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_absolute_file_absolute_different: relative
+Running ./gdb.dwarf2/dw2-dos-drive.exp ...
+PASS: gdb.dwarf2/dw2-dos-drive.exp: set breakpoint pending off
+FAIL: gdb.dwarf2/dw2-dos-drive.exp: break 'z:file.c':func
+UNSUPPORTED: gdb.dwarf2/dw2-dos-drive.exp: break file.c:func
+Running ./gdb.dwarf2/dw2-double-set-die-type.exp ...
+PASS: gdb.dwarf2/dw2-double-set-die-type.exp: ptype a
+Running ./gdb.dwarf2/dw2-empty-namespace.exp ...
+PASS: gdb.dwarf2/dw2-empty-namespace.exp: ptype var
+PASS: gdb.dwarf2/dw2-empty-namespace.exp: p var
+Running ./gdb.dwarf2/dw2-empty-pc-range.exp ...
+PASS: gdb.dwarf2/dw2-empty-pc-range.exp: empty range before CU load
+PASS: gdb.dwarf2/dw2-empty-pc-range.exp: valid range after CU load
+PASS: gdb.dwarf2/dw2-empty-pc-range.exp: empty range after CU load
+Running ./gdb.dwarf2/dw2-entry-value.exp ...
+FAIL: gdb.dwarf2/dw2-entry-value.exp: <optimized out> is printed
+Running ./gdb.dwarf2/dw2-error.exp ...
+gdb compile failed, dw2-error.c: Assembler messages:
+dw2-error.c:25: Error: unrecognized symbol type ""
+dw2-error.c:33: Error: bad instruction `pushq %rbp'
+dw2-error.c:36: Error: bad instruction `movq %rsp,%rbp'
+dw2-error.c:40: Error: bad instruction `movl $23,%eax'
+dw2-error.c:43: Error: bad instruction `popq %rbp'
+dw2-error.c:45: Error: bad instruction `ret'
+dw2-error.c:50: Error: junk at end of line, first unrecognized character is `,'
+dw2-error.c:52: Error: junk at end of line, first unrecognized character is `#'
+dw2-error.c:53: Error: unknown pseudo-op: `.value'
+dw2-error.c:54: Error: junk at end of line, first unrecognized character is `#'
+dw2-error.c:55: Error: junk at end of line, first unrecognized character is `#'
+dw2-error.c:56: Error: junk at end of line, first unrecognized character is `#'
+dw2-error.c:57: Error: junk at end of line, first unrecognized character is `#'
+dw2-error.c:58: Error: junk at end of line, first unrecognized character is `#'
+dw2-error.c:59: Error: junk at end of line, first unrecognized character is `#'
+dw2-error.c:60: Error: junk at end of line, first unrecognized character is `#'
+dw2-error.c:61: Error: junk at end of line, first unrecognized character is `#'
+dw2-error.c:62: Error: junk at end of line, first unrecognized character is `#'
+dw2-error.c:63: Error: junk at end of line, first unrecognized character is `#'
+dw2-error.c:64: Error: junk at end of line, first unrecognized character is `#'
+dw2-error.c:66: Error: junk at end of line, first unrecognized character is `#'
+dw2-error.c:67: Error: junk at end of line, first unrecognized character is `#'
+dw2-error.c:68: Error: junk at end of line, first unrecognized character is `#'
+dw2-error.c:69: Error: junk at end of line, first unrecognized character is `#'
+dw2-error.c:70: Error: junk at end of line, first unrecognized character is `#'
+dw2-error.c:71: Error: junk at end of line, first unrecognized character is `#'
+dw2-error.c:72: Error: junk at end of line, first unrecognized character is `#'
+dw2-error.c:73: Error: junk at end of line, first unrecognized character is `#'
+dw2-error.c:75: Error: junk at end of line, first unrecognized character is `#'
+dw2-error.c:76: Error: junk at end of line, first unrecognized character is `#'
+dw2-error.c:77: Error: junk at end of line, first unrecognized character is `#'
+dw2-error.c:78: Error: junk at end of line, first unrecognized character is `#'
+dw2-error.c:79: Error: junk at end of line, first unrecognized character is `#'
+dw2-error.c:80: Error: junk at end of line, first unrecognized character is `,'
+dw2-error.c:82: Error: junk at end of line, first unrecognized character is `#'
+dw2-error.c:83: Error: junk at end of line, first unrecognized character is `#'
+dw2-error.c:84: Error: junk at end of line, first unrecognized character is `#'
+dw2-error.c:85: Error: junk at end of line, first unrecognized character is `#'
+dw2-error.c:86: Error: junk at end of line, first unrecognized character is `#'
+dw2-error.c:87: Error: junk at end of line, first unrecognized character is `#'
+dw2-error.c:88: Error: junk at end of line, first unrecognized character is `#'
+dw2-error.c:89: Error: junk at end of line, first unrecognized character is `#'
+dw2-error.c:90: Error: junk at end of line, first unrecognized character is `#'
+dw2-error.c:91: Error: junk at end of line, first unrecognized character is `#'
+dw2-error.c:92: Error: junk at end of line, first unrecognized character is `#'
+dw2-error.c:93: Error: junk at end of line, first unrecognized character is `#'
+dw2-error.c:94: Error: junk at end of line, first unrecognized character is `#'
+dw2-error.c:95: Error: junk at end of line, first unrecognized character is `#'
+dw2-error.c:96: Error: junk at end of line, first unrecognized character is `#'
+dw2-error.c:97: Error: junk at end of line, first unrecognized character is `#'
+dw2-error.c:98: Error: junk at end of line, first unrecognized character is `#'
+dw2-error.c:101: Error: junk at end of line, first unrecognized character is `#'
+dw2-error.c:102: Error: junk at end of line, first unrecognized character is `#'
+dw2-error.c:103: Error: junk at end of line, first unrecognized character is `#'
+dw2-error.c:104: Error: junk at end of line, first unrecognized character is `#'
+dw2-error.c:105: Error: junk at end of line, first unrecognized character is `#'
+dw2-error.c:106: Error: junk at end of line, first unrecognized character is `#'
+dw2-error.c:107: Error: junk at end of line, first unrecognized character is `#'
+dw2-error.c:108: Error: junk at end of line, first unrecognized character is `#'
+dw2-error.c:109: Error: junk at end of line, first unrecognized character is `#'
+dw2-error.c:110: Error: junk at end of line, first unrecognized character is `#'
+dw2-error.c:111: Error: junk at end of line, first unrecognized character is `#'
+dw2-error.c:112: Error: junk at end of line, first unrecognized character is `#'
+dw2-error.c:113: Error: junk at end of line, first unrecognized character is `#'
+dw2-error.c:114: Error: junk at end of line, first unrecognized character is `#'
+dw2-error.c:115: Error: junk at end of line, first unrecognized character is `#'
+dw2-error.c:116: Error: junk at end of line, first unrecognized character is `#'
+dw2-error.c:117: Error: junk at end of line, first unrecognized character is `#'
+dw2-error.c:118: Error: junk at end of line, first unrecognized character is `#'
+dw2-error.c:119: Error: junk at end of line, first unrecognized character is `#'
+dw2-error.c:120: Error: junk at end of line, first unrecognized character is `#'
+dw2-error.c:121: Error: junk at end of line, first unrecognized character is `#'
+dw2-error.c:124: Error: junk at end of line, first unrecognized character is `#'
+dw2-error.c:125: Error: junk at end of line, first unrecognized character is `#'
+dw2-error.c:126: Error: junk at end of line, first unrecognized character is `#'
+dw2-error.c:127: Error: junk at end of line, first unrecognized character is `#'
+dw2-error.c:128: Error: junk at end of line, first unrecognized character is `#'
+dw2-error.c:129: Error: junk at end of line, first unrecognized character is `#'
+dw2-error.c:130: Error: junk at end of line, first unrecognized character is `#'
+dw2-error.c:131: Error: junk at end of line, first unrecognized character is `#'
+dw2-error.c:132: Error: junk at end of line, first unrecognized character is `#'
+dw2-error.c:136: Error: junk at end of line, first unrecognized character is `,'
+dw2-error.c:137: Error: junk at end of line, first unrecognized character is `#'
+dw2-error.c:138: Error: unknown pseudo-op: `.value'
+dw2-error.c:139: Error: junk at end of line, first unrecognized character is `#'
+dw2-error.c:140: Error: junk at end of line, first unrecognized character is `#'
+dw2-error.c:141: Error: junk at end of line, first unrecognized character is `#'
+dw2-error.c:142: Error: unknown pseudo-op: `.value'
+dw2-error.c:143: Error: unknown pseudo-op: `.value'
+dw2-error.c:144: Error: junk at end of line, first unrecognized character is `#'
+dw2-error.c:145: Error: junk at end of line, first unrecognized character is `#'
+dw2-error.c:148: Error: junk at end of line, first unrecognized character is `,'
+dw2-error.c:160: Error: junk at end of line, first unrecognized character is `,'
+UNTESTED: gdb.dwarf2/dw2-error.exp: dw2-error.exp
+Running ./gdb.dwarf2/dw2-filename.exp ...
+PASS: gdb.dwarf2/dw2-filename.exp: interpreter-exec mi -file-list-exec-source-files
+PASS: gdb.dwarf2/dw2-filename.exp: info sources
+Running ./gdb.dwarf2/dw2-icc-opaque.exp ...
+PASS: gdb.dwarf2/dw2-icc-opaque.exp: ptype p_struct
+Running ./gdb.dwarf2/dw2-ifort-parameter.exp ...
+FAIL: gdb.dwarf2/dw2-ifort-parameter.exp: p/x param
+Running ./gdb.dwarf2/dw2-inheritance.exp ...
+PASS: gdb.dwarf2/dw2-inheritance.exp: ptype inherited
+Running ./gdb.dwarf2/dw2-inline-break.exp ...
+Running ./gdb.dwarf2/dw2-inline-param.exp ...
+PASS: gdb.dwarf2/dw2-inline-param.exp: info addr break_at
+Running ./gdb.dwarf2/dw2-intercu.exp ...
+PASS: gdb.dwarf2/dw2-intercu.exp: ptype int2
+PASS: gdb.dwarf2/dw2-intercu.exp: set listsize 1
+PASS: gdb.dwarf2/dw2-intercu.exp: list func_cu1
+PASS: gdb.dwarf2/dw2-intercu.exp: ptype func_cu1
+Running ./gdb.dwarf2/dw2-intermix.exp ...
+gdb compile failed, ./gdb.dwarf2/dw2-intermix.S: Assembler messages:
+./gdb.dwarf2/dw2-intermix.S:139: Error: bad relocation fixup type (1)
+./gdb.dwarf2/dw2-intermix.S:142: Error: bad relocation fixup type (1)
+UNTESTED: gdb.dwarf2/dw2-intermix.exp: dw2-intermix.exp
+Running ./gdb.dwarf2/dw2-linkage-name-trust.exp ...
+PASS: gdb.dwarf2/dw2-linkage-name-trust.exp: set language c++
+PASS: gdb.dwarf2/dw2-linkage-name-trust.exp: set cp-abi gnu-v3
+PASS: gdb.dwarf2/dw2-linkage-name-trust.exp: p c.membername
+PASS: gdb.dwarf2/dw2-linkage-name-trust.exp: p c.membername ()
+Running ./gdb.dwarf2/dw2-minsym-in-cu.exp ...
+PASS: gdb.dwarf2/dw2-minsym-in-cu.exp: info fun func2
+Running ./gdb.dwarf2/dw2-modula2-self-type.exp ...
+PASS: gdb.dwarf2/dw2-modula2-self-type.exp: set language modula-2
+PASS: gdb.dwarf2/dw2-modula2-self-type.exp: ptype v
+PASS: gdb.dwarf2/dw2-modula2-self-type.exp: alive
+Running ./gdb.dwarf2/dw2-namespaceless-anonymous.exp ...
+PASS: gdb.dwarf2/dw2-namespaceless-anonymous.exp: ptype '(anonymous namespace)::v'
+PASS: gdb.dwarf2/dw2-namespaceless-anonymous.exp: p '(anonymous namespace)::v'
+Running ./gdb.dwarf2/dw2-noloc.exp ...
+PASS: gdb.dwarf2/dw2-noloc.exp: no-run: print file_locaddr_resolvable
+PASS: gdb.dwarf2/dw2-noloc.exp: no-run: ptype file_locaddr_resolvable
+PASS: gdb.dwarf2/dw2-noloc.exp: no-run: print file_locaddr_unresolvable
+PASS: gdb.dwarf2/dw2-noloc.exp: no-run: ptype file_locaddr_unresolvable
+PASS: gdb.dwarf2/dw2-noloc.exp: no-run: print file_locempty_resolvable
+PASS: gdb.dwarf2/dw2-noloc.exp: no-run: ptype file_locempty_resolvable
+PASS: gdb.dwarf2/dw2-noloc.exp: no-run: print file_locempty_unresolvable
+PASS: gdb.dwarf2/dw2-noloc.exp: no-run: ptype file_locempty_unresolvable
+PASS: gdb.dwarf2/dw2-noloc.exp: no-run: print file_locno_resolvable
+PASS: gdb.dwarf2/dw2-noloc.exp: no-run: ptype file_locno_resolvable
+PASS: gdb.dwarf2/dw2-noloc.exp: no-run: print file_locno_unresolvable
+PASS: gdb.dwarf2/dw2-noloc.exp: no-run: ptype file_locno_unresolvable
+PASS: gdb.dwarf2/dw2-noloc.exp: no-run: print file_extern_locaddr_resolvable
+PASS: gdb.dwarf2/dw2-noloc.exp: no-run: ptype file_extern_locaddr_resolvable
+PASS: gdb.dwarf2/dw2-noloc.exp: no-run: print file_extern_locaddr_unresolvable
+PASS: gdb.dwarf2/dw2-noloc.exp: no-run: ptype file_extern_locaddr_unresolvable
+PASS: gdb.dwarf2/dw2-noloc.exp: no-run: print file_extern_locempty_resolvable
+PASS: gdb.dwarf2/dw2-noloc.exp: no-run: ptype file_extern_locempty_resolvable
+PASS: gdb.dwarf2/dw2-noloc.exp: no-run: print file_extern_locempty_unresolvable
+PASS: gdb.dwarf2/dw2-noloc.exp: no-run: ptype file_extern_locempty_unresolvable
+PASS: gdb.dwarf2/dw2-noloc.exp: no-run: print file_extern_locno_resolvable
+PASS: gdb.dwarf2/dw2-noloc.exp: no-run: ptype file_extern_locno_resolvable
+PASS: gdb.dwarf2/dw2-noloc.exp: in-main: print file_locaddr_resolvable
+PASS: gdb.dwarf2/dw2-noloc.exp: in-main: ptype file_locaddr_resolvable
+PASS: gdb.dwarf2/dw2-noloc.exp: in-main: print file_locaddr_unresolvable
+PASS: gdb.dwarf2/dw2-noloc.exp: in-main: ptype file_locaddr_unresolvable
+PASS: gdb.dwarf2/dw2-noloc.exp: in-main: print file_locempty_resolvable
+PASS: gdb.dwarf2/dw2-noloc.exp: in-main: ptype file_locempty_resolvable
+PASS: gdb.dwarf2/dw2-noloc.exp: in-main: print file_locempty_unresolvable
+PASS: gdb.dwarf2/dw2-noloc.exp: in-main: ptype file_locempty_unresolvable
+PASS: gdb.dwarf2/dw2-noloc.exp: in-main: print file_locno_resolvable
+PASS: gdb.dwarf2/dw2-noloc.exp: in-main: ptype file_locno_resolvable
+PASS: gdb.dwarf2/dw2-noloc.exp: in-main: print file_locno_unresolvable
+PASS: gdb.dwarf2/dw2-noloc.exp: in-main: ptype file_locno_unresolvable
+PASS: gdb.dwarf2/dw2-noloc.exp: in-main: print file_extern_locaddr_resolvable
+PASS: gdb.dwarf2/dw2-noloc.exp: in-main: ptype file_extern_locaddr_resolvable
+PASS: gdb.dwarf2/dw2-noloc.exp: in-main: print file_extern_locaddr_unresolvable
+PASS: gdb.dwarf2/dw2-noloc.exp: in-main: ptype file_extern_locaddr_unresolvable
+PASS: gdb.dwarf2/dw2-noloc.exp: in-main: print file_extern_locempty_resolvable
+PASS: gdb.dwarf2/dw2-noloc.exp: in-main: ptype file_extern_locempty_resolvable
+PASS: gdb.dwarf2/dw2-noloc.exp: in-main: print file_extern_locempty_unresolvable
+PASS: gdb.dwarf2/dw2-noloc.exp: in-main: ptype file_extern_locempty_unresolvable
+PASS: gdb.dwarf2/dw2-noloc.exp: in-main: print file_extern_locno_resolvable
+PASS: gdb.dwarf2/dw2-noloc.exp: in-main: ptype file_extern_locno_resolvable
+PASS: gdb.dwarf2/dw2-noloc.exp: print main_local_locaddr_resolvable
+PASS: gdb.dwarf2/dw2-noloc.exp: ptype main_local_locaddr_resolvable
+PASS: gdb.dwarf2/dw2-noloc.exp: print main_local_locaddr_unresolvable
+PASS: gdb.dwarf2/dw2-noloc.exp: ptype main_local_locaddr_unresolvable
+PASS: gdb.dwarf2/dw2-noloc.exp: print main_local_locempty_resolvable
+PASS: gdb.dwarf2/dw2-noloc.exp: ptype main_local_locempty_resolvable
+PASS: gdb.dwarf2/dw2-noloc.exp: print main_local_locempty_unresolvable
+PASS: gdb.dwarf2/dw2-noloc.exp: ptype main_local_locempty_unresolvable
+PASS: gdb.dwarf2/dw2-noloc.exp: print main_local_locno_resolvable
+PASS: gdb.dwarf2/dw2-noloc.exp: ptype main_local_locno_resolvable
+PASS: gdb.dwarf2/dw2-noloc.exp: print main_local_locno_unresolvable
+PASS: gdb.dwarf2/dw2-noloc.exp: ptype main_local_locno_unresolvable
+PASS: gdb.dwarf2/dw2-noloc.exp: print main_extern_locaddr_resolvable
+PASS: gdb.dwarf2/dw2-noloc.exp: ptype main_extern_locaddr_resolvable
+PASS: gdb.dwarf2/dw2-noloc.exp: print main_extern_locaddr_unresolvable
+PASS: gdb.dwarf2/dw2-noloc.exp: ptype main_extern_locaddr_unresolvable
+PASS: gdb.dwarf2/dw2-noloc.exp: print main_extern_locempty_resolvable
+PASS: gdb.dwarf2/dw2-noloc.exp: ptype main_extern_locempty_resolvable
+PASS: gdb.dwarf2/dw2-noloc.exp: print main_extern_locempty_unresolvable
+PASS: gdb.dwarf2/dw2-noloc.exp: ptype main_extern_locempty_unresolvable
+PASS: gdb.dwarf2/dw2-noloc.exp: print main_extern_locno_resolvable
+PASS: gdb.dwarf2/dw2-noloc.exp: ptype main_extern_locno_resolvable
+Running ./gdb.dwarf2/dw2-objfile-overlap.exp ...
+PASS: gdb.dwarf2/dw2-objfile-overlap.exp: add-symbol-file
+PASS: gdb.dwarf2/dw2-objfile-overlap.exp: info line inner
+Running ./gdb.dwarf2/dw2-op-call.exp ...
+PASS: gdb.dwarf2/dw2-op-call.exp: maintenance set dwarf2 max-cache-age 0
+PASS: gdb.dwarf2/dw2-op-call.exp: p array1
+PASS: gdb.dwarf2/dw2-op-call.exp: array2 using DW_OP_call2
+PASS: gdb.dwarf2/dw2-op-call.exp: array3 using DW_OP_call4
+PASS: gdb.dwarf2/dw2-op-call.exp: p arraynoloc
+PASS: gdb.dwarf2/dw2-op-call.exp: p arraycallnoloc
+Running ./gdb.dwarf2/dw2-op-out-param.exp ...
+Running ./gdb.dwarf2/dw2-op-stack-value.exp ...
+PASS: gdb.dwarf2/dw2-op-stack-value.exp: p/x stack2
+PASS: gdb.dwarf2/dw2-op-stack-value.exp: p/x stack8
+PASS: gdb.dwarf2/dw2-op-stack-value.exp: x/wx &aa551234
+PASS: gdb.dwarf2/dw2-op-stack-value.exp: p/x implicit4to2
+PASS: gdb.dwarf2/dw2-op-stack-value.exp: p/x implicit4to4
+Running ./gdb.dwarf2/dw2-param-error.exp ...
+FAIL: gdb.dwarf2/dw2-param-error.exp: frame
+Running ./gdb.dwarf2/dw2-producer.exp ...
+PASS: gdb.dwarf2/dw2-producer.exp: set listsize 1
+PASS: gdb.dwarf2/dw2-producer.exp: list func_cu1
+PASS: gdb.dwarf2/dw2-producer.exp: ptype func_cu1
+Running ./gdb.dwarf2/dw2-ranges.exp ...
+PASS: gdb.dwarf2/dw2-ranges.exp: info line main
+PASS: gdb.dwarf2/dw2-ranges.exp: info line func
+PASS: gdb.dwarf2/dw2-ranges.exp: info line main2
+PASS: gdb.dwarf2/dw2-ranges.exp: info line func2
+KFAIL: gdb.dwarf2/dw2-ranges.exp: info line main3 (PRMS: symtab/12497)
+Running ./gdb.dwarf2/dw2-ref-missing-frame.exp ...
+PASS: gdb.dwarf2/dw2-ref-missing-frame.exp: func_nofb print
+PASS: gdb.dwarf2/dw2-ref-missing-frame.exp: func_nofb backtrace
+PASS: gdb.dwarf2/dw2-ref-missing-frame.exp: func_loopfb print
+PASS: gdb.dwarf2/dw2-ref-missing-frame.exp: func_loopfb backtrace
+Running ./gdb.dwarf2/dw2-restore.exp ...
+Running ./gdb.dwarf2/dw2-restrict.exp ...
+Running ./gdb.dwarf2/dw2-simple-locdesc.exp ...
+KFAIL: gdb.dwarf2/dw2-simple-locdesc.exp: p &s.shl (PRMS: symtab/13307)
+PASS: gdb.dwarf2/dw2-simple-locdesc.exp: p &s.data4
+Running ./gdb.dwarf2/dw2-skip-prologue.exp ...
+PASS: gdb.dwarf2/dw2-skip-prologue.exp: strip stub symbols
+PASS: gdb.dwarf2/dw2-skip-prologue.exp: continue to breakpoint: func
+FAIL: gdb.dwarf2/dw2-skip-prologue.exp: 2 locations found
+FAIL: gdb.dwarf2/dw2-skip-prologue.exp: no statement got executed
+Running ./gdb.dwarf2/dw2-stack-boundary.exp ...
+PASS: gdb.dwarf2/dw2-stack-boundary.exp: set complaints 100
+PASS: gdb.dwarf2/dw2-stack-boundary.exp: check partial symtab errors
+PASS: gdb.dwarf2/dw2-stack-boundary.exp: p underflow
+PASS: gdb.dwarf2/dw2-stack-boundary.exp: p overflow
+Running ./gdb.dwarf2/dw2-strp.exp ...
+PASS: gdb.dwarf2/dw2-strp.exp: p a_string
+PASS: gdb.dwarf2/dw2-strp.exp: ptype a_string
+PASS: gdb.dwarf2/dw2-strp.exp: p a_string2
+PASS: gdb.dwarf2/dw2-strp.exp: ptype a_string2
+Running ./gdb.dwarf2/dw2-unresolved.exp ...
+PASS: gdb.dwarf2/dw2-unresolved.exp: continue to breakpoint: *extern_block_start
+PASS: gdb.dwarf2/dw2-unresolved.exp: print/d var
+Running ./gdb.dwarf2/dw2-var-zero-addr.exp ...
+PASS: gdb.dwarf2/dw2-var-zero-addr.exp: print &var
+Running ./gdb.dwarf2/dw4-sig-types.exp ...
+PASS: gdb.dwarf2/dw4-sig-types.exp: maint set dwarf2 max-cache-age 0
+PASS: gdb.dwarf2/dw4-sig-types.exp: p myset
+PASS: gdb.dwarf2/dw4-sig-types.exp: continue to foo
+Running ./gdb.dwarf2/dw4-sig-type-unused.exp ...
+PASS: gdb.dwarf2/dw4-sig-type-unused.exp: alive
+Running ./gdb.dwarf2/fission-base.exp ...
+Running ./gdb.dwarf2/fission-loclists.exp ...
+Running ./gdb.dwarf2/fission-reread.exp ...
+gdb compile failed, fission-reread.cc: Assembler messages:
+fission-reread.cc:46: Error: unrecognized symbol type ""
+fission-reread.cc:54: Error: unrecognized symbol type ""
+UNTESTED: gdb.dwarf2/fission-reread.exp: fission-reread.exp
+Running ./gdb.dwarf2/implptr-64bit.exp ...
+UNTESTED: gdb.dwarf2/implptr-64bit.exp: implptr-64bit.exp
+UNTESTED: gdb.dwarf2/implptr-64bit.exp: implptr-64bit.exp
+UNTESTED: gdb.dwarf2/implptr-64bit.exp: implptr-64bit.exp
+UNTESTED: gdb.dwarf2/implptr-64bit.exp: implptr-64bit.exp
+UNTESTED: gdb.dwarf2/implptr-64bit.exp: implptr-64bit.exp
+UNTESTED: gdb.dwarf2/implptr-64bit.exp: implptr-64bit.exp
+UNTESTED: gdb.dwarf2/implptr-64bit.exp: implptr-64bit.exp
+UNTESTED: gdb.dwarf2/implptr-64bit.exp: implptr-64bit.exp
+Running ./gdb.dwarf2/implptr.exp ...
+Running ./gdb.dwarf2/implptr-optimized-out.exp ...
+PASS: gdb.dwarf2/implptr-optimized-out.exp: p p->f
+Running ./gdb.dwarf2/mac-fileno.exp ...
+gdb compile failed, ./gdb.dwarf2/mac-fileno.S: Assembler messages:
+./gdb.dwarf2/mac-fileno.S:203: Error: junk at end of line, first unrecognized character is `,'
+UNTESTED: gdb.dwarf2/mac-fileno.exp: mac-fileno.exp
+Running ./gdb.dwarf2/member-ptr-forwardref.exp ...
+gdb compile failed, member-ptr-forwardref.cc: Assembler messages:
+member-ptr-forwardref.cc:34: Error: junk at end of line, first unrecognized character is `,'
+member-ptr-forwardref.cc:36: Error: junk at end of line, first unrecognized character is `,'
+member-ptr-forwardref.cc:38: Error: junk at end of line, first unrecognized character is `,'
+member-ptr-forwardref.cc:45: Error: unrecognized symbol type ""
+member-ptr-forwardref.cc:51: Error: unrecognized symbol type ""
+member-ptr-forwardref.cc:293: Error: junk at end of line, first unrecognized character is `,'
+member-ptr-forwardref.cc:303: Error: junk at end of line, first unrecognized character is `,'
+member-ptr-forwardref.cc:327: Error: junk at end of line, first unrecognized character is `,'
+UNTESTED: gdb.dwarf2/member-ptr-forwardref.exp: member-ptr-forwardref.exp
+Running ./gdb.dwarf2/method-ptr.exp ...
+PASS: gdb.dwarf2/method-ptr.exp: ptype the_typedef
+Running ./gdb.dwarf2/pieces.exp ...
+Running ./gdb.dwarf2/pr10770.exp ...
+PASS: gdb.dwarf2/pr10770.exp: set breakpoint for pr10770
+PASS: gdb.dwarf2/pr10770.exp: cont
+PASS: gdb.dwarf2/pr10770.exp: frame 2
+Running ./gdb.dwarf2/pr11465.exp ...
+PASS: gdb.dwarf2/pr11465.exp: p N::c.C
+Running ./gdb.dwarf2/pr13961.exp ...
+gdb compile failed, pr13961.cc: Assembler messages:
+pr13961.cc:45: Error: unrecognized symbol type ""
+pr13961.cc:59: Error: unrecognized symbol type ""
+pr13961.cc:67: Error: junk at end of line, first unrecognized character is `,'
+pr13961.cc:124: Error: junk at end of line, first unrecognized character is `,'
+pr13961.cc:208: Error: junk at end of line, first unrecognized character is `,'
+pr13961.cc:336: Error: junk at end of line, first unrecognized character is `,'
+pr13961.cc:349: Error: junk at end of line, first unrecognized character is `,'
+UNTESTED: gdb.dwarf2/pr13961.exp: pr13961.exp
+Running ./gdb.dwarf2/subrange.exp ...
+PASS: gdb.dwarf2/subrange.exp: set language pascal
+PASS: gdb.dwarf2/subrange.exp: ptype TByteArray
+Running ./gdb.dwarf2/trace-crash.exp ...
+Running ./gdb.dwarf2/typeddwarf.exp ...
+Running ./gdb.dwarf2/valop.exp ...
+Running ./gdb.dwarf2/watch-notconst.exp ...
+Running ./gdb.fortran/array-element.exp ...
+gdb compile failed, default_target_compile: Can't find armv7a-cros-linux-gnueabi-gfortran.
+UNTESTED: gdb.fortran/array-element.exp: array-element.exp
+Running ./gdb.fortran/charset.exp ...
+gdb compile failed, default_target_compile: Can't find armv7a-cros-linux-gnueabi-gfortran.
+UNTESTED: gdb.fortran/charset.exp: charset.exp
+Running ./gdb.fortran/common-block.exp ...
+UNTESTED: gdb.fortran/common-block.exp: common-block.exp
+Running ./gdb.fortran/complex.exp ...
+UNTESTED: gdb.fortran/complex.exp: complex.exp
+UNTESTED: gdb.fortran/complex.exp: Couldn't compile complex.f
+Running ./gdb.fortran/derived-type.exp ...
+gdb compile failed, default_target_compile: Can't find armv7a-cros-linux-gnueabi-gfortran.
+UNTESTED: gdb.fortran/derived-type.exp: derived-type.exp
+Running ./gdb.fortran/exprs.exp ...
+PASS: gdb.fortran/exprs.exp: set print sevenbit-strings
+PASS: gdb.fortran/exprs.exp: set language fortran
+PASS: gdb.fortran/exprs.exp: set language to "fortran"
+PASS: gdb.fortran/exprs.exp: Set value-history[1] using $1
+PASS: gdb.fortran/exprs.exp: Set value-history[2] using $2
+PASS: gdb.fortran/exprs.exp: Set value-history[3] using $3
+PASS: gdb.fortran/exprs.exp: Print value-history[MAX-1] using inplicit index $$
+PASS: gdb.fortran/exprs.exp: Print value-history[MAX-1] again using implicit index $$
+PASS: gdb.fortran/exprs.exp: Print value-history[MAX] using implicit index $
+PASS: gdb.fortran/exprs.exp: Print value-history[MAX-2] using explicit index $$2
+PASS: gdb.fortran/exprs.exp: Print value-history[MAX] using explicit index $0
+PASS: gdb.fortran/exprs.exp: Print value-history[MAX] using explicit index $$0
+PASS: gdb.fortran/exprs.exp: Print value-history[1] using explicit index $1
+PASS: gdb.fortran/exprs.exp: Print value-history[2] using explicit index $2
+PASS: gdb.fortran/exprs.exp: Print value-history[3] using explicit index $3
+PASS: gdb.fortran/exprs.exp: Print (value-history[MAX] - 3) using implicit index $
+PASS: gdb.fortran/exprs.exp: Use value-history element in arithmetic expression
+PASS: gdb.fortran/exprs.exp: Set a new convenience variable
+PASS: gdb.fortran/exprs.exp: Print contents of new convenience variable
+PASS: gdb.fortran/exprs.exp: Set convenience variable to a new value
+PASS: gdb.fortran/exprs.exp: Print new contents of convenience variable
+PASS: gdb.fortran/exprs.exp: Set convenience variable $_
+PASS: gdb.fortran/exprs.exp: Print contents of convenience variable $_
+PASS: gdb.fortran/exprs.exp: Use convenience variable in arithmetic expression
+PASS: gdb.fortran/exprs.exp: Use convenience variable assignment in arithmetic expression
+PASS: gdb.fortran/exprs.exp: Print contents of uninitialized convenience variable
+PASS: gdb.fortran/exprs.exp: p 123
+PASS: gdb.fortran/exprs.exp: p -123
+PASS: gdb.fortran/exprs.exp: reject p _
+PASS: gdb.fortran/exprs.exp: p .TRUE.
+PASS: gdb.fortran/exprs.exp: p .FALSE.
+PASS: gdb.fortran/exprs.exp: p 'a'
+PASS: gdb.fortran/exprs.exp: p 'abcdefg'(2:4)
+PASS: gdb.fortran/exprs.exp: p 'abcdefg'(:3)
+PASS: gdb.fortran/exprs.exp: p 'abcdefg'(5:)
+PASS: gdb.fortran/exprs.exp: p 'abcdefg'(:)
+PASS: gdb.fortran/exprs.exp: p .44 .LT. .45
+PASS: gdb.fortran/exprs.exp: p .44 .GT. .45
+PASS: gdb.fortran/exprs.exp: p 0.44 .LT. 0.45
+PASS: gdb.fortran/exprs.exp: p 0.44 .GT. 0.45
+PASS: gdb.fortran/exprs.exp: p 44. .LT. 45.
+PASS: gdb.fortran/exprs.exp: p 44. .GT. 45.
+PASS: gdb.fortran/exprs.exp: p 44.0 .LT. 45.0
+PASS: gdb.fortran/exprs.exp: p 44.0 .GT. 45.0
+PASS: gdb.fortran/exprs.exp: p 10D20 .LT. 10D21
+PASS: gdb.fortran/exprs.exp: p 10D20 .GT. 10D21
+PASS: gdb.fortran/exprs.exp: p 10d20 .LT. 10d21
+PASS: gdb.fortran/exprs.exp: p 10d20 .GT. 10d21
+PASS: gdb.fortran/exprs.exp: p 10E20 .LT. 10E21
+PASS: gdb.fortran/exprs.exp: p 10E20 .GT. 10E21
+PASS: gdb.fortran/exprs.exp: p 10e20 .LT. 10e21
+PASS: gdb.fortran/exprs.exp: p 10e20 .GT. 10e21
+PASS: gdb.fortran/exprs.exp: p 10.D20 .LT. 10.D21
+PASS: gdb.fortran/exprs.exp: p 10.D20 .GT. 10.D21
+PASS: gdb.fortran/exprs.exp: p 10.d20 .LT. 10.d21
+PASS: gdb.fortran/exprs.exp: p 10.d20 .GT. 10.d21
+PASS: gdb.fortran/exprs.exp: p 10.E20 .LT. 10.E21
+PASS: gdb.fortran/exprs.exp: p 10.E20 .GT. 10.E21
+PASS: gdb.fortran/exprs.exp: p 10.e20 .LT. 10.e21
+PASS: gdb.fortran/exprs.exp: p 10.e20 .GT. 10.e21
+PASS: gdb.fortran/exprs.exp: p 10.0D20 .LT. 10.0D21
+PASS: gdb.fortran/exprs.exp: p 10.0D20 .GT. 10.0D21
+PASS: gdb.fortran/exprs.exp: p 10.0d20 .LT. 10.0d21
+PASS: gdb.fortran/exprs.exp: p 10.0d20 .GT. 10.0d21
+PASS: gdb.fortran/exprs.exp: p 10.0E20 .LT. 10.0E21
+PASS: gdb.fortran/exprs.exp: p 10.0E20 .GT. 10.0E21
+PASS: gdb.fortran/exprs.exp: p 10.0e20 .LT. 10.0e21
+PASS: gdb.fortran/exprs.exp: p 10.0e20 .GT. 10.0e21
+PASS: gdb.fortran/exprs.exp: p 10.0D+20 .LT. 10.0D+21
+PASS: gdb.fortran/exprs.exp: p 10.0D+20 .GT. 10.0D+21
+PASS: gdb.fortran/exprs.exp: p 10.0d+20 .LT. 10.0d+21
+PASS: gdb.fortran/exprs.exp: p 10.0d+20 .GT. 10.0d+21
+PASS: gdb.fortran/exprs.exp: p 10.0E+20 .LT. 10.0E+21
+PASS: gdb.fortran/exprs.exp: p 10.0E+20 .GT. 10.0E+21
+PASS: gdb.fortran/exprs.exp: p 10.0e+20 .LT. 10.0e+21
+PASS: gdb.fortran/exprs.exp: p 10.0e+20 .GT. 10.0e+21
+PASS: gdb.fortran/exprs.exp: p 10.0D-11 .LT. 10.0D-10
+PASS: gdb.fortran/exprs.exp: p 10.0D-11 .GT. 10.0D-10
+PASS: gdb.fortran/exprs.exp: p 10.0d-11 .LT. 10.0d-10
+PASS: gdb.fortran/exprs.exp: p 10.0d-11 .GT. 10.0d-10
+PASS: gdb.fortran/exprs.exp: p 10.0E-11 .LT. 10.0E-10
+PASS: gdb.fortran/exprs.exp: p 10.0E-11 .GT. 10.0E-10
+PASS: gdb.fortran/exprs.exp: p 10.0e-11 .LT. 10.0e-10
+PASS: gdb.fortran/exprs.exp: p 10.0e-11 .GT. 10.0e-10
+PASS: gdb.fortran/exprs.exp: unary minus applied to int
+PASS: gdb.fortran/exprs.exp: unary minus applied to real
+PASS: gdb.fortran/exprs.exp: bool plus int
+PASS: gdb.fortran/exprs.exp: int plus int
+PASS: gdb.fortran/exprs.exp: real plus int
+PASS: gdb.fortran/exprs.exp: real plus real
+PASS: gdb.fortran/exprs.exp: bool minus int
+PASS: gdb.fortran/exprs.exp: int minus int
+PASS: gdb.fortran/exprs.exp: real minus int
+PASS: gdb.fortran/exprs.exp: real minus real
+PASS: gdb.fortran/exprs.exp: bool times int
+PASS: gdb.fortran/exprs.exp: int times int
+PASS: gdb.fortran/exprs.exp: real times int
+PASS: gdb.fortran/exprs.exp: real times real
+PASS: gdb.fortran/exprs.exp: bool divided by int
+PASS: gdb.fortran/exprs.exp: int divided by int
+PASS: gdb.fortran/exprs.exp: real divided by int
+PASS: gdb.fortran/exprs.exp: real divided by real
+PASS: gdb.fortran/exprs.exp: int powered by int
+PASS: gdb.fortran/exprs.exp: combined exponentiation expression
+PASS: gdb.fortran/exprs.exp: combined exponentiation expression in specified order
+PASS: gdb.fortran/exprs.exp: int powered by real
+PASS: gdb.fortran/exprs.exp: real powered by real
+Running ./gdb.fortran/library-module.exp ...
+gdb compile failed, default_target_compile: Can't find armv7a-cros-linux-gnueabi-gfortran.
+UNTESTED: gdb.fortran/library-module.exp: Couldn't compile library-module-lib.f90
+Running ./gdb.fortran/logical.exp ...
+UNTESTED: gdb.fortran/logical.exp: logical.exp
+Running ./gdb.fortran/module.exp ...
+gdb compile failed, default_target_compile: Can't find armv7a-cros-linux-gnueabi-gfortran.
+UNTESTED: gdb.fortran/module.exp: module.exp
+Running ./gdb.fortran/multi-dim.exp ...
+gdb compile failed, default_target_compile: Can't find armv7a-cros-linux-gnueabi-gfortran.
+UNTESTED: gdb.fortran/multi-dim.exp: multi-dim.exp
+Running ./gdb.fortran/subarray.exp ...
+gdb compile failed, default_target_compile: Can't find armv7a-cros-linux-gnueabi-gfortran.
+UNTESTED: gdb.fortran/subarray.exp: subarray.exp
+Running ./gdb.fortran/types.exp ...
+PASS: gdb.fortran/types.exp: set print sevenbit-strings
+PASS: gdb.fortran/types.exp: set language fortran
+PASS: gdb.fortran/types.exp: set language to "fortran"
+PASS: gdb.fortran/types.exp: pt 123
+PASS: gdb.fortran/types.exp: reject pt _
+PASS: gdb.fortran/types.exp: pt .TRUE.
+PASS: gdb.fortran/types.exp: pt .FALSE.
+PASS: gdb.fortran/types.exp: pt 'a'
+PASS: gdb.fortran/types.exp: pt .44
+PASS: gdb.fortran/types.exp: pt 44.0
+PASS: gdb.fortran/types.exp: pt 10D20
+PASS: gdb.fortran/types.exp: pt 10D20
+PASS: gdb.fortran/types.exp: pt 10d20
+PASS: gdb.fortran/types.exp: pt 10d20
+PASS: gdb.fortran/types.exp: pt 10E20
+PASS: gdb.fortran/types.exp: pt 10E20
+PASS: gdb.fortran/types.exp: pt 10e20
+PASS: gdb.fortran/types.exp: pt 10e20
+Running ./gdb.gdb/complaints.exp ...
+Running ./gdb.gdb/observer.exp ...
+Running ./gdb.gdb/selftest.exp ...
+Running ./gdb.gdb/xfullpath.exp ...
+Running ./gdb.go/basic-types.exp ...
+PASS: gdb.go/basic-types.exp: set language go
+PASS: gdb.go/basic-types.exp: set language to "go"
+PASS: gdb.go/basic-types.exp: pt 123
+PASS: gdb.go/basic-types.exp: pt void(42)
+PASS: gdb.go/basic-types.exp: pt byte(42)
+PASS: gdb.go/basic-types.exp: pt int(42)
+PASS: gdb.go/basic-types.exp: pt uint(42)
+PASS: gdb.go/basic-types.exp: pt uintptr(42)
+PASS: gdb.go/basic-types.exp: pt int8(42)
+PASS: gdb.go/basic-types.exp: pt int16(42)
+PASS: gdb.go/basic-types.exp: pt int32(42)
+PASS: gdb.go/basic-types.exp: pt int64(42)
+PASS: gdb.go/basic-types.exp: pt uint8(42)
+PASS: gdb.go/basic-types.exp: pt uint16(42)
+PASS: gdb.go/basic-types.exp: pt uint32(42)
+PASS: gdb.go/basic-types.exp: pt uint64(42)
+PASS: gdb.go/basic-types.exp: pt true
+PASS: gdb.go/basic-types.exp: pt false
+PASS: gdb.go/basic-types.exp: pt bool(0)
+PASS: gdb.go/basic-types.exp: pt bool(1)
+PASS: gdb.go/basic-types.exp: pt 'a'
+PASS: gdb.go/basic-types.exp: pt "a simple string"
+PASS: gdb.go/basic-types.exp: pt `a simple raw string`
+PASS: gdb.go/basic-types.exp: pt .44
+PASS: gdb.go/basic-types.exp: pt 44.0
+PASS: gdb.go/basic-types.exp: pt 10e20
+PASS: gdb.go/basic-types.exp: pt 10E20
+PASS: gdb.go/basic-types.exp: pt float32(.42)
+PASS: gdb.go/basic-types.exp: pt float64(.42)
+PASS: gdb.go/basic-types.exp: pt complex64(.42)
+XFAIL: gdb.go/basic-types.exp: pt complex64(.42i1.0)
+XFAIL: gdb.go/basic-types.exp: pt complex64(i1.0)
+PASS: gdb.go/basic-types.exp: pt complex128(.42)
+XFAIL: gdb.go/basic-types.exp: pt complex128(.42i1.0)
+XFAIL: gdb.go/basic-types.exp: pt complex128(i1.0)
+Running ./gdb.go/chan.exp ...
+gdb compile failed, default_target_compile: Can't find armv7a-cros-linux-gnueabi-gccgo.
+UNTESTED: gdb.go/chan.exp: chan.exp
+Running ./gdb.go/handcall.exp ...
+gdb compile failed, default_target_compile: Can't find armv7a-cros-linux-gnueabi-gccgo.
+UNTESTED: gdb.go/handcall.exp: handcall.exp
+Running ./gdb.go/hello.exp ...
+gdb compile failed, default_target_compile: Can't find armv7a-cros-linux-gnueabi-gccgo.
+UNTESTED: gdb.go/hello.exp: hello.exp
+Running ./gdb.go/integers.exp ...
+gdb compile failed, default_target_compile: Can't find armv7a-cros-linux-gnueabi-gccgo.
+UNTESTED: gdb.go/integers.exp: integers.exp
+Running ./gdb.go/methods.exp ...
+gdb compile failed, default_target_compile: Can't find armv7a-cros-linux-gnueabi-gccgo.
+UNTESTED: gdb.go/methods.exp: methods.exp
+Running ./gdb.go/package.exp ...
+gdb compile failed, default_target_compile: Can't find armv7a-cros-linux-gnueabi-gccgo.
+UNTESTED: gdb.go/package.exp: package
+Running ./gdb.go/print.exp ...
+PASS: gdb.go/print.exp: set language go
+PASS: gdb.go/print.exp: set language to "go"
+PASS: gdb.go/print.exp: check fp + text
+PASS: gdb.go/print.exp: p 1.
+PASS: gdb.go/print.exp: p 1.5
+PASS: gdb.go/print.exp: p 1.f
+PASS: gdb.go/print.exp: p 1.5f
+PASS: gdb.go/print.exp: p 1.l
+PASS: gdb.go/print.exp: p 1.5l
+PASS: gdb.go/print.exp: p 0x1.1
+PASS: gdb.go/print.exp: reject p 1.1x
+PASS: gdb.go/print.exp: reject p 1.1ff
+PASS: gdb.go/print.exp: reject p 1.1ll
+Running ./gdb.go/strings.exp ...
+gdb compile failed, default_target_compile: Can't find armv7a-cros-linux-gnueabi-gccgo.
+UNTESTED: gdb.go/strings.exp: strings.exp
+Running ./gdb.go/types.exp ...
+gdb compile failed, default_target_compile: Can't find armv7a-cros-linux-gnueabi-gccgo.
+UNTESTED: gdb.go/types.exp: types.exp
+Running ./gdb.go/unsafe.exp ...
+gdb compile failed, default_target_compile: Can't find armv7a-cros-linux-gnueabi-gccgo.
+UNTESTED: gdb.go/unsafe.exp: unsafe.exp
+Running ./gdb.java/jmain.exp ...
+UNSUPPORTED: gdb.java/jmain.exp: compilation jmain.java
+Running ./gdb.java/jmisc.exp ...
+UNSUPPORTED: gdb.java/jmisc.exp: compilation jmisc.java
+Running ./gdb.java/jnpe.exp ...
+UNSUPPORTED: gdb.java/jnpe.exp: compilation jnpe.java
+UNTESTED: gdb.java/jnpe.exp: Couldn't compile ./gdb.java/jnpe.java
+Running ./gdb.java/jprint.exp ...
+UNSUPPORTED: gdb.java/jprint.exp: compilation jprint.java
+Running ./gdb.java/jv-exp.exp ...
+PASS: gdb.java/jv-exp.exp: set print sevenbit-strings
+PASS: gdb.java/jv-exp.exp: set width 0
+PASS: gdb.java/jv-exp.exp: set language java
+PASS: gdb.java/jv-exp.exp: set language to "java"
+PASS: gdb.java/jv-exp.exp: p 1 > 2
+PASS: gdb.java/jv-exp.exp: p 1 < 2
+Running ./gdb.java/jv-print.exp ...
+PASS: gdb.java/jv-print.exp: print $pc
+PASS: gdb.java/jv-print.exp: set print sevenbit-strings
+PASS: gdb.java/jv-print.exp: set width 0
+PASS: gdb.java/jv-print.exp: set language java
+PASS: gdb.java/jv-print.exp: set language to "java"
+PASS: gdb.java/jv-print.exp: p 123
+PASS: gdb.java/jv-print.exp: p -123
+PASS: gdb.java/jv-print.exp: p/d 123
+PASS: gdb.java/jv-print.exp: p 0123
+PASS: gdb.java/jv-print.exp: p 00123
+PASS: gdb.java/jv-print.exp: p -0123
+PASS: gdb.java/jv-print.exp: p/o 0123
+PASS: gdb.java/jv-print.exp: p 0x123
+PASS: gdb.java/jv-print.exp: p -0x123
+PASS: gdb.java/jv-print.exp: p 0x0123
+PASS: gdb.java/jv-print.exp: p -0x0123
+PASS: gdb.java/jv-print.exp: p 0xABCDEF
+PASS: gdb.java/jv-print.exp: p 0xabcdef
+PASS: gdb.java/jv-print.exp: p 0xAbCdEf
+PASS: gdb.java/jv-print.exp: p/x 0x123
+PASS: gdb.java/jv-print.exp: p 'a'
+PASS: gdb.java/jv-print.exp: p/c 'a'
+PASS: gdb.java/jv-print.exp: p/c 70
+PASS: gdb.java/jv-print.exp: p/x 'a'
+PASS: gdb.java/jv-print.exp: p/d 'a'
+PASS: gdb.java/jv-print.exp: p/t 'a'
+PASS: gdb.java/jv-print.exp: p/x '\377'
+PASS: gdb.java/jv-print.exp: p '\''
+PASS: gdb.java/jv-print.exp: p '\\'
+PASS: gdb.java/jv-print.exp: reject p 0x
+PASS: gdb.java/jv-print.exp: p ''
+PASS: gdb.java/jv-print.exp: p '''
+PASS: gdb.java/jv-print.exp: reject p '\'
+PASS: gdb.java/jv-print.exp: reject p '\\\'
+PASS: gdb.java/jv-print.exp: reject p DEADBEEF
+PASS: gdb.java/jv-print.exp: reject p 123DEADBEEF
+PASS: gdb.java/jv-print.exp: reject p 123foobar.bazfoo3
+PASS: gdb.java/jv-print.exp: reject p 123EEEEEEEEEEEEEEEEE33333k333
+PASS: gdb.java/jv-print.exp: check for floating addition
+PASS: gdb.java/jv-print.exp: reject p 09
+PASS: gdb.java/jv-print.exp: reject p 079
+PASS: gdb.java/jv-print.exp: reject p 0xG
+PASS: gdb.java/jv-print.exp: reject p 0xAG
+PASS: gdb.java/jv-print.exp: check fp + text
+PASS: gdb.java/jv-print.exp: p 1.
+PASS: gdb.java/jv-print.exp: p 1.5
+PASS: gdb.java/jv-print.exp: p 1.f
+PASS: gdb.java/jv-print.exp: p 1.5f
+PASS: gdb.java/jv-print.exp: p 1.d
+PASS: gdb.java/jv-print.exp: p 1.5d
+PASS: gdb.java/jv-print.exp: p 0x1.1
+PASS: gdb.java/jv-print.exp: reject p 1.1x
+PASS: gdb.java/jv-print.exp: reject p 1.1ff
+PASS: gdb.java/jv-print.exp: reject p 1.1dd
+Running ./gdb.linespec/break-ask.exp ...
+PASS: gdb.linespec/break-ask.exp: set multiple-symbols ask
+PASS: gdb.linespec/break-ask.exp: set filename-display absolute
+PASS: gdb.linespec/break-ask.exp: break twodup absolute
+PASS: gdb.linespec/break-ask.exp: 0
+PASS: gdb.linespec/break-ask.exp: set filename-display relative
+PASS: gdb.linespec/break-ask.exp: break twodup relative
+PASS: gdb.linespec/break-ask.exp: 2
+PASS: gdb.linespec/break-ask.exp: expect breakpoint
+PASS: gdb.linespec/break-ask.exp: info source
+PASS: gdb.linespec/break-ask.exp: continue to breakpoint: body_elsewhere
+PASS: gdb.linespec/break-ask.exp: break twodup relative other
+PASS: gdb.linespec/break-ask.exp: 3
+PASS: gdb.linespec/break-ask.exp: expect breakpoint other
+PASS: gdb.linespec/break-ask.exp: info source other
+PASS: gdb.linespec/break-ask.exp: continue to breakpoint: body_elsewhere other
+Running ./gdb.linespec/linespec.exp ...
+PASS: gdb.linespec/linespec.exp: set multiple-symbols to all for linespec tests
+PASS: gdb.linespec/linespec.exp: single-location break using dir/file:line
+PASS: gdb.linespec/linespec.exp: clear breakpoint using dir/file:line
+PASS: gdb.linespec/linespec.exp: multi-location break using file:line
+PASS: gdb.linespec/linespec.exp: multi-location break using duplicate function name
+PASS: gdb.linespec/linespec.exp: multi-location break using duplicate function name and label
+PASS: gdb.linespec/linespec.exp: complete condition
+PASS: gdb.linespec/linespec.exp: disable pending breakpoints for linespec tests
+PASS: gdb.linespec/linespec.exp: set breakpoint on non-existent function
+PASS: gdb.linespec/linespec.exp: set breakpoint at all instances of NameSpace::overload
+PASS: gdb.linespec/linespec.exp: set breakpoint at lspec.cc instance of NameSpace::overload
+PASS: gdb.linespec/linespec.exp: set breakpoint at non-existent lspec.cc instance of NameSpace::overload
+PASS: gdb.linespec/linespec.exp: set breakpoint at specific instance of NameSpace::overload
+PASS: gdb.linespec/linespec.exp: set breakpoint in body.h
+PASS: gdb.linespec/linespec.exp: set breakpoint in f1
+PASS: gdb.linespec/linespec.exp: add inferior for linespec tests
+PASS: gdb.linespec/linespec.exp: switch to inferior 2 for linespec tests
+PASS: gdb.linespec/linespec.exp: set the new inferior file for linespec tests
+PASS: gdb.linespec/linespec.exp: set breakpoint at main in both inferiors
+Running ./gdb.linespec/ls-dollar.exp ...
+PASS: gdb.linespec/ls-dollar.exp: set listsize 1
+PASS: gdb.linespec/ls-dollar.exp: list $dollar_var
+PASS: gdb.linespec/ls-dollar.exp: break $dollar_func
+Running ./gdb.linespec/ls-errs.exp ...
+PASS: gdb.linespec/ls-errs.exp: set breakpoint pending off
+PASS: gdb.linespec/ls-errs.exp: break :
+PASS: gdb.linespec/ls-errs.exp: break :
+PASS: gdb.linespec/ls-errs.exp: break :
+PASS: gdb.linespec/ls-errs.exp: break :
+PASS: gdb.linespec/ls-errs.exp: break :
+PASS: gdb.linespec/ls-errs.exp: break :
+PASS: gdb.linespec/ls-errs.exp: break :
+PASS: gdb.linespec/ls-errs.exp: break :
+PASS: gdb.linespec/ls-errs.exp: break :
+PASS: gdb.linespec/ls-errs.exp: break -100
+PASS: gdb.linespec/ls-errs.exp: break +500
+PASS: gdb.linespec/ls-errs.exp: break 1000
+PASS: gdb.linespec/ls-errs.exp: break 3:
+PASS: gdb.linespec/ls-errs.exp: break +10:
+PASS: gdb.linespec/ls-errs.exp: break -10:
+PASS: gdb.linespec/ls-errs.exp: break 3:
+PASS: gdb.linespec/ls-errs.exp: break +10:
+PASS: gdb.linespec/ls-errs.exp: break -10:
+PASS: gdb.linespec/ls-errs.exp: break 3 :
+PASS: gdb.linespec/ls-errs.exp: break +10 :
+PASS: gdb.linespec/ls-errs.exp: break -10 :
+PASS: gdb.linespec/ls-errs.exp: break 3 :
+PASS: gdb.linespec/ls-errs.exp: break +10 :
+PASS: gdb.linespec/ls-errs.exp: break -10 :
+PASS: gdb.linespec/ls-errs.exp: break 3 :
+PASS: gdb.linespec/ls-errs.exp: break +10 :
+PASS: gdb.linespec/ls-errs.exp: break -10 :
+PASS: gdb.linespec/ls-errs.exp: break 3 :
+PASS: gdb.linespec/ls-errs.exp: break +10 :
+PASS: gdb.linespec/ls-errs.exp: break -10 :
+PASS: gdb.linespec/ls-errs.exp: break 3 :
+PASS: gdb.linespec/ls-errs.exp: break +10 :
+PASS: gdb.linespec/ls-errs.exp: break -10 :
+PASS: gdb.linespec/ls-errs.exp: break 3 :
+PASS: gdb.linespec/ls-errs.exp: break +10 :
+PASS: gdb.linespec/ls-errs.exp: break -10 :
+PASS: gdb.linespec/ls-errs.exp: break 3 :
+PASS: gdb.linespec/ls-errs.exp: break +10 :
+PASS: gdb.linespec/ls-errs.exp: break -10 :
+PASS: gdb.linespec/ls-errs.exp: break 3 1
+PASS: gdb.linespec/ls-errs.exp: break +10 1
+PASS: gdb.linespec/ls-errs.exp: break -10 1
+PASS: gdb.linespec/ls-errs.exp: break 3 +1
+PASS: gdb.linespec/ls-errs.exp: break +10 +1
+PASS: gdb.linespec/ls-errs.exp: break -10 +1
+PASS: gdb.linespec/ls-errs.exp: break 3 +100
+PASS: gdb.linespec/ls-errs.exp: break +10 +100
+PASS: gdb.linespec/ls-errs.exp: break -10 +100
+PASS: gdb.linespec/ls-errs.exp: break 3 -10
+PASS: gdb.linespec/ls-errs.exp: break +10 -10
+PASS: gdb.linespec/ls-errs.exp: break -10 -10
+PASS: gdb.linespec/ls-errs.exp: break 3 foo
+PASS: gdb.linespec/ls-errs.exp: break +10 foo
+PASS: gdb.linespec/ls-errs.exp: break -10 foo
+PASS: gdb.linespec/ls-errs.exp: break this_file_doesn't_exist.c:3
+PASS: gdb.linespec/ls-errs.exp: break this file has spaces.c:3
+PASS: gdb.linespec/ls-errs.exp: break "file::colons.c":3
+PASS: gdb.linespec/ls-errs.exp: break 'file::colons.c':3
+PASS: gdb.linespec/ls-errs.exp: break "this "file" has quotes.c":3
+PASS: gdb.linespec/ls-errs.exp: break 'this "file" has quotes.c':3
+PASS: gdb.linespec/ls-errs.exp: break 'this 'file' has quotes.c':3
+PASS: gdb.linespec/ls-errs.exp: break "this 'file' has quotes.c":3
+PASS: gdb.linespec/ls-errs.exp: break "spaces: and :colons.c":3
+PASS: gdb.linespec/ls-errs.exp: break 'more: :spaces: :and colons::.c':3
+PASS: gdb.linespec/ls-errs.exp: break "src-file.c':3
+PASS: gdb.linespec/ls-errs.exp: break 'src-file.c:3
+PASS: gdb.linespec/ls-errs.exp: break ls-errs.c
+PASS: gdb.linespec/ls-errs.exp: break ls-errs.c:foo
+PASS: gdb.linespec/ls-errs.exp: break ls-errs.c:main:foo
+PASS: gdb.linespec/ls-errs.exp: break ls-errs.c: foo
+PASS: gdb.linespec/ls-errs.exp: break ls-errs.c:main: foo
+PASS: gdb.linespec/ls-errs.exp: break ls-errs.c: foo
+PASS: gdb.linespec/ls-errs.exp: break ls-errs.c:main: foo
+PASS: gdb.linespec/ls-errs.exp: break ls-errs.c:
+PASS: gdb.linespec/ls-errs.exp: break ls-errs.c:main:
+PASS: gdb.linespec/ls-errs.exp: break ls-errs.c:
+PASS: gdb.linespec/ls-errs.exp: break ls-errs.c:main:
+PASS: gdb.linespec/ls-errs.exp: break ls-errs.c :
+PASS: gdb.linespec/ls-errs.exp: break ls-errs.c:main :
+PASS: gdb.linespec/ls-errs.exp: break ls-errs.c :
+PASS: gdb.linespec/ls-errs.exp: break ls-errs.c:main :
+PASS: gdb.linespec/ls-errs.exp: break ls-errs.c :
+PASS: gdb.linespec/ls-errs.exp: break ls-errs.c:main :
+PASS: gdb.linespec/ls-errs.exp: break ls-errs.c :
+PASS: gdb.linespec/ls-errs.exp: break ls-errs.c:main :
+PASS: gdb.linespec/ls-errs.exp: break ls-errs.c :
+PASS: gdb.linespec/ls-errs.exp: break ls-errs.c:main :
+PASS: gdb.linespec/ls-errs.exp: break ls-errs.c :
+PASS: gdb.linespec/ls-errs.exp: break ls-errs.c:main :
+PASS: gdb.linespec/ls-errs.exp: break ls-errs.c :
+PASS: gdb.linespec/ls-errs.exp: break ls-errs.c:main :
+PASS: gdb.linespec/ls-errs.exp: break ls-errs.c::
+PASS: gdb.linespec/ls-errs.exp: break ls-errs.c:3 1
+PASS: gdb.linespec/ls-errs.exp: break ls-errs.c:3 +100
+PASS: gdb.linespec/ls-errs.exp: break ls-errs.c:3 -100
+PASS: gdb.linespec/ls-errs.exp: break ls-errs.c:3 foo
+PASS: gdb.linespec/ls-errs.exp: break ls-errs.c:-100
+PASS: gdb.linespec/ls-errs.exp: break "ls-errs.c:-100"
+PASS: gdb.linespec/ls-errs.exp: break 'ls-errs.c:-100'
+PASS: gdb.linespec/ls-errs.exp: break ls-errs.c:+500
+PASS: gdb.linespec/ls-errs.exp: break "ls-errs.c:+500"
+PASS: gdb.linespec/ls-errs.exp: break 'ls-errs.c:+500'
+PASS: gdb.linespec/ls-errs.exp: break ls-errs.c:1000
+PASS: gdb.linespec/ls-errs.exp: break "ls-errs.c:1000"
+PASS: gdb.linespec/ls-errs.exp: break 'ls-errs.c:1000'
+PASS: gdb.linespec/ls-errs.exp: break foobar
+PASS: gdb.linespec/ls-errs.exp: break foo::bar
+PASS: gdb.linespec/ls-errs.exp: break foo.bar
+PASS: gdb.linespec/ls-errs.exp: break foo .
+PASS: gdb.linespec/ls-errs.exp: break foo bar
+PASS: gdb.linespec/ls-errs.exp: break foo 1
+PASS: gdb.linespec/ls-errs.exp: break foo 0
+PASS: gdb.linespec/ls-errs.exp: break foo +10
+PASS: gdb.linespec/ls-errs.exp: break foo -10
+PASS: gdb.linespec/ls-errs.exp: break foo +100
+PASS: gdb.linespec/ls-errs.exp: break foo -100
+PASS: gdb.linespec/ls-errs.exp: break main:there
+PASS: gdb.linespec/ls-errs.exp: break main:here:
+PASS: gdb.linespec/ls-errs.exp: break main: there
+PASS: gdb.linespec/ls-errs.exp: break main:here:
+PASS: gdb.linespec/ls-errs.exp: break main :there
+PASS: gdb.linespec/ls-errs.exp: break main:here :
+PASS: gdb.linespec/ls-errs.exp: break main : there
+PASS: gdb.linespec/ls-errs.exp: break main:here :
+PASS: gdb.linespec/ls-errs.exp: break main : there
+PASS: gdb.linespec/ls-errs.exp: break main:here :
+PASS: gdb.linespec/ls-errs.exp: break main : there
+PASS: gdb.linespec/ls-errs.exp: break main:here :
+PASS: gdb.linespec/ls-errs.exp: break main : there
+PASS: gdb.linespec/ls-errs.exp: break main:here :
+PASS: gdb.linespec/ls-errs.exp: break main : there
+PASS: gdb.linespec/ls-errs.exp: break main:here :
+PASS: gdb.linespec/ls-errs.exp: break main : there
+PASS: gdb.linespec/ls-errs.exp: break main:here :
+PASS: gdb.linespec/ls-errs.exp: break main 3
+PASS: gdb.linespec/ls-errs.exp: break main +100
+PASS: gdb.linespec/ls-errs.exp: break main -100
+PASS: gdb.linespec/ls-errs.exp: break main foo
+PASS: gdb.linespec/ls-errs.exp: break main:here 3
+PASS: gdb.linespec/ls-errs.exp: break main:here +100
+PASS: gdb.linespec/ls-errs.exp: break main:here -100
+PASS: gdb.linespec/ls-errs.exp: break main:here foo
+PASS: gdb.linespec/ls-errs.exp: break if
+PASS: gdb.linespec/ls-errs.exp: break task
+PASS: gdb.linespec/ls-errs.exp: break thread
+PASS: gdb.linespec/ls-errs.exp: break 'main.c'flubber
+PASS: gdb.linespec/ls-errs.exp: break 'main.c',21
+PASS: gdb.linespec/ls-errs.exp: break 'main.c'
+PASS: gdb.linespec/ls-errs.exp: break 'main.c'3
+PASS: gdb.linespec/ls-errs.exp: break 'main.c'+3
+PASS: gdb.linespec/ls-errs.exp: break $zippo
+PASS: gdb.linespec/ls-errs.exp: break ls-errs.c:$zippo
+Running ./gdb.linespec/macro-relative.exp ...
+FAIL: gdb.linespec/macro-relative.exp: info macro HEADER
+Running ./gdb.linespec/skip-two.exp ...
+PASS: gdb.linespec/skip-two.exp: skip function dupname
+PASS: gdb.linespec/skip-two.exp: dupname ignored from main
+PASS: gdb.linespec/skip-two.exp: continue to breakpoint: n
+PASS: gdb.linespec/skip-two.exp: dupname ignored from n
+PASS: gdb.linespec/skip-two.exp: skip delete 1
+PASS: gdb.linespec/skip-two.exp: skip file thefile.cc
+PASS: gdb.linespec/skip-two.exp: step into dupname
+PASS: gdb.linespec/skip-two.exp: finish from dupname
+PASS: gdb.linespec/skip-two.exp: dupname ignored for thefile.cc
+Running ./gdb.linespec/thread.exp ...
+PASS: gdb.linespec/thread.exp: breakpoint line number in file
+PASS: gdb.linespec/thread.exp: continue to breakpoint: 29
+PASS: gdb.linespec/thread.exp: setting breakpoint at thread
+PASS: gdb.linespec/thread.exp: continue to breakpoint: thread function
+Running ./gdb.mi/dw2-ref-missing-frame.exp ...
+PASS: gdb.mi/dw2-ref-missing-frame.exp: breakpoint at func_nofb_marker
+PASS: gdb.mi/dw2-ref-missing-frame.exp: mi runto func_nofb_marker
+PASS: gdb.mi/dw2-ref-missing-frame.exp: test func_nofb_marker
+PASS: gdb.mi/dw2-ref-missing-frame.exp: breakpoint at func_loopfb_marker
+PASS: gdb.mi/dw2-ref-missing-frame.exp: mi runto func_loopfb_marker
+PASS: gdb.mi/dw2-ref-missing-frame.exp: test func_loopfb_var
+Running ./gdb.mi/gdb2549.exp ...
+PASS: gdb.mi/gdb2549.exp: wrong arguments
+PASS: gdb.mi/gdb2549.exp: no executable
+PASS: gdb.mi/gdb2549.exp: breakpoint at main
+PASS: gdb.mi/gdb2549.exp: mi runto main
+PASS: gdb.mi/gdb2549.exp: register values x
+PASS: gdb.mi/gdb2549.exp: register values f
+PASS: gdb.mi/gdb2549.exp: register values d
+PASS: gdb.mi/gdb2549.exp: register values o
+PASS: gdb.mi/gdb2549.exp: register values t
+Running ./gdb.mi/gdb669.exp ...
+PASS: gdb.mi/gdb669.exp: successfully compiled posix threads test case
+PASS: gdb.mi/gdb669.exp: breakpoint at main
+PASS: gdb.mi/gdb669.exp: mi runto main
+PASS: gdb.mi/gdb669.exp: -thread-list-ids (at main)
+PASS: gdb.mi/gdb669.exp: info threads (at main)
+PASS: gdb.mi/gdb669.exp: finding MI result string (at main)
+PASS: gdb.mi/gdb669.exp: finding number of threads in MI output (at main)
+PASS: gdb.mi/gdb669.exp: got number of threads from MI (at main)
+PASS: gdb.mi/gdb669.exp: console and MI have same number of threads (at main)
+PASS: gdb.mi/gdb669.exp: -thread_list_ids (at main)
+PASS: gdb.mi/gdb669.exp: finding threads in MI output (at main)
+PASS: gdb.mi/gdb669.exp: MI and console have same threads (at main)
+PASS: gdb.mi/gdb669.exp: next, try 0
+PASS: gdb.mi/gdb669.exp: -thread-list-ids (try 0)
+PASS: gdb.mi/gdb669.exp: info threads (try 0)
+PASS: gdb.mi/gdb669.exp: finding MI result string (try 0)
+PASS: gdb.mi/gdb669.exp: finding number of threads in MI output (try 0)
+PASS: gdb.mi/gdb669.exp: got number of threads from MI (try 0)
+PASS: gdb.mi/gdb669.exp: console and MI have same number of threads (try 0)
+PASS: gdb.mi/gdb669.exp: -thread_list_ids (try 0)
+PASS: gdb.mi/gdb669.exp: finding threads in MI output (try 0)
+PASS: gdb.mi/gdb669.exp: MI and console have same threads (try 0)
+PASS: gdb.mi/gdb669.exp: next, try 1
+PASS: gdb.mi/gdb669.exp: -thread-list-ids (try 1)
+PASS: gdb.mi/gdb669.exp: info threads (try 1)
+PASS: gdb.mi/gdb669.exp: finding MI result string (try 1)
+PASS: gdb.mi/gdb669.exp: finding number of threads in MI output (try 1)
+PASS: gdb.mi/gdb669.exp: got number of threads from MI (try 1)
+PASS: gdb.mi/gdb669.exp: console and MI have same number of threads (try 1)
+PASS: gdb.mi/gdb669.exp: -thread_list_ids (try 1)
+PASS: gdb.mi/gdb669.exp: finding threads in MI output (try 1)
+PASS: gdb.mi/gdb669.exp: MI and console have same threads (try 1)
+PASS: gdb.mi/gdb669.exp: next, try 2
+PASS: gdb.mi/gdb669.exp: -thread-list-ids (try 2)
+PASS: gdb.mi/gdb669.exp: info threads (try 2)
+PASS: gdb.mi/gdb669.exp: finding MI result string (try 2)
+PASS: gdb.mi/gdb669.exp: finding number of threads in MI output (try 2)
+PASS: gdb.mi/gdb669.exp: got number of threads from MI (try 2)
+PASS: gdb.mi/gdb669.exp: console and MI have same number of threads (try 2)
+PASS: gdb.mi/gdb669.exp: -thread_list_ids (try 2)
+PASS: gdb.mi/gdb669.exp: finding threads in MI output (try 2)
+PASS: gdb.mi/gdb669.exp: MI and console have same threads (try 2)
+PASS: gdb.mi/gdb669.exp: next, try 3
+PASS: gdb.mi/gdb669.exp: -thread-list-ids (try 3)
+PASS: gdb.mi/gdb669.exp: info threads (try 3)
+PASS: gdb.mi/gdb669.exp: finding MI result string (try 3)
+PASS: gdb.mi/gdb669.exp: finding number of threads in MI output (try 3)
+PASS: gdb.mi/gdb669.exp: got number of threads from MI (try 3)
+PASS: gdb.mi/gdb669.exp: console and MI have same number of threads (try 3)
+PASS: gdb.mi/gdb669.exp: -thread_list_ids (try 3)
+PASS: gdb.mi/gdb669.exp: finding threads in MI output (try 3)
+PASS: gdb.mi/gdb669.exp: MI and console have same threads (try 3)
+Running ./gdb.mi/gdb680.exp ...
+PASS: gdb.mi/gdb680.exp: -data-list-register-names -1, try 0
+PASS: gdb.mi/gdb680.exp: -data-list-register-names -1, try 1
+PASS: gdb.mi/gdb680.exp: -data-list-register-names -1, try 2
+PASS: gdb.mi/gdb680.exp: -data-list-register-names -1, try 3
+PASS: gdb.mi/gdb680.exp: -data-list-register-names -1, try 4
+Running ./gdb.mi/gdb701.exp ...
+PASS: gdb.mi/gdb701.exp: breakpoint at main
+PASS: gdb.mi/gdb701.exp: mi runto main
+PASS: gdb.mi/gdb701.exp: step over "foo = 0"
+PASS: gdb.mi/gdb701.exp: create fooPtr
+PASS: gdb.mi/gdb701.exp: list children of fooPtr
+PASS: gdb.mi/gdb701.exp: list children of fooPtr.x
+PASS: gdb.mi/gdb701.exp: list children of fooPtr.y
+PASS: gdb.mi/gdb701.exp: list children of fooPtr.z
+Running ./gdb.mi/gdb792.exp ...
+PASS: gdb.mi/gdb792.exp: breakpoint at main
+PASS: gdb.mi/gdb792.exp: mi runto main
+PASS: gdb.mi/gdb792.exp: create var for class A
+PASS: gdb.mi/gdb792.exp: list children of class A
+PASS: gdb.mi/gdb792.exp: list children of A.public
+PASS: gdb.mi/gdb792.exp: list children of A.private
+PASS: gdb.mi/gdb792.exp: list children of A.protected
+PASS: gdb.mi/gdb792.exp: list children of A.protected.b
+PASS: gdb.mi/gdb792.exp: list children of A.protected.b.public
+PASS: gdb.mi/gdb792.exp: list children of A.protected.b.private
+PASS: gdb.mi/gdb792.exp: create var for class C which has baseclass A
+PASS: gdb.mi/gdb792.exp: list children of class C
+Running ./gdb.mi/mi2-amd64-entry-value.exp ...
+Running ./gdb.mi/mi2-prompt.exp ...
+PASS: gdb.mi/mi2-prompt.exp: console set prompt
+PASS: gdb.mi/mi2-prompt.exp: -break-list
+PASS: gdb.mi/mi2-prompt.exp: set prompt (banana)
+PASS: gdb.mi/mi2-prompt.exp: interpreter-exec mi -break-list
+Running ./gdb.mi/mi2-var-child.exp ...
+PASS: gdb.mi/mi2-var-child.exp: breakpoint at do_children_tests
+PASS: gdb.mi/mi2-var-child.exp: mi runto do_children_tests
+PASS: gdb.mi/mi2-var-child.exp: run to 237 (set breakpoint)
+PASS: gdb.mi/mi2-var-child.exp: create local variable struct_declarations
+PASS: gdb.mi/mi2-var-child.exp: get children of struct_declarations
+PASS: gdb.mi/mi2-var-child.exp: get number of children of struct_declarations
+PASS: gdb.mi/mi2-var-child.exp: get children of struct_declarations.integer
+PASS: gdb.mi/mi2-var-child.exp: get number of children of struct_declarations.integer
+PASS: gdb.mi/mi2-var-child.exp: get children of struct_declarations.character
+PASS: gdb.mi/mi2-var-child.exp: get number of children of struct_declarations.character
+PASS: gdb.mi/mi2-var-child.exp: get children of struct_declarations.char_ptr
+PASS: gdb.mi/mi2-var-child.exp: get number of children of struct_declarations.char_ptr
+PASS: gdb.mi/mi2-var-child.exp: get children of struct_declarations.long_int
+PASS: gdb.mi/mi2-var-child.exp: get number of children of struct_declarations.long_int
+PASS: gdb.mi/mi2-var-child.exp: get children of struct_declarations.int_ptr_ptr
+PASS: gdb.mi/mi2-var-child.exp: get number of children of struct_declarations.int_ptr_ptr
+PASS: gdb.mi/mi2-var-child.exp: get children of struct_declarations.long_array
+PASS: gdb.mi/mi2-var-child.exp: get number of children of struct_declarations.long_array
+PASS: gdb.mi/mi2-var-child.exp: get children of struct_declarations.func_ptr
+PASS: gdb.mi/mi2-var-child.exp: get number of children of struct_declarations.func_ptr
+PASS: gdb.mi/mi2-var-child.exp: get children of struct_declarations.func_ptr_struct
+PASS: gdb.mi/mi2-var-child.exp: get number of children of struct_declarations.func_ptr_struct
+PASS: gdb.mi/mi2-var-child.exp: get children of struct_declarations.func_ptr_ptr
+PASS: gdb.mi/mi2-var-child.exp: get number of children of struct_declarations.func_ptr_ptr
+PASS: gdb.mi/mi2-var-child.exp: get children of struct_declarations.u1
+PASS: gdb.mi/mi2-var-child.exp: get number of children of struct_declarations.u1
+PASS: gdb.mi/mi2-var-child.exp: get children of struct_declarations.s2
+PASS: gdb.mi/mi2-var-child.exp: get number of children of struct_declarations.s2
+PASS: gdb.mi/mi2-var-child.exp: get children of struct_declarations.long_array.1
+PASS: gdb.mi/mi2-var-child.exp: get number of children of struct_declarations.long_array.1
+PASS: gdb.mi/mi2-var-child.exp: get children of struct_declarations.long_array.2
+PASS: gdb.mi/mi2-var-child.exp: get number of children of struct_declarations.long_array.2
+PASS: gdb.mi/mi2-var-child.exp: get children of struct_declarations.long_array.3
+PASS: gdb.mi/mi2-var-child.exp: get number of children of struct_declarations.long_array.3
+PASS: gdb.mi/mi2-var-child.exp: get children of struct_declarations.long_array.4
+PASS: gdb.mi/mi2-var-child.exp: get number of children of struct_declarations.long_array.4
+PASS: gdb.mi/mi2-var-child.exp: get children of struct_declarations.long_array.5
+PASS: gdb.mi/mi2-var-child.exp: get number of children of struct_declarations.long_array.5
+PASS: gdb.mi/mi2-var-child.exp: get children of struct_declarations.long_array.6
+PASS: gdb.mi/mi2-var-child.exp: get number of children of struct_declarations.long_array.6
+PASS: gdb.mi/mi2-var-child.exp: get children of struct_declarations.long_array.7
+PASS: gdb.mi/mi2-var-child.exp: get number of children of struct_declarations.long_array.7
+PASS: gdb.mi/mi2-var-child.exp: get children of struct_declarations.long_array.8
+PASS: gdb.mi/mi2-var-child.exp: get number of children of struct_declarations.long_array.8
+PASS: gdb.mi/mi2-var-child.exp: get children of struct_declarations.long_array.9
+PASS: gdb.mi/mi2-var-child.exp: get number of children of struct_declarations.long_array.9
+PASS: gdb.mi/mi2-var-child.exp: get children of struct_declarations.u1.a
+PASS: gdb.mi/mi2-var-child.exp: get number of children of struct_declarations.u1.a
+PASS: gdb.mi/mi2-var-child.exp: get children of struct_declarations.u1.b
+PASS: gdb.mi/mi2-var-child.exp: get number of children of struct_declarations.u1.b
+PASS: gdb.mi/mi2-var-child.exp: get children of struct_declarations.u1.c
+PASS: gdb.mi/mi2-var-child.exp: get number of children of struct_declarations.u1.c
+PASS: gdb.mi/mi2-var-child.exp: get children of struct_declarations.u1.d
+PASS: gdb.mi/mi2-var-child.exp: get number of children of struct_declarations.u1.d
+PASS: gdb.mi/mi2-var-child.exp: get children of struct_declarations.s2.u2
+PASS: gdb.mi/mi2-var-child.exp: get number of children of struct_declarations.s2.u2
+PASS: gdb.mi/mi2-var-child.exp: get children of struct_declarations.s2.g
+PASS: gdb.mi/mi2-var-child.exp: get number of children of struct_declarations.s2.g
+PASS: gdb.mi/mi2-var-child.exp: get children of struct_declarations.s2.h
+PASS: gdb.mi/mi2-var-child.exp: get number of children of struct_declarations.s2.h
+PASS: gdb.mi/mi2-var-child.exp: get children of struct_declarations.s2.i
+PASS: gdb.mi/mi2-var-child.exp: get number of children of struct_declarations.s2.i
+PASS: gdb.mi/mi2-var-child.exp: get children of struct_declarations.s2.u2.u1s1
+PASS: gdb.mi/mi2-var-child.exp: get number of children of struct_declarations.s2.u2.u1s1
+PASS: gdb.mi/mi2-var-child.exp: get children of struct_declarations.s2.u2.f
+PASS: gdb.mi/mi2-var-child.exp: get number of children of struct_declarations.s2.u2.f
+PASS: gdb.mi/mi2-var-child.exp: get children of struct_declarations.s2.u2.u1s2
+PASS: gdb.mi/mi2-var-child.exp: get number of children of struct_declarations.s2.u2.u1s2
+PASS: gdb.mi/mi2-var-child.exp: get children of struct_declarations.s2.u2.u1s1.d
+PASS: gdb.mi/mi2-var-child.exp: get number of children of struct_declarations.s2.u2.u1s1.d
+PASS: gdb.mi/mi2-var-child.exp: get children of struct_declarations.s2.u2.u1s1.e
+PASS: gdb.mi/mi2-var-child.exp: get number of children of struct_declarations.s2.u2.u1s1.e
+PASS: gdb.mi/mi2-var-child.exp: get children of struct_declarations.s2.u2.u1s1.func
+PASS: gdb.mi/mi2-var-child.exp: get number of children of struct_declarations.s2.u2.u1s1.func
+PASS: gdb.mi/mi2-var-child.exp: get children of struct_declarations.s2.u2.u1s1.foo
+PASS: gdb.mi/mi2-var-child.exp: get number of children of struct_declarations.s2.u2.u1s1.foo
+PASS: gdb.mi/mi2-var-child.exp: get children of struct_declarations.s2.u2.u1s2.array_ptr
+PASS: gdb.mi/mi2-var-child.exp: get number of children of struct_declarations.s2.u2.u1s2.array_ptr
+PASS: gdb.mi/mi2-var-child.exp: get children of struct_declarations.s2.u2.u1s2.func
+PASS: gdb.mi/mi2-var-child.exp: get number of children of struct_declarations.s2.u2.u1s2.func
+PASS: gdb.mi/mi2-var-child.exp: get children of struct_declarations.int_ptr_ptr.*int_ptr_ptr
+PASS: gdb.mi/mi2-var-child.exp: get number of children of struct_declarations.int_ptr_ptr.*int_ptr_ptr
+PASS: gdb.mi/mi2-var-child.exp: step to line $line_dct_123
+PASS: gdb.mi/mi2-var-child.exp: create local variable weird
+PASS: gdb.mi/mi2-var-child.exp: get children of weird
+PASS: gdb.mi/mi2-var-child.exp: get number of children of weird
+PASS: gdb.mi/mi2-var-child.exp: get children of weird.long_array
+PASS: gdb.mi/mi2-var-child.exp: get number of children of weird.long_array
+PASS: gdb.mi/mi2-var-child.exp: get children of weird.int_ptr_ptr
+PASS: gdb.mi/mi2-var-child.exp: get number of children of weird.int_ptr_ptr
+PASS: gdb.mi/mi2-var-child.exp: get children of weird.int_ptr_ptr.*int_ptr_ptr
+PASS: gdb.mi/mi2-var-child.exp: get number of children of weird.int_ptr_ptr.*int_ptr_ptr
+PASS: gdb.mi/mi2-var-child.exp: create local variable weird->int_ptr_ptr
+PASS: gdb.mi/mi2-var-child.exp: get children of weird->int_ptr_ptr
+PASS: gdb.mi/mi2-var-child.exp: get number of children of weird->int_ptr_ptr
+PASS: gdb.mi/mi2-var-child.exp: get children of weird->int_ptr_ptr.*weird->int_ptr_ptr
+PASS: gdb.mi/mi2-var-child.exp: get number of children of weird->int_ptr_ptr.*weird->int_ptr_ptr
+PASS: gdb.mi/mi2-var-child.exp: get children of weird->int_ptr_ptr.*weird->int_ptr_ptr.**weird->int_ptr_ptr
+PASS: gdb.mi/mi2-var-child.exp: get number of children of weird->int_ptr_ptr.*weird->int_ptr_ptr.**weird->int_ptr_ptr
+PASS: gdb.mi/mi2-var-child.exp: is weird editable
+PASS: gdb.mi/mi2-var-child.exp: is weird->int_ptr_ptr editable
+PASS: gdb.mi/mi2-var-child.exp: is weird.int_ptr_ptr.*int_ptr_ptr editable
+PASS: gdb.mi/mi2-var-child.exp: is weird.int_ptr_ptr.*int_ptr_ptr.**int_ptr_ptr editable
+PASS: gdb.mi/mi2-var-child.exp: is weird.u1 editable
+PASS: gdb.mi/mi2-var-child.exp: is weird.s2 editable
+PASS: gdb.mi/mi2-var-child.exp: is struct_declarations.u1.a editable
+PASS: gdb.mi/mi2-var-child.exp: is struct_declarations.u1.b editable
+PASS: gdb.mi/mi2-var-child.exp: is struct_declarations.u1.c editable
+PASS: gdb.mi/mi2-var-child.exp: is struct_declarations.long_array editable
+PASS: gdb.mi/mi2-var-child.exp: is struct_declarations.long_array.0 editable
+PASS: gdb.mi/mi2-var-child.exp: is struct_declarations editable
+PASS: gdb.mi/mi2-var-child.exp: delete var weird
+PASS: gdb.mi/mi2-var-child.exp: update all vars. None changed
+PASS: gdb.mi/mi2-var-child.exp: step $line_dct_123 + 1
+PASS: gdb.mi/mi2-var-child.exp: update all vars struct_declarations.integer
+PASS: gdb.mi/mi2-var-child.exp: step $line_dct_123 + 4
+PASS: gdb.mi/mi2-var-child.exp: update all vars struct_declarations.char_ptr
+PASS: gdb.mi/mi2-var-child.exp: step $line_dct_123 + 5
+PASS: gdb.mi/mi2-var-child.exp: update all vars int_ptr_ptr and children changed
+PASS: gdb.mi/mi2-var-child.exp: step $line_dct_123 + 6
+PASS: gdb.mi/mi2-var-child.exp: update all vars struct_declarations.long_array.0 changed
+PASS: gdb.mi/mi2-var-child.exp: step $line_dct_123 + 7
+PASS: gdb.mi/mi2-var-child.exp: update all vars struct_declarations.long_array.1 changed
+PASS: gdb.mi/mi2-var-child.exp: step $line_dct_123 + 8
+PASS: gdb.mi/mi2-var-child.exp: update all vars struct_declarations.long_array.2 changed
+PASS: gdb.mi/mi2-var-child.exp: step $line_dct_nothing
+PASS: gdb.mi/mi2-var-child.exp: update all vars struct_declarations.long_array.3-9 changed
+PASS: gdb.mi/mi2-var-child.exp: step $line_dct_a0_0
+PASS: gdb.mi/mi2-var-child.exp: update all vars struct_declarations.func_ptr changed
+PASS: gdb.mi/mi2-var-child.exp: delete var struct_declarations
+PASS: gdb.mi/mi2-var-child.exp: delete var weird->int_ptr_ptr
+PASS: gdb.mi/mi2-var-child.exp: step $line_dct_snp0 + 1
+PASS: gdb.mi/mi2-var-child.exp: create local variable psnp->char_ptr
+PASS: gdb.mi/mi2-var-child.exp: get children of psnp->char_ptr
+PASS: gdb.mi/mi2-var-child.exp: get number of children of psnp->char_ptr
+PASS: gdb.mi/mi2-var-child.exp: get children of psnp->char_ptr.*psnp->char_ptr
+PASS: gdb.mi/mi2-var-child.exp: get number of children of psnp->char_ptr.*psnp->char_ptr
+PASS: gdb.mi/mi2-var-child.exp: get children of psnp->char_ptr.*psnp->char_ptr.**psnp->char_ptr
+PASS: gdb.mi/mi2-var-child.exp: get children of psnp->char_ptr.*psnp->char_ptr.**psnp->char_ptr.***psnp->char_ptr
+PASS: gdb.mi/mi2-var-child.exp: get number of children of psnp->char_ptr.*psnp->char_ptr.**psnp->char_ptr
+PASS: gdb.mi/mi2-var-child.exp: get children of psnp->char_ptr.*psnp->char_ptr.**psnp->char_ptr.***psnp->char_ptr
+PASS: gdb.mi/mi2-var-child.exp: get number of children of psnp->char_ptr.*psnp->char_ptr.**psnp->char_ptr.***psnp->char_ptr
+PASS: gdb.mi/mi2-var-child.exp: get children of psnp->char_ptr.*psnp->char_ptr.**psnp->char_ptr.***psnp->char_ptr.****psnp->char_ptr
+PASS: gdb.mi/mi2-var-child.exp: get number of children of psnp->char_ptr.*psnp->char_ptr.**psnp->char_ptr.***psnp->char_ptr.****psnp->char_ptr
+PASS: gdb.mi/mi2-var-child.exp: create local variable psnp->long_ptr
+PASS: gdb.mi/mi2-var-child.exp: get children of psnp->long_ptr
+PASS: gdb.mi/mi2-var-child.exp: get number of children of psnp->long_ptr
+PASS: gdb.mi/mi2-var-child.exp: get children of psnp->long_ptr.*psnp->long_ptr
+PASS: gdb.mi/mi2-var-child.exp: get number of children of psnp->long_ptr.*psnp->long_ptr
+PASS: gdb.mi/mi2-var-child.exp: get children of psnp->long_ptr.*psnp->long_ptr.**psnp->long_ptr
+PASS: gdb.mi/mi2-var-child.exp: get number of children of psnp->long_ptr.*psnp->long_ptr.**psnp->long_ptr
+PASS: gdb.mi/mi2-var-child.exp: get children of psnp->long_ptr.*psnp->long_ptr.**psnp->long_ptr.***psnp->long_ptr
+PASS: gdb.mi/mi2-var-child.exp: get number of children of psnp->long_ptr.*psnp->long_ptr.**psnp->long_ptr.***psnp->long_ptr
+PASS: gdb.mi/mi2-var-child.exp: get children of psnp->long_ptr.*psnp->long_ptr.**psnp->long_ptr.***psnp->long_ptr.****psnp->long_ptr
+PASS: gdb.mi/mi2-var-child.exp: get number of children of psnp->long_ptr.*psnp->long_ptr.**psnp->long_ptr.***psnp->long_ptr.****psnp->long_ptr
+PASS: gdb.mi/mi2-var-child.exp: create local variable psnp->ptrs
+PASS: gdb.mi/mi2-var-child.exp: get children of psnp->ptrs
+PASS: gdb.mi/mi2-var-child.exp: get number of children of psnp->ptrs
+PASS: gdb.mi/mi2-var-child.exp: get children of psnp->ptrs.0
+PASS: gdb.mi/mi2-var-child.exp: get number of children of psnp->ptrs.0
+PASS: gdb.mi/mi2-var-child.exp: get children of psnp->ptrs.0.next
+PASS: gdb.mi/mi2-var-child.exp: get number of children of psnp->ptrs.0.next
+PASS: gdb.mi/mi2-var-child.exp: get children of psnp->ptrs.0.next.char_ptr
+PASS: gdb.mi/mi2-var-child.exp: get number of children of psnp->ptrs.0.next.char_ptr
+PASS: gdb.mi/mi2-var-child.exp: get children of psnp->ptrs.0.next.char_ptr.*char_ptr
+PASS: gdb.mi/mi2-var-child.exp: get number of children of psnp->ptrs.0.next.char_ptr.*char_ptr
+PASS: gdb.mi/mi2-var-child.exp: get children of psnp->ptrs.0.next.char_ptr.*char_ptr.**char_ptr
+PASS: gdb.mi/mi2-var-child.exp: get children of psnp->ptrs.0.next.char_ptr.*char_ptr.**char_ptr
+PASS: gdb.mi/mi2-var-child.exp: get number of children of psnp->ptrs.0.next.char_ptr.*char_ptr.**char_ptr
+PASS: gdb.mi/mi2-var-child.exp: get children of psnp->ptrs.0.next.char_ptr.*char_ptr.**char_ptr.***char_ptr
+PASS: gdb.mi/mi2-var-child.exp: get number of children of psnp->ptrs.0.next.char_ptr.*char_ptr.**char_ptr.***char_ptr
+PASS: gdb.mi/mi2-var-child.exp: get children of psnp->ptrs.0.next.char_ptr.*char_ptr.**char_ptr.***char_ptr
+PASS: gdb.mi/mi2-var-child.exp: get number of children of psnp->ptrs.0.next.char_ptr.*char_ptr.**char_ptr.***char_ptr
+PASS: gdb.mi/mi2-var-child.exp: get children of psnp->ptrs.0.next.next
+PASS: gdb.mi/mi2-var-child.exp: get children of psnp->ptrs.0.next.next.ptrs
+PASS: gdb.mi/mi2-var-child.exp: step $line_dct_snp0 + 2
+PASS: gdb.mi/mi2-var-child.exp: update all vars psnp->char_ptr (and 0.char_ptr) changed
+PASS: gdb.mi/mi2-var-child.exp: step $line_dct_snp0 + 3
+PASS: gdb.mi/mi2-var-child.exp: update all vars psnp->next->char_ptr (and 1.char_ptr) changed
+PASS: gdb.mi/mi2-var-child.exp: step $line_dct_snp0 + 4
+PASS: gdb.mi/mi2-var-child.exp: update all vars psnp->next->next->char_ptr (and 2.char_ptr) changed
+PASS: gdb.mi/mi2-var-child.exp: step $line_dct_snp0 + 5
+PASS: gdb.mi/mi2-var-child.exp: update all vars psnp->long_ptr (and 0.long_ptr) changed
+PASS: gdb.mi/mi2-var-child.exp: step $line_dct_snp0 + 6
+XFAIL: gdb.mi/mi2-var-child.exp: update all vars psnp->next->long_ptr (and 1.long_ptr) changed
+PASS: gdb.mi/mi2-var-child.exp: step $line_dct_snp0 + 7
+PASS: gdb.mi/mi2-var-child.exp: update all vars psnp->next->next->long_ptr (and 2.long_ptr) changed
+PASS: gdb.mi/mi2-var-child.exp: break in do_anonymous_type_tests
+PASS: gdb.mi/mi2-var-child.exp: continue to do_anonymous_type_tests breakpoint
+PASS: gdb.mi/mi2-var-child.exp: VT: create root varobj for ptr
+PASS: gdb.mi/mi2-var-child.exp: VT: list children of ptr2
+PASS: gdb.mi/mi2-var-child.exp: path expression for ptr2
+PASS: gdb.mi/mi2-var-child.exp: expression for ptr2
+PASS: gdb.mi/mi2-var-child.exp: VT: list children of ptr2.*ptr
+PASS: gdb.mi/mi2-var-child.exp: path expression for ptr2.*ptr
+PASS: gdb.mi/mi2-var-child.exp: expression for ptr2.*ptr
+PASS: gdb.mi/mi2-var-child.exp: path expression for ptr2.*ptr.a
+PASS: gdb.mi/mi2-var-child.exp: expression for ptr2.*ptr.a
+PASS: gdb.mi/mi2-var-child.exp: VT: list children of ptr2.*ptr.1_anonymous
+PASS: gdb.mi/mi2-var-child.exp: path expression for ptr2.*ptr.1_anonymous
+PASS: gdb.mi/mi2-var-child.exp: expression for ptr2.*ptr.1_anonymous
+PASS: gdb.mi/mi2-var-child.exp: path expression for ptr2.*ptr.1_anonymous.b
+PASS: gdb.mi/mi2-var-child.exp: expression for ptr2.*ptr.1_anonymous.b
+PASS: gdb.mi/mi2-var-child.exp: VT: list children of ptr2.*ptr.1_anonymous.c
+PASS: gdb.mi/mi2-var-child.exp: path expression for ptr2.*ptr.1_anonymous.c
+PASS: gdb.mi/mi2-var-child.exp: expression for ptr2.*ptr.1_anonymous.c
+PASS: gdb.mi/mi2-var-child.exp: VT: list children of ptr2.*ptr.1_anonymous.2_anonymous
+PASS: gdb.mi/mi2-var-child.exp: path expression for ptr2.*ptr.1_anonymous.2_anonymous
+PASS: gdb.mi/mi2-var-child.exp: expression for ptr2.*ptr.1_anonymous.2_anonymous
+PASS: gdb.mi/mi2-var-child.exp: path expression for ptr2.*ptr.1_anonymous.c.*c
+PASS: gdb.mi/mi2-var-child.exp: expression for ptr2.*ptr.1_anonymous.c.*c
+PASS: gdb.mi/mi2-var-child.exp: path expression for ptr2.*ptr.1_anonymous.2_anonymous.d
+PASS: gdb.mi/mi2-var-child.exp: expression for ptr2.*ptr.1_anonymous.2_anonymous.d
+PASS: gdb.mi/mi2-var-child.exp: path expression for ptr2.*ptr.1_anonymous.2_anonymous.e
+PASS: gdb.mi/mi2-var-child.exp: expression for ptr2.*ptr.1_anonymous.2_anonymous.e
+PASS: gdb.mi/mi2-var-child.exp: path expression for ptr2.*ptr.1_anonymous.2_anonymous.f
+PASS: gdb.mi/mi2-var-child.exp: expression for ptr2.*ptr.1_anonymous.2_anonymous.f
+PASS: gdb.mi/mi2-var-child.exp: VT: list children of ptr2.*ptr.1_anonymous.2_anonymous.3_anonymous
+PASS: gdb.mi/mi2-var-child.exp: path expression for ptr2.*ptr.1_anonymous.2_anonymous.3_anonymous
+PASS: gdb.mi/mi2-var-child.exp: expression for ptr2.*ptr.1_anonymous.2_anonymous.3_anonymous
+PASS: gdb.mi/mi2-var-child.exp: path expression for ptr2.*ptr.1_anonymous.2_anonymous.3_anonymous.g
+PASS: gdb.mi/mi2-var-child.exp: expression for ptr2.*ptr.1_anonymous.2_anonymous.3_anonymous.g
+PASS: gdb.mi/mi2-var-child.exp: VT: list children of ptr2.*ptr.1_anonymous.2_anonymous.3_anonymous.h
+PASS: gdb.mi/mi2-var-child.exp: path expression for ptr2.*ptr.1_anonymous.2_anonymous.3_anonymous.h
+PASS: gdb.mi/mi2-var-child.exp: expression for ptr2.*ptr.1_anonymous.2_anonymous.3_anonymous.h
+PASS: gdb.mi/mi2-var-child.exp: VT: list children of ptr2.*ptr.1_anonymous.2_anonymous.3_anonymous.simple
+PASS: gdb.mi/mi2-var-child.exp: path expression for ptr2.*ptr.1_anonymous.2_anonymous.3_anonymous.simple
+PASS: gdb.mi/mi2-var-child.exp: expression for ptr2.*ptr.1_anonymous.2_anonymous.3_anonymous.simple
+PASS: gdb.mi/mi2-var-child.exp: VT: list children of ptr2.*ptr.1_anonymous.2_anonymous.3_anonymous.h.*h
+PASS: gdb.mi/mi2-var-child.exp: path expression for ptr2.*ptr.1_anonymous.2_anonymous.3_anonymous.h.*h
+PASS: gdb.mi/mi2-var-child.exp: expression for ptr2.*ptr.1_anonymous.2_anonymous.3_anonymous.h.*h
+PASS: gdb.mi/mi2-var-child.exp: VT: list children of ptr2.*ptr.1_anonymous.2_anonymous.3_anonymous.simple.*simple
+PASS: gdb.mi/mi2-var-child.exp: path expression for ptr2.*ptr.1_anonymous.2_anonymous.3_anonymous.simple.*simple
+PASS: gdb.mi/mi2-var-child.exp: expression for ptr2.*ptr.1_anonymous.2_anonymous.3_anonymous.simple.*simple
+PASS: gdb.mi/mi2-var-child.exp: path expression for ptr2.*ptr.1_anonymous.2_anonymous.3_anonymous.h.*h.**h
+PASS: gdb.mi/mi2-var-child.exp: expression for ptr2.*ptr.1_anonymous.2_anonymous.3_anonymous.h.*h.**h
+PASS: gdb.mi/mi2-var-child.exp: VT: list children of ptr2.*ptr.1_anonymous.2_anonymous.3_anonymous.simple.*simple.**simple
+PASS: gdb.mi/mi2-var-child.exp: path expression for ptr2.*ptr.1_anonymous.2_anonymous.3_anonymous.simple.*simple.**simple
+PASS: gdb.mi/mi2-var-child.exp: expression for ptr2.*ptr.1_anonymous.2_anonymous.3_anonymous.simple.*simple.**simple
+PASS: gdb.mi/mi2-var-child.exp: path expression for ptr2.*ptr.1_anonymous.2_anonymous.3_anonymous.simple.*simple.**simple.integer
+PASS: gdb.mi/mi2-var-child.exp: expression for ptr2.*ptr.1_anonymous.2_anonymous.3_anonymous.simple.*simple.**simple.integer
+PASS: gdb.mi/mi2-var-child.exp: path expression for ptr2.*ptr.1_anonymous.2_anonymous.3_anonymous.simple.*simple.**simple.unsigned_integer
+PASS: gdb.mi/mi2-var-child.exp: expression for ptr2.*ptr.1_anonymous.2_anonymous.3_anonymous.simple.*simple.**simple.unsigned_integer
+PASS: gdb.mi/mi2-var-child.exp: path expression for ptr2.*ptr.1_anonymous.2_anonymous.3_anonymous.simple.*simple.**simple.character
+PASS: gdb.mi/mi2-var-child.exp: expression for ptr2.*ptr.1_anonymous.2_anonymous.3_anonymous.simple.*simple.**simple.character
+PASS: gdb.mi/mi2-var-child.exp: path expression for ptr2.*ptr.1_anonymous.2_anonymous.3_anonymous.simple.*simple.**simple.signed_character
+PASS: gdb.mi/mi2-var-child.exp: expression for ptr2.*ptr.1_anonymous.2_anonymous.3_anonymous.simple.*simple.**simple.signed_character
+PASS: gdb.mi/mi2-var-child.exp: VT: list children of ptr2.*ptr.1_anonymous.2_anonymous.3_anonymous.simple.*simple.**simple.char_ptr
+PASS: gdb.mi/mi2-var-child.exp: path expression for ptr2.*ptr.1_anonymous.2_anonymous.3_anonymous.simple.*simple.**simple.char_ptr
+PASS: gdb.mi/mi2-var-child.exp: expression for ptr2.*ptr.1_anonymous.2_anonymous.3_anonymous.simple.*simple.**simple.char_ptr
+PASS: gdb.mi/mi2-var-child.exp: VT: list children of ptr2.*ptr.1_anonymous.2_anonymous.3_anonymous.simple.*simple.**simple.array_of_10
+PASS: gdb.mi/mi2-var-child.exp: path expression for ptr2.*ptr.1_anonymous.2_anonymous.3_anonymous.simple.*simple.**simple.array_of_10
+PASS: gdb.mi/mi2-var-child.exp: expression for ptr2.*ptr.1_anonymous.2_anonymous.3_anonymous.simple.*simple.**simple.array_of_10
+PASS: gdb.mi/mi2-var-child.exp: path expression for ptr2.*ptr.1_anonymous.2_anonymous.3_anonymous.simple.*simple.**simple.char_ptr.*char_ptr
+PASS: gdb.mi/mi2-var-child.exp: expression for ptr2.*ptr.1_anonymous.2_anonymous.3_anonymous.simple.*simple.**simple.char_ptr.*char_ptr
+PASS: gdb.mi/mi2-var-child.exp: path expression for ptr2.*ptr.1_anonymous.2_anonymous.3_anonymous.simple.*simple.**simple.array_of_10.0
+PASS: gdb.mi/mi2-var-child.exp: expression for ptr2.*ptr.1_anonymous.2_anonymous.3_anonymous.simple.*simple.**simple.array_of_10.0
+PASS: gdb.mi/mi2-var-child.exp: path expression for ptr2.*ptr.1_anonymous.2_anonymous.3_anonymous.simple.*simple.**simple.array_of_10.1
+PASS: gdb.mi/mi2-var-child.exp: expression for ptr2.*ptr.1_anonymous.2_anonymous.3_anonymous.simple.*simple.**simple.array_of_10.1
+PASS: gdb.mi/mi2-var-child.exp: path expression for ptr2.*ptr.1_anonymous.2_anonymous.3_anonymous.simple.*simple.**simple.array_of_10.2
+PASS: gdb.mi/mi2-var-child.exp: expression for ptr2.*ptr.1_anonymous.2_anonymous.3_anonymous.simple.*simple.**simple.array_of_10.2
+PASS: gdb.mi/mi2-var-child.exp: path expression for ptr2.*ptr.1_anonymous.2_anonymous.3_anonymous.simple.*simple.**simple.array_of_10.3
+PASS: gdb.mi/mi2-var-child.exp: expression for ptr2.*ptr.1_anonymous.2_anonymous.3_anonymous.simple.*simple.**simple.array_of_10.3
+PASS: gdb.mi/mi2-var-child.exp: path expression for ptr2.*ptr.1_anonymous.2_anonymous.3_anonymous.simple.*simple.**simple.array_of_10.4
+PASS: gdb.mi/mi2-var-child.exp: expression for ptr2.*ptr.1_anonymous.2_anonymous.3_anonymous.simple.*simple.**simple.array_of_10.4
+PASS: gdb.mi/mi2-var-child.exp: path expression for ptr2.*ptr.1_anonymous.2_anonymous.3_anonymous.simple.*simple.**simple.array_of_10.5
+PASS: gdb.mi/mi2-var-child.exp: expression for ptr2.*ptr.1_anonymous.2_anonymous.3_anonymous.simple.*simple.**simple.array_of_10.5
+PASS: gdb.mi/mi2-var-child.exp: path expression for ptr2.*ptr.1_anonymous.2_anonymous.3_anonymous.simple.*simple.**simple.array_of_10.6
+PASS: gdb.mi/mi2-var-child.exp: expression for ptr2.*ptr.1_anonymous.2_anonymous.3_anonymous.simple.*simple.**simple.array_of_10.6
+PASS: gdb.mi/mi2-var-child.exp: path expression for ptr2.*ptr.1_anonymous.2_anonymous.3_anonymous.simple.*simple.**simple.array_of_10.7
+PASS: gdb.mi/mi2-var-child.exp: expression for ptr2.*ptr.1_anonymous.2_anonymous.3_anonymous.simple.*simple.**simple.array_of_10.7
+PASS: gdb.mi/mi2-var-child.exp: path expression for ptr2.*ptr.1_anonymous.2_anonymous.3_anonymous.simple.*simple.**simple.array_of_10.8
+PASS: gdb.mi/mi2-var-child.exp: expression for ptr2.*ptr.1_anonymous.2_anonymous.3_anonymous.simple.*simple.**simple.array_of_10.8
+PASS: gdb.mi/mi2-var-child.exp: path expression for ptr2.*ptr.1_anonymous.2_anonymous.3_anonymous.simple.*simple.**simple.array_of_10.9
+PASS: gdb.mi/mi2-var-child.exp: expression for ptr2.*ptr.1_anonymous.2_anonymous.3_anonymous.simple.*simple.**simple.array_of_10.9
+PASS: gdb.mi/mi2-var-child.exp: VT: create root varobj for v
+PASS: gdb.mi/mi2-var-child.exp: VT: list children of v3
+PASS: gdb.mi/mi2-var-child.exp: path expression for v3
+PASS: gdb.mi/mi2-var-child.exp: expression for v3
+PASS: gdb.mi/mi2-var-child.exp: path expression for v3.x
+PASS: gdb.mi/mi2-var-child.exp: expression for v3.x
+PASS: gdb.mi/mi2-var-child.exp: VT: list children of v3.1_anonymous
+PASS: gdb.mi/mi2-var-child.exp: path expression for v3.1_anonymous
+PASS: gdb.mi/mi2-var-child.exp: expression for v3.1_anonymous
+PASS: gdb.mi/mi2-var-child.exp: VT: list children of v3.2_anonymous
+PASS: gdb.mi/mi2-var-child.exp: path expression for v3.2_anonymous
+PASS: gdb.mi/mi2-var-child.exp: expression for v3.2_anonymous
+PASS: gdb.mi/mi2-var-child.exp: path expression for v3.1_anonymous.a
+PASS: gdb.mi/mi2-var-child.exp: expression for v3.1_anonymous.a
+PASS: gdb.mi/mi2-var-child.exp: path expression for v3.2_anonymous.b
+PASS: gdb.mi/mi2-var-child.exp: expression for v3.2_anonymous.b
+Running ./gdb.mi/mi-async.exp ...
+Running ./gdb.mi/mi-basics.exp ...
+PASS: gdb.mi/mi-basics.exp: acceptance of MI operations
+PASS: gdb.mi/mi-basics.exp: file-exec-and-symbols operation
+PASS: gdb.mi/mi-basics.exp: file-exec-file operation
+PASS: gdb.mi/mi-basics.exp: file-symbol-file operation
+PASS: gdb.mi/mi-basics.exp: break-delete (all) operation
+PASS: gdb.mi/mi-basics.exp: all breakpoints removed
+PASS: gdb.mi/mi-basics.exp: environment-directory arg operation
+PASS: gdb.mi/mi-basics.exp: environment-directory empty-string operation
+PASS: gdb.mi/mi-basics.exp: environment-directory operation
+PASS: gdb.mi/mi-basics.exp: environment-cd arg operation
+PASS: gdb.mi/mi-basics.exp: environment-pwd operation
+PASS: gdb.mi/mi-basics.exp: environment-path
+PASS: gdb.mi/mi-basics.exp: environment-path no-args operation
+PASS: gdb.mi/mi-basics.exp: environment-path dir1 dir2 operation
+PASS: gdb.mi/mi-basics.exp: environment-path -r dir operation
+PASS: gdb.mi/mi-basics.exp: environment-path -r operation
+PASS: gdb.mi/mi-basics.exp: initial tty is mi_inferior_tty_name
+PASS: gdb.mi/mi-basics.exp: set tty to /dev/pts/1
+PASS: gdb.mi/mi-basics.exp: tty was set correctly
+PASS: gdb.mi/mi-basics.exp: set tty to the empty string
+PASS: gdb.mi/mi-basics.exp: make sure tty is empty
+PASS: gdb.mi/mi-basics.exp: set tty to mi_inferior_tty_name (the way it was)
+PASS: gdb.mi/mi-basics.exp: verify tty is correct
+Running ./gdb.mi/mi-break.exp ...
+PASS: gdb.mi/mi-break.exp: break-insert -t operation
+PASS: gdb.mi/mi-break.exp: insert temp breakpoint at basics.c:callee2
+PASS: gdb.mi/mi-break.exp: insert temp breakpoint at basics.c:$line_callee3_head
+PASS: gdb.mi/mi-break.exp: insert temp breakpoint at "<fullfilename>":$line_callee4_head
+PASS: gdb.mi/mi-break.exp: list of breakpoints
+PASS: gdb.mi/mi-break.exp: delete temp breakpoints
+KFAIL: gdb.mi/mi-break.exp: break-insert -r operation (PRMS: mi/14270)
+KFAIL: gdb.mi/mi-break.exp: insert breakpoint with regexp callee2 (PRMS: mi/14270)
+KFAIL: gdb.mi/mi-break.exp: insert breakpoint with regexp callee (PRMS: mi/14270)
+KFAIL: gdb.mi/mi-break.exp: insert breakpoint with regexp .*llee (PRMS: mi/14270)
+KFAIL: gdb.mi/mi-break.exp: list of breakpoints (PRMS: mi/14270)
+PASS: gdb.mi/mi-break.exp: delete temp breakpoints
+PASS: gdb.mi/mi-break.exp: insert breakpoint with ignore count at callme
+PASS: gdb.mi/mi-break.exp: run to breakpoint with ignore count
+PASS: gdb.mi/mi-break.exp: breakpoint at nonexistent function
+PASS: gdb.mi/mi-break.exp: create varobj for function call
+PASS: gdb.mi/mi-break.exp: update varobj for function call
+PASS: gdb.mi/mi-break.exp: test disabled creation
+PASS: gdb.mi/mi-break.exp: test disabled creation: cleanup
+PASS: gdb.mi/mi-break.exp: breakpoint commands: insert breakpoint at basics.c:callee2
+PASS: gdb.mi/mi-break.exp: breakpoint commands: set commands
+PASS: gdb.mi/mi-break.exp: breakpoint commands: check that commands are set
+PASS: gdb.mi/mi-break.exp: breakpoint commands: clear commands
+PASS: gdb.mi/mi-break.exp: breakpoint commands: check that commands are cleared
+FAIL: gdb.mi/mi-break.exp: breakpoint at main
+FAIL: gdb.mi/mi-break.exp: mi runto main (unknown output after running)
+FAIL: gdb.mi/mi-break.exp: breakpoint commands: insert breakpoint at basics.c:callee2, again
+FAIL: gdb.mi/mi-break.exp: breakpoint commands: set commands
+FAIL: gdb.mi/mi-break.exp: breakpoint commands: continue (MI error)
+FAIL: gdb.mi/mi-break.exp: intermediate stop and continue
+FAIL: gdb.mi/mi-break.exp: test hitting breakpoint with commands (unknown output after running)
+PASS: gdb.mi/mi-break.exp: create local variable tpnum
+PASS: gdb.mi/mi-break.exp: eval tpnum before tracepoint
+FAIL: gdb.mi/mi-break.exp: break-insert -a operation
+PASS: gdb.mi/mi-break.exp: update tpnum
+FAIL: gdb.mi/mi-break.exp: eval tpnum after tracepoint
+Running ./gdb.mi/mi-breakpoint-changed.exp ...
+PASS: gdb.mi/mi-breakpoint-changed.exp: breakpoint at main
+FAIL: gdb.mi/mi-breakpoint-changed.exp: mi runto main (unknown output after running)
+PASS: gdb.mi/mi-breakpoint-changed.exp: change command
+PASS: gdb.mi/mi-breakpoint-changed.exp: watch watch
+PASS: gdb.mi/mi-breakpoint-changed.exp: trace marker
+FAIL: gdb.mi/mi-breakpoint-changed.exp: catch syscall
+FAIL: gdb.mi/mi-breakpoint-changed.exp: dprintf marker, "arg" "
+PASS: gdb.mi/mi-breakpoint-changed.exp: condition 2 main > 0x0
+PASS: gdb.mi/mi-breakpoint-changed.exp: disable 3
+PASS: gdb.mi/mi-breakpoint-changed.exp: enable 3
+PASS: gdb.mi/mi-breakpoint-changed.exp: ignore 5 1
+PASS: gdb.mi/mi-breakpoint-changed.exp: passcount 1 4
+PASS: gdb.mi/mi-breakpoint-changed.exp: delete 3
+PASS: gdb.mi/mi-breakpoint-changed.exp: delete 4
+PASS: gdb.mi/mi-breakpoint-changed.exp: delete 5
+FAIL: gdb.mi/mi-breakpoint-changed.exp: delete 6
+PASS: gdb.mi/mi-breakpoint-changed.exp: pending resolved: insert breakpoint on pendfunc1
+FAIL: gdb.mi/mi-breakpoint-changed.exp: pending resolved: breakpoint on pendfunc1 resolved
+FAIL: gdb.mi/mi-breakpoint-changed.exp: pending resolved: continue to pendfunc1 breakpoint (timeout)
+PASS: gdb.mi/mi-breakpoint-changed.exp: pending resolved: delete breakpoint on pendfunc1
+PASS: gdb.mi/mi-breakpoint-changed.exp: pending resolved: insert breakpoint on marker
+PASS: gdb.mi/mi-breakpoint-changed.exp: pending resolved: insert breakpoint on pendfunc3
+FAIL: gdb.mi/mi-breakpoint-changed.exp: pending resolved: continue to marker 1 (MI error)
+FAIL: gdb.mi/mi-breakpoint-changed.exp: pending resolved: continue to marker 1 (timeout)
+FAIL: gdb.mi/mi-breakpoint-changed.exp: pending resolved: continuing execution to marker (MI error)
+FAIL: gdb.mi/mi-breakpoint-changed.exp: pending resolved: breakpoint on pendfunc3 resolved (timeout)
+FAIL: gdb.mi/mi-breakpoint-changed.exp: pending resolved: continue to marker 2 (timeout)
+FAIL: gdb.mi/mi-breakpoint-changed.exp: pending resolved: continuing to exit (MI error)
+FAIL: gdb.mi/mi-breakpoint-changed.exp: pending resolved: breakpoint on pendfunc3 pending again (timeout)
+FAIL: gdb.mi/mi-breakpoint-changed.exp: pending resolved: (unknown output after running)
+Running ./gdb.mi/mi-catch-load.exp ...
+PASS: gdb.mi/mi-catch-load.exp: breakpoint at main
+PASS: gdb.mi/mi-catch-load.exp: mi runto main
+PASS: gdb.mi/mi-catch-load.exp: catch-load: auto-solib-add on
+PASS: gdb.mi/mi-catch-load.exp: catch-load: catch load
+FAIL: gdb.mi/mi-catch-load.exp: catch-load: solib-event stop
+PASS: gdb.mi/mi-catch-load.exp: breakpoint at main
+PASS: gdb.mi/mi-catch-load.exp: mi runto main
+PASS: gdb.mi/mi-catch-load.exp: catch-unload: auto-solib-add on
+PASS: gdb.mi/mi-catch-load.exp: catch-unload: catch unload
+FAIL: gdb.mi/mi-catch-load.exp: catch-unload: solib-event stop
+Running ./gdb.mi/mi-cli.exp ...
+PASS: gdb.mi/mi-cli.exp: -interpreter-exec with no arguments
+PASS: gdb.mi/mi-cli.exp: -interpreter-exec with one argument
+PASS: gdb.mi/mi-cli.exp: -interpreter-exec with bogus interpreter
+PASS: gdb.mi/mi-cli.exp: -interpreter-exec console bogus
+PASS: gdb.mi/mi-cli.exp: -interpreter-exec console "file $binfile"
+PASS: gdb.mi/mi-cli.exp: breakpoint at main
+PASS: gdb.mi/mi-cli.exp: mi runto main
+PASS: gdb.mi/mi-cli.exp: -interpreter-exec console "set args foobar"
+PASS: gdb.mi/mi-cli.exp: -interpreter-exec console "show args"
+PASS: gdb.mi/mi-cli.exp: -interpreter-exec console "break callee4"
+PASS: gdb.mi/mi-cli.exp: -interpreter-exec console "info break"
+PASS: gdb.mi/mi-cli.exp: -interpreter-exec console "set listsize 1"
+PASS: gdb.mi/mi-cli.exp: -interpreter-exec console "list"
+PASS: gdb.mi/mi-cli.exp: continue to callee4
+PASS: gdb.mi/mi-cli.exp: -interpreter-exec console "delete 2"
+PASS: gdb.mi/mi-cli.exp: -interpreter-exec console "up"
+PASS: gdb.mi/mi-cli.exp: -interpreter-exec console "down"
+PASS: gdb.mi/mi-cli.exp: -interpreter-exec console "frame 2"
+PASS: gdb.mi/mi-cli.exp: -stack-select-frame 0
+PASS: gdb.mi/mi-cli.exp: check *stopped from CLI command
+PASS: gdb.mi/mi-cli.exp: -break-insert -t basics.c:$line_main_hello
+PASS: gdb.mi/mi-cli.exp: -exec-continue to line $line_main_hello
+PASS: gdb.mi/mi-cli.exp: 34 next: run
+PASS: gdb.mi/mi-cli.exp: 34 next: stop
+PASS: gdb.mi/mi-cli.exp: -interpreter-exec console "list" at basics.c:$line_main_return
+PASS: gdb.mi/mi-cli.exp: -interpreter-exec console "help set args"
+PASS: gdb.mi/mi-cli.exp: -interpreter-exec console "set $pc=0x0"
+Running ./gdb.mi/mi-cmd-param-changed.exp ...
+PASS: gdb.mi/mi-cmd-param-changed.exp: cmd param: breakpoint at main
+PASS: gdb.mi/mi-cmd-param-changed.exp: cmd param: mi runto main
+PASS: gdb.mi/mi-cmd-param-changed.exp: cmd param: "set scheduler-locking on"
+PASS: gdb.mi/mi-cmd-param-changed.exp: cmd param: "set scheduler-locking off"
+PASS: gdb.mi/mi-cmd-param-changed.exp: cmd param: "set scheduler-locking step"
+PASS: gdb.mi/mi-cmd-param-changed.exp: cmd param: interpreter-exec "set scheduler-locking on"
+PASS: gdb.mi/mi-cmd-param-changed.exp: cmd param: interpreter-exec "set scheduler-locking off"
+PASS: gdb.mi/mi-cmd-param-changed.exp: cmd param: interpreter-exec "set scheduler-locking step"
+PASS: gdb.mi/mi-cmd-param-changed.exp: cmd param: "set scheduler-locking on" no event (requested by MI)
+PASS: gdb.mi/mi-cmd-param-changed.exp: cmd param: "set scheduler-locking step" no event (requested by MI interp)
+PASS: gdb.mi/mi-cmd-param-changed.exp: cmd param: "set scheduler-locking stepr" no event
+PASS: gdb.mi/mi-cmd-param-changed.exp: cmd param: "set remotecache" warmup
+PASS: gdb.mi/mi-cmd-param-changed.exp: cmd param: "set remotecache on"
+PASS: gdb.mi/mi-cmd-param-changed.exp: cmd param: "set remotecache off"
+PASS: gdb.mi/mi-cmd-param-changed.exp: cmd param: "set remotecache" no event
+PASS: gdb.mi/mi-cmd-param-changed.exp: cmd param: "set check type" warmup
+PASS: gdb.mi/mi-cmd-param-changed.exp: cmd param: "set check type on"
+PASS: gdb.mi/mi-cmd-param-changed.exp: cmd param: "set check type off"
+PASS: gdb.mi/mi-cmd-param-changed.exp: cmd param: "set check type" no event
+PASS: gdb.mi/mi-cmd-param-changed.exp: cmd param: "set trace-notes foo"
+PASS: gdb.mi/mi-cmd-param-changed.exp: cmd param: "set trace-notes bar"
+PASS: gdb.mi/mi-cmd-param-changed.exp: cmd param: "set trace-notes bar" no event
+PASS: gdb.mi/mi-cmd-param-changed.exp: cmd param: "set remote exec-file foo"
+PASS: gdb.mi/mi-cmd-param-changed.exp: cmd param: "set remote exec-file bar"
+PASS: gdb.mi/mi-cmd-param-changed.exp: cmd param: "set remote exec-file bar" no event
+PASS: gdb.mi/mi-cmd-param-changed.exp: cmd param: "maint set profile on"
+PASS: gdb.mi/mi-cmd-param-changed.exp: cmd param: "maint set profile off"
+PASS: gdb.mi/mi-cmd-param-changed.exp: cmd param: "set ch type on"
+Running ./gdb.mi/mi-console.exp ...
+PASS: gdb.mi/mi-console.exp: breakpoint at main
+PASS: gdb.mi/mi-console.exp: mi runto main
+PASS: gdb.mi/mi-console.exp: Testing console output
+UNSUPPORTED: gdb.mi/mi-console.exp: Testing console output inferior output
+PASS: gdb.mi/mi-console.exp: finished step over hello
+Running ./gdb.mi/mi-disassemble.exp ...
+PASS: gdb.mi/mi-disassemble.exp: breakpoint at main
+PASS: gdb.mi/mi-disassemble.exp: mi runto main
+PASS: gdb.mi/mi-disassemble.exp: data-disassemble from pc to pc+12 assembly only
+PASS: gdb.mi/mi-disassemble.exp: data-disassemble file & line, assembly only
+PASS: gdb.mi/mi-disassemble.exp: data-disassemble from pc to pc+12 assembly with opcodes
+PASS: gdb.mi/mi-disassemble.exp: data-disassemble file & line, assembly with opcodes
+PASS: gdb.mi/mi-disassemble.exp: data-disassemble file, line assembly mixed
+PASS: gdb.mi/mi-disassemble.exp: data-disassemble range assembly mixed
+PASS: gdb.mi/mi-disassemble.exp: data-disassemble file, line assembly mixed with opcodes
+PASS: gdb.mi/mi-disassemble.exp: data-disassemble range assembly mixed with opcodes
+PASS: gdb.mi/mi-disassemble.exp: data-disassemble bogus filename
+PASS: gdb.mi/mi-disassemble.exp: data-disassemble bogus address
+PASS: gdb.mi/mi-disassemble.exp: data-disassemble mix different args
+PASS: gdb.mi/mi-disassemble.exp: data-disassemble wrong mode arg
+PASS: gdb.mi/mi-disassemble.exp: data-disassemble file, line, number assembly only
+PASS: gdb.mi/mi-disassemble.exp: data-disassemble file, line, number (zero lines) assembly only
+PASS: gdb.mi/mi-disassemble.exp: data-disassemble file, line, number (more than main lines) assembly only
+PASS: gdb.mi/mi-disassemble.exp: data-disassemble file, line, number assembly mixed
+PASS: gdb.mi/mi-disassemble.exp: data-disassemble file, line, number (zero lines) assembly mixed
+PASS: gdb.mi/mi-disassemble.exp: data-disassemble file, line, number (more than main lines) assembly mixed
+Running ./gdb.mi/mi-eval.exp ...
+PASS: gdb.mi/mi-eval.exp: breakpoint at callee4
+PASS: gdb.mi/mi-eval.exp: mi runto callee4
+PASS: gdb.mi/mi-eval.exp: next at callee4
+PASS: gdb.mi/mi-eval.exp: eval A
+PASS: gdb.mi/mi-eval.exp: eval &A
+PASS: gdb.mi/mi-eval.exp: eval A+3
+PASS: gdb.mi/mi-eval.exp: eval A + 3
+Running ./gdb.mi/mi-file.exp ...
+PASS: gdb.mi/mi-file.exp: request path info of current source file (basics.c)
+PASS: gdb.mi/mi-file.exp: Getting a list of source files.
+Running ./gdb.mi/mi-file-transfer.exp ...
+FAIL: gdb.mi/mi-file-transfer.exp: put binary file
+FAIL: gdb.mi/mi-file-transfer.exp: get binary file
+FAIL: gdb.mi/mi-file-transfer.exp: compare binary file
+FAIL: gdb.mi/mi-file-transfer.exp: deleted binary file
+Running ./gdb.mi/mi-fill-memory.exp ...
+PASS: gdb.mi/mi-fill-memory.exp: breakpoint at main
+PASS: gdb.mi/mi-fill-memory.exp: mi runto main
+PASS: gdb.mi/mi-fill-memory.exp: next at main
+PASS: gdb.mi/mi-fill-memory.exp: no arguments
+PASS: gdb.mi/mi-fill-memory.exp: one argument missing
+PASS: gdb.mi/mi-fill-memory.exp: memory successfully written
+PASS: gdb.mi/mi-fill-memory.exp: memory successfully filled (8 bytes)
+PASS: gdb.mi/mi-fill-memory.exp: pattern correctly read from memory
+Running ./gdb.mi/mi-fullname-deleted.exp ...
+PASS: gdb.mi/mi-fullname-deleted.exp: set substitute-path
+PASS: gdb.mi/mi-fullname-deleted.exp: fullname present
+PASS: gdb.mi/mi-fullname-deleted.exp: substituted fullname
+PASS: gdb.mi/mi-fullname-deleted.exp: compare_filenames_for_search does not match
+PASS: gdb.mi/mi-fullname-deleted.exp: compare_filenames_for_search does match
+Running ./gdb.mi/mi-hack-cli.exp ...
+PASS: gdb.mi/mi-hack-cli.exp: show architecture
+PASS: gdb.mi/mi-hack-cli.exp: 47show architecture
+Running ./gdb.mi/mi-info-os.exp ...
+FAIL: gdb.mi/mi-info-os.exp: -info-os
+Running ./gdb.mi/mi-inheritance-syntax-error.exp ...
+PASS: gdb.mi/mi-inheritance-syntax-error.exp: breakpoint at C::testLocation
+PASS: gdb.mi/mi-inheritance-syntax-error.exp: mi runto C::testLocation
+PASS: gdb.mi/mi-inheritance-syntax-error.exp: create var for THIS
+PASS: gdb.mi/mi-inheritance-syntax-error.exp: list children of THIS
+PASS: gdb.mi/mi-inheritance-syntax-error.exp: -var-info-path-expression var1.A
+PASS: gdb.mi/mi-inheritance-syntax-error.exp: -data-evaluate-expression (*(class A*) this)
+Running ./gdb.mi/mi-logging.exp ...
+PASS: gdb.mi/mi-logging.exp: breakpoint at main
+PASS: gdb.mi/mi-logging.exp: mi runto main
+PASS: gdb.mi/mi-logging.exp: logging on
+PASS: gdb.mi/mi-logging.exp: logged step
+PASS: gdb.mi/mi-logging.exp: logged next
+PASS: gdb.mi/mi-logging.exp: logging off
+PASS: gdb.mi/mi-logging.exp: Log file contents
+PASS: gdb.mi/mi-logging.exp: redirect logging on
+PASS: gdb.mi/mi-logging.exp: redirect logging off
+PASS: gdb.mi/mi-logging.exp: Redirect log file contents
+Running ./gdb.mi/mi-memory-changed.exp ...
+PASS: gdb.mi/mi-memory-changed.exp: insert breakpoint
+PASS: gdb.mi/mi-memory-changed.exp: continue to callee4
+PASS: gdb.mi/mi-memory-changed.exp: set var C = 4
+PASS: gdb.mi/mi-memory-changed.exp: create objvar for C
+PASS: gdb.mi/mi-memory-changed.exp: change C thru. varobj
+PASS: gdb.mi/mi-memory-changed.exp: change C thru. -data-write-memory-bytes
+PASS: gdb.mi/mi-memory-changed.exp: get address of main
+Running ./gdb.mi/mi-nonstop-exit.exp ...
+PASS: gdb.mi/mi-nonstop-exit.exp: successfully compiled posix threads test case
+PASS: gdb.mi/mi-nonstop-exit.exp: breakpoint at main
+PASS: gdb.mi/mi-nonstop-exit.exp: mi runto main
+PASS: gdb.mi/mi-nonstop-exit.exp: finished exec continue
+PASS: gdb.mi/mi-nonstop-exit.exp: breakpoint at main
+PASS: gdb.mi/mi-nonstop-exit.exp: mi runto main
+PASS: gdb.mi/mi-nonstop-exit.exp: finished exec continue (2)
+Running ./gdb.mi/mi-nonstop.exp ...
+PASS: gdb.mi/mi-nonstop.exp: successfully compiled posix threads test case
+PASS: gdb.mi/mi-nonstop.exp: breakpoint at main
+PASS: gdb.mi/mi-nonstop.exp: mi runto main
+PASS: gdb.mi/mi-nonstop.exp: breakpoint at marker
+PASS: gdb.mi/mi-nonstop.exp: w0,i0 stop
+PASS: gdb.mi/mi-nonstop.exp: w1,i0 stop
+PASS: gdb.mi/mi-nonstop.exp: thread state, stop 1
+PASS: gdb.mi/mi-nonstop.exp: select thread 2
+PASS: gdb.mi/mi-nonstop.exp: create varobj in first thread
+PASS: gdb.mi/mi-nonstop.exp: select thread 3
+PASS: gdb.mi/mi-nonstop.exp: create varobj in second thread
+PASS: gdb.mi/mi-nonstop.exp: thread state, resume 1
+PASS: gdb.mi/mi-nonstop.exp: w0,i1 stop
+PASS: gdb.mi/mi-nonstop.exp: thread state, stop 2
+PASS: gdb.mi/mi-nonstop.exp: thread state, resume 2
+PASS: gdb.mi/mi-nonstop.exp: w1,i1 stop
+PASS: gdb.mi/mi-nonstop.exp: thread state, stop 3
+PASS: gdb.mi/mi-nonstop.exp: update varobj, 1
+PASS: gdb.mi/mi-nonstop.exp: check varobj, w0, 1
+PASS: gdb.mi/mi-nonstop.exp: check varobj, w1, 1
+PASS: gdb.mi/mi-nonstop.exp: interrupted
+PASS: gdb.mi/mi-nonstop.exp: got interrupt
+PASS: gdb.mi/mi-nonstop.exp: thread state, stop 4
+PASS: gdb.mi/mi-nonstop.exp: resume all
+PASS: gdb.mi/mi-nonstop.exp: w0,i2 stop
+PASS: gdb.mi/mi-nonstop.exp: w1,i2 stop
+PASS: gdb.mi/mi-nonstop.exp: set condition, 1
+PASS: gdb.mi/mi-nonstop.exp: w0,i3 stop
+PASS: gdb.mi/mi-nonstop.exp: thread state, stop on cond breakpoint
+PASS: gdb.mi/mi-nonstop.exp: update varobj, 2
+PASS: gdb.mi/mi-nonstop.exp: check varobj, w1, 1
+PASS: gdb.mi/mi-nonstop.exp: stacktrace of running thread
+PASS: gdb.mi/mi-nonstop.exp: stacktrace of stopped thread
+PASS: gdb.mi/mi-nonstop.exp: select first worker thread
+PASS: gdb.mi/mi-nonstop.exp: ask the second thread to exit
+UNSUPPORTED: gdb.mi/mi-nonstop.exp: wait for thread exit
+PASS: gdb.mi/mi-nonstop.exp: stacktrace of stopped thread
+Running ./gdb.mi/mi-nsintrall.exp ...
+PASS: gdb.mi/mi-nsintrall.exp: successfully compiled posix threads test case
+PASS: gdb.mi/mi-nsintrall.exp: breakpoint at main
+PASS: gdb.mi/mi-nsintrall.exp: mi runto main
+PASS: gdb.mi/mi-nsintrall.exp: breakpoint at thread_function
+PASS: gdb.mi/mi-nsintrall.exp: stop 0
+PASS: gdb.mi/mi-nsintrall.exp: stop 1
+PASS: gdb.mi/mi-nsintrall.exp: stop 2
+PASS: gdb.mi/mi-nsintrall.exp: stop 3
+PASS: gdb.mi/mi-nsintrall.exp: stop 4
+PASS: gdb.mi/mi-nsintrall.exp: stop 5
+PASS: gdb.mi/mi-nsintrall.exp: thread state, all stopped
+PASS: gdb.mi/mi-nsintrall.exp: resume all, no breakpoint
+PASS: gdb.mi/mi-nsintrall.exp: thread state, resume all
+PASS: gdb.mi/mi-nsintrall.exp: interrupt all threads
+PASS: gdb.mi/mi-nsintrall.exp: interrupt 0
+PASS: gdb.mi/mi-nsintrall.exp: interrupt 1
+PASS: gdb.mi/mi-nsintrall.exp: interrupt 2
+PASS: gdb.mi/mi-nsintrall.exp: interrupt 3
+PASS: gdb.mi/mi-nsintrall.exp: interrupt 4
+PASS: gdb.mi/mi-nsintrall.exp: interrupt 5
+PASS: gdb.mi/mi-nsintrall.exp: thread state, all interrupted
+PASS: gdb.mi/mi-nsintrall.exp: resume all after interrupting
+PASS: gdb.mi/mi-nsintrall.exp: thread state, resume all after interrupting
+Running ./gdb.mi/mi-nsmoribund.exp ...
+PASS: gdb.mi/mi-nsmoribund.exp: successfully compiled posix threads test case
+PASS: gdb.mi/mi-nsmoribund.exp: breakpoint at main
+PASS: gdb.mi/mi-nsmoribund.exp: mi runto main
+PASS: gdb.mi/mi-nsmoribund.exp: breakpoint at thread_function
+PASS: gdb.mi/mi-nsmoribund.exp: stop 0
+PASS: gdb.mi/mi-nsmoribund.exp: stop 1
+PASS: gdb.mi/mi-nsmoribund.exp: stop 2
+PASS: gdb.mi/mi-nsmoribund.exp: stop 3
+PASS: gdb.mi/mi-nsmoribund.exp: stop 4
+PASS: gdb.mi/mi-nsmoribund.exp: stop 5
+PASS: gdb.mi/mi-nsmoribund.exp: stop 6
+PASS: gdb.mi/mi-nsmoribund.exp: stop 7
+PASS: gdb.mi/mi-nsmoribund.exp: stop 8
+PASS: gdb.mi/mi-nsmoribund.exp: stop 9
+PASS: gdb.mi/mi-nsmoribund.exp: thread state: all stopped except the main thread
+PASS: gdb.mi/mi-nsmoribund.exp: select thread 5
+PASS: gdb.mi/mi-nsmoribund.exp: thread specific breakpoint at thread_function
+PASS: gdb.mi/mi-nsmoribund.exp: resume all, thread specific breakpoint
+PASS: gdb.mi/mi-nsmoribund.exp: hit thread specific breakpoint
+PASS: gdb.mi/mi-nsmoribund.exp: thread state: all running except the breakpoint thread
+PASS: gdb.mi/mi-nsmoribund.exp: resume all, program exited normally
+Running ./gdb.mi/mi-ns-stale-regcache.exp ...
+PASS: gdb.mi/mi-ns-stale-regcache.exp: breakpoint at main
+PASS: gdb.mi/mi-ns-stale-regcache.exp: mi runto main
+PASS: gdb.mi/mi-ns-stale-regcache.exp: no stale register cache of resumed thread
+PASS: gdb.mi/mi-ns-stale-regcache.exp: no stale frame info of resumed thread
+PASS: gdb.mi/mi-ns-stale-regcache.exp: main thread still running
+Running ./gdb.mi/mi-nsthrexec.exp ...
+Running ./gdb.mi/mi-pending.exp ...
+PASS: gdb.mi/mi-pending.exp: MI pending breakpoint on pendfunc1
+PASS: gdb.mi/mi-pending.exp: MI pending breakpoint on mi-pendshr.c:pendfunc2 if x==4
+FAIL: gdb.mi/mi-pending.exp: Run till MI pending breakpoint on pendfunc1 (unknown output after running)
+FAIL: gdb.mi/mi-pending.exp: continuing execution to skip conditional bp (MI error)
+FAIL: gdb.mi/mi-pending.exp: Run till MI pending breakpoint on pendfunc1 a second time (timeout)
+FAIL: gdb.mi/mi-pending.exp: continuing execution to conditional bp (MI error)
+FAIL: gdb.mi/mi-pending.exp: Run till MI pending breakpoint on pendfunc2 with x==4 (timeout)
+Running ./gdb.mi/mi-pthreads.exp ...
+PASS: gdb.mi/mi-pthreads.exp: successfully compiled posix threads test case
+PASS: gdb.mi/mi-pthreads.exp: breakpoint at done_making_threads
+PASS: gdb.mi/mi-pthreads.exp: mi runto done_making_threads
+PASS: gdb.mi/mi-pthreads.exp: -thread_list_ids (in check_mi_thread_command_set)
+PASS: gdb.mi/mi-pthreads.exp: finding threads in MI output (in check_mi_thread_command_set)
+PASS: gdb.mi/mi-pthreads.exp: check_mi_thread_command_set: -thread-select
+PASS: gdb.mi/mi-pthreads.exp: check_mi_thread_command_set: -thread-select 123456789
+PASS: gdb.mi/mi-pthreads.exp: check_mi_thread_command_set: -thread-select 6
+PASS: gdb.mi/mi-pthreads.exp: check_mi_thread_command_set: -thread-select 5
+PASS: gdb.mi/mi-pthreads.exp: check_mi_thread_command_set: -thread-select 4
+PASS: gdb.mi/mi-pthreads.exp: check_mi_thread_command_set: -thread-select 3
+PASS: gdb.mi/mi-pthreads.exp: check_mi_thread_command_set: -thread-select 2
+PASS: gdb.mi/mi-pthreads.exp: check_mi_thread_command_set: -thread-select 1
+PASS: gdb.mi/mi-pthreads.exp: check =thread-selected: thread 6
+PASS: gdb.mi/mi-pthreads.exp: check =thread-selected: thread 5
+PASS: gdb.mi/mi-pthreads.exp: check =thread-selected: thread 4
+PASS: gdb.mi/mi-pthreads.exp: check =thread-selected: thread 3
+PASS: gdb.mi/mi-pthreads.exp: check =thread-selected: thread 2
+PASS: gdb.mi/mi-pthreads.exp: check =thread-selected: thread 1
+Running ./gdb.mi/mi-read-memory.exp ...
+PASS: gdb.mi/mi-read-memory.exp: breakpoint at main
+PASS: gdb.mi/mi-read-memory.exp: mi runto main
+PASS: gdb.mi/mi-read-memory.exp: next at main
+PASS: gdb.mi/mi-read-memory.exp: no arguments
+PASS: gdb.mi/mi-read-memory.exp: 3x2, one byte
+PASS: gdb.mi/mi-read-memory.exp: 3x2, one byte offset by -6
+PASS: gdb.mi/mi-read-memory.exp: expression in quotes
+PASS: gdb.mi/mi-read-memory.exp: ascii and data
+PASS: gdb.mi/mi-read-memory.exp: decimal
+PASS: gdb.mi/mi-read-memory.exp: octal
+Running ./gdb.mi/mi-record-changed.exp ...
+Running ./gdb.mi/mi-regs.exp ...
+Running ./gdb.mi/mi-return.exp ...
+PASS: gdb.mi/mi-return.exp: breakpoint at callee4
+PASS: gdb.mi/mi-return.exp: mi runto callee4
+PASS: gdb.mi/mi-return.exp: delete all breakpoints
+PASS: gdb.mi/mi-return.exp: return from callee4 now
+Running ./gdb.mi/mi-reverse.exp ...
+Running ./gdb.mi/mi-simplerun.exp ...
+PASS: gdb.mi/mi-simplerun.exp: break-insert operation
+PASS: gdb.mi/mi-simplerun.exp: insert breakpoint at basics.c:callee2
+PASS: gdb.mi/mi-simplerun.exp: insert breakpoint at basics.c:$line_callee3_head
+PASS: gdb.mi/mi-simplerun.exp: insert breakpoint at "<fullfilename>":$line_callee4_head
+PASS: gdb.mi/mi-simplerun.exp: list of breakpoints
+PASS: gdb.mi/mi-simplerun.exp: disabling of breakpoints
+PASS: gdb.mi/mi-simplerun.exp: list of breakpoints, 16 disabled
+PASS: gdb.mi/mi-simplerun.exp: run to main
+PASS: gdb.mi/mi-simplerun.exp: next at main
+PASS: gdb.mi/mi-simplerun.exp: step at main
+PASS: gdb.mi/mi-simplerun.exp: step to callee4
+PASS: gdb.mi/mi-simplerun.exp: exec-finish
+PASS: gdb.mi/mi-simplerun.exp: continue to end
+Running ./gdb.mi/mi-solib.exp ...
+PASS: gdb.mi/mi-solib.exp: set stop-on-solib-events
+FAIL: gdb.mi/mi-solib.exp: check for solib event (unknown output after running)
+Running ./gdb.mi/mi-stack.exp ...
+PASS: gdb.mi/mi-stack.exp: breakpoint at callee4
+PASS: gdb.mi/mi-stack.exp: mi runto callee4
+PASS: gdb.mi/mi-stack.exp: stack frame listing
+PASS: gdb.mi/mi-stack.exp: stack frame listing 1 1
+PASS: gdb.mi/mi-stack.exp: stack frame listing 1 3
+PASS: gdb.mi/mi-stack.exp: stack frame listing wrong
+PASS: gdb.mi/mi-stack.exp: selected frame listing
+PASS: gdb.mi/mi-stack.exp: stack frame listing 1 300
+PASS: gdb.mi/mi-stack.exp: stack args listing 0
+PASS: gdb.mi/mi-stack.exp: stack args listing 0 1 1
+PASS: gdb.mi/mi-stack.exp: stack args listing 0 1 3
+PASS: gdb.mi/mi-stack.exp: stack args listing 1
+PASS: gdb.mi/mi-stack.exp: stack args listing 1 1 1
+PASS: gdb.mi/mi-stack.exp: stack args listing 1 1 3
+PASS: gdb.mi/mi-stack.exp: stack args listing wrong
+PASS: gdb.mi/mi-stack.exp: stack args listing 1 1 300
+PASS: gdb.mi/mi-stack.exp: stack locals listing of names
+PASS: gdb.mi/mi-stack.exp: next's in callee4
+PASS: gdb.mi/mi-stack.exp: stack locals listing of names and values
+PASS: gdb.mi/mi-stack.exp: stack locals listing, simple types: names and values, complex type: names and types
+PASS: gdb.mi/mi-stack.exp: stack locals listing wrong
+PASS: gdb.mi/mi-stack.exp: stack select frame 1
+PASS: gdb.mi/mi-stack.exp: stack locals listing for new frame
+PASS: gdb.mi/mi-stack.exp: stack locals for same frame (level 1)
+PASS: gdb.mi/mi-stack.exp: stack info-depth
+PASS: gdb.mi/mi-stack.exp: stack info-depth 3
+PASS: gdb.mi/mi-stack.exp: stack info-depth 99
+PASS: gdb.mi/mi-stack.exp: stack info-depth wrong usage
+Running ./gdb.mi/mi-stepi.exp ...
+PASS: gdb.mi/mi-stepi.exp: breakpoint at main
+PASS: gdb.mi/mi-stepi.exp: mi runto main
+PASS: gdb.mi/mi-stepi.exp: step-instruction at main
+PASS: gdb.mi/mi-stepi.exp: step-instruction at main (line check)
+PASS: gdb.mi/mi-stepi.exp: next-instruction at main
+PASS: gdb.mi/mi-stepi.exp: next-instruction at main (line check)
+PASS: gdb.mi/mi-stepi.exp: next-instruction at main 2
+PASS: gdb.mi/mi-stepi.exp: next-instruction at main 2 (line check)
+Running ./gdb.mi/mi-stepn.exp ...
+PASS: gdb.mi/mi-stepn.exp: breakpoint at main
+PASS: gdb.mi/mi-stepn.exp: mi runto main
+PASS: gdb.mi/mi-stepn.exp: breakpoint at do_nothing
+PASS: gdb.mi/mi-stepn.exp: breakpoint-hit reported
+Running ./gdb.mi/mi-syn-frame.exp ...
+PASS: gdb.mi/mi-syn-frame.exp: breakpoint at main
+PASS: gdb.mi/mi-syn-frame.exp: mi runto main
+PASS: gdb.mi/mi-syn-frame.exp: insert breakpoint foo
+PASS: gdb.mi/mi-syn-frame.exp: call inferior's function with a breakpoint set in it
+PASS: gdb.mi/mi-syn-frame.exp: backtrace from inferior function stopped at bp, showing gdb dummy frame
+PASS: gdb.mi/mi-syn-frame.exp: finished exec continue
+PASS: gdb.mi/mi-syn-frame.exp: list stack frames
+PASS: gdb.mi/mi-syn-frame.exp: insert breakpoint subroutine
+PASS: gdb.mi/mi-syn-frame.exp: data evaluate expression
+FAIL: gdb.mi/mi-syn-frame.exp: list stack frames
+PASS: gdb.mi/mi-syn-frame.exp: finished exec continue
+PASS: gdb.mi/mi-syn-frame.exp: list stack frames
+PASS: gdb.mi/mi-syn-frame.exp: call inferior function which raises exception
+PASS: gdb.mi/mi-syn-frame.exp: backtrace from inferior function at exception
+Running ./gdb.mi/mi-until.exp ...
+PASS: gdb.mi/mi-until.exp: break-insert operation
+PASS: gdb.mi/mi-until.exp: run to main
+PASS: gdb.mi/mi-until.exp: break-delete 1
+KFAIL: gdb.mi/mi-until.exp: until after while loop (stopped at wrong place) (PRMS: gdb/2104)
+PASS: gdb.mi/mi-until.exp: until line number
+PASS: gdb.mi/mi-until.exp: until line number:file
+PASS: gdb.mi/mi-until.exp: until after current function
+Running ./gdb.mi/mi-var-block.exp ...
+PASS: gdb.mi/mi-var-block.exp: breakpoint at do_block_tests
+PASS: gdb.mi/mi-var-block.exp: mi runto do_block_tests
+PASS: gdb.mi/mi-var-block.exp: create local variable cb
+PASS: gdb.mi/mi-var-block.exp: try to create local variable foo
+PASS: gdb.mi/mi-var-block.exp: step at do_block_test 1
+PASS: gdb.mi/mi-var-block.exp: delete var foo 1
+PASS: gdb.mi/mi-var-block.exp: create local variable foo
+PASS: gdb.mi/mi-var-block.exp: step at do_block_test 2
+PASS: gdb.mi/mi-var-block.exp: update all vars: cb foo changed
+PASS: gdb.mi/mi-var-block.exp: step at do_block_test 3
+PASS: gdb.mi/mi-var-block.exp: create local variable inner_foo
+PASS: gdb.mi/mi-var-block.exp: step at do_block_test 4
+PASS: gdb.mi/mi-var-block.exp: create local variable foo2
+XFAIL: gdb.mi/mi-var-block.exp: update inner_foo: should be out of scope: KNOWN PROBLEM
+XFAIL: gdb.mi/mi-var-block.exp: evaluate inner_foo: should be out of scope: KNOWN PROBLEM
+PASS: gdb.mi/mi-var-block.exp: update foo: did not change
+PASS: gdb.mi/mi-var-block.exp: delete var inner_foo
+PASS: gdb.mi/mi-var-block.exp: step at do_block_test 5
+XFAIL: gdb.mi/mi-var-block.exp: update foo2: should be out of scope: KNOWN PROBLEM
+PASS: gdb.mi/mi-var-block.exp: step at do_block_test 6
+XFAIL: gdb.mi/mi-var-block.exp: update foo2 should be out of scope: KNOWN PROBLEM
+XFAIL: gdb.mi/mi-var-block.exp: update foo should be out of scope: KNOWN PROBLEM
+PASS: gdb.mi/mi-var-block.exp: update cb
+PASS: gdb.mi/mi-var-block.exp: delete var foo 2
+PASS: gdb.mi/mi-var-block.exp: delete var foo2
+PASS: gdb.mi/mi-var-block.exp: delete var cb
+Running ./gdb.mi/mi-var-child.exp ...
+PASS: gdb.mi/mi-var-child.exp: breakpoint at do_children_tests
+PASS: gdb.mi/mi-var-child.exp: mi runto do_children_tests
+PASS: gdb.mi/mi-var-child.exp: run to 215 (set breakpoint)
+PASS: gdb.mi/mi-var-child.exp: create local variable struct_declarations
+PASS: gdb.mi/mi-var-child.exp: get children of struct_declarations
+PASS: gdb.mi/mi-var-child.exp: get number of children of struct_declarations
+PASS: gdb.mi/mi-var-child.exp: get children of struct_declarations.integer
+PASS: gdb.mi/mi-var-child.exp: get number of children of struct_declarations.integer
+PASS: gdb.mi/mi-var-child.exp: get children of struct_declarations.character
+PASS: gdb.mi/mi-var-child.exp: get number of children of struct_declarations.character
+PASS: gdb.mi/mi-var-child.exp: get children of struct_declarations.char_ptr
+PASS: gdb.mi/mi-var-child.exp: get number of children of struct_declarations.char_ptr
+PASS: gdb.mi/mi-var-child.exp: get children of struct_declarations.long_int
+PASS: gdb.mi/mi-var-child.exp: get number of children of struct_declarations.long_int
+PASS: gdb.mi/mi-var-child.exp: get children of struct_declarations.int_ptr_ptr
+PASS: gdb.mi/mi-var-child.exp: get number of children of struct_declarations.int_ptr_ptr
+PASS: gdb.mi/mi-var-child.exp: get children of struct_declarations.long_array
+PASS: gdb.mi/mi-var-child.exp: get number of children of struct_declarations.long_array
+PASS: gdb.mi/mi-var-child.exp: get children of struct_declarations.func_ptr
+PASS: gdb.mi/mi-var-child.exp: get number of children of struct_declarations.func_ptr
+PASS: gdb.mi/mi-var-child.exp: get children of struct_declarations.func_ptr_struct
+PASS: gdb.mi/mi-var-child.exp: get number of children of struct_declarations.func_ptr_struct
+PASS: gdb.mi/mi-var-child.exp: get children of struct_declarations.func_ptr_ptr
+PASS: gdb.mi/mi-var-child.exp: get number of children of struct_declarations.func_ptr_ptr
+PASS: gdb.mi/mi-var-child.exp: get children of struct_declarations.u1
+PASS: gdb.mi/mi-var-child.exp: get number of children of struct_declarations.u1
+PASS: gdb.mi/mi-var-child.exp: get children of struct_declarations.s2
+PASS: gdb.mi/mi-var-child.exp: get number of children of struct_declarations.s2
+PASS: gdb.mi/mi-var-child.exp: get children of struct_declarations.long_array.1
+PASS: gdb.mi/mi-var-child.exp: get number of children of struct_declarations.long_array.1
+PASS: gdb.mi/mi-var-child.exp: get children of struct_declarations.long_array.2
+PASS: gdb.mi/mi-var-child.exp: get number of children of struct_declarations.long_array.2
+PASS: gdb.mi/mi-var-child.exp: get children of struct_declarations.long_array.3
+PASS: gdb.mi/mi-var-child.exp: get number of children of struct_declarations.long_array.3
+PASS: gdb.mi/mi-var-child.exp: get children of struct_declarations.long_array.4
+PASS: gdb.mi/mi-var-child.exp: get number of children of struct_declarations.long_array.4
+PASS: gdb.mi/mi-var-child.exp: get children of struct_declarations.long_array.5
+PASS: gdb.mi/mi-var-child.exp: get number of children of struct_declarations.long_array.5
+PASS: gdb.mi/mi-var-child.exp: get children of struct_declarations.long_array.6
+PASS: gdb.mi/mi-var-child.exp: get number of children of struct_declarations.long_array.6
+PASS: gdb.mi/mi-var-child.exp: get children of struct_declarations.long_array.7
+PASS: gdb.mi/mi-var-child.exp: get number of children of struct_declarations.long_array.7
+PASS: gdb.mi/mi-var-child.exp: get children of struct_declarations.long_array.8
+PASS: gdb.mi/mi-var-child.exp: get number of children of struct_declarations.long_array.8
+PASS: gdb.mi/mi-var-child.exp: get children of struct_declarations.long_array.9
+PASS: gdb.mi/mi-var-child.exp: get number of children of struct_declarations.long_array.9
+PASS: gdb.mi/mi-var-child.exp: get children of struct_declarations.u1.a
+PASS: gdb.mi/mi-var-child.exp: get number of children of struct_declarations.u1.a
+PASS: gdb.mi/mi-var-child.exp: get children of struct_declarations.u1.b
+PASS: gdb.mi/mi-var-child.exp: get number of children of struct_declarations.u1.b
+PASS: gdb.mi/mi-var-child.exp: get children of struct_declarations.u1.c
+PASS: gdb.mi/mi-var-child.exp: get number of children of struct_declarations.u1.c
+PASS: gdb.mi/mi-var-child.exp: get children of struct_declarations.u1.d
+PASS: gdb.mi/mi-var-child.exp: get number of children of struct_declarations.u1.d
+PASS: gdb.mi/mi-var-child.exp: get children of struct_declarations.s2.u2
+PASS: gdb.mi/mi-var-child.exp: get number of children of struct_declarations.s2.u2
+PASS: gdb.mi/mi-var-child.exp: get children of struct_declarations.s2.g
+PASS: gdb.mi/mi-var-child.exp: get number of children of struct_declarations.s2.g
+PASS: gdb.mi/mi-var-child.exp: get children of struct_declarations.s2.h
+PASS: gdb.mi/mi-var-child.exp: get number of children of struct_declarations.s2.h
+PASS: gdb.mi/mi-var-child.exp: get children of struct_declarations.s2.i
+PASS: gdb.mi/mi-var-child.exp: get number of children of struct_declarations.s2.i
+PASS: gdb.mi/mi-var-child.exp: get children of struct_declarations.s2.u2.u1s1
+PASS: gdb.mi/mi-var-child.exp: get number of children of struct_declarations.s2.u2.u1s1
+PASS: gdb.mi/mi-var-child.exp: get children of struct_declarations.s2.u2.f
+PASS: gdb.mi/mi-var-child.exp: get number of children of struct_declarations.s2.u2.f
+PASS: gdb.mi/mi-var-child.exp: get children of struct_declarations.s2.u2.u1s2
+PASS: gdb.mi/mi-var-child.exp: get number of children of struct_declarations.s2.u2.u1s2
+PASS: gdb.mi/mi-var-child.exp: get children of struct_declarations.s2.u2.u1s1.d
+PASS: gdb.mi/mi-var-child.exp: get number of children of struct_declarations.s2.u2.u1s1.d
+PASS: gdb.mi/mi-var-child.exp: get children of struct_declarations.s2.u2.u1s1.e
+PASS: gdb.mi/mi-var-child.exp: get number of children of struct_declarations.s2.u2.u1s1.e
+PASS: gdb.mi/mi-var-child.exp: get children of struct_declarations.s2.u2.u1s1.func
+PASS: gdb.mi/mi-var-child.exp: get number of children of struct_declarations.s2.u2.u1s1.func
+PASS: gdb.mi/mi-var-child.exp: get children of struct_declarations.s2.u2.u1s1.foo
+PASS: gdb.mi/mi-var-child.exp: get number of children of struct_declarations.s2.u2.u1s1.foo
+PASS: gdb.mi/mi-var-child.exp: get children of struct_declarations.s2.u2.u1s2.array_ptr
+PASS: gdb.mi/mi-var-child.exp: get number of children of struct_declarations.s2.u2.u1s2.array_ptr
+PASS: gdb.mi/mi-var-child.exp: get children of struct_declarations.s2.u2.u1s2.func
+PASS: gdb.mi/mi-var-child.exp: get number of children of struct_declarations.s2.u2.u1s2.func
+PASS: gdb.mi/mi-var-child.exp: get children of struct_declarations.int_ptr_ptr.*int_ptr_ptr
+PASS: gdb.mi/mi-var-child.exp: get number of children of struct_declarations.int_ptr_ptr.*int_ptr_ptr
+PASS: gdb.mi/mi-var-child.exp: step to line $line_dct_123
+PASS: gdb.mi/mi-var-child.exp: create local variable weird
+PASS: gdb.mi/mi-var-child.exp: get children of weird
+PASS: gdb.mi/mi-var-child.exp: get number of children of weird
+PASS: gdb.mi/mi-var-child.exp: get children of weird.long_array
+PASS: gdb.mi/mi-var-child.exp: get number of children of weird.long_array
+PASS: gdb.mi/mi-var-child.exp: get children of weird.int_ptr_ptr
+PASS: gdb.mi/mi-var-child.exp: get number of children of weird.int_ptr_ptr
+PASS: gdb.mi/mi-var-child.exp: get children of weird.int_ptr_ptr.*int_ptr_ptr
+PASS: gdb.mi/mi-var-child.exp: get number of children of weird.int_ptr_ptr.*int_ptr_ptr
+PASS: gdb.mi/mi-var-child.exp: create local variable weird->int_ptr_ptr
+PASS: gdb.mi/mi-var-child.exp: get children of weird->int_ptr_ptr
+PASS: gdb.mi/mi-var-child.exp: get number of children of weird->int_ptr_ptr
+PASS: gdb.mi/mi-var-child.exp: get children of weird->int_ptr_ptr.*weird->int_ptr_ptr
+PASS: gdb.mi/mi-var-child.exp: get number of children of weird->int_ptr_ptr.*weird->int_ptr_ptr
+PASS: gdb.mi/mi-var-child.exp: get children of weird->int_ptr_ptr.*weird->int_ptr_ptr.**weird->int_ptr_ptr
+PASS: gdb.mi/mi-var-child.exp: get number of children of weird->int_ptr_ptr.*weird->int_ptr_ptr.**weird->int_ptr_ptr
+PASS: gdb.mi/mi-var-child.exp: is weird editable
+PASS: gdb.mi/mi-var-child.exp: is weird->int_ptr_ptr editable
+PASS: gdb.mi/mi-var-child.exp: is weird.int_ptr_ptr.*int_ptr_ptr editable
+PASS: gdb.mi/mi-var-child.exp: is weird.int_ptr_ptr.*int_ptr_ptr.**int_ptr_ptr editable
+PASS: gdb.mi/mi-var-child.exp: is weird.u1 editable
+PASS: gdb.mi/mi-var-child.exp: is weird.s2 editable
+PASS: gdb.mi/mi-var-child.exp: is struct_declarations.u1.a editable
+PASS: gdb.mi/mi-var-child.exp: is struct_declarations.u1.b editable
+PASS: gdb.mi/mi-var-child.exp: is struct_declarations.u1.c editable
+PASS: gdb.mi/mi-var-child.exp: is struct_declarations.long_array editable
+PASS: gdb.mi/mi-var-child.exp: is struct_declarations.long_array.0 editable
+PASS: gdb.mi/mi-var-child.exp: is struct_declarations editable
+PASS: gdb.mi/mi-var-child.exp: delete var weird
+PASS: gdb.mi/mi-var-child.exp: update all vars. None changed
+PASS: gdb.mi/mi-var-child.exp: step $line_dct_123 + 1
+PASS: gdb.mi/mi-var-child.exp: update all vars struct_declarations.integer
+PASS: gdb.mi/mi-var-child.exp: step $line_dct_123 + 4
+PASS: gdb.mi/mi-var-child.exp: update all vars struct_declarations.char_ptr
+PASS: gdb.mi/mi-var-child.exp: step $line_dct_123 + 5
+PASS: gdb.mi/mi-var-child.exp: update all vars int_ptr_ptr and children changed
+PASS: gdb.mi/mi-var-child.exp: step $line_dct_123 + 6
+PASS: gdb.mi/mi-var-child.exp: update all vars struct_declarations.long_array.0 changed
+PASS: gdb.mi/mi-var-child.exp: step $line_dct_123 + 7
+PASS: gdb.mi/mi-var-child.exp: update all vars struct_declarations.long_array.1 changed
+PASS: gdb.mi/mi-var-child.exp: step $line_dct_123 + 8
+PASS: gdb.mi/mi-var-child.exp: update all vars struct_declarations.long_array.2 changed
+PASS: gdb.mi/mi-var-child.exp: step $line_dct_nothing
+PASS: gdb.mi/mi-var-child.exp: update all vars struct_declarations.long_array.3-9 changed
+PASS: gdb.mi/mi-var-child.exp: step $line_dct_nothing + 1
+PASS: gdb.mi/mi-var-child.exp: update all vars struct_declarations.func_ptr changed
+PASS: gdb.mi/mi-var-child.exp: step $line_dct_nothing + 2
+PASS: gdb.mi/mi-var-child.exp: update all vars struct_declarations.long_array.10 changed, don't print values.
+PASS: gdb.mi/mi-var-child.exp: step $line_dct_a0_0
+PASS: gdb.mi/mi-var-child.exp: update all vars struct_declarations.long_array.11 changed, print values.
+PASS: gdb.mi/mi-var-child.exp: listing of names and values of children
+PASS: gdb.mi/mi-var-child.exp: listing of children, simple types: names, type and values, complex types: names and types
+PASS: gdb.mi/mi-var-child.exp: delete var struct_declarations
+PASS: gdb.mi/mi-var-child.exp: delete var weird->int_ptr_ptr
+PASS: gdb.mi/mi-var-child.exp: step $line_dct_snp0 + 1
+PASS: gdb.mi/mi-var-child.exp: create local variable psnp->char_ptr
+PASS: gdb.mi/mi-var-child.exp: get children of psnp->char_ptr
+PASS: gdb.mi/mi-var-child.exp: get number of children of psnp->char_ptr
+PASS: gdb.mi/mi-var-child.exp: get children of psnp->char_ptr.*psnp->char_ptr
+PASS: gdb.mi/mi-var-child.exp: get number of children of psnp->char_ptr.*psnp->char_ptr
+PASS: gdb.mi/mi-var-child.exp: get children of psnp->char_ptr.*psnp->char_ptr.**psnp->char_ptr
+PASS: gdb.mi/mi-var-child.exp: get children of psnp->char_ptr.*psnp->char_ptr.**psnp->char_ptr.***psnp->char_ptr
+PASS: gdb.mi/mi-var-child.exp: get number of children of psnp->char_ptr.*psnp->char_ptr.**psnp->char_ptr
+PASS: gdb.mi/mi-var-child.exp: get children of psnp->char_ptr.*psnp->char_ptr.**psnp->char_ptr.***psnp->char_ptr
+PASS: gdb.mi/mi-var-child.exp: get number of children of psnp->char_ptr.*psnp->char_ptr.**psnp->char_ptr.***psnp->char_ptr
+PASS: gdb.mi/mi-var-child.exp: get children of psnp->char_ptr.*psnp->char_ptr.**psnp->char_ptr.***psnp->char_ptr.****psnp->char_ptr
+PASS: gdb.mi/mi-var-child.exp: get number of children of psnp->char_ptr.*psnp->char_ptr.**psnp->char_ptr.***psnp->char_ptr.****psnp->char_ptr
+PASS: gdb.mi/mi-var-child.exp: create local variable psnp->long_ptr
+PASS: gdb.mi/mi-var-child.exp: get children of psnp->long_ptr
+PASS: gdb.mi/mi-var-child.exp: get number of children of psnp->long_ptr
+PASS: gdb.mi/mi-var-child.exp: get children of psnp->long_ptr.*psnp->long_ptr
+PASS: gdb.mi/mi-var-child.exp: get number of children of psnp->long_ptr.*psnp->long_ptr
+PASS: gdb.mi/mi-var-child.exp: get children of psnp->long_ptr.*psnp->long_ptr.**psnp->long_ptr
+PASS: gdb.mi/mi-var-child.exp: get number of children of psnp->long_ptr.*psnp->long_ptr.**psnp->long_ptr
+PASS: gdb.mi/mi-var-child.exp: get children of psnp->long_ptr.*psnp->long_ptr.**psnp->long_ptr.***psnp->long_ptr
+PASS: gdb.mi/mi-var-child.exp: get number of children of psnp->long_ptr.*psnp->long_ptr.**psnp->long_ptr.***psnp->long_ptr
+PASS: gdb.mi/mi-var-child.exp: get children of psnp->long_ptr.*psnp->long_ptr.**psnp->long_ptr.***psnp->long_ptr.****psnp->long_ptr
+PASS: gdb.mi/mi-var-child.exp: get number of children of psnp->long_ptr.*psnp->long_ptr.**psnp->long_ptr.***psnp->long_ptr.****psnp->long_ptr
+PASS: gdb.mi/mi-var-child.exp: create local variable psnp->ptrs
+PASS: gdb.mi/mi-var-child.exp: get children of psnp->ptrs
+PASS: gdb.mi/mi-var-child.exp: get number of children of psnp->ptrs
+PASS: gdb.mi/mi-var-child.exp: get children of psnp->ptrs.0
+PASS: gdb.mi/mi-var-child.exp: get number of children of psnp->ptrs.0
+PASS: gdb.mi/mi-var-child.exp: get children of psnp->ptrs.0.next
+PASS: gdb.mi/mi-var-child.exp: get number of children of psnp->ptrs.0.next
+PASS: gdb.mi/mi-var-child.exp: get children of psnp->ptrs.0.next.char_ptr
+PASS: gdb.mi/mi-var-child.exp: get number of children of psnp->ptrs.0.next.char_ptr
+PASS: gdb.mi/mi-var-child.exp: get children of psnp->ptrs.0.next.char_ptr.*char_ptr
+PASS: gdb.mi/mi-var-child.exp: get number of children of psnp->ptrs.0.next.char_ptr.*char_ptr
+PASS: gdb.mi/mi-var-child.exp: get children of psnp->ptrs.0.next.char_ptr.*char_ptr.**char_ptr
+PASS: gdb.mi/mi-var-child.exp: get children of psnp->ptrs.0.next.char_ptr.*char_ptr.**char_ptr
+PASS: gdb.mi/mi-var-child.exp: get number of children of psnp->ptrs.0.next.char_ptr.*char_ptr.**char_ptr
+PASS: gdb.mi/mi-var-child.exp: get children of psnp->ptrs.0.next.char_ptr.*char_ptr.**char_ptr.***char_ptr
+PASS: gdb.mi/mi-var-child.exp: get number of children of psnp->ptrs.0.next.char_ptr.*char_ptr.**char_ptr.***char_ptr
+PASS: gdb.mi/mi-var-child.exp: get children of psnp->ptrs.0.next.char_ptr.*char_ptr.**char_ptr.***char_ptr
+PASS: gdb.mi/mi-var-child.exp: get number of children of psnp->ptrs.0.next.char_ptr.*char_ptr.**char_ptr.***char_ptr
+PASS: gdb.mi/mi-var-child.exp: get children of psnp->ptrs.0.next.next
+PASS: gdb.mi/mi-var-child.exp: get children of psnp->ptrs.0.next.next.ptrs
+PASS: gdb.mi/mi-var-child.exp: step $line_dct_snp0 + 2
+PASS: gdb.mi/mi-var-child.exp: update all vars psnp->char_ptr (and 0.char_ptr) changed
+PASS: gdb.mi/mi-var-child.exp: step $line_dct_snp0 + 3
+PASS: gdb.mi/mi-var-child.exp: update all vars psnp->next->char_ptr (and 1.char_ptr) changed
+PASS: gdb.mi/mi-var-child.exp: step $line_dct_snp0 + 4
+PASS: gdb.mi/mi-var-child.exp: update all vars psnp->next->next->char_ptr (and 2.char_ptr) changed
+PASS: gdb.mi/mi-var-child.exp: step $line_dct_snp0 + 5
+PASS: gdb.mi/mi-var-child.exp: update all vars psnp->long_ptr (and 0.long_ptr) changed
+PASS: gdb.mi/mi-var-child.exp: step $line_dct_snp0 + 6
+XFAIL: gdb.mi/mi-var-child.exp: update all vars psnp->next->long_ptr (and 1.long_ptr) changed
+PASS: gdb.mi/mi-var-child.exp: step $line_dct_snp0 + 7
+PASS: gdb.mi/mi-var-child.exp: update all vars psnp->next->next->long_ptr (and 2.long_ptr) changed
+PASS: gdb.mi/mi-var-child.exp: run to mi-var-child.c:323 (set breakpoint)
+PASS: gdb.mi/mi-var-child.exp: create varobj for s
+PASS: gdb.mi/mi-var-child.exp: list children of S
+PASS: gdb.mi/mi-var-child.exp: delete S.a
+PASS: gdb.mi/mi-var-child.exp: delete S.b
+PASS: gdb.mi/mi-var-child.exp: delete S
+Running ./gdb.mi/mi-var-child-f.exp ...
+UNSUPPORTED: gdb.mi/mi-var-child-f.exp: compilation array.f
+Running ./gdb.mi/mi-var-cmd.exp ...
+PASS: gdb.mi/mi-var-cmd.exp: create global variable
+PASS: gdb.mi/mi-var-cmd.exp: create non-existent variable
+PASS: gdb.mi/mi-var-cmd.exp: create out of scope variable
+PASS: gdb.mi/mi-var-cmd.exp: breakpoint at do_locals_tests
+PASS: gdb.mi/mi-var-cmd.exp: mi runto do_locals_tests
+PASS: gdb.mi/mi-var-cmd.exp: run to 148 (set breakpoint)
+PASS: gdb.mi/mi-var-cmd.exp: create local variable linteger
+PASS: gdb.mi/mi-var-cmd.exp: create local variable lpinteger
+PASS: gdb.mi/mi-var-cmd.exp: create local variable lcharacter
+PASS: gdb.mi/mi-var-cmd.exp: create local variable lpcharacter
+PASS: gdb.mi/mi-var-cmd.exp: create local variable llong
+PASS: gdb.mi/mi-var-cmd.exp: create local variable lplong
+PASS: gdb.mi/mi-var-cmd.exp: create local variable lfloat
+PASS: gdb.mi/mi-var-cmd.exp: create local variable lpfloat
+PASS: gdb.mi/mi-var-cmd.exp: create local variable ldouble
+PASS: gdb.mi/mi-var-cmd.exp: create local variable lpdouble
+PASS: gdb.mi/mi-var-cmd.exp: create local variable lsimple
+PASS: gdb.mi/mi-var-cmd.exp: create local variable lpsimple
+PASS: gdb.mi/mi-var-cmd.exp: create local variable func
+PASS: gdb.mi/mi-var-cmd.exp: create lsimple.character
+PASS: gdb.mi/mi-var-cmd.exp: create lsimple->integer
+PASS: gdb.mi/mi-var-cmd.exp: create lsimple.integer
+PASS: gdb.mi/mi-var-cmd.exp: create int
+PASS: gdb.mi/mi-var-cmd.exp: update all vars
+PASS: gdb.mi/mi-var-cmd.exp: step at do_locals_test
+PASS: gdb.mi/mi-var-cmd.exp: update all vars: linteger changed
+PASS: gdb.mi/mi-var-cmd.exp: step at do_locals_tests (2)
+PASS: gdb.mi/mi-var-cmd.exp: update all vars: lpinteger changed
+PASS: gdb.mi/mi-var-cmd.exp: step at do_locals_tests (3)
+PASS: gdb.mi/mi-var-cmd.exp: update all vars: lcharacter changed
+PASS: gdb.mi/mi-var-cmd.exp: step at do_locals_tests (4)
+PASS: gdb.mi/mi-var-cmd.exp: update all vars: lpcharacter changed
+PASS: gdb.mi/mi-var-cmd.exp: step at do_locals_tests (5)
+PASS: gdb.mi/mi-var-cmd.exp: update all vars: many changed
+PASS: gdb.mi/mi-var-cmd.exp: step at do_locals_tests (6)
+PASS: gdb.mi/mi-var-cmd.exp: update all vars: func and lpsimple changed
+PASS: gdb.mi/mi-var-cmd.exp: step at do_locals_tests (7)
+PASS: gdb.mi/mi-var-cmd.exp: update all vars: lsimple and others changed
+PASS: gdb.mi/mi-var-cmd.exp: assign to global_simple
+PASS: gdb.mi/mi-var-cmd.exp: assign to linteger
+PASS: gdb.mi/mi-var-cmd.exp: update all vars: linteger changed after assign
+PASS: gdb.mi/mi-var-cmd.exp: assign to linteger again, same value
+PASS: gdb.mi/mi-var-cmd.exp: update all vars: linteger not changed after same assign
+PASS: gdb.mi/mi-var-cmd.exp: eval linteger
+PASS: gdb.mi/mi-var-cmd.exp: assign to lpinteger
+PASS: gdb.mi/mi-var-cmd.exp: update all vars: lpinteger changed after assign
+PASS: gdb.mi/mi-var-cmd.exp: update all vars: no changes on second update
+PASS: gdb.mi/mi-var-cmd.exp: eval lpinteger
+PASS: gdb.mi/mi-var-cmd.exp: assign to linteger
+PASS: gdb.mi/mi-var-cmd.exp: assign to lpinteger
+PASS: gdb.mi/mi-var-cmd.exp: assign to lcharacter
+PASS: gdb.mi/mi-var-cmd.exp: eval lcharacter
+PASS: gdb.mi/mi-var-cmd.exp: assign to llong
+PASS: gdb.mi/mi-var-cmd.exp: eval llong
+PASS: gdb.mi/mi-var-cmd.exp: assign to llong
+PASS: gdb.mi/mi-var-cmd.exp: assign to lplong
+PASS: gdb.mi/mi-var-cmd.exp: eval lplong
+PASS: gdb.mi/mi-var-cmd.exp: assign to lplong
+PASS: gdb.mi/mi-var-cmd.exp: assign to lfloat
+PASS: gdb.mi/mi-var-cmd.exp: eval lfloat
+PASS: gdb.mi/mi-var-cmd.exp: assign to lfloat
+PASS: gdb.mi/mi-var-cmd.exp: assign to lpfloat
+PASS: gdb.mi/mi-var-cmd.exp: assign to ldouble
+PASS: gdb.mi/mi-var-cmd.exp: assign to func
+PASS: gdb.mi/mi-var-cmd.exp: assign to lsimple.character
+PASS: gdb.mi/mi-var-cmd.exp: assign to lsimple->integer
+PASS: gdb.mi/mi-var-cmd.exp: assign to lsimple.integer
+PASS: gdb.mi/mi-var-cmd.exp: var update
+PASS: gdb.mi/mi-var-cmd.exp: assign same value to func
+PASS: gdb.mi/mi-var-cmd.exp: assign same value to func (update)
+PASS: gdb.mi/mi-var-cmd.exp: create global variable array_ptr
+PASS: gdb.mi/mi-var-cmd.exp: assign array to pointer
+PASS: gdb.mi/mi-var-cmd.exp: assign array to pointer (update)
+PASS: gdb.mi/mi-var-cmd.exp: assign same array to pointer
+PASS: gdb.mi/mi-var-cmd.exp: assign same array to pointer (update)
+PASS: gdb.mi/mi-var-cmd.exp: breakpoint at subroutine1
+PASS: gdb.mi/mi-var-cmd.exp: mi runto subroutine1
+PASS: gdb.mi/mi-var-cmd.exp: create i
+PASS: gdb.mi/mi-var-cmd.exp: create l
+PASS: gdb.mi/mi-var-cmd.exp: create linteger
+FAIL: gdb.mi/mi-var-cmd.exp: step at subroutine1 (stopped at wrong place)
+XFAIL: gdb.mi/mi-var-cmd.exp: update all vars: changed FIXME
+FAIL: gdb.mi/mi-var-cmd.exp: step at subroutine1 (2) (stopped at wrong place)
+FAIL: gdb.mi/mi-var-cmd.exp: update all vars: i changed
+FAIL: gdb.mi/mi-var-cmd.exp: step at subroutine1 (3) (stopped at wrong place)
+FAIL: gdb.mi/mi-var-cmd.exp: update all vars: llong changed
+FAIL: gdb.mi/mi-var-cmd.exp: next out of subroutine1 (stopped at wrong place)
+FAIL: gdb.mi/mi-var-cmd.exp: update all vars: all now out of scope
+PASS: gdb.mi/mi-var-cmd.exp: delete var
+PASS: gdb.mi/mi-var-cmd.exp: delete var linteger
+PASS: gdb.mi/mi-var-cmd.exp: delete var lpinteger
+PASS: gdb.mi/mi-var-cmd.exp: delete var lcharacter
+PASS: gdb.mi/mi-var-cmd.exp: delete var lpcharacter
+PASS: gdb.mi/mi-var-cmd.exp: delete var llong
+PASS: gdb.mi/mi-var-cmd.exp: delete var lplong
+PASS: gdb.mi/mi-var-cmd.exp: delete var lfloat
+PASS: gdb.mi/mi-var-cmd.exp: delete var lpfloat
+PASS: gdb.mi/mi-var-cmd.exp: delete var ldouble
+PASS: gdb.mi/mi-var-cmd.exp: delete var lpdouble
+PASS: gdb.mi/mi-var-cmd.exp: delete var lsimple
+PASS: gdb.mi/mi-var-cmd.exp: delete var lpsimple
+PASS: gdb.mi/mi-var-cmd.exp: delete var func
+PASS: gdb.mi/mi-var-cmd.exp: delete var lsimple.character
+PASS: gdb.mi/mi-var-cmd.exp: delete var lsimple->integer
+PASS: gdb.mi/mi-var-cmd.exp: delete var lsimple.integer
+PASS: gdb.mi/mi-var-cmd.exp: delete var i
+PASS: gdb.mi/mi-var-cmd.exp: delete var l
+PASS: gdb.mi/mi-var-cmd.exp: breakpoint at do_special_tests
+PASS: gdb.mi/mi-var-cmd.exp: mi runto do_special_tests
+PASS: gdb.mi/mi-var-cmd.exp: create selected_a
+PASS: gdb.mi/mi-var-cmd.exp: breakpoint at incr_a
+PASS: gdb.mi/mi-var-cmd.exp: mi runto incr_a
+PASS: gdb.mi/mi-var-cmd.exp: update selected_a in incr_a
+PASS: gdb.mi/mi-var-cmd.exp: step a line in incr_a
+PASS: gdb.mi/mi-var-cmd.exp: return from incr_a to do_special_tests
+PASS: gdb.mi/mi-var-cmd.exp: update selected_a in do_special_tests
+PASS: gdb.mi/mi-var-cmd.exp: floating varobj invalidation
+PASS: gdb.mi/mi-var-cmd.exp: delete selected_a
+PASS: gdb.mi/mi-var-cmd.exp: delete array_ptr
+FAIL: gdb.mi/mi-var-cmd.exp: run to var-cmd.c:351 (set breakpoint)
+FAIL: gdb.mi/mi-var-cmd.exp: wait for stop (frozen: step to 351)
+FAIL: gdb.mi/mi-var-cmd.exp: frozen: go to line 351
+FAIL: gdb.mi/mi-var-cmd.exp: frozen: step over 351 (MI error)
+PASS: gdb.mi/mi-var-cmd.exp: run to var-cmd.c:510 (set breakpoint)
+PASS: gdb.mi/mi-var-cmd.exp: create varobj for Data
+PASS: gdb.mi/mi-var-cmd.exp: list children of Data
+PASS: gdb.mi/mi-var-cmd.exp: access bitfield
+PASS: gdb.mi/mi-var-cmd.exp: run to var-cmd.c:453 (set breakpoint)
+PASS: gdb.mi/mi-var-cmd.exp: create floating varobj
+PASS: gdb.mi/mi-var-cmd.exp: update F (1)
+PASS: gdb.mi/mi-var-cmd.exp: check F (1)
+PASS: gdb.mi/mi-var-cmd.exp: run to var-cmd.c:464 (set breakpoint)
+PASS: gdb.mi/mi-var-cmd.exp: update F (2)
+PASS: gdb.mi/mi-var-cmd.exp: check F (2)
+PASS: gdb.mi/mi-var-cmd.exp: run to var-cmd.c:472 (set breakpoint)
+PASS: gdb.mi/mi-var-cmd.exp: update F (--all-values)
+PASS: gdb.mi/mi-var-cmd.exp: run to var-cmd.c:478 (set breakpoint)
+PASS: gdb.mi/mi-var-cmd.exp: update F (3)
+PASS: gdb.mi/mi-var-cmd.exp: check F (3)
+PASS: gdb.mi/mi-var-cmd.exp: inside breakpoint inside callee
+PASS: gdb.mi/mi-var-cmd.exp: continue to where i is initialized
+PASS: gdb.mi/mi-var-cmd.exp: update F inside callee
+PASS: gdb.mi/mi-var-cmd.exp: check F inside callee
+PASS: gdb.mi/mi-var-cmd.exp: create null_ptr
+PASS: gdb.mi/mi-var-cmd.exp: update null_ptr
+PASS: gdb.mi/mi-var-cmd.exp: delete null_ptr
+PASS: gdb.mi/mi-var-cmd.exp: kill program before endvar
+PASS: gdb.mi/mi-var-cmd.exp: create endvar
+PASS: gdb.mi/mi-var-cmd.exp: update endvar
+PASS: gdb.mi/mi-var-cmd.exp: delete endvar
+PASS: gdb.mi/mi-var-cmd.exp: breakpoint at do_locals_tests
+PASS: gdb.mi/mi-var-cmd.exp: mi runto do_locals_tests
+PASS: gdb.mi/mi-var-cmd.exp: in-and-out-of-scope: create varobj
+PASS: gdb.mi/mi-var-cmd.exp: in-and-out-of-scope: check initial value
+PASS: gdb.mi/mi-var-cmd.exp: breakpoint at main
+PASS: gdb.mi/mi-var-cmd.exp: mi runto main
+PASS: gdb.mi/mi-var-cmd.exp: in-and-out-of-scope: out of scope now
+PASS: gdb.mi/mi-var-cmd.exp: in-and-out-of-scope: out of scope now, not changed
+PASS: gdb.mi/mi-var-cmd.exp: breakpoint at do_locals_tests
+PASS: gdb.mi/mi-var-cmd.exp: mi runto do_locals_tests
+PASS: gdb.mi/mi-var-cmd.exp: in-and-out-of-scope: in scope now
+PASS: gdb.mi/mi-var-cmd.exp: in-and-out-of-scope: in scope now, not changed
+Running ./gdb.mi/mi-var-cp.exp ...
+PASS: gdb.mi/mi-var-cp.exp: run to mi-var-cp.cc:20 (set breakpoint)
+PASS: gdb.mi/mi-var-cp.exp: create varobj for rx
+PASS: gdb.mi/mi-var-cp.exp: update RX (1)
+PASS: gdb.mi/mi-var-cp.exp: check RX: expect 167
+PASS: gdb.mi/mi-var-cp.exp: update RX (2)
+PASS: gdb.mi/mi-var-cp.exp: check RX: expect 567
+PASS: gdb.mi/mi-var-cp.exp: update RX (3)
+PASS: gdb.mi/mi-var-cp.exp: delete RX
+PASS: gdb.mi/mi-var-cp.exp: run to mi-var-cp.cc:46 (set breakpoint)
+PASS: gdb.mi/mi-var-cp.exp: create varobj for s2
+PASS: gdb.mi/mi-var-cp.exp: list children of s2
+PASS: gdb.mi/mi-var-cp.exp: list children of s2.s
+PASS: gdb.mi/mi-var-cp.exp: list children of s2.s.public
+PASS: gdb.mi/mi-var-cp.exp: check S2.S.public.i
+PASS: gdb.mi/mi-var-cp.exp: check S2.S.public.j
+PASS: gdb.mi/mi-var-cp.exp: delete S2
+PASS: gdb.mi/mi-var-cp.exp: run to mi-var-cp.cc:82 (set breakpoint)
+PASS: gdb.mi/mi-var-cp.exp: create varobj for rptr_s
+PASS: gdb.mi/mi-var-cp.exp: list public child of RPTR
+PASS: gdb.mi/mi-var-cp.exp: list children of reference to pointer
+PASS: gdb.mi/mi-var-cp.exp: check i member
+PASS: gdb.mi/mi-var-cp.exp: check j member
+PASS: gdb.mi/mi-var-cp.exp: delete RPTR
+PASS: gdb.mi/mi-var-cp.exp: run to mi-var-cp.cc:105 (set breakpoint)
+PASS: gdb.mi/mi-var-cp.exp: create varobj for s
+PASS: gdb.mi/mi-var-cp.exp: create varobj for s
+PASS: gdb.mi/mi-var-cp.exp: check attributes of S
+PASS: gdb.mi/mi-var-cp.exp: check attributes of R
+PASS: gdb.mi/mi-var-cp.exp: -var-update should not list structure varobjs
+PASS: gdb.mi/mi-var-cp.exp: run to mi-var-cp.cc:145 (set breakpoint)
+PASS: gdb.mi/mi-var-cp.exp: create varobj for ip
+PASS: gdb.mi/mi-var-cp.exp: list children of IP
+PASS: gdb.mi/mi-var-cp.exp: -var-info-path-expression IP.*ip
+PASS: gdb.mi/mi-var-cp.exp: create varobj for dp
+PASS: gdb.mi/mi-var-cp.exp: list children of DP
+PASS: gdb.mi/mi-var-cp.exp: -var-info-path-expression DP.Base1
+PASS: gdb.mi/mi-var-cp.exp: list children of DP.public
+PASS: gdb.mi/mi-var-cp.exp: -var-info-path-expression DP.public.i
+PASS: gdb.mi/mi-var-cp.exp: list children of DP.Base1
+PASS: gdb.mi/mi-var-cp.exp: list children of DP.Base1.public
+PASS: gdb.mi/mi-var-cp.exp: -var-info-path-expression DP.Base1.public.i
+PASS: gdb.mi/mi-var-cp.exp: -var-info-path-expression DP.public
+PASS: gdb.mi/mi-var-cp.exp: create varobj for d
+PASS: gdb.mi/mi-var-cp.exp: list children of D
+PASS: gdb.mi/mi-var-cp.exp: -var-info-path-expression D.Base1
+PASS: gdb.mi/mi-var-cp.exp: run to mi-var-cp.cc:192 (set breakpoint)
+PASS: gdb.mi/mi-var-cp.exp: create varobj for array
+PASS: gdb.mi/mi-var-cp.exp: list children of A
+PASS: gdb.mi/mi-var-cp.exp: -var-info-path-expression A.2
+PASS: gdb.mi/mi-var-cp.exp: break in anonymous_structs_and_unions
+PASS: gdb.mi/mi-var-cp.exp: continue to anonymous_structs breakpoint
+PASS: gdb.mi/mi-var-cp.exp: VT: create root varobj for a
+PASS: gdb.mi/mi-var-cp.exp: VT: list children of a1
+PASS: gdb.mi/mi-var-cp.exp: path expression for a1
+PASS: gdb.mi/mi-var-cp.exp: expression for a1
+PASS: gdb.mi/mi-var-cp.exp: VT: list children of a1.public
+PASS: gdb.mi/mi-var-cp.exp: path expression for a1.public
+PASS: gdb.mi/mi-var-cp.exp: expression for a1.public
+PASS: gdb.mi/mi-var-cp.exp: VT: list children of a1.public.0_anonymous
+PASS: gdb.mi/mi-var-cp.exp: path expression for a1.public.0_anonymous
+PASS: gdb.mi/mi-var-cp.exp: expression for a1.public.0_anonymous
+PASS: gdb.mi/mi-var-cp.exp: VT: list children of a1.public.1_anonymous
+PASS: gdb.mi/mi-var-cp.exp: path expression for a1.public.1_anonymous
+PASS: gdb.mi/mi-var-cp.exp: expression for a1.public.1_anonymous
+PASS: gdb.mi/mi-var-cp.exp: VT: list children of a1.public.2_anonymous
+PASS: gdb.mi/mi-var-cp.exp: path expression for a1.public.2_anonymous
+PASS: gdb.mi/mi-var-cp.exp: expression for a1.public.2_anonymous
+PASS: gdb.mi/mi-var-cp.exp: VT: list children of a1.public.0_anonymous.public
+PASS: gdb.mi/mi-var-cp.exp: path expression for a1.public.0_anonymous.public
+PASS: gdb.mi/mi-var-cp.exp: expression for a1.public.0_anonymous.public
+PASS: gdb.mi/mi-var-cp.exp: VT: list children of a1.public.1_anonymous.public
+PASS: gdb.mi/mi-var-cp.exp: path expression for a1.public.1_anonymous.public
+PASS: gdb.mi/mi-var-cp.exp: expression for a1.public.1_anonymous.public
+PASS: gdb.mi/mi-var-cp.exp: VT: list children of a1.public.2_anonymous.public
+PASS: gdb.mi/mi-var-cp.exp: path expression for a1.public.2_anonymous.public
+PASS: gdb.mi/mi-var-cp.exp: expression for a1.public.2_anonymous.public
+PASS: gdb.mi/mi-var-cp.exp: path expression for a1.public.0_anonymous.public.b
+PASS: gdb.mi/mi-var-cp.exp: expression for a1.public.0_anonymous.public.b
+PASS: gdb.mi/mi-var-cp.exp: path expression for a1.public.1_anonymous.public.c
+PASS: gdb.mi/mi-var-cp.exp: expression for a1.public.1_anonymous.public.c
+PASS: gdb.mi/mi-var-cp.exp: path expression for a1.public.2_anonymous.public.d
+PASS: gdb.mi/mi-var-cp.exp: expression for a1.public.2_anonymous.public.d
+PASS: gdb.mi/mi-var-cp.exp: VT: list children of a1.public.2_anonymous.public.1_anonymous
+PASS: gdb.mi/mi-var-cp.exp: path expression for a1.public.2_anonymous.public.1_anonymous
+PASS: gdb.mi/mi-var-cp.exp: expression for a1.public.2_anonymous.public.1_anonymous
+PASS: gdb.mi/mi-var-cp.exp: VT: list children of a1.public.2_anonymous.public.1_anonymous.public
+PASS: gdb.mi/mi-var-cp.exp: path expression for a1.public.2_anonymous.public.1_anonymous.public
+PASS: gdb.mi/mi-var-cp.exp: expression for a1.public.2_anonymous.public.1_anonymous.public
+PASS: gdb.mi/mi-var-cp.exp: path expression for a1.public.2_anonymous.public.1_anonymous.public.e
+PASS: gdb.mi/mi-var-cp.exp: expression for a1.public.2_anonymous.public.1_anonymous.public.e
+PASS: gdb.mi/mi-var-cp.exp: VT: list children of a1.public.2_anonymous.public.1_anonymous.public.1_anonymous
+PASS: gdb.mi/mi-var-cp.exp: path expression for a1.public.2_anonymous.public.1_anonymous.public.1_anonymous
+PASS: gdb.mi/mi-var-cp.exp: expression for a1.public.2_anonymous.public.1_anonymous.public.1_anonymous
+PASS: gdb.mi/mi-var-cp.exp: VT: list children of a1.public.2_anonymous.public.1_anonymous.public.2_anonymous
+PASS: gdb.mi/mi-var-cp.exp: path expression for a1.public.2_anonymous.public.1_anonymous.public.2_anonymous
+PASS: gdb.mi/mi-var-cp.exp: expression for a1.public.2_anonymous.public.1_anonymous.public.2_anonymous
+PASS: gdb.mi/mi-var-cp.exp: VT: list children of a1.public.2_anonymous.public.1_anonymous.public.1_anonymous.public
+PASS: gdb.mi/mi-var-cp.exp: path expression for a1.public.2_anonymous.public.1_anonymous.public.1_anonymous.public
+PASS: gdb.mi/mi-var-cp.exp: expression for a1.public.2_anonymous.public.1_anonymous.public.1_anonymous.public
+PASS: gdb.mi/mi-var-cp.exp: VT: list children of a1.public.2_anonymous.public.1_anonymous.public.2_anonymous.public
+PASS: gdb.mi/mi-var-cp.exp: path expression for a1.public.2_anonymous.public.1_anonymous.public.2_anonymous.public
+PASS: gdb.mi/mi-var-cp.exp: expression for a1.public.2_anonymous.public.1_anonymous.public.2_anonymous.public
+PASS: gdb.mi/mi-var-cp.exp: path expression for a1.public.2_anonymous.public.1_anonymous.public.1_anonymous.public.f
+PASS: gdb.mi/mi-var-cp.exp: expression for a1.public.2_anonymous.public.1_anonymous.public.1_anonymous.public.f
+PASS: gdb.mi/mi-var-cp.exp: VT: list children of a1.public.2_anonymous.public.1_anonymous.public.1_anonymous.public.1_anonymous
+PASS: gdb.mi/mi-var-cp.exp: path expression for a1.public.2_anonymous.public.1_anonymous.public.1_anonymous.public.1_anonymous
+PASS: gdb.mi/mi-var-cp.exp: expression for a1.public.2_anonymous.public.1_anonymous.public.1_anonymous.public.1_anonymous
+PASS: gdb.mi/mi-var-cp.exp: path expression for a1.public.2_anonymous.public.1_anonymous.public.2_anonymous.public.i
+PASS: gdb.mi/mi-var-cp.exp: expression for a1.public.2_anonymous.public.1_anonymous.public.2_anonymous.public.i
+PASS: gdb.mi/mi-var-cp.exp: path expression for a1.public.2_anonymous.public.1_anonymous.public.2_anonymous.public.j
+PASS: gdb.mi/mi-var-cp.exp: expression for a1.public.2_anonymous.public.1_anonymous.public.2_anonymous.public.j
+PASS: gdb.mi/mi-var-cp.exp: VT: list children of a1.public.2_anonymous.public.1_anonymous.public.1_anonymous.public.1_anonymous.public
+PASS: gdb.mi/mi-var-cp.exp: path expression for a1.public.2_anonymous.public.1_anonymous.public.1_anonymous.public.1_anonymous.public
+PASS: gdb.mi/mi-var-cp.exp: expression for a1.public.2_anonymous.public.1_anonymous.public.1_anonymous.public.1_anonymous.public
+PASS: gdb.mi/mi-var-cp.exp: path expression for a1.public.2_anonymous.public.1_anonymous.public.1_anonymous.public.1_anonymous.public.g
+PASS: gdb.mi/mi-var-cp.exp: expression for a1.public.2_anonymous.public.1_anonymous.public.1_anonymous.public.1_anonymous.public.g
+PASS: gdb.mi/mi-var-cp.exp: path expression for a1.public.2_anonymous.public.1_anonymous.public.1_anonymous.public.1_anonymous.public.h
+PASS: gdb.mi/mi-var-cp.exp: expression for a1.public.2_anonymous.public.1_anonymous.public.1_anonymous.public.1_anonymous.public.h
+Running ./gdb.mi/mi-var-create-rtti.exp ...
+PASS: gdb.mi/mi-var-create-rtti.exp: breakpoint at main
+PASS: gdb.mi/mi-var-create-rtti.exp: mi runto main
+PASS: gdb.mi/mi-var-create-rtti.exp: -var-create sp1 * $sp
+Running ./gdb.mi/mi-var-display.exp ...
+PASS: gdb.mi/mi-var-display.exp: break-insert operation
+PASS: gdb.mi/mi-var-display.exp: run to main
+PASS: gdb.mi/mi-var-display.exp: create local variable bar
+PASS: gdb.mi/mi-var-display.exp: info type variable bar
+PASS: gdb.mi/mi-var-display.exp: show format variable bar
+PASS: gdb.mi/mi-var-display.exp: eval variable bar
+PASS: gdb.mi/mi-var-display.exp: set format variable bar
+PASS: gdb.mi/mi-var-display.exp: eval variable bar with new format
+PASS: gdb.mi/mi-var-display.exp: assing to variable bar
+PASS: gdb.mi/mi-var-display.exp: set format variable bar
+PASS: gdb.mi/mi-var-display.exp: eval variable bar with new value
+PASS: gdb.mi/mi-var-display.exp: delete var bar
+PASS: gdb.mi/mi-var-display.exp: create local variable foo
+PASS: gdb.mi/mi-var-display.exp: info type variable foo
+PASS: gdb.mi/mi-var-display.exp: show format variable foo
+PASS: gdb.mi/mi-var-display.exp: eval variable foo
+PASS: gdb.mi/mi-var-display.exp: set format variable foo
+PASS: gdb.mi/mi-var-display.exp: show format variable foo
+PASS: gdb.mi/mi-var-display.exp: eval variable foo
+PASS: gdb.mi/mi-var-display.exp: assing to variable foo
+PASS: gdb.mi/mi-var-display.exp: set format variable foo
+PASS: gdb.mi/mi-var-display.exp: eval variable foo
+PASS: gdb.mi/mi-var-display.exp: eval variable foo in hex
+PASS: gdb.mi/mi-var-display.exp: show format variable foo after eval in hex
+PASS: gdb.mi/mi-var-display.exp: eval variable foo in octal
+PASS: gdb.mi/mi-var-display.exp: show format variable foo after eval in octal
+PASS: gdb.mi/mi-var-display.exp: eval variable foo in decimal
+PASS: gdb.mi/mi-var-display.exp: show format variable foo after eval in decimal
+PASS: gdb.mi/mi-var-display.exp: eval variable foo in natural
+PASS: gdb.mi/mi-var-display.exp: show format variable foo after eval in natural
+PASS: gdb.mi/mi-var-display.exp: eval variable foo in binary
+PASS: gdb.mi/mi-var-display.exp: show format variable foo after eval in binary
+PASS: gdb.mi/mi-var-display.exp: delete var foo
+PASS: gdb.mi/mi-var-display.exp: create local variable weird
+PASS: gdb.mi/mi-var-display.exp: get children local variable weird
+PASS: gdb.mi/mi-var-display.exp: set format variable weird.func_ptr
+PASS: gdb.mi/mi-var-display.exp: show format variable weird.func_ptr
+PASS: gdb.mi/mi-var-display.exp: set format variable weird.func_ptr_ptr
+PASS: gdb.mi/mi-var-display.exp: show format variable weird.func_ptr_ptr
+PASS: gdb.mi/mi-var-display.exp: set format variable weird
+PASS: gdb.mi/mi-var-display.exp: set format variable weird.integer
+PASS: gdb.mi/mi-var-display.exp: set format variable weird.character
+PASS: gdb.mi/mi-var-display.exp: set format variable weird.char_ptr
+PASS: gdb.mi/mi-var-display.exp: set format variable weird.long_int
+PASS: gdb.mi/mi-var-display.exp: set format variable weird.int_ptr_ptr
+PASS: gdb.mi/mi-var-display.exp: set format variable weird.long_array
+PASS: gdb.mi/mi-var-display.exp: set format variable weird.func_ptr
+PASS: gdb.mi/mi-var-display.exp: set format variable weird.func_ptr_struct
+PASS: gdb.mi/mi-var-display.exp: set format variable weird.func_ptr_ptr
+PASS: gdb.mi/mi-var-display.exp: set format variable weird.u1
+PASS: gdb.mi/mi-var-display.exp: set format variable weird.s2
+PASS: gdb.mi/mi-var-display.exp: delete var weird
+PASS: gdb.mi/mi-var-display.exp: break-insert operation 2
+PASS: gdb.mi/mi-var-display.exp: continue to do_special_tests
+PASS: gdb.mi/mi-var-display.exp: create local variable u
+PASS: gdb.mi/mi-var-display.exp: eval variable u
+PASS: gdb.mi/mi-var-display.exp: info type variable u
+PASS: gdb.mi/mi-var-display.exp: is u editable
+PASS: gdb.mi/mi-var-display.exp: get number of children of u
+PASS: gdb.mi/mi-var-display.exp: get children of u
+PASS: gdb.mi/mi-var-display.exp: create local variable anonu
+PASS: gdb.mi/mi-var-display.exp: eval variable anonu
+PASS: gdb.mi/mi-var-display.exp: info type variable anonu
+PASS: gdb.mi/mi-var-display.exp: is anonu editable
+PASS: gdb.mi/mi-var-display.exp: get number of children of anonu
+PASS: gdb.mi/mi-var-display.exp: get children of anonu
+PASS: gdb.mi/mi-var-display.exp: create local variable s
+PASS: gdb.mi/mi-var-display.exp: eval variable s
+PASS: gdb.mi/mi-var-display.exp: info type variable s
+PASS: gdb.mi/mi-var-display.exp: is s editable
+PASS: gdb.mi/mi-var-display.exp: get number of children of s
+PASS: gdb.mi/mi-var-display.exp: get children of s
+PASS: gdb.mi/mi-var-display.exp: create local variable anons
+PASS: gdb.mi/mi-var-display.exp: eval variable anons
+PASS: gdb.mi/mi-var-display.exp: info type variable anons
+PASS: gdb.mi/mi-var-display.exp: is anons editable
+PASS: gdb.mi/mi-var-display.exp: get number of children of anons
+PASS: gdb.mi/mi-var-display.exp: get children of anons
+PASS: gdb.mi/mi-var-display.exp: create local variable e
+PASS: gdb.mi/mi-var-display.exp: eval variable e
+PASS: gdb.mi/mi-var-display.exp: info type variable e
+PASS: gdb.mi/mi-var-display.exp: is e editable
+PASS: gdb.mi/mi-var-display.exp: get number of children of e
+PASS: gdb.mi/mi-var-display.exp: get children of e
+PASS: gdb.mi/mi-var-display.exp: create local variable anone
+PASS: gdb.mi/mi-var-display.exp: eval variable anone
+PASS: gdb.mi/mi-var-display.exp: create duplicate local variable anone
+PASS: gdb.mi/mi-var-display.exp: info type variable anone
+PASS: gdb.mi/mi-var-display.exp: is anone editable
+PASS: gdb.mi/mi-var-display.exp: get number of children of anone
+PASS: gdb.mi/mi-var-display.exp: get children of anone
+PASS: gdb.mi/mi-var-display.exp: print FP register
+PASS: gdb.mi/mi-var-display.exp: breakpoint at incr_a
+PASS: gdb.mi/mi-var-display.exp: mi runto incr_a
+PASS: gdb.mi/mi-var-display.exp: create local variable a1
+PASS: gdb.mi/mi-var-display.exp: create variable a2 in different scope
+Running ./gdb.mi/mi-var-invalidate.exp ...
+PASS: gdb.mi/mi-var-invalidate.exp: create global variable
+PASS: gdb.mi/mi-var-invalidate.exp: breakpoint at do_locals_tests
+PASS: gdb.mi/mi-var-invalidate.exp: mi runto do_locals_tests
+PASS: gdb.mi/mi-var-invalidate.exp: create local variable linteger
+PASS: gdb.mi/mi-var-invalidate.exp: create floating variable
+FAIL: gdb.mi/mi-var-invalidate.exp: breakpoint at main
+FAIL: gdb.mi/mi-var-invalidate.exp: mi runto main (unknown output after running)
+PASS: gdb.mi/mi-var-invalidate.exp: set format variable float_simple
+PASS: gdb.mi/mi-var-invalidate.exp: linteger not anymore in scope due to binary changes
+PASS: gdb.mi/mi-var-invalidate.exp: no type for invalid variable linteger (1)
+PASS: gdb.mi/mi-var-invalidate.exp: global_simple still alive
+PASS: gdb.mi/mi-var-invalidate.exp: type simpleton for valid variable global_simple
+PASS: gdb.mi/mi-var-invalidate.exp: linteger not valid anymore due to binary changes
+PASS: gdb.mi/mi-var-invalidate.exp: no type for invalid variable linteger (2)
+PASS: gdb.mi/mi-var-invalidate.exp: global_simple not anymore in scope due to binary changes
+PASS: gdb.mi/mi-var-invalidate.exp: no type for invalid variable global_simple
+Running ./gdb.mi/mi-var-rtti.exp ...
+PASS: gdb.mi/mi-var-rtti.exp: run to mi-var-rtti.cc:37 (set breakpoint)
+PASS: gdb.mi/mi-var-rtti.exp: -interpreter-exec console "set print object off" in use_rtti_for_ptr
+PASS: gdb.mi/mi-var-rtti.exp: create varobj for ptr (without RTTI) in use_rtti_for_ptr
+PASS: gdb.mi/mi-var-rtti.exp: list children of ptr (without RTTI) in use_rtti_for_ptr
+PASS: gdb.mi/mi-var-rtti.exp: list children of ptr.public (without RTTI) in use_rtti_for_ptr
+PASS: gdb.mi/mi-var-rtti.exp: check ptr->A (without RTTI) in use_rtti_for_ptr
+PASS: gdb.mi/mi-var-rtti.exp: delete varobj for ptr (without RTTI) in use_rtti_for_ptr
+PASS: gdb.mi/mi-var-rtti.exp: create varobj for constPtr (without RTTI) in use_rtti_for_ptr
+PASS: gdb.mi/mi-var-rtti.exp: list children of constPtr (without RTTI) in use_rtti_for_ptr
+PASS: gdb.mi/mi-var-rtti.exp: list children of constPtr.public (without RTTI) in use_rtti_for_ptr
+PASS: gdb.mi/mi-var-rtti.exp: check constPtr->A (without RTTI) in use_rtti_for_ptr
+PASS: gdb.mi/mi-var-rtti.exp: delete varobj for constPtr (without RTTI) in use_rtti_for_ptr
+PASS: gdb.mi/mi-var-rtti.exp: create varobj for ptrConst (without RTTI) in use_rtti_for_ptr
+PASS: gdb.mi/mi-var-rtti.exp: list children of ptrConst (without RTTI) in use_rtti_for_ptr
+PASS: gdb.mi/mi-var-rtti.exp: list children of ptrConst.public (without RTTI) in use_rtti_for_ptr
+PASS: gdb.mi/mi-var-rtti.exp: check ptrConst->A (without RTTI) in use_rtti_for_ptr
+PASS: gdb.mi/mi-var-rtti.exp: delete varobj for ptrConst (without RTTI) in use_rtti_for_ptr
+PASS: gdb.mi/mi-var-rtti.exp: create varobj for constPtrConst (without RTTI) in use_rtti_for_ptr
+PASS: gdb.mi/mi-var-rtti.exp: list children of constPtrConst (without RTTI) in use_rtti_for_ptr
+PASS: gdb.mi/mi-var-rtti.exp: list children of constPtrConst.public (without RTTI) in use_rtti_for_ptr
+PASS: gdb.mi/mi-var-rtti.exp: check constPtrConst->A (without RTTI) in use_rtti_for_ptr
+PASS: gdb.mi/mi-var-rtti.exp: delete varobj for constPtrConst (without RTTI) in use_rtti_for_ptr
+PASS: gdb.mi/mi-var-rtti.exp: -interpreter-exec console "set print object on" in use_rtti_for_ptr
+PASS: gdb.mi/mi-var-rtti.exp: create varobj for ptr (with RTTI) in use_rtti_for_ptr
+PASS: gdb.mi/mi-var-rtti.exp: list children of ptr (with RTTI) in use_rtti_for_ptr
+PASS: gdb.mi/mi-var-rtti.exp: list children of ptr.Base (with RTTI) in use_rtti_for_ptr
+PASS: gdb.mi/mi-var-rtti.exp: list children of ptr.Base.public (with RTTI) in use_rtti_for_ptr
+PASS: gdb.mi/mi-var-rtti.exp: list children of ptr.public (with RTTI) in use_rtti_for_ptr
+PASS: gdb.mi/mi-var-rtti.exp: check ptr->A (with RTTI) in use_rtti_for_ptr
+PASS: gdb.mi/mi-var-rtti.exp: check ptr->B (with RTTI) in use_rtti_for_ptr
+PASS: gdb.mi/mi-var-rtti.exp: check ptr->C (with RTTI) in use_rtti_for_ptr
+PASS: gdb.mi/mi-var-rtti.exp: delete varobj for ptr (with RTTI) in use_rtti_for_ptr
+PASS: gdb.mi/mi-var-rtti.exp: create varobj for constPtr (with RTTI) in use_rtti_for_ptr
+PASS: gdb.mi/mi-var-rtti.exp: list children of constPtr (with RTTI) in use_rtti_for_ptr
+PASS: gdb.mi/mi-var-rtti.exp: list children of constPtr.Base (with RTTI) in use_rtti_for_ptr
+PASS: gdb.mi/mi-var-rtti.exp: list children of constPtr.Base.public (with RTTI) in use_rtti_for_ptr
+PASS: gdb.mi/mi-var-rtti.exp: list children of constPtr.public (with RTTI) in use_rtti_for_ptr
+PASS: gdb.mi/mi-var-rtti.exp: check constPtr->A (with RTTI) in use_rtti_for_ptr
+PASS: gdb.mi/mi-var-rtti.exp: check constPtr->B (with RTTI) in use_rtti_for_ptr
+PASS: gdb.mi/mi-var-rtti.exp: check constPtr->C (with RTTI) in use_rtti_for_ptr
+PASS: gdb.mi/mi-var-rtti.exp: delete varobj for constPtr (with RTTI) in use_rtti_for_ptr
+PASS: gdb.mi/mi-var-rtti.exp: create varobj for ptrConst (with RTTI) in use_rtti_for_ptr
+PASS: gdb.mi/mi-var-rtti.exp: list children of ptrConst (with RTTI) in use_rtti_for_ptr
+PASS: gdb.mi/mi-var-rtti.exp: list children of ptrConst.Base (with RTTI) in use_rtti_for_ptr
+PASS: gdb.mi/mi-var-rtti.exp: list children of ptrConst.Base.public (with RTTI) in use_rtti_for_ptr
+PASS: gdb.mi/mi-var-rtti.exp: list children of ptrConst.public (with RTTI) in use_rtti_for_ptr
+PASS: gdb.mi/mi-var-rtti.exp: check ptrConst->A (with RTTI) in use_rtti_for_ptr
+PASS: gdb.mi/mi-var-rtti.exp: check ptrConst->B (with RTTI) in use_rtti_for_ptr
+PASS: gdb.mi/mi-var-rtti.exp: check ptrConst->C (with RTTI) in use_rtti_for_ptr
+PASS: gdb.mi/mi-var-rtti.exp: delete varobj for ptrConst (with RTTI) in use_rtti_for_ptr
+PASS: gdb.mi/mi-var-rtti.exp: create varobj for constPtrConst (with RTTI) in use_rtti_for_ptr
+PASS: gdb.mi/mi-var-rtti.exp: list children of constPtrConst (with RTTI) in use_rtti_for_ptr
+PASS: gdb.mi/mi-var-rtti.exp: list children of constPtrConst.Base (with RTTI) in use_rtti_for_ptr
+PASS: gdb.mi/mi-var-rtti.exp: list children of constPtrConst.Base.public (with RTTI) in use_rtti_for_ptr
+PASS: gdb.mi/mi-var-rtti.exp: list children of constPtrConst.public (with RTTI) in use_rtti_for_ptr
+PASS: gdb.mi/mi-var-rtti.exp: check constPtrConst->A (with RTTI) in use_rtti_for_ptr
+PASS: gdb.mi/mi-var-rtti.exp: check constPtrConst->B (with RTTI) in use_rtti_for_ptr
+PASS: gdb.mi/mi-var-rtti.exp: check constPtrConst->C (with RTTI) in use_rtti_for_ptr
+PASS: gdb.mi/mi-var-rtti.exp: delete varobj for constPtrConst (with RTTI) in use_rtti_for_ptr
+PASS: gdb.mi/mi-var-rtti.exp: run to mi-var-rtti.cc:64 (set breakpoint)
+PASS: gdb.mi/mi-var-rtti.exp: -interpreter-exec console "set print object off" in use_rtti_for_ref
+PASS: gdb.mi/mi-var-rtti.exp: create varobj for ref (without RTTI) in use_rtti_for_ref
+PASS: gdb.mi/mi-var-rtti.exp: list children of ref (without RTTI) in use_rtti_for_ref
+PASS: gdb.mi/mi-var-rtti.exp: list children of ref.public (without RTTI) in use_rtti_for_ref
+PASS: gdb.mi/mi-var-rtti.exp: check ref->A (without RTTI) in use_rtti_for_ref
+PASS: gdb.mi/mi-var-rtti.exp: delete varobj for ref (without RTTI) in use_rtti_for_ref
+PASS: gdb.mi/mi-var-rtti.exp: create varobj for constRef (without RTTI) in use_rtti_for_ref
+PASS: gdb.mi/mi-var-rtti.exp: list children of constRef (without RTTI) in use_rtti_for_ref
+PASS: gdb.mi/mi-var-rtti.exp: list children of constRef.public (without RTTI) in use_rtti_for_ref
+PASS: gdb.mi/mi-var-rtti.exp: check constRef->A (without RTTI) in use_rtti_for_ref
+PASS: gdb.mi/mi-var-rtti.exp: delete varobj for constRef (without RTTI) in use_rtti_for_ref
+PASS: gdb.mi/mi-var-rtti.exp: -interpreter-exec console "set print object on" in use_rtti_for_ref
+PASS: gdb.mi/mi-var-rtti.exp: create varobj for ref (with RTTI) in use_rtti_for_ref
+PASS: gdb.mi/mi-var-rtti.exp: list children of ref (with RTTI) in use_rtti_for_ref
+PASS: gdb.mi/mi-var-rtti.exp: list children of ref.Base (with RTTI) in use_rtti_for_ref
+PASS: gdb.mi/mi-var-rtti.exp: list children of ref.Base.public (with RTTI) in use_rtti_for_ref
+PASS: gdb.mi/mi-var-rtti.exp: list children of ref.public (with RTTI) in use_rtti_for_ref
+PASS: gdb.mi/mi-var-rtti.exp: check ref->A (with RTTI) in use_rtti_for_ref
+PASS: gdb.mi/mi-var-rtti.exp: check ref->B (with RTTI) in use_rtti_for_ref
+PASS: gdb.mi/mi-var-rtti.exp: check ref->C (with RTTI) in use_rtti_for_ref
+PASS: gdb.mi/mi-var-rtti.exp: delete varobj for ref (with RTTI) in use_rtti_for_ref
+PASS: gdb.mi/mi-var-rtti.exp: create varobj for constRef (with RTTI) in use_rtti_for_ref
+PASS: gdb.mi/mi-var-rtti.exp: list children of constRef (with RTTI) in use_rtti_for_ref
+PASS: gdb.mi/mi-var-rtti.exp: list children of constRef.Base (with RTTI) in use_rtti_for_ref
+PASS: gdb.mi/mi-var-rtti.exp: list children of constRef.Base.public (with RTTI) in use_rtti_for_ref
+PASS: gdb.mi/mi-var-rtti.exp: list children of constRef.public (with RTTI) in use_rtti_for_ref
+PASS: gdb.mi/mi-var-rtti.exp: check constRef->A (with RTTI) in use_rtti_for_ref
+PASS: gdb.mi/mi-var-rtti.exp: check constRef->B (with RTTI) in use_rtti_for_ref
+PASS: gdb.mi/mi-var-rtti.exp: check constRef->C (with RTTI) in use_rtti_for_ref
+PASS: gdb.mi/mi-var-rtti.exp: delete varobj for constRef (with RTTI) in use_rtti_for_ref
+PASS: gdb.mi/mi-var-rtti.exp: run to mi-var-rtti.cc:94 (set breakpoint)
+PASS: gdb.mi/mi-var-rtti.exp: -interpreter-exec console "set print object off" in use_rtti_for_ptr_child
+PASS: gdb.mi/mi-var-rtti.exp: create varobj for s (without RTTI) in use_rtti_for_ptr_child
+PASS: gdb.mi/mi-var-rtti.exp: list children of s (without RTTI) in use_rtti_for_ptr_child
+PASS: gdb.mi/mi-var-rtti.exp: list children of s.public (without RTTI) in use_rtti_for_ptr_child
+PASS: gdb.mi/mi-var-rtti.exp: list children of s.ptr (without RTTI) in use_rtti_for_ptr_child
+PASS: gdb.mi/mi-var-rtti.exp: list children of s.ptr.public (without RTTI) in use_rtti_for_ptr_child
+PASS: gdb.mi/mi-var-rtti.exp: check s.ptr->A (without RTTI) in use_rtti_for_ptr_child
+PASS: gdb.mi/mi-var-rtti.exp: list children of s.constPtr (without RTTI) in use_rtti_for_ptr_child
+PASS: gdb.mi/mi-var-rtti.exp: list children of s.constPtr.public (without RTTI) in use_rtti_for_ptr_child
+PASS: gdb.mi/mi-var-rtti.exp: check s.constPtr->A (without RTTI) in use_rtti_for_ptr_child
+PASS: gdb.mi/mi-var-rtti.exp: list children of s.ptrConst (without RTTI) in use_rtti_for_ptr_child
+PASS: gdb.mi/mi-var-rtti.exp: list children of s.ptrConst.public (without RTTI) in use_rtti_for_ptr_child
+PASS: gdb.mi/mi-var-rtti.exp: check s.ptrConst->A (without RTTI) in use_rtti_for_ptr_child
+PASS: gdb.mi/mi-var-rtti.exp: list children of s.constPtrConst (without RTTI) in use_rtti_for_ptr_child
+PASS: gdb.mi/mi-var-rtti.exp: list children of s.constPtrConst.public (without RTTI) in use_rtti_for_ptr_child
+PASS: gdb.mi/mi-var-rtti.exp: check s.constPtrConst->A (without RTTI) in use_rtti_for_ptr_child
+PASS: gdb.mi/mi-var-rtti.exp: delete varobj for s (without RTTI) in use_rtti_for_ptr_child
+PASS: gdb.mi/mi-var-rtti.exp: -interpreter-exec console "set print object on" in use_rtti_for_ptr_child
+PASS: gdb.mi/mi-var-rtti.exp: create varobj for s (with RTTI) in use_rtti_for_ptr_child
+PASS: gdb.mi/mi-var-rtti.exp: list children of s (with RTTI) in use_rtti_for_ptr_child
+PASS: gdb.mi/mi-var-rtti.exp: list children of s.public (with RTTI) in use_rtti_for_ptr_child
+PASS: gdb.mi/mi-var-rtti.exp: list children of s.ptr (with RTTI) in use_rtti_for_ptr_child
+PASS: gdb.mi/mi-var-rtti.exp: list children of s.ptr.Base (with RTTI) in use_rtti_for_ptr_child
+PASS: gdb.mi/mi-var-rtti.exp: list children of s.ptr.Base.public (with RTTI) in use_rtti_for_ptr_child
+PASS: gdb.mi/mi-var-rtti.exp: list children of s.ptr.public (with RTTI) in use_rtti_for_ptr_child
+PASS: gdb.mi/mi-var-rtti.exp: check s.ptr->A (with RTTI) in use_rtti_for_ptr_child
+PASS: gdb.mi/mi-var-rtti.exp: check s.ptr->B (with RTTI) in use_rtti_for_ptr_child
+PASS: gdb.mi/mi-var-rtti.exp: check s.ptr->C (with RTTI) in use_rtti_for_ptr_child
+PASS: gdb.mi/mi-var-rtti.exp: list children of s.constPtr (with RTTI) in use_rtti_for_ptr_child
+PASS: gdb.mi/mi-var-rtti.exp: list children of s.constPtr.Base (with RTTI) in use_rtti_for_ptr_child
+PASS: gdb.mi/mi-var-rtti.exp: list children of s.constPtr.Base.public (with RTTI) in use_rtti_for_ptr_child
+PASS: gdb.mi/mi-var-rtti.exp: list children of s.constPtr.public (with RTTI) in use_rtti_for_ptr_child
+PASS: gdb.mi/mi-var-rtti.exp: check s.constPtr->A (with RTTI) in use_rtti_for_ptr_child
+PASS: gdb.mi/mi-var-rtti.exp: check s.constPtr->B (with RTTI) in use_rtti_for_ptr_child
+PASS: gdb.mi/mi-var-rtti.exp: check s.constPtr->C (with RTTI) in use_rtti_for_ptr_child
+PASS: gdb.mi/mi-var-rtti.exp: list children of s.ptrConst (with RTTI) in use_rtti_for_ptr_child
+PASS: gdb.mi/mi-var-rtti.exp: list children of s.ptrConst.Base (with RTTI) in use_rtti_for_ptr_child
+PASS: gdb.mi/mi-var-rtti.exp: list children of s.ptrConst.Base.public (with RTTI) in use_rtti_for_ptr_child
+PASS: gdb.mi/mi-var-rtti.exp: list children of s.ptrConst.public (with RTTI) in use_rtti_for_ptr_child
+PASS: gdb.mi/mi-var-rtti.exp: check s.ptrConst->A (with RTTI) in use_rtti_for_ptr_child
+PASS: gdb.mi/mi-var-rtti.exp: check s.ptrConst->B (with RTTI) in use_rtti_for_ptr_child
+PASS: gdb.mi/mi-var-rtti.exp: check s.ptrConst->C (with RTTI) in use_rtti_for_ptr_child
+PASS: gdb.mi/mi-var-rtti.exp: list children of s.constPtrConst (with RTTI) in use_rtti_for_ptr_child
+PASS: gdb.mi/mi-var-rtti.exp: list children of s.constPtrConst.Base (with RTTI) in use_rtti_for_ptr_child
+PASS: gdb.mi/mi-var-rtti.exp: list children of s.constPtrConst.Base.public (with RTTI) in use_rtti_for_ptr_child
+PASS: gdb.mi/mi-var-rtti.exp: list children of s.constPtrConst.public (with RTTI) in use_rtti_for_ptr_child
+PASS: gdb.mi/mi-var-rtti.exp: check s.constPtrConst->A (with RTTI) in use_rtti_for_ptr_child
+PASS: gdb.mi/mi-var-rtti.exp: check s.constPtrConst->B (with RTTI) in use_rtti_for_ptr_child
+PASS: gdb.mi/mi-var-rtti.exp: check s.constPtrConst->C (with RTTI) in use_rtti_for_ptr_child
+PASS: gdb.mi/mi-var-rtti.exp: delete varobj for s (with RTTI) in use_rtti_for_ptr_child
+PASS: gdb.mi/mi-var-rtti.exp: run to mi-var-rtti.cc:149 (set breakpoint)
+PASS: gdb.mi/mi-var-rtti.exp: -interpreter-exec console "set print object off" in use_rtti_for_ref_child
+PASS: gdb.mi/mi-var-rtti.exp: create varobj for s (without RTTI) in use_rtti_for_ref_child
+PASS: gdb.mi/mi-var-rtti.exp: list children of s (without RTTI) in use_rtti_for_ref_child
+PASS: gdb.mi/mi-var-rtti.exp: list children of s.public (without RTTI) in use_rtti_for_ref_child
+PASS: gdb.mi/mi-var-rtti.exp: list children of s.ref (without RTTI) in use_rtti_for_ref_child
+PASS: gdb.mi/mi-var-rtti.exp: list children of s.ref.public (without RTTI) in use_rtti_for_ref_child
+PASS: gdb.mi/mi-var-rtti.exp: check s.ref->A (without RTTI) in use_rtti_for_ref_child
+PASS: gdb.mi/mi-var-rtti.exp: list children of s.constRef (without RTTI) in use_rtti_for_ref_child
+PASS: gdb.mi/mi-var-rtti.exp: list children of s.constRef.public (without RTTI) in use_rtti_for_ref_child
+PASS: gdb.mi/mi-var-rtti.exp: check s.constRef->A (without RTTI) in use_rtti_for_ref_child
+PASS: gdb.mi/mi-var-rtti.exp: delete varobj for s (without RTTI) in use_rtti_for_ref_child
+PASS: gdb.mi/mi-var-rtti.exp: -interpreter-exec console "set print object on" in use_rtti_for_ref_child
+PASS: gdb.mi/mi-var-rtti.exp: create varobj for s (with RTTI) in use_rtti_for_ref_child
+PASS: gdb.mi/mi-var-rtti.exp: list children of s (with RTTI) in use_rtti_for_ref_child
+PASS: gdb.mi/mi-var-rtti.exp: list children of s.public (with RTTI) in use_rtti_for_ref_child
+PASS: gdb.mi/mi-var-rtti.exp: list children of s.ref (with RTTI) in use_rtti_for_ref_child
+PASS: gdb.mi/mi-var-rtti.exp: list children of s.ref.Base (with RTTI) in use_rtti_for_ref_child
+PASS: gdb.mi/mi-var-rtti.exp: list children of s.ref.Base.public (with RTTI) in use_rtti_for_ref_child
+PASS: gdb.mi/mi-var-rtti.exp: list children of s.ref.public (with RTTI) in use_rtti_for_ref_child
+PASS: gdb.mi/mi-var-rtti.exp: check s.ref->A (with RTTI) in use_rtti_for_ref_child
+PASS: gdb.mi/mi-var-rtti.exp: check s.ref->B (with RTTI) in use_rtti_for_ref_child
+PASS: gdb.mi/mi-var-rtti.exp: check s.ref->C (with RTTI) in use_rtti_for_ref_child
+PASS: gdb.mi/mi-var-rtti.exp: list children of s.constRef (with RTTI) in use_rtti_for_ref_child
+PASS: gdb.mi/mi-var-rtti.exp: list children of s.constRef.Base (with RTTI) in use_rtti_for_ref_child
+PASS: gdb.mi/mi-var-rtti.exp: list children of s.constRef.Base.public (with RTTI) in use_rtti_for_ref_child
+PASS: gdb.mi/mi-var-rtti.exp: list children of s.constRef.public (with RTTI) in use_rtti_for_ref_child
+PASS: gdb.mi/mi-var-rtti.exp: check s.constRef->A (with RTTI) in use_rtti_for_ref_child
+PASS: gdb.mi/mi-var-rtti.exp: check s.constRef->B (with RTTI) in use_rtti_for_ref_child
+PASS: gdb.mi/mi-var-rtti.exp: check s.constRef->C (with RTTI) in use_rtti_for_ref_child
+PASS: gdb.mi/mi-var-rtti.exp: delete varobj for s (with RTTI) in use_rtti_for_ref_child
+PASS: gdb.mi/mi-var-rtti.exp: run to mi-var-rtti.cc:202 (set breakpoint)
+PASS: gdb.mi/mi-var-rtti.exp: -interpreter-exec console "set print object off" in use_rtti_with_multiple_inheritence
+PASS: gdb.mi/mi-var-rtti.exp: create varobj for ptr (without RTTI) in use_rtti_with_multiple_inheritence
+PASS: gdb.mi/mi-var-rtti.exp: list children of ptr (without RTTI) in use_rtti_with_multiple_inheritence
+PASS: gdb.mi/mi-var-rtti.exp: list children of ptr.public (without RTTI) in use_rtti_with_multiple_inheritence
+PASS: gdb.mi/mi-var-rtti.exp: check ptr->A (without RTTI) in use_rtti_with_multiple_inheritence
+PASS: gdb.mi/mi-var-rtti.exp: delete varobj for ptr (without RTTI) in use_rtti_with_multiple_inheritence
+PASS: gdb.mi/mi-var-rtti.exp: create varobj for ref (without RTTI) in use_rtti_with_multiple_inheritence
+PASS: gdb.mi/mi-var-rtti.exp: list children of ref (without RTTI) in use_rtti_with_multiple_inheritence
+PASS: gdb.mi/mi-var-rtti.exp: list children of ref.public (without RTTI) in use_rtti_with_multiple_inheritence
+PASS: gdb.mi/mi-var-rtti.exp: check ref->A (without RTTI) in use_rtti_with_multiple_inheritence
+PASS: gdb.mi/mi-var-rtti.exp: delete varobj for ref (without RTTI) in use_rtti_with_multiple_inheritence
+PASS: gdb.mi/mi-var-rtti.exp: -interpreter-exec console "set print object on" in use_rtti_with_multiple_inheritence
+PASS: gdb.mi/mi-var-rtti.exp: create varobj for ptr (with RTTI) in use_rtti_with_multiple_inheritence
+PASS: gdb.mi/mi-var-rtti.exp: list children of ptr (with RTTI) in use_rtti_with_multiple_inheritence
+PASS: gdb.mi/mi-var-rtti.exp: list children of ptr.First (with RTTI) in use_rtti_with_multiple_inheritence
+PASS: gdb.mi/mi-var-rtti.exp: list children of ptr.Base.public (with RTTI) in use_rtti_with_multiple_inheritence
+PASS: gdb.mi/mi-var-rtti.exp: list children of ptr.Base (with RTTI) in use_rtti_with_multiple_inheritence
+PASS: gdb.mi/mi-var-rtti.exp: list children of ptr.Base.public (with RTTI) in use_rtti_with_multiple_inheritence
+PASS: gdb.mi/mi-var-rtti.exp: list children of ptr.public (with RTTI) in use_rtti_with_multiple_inheritence
+PASS: gdb.mi/mi-var-rtti.exp: delete varobj for ptr (with RTTI) in use_rtti_with_multiple_inheritence
+PASS: gdb.mi/mi-var-rtti.exp: run to mi-var-rtti.cc:245 (set breakpoint)
+PASS: gdb.mi/mi-var-rtti.exp: -interpreter-exec console "set print object on" in type_update_when_use_rtti
+FAIL: gdb.mi/mi-var-rtti.exp: create varobj for ptr in type_update_when_use_rtti
+FAIL: gdb.mi/mi-var-rtti.exp: list children of ptr (without RTTI) in type_update_when_use_rtti
+FAIL: gdb.mi/mi-var-rtti.exp: list children of ptr.public (without RTTI) in type_update_when_use_rtti
+PASS: gdb.mi/mi-var-rtti.exp: create varobj for S in type_update_when_use_rtti
+PASS: gdb.mi/mi-var-rtti.exp: list children of s in type_update_when_use_rtti
+PASS: gdb.mi/mi-var-rtti.exp: list children of s.public in type_update_when_use_rtti
+PASS: gdb.mi/mi-var-rtti.exp: list children of s.ptr (without RTTI) in type_update_when_use_rtti
+PASS: gdb.mi/mi-var-rtti.exp: list children of s.ptr.public (without RTTI) in type_update_when_use_rtti
+PASS: gdb.mi/mi-var-rtti.exp: run to mi-var-rtti.cc:269 (set breakpoint)
+PASS: gdb.mi/mi-var-rtti.exp: update ptr to derived in type_update_when_use_rtti
+PASS: gdb.mi/mi-var-rtti.exp: list children of ptr (with RTTI) in type_update_when_use_rtti
+PASS: gdb.mi/mi-var-rtti.exp: list children of ptr.Base (with RTTI) in type_update_when_use_rtti
+PASS: gdb.mi/mi-var-rtti.exp: list children of ptr.Base.public (with RTTI) in type_update_when_use_rtti
+PASS: gdb.mi/mi-var-rtti.exp: list children of ptr.public (with RTTI) in type_update_when_use_rtti
+PASS: gdb.mi/mi-var-rtti.exp: check ptr->A (with RTTI) in type_update_when_use_rtti
+PASS: gdb.mi/mi-var-rtti.exp: check ptr->B (with RTTI) in type_update_when_use_rtti
+PASS: gdb.mi/mi-var-rtti.exp: check ptr->C (with RTTI) in type_update_when_use_rtti
+PASS: gdb.mi/mi-var-rtti.exp: update s.ptr to derived in type_update_when_use_rtti
+PASS: gdb.mi/mi-var-rtti.exp: list children of s.ptr (with RTTI) in type_update_when_use_rtti
+PASS: gdb.mi/mi-var-rtti.exp: list children of s.ptr.Base (with RTTI) in type_update_when_use_rtti
+PASS: gdb.mi/mi-var-rtti.exp: list children of s.ptr.Base.public (with RTTI) in type_update_when_use_rtti
+PASS: gdb.mi/mi-var-rtti.exp: list children of s.ptr.public (with RTTI) in type_update_when_use_rtti
+PASS: gdb.mi/mi-var-rtti.exp: check s.ptr->A (with RTTI) in type_update_when_use_rtti
+PASS: gdb.mi/mi-var-rtti.exp: check s.ptr->B (with RTTI) in type_update_when_use_rtti
+PASS: gdb.mi/mi-var-rtti.exp: check s.ptr->C (with RTTI) in type_update_when_use_rtti
+PASS: gdb.mi/mi-var-rtti.exp: run to mi-var-rtti.cc:281 (set breakpoint)
+PASS: gdb.mi/mi-var-rtti.exp: update ptr back to base type in type_update_when_use_rtti
+PASS: gdb.mi/mi-var-rtti.exp: delete varobj for ptr in type_update_when_use_rtti
+PASS: gdb.mi/mi-var-rtti.exp: update s.ptr back to base type in type_update_when_use_rtti
+PASS: gdb.mi/mi-var-rtti.exp: delete varobj for s in type_update_when_use_rtti
+PASS: gdb.mi/mi-var-rtti.exp: run to mi-var-rtti.cc:299 (set breakpoint)
+PASS: gdb.mi/mi-var-rtti.exp: -interpreter-exec console "set print object off" in skip_type_update_when_not_use_rtti
+PASS: gdb.mi/mi-var-rtti.exp: create varobj for ptr in skip_type_update_when_not_use_rtti
+PASS: gdb.mi/mi-var-rtti.exp: list children of ptr (without RTTI) in skip_type_update_when_not_use_rtti
+PASS: gdb.mi/mi-var-rtti.exp: list children of ptr.public (without RTTI) in skip_type_update_when_not_use_rtti
+PASS: gdb.mi/mi-var-rtti.exp: create varobj for S in skip_type_update_when_not_use_rtti
+PASS: gdb.mi/mi-var-rtti.exp: list children of s in skip_type_update_when_not_use_rtti
+PASS: gdb.mi/mi-var-rtti.exp: list children of s.public in skip_type_update_when_not_use_rtti
+PASS: gdb.mi/mi-var-rtti.exp: list children of s.ptr (without RTTI) in skip_type_update_when_not_use_rtti
+PASS: gdb.mi/mi-var-rtti.exp: list children of s.ptr.public (without RTTI) in skip_type_update_when_not_use_rtti
+PASS: gdb.mi/mi-var-rtti.exp: run to mi-var-rtti.cc:323 (set breakpoint)
+PASS: gdb.mi/mi-var-rtti.exp: update ptr to derived type in skip_type_update_when_not_use_rtti
+PASS: gdb.mi/mi-var-rtti.exp: list children of ptr (without RTTI) in skip_type_update_when_not_use_rtti
+PASS: gdb.mi/mi-var-rtti.exp: list children of ptr.public (without RTTI) in skip_type_update_when_not_use_rtti
+PASS: gdb.mi/mi-var-rtti.exp: check ptr->A (without RTTI) in skip_type_update_when_not_use_rtti
+PASS: gdb.mi/mi-var-rtti.exp: update s to derived type in skip_type_update_when_not_use_rtti
+PASS: gdb.mi/mi-var-rtti.exp: list children of s.ptr (without RTTI) in skip_type_update_when_not_use_rtti
+PASS: gdb.mi/mi-var-rtti.exp: list children of s.ptr.public (without RTTI) in skip_type_update_when_not_use_rtti
+PASS: gdb.mi/mi-var-rtti.exp: check s.ptr->A (without RTTI) in skip_type_update_when_not_use_rtti
+PASS: gdb.mi/mi-var-rtti.exp: run to mi-var-rtti.cc:335 (set breakpoint)
+PASS: gdb.mi/mi-var-rtti.exp: update ptr back to base type in skip_type_update_when_not_use_rtti
+PASS: gdb.mi/mi-var-rtti.exp: delete varobj for ptr in skip_type_update_when_not_use_rtti
+PASS: gdb.mi/mi-var-rtti.exp: update s back to base type in skip_type_update_when_not_use_rtti
+PASS: gdb.mi/mi-var-rtti.exp: delete varobj for s in skip_type_update_when_not_use_rtti
+Running ./gdb.mi/mi-watch.exp ...
+PASS: gdb.mi/mi-watch.exp: hw watchpoints toggle (1)
+PASS: gdb.mi/mi-watch.exp: sw: breakpoint at callee4
+PASS: gdb.mi/mi-watch.exp: sw: mi runto callee4
+PASS: gdb.mi/mi-watch.exp: sw: break-watch operation
+PASS: gdb.mi/mi-watch.exp: sw: list of watchpoints
+PASS: gdb.mi/mi-watch.exp: sw: watchpoint trigger
+XPASS: gdb.mi/mi-watch.exp: sw: watchpoint trigger
+Running ./gdb.mi/mi-watch-nonstop.exp ...
+Running ./gdb.mi/pr11022.exp ...
+Running ./gdb.modula2/unbounded-array.exp ...
+PASS: gdb.modula2/unbounded-array.exp: switch to modula-2
+PASS: gdb.modula2/unbounded-array.exp: print the last legal element of array a
+PASS: gdb.modula2/unbounded-array.exp: print unbounded array contents
+PASS: gdb.modula2/unbounded-array.exp: print the 1st element of array a
+PASS: gdb.modula2/unbounded-array.exp: print the 2nd element of array a
+PASS: gdb.modula2/unbounded-array.exp: print the 3rd element of array a
+PASS: gdb.modula2/unbounded-array.exp: print the 4th element of array a
+PASS: gdb.modula2/unbounded-array.exp: print the 5th element of array a
+Running ./gdb.multi/base.exp ...
+PASS: gdb.multi/base.exp: add empty inferior 2
+PASS: gdb.multi/base.exp: switch to inferior 2
+PASS: gdb.multi/base.exp: load hangout file in inferior 2
+PASS: gdb.multi/base.exp: add inferior 3 with -exec goodbye
+PASS: gdb.multi/base.exp: info inferiors
+PASS: gdb.multi/base.exp: info inferior 2 3
+PASS: gdb.multi/base.exp: info inferior 1-2
+PASS: gdb.multi/base.exp: switch to inferior 1
+PASS: gdb.multi/base.exp: 'info functions commonfun' in inferior 1
+PASS: gdb.multi/base.exp: switch to inferior 3
+PASS: gdb.multi/base.exp: 'info functions commonfun' in inferior 3
+PASS: gdb.multi/base.exp: switch back to inferior 1
+PASS: gdb.multi/base.exp: set listsize 1
+PASS: gdb.multi/base.exp: list commonfun in hello
+PASS: gdb.multi/base.exp: print hglob
+PASS: gdb.multi/base.exp: print glob (hello)
+PASS: gdb.multi/base.exp: switch to inferior 3 to print globals
+PASS: gdb.multi/base.exp: print gglob
+PASS: gdb.multi/base.exp: print glob (goodbye)
+PASS: gdb.multi/base.exp: list commonfun in goodbye
+PASS: gdb.multi/base.exp: switch to inferior 1 to run it
+PASS: gdb.multi/base.exp: break hello
+PASS: gdb.multi/base.exp: continue
+PASS: gdb.multi/base.exp: remove-inferiors 2-3
+PASS: gdb.multi/base.exp: check remove-inferiors
+Running ./gdb.multi/bkpt-multi-exec.exp ...
+Running ./gdb.multi/multi-arch-exec.exp ...
+Running ./gdb.multi/multi-arch.exp ...
+Running ./gdb.multi/watchpoint-multi.exp ...
+UNTESTED: gdb.multi/watchpoint-multi.exp: watchpoint-multi.exp
+Running ./gdb.objc/basicclass.exp ...
+UNSUPPORTED: gdb.objc/basicclass.exp: Couldn't compile ./gdb.objc/basicclass.m: unrecognized error
+Running ./gdb.objc/nondebug.exp ...
+UNSUPPORTED: gdb.objc/nondebug.exp: Couldn't compile ./gdb.objc/nondebug.m: unrecognized error
+Running ./gdb.objc/objcdecode.exp ...
+UNSUPPORTED: gdb.objc/objcdecode.exp: Couldn't compile ./gdb.objc/objcdecode.m: unrecognized error
+Running ./gdb.objc/print.exp ...
+PASS: gdb.objc/print.exp: set language objective-c
+PASS: gdb.objc/print.exp: set language to "objective-c"
+PASS: gdb.objc/print.exp: check fp + text
+PASS: gdb.objc/print.exp: p 1.
+PASS: gdb.objc/print.exp: p 1.5
+PASS: gdb.objc/print.exp: p 1.f
+PASS: gdb.objc/print.exp: p 1.5f
+PASS: gdb.objc/print.exp: p 1.l
+PASS: gdb.objc/print.exp: p 1.5l
+PASS: gdb.objc/print.exp: p 0x1.1
+PASS: gdb.objc/print.exp: reject p 1.1x
+PASS: gdb.objc/print.exp: reject p 1.1ff
+PASS: gdb.objc/print.exp: reject p 1.1ll
+Running ./gdb.opencl/callfuncs.exp ...
+Running ./gdb.opencl/convs_casts.exp ...
+Running ./gdb.opencl/datatypes.exp ...
+Running ./gdb.opencl/operators.exp ...
+Running ./gdb.opencl/vec_comps.exp ...
+Running ./gdb.opt/clobbered-registers-O2.exp ...
+PASS: gdb.opt/clobbered-registers-O2.exp: Backtracing
+PASS: gdb.opt/clobbered-registers-O2.exp: print operand0
+PASS: gdb.opt/clobbered-registers-O2.exp: print operand1
+Running ./gdb.opt/inline-break.exp ...
+PASS: gdb.opt/inline-break.exp: break func1
+PASS: gdb.opt/inline-break.exp: break func2
+PASS: gdb.opt/inline-break.exp: break func3b
+FAIL: gdb.opt/inline-break.exp: break func4b
+PASS: gdb.opt/inline-break.exp: break func5b
+FAIL: gdb.opt/inline-break.exp: break func6b
+PASS: gdb.opt/inline-break.exp: break func7b
+PASS: gdb.opt/inline-break.exp: break func8b
+PASS: gdb.opt/inline-break.exp: print func1
+PASS: gdb.opt/inline-break.exp: print func2
+Running ./gdb.opt/inline-bt.exp ...
+PASS: gdb.opt/inline-bt.exp: continue to bar (1)
+PASS: gdb.opt/inline-bt.exp: backtrace from bar (1)
+PASS: gdb.opt/inline-bt.exp: bar not inlined
+PASS: gdb.opt/inline-bt.exp: continue to bar (2)
+PASS: gdb.opt/inline-bt.exp: backtrace from bar (2)
+PASS: gdb.opt/inline-bt.exp: up from bar (2)
+PASS: gdb.opt/inline-bt.exp: func1 inlined (2)
+PASS: gdb.opt/inline-bt.exp: continue to bar (3)
+PASS: gdb.opt/inline-bt.exp: backtrace from bar (3)
+PASS: gdb.opt/inline-bt.exp: up from bar (3)
+PASS: gdb.opt/inline-bt.exp: func1 inlined (3)
+PASS: gdb.opt/inline-bt.exp: up from func1 (3)
+PASS: gdb.opt/inline-bt.exp: func2 inlined (3)
+Running ./gdb.opt/inline-cmds.exp ...
+PASS: gdb.opt/inline-cmds.exp: set listsize 1
+PASS: gdb.opt/inline-cmds.exp: continue to bar (1)
+PASS: gdb.opt/inline-cmds.exp: backtrace from bar (1)
+PASS: gdb.opt/inline-cmds.exp: up from bar (1)
+PASS: gdb.opt/inline-cmds.exp: func1 inlined (1)
+PASS: gdb.opt/inline-cmds.exp: continue to bar (2)
+PASS: gdb.opt/inline-cmds.exp: backtrace from bar (2)
+PASS: gdb.opt/inline-cmds.exp: up from bar (2)
+PASS: gdb.opt/inline-cmds.exp: func1 inlined (2)
+PASS: gdb.opt/inline-cmds.exp: up from func1 (2)
+PASS: gdb.opt/inline-cmds.exp: func2 inlined (2)
+PASS: gdb.opt/inline-cmds.exp: continue to marker
+PASS: gdb.opt/inline-cmds.exp: backtrace from marker
+PASS: gdb.opt/inline-cmds.exp: marker not inlined
+PASS: gdb.opt/inline-cmds.exp: next over inlined functions
+PASS: gdb.opt/inline-cmds.exp: next past inlined func1
+PASS: gdb.opt/inline-cmds.exp: print x before func1
+PASS: gdb.opt/inline-cmds.exp: backtrace does not include func1
+PASS: gdb.opt/inline-cmds.exp: stepped over call to func1
+FAIL: gdb.opt/inline-cmds.exp: step into func1
+PASS: gdb.opt/inline-cmds.exp: finish from func1
+PASS: gdb.opt/inline-cmds.exp: continue to breakpoint: consecutive func1
+PASS: gdb.opt/inline-cmds.exp: next to first func1
+KFAIL: gdb.opt/inline-cmds.exp: next to second func1 (PRMS: gdb/NNNN)
+PASS: gdb.opt/inline-cmds.exp: continue to breakpoint: func1 then func3
+PASS: gdb.opt/inline-cmds.exp: next to func1 before func3
+PASS: gdb.opt/inline-cmds.exp: next to func3
+PASS: gdb.opt/inline-cmds.exp: continue to breakpoint: finish into func1
+PASS: gdb.opt/inline-cmds.exp: next to finish marker
+FAIL: gdb.opt/inline-cmds.exp: step into finish marker
+PASS: gdb.opt/inline-cmds.exp: finish from marker to func1
+PASS: gdb.opt/inline-cmds.exp: step into func1 for finish
+PASS: gdb.opt/inline-cmds.exp: finish from func1 to func3
+PASS: gdb.opt/inline-cmds.exp: continue to breakpoint: before the outer_inline call
+PASS: gdb.opt/inline-cmds.exp: reach 1 the outer_inline call
+PASS: gdb.opt/inline-cmds.exp: reach outer_inline2
+PASS: gdb.opt/inline-cmds.exp: backtrace at main of outer_inline
+PASS: gdb.opt/inline-cmds.exp: enter outer_inline2
+PASS: gdb.opt/inline-cmds.exp: backtrace at outer_inline2
+PASS: gdb.opt/inline-cmds.exp: enter outer_inline1 from outer_inline2
+PASS: gdb.opt/inline-cmds.exp: backtrace at outer_inline1
+PASS: gdb.opt/inline-cmds.exp: enter noinline from outer_inline1
+PASS: gdb.opt/inline-cmds.exp: backtrace at noinline from outer_inline1
+FAIL: gdb.opt/inline-cmds.exp: enter inlined_fn from noinline
+FAIL: gdb.opt/inline-cmds.exp: backtrace at inlined_fn from noinline
+FAIL: gdb.opt/inline-cmds.exp: inlined_fn from noinline inlined
+FAIL: gdb.opt/inline-cmds.exp: up to noinline
+FAIL: gdb.opt/inline-cmds.exp: noinline from outer_inline1 not inlined
+PASS: gdb.opt/inline-cmds.exp: up to outer_inline1
+PASS: gdb.opt/inline-cmds.exp: outer_inline1 inlined
+PASS: gdb.opt/inline-cmds.exp: up to outer_inline2
+FAIL: gdb.opt/inline-cmds.exp: outer_inline2 inlined
+FAIL: gdb.opt/inline-cmds.exp: up from outer_inline2
+PASS: gdb.opt/inline-cmds.exp: main not inlined
+Running ./gdb.opt/inline-locals.exp ...
+PASS: gdb.opt/inline-locals.exp: continue to bar (1)
+PASS: gdb.opt/inline-locals.exp: continue to bar (2)
+PASS: gdb.opt/inline-locals.exp: backtrace from bar (2)
+PASS: gdb.opt/inline-locals.exp: up from bar (2)
+PASS: gdb.opt/inline-locals.exp: func1 inlined (2)
+PASS: gdb.opt/inline-locals.exp: info locals above bar (2)
+PASS: gdb.opt/inline-locals.exp: info args above bar (2)
+PASS: gdb.opt/inline-locals.exp: print local (2)
+PASS: gdb.opt/inline-locals.exp: print out of scope local
+PASS: gdb.opt/inline-locals.exp: continue to bar (3)
+PASS: gdb.opt/inline-locals.exp: backtrace from bar (3)
+PASS: gdb.opt/inline-locals.exp: up from bar (3)
+PASS: gdb.opt/inline-locals.exp: func1 inlined (3)
+PASS: gdb.opt/inline-locals.exp: info locals above bar (3)
+PASS: gdb.opt/inline-locals.exp: info args above bar (3)
+PASS: gdb.opt/inline-locals.exp: print local (3)
+Running ./gdb.pascal/floats.exp ...
+UNSUPPORTED: gdb.pascal/floats.exp: No pascal compiler found
+UNTESTED: gdb.pascal/floats.exp: floats.exp
+Running ./gdb.pascal/gdb11492.exp ...
+UNSUPPORTED: gdb.pascal/gdb11492.exp: No pascal compiler found
+UNTESTED: gdb.pascal/gdb11492.exp: gdb11492.exp
+Running ./gdb.pascal/hello.exp ...
+UNSUPPORTED: gdb.pascal/hello.exp: No pascal compiler found
+Running ./gdb.pascal/integers.exp ...
+UNSUPPORTED: gdb.pascal/integers.exp: No pascal compiler found
+Running ./gdb.pascal/print.exp ...
+PASS: gdb.pascal/print.exp: set language pascal
+PASS: gdb.pascal/print.exp: set language to "pascal"
+PASS: gdb.pascal/print.exp: check fp + text
+PASS: gdb.pascal/print.exp: p 1.
+PASS: gdb.pascal/print.exp: p 1.5
+PASS: gdb.pascal/print.exp: p 1.f
+PASS: gdb.pascal/print.exp: p 1.5f
+PASS: gdb.pascal/print.exp: p 1.l
+PASS: gdb.pascal/print.exp: p 1.5l
+PASS: gdb.pascal/print.exp: p 0x1.1
+PASS: gdb.pascal/print.exp: reject p 1.1x
+PASS: gdb.pascal/print.exp: reject p 1.1ff
+PASS: gdb.pascal/print.exp: reject p 1.1ll
+Running ./gdb.pascal/types.exp ...
+PASS: gdb.pascal/types.exp: set language pascal
+PASS: gdb.pascal/types.exp: set language to "pascal"
+PASS: gdb.pascal/types.exp: pt 123
+PASS: gdb.pascal/types.exp: pt TRUE
+PASS: gdb.pascal/types.exp: pt FALSE
+PASS: gdb.pascal/types.exp: pt 'a'
+KFAIL: gdb.pascal/types.exp: pt 'a simple string' (PRMS: gdb/2326)
+PASS: gdb.pascal/types.exp: pt .44
+PASS: gdb.pascal/types.exp: pt 44.0
+PASS: gdb.pascal/types.exp: pt 10e20
+PASS: gdb.pascal/types.exp: pt 10E20
+Running ./gdb.python/lib-types.exp ...
+PASS: gdb.python/lib-types.exp: python import gdb.types
+PASS: gdb.python/lib-types.exp: python const_class1_obj = gdb.parse_and_eval ('const_class1_obj')
+PASS: gdb.python/lib-types.exp: python basic_type_const_class1_obj = gdb.types.get_basic_type (const_class1_obj.type)
+PASS: gdb.python/lib-types.exp: python print (str (const_class1_obj.type))
+PASS: gdb.python/lib-types.exp: const stripping
+PASS: gdb.python/lib-types.exp: python volatile_class1_obj = gdb.parse_and_eval ('volatile_class1_obj')
+PASS: gdb.python/lib-types.exp: python basic_type_volatile_class1_obj = gdb.types.get_basic_type (volatile_class1_obj.type)
+PASS: gdb.python/lib-types.exp: python print (str (volatile_class1_obj.type))
+PASS: gdb.python/lib-types.exp: volatile stripping
+PASS: gdb.python/lib-types.exp: python const_volatile_class1_obj = gdb.parse_and_eval ('const_volatile_class1_obj')
+PASS: gdb.python/lib-types.exp: python basic_type_const_volatile_class1_obj = gdb.types.get_basic_type (const_volatile_class1_obj.type)
+PASS: gdb.python/lib-types.exp: python print (str (const_volatile_class1_obj.type))
+PASS: gdb.python/lib-types.exp: volatile+const stripping
+PASS: gdb.python/lib-types.exp: python typedef_class1_obj = gdb.parse_and_eval ('typedef_class1_obj')
+PASS: gdb.python/lib-types.exp: python basic_type_typedef_class1_obj = gdb.types.get_basic_type (typedef_class1_obj.type)
+PASS: gdb.python/lib-types.exp: python print (str (typedef_class1_obj.type))
+PASS: gdb.python/lib-types.exp: typedef stripping
+PASS: gdb.python/lib-types.exp: python class1_ref_obj = gdb.parse_and_eval ('class1_ref_obj')
+PASS: gdb.python/lib-types.exp: python basic_type_class1_ref_obj = gdb.types.get_basic_type (class1_ref_obj.type)
+PASS: gdb.python/lib-types.exp: python print (str (class1_ref_obj.type))
+PASS: gdb.python/lib-types.exp: reference stripping
+PASS: gdb.python/lib-types.exp: python typedef_const_typedef_class1_obj = gdb.parse_and_eval ('typedef_const_typedef_class1_obj')
+PASS: gdb.python/lib-types.exp: python basic_type_typedef_const_typedef_class1_obj = gdb.types.get_basic_type (typedef_const_typedef_class1_obj.type)
+PASS: gdb.python/lib-types.exp: python print (str (typedef_class1_obj.type))
+PASS: gdb.python/lib-types.exp: nested typedef stripping
+PASS: gdb.python/lib-types.exp: python typedef_const_typedef_class1_ref_obj = gdb.parse_and_eval ('typedef_const_typedef_class1_ref_obj')
+PASS: gdb.python/lib-types.exp: python basic_type_typedef_const_typedef_class1_ref_obj = gdb.types.get_basic_type (typedef_const_typedef_class1_ref_obj.type)
+PASS: gdb.python/lib-types.exp: python print (str (typedef_const_typedef_class1_ref_obj.type))
+PASS: gdb.python/lib-types.exp: nested typedef/ref stripping
+PASS: gdb.python/lib-types.exp: python class1_obj = gdb.parse_and_eval ('class1_obj')
+PASS: gdb.python/lib-types.exp: python print (gdb.types.has_field (class1_obj.type, 'x'))
+PASS: gdb.python/lib-types.exp: python print (gdb.types.has_field (class1_obj.type, 'nope'))
+PASS: gdb.python/lib-types.exp: python subclass1_obj = gdb.parse_and_eval ('subclass1_obj')
+PASS: gdb.python/lib-types.exp: python print (gdb.types.has_field (subclass1_obj.type, 'x'))
+PASS: gdb.python/lib-types.exp: python enum1_obj = gdb.parse_and_eval ('enum1_obj')
+PASS: gdb.python/lib-types.exp: python enum1_dict = gdb.types.make_enum_dict (enum1_obj.type)
+PASS: gdb.python/lib-types.exp: python enum1_list = sorted (enum1_dict.items ())
+PASS: gdb.python/lib-types.exp: python print (enum1_list)
+PASS: gdb.python/lib-types.exp: python struct_a = gdb.lookup_type ('struct A')
+PASS: gdb.python/lib-types.exp: python print (struct_a.keys ())
+PASS: gdb.python/lib-types.exp: python print ([k for k,v in gdb.types.deep_items(struct_a)])
+Running ./gdb.python/py-arch.exp ...
+PASS: gdb.python/py-arch.exp: test number of instructions 1
+PASS: gdb.python/py-arch.exp: test number of instructions 2
+PASS: gdb.python/py-arch.exp: test number of instructions 3
+PASS: gdb.python/py-arch.exp: test number of instructions 4
+PASS: gdb.python/py-arch.exp: test key addr
+PASS: gdb.python/py-arch.exp: test key asm
+PASS: gdb.python/py-arch.exp: test key length
+PASS: gdb.python/py-arch.exp: test exception
+Running ./gdb.python/py-block.exp ...
+PASS: gdb.python/py-block.exp: continue to breakpoint: Block break here.
+PASS: gdb.python/py-block.exp: Check block not None
+PASS: gdb.python/py-block.exp: First anonymous block
+PASS: gdb.python/py-block.exp: Check start not None
+PASS: gdb.python/py-block.exp: Check end not None
+PASS: gdb.python/py-block.exp: Not a global block
+PASS: gdb.python/py-block.exp: Not a static block
+PASS: gdb.python/py-block.exp: Get block
+PASS: gdb.python/py-block.exp: Get block
+PASS: gdb.python/py-block.exp: Is the global block
+PASS: gdb.python/py-block.exp: Is the static block
+PASS: gdb.python/py-block.exp: Get superblock
+PASS: gdb.python/py-block.exp: Second anonymous block
+PASS: gdb.python/py-block.exp: Get superblock 2
+PASS: gdb.python/py-block.exp: Print superblock 2 function
+PASS: gdb.python/py-block.exp: up
+PASS: gdb.python/py-block.exp: Check Frame 2's block not None
+PASS: gdb.python/py-block.exp: main block
+PASS: gdb.python/py-block.exp: Check block validity
+PASS: gdb.python/py-block.exp: Check block validity
+PASS: gdb.python/py-block.exp: Check block validity
+PASS: gdb.python/py-block.exp: Check block validity
+Running ./gdb.python/py-breakpoint.exp ...
+PASS: gdb.python/py-breakpoint.exp: Check obj exists
+PASS: gdb.python/py-breakpoint.exp: Check breakpoint location
+PASS: gdb.python/py-breakpoint.exp: continue to breakpoint: Break at multiply.
+PASS: gdb.python/py-breakpoint.exp: Check for two breakpoints
+PASS: gdb.python/py-breakpoint.exp: Check obj exists
+PASS: gdb.python/py-breakpoint.exp: Check breakpoint location
+PASS: gdb.python/py-breakpoint.exp: Check obj exists
+PASS: gdb.python/py-breakpoint.exp: Check breakpoint location
+PASS: gdb.python/py-breakpoint.exp: Check breakpoint hit count
+PASS: gdb.python/py-breakpoint.exp: continue to breakpoint: Break at multiply.
+PASS: gdb.python/py-breakpoint.exp: Check breakpoint hit count
+PASS: gdb.python/py-breakpoint.exp: Check expected variable result after 6 iterations
+PASS: gdb.python/py-breakpoint.exp: continue to breakpoint: Break at add.
+PASS: gdb.python/py-breakpoint.exp: Check breakpoint enabled.
+PASS: gdb.python/py-breakpoint.exp: continue to breakpoint: Break at add.
+PASS: gdb.python/py-breakpoint.exp: continue to breakpoint: Break at multiply.
+PASS: gdb.python/py-breakpoint.exp: Check breakpoint thread
+PASS: gdb.python/py-breakpoint.exp: Check breakpoint type
+PASS: gdb.python/py-breakpoint.exp: Check breakpoint number
+PASS: gdb.python/py-breakpoint.exp: Check breakpoint number
+PASS: gdb.python/py-breakpoint.exp: Check breakpoint number
+PASS: gdb.python/py-breakpoint.exp: Number of breakpoints before delete
+PASS: gdb.python/py-breakpoint.exp: continue to breakpoint: Break at multiply.
+PASS: gdb.python/py-breakpoint.exp: Check breakpoint invalidated
+PASS: gdb.python/py-breakpoint.exp: Number of breakpoints after delete
+PASS: gdb.python/py-breakpoint.exp: continue to breakpoint: Break at end.
+PASS: gdb.python/py-breakpoint.exp: continue to breakpoint: Break at multiply.
+PASS: gdb.python/py-breakpoint.exp: Test conditional has been set
+PASS: gdb.python/py-breakpoint.exp: continue to breakpoint: Break at multiply.
+PASS: gdb.python/py-breakpoint.exp: Test conditional breakpoint stopped after five iterations
+PASS: gdb.python/py-breakpoint.exp: Test conditional read
+PASS: gdb.python/py-breakpoint.exp: continue to breakpoint: Break at multiply.
+PASS: gdb.python/py-breakpoint.exp: Test breakpoint stopped after six iterations
+PASS: gdb.python/py-breakpoint.exp: commands $bpnum
+PASS: gdb.python/py-breakpoint.exp: print "Command for breakpoint has been executed."
+PASS: gdb.python/py-breakpoint.exp: print result
+PASS: gdb.python/py-breakpoint.exp: end
+PASS: gdb.python/py-breakpoint.exp: python print (blist[len(blist)-1].commands)
+PASS: gdb.python/py-breakpoint.exp: Check invisible bp obj exists
+PASS: gdb.python/py-breakpoint.exp: Check breakpoint location
+PASS: gdb.python/py-breakpoint.exp: Check breakpoint visibility
+PASS: gdb.python/py-breakpoint.exp: Check info breakpoints shows visible breakpoints
+PASS: gdb.python/py-breakpoint.exp: Check invisible bp obj exists
+PASS: gdb.python/py-breakpoint.exp: Check breakpoint location
+PASS: gdb.python/py-breakpoint.exp: Check breakpoint visibility
+PASS: gdb.python/py-breakpoint.exp: Check info breakpoints does not show invisible breakpoints
+PASS: gdb.python/py-breakpoint.exp: Check maint info breakpoints shows invisible breakpoints
+PASS: gdb.python/py-breakpoint.exp: Test watchpoint write
+PASS: gdb.python/py-breakpoint.exp: Check info breakpoints does not show invisible breakpoints
+PASS: gdb.python/py-breakpoint.exp: Check maint info breakpoints shows invisible breakpoints
+PASS: gdb.python/py-breakpoint.exp: Test watchpoint write
+PASS: gdb.python/py-breakpoint.exp: Sub-class a breakpoint - python
+PASS: gdb.python/py-breakpoint.exp: Sub-class a breakpoint - class bp_eval (gdb.Breakpoint):
+PASS: gdb.python/py-breakpoint.exp: Sub-class a breakpoint - inf_i = 0
+PASS: gdb.python/py-breakpoint.exp: Sub-class a breakpoint - count = 0
+PASS: gdb.python/py-breakpoint.exp: Sub-class a breakpoint - def stop (self):
+PASS: gdb.python/py-breakpoint.exp: Sub-class a breakpoint - self.count = self.count + 1
+PASS: gdb.python/py-breakpoint.exp: Sub-class a breakpoint - self.inf_i = gdb.parse_and_eval("i")
+PASS: gdb.python/py-breakpoint.exp: Sub-class a breakpoint - if self.inf_i == 3:
+PASS: gdb.python/py-breakpoint.exp: Sub-class a breakpoint - return True
+PASS: gdb.python/py-breakpoint.exp: Sub-class a breakpoint - return False
+PASS: gdb.python/py-breakpoint.exp: Sub-class a breakpoint - end
+PASS: gdb.python/py-breakpoint.exp: Sub-class a second breakpoint - python
+PASS: gdb.python/py-breakpoint.exp: Sub-class a second breakpoint - class bp_also_eval (gdb.Breakpoint):
+PASS: gdb.python/py-breakpoint.exp: Sub-class a second breakpoint - count = 0
+PASS: gdb.python/py-breakpoint.exp: Sub-class a second breakpoint - def stop (self):
+PASS: gdb.python/py-breakpoint.exp: Sub-class a second breakpoint - self.count = self.count + 1
+PASS: gdb.python/py-breakpoint.exp: Sub-class a second breakpoint - if self.count == 9:
+PASS: gdb.python/py-breakpoint.exp: Sub-class a second breakpoint - return True
+PASS: gdb.python/py-breakpoint.exp: Sub-class a second breakpoint - return False
+PASS: gdb.python/py-breakpoint.exp: Sub-class a second breakpoint - end
+PASS: gdb.python/py-breakpoint.exp: Sub-class a third breakpoint - python
+PASS: gdb.python/py-breakpoint.exp: Sub-class a third breakpoint - class basic (gdb.Breakpoint):
+PASS: gdb.python/py-breakpoint.exp: Sub-class a third breakpoint - count = 0
+PASS: gdb.python/py-breakpoint.exp: Sub-class a third breakpoint - end
+PASS: gdb.python/py-breakpoint.exp: continue to breakpoint: Break at multiply.
+PASS: gdb.python/py-breakpoint.exp: Check inferior value matches python accounting
+PASS: gdb.python/py-breakpoint.exp: Check python accounting matches inferior
+PASS: gdb.python/py-breakpoint.exp: Check non firing same-location breakpoint eval function was also called at each stop.
+PASS: gdb.python/py-breakpoint.exp: Check non firing same-location breakpoint eval function was also called at each stop.
+PASS: gdb.python/py-breakpoint.exp: Check you cannot add a CLI condition to a Python breakpoint that
+PASS: gdb.python/py-breakpoint.exp: Construct an eval function - python
+PASS: gdb.python/py-breakpoint.exp: Construct an eval function - def stop_func ():
+PASS: gdb.python/py-breakpoint.exp: Construct an eval function - return True
+PASS: gdb.python/py-breakpoint.exp: Construct an eval function - end
+PASS: gdb.python/py-breakpoint.exp: Assign stop function to a breakpoint that has a condition
+PASS: gdb.python/py-breakpoint.exp: Test that evaluate function has not been yet executed (ie count = 0)
+PASS: gdb.python/py-breakpoint.exp: continue to breakpoint: Break at multiply.
+PASS: gdb.python/py-breakpoint.exp: Test that evaluate function is run when location also has normal bp
+PASS: gdb.python/py-breakpoint.exp: Sub-class a watchpoint - python
+PASS: gdb.python/py-breakpoint.exp: Sub-class a watchpoint - class wp_eval (gdb.Breakpoint):
+PASS: gdb.python/py-breakpoint.exp: Sub-class a watchpoint - def stop (self):
+PASS: gdb.python/py-breakpoint.exp: Sub-class a watchpoint - self.result = gdb.parse_and_eval("result")
+PASS: gdb.python/py-breakpoint.exp: Sub-class a watchpoint - if self.result == 788:
+PASS: gdb.python/py-breakpoint.exp: Sub-class a watchpoint - return True
+PASS: gdb.python/py-breakpoint.exp: Sub-class a watchpoint - return False
+PASS: gdb.python/py-breakpoint.exp: Sub-class a watchpoint - end
+PASS: gdb.python/py-breakpoint.exp: Test watchpoint write
+PASS: gdb.python/py-breakpoint.exp: Check that this unrelated breakpoints eval function was never called.
+Running ./gdb.python/py-cmd.exp ...
+PASS: gdb.python/py-cmd.exp: input simple command - python
+PASS: gdb.python/py-cmd.exp: input simple command - class test_cmd (gdb.Command):
+PASS: gdb.python/py-cmd.exp: input simple command - def __init__ (self):
+PASS: gdb.python/py-cmd.exp: input simple command - super (test_cmd, self).__init__ ("test_cmd", gdb.COMMAND_OBSCURE)
+PASS: gdb.python/py-cmd.exp: input simple command - def invoke (self, arg, from_tty):
+PASS: gdb.python/py-cmd.exp: input simple command - print ("test_cmd output, arg = %s" % arg)
+PASS: gdb.python/py-cmd.exp: input simple command - test_cmd ()
+PASS: gdb.python/py-cmd.exp: input simple command - end
+PASS: gdb.python/py-cmd.exp: call simple command
+PASS: gdb.python/py-cmd.exp: input prefix command - python
+PASS: gdb.python/py-cmd.exp: input prefix command - class prefix_cmd (gdb.Command):
+PASS: gdb.python/py-cmd.exp: input prefix command - def __init__ (self):
+PASS: gdb.python/py-cmd.exp: input prefix command - super (prefix_cmd, self).__init__ ("prefix_cmd", gdb.COMMAND_OBSCURE, gdb.COMPLETE_NONE, True)
+PASS: gdb.python/py-cmd.exp: input prefix command - def invoke (self, arg, from_tty):
+PASS: gdb.python/py-cmd.exp: input prefix command - print ("prefix_cmd output, arg = %s" % arg)
+PASS: gdb.python/py-cmd.exp: input prefix command - prefix_cmd ()
+PASS: gdb.python/py-cmd.exp: input prefix command - end
+PASS: gdb.python/py-cmd.exp: call prefix command
+PASS: gdb.python/py-cmd.exp: input subcommand - python
+PASS: gdb.python/py-cmd.exp: input subcommand - class subcmd (gdb.Command):
+PASS: gdb.python/py-cmd.exp: input subcommand - def __init__ (self):
+PASS: gdb.python/py-cmd.exp: input subcommand - super (subcmd, self).__init__ ("prefix_cmd subcmd", gdb.COMMAND_OBSCURE)
+PASS: gdb.python/py-cmd.exp: input subcommand - def invoke (self, arg, from_tty):
+PASS: gdb.python/py-cmd.exp: input subcommand - print ("subcmd output, arg = %s" % arg)
+PASS: gdb.python/py-cmd.exp: input subcommand - subcmd ()
+PASS: gdb.python/py-cmd.exp: input subcommand - end
+PASS: gdb.python/py-cmd.exp: call subcmd
+PASS: gdb.python/py-cmd.exp: input prefix command, keyword arguments - python
+PASS: gdb.python/py-cmd.exp: input prefix command, keyword arguments - class prefix_cmd2 (gdb.Command):
+PASS: gdb.python/py-cmd.exp: input prefix command, keyword arguments - def __init__ (self):
+PASS: gdb.python/py-cmd.exp: input prefix command, keyword arguments - super (prefix_cmd2, self).__init__ ("prefix_cmd2", gdb.COMMAND_OBSCURE, prefix = True, completer_class = gdb.COMPLETE_FILENAME)
+PASS: gdb.python/py-cmd.exp: input prefix command, keyword arguments - def invoke (self, arg, from_tty):
+PASS: gdb.python/py-cmd.exp: input prefix command, keyword arguments - print ("prefix_cmd2 output, arg = %s" % arg)
+PASS: gdb.python/py-cmd.exp: input prefix command, keyword arguments - prefix_cmd2 ()
+PASS: gdb.python/py-cmd.exp: input prefix command, keyword arguments - end
+PASS: gdb.python/py-cmd.exp: call prefix command, keyword arguments
+PASS: gdb.python/py-cmd.exp: input subcommand under prefix_cmd2 - python
+PASS: gdb.python/py-cmd.exp: input subcommand under prefix_cmd2 - class subcmd (gdb.Command):
+PASS: gdb.python/py-cmd.exp: input subcommand under prefix_cmd2 - def __init__ (self):
+PASS: gdb.python/py-cmd.exp: input subcommand under prefix_cmd2 - super (subcmd, self).__init__ ("prefix_cmd2 subcmd", gdb.COMMAND_OBSCURE)
+PASS: gdb.python/py-cmd.exp: input subcommand under prefix_cmd2 - def invoke (self, arg, from_tty):
+PASS: gdb.python/py-cmd.exp: input subcommand under prefix_cmd2 - print ("subcmd output, arg = %s" % arg)
+PASS: gdb.python/py-cmd.exp: input subcommand under prefix_cmd2 - subcmd ()
+PASS: gdb.python/py-cmd.exp: input subcommand under prefix_cmd2 - end
+PASS: gdb.python/py-cmd.exp: call subcmd under prefix_cmd2
+PASS: gdb.python/py-cmd.exp: input new subcommand - python
+PASS: gdb.python/py-cmd.exp: input new subcommand - class newsubcmd (gdb.Command):
+PASS: gdb.python/py-cmd.exp: input new subcommand - def __init__ (self):
+PASS: gdb.python/py-cmd.exp: input new subcommand - super (newsubcmd, self).__init__ ("info newsubcmd", gdb.COMMAND_OBSCURE)
+PASS: gdb.python/py-cmd.exp: input new subcommand - def invoke (self, arg, from_tty):
+PASS: gdb.python/py-cmd.exp: input new subcommand - print ("newsubcmd output, arg = %s" % arg)
+PASS: gdb.python/py-cmd.exp: input new subcommand - newsubcmd ()
+PASS: gdb.python/py-cmd.exp: input new subcommand - end
+PASS: gdb.python/py-cmd.exp: call newsubcmd
+PASS: gdb.python/py-cmd.exp: input command to throw error - python
+PASS: gdb.python/py-cmd.exp: input command to throw error - class test_error_cmd (gdb.Command):
+PASS: gdb.python/py-cmd.exp: input command to throw error - def __init__ (self):
+PASS: gdb.python/py-cmd.exp: input command to throw error - super (test_error_cmd, self).__init__ ("test_error_cmd", gdb.COMMAND_OBSCURE)
+PASS: gdb.python/py-cmd.exp: input command to throw error - def invoke (self, arg, from_tty):
+PASS: gdb.python/py-cmd.exp: input command to throw error - raise gdb.GdbError ('you lose!')
+PASS: gdb.python/py-cmd.exp: input command to throw error - test_error_cmd ()
+PASS: gdb.python/py-cmd.exp: input command to throw error - end
+PASS: gdb.python/py-cmd.exp: call error command
+PASS: gdb.python/py-cmd.exp: string_to_argv ("1 2 3")
+PASS: gdb.python/py-cmd.exp: string_to_argv ("'1 2' 3")
+PASS: gdb.python/py-cmd.exp: string_to_argv ('"1 2" 3')
+PASS: gdb.python/py-cmd.exp: string_to_argv ('1\ 2 3')
+PASS: gdb.python/py-cmd.exp: input simple user-defined command - python
+PASS: gdb.python/py-cmd.exp: input simple user-defined command - class test_help (gdb.Command):
+PASS: gdb.python/py-cmd.exp: input simple user-defined command - """Docstring"""
+PASS: gdb.python/py-cmd.exp: input simple user-defined command - def __init__ (self):
+PASS: gdb.python/py-cmd.exp: input simple user-defined command - super (test_help, self).__init__ ("test_help", gdb.COMMAND_USER)
+PASS: gdb.python/py-cmd.exp: input simple user-defined command - def invoke (self, arg, from_tty):
+PASS: gdb.python/py-cmd.exp: input simple user-defined command - print ("test_cmd output, arg = %s" % arg)
+PASS: gdb.python/py-cmd.exp: input simple user-defined command - test_help ()
+PASS: gdb.python/py-cmd.exp: input simple user-defined command - end
+PASS: gdb.python/py-cmd.exp: call simple user-defined command
+PASS: gdb.python/py-cmd.exp: see user-defined command in `help user-defined`
+Running ./gdb.python/py-error.exp ...
+PASS: gdb.python/py-error.exp: set host-charset IBM1047
+PASS: gdb.python/py-error.exp: main reached
+PASS: gdb.python/py-error.exp: no delayed error
+Running ./gdb.python/py-events.exp ...
+Running ./gdb.python/py-evsignal.exp ...
+KFAIL: gdb.python/py-evsignal.exp: Signal Thread 3 (PRMS: python/12966)
+Running ./gdb.python/py-evthreads.exp ...
+KFAIL: gdb.python/py-evthreads.exp: Run to breakpoint 1 (PRMS: python/12966)
+Running ./gdb.python/py-explore-cc.exp ...
+PASS: gdb.python/py-explore-cc.exp: continue to breakpoint: Break here
+PASS: gdb.python/py-explore-cc.exp: explore A
+PASS: gdb.python/py-explore-cc.exp: explore a
+PASS: gdb.python/py-explore-cc.exp: explore int_ref
+PASS: gdb.python/py-explore-cc.exp: explore int_ptr_ref
+PASS: gdb.python/py-explore-cc.exp: explore_int_ptr_ref_as_single_value_pointer
+PASS: gdb.python/py-explore-cc.exp: explore b
+PASS: gdb.python/py-explore-cc.exp: explore_base_class_A
+PASS: gdb.python/py-explore-cc.exp: return_to_b_from_A
+PASS: gdb.python/py-explore-cc.exp: explore_field_i_of_b
+PASS: gdb.python/py-explore-cc.exp: return_to_b_from_i
+PASS: gdb.python/py-explore-cc.exp: explore_field_c_of_b
+PASS: gdb.python/py-explore-cc.exp: return_to_b_from_i
+PASS: gdb.python/py-explore-cc.exp: return_to_gdb_prompt_from_b
+PASS: gdb.python/py-explore-cc.exp: explore B
+PASS: gdb.python/py-explore-cc.exp: explore_base_class_A
+PASS: gdb.python/py-explore-cc.exp: return_to_B
+PASS: gdb.python/py-explore-cc.exp: explore_field_i_of_B
+PASS: gdb.python/py-explore-cc.exp: return_to_B_from_i
+PASS: gdb.python/py-explore-cc.exp: explore_field_c_of_B
+PASS: gdb.python/py-explore-cc.exp: return_to_B_from_c
+PASS: gdb.python/py-explore-cc.exp: return_to_gdb_prompt_from_B
+Running ./gdb.python/py-explore.exp ...
+PASS: gdb.python/py-explore.exp: continue to breakpoint: Break here
+PASS: gdb.python/py-explore.exp: explore i
+PASS: gdb.python/py-explore.exp: explore ss
+PASS: gdb.python/py-explore.exp: explore *ss_ptr
+PASS: gdb.python/py-explore.exp: explore ss_t
+PASS: gdb.python/py-explore.exp: explore ss_ptr
+PASS: gdb.python/py-explore.exp: explore ss_ptr as single value pointer
+PASS: gdb.python/py-explore.exp: explore darray_ref
+PASS: gdb.python/py-explore.exp: no_to_explore_as_pointer
+PASS: gdb.python/py-explore.exp: explore_as_array
+PASS: gdb.python/py-explore.exp: explore_as_array_index_2
+PASS: gdb.python/py-explore.exp: end explore_as_array_index_2
+PASS: gdb.python/py-explore.exp: end explore_as_array
+PASS: gdb.python/py-explore.exp: explore su
+PASS: gdb.python/py-explore.exp: explore su.d
+PASS: gdb.python/py-explore.exp: end su.d exploration
+PASS: gdb.python/py-explore.exp: end su exploration
+PASS: gdb.python/py-explore.exp: explore cs
+PASS: gdb.python/py-explore.exp: explore cs.s
+PASS: gdb.python/py-explore.exp: end cs.s exploration
+PASS: gdb.python/py-explore.exp: explore cs.u
+PASS: gdb.python/py-explore.exp: end cs.u exploration
+PASS: gdb.python/py-explore.exp: end cs exploration
+PASS: gdb.python/py-explore.exp: explore cu
+PASS: gdb.python/py-explore.exp: explore cu.sa
+PASS: gdb.python/py-explore.exp: explore cu.sa[0]
+PASS: gdb.python/py-explore.exp: end cu.sa[0] exploration
+PASS: gdb.python/py-explore.exp: end cu.sa exploration
+PASS: gdb.python/py-explore.exp: end cu exploration
+PASS: gdb.python/py-explore.exp: explore int
+PASS: gdb.python/py-explore.exp: explore struct SimpleStruct
+PASS: gdb.python/py-explore.exp: explore type struct SimpleStruct feild 0
+PASS: gdb.python/py-explore.exp: return to struct SimpleStruct from field 0
+PASS: gdb.python/py-explore.exp: explore type struct SimpleStruct feild 1
+PASS: gdb.python/py-explore.exp: return to struct SimpleStruct from field 1
+PASS: gdb.python/py-explore.exp: return to GDB prompt from struct SimpleStruct
+PASS: gdb.python/py-explore.exp: explore union SimpleUnion
+PASS: gdb.python/py-explore.exp: explore type union SimpleUnion feild 0
+PASS: gdb.python/py-explore.exp: return to union SimpleUnion from field 0
+PASS: gdb.python/py-explore.exp: explore type union SimpleUnion feild 1
+PASS: gdb.python/py-explore.exp: return to union SimpleUnion from field 1
+PASS: gdb.python/py-explore.exp: explore type union SimpleUnion feild 2
+PASS: gdb.python/py-explore.exp: return to union SimpleUnion from field 2
+PASS: gdb.python/py-explore.exp: explore type union SimpleUnion feild 3
+PASS: gdb.python/py-explore.exp: return to union SimpleUnion from field 3
+PASS: gdb.python/py-explore.exp: return to GDB prompt from union SimpleUnion
+PASS: gdb.python/py-explore.exp: explore SS
+PASS: gdb.python/py-explore.exp: explore type SS feild 0
+PASS: gdb.python/py-explore.exp: return to SS from field 0
+PASS: gdb.python/py-explore.exp: explore type SS feild 1
+PASS: gdb.python/py-explore.exp: return to SS field 1
+PASS: gdb.python/py-explore.exp: return to GDB prompt from SS
+PASS: gdb.python/py-explore.exp: explore type struct ComplexStruct
+PASS: gdb.python/py-explore.exp: explore type struct ComplexStruct field 0
+PASS: gdb.python/py-explore.exp: return to ComplexStruct from field 0
+PASS: gdb.python/py-explore.exp: explore type struct ComplexStruct field 1
+PASS: gdb.python/py-explore.exp: return to ComplexStruct from field 1
+PASS: gdb.python/py-explore.exp: explore type struct ComplexStruct field 2
+PASS: gdb.python/py-explore.exp: return to ComplexStruct from field 2
+PASS: gdb.python/py-explore.exp: return to GDB prompt from ComplexStruct type exploration
+PASS: gdb.python/py-explore.exp: explore type union ComplexUnion
+PASS: gdb.python/py-explore.exp: explore type union ComplexUnion field 0
+PASS: gdb.python/py-explore.exp: return to ComplexUnion from field 0
+PASS: gdb.python/py-explore.exp: explore type union ComplexUnion field 1
+PASS: gdb.python/py-explore.exp: return to ComplexUnion from field 1
+PASS: gdb.python/py-explore.exp: return to GDB prompt from ComplexUnion type exploration
+PASS: gdb.python/py-explore.exp: explore type union ComplexUnion
+PASS: gdb.python/py-explore.exp: explore type union ComplexUnion field 0
+PASS: gdb.python/py-explore.exp: return to ComplexUnion from field 0
+PASS: gdb.python/py-explore.exp: explore type union ComplexUnion field 1
+PASS: gdb.python/py-explore.exp: return to ComplexUnion from field 1
+PASS: gdb.python/py-explore.exp: return to GDB prompt from ComplexUnion type exploration
+Running ./gdb.python/py-finish-breakpoint2.exp ...
+PASS: gdb.python/py-finish-breakpoint2.exp: import python scripts
+PASS: gdb.python/py-finish-breakpoint2.exp: run to exception 1
+PASS: gdb.python/py-finish-breakpoint2.exp: check BP count
+PASS: gdb.python/py-finish-breakpoint2.exp: set FinishBP after the exception
+PASS: gdb.python/py-finish-breakpoint2.exp: check FinishBreakpoint in catch()
+PASS: gdb.python/py-finish-breakpoint2.exp: check finish BP removal
+PASS: gdb.python/py-finish-breakpoint2.exp: continue to second exception
+PASS: gdb.python/py-finish-breakpoint2.exp: set FinishBP after the exception
+PASS: gdb.python/py-finish-breakpoint2.exp: FinishBreakpoint with exception thrown not caught
+Running ./gdb.python/py-finish-breakpoint.exp ...
+PASS: gdb.python/py-finish-breakpoint.exp: disable confirmation
+PASS: gdb.python/py-finish-breakpoint.exp: import python scripts
+PASS: gdb.python/py-finish-breakpoint.exp: continue to the function to finish
+PASS: gdb.python/py-finish-breakpoint.exp: set FinishBreakpoint with default frame value
+PASS: gdb.python/py-finish-breakpoint.exp: set FinishBreakpoint
+PASS: gdb.python/py-finish-breakpoint.exp: check return_value at init
+PASS: gdb.python/py-finish-breakpoint.exp: check MyFinishBreakpoint hit
+PASS: gdb.python/py-finish-breakpoint.exp: check return_value
+PASS: gdb.python/py-finish-breakpoint.exp: check finishBP on default frame has been hit
+PASS: gdb.python/py-finish-breakpoint.exp: ensure that finish bp is invalid afer normal hit
+PASS: gdb.python/py-finish-breakpoint.exp: return to main()
+PASS: gdb.python/py-finish-breakpoint.exp: check FinishBP not allowed in main
+PASS: gdb.python/py-finish-breakpoint.exp: import python scripts
+FAIL: gdb.python/py-finish-breakpoint.exp: ensure that shared lib has no debug info
+FAIL: gdb.python/py-finish-breakpoint.exp: setting breakpoint at do_nothing
+FAIL: gdb.python/py-finish-breakpoint.exp: continue to do_nothing
+PASS: gdb.python/py-finish-breakpoint.exp: set finish breakpoint
+FAIL: gdb.python/py-finish-breakpoint.exp: check FinishBreakpoint hit
+PASS: gdb.python/py-finish-breakpoint.exp: check return value without debug symbol
+PASS: gdb.python/py-finish-breakpoint.exp: import python scripts
+PASS: gdb.python/py-finish-breakpoint.exp: set finish breakpoint
+PASS: gdb.python/py-finish-breakpoint.exp: set BP after the jump
+PASS: gdb.python/py-finish-breakpoint.exp: check FinishBP out of scope notification
+PASS: gdb.python/py-finish-breakpoint.exp: ensure that finish bp is invalid afer out of scope notification
+PASS: gdb.python/py-finish-breakpoint.exp: import python scripts
+PASS: gdb.python/py-finish-breakpoint.exp: set a conditional BP
+PASS: gdb.python/py-finish-breakpoint.exp: set FinishBP in a breakpoint condition
+PASS: gdb.python/py-finish-breakpoint.exp: don't allow FinishBreakpoint on dummy frames
+PASS: gdb.python/py-finish-breakpoint.exp: check stopped location
+PASS: gdb.python/py-finish-breakpoint.exp: import python scripts
+PASS: gdb.python/py-finish-breakpoint.exp: set conditional BP
+PASS: gdb.python/py-finish-breakpoint.exp: set BP in condition
+PASS: gdb.python/py-finish-breakpoint.exp: stop in condition function
+PASS: gdb.python/py-finish-breakpoint.exp: finish condition evaluation
+PASS: gdb.python/py-finish-breakpoint.exp: stop at conditional breakpoint
+PASS: gdb.python/py-finish-breakpoint.exp: check stopped location
+PASS: gdb.python/py-finish-breakpoint.exp: import python scripts
+PASS: gdb.python/py-finish-breakpoint.exp: prepare TestExplicitBreakpoint
+PASS: gdb.python/py-finish-breakpoint.exp: don't allow FinishBreakpoint on dummy frames
+PASS: gdb.python/py-finish-breakpoint.exp: prepare TestExplicitBreakpoint
+PASS: gdb.python/py-finish-breakpoint.exp: FinishBP stop at during explicit function call
+PASS: gdb.python/py-finish-breakpoint.exp: switch to exit() test
+PASS: gdb.python/py-finish-breakpoint.exp: set FinishBP after the exit()
+PASS: gdb.python/py-finish-breakpoint.exp: catch out of scope after exit
+PASS: gdb.python/py-finish-breakpoint.exp: set FinishBP after the exec
+PASS: gdb.python/py-finish-breakpoint.exp: catch exec
+PASS: gdb.python/py-finish-breakpoint.exp: catch out of scope after exec
+Running ./gdb.python/py-frame.exp ...
+PASS: gdb.python/py-frame.exp: continue to breakpoint: Block break here.
+PASS: gdb.python/py-frame.exp: test Frame.architecture()
+PASS: gdb.python/py-frame.exp: test i
+PASS: gdb.python/py-frame.exp: test f
+PASS: gdb.python/py-frame.exp: test b
+PASS: gdb.python/py-frame.exp: test i = 1.1
+PASS: gdb.python/py-frame.exp: test double i
+PASS: gdb.python/py-frame.exp: test f = 2.2
+PASS: gdb.python/py-frame.exp: test double f
+PASS: gdb.python/py-frame.exp: test i = 99
+PASS: gdb.python/py-frame.exp: test int i
+PASS: gdb.python/py-frame.exp: continue to breakpoint: breakpoint at f2
+PASS: gdb.python/py-frame.exp: selected frame -vs- newest frame
+PASS: gdb.python/py-frame.exp: newest frame -vs- newest frame
+PASS: gdb.python/py-frame.exp: test equality comparison (false)
+PASS: gdb.python/py-frame.exp: test equality comparison (true)
+PASS: gdb.python/py-frame.exp: test inequality comparison (true)
+PASS: gdb.python/py-frame.exp: test inequality comparison (false)
+PASS: gdb.python/py-frame.exp: test Frame.is_valid
+PASS: gdb.python/py-frame.exp: test Frame.name
+PASS: gdb.python/py-frame.exp: test Frame.type
+PASS: gdb.python/py-frame.exp: test Frame.type
+PASS: gdb.python/py-frame.exp: test gdb.frame_stop_reason_string
+PASS: gdb.python/py-frame.exp: test Frame.pc
+PASS: gdb.python/py-frame.exp: test Frame.older
+PASS: gdb.python/py-frame.exp: test Frame.newer
+PASS: gdb.python/py-frame.exp: test Frame.read_var - error
+PASS: gdb.python/py-frame.exp: test Frame.read_var - success
+PASS: gdb.python/py-frame.exp: test gdb.selected_frame
+Running ./gdb.python/py-frame-inline.exp ...
+PASS: gdb.python/py-frame-inline.exp: continue to breakpoint: Block break here.
+PASS: gdb.python/py-frame-inline.exp: info frame
+PASS: gdb.python/py-frame-inline.exp: up
+PASS: gdb.python/py-frame-inline.exp: python print (gdb.selected_frame().read_var('l'))
+Running ./gdb.python/py-function.exp ...
+PASS: gdb.python/py-function.exp: input convenience function - python
+PASS: gdb.python/py-function.exp: input convenience function - class test_func (gdb.Function):
+PASS: gdb.python/py-function.exp: input convenience function - def __init__ (self):
+PASS: gdb.python/py-function.exp: input convenience function - super (test_func, self).__init__ ("test_func")
+PASS: gdb.python/py-function.exp: input convenience function - def invoke (self, arg):
+PASS: gdb.python/py-function.exp: input convenience function - return "test_func output, arg = %s" % arg.string ()
+PASS: gdb.python/py-function.exp: input convenience function - test_func ()
+PASS: gdb.python/py-function.exp: input convenience function - end
+PASS: gdb.python/py-function.exp: call function
+PASS: gdb.python/py-function.exp: input value-returning convenience function - python
+PASS: gdb.python/py-function.exp: input value-returning convenience function - class Double (gdb.Function):
+PASS: gdb.python/py-function.exp: input value-returning convenience function - def __init__ (self):
+PASS: gdb.python/py-function.exp: input value-returning convenience function - super (Double, self).__init__ ("double")
+PASS: gdb.python/py-function.exp: input value-returning convenience function - def invoke (self, n):
+PASS: gdb.python/py-function.exp: input value-returning convenience function - return n*2
+PASS: gdb.python/py-function.exp: input value-returning convenience function - Double ()
+PASS: gdb.python/py-function.exp: input value-returning convenience function - end
+PASS: gdb.python/py-function.exp: call value-returning function
+PASS: gdb.python/py-function.exp: input int-returning function - python
+PASS: gdb.python/py-function.exp: input int-returning function - class Yes(gdb.Function):
+PASS: gdb.python/py-function.exp: input int-returning function - def __init__(self):
+PASS: gdb.python/py-function.exp: input int-returning function - gdb.Function.__init__(self, 'yes')
+PASS: gdb.python/py-function.exp: input int-returning function - def invoke(self):
+PASS: gdb.python/py-function.exp: input int-returning function - return 1
+PASS: gdb.python/py-function.exp: input int-returning function - Yes ()
+PASS: gdb.python/py-function.exp: input int-returning function - end
+PASS: gdb.python/py-function.exp: call yes with &&
+PASS: gdb.python/py-function.exp: call yes with ||
+PASS: gdb.python/py-function.exp: Test GDBError - python
+PASS: gdb.python/py-function.exp: Test GDBError - class GDBError(gdb.Function):
+PASS: gdb.python/py-function.exp: Test GDBError - def __init__(self):
+PASS: gdb.python/py-function.exp: Test GDBError - gdb.Function.__init__(self, 'gdberror')
+PASS: gdb.python/py-function.exp: Test GDBError - def invoke(self):
+PASS: gdb.python/py-function.exp: Test GDBError - raise gdb.GdbError("This is a GdbError")
+PASS: gdb.python/py-function.exp: Test GDBError - GDBError ()
+PASS: gdb.python/py-function.exp: Test GDBError - end
+PASS: gdb.python/py-function.exp: Test GdbError. There should not be a stack trace
+PASS: gdb.python/py-function.exp: Test Normal Error - python
+PASS: gdb.python/py-function.exp: Test Normal Error - class NormalError(gdb.Function):
+PASS: gdb.python/py-function.exp: Test Normal Error - def __init__(self):
+PASS: gdb.python/py-function.exp: Test Normal Error - gdb.Function.__init__(self, 'normalerror')
+PASS: gdb.python/py-function.exp: Test Normal Error - def invoke(self):
+PASS: gdb.python/py-function.exp: Test Normal Error - raise RuntimeError("This is a Normal Error")
+PASS: gdb.python/py-function.exp: Test Normal Error - NormalError ()
+PASS: gdb.python/py-function.exp: Test Normal Error - end
+PASS: gdb.python/py-function.exp: set python print-stack full
+PASS: gdb.python/py-function.exp: Test a Runtime error. There should be a stack trace.
+PASS: gdb.python/py-function.exp: input command-calling function - python
+PASS: gdb.python/py-function.exp: input command-calling function - class CallCommand(gdb.Function):
+PASS: gdb.python/py-function.exp: input command-calling function - def __init__(self):
+PASS: gdb.python/py-function.exp: input command-calling function - gdb.Function.__init__(self, 'call_command')
+PASS: gdb.python/py-function.exp: input command-calling function - def invoke(self):
+PASS: gdb.python/py-function.exp: input command-calling function - return gdb.execute('print 1', to_string=True)
+PASS: gdb.python/py-function.exp: input command-calling function - CallCommand ()
+PASS: gdb.python/py-function.exp: input command-calling function - end
+PASS: gdb.python/py-function.exp: Setting a value from a function which executes a command.
+PASS: gdb.python/py-function.exp: Setting a value from a function which executes a command, again.
+Running ./gdb.python/py-inferior.exp ...
+PASS: gdb.python/py-inferior.exp: successfully compiled posix threads test case
+PASS: gdb.python/py-inferior.exp: get inferiors list
+PASS: gdb.python/py-inferior.exp: verify inferiors list
+PASS: gdb.python/py-inferior.exp: test equality comparison (true)
+PASS: gdb.python/py-inferior.exp: test Inferior.num
+PASS: gdb.python/py-inferior.exp: test Inferior.pid
+PASS: gdb.python/py-inferior.exp: test Inferior.was_attached
+PASS: gdb.python/py-inferior.exp: test Inferior.threads
+PASS: gdb.python/py-inferior.exp: continue to breakpoint: cont to check_threads
+PASS: gdb.python/py-inferior.exp: test Inferior.threads 2
+PASS: gdb.python/py-inferior.exp: continue to breakpoint: cont to Break here.
+PASS: gdb.python/py-inferior.exp: read str contents
+PASS: gdb.python/py-inferior.exp: write str
+PASS: gdb.python/py-inferior.exp: ensure str was changed in the inferior
+PASS: gdb.python/py-inferior.exp: py start_addr = search_buf.address
+PASS: gdb.python/py-inferior.exp: py length = search_buf.type.sizeof
+PASS: gdb.python/py-inferior.exp: find string pattern
+PASS: gdb.python/py-inferior.exp: pattern not found at end of range
+PASS: gdb.python/py-inferior.exp: pattern found at end of range
+PASS: gdb.python/py-inferior.exp: py from struct import *
+PASS: gdb.python/py-inferior.exp: set int16_search_buf[10] = 0x1234
+PASS: gdb.python/py-inferior.exp: py search_buf = gdb.selected_frame ().read_var ('int16_search_buf')
+PASS: gdb.python/py-inferior.exp: py start_addr = search_buf.address
+PASS: gdb.python/py-inferior.exp: py length = search_buf.type.sizeof
+PASS: gdb.python/py-inferior.exp: py pattern = pack('<H',0x1234)
+PASS: gdb.python/py-inferior.exp: find 16-bit pattern, with value pattern
+PASS: gdb.python/py-inferior.exp: set int32_search_buf[10] = 0x12345678
+PASS: gdb.python/py-inferior.exp: py search_buf = gdb.selected_frame ().read_var ('int32_search_buf')
+PASS: gdb.python/py-inferior.exp: py start_addr = search_buf.address
+PASS: gdb.python/py-inferior.exp: py length = search_buf.type.sizeof
+PASS: gdb.python/py-inferior.exp: py pattern = pack('<I',0x12345678)
+PASS: gdb.python/py-inferior.exp: find 32-bit pattern, with python pattern
+PASS: gdb.python/py-inferior.exp: set int64_search_buf[10] = 0xfedcba9876543210LL
+PASS: gdb.python/py-inferior.exp: py search_buf = gdb.selected_frame ().read_var ('int64_search_buf')
+PASS: gdb.python/py-inferior.exp: py start_addr = search_buf.address
+PASS: gdb.python/py-inferior.exp: py length = search_buf.type.sizeof
+PASS: gdb.python/py-inferior.exp: py pattern = pack('<Q', 0xfedcba9876543210)
+PASS: gdb.python/py-inferior.exp: find 64-bit pattern, with value pattern
+PASS: gdb.python/py-inferior.exp: set *(int8_t*) &search_buf[10] = 0x62
+PASS: gdb.python/py-inferior.exp: set *(int16_t*) &search_buf[11] = 0x6363
+PASS: gdb.python/py-inferior.exp: set *(int32_t*) &search_buf[13] = 0x64646464
+PASS: gdb.python/py-inferior.exp: py search_buf = gdb.selected_frame ().read_var ('search_buf')
+PASS: gdb.python/py-inferior.exp: py start_addr = search_buf[0].address
+PASS: gdb.python/py-inferior.exp: py pattern1 = pack('B', 0x62)
+PASS: gdb.python/py-inferior.exp: py pattern2 = pack('<H', 0x6363)
+PASS: gdb.python/py-inferior.exp: py pattern3 = pack('<I', 0x64646464)
+PASS: gdb.python/py-inferior.exp: find mixed-sized pattern
+PASS: gdb.python/py-inferior.exp: find mixed-sized pattern
+PASS: gdb.python/py-inferior.exp: find mixed-sized pattern
+PASS: gdb.python/py-inferior.exp: set *(int32_t*) &search_buf[0*16000+100] = 0x12345678
+PASS: gdb.python/py-inferior.exp: set *(int32_t*) &search_buf[1*16000+100] = 0x12345678
+PASS: gdb.python/py-inferior.exp: py start_addr = gdb.selected_frame ().read_var ('search_buf')
+PASS: gdb.python/py-inferior.exp: py end_addr = start_addr + gdb.selected_frame ().read_var ('search_buf_size')
+PASS: gdb.python/py-inferior.exp: py pattern = pack('<I', 0x12345678)
+PASS: gdb.python/py-inferior.exp: py first = gdb.inferiors()[0].search_memory (start_addr,end_addr - start_addr, pattern)
+PASS: gdb.python/py-inferior.exp: search spanning large range 1st result
+PASS: gdb.python/py-inferior.exp: py start_addr = first + 1
+PASS: gdb.python/py-inferior.exp: py second = gdb.inferiors()[0].search_memory (start_addr, end_addr - start_addr, pattern)
+PASS: gdb.python/py-inferior.exp: search spanning large range 2nd result
+PASS: gdb.python/py-inferior.exp: py start_addr = second + 1
+PASS: gdb.python/py-inferior.exp: py third = gdb.inferiors()[0].search_memory (start_addr, end_addr - start_addr, pattern)
+PASS: gdb.python/py-inferior.exp: search spanning large range 3rd result
+PASS: gdb.python/py-inferior.exp: get initial list
+PASS: gdb.python/py-inferior.exp: Get inferior list length
+PASS: gdb.python/py-inferior.exp: Check inferior validity
+PASS: gdb.python/py-inferior.exp: add empty inferior 2
+PASS: gdb.python/py-inferior.exp: get new list
+PASS: gdb.python/py-inferior.exp: Get inferior list length
+PASS: gdb.python/py-inferior.exp: Check inferior validity
+PASS: gdb.python/py-inferior.exp: Check inferior validity
+PASS: gdb.python/py-inferior.exp: remove-inferiors 3
+PASS: gdb.python/py-inferior.exp: Check inferior validity
+PASS: gdb.python/py-inferior.exp: Check inferior validity
+PASS: gdb.python/py-inferior.exp: Switch to first inferior
+PASS: gdb.python/py-inferior.exp: First inferior selected
+PASS: gdb.python/py-inferior.exp: Create new inferior
+PASS: gdb.python/py-inferior.exp: Switch to third inferior
+PASS: gdb.python/py-inferior.exp: Third inferior selected
+PASS: gdb.python/py-inferior.exp: Switch to first inferior
+PASS: gdb.python/py-inferior.exp: Remove second inferior
+Running ./gdb.python/py-infthread.exp ...
+PASS: gdb.python/py-infthread.exp: test gdb.selected_thread
+PASS: gdb.python/py-infthread.exp: verify InferiorThread object
+PASS: gdb.python/py-infthread.exp: test Inferior.num
+PASS: gdb.python/py-infthread.exp: test InferiorThread.ptid
+PASS: gdb.python/py-infthread.exp: get supplied name of current thread
+PASS: gdb.python/py-infthread.exp: set name of current thread
+PASS: gdb.python/py-infthread.exp: check name of current thread
+PASS: gdb.python/py-infthread.exp: reset name of current thread
+PASS: gdb.python/py-infthread.exp: check name of current thread again
+PASS: gdb.python/py-infthread.exp: test InferiorThread.is_stopped
+PASS: gdb.python/py-infthread.exp: test InferiorThread.is_running
+PASS: gdb.python/py-infthread.exp: test InferiorThread.is_exited
+PASS: gdb.python/py-infthread.exp: test InferiorThread.is_valid
+PASS: gdb.python/py-infthread.exp: kill inferior 1
+PASS: gdb.python/py-infthread.exp: test InferiorThread.is_valid
+Running ./gdb.python/py-mi.exp ...
+PASS: gdb.python/py-mi.exp: breakpoint at main
+PASS: gdb.python/py-mi.exp: mi runto main
+PASS: gdb.python/py-mi.exp: run to 328 (set breakpoint)
+PASS: gdb.python/py-mi.exp: create container varobj, no pretty-printing
+PASS: gdb.python/py-mi.exp: examine container children=0, no pretty-printing
+PASS: gdb.python/py-mi.exp: delete varobj
+PASS: gdb.python/py-mi.exp: create nscont varobj, no pretty-printing
+PASS: gdb.python/py-mi.exp: examine nscont children=0, no pretty-printing
+PASS: gdb.python/py-mi.exp: delete varobj
+PASS: gdb.python/py-mi.exp: create string_1 varobj
+PASS: gdb.python/py-mi.exp: create estring varobj
+PASS: gdb.python/py-mi.exp: assign string_1 from string_2
+PASS: gdb.python/py-mi.exp: update string varobj after assignment
+PASS: gdb.python/py-mi.exp: create container varobj
+PASS: gdb.python/py-mi.exp: examine container children=0
+PASS: gdb.python/py-mi.exp: next over update 1
+PASS: gdb.python/py-mi.exp: varobj update 1
+PASS: gdb.python/py-mi.exp: next over update 2
+PASS: gdb.python/py-mi.exp: varobj update 2
+PASS: gdb.python/py-mi.exp: clear visualizer
+PASS: gdb.python/py-mi.exp: varobj update after clearing
+PASS: gdb.python/py-mi.exp: choose default visualizer
+PASS: gdb.python/py-mi.exp: varobj update after choosing default
+PASS: gdb.python/py-mi.exp: choose visualizer using expression
+PASS: gdb.python/py-mi.exp: varobj update after choosing via expression
+PASS: gdb.python/py-mi.exp: list varobj children after selecting child range
+PASS: gdb.python/py-mi.exp: list varobj children after resetting child range
+PASS: gdb.python/py-mi.exp: next over update 3
+PASS: gdb.python/py-mi.exp: set update range
+PASS: gdb.python/py-mi.exp: list children after setting update range
+PASS: gdb.python/py-mi.exp: list selected children after setting range
+PASS: gdb.python/py-mi.exp: list children after listing selected range
+PASS: gdb.python/py-mi.exp: next over update 4
+PASS: gdb.python/py-mi.exp: update after next with restricted range
+PASS: gdb.python/py-mi.exp: set update range with non-zero start
+PASS: gdb.python/py-mi.exp: update varobj with change outside selected range
+PASS: gdb.python/py-mi.exp: next over update 5
+PASS: gdb.python/py-mi.exp: create second container varobj
+PASS: gdb.python/py-mi.exp: update varobj, no children requested
+PASS: gdb.python/py-mi.exp: next over update 6
+PASS: gdb.python/py-mi.exp: update varobj 2, no children requested
+PASS: gdb.python/py-mi.exp: run to 131 (set breakpoint)
+PASS: gdb.python/py-mi.exp: create outer varobj
+PASS: gdb.python/py-mi.exp: list children of outer
+PASS: gdb.python/py-mi.exp: list children of outer.s
+PASS: gdb.python/py-mi.exp: next over outer update
+PASS: gdb.python/py-mi.exp: update after updating element of outer
+PASS: gdb.python/py-mi.exp: run to 222 (set breakpoint)
+PASS: gdb.python/py-mi.exp: update after type change
+PASS: gdb.python/py-mi.exp: run to 351 (set breakpoint)
+PASS: gdb.python/py-mi.exp: create nstype varobj
+PASS: gdb.python/py-mi.exp: list children after setting update range
+PASS: gdb.python/py-mi.exp: clear visualizer
+PASS: gdb.python/py-mi.exp: varobj update after clearing
+PASS: gdb.python/py-mi.exp: choose default visualizer
+PASS: gdb.python/py-mi.exp: create nstype2 varobj
+PASS: gdb.python/py-mi.exp: list children after setting exception flag
+PASS: gdb.python/py-mi.exp: create me varobj
+PASS: gdb.python/py-mi.exp: evaluate me varobj
+PASS: gdb.python/py-mi.exp: printer whose children are returned as a list
+PASS: gdb.python/py-mi.exp: run to 254 (set breakpoint)
+PASS: gdb.python/py-mi.exp: create varobj for c
+PASS: gdb.python/py-mi.exp: choose array visualizer for c
+PASS: gdb.python/py-mi.exp: list children of c
+PASS: gdb.python/py-mi.exp: next over change of array element
+PASS: gdb.python/py-mi.exp: update varobj after element change
+PASS: gdb.python/py-mi.exp: breakpoint at main
+PASS: gdb.python/py-mi.exp: mi runto main
+PASS: gdb.python/py-mi.exp: run to 351 (set breakpoint)
+PASS: gdb.python/py-mi.exp: create fake varobj
+PASS: gdb.python/py-mi.exp: list children of fake
+PASS: gdb.python/py-mi.exp: list children fake.private
+PASS: gdb.python/py-mi.exp: Install visualizer on a cplus_fake_child
+Running ./gdb.python/py-objfile.exp ...
+PASS: gdb.python/py-objfile.exp: Find a symbol in objfile
+PASS: gdb.python/py-objfile.exp: Get backing object file
+PASS: gdb.python/py-objfile.exp: Get objfile validity
+PASS: gdb.python/py-objfile.exp: Get objfile validity
+PASS: gdb.python/py-objfile.exp: Get objfile validity after unload
+Running ./gdb.python/py-objfile-script.exp ...
+PASS: gdb.python/py-objfile-script.exp: set auto-load safe-path
+PASS: gdb.python/py-objfile-script.exp: info auto-load python-scripts
+PASS: gdb.python/py-objfile-script.exp: b 38
+PASS: gdb.python/py-objfile-script.exp: continue
+PASS: gdb.python/py-objfile-script.exp: print ss
+Running ./gdb.python/py-parameter.exp ...
+PASS: gdb.python/py-parameter.exp: python print (gdb.parameter ('directories'))
+PASS: gdb.python/py-parameter.exp: Simple gdb booleanparameter - python
+PASS: gdb.python/py-parameter.exp: Simple gdb booleanparameter - class TestParam (gdb.Parameter):
+PASS: gdb.python/py-parameter.exp: Simple gdb booleanparameter - """When enabled, test param does something useful. When disabled, does nothing."""
+PASS: gdb.python/py-parameter.exp: Simple gdb booleanparameter - show_doc = "Show the state of the boolean test-param"
+PASS: gdb.python/py-parameter.exp: Simple gdb booleanparameter - set_doc = "Set the state of the boolean test-param"
+PASS: gdb.python/py-parameter.exp: Simple gdb booleanparameter - def get_show_string (self, pvalue):
+PASS: gdb.python/py-parameter.exp: Simple gdb booleanparameter - return "The state of the Test Parameter is " + pvalue
+PASS: gdb.python/py-parameter.exp: Simple gdb booleanparameter - def get_set_string (self):
+PASS: gdb.python/py-parameter.exp: Simple gdb booleanparameter - val = "on"
+PASS: gdb.python/py-parameter.exp: Simple gdb booleanparameter - if (self.value == False):
+PASS: gdb.python/py-parameter.exp: Simple gdb booleanparameter - val = "off"
+PASS: gdb.python/py-parameter.exp: Simple gdb booleanparameter - return "Test Parameter has been set to " + val
+PASS: gdb.python/py-parameter.exp: Simple gdb booleanparameter - def __init__ (self, name):
+PASS: gdb.python/py-parameter.exp: Simple gdb booleanparameter - super (TestParam, self).__init__ (name, gdb.COMMAND_DATA, gdb.PARAM_BOOLEAN)
+PASS: gdb.python/py-parameter.exp: Simple gdb booleanparameter - self.value = True
+PASS: gdb.python/py-parameter.exp: Simple gdb booleanparameter - test_param = TestParam ('print test-param')
+PASS: gdb.python/py-parameter.exp: Simple gdb booleanparameter - end
+PASS: gdb.python/py-parameter.exp: Test parameter value
+PASS: gdb.python/py-parameter.exp: Show parameter on
+PASS: gdb.python/py-parameter.exp: Turn off parameter
+PASS: gdb.python/py-parameter.exp: Show parameter off
+PASS: gdb.python/py-parameter.exp: Test parameter value
+PASS: gdb.python/py-parameter.exp: Test show help
+PASS: gdb.python/py-parameter.exp: Test set help
+PASS: gdb.python/py-parameter.exp: Test general help
+PASS: gdb.python/py-parameter.exp: enum gdb parameter - python
+PASS: gdb.python/py-parameter.exp: enum gdb parameter - class TestEnumParam (gdb.Parameter):
+PASS: gdb.python/py-parameter.exp: enum gdb parameter - """When set, test param does something useful. When disabled, does nothing."""
+PASS: gdb.python/py-parameter.exp: enum gdb parameter - show_doc = "Show the state of the enum"
+PASS: gdb.python/py-parameter.exp: enum gdb parameter - set_doc = "Set the state of the enum"
+PASS: gdb.python/py-parameter.exp: enum gdb parameter - def get_show_string (self, pvalue):
+PASS: gdb.python/py-parameter.exp: enum gdb parameter - return "The state of the enum is " + pvalue
+PASS: gdb.python/py-parameter.exp: enum gdb parameter - def get_set_string (self):
+PASS: gdb.python/py-parameter.exp: enum gdb parameter - return "The state of the enum has been set to " + self.value
+PASS: gdb.python/py-parameter.exp: enum gdb parameter - def __init__ (self, name):
+PASS: gdb.python/py-parameter.exp: enum gdb parameter - super (TestEnumParam, self).__init__ (name, gdb.COMMAND_DATA, gdb.PARAM_ENUM, ["one", "two"])
+PASS: gdb.python/py-parameter.exp: enum gdb parameter - self.value = "one"
+PASS: gdb.python/py-parameter.exp: enum gdb parameter - test_enum_param = TestEnumParam ('print test-enum-param')
+PASS: gdb.python/py-parameter.exp: enum gdb parameter - end
+PASS: gdb.python/py-parameter.exp: Test enum parameter value
+PASS: gdb.python/py-parameter.exp: Show parameter is initial value
+PASS: gdb.python/py-parameter.exp: Set enum to two
+PASS: gdb.python/py-parameter.exp: Show parameter is new value
+PASS: gdb.python/py-parameter.exp: Test enum parameter value
+PASS: gdb.python/py-parameter.exp: Set invalid enum parameter
+PASS: gdb.python/py-parameter.exp: file gdb parameter - python
+PASS: gdb.python/py-parameter.exp: file gdb parameter - class TestFileParam (gdb.Parameter):
+PASS: gdb.python/py-parameter.exp: file gdb parameter - """When set, test param does something useful. When disabled, does nothing."""
+PASS: gdb.python/py-parameter.exp: file gdb parameter - show_doc = "Show the name of the file"
+PASS: gdb.python/py-parameter.exp: file gdb parameter - set_doc = "Set the name of the file"
+PASS: gdb.python/py-parameter.exp: file gdb parameter - def get_show_string (self, pvalue):
+PASS: gdb.python/py-parameter.exp: file gdb parameter - return "The name of the file is " + pvalue
+PASS: gdb.python/py-parameter.exp: file gdb parameter - def get_set_string (self):
+PASS: gdb.python/py-parameter.exp: file gdb parameter - return "The name of the file has been changed to " + self.value
+PASS: gdb.python/py-parameter.exp: file gdb parameter - def __init__ (self, name):
+PASS: gdb.python/py-parameter.exp: file gdb parameter - super (TestFileParam, self).__init__ (name, gdb.COMMAND_FILES, gdb.PARAM_FILENAME)
+PASS: gdb.python/py-parameter.exp: file gdb parameter - self.value = "foo.txt"
+PASS: gdb.python/py-parameter.exp: file gdb parameter - test_file_param = TestFileParam ('test-file-param')
+PASS: gdb.python/py-parameter.exp: file gdb parameter - end
+PASS: gdb.python/py-parameter.exp: Test file parameter value
+PASS: gdb.python/py-parameter.exp: Show initial file value
+PASS: gdb.python/py-parameter.exp: Set new file parameter
+PASS: gdb.python/py-parameter.exp: Show new file value
+PASS: gdb.python/py-parameter.exp: Test new file parameter value
+PASS: gdb.python/py-parameter.exp: set test-file-param
+PASS: gdb.python/py-parameter.exp: Simple gdb booleanparameter - python
+PASS: gdb.python/py-parameter.exp: Simple gdb booleanparameter - class TestUndocParam (gdb.Parameter):
+PASS: gdb.python/py-parameter.exp: Simple gdb booleanparameter - def get_show_string (self, pvalue):
+PASS: gdb.python/py-parameter.exp: Simple gdb booleanparameter - return "The state of the Test Parameter is " + pvalue
+PASS: gdb.python/py-parameter.exp: Simple gdb booleanparameter - def get_set_string (self):
+PASS: gdb.python/py-parameter.exp: Simple gdb booleanparameter - val = "on"
+PASS: gdb.python/py-parameter.exp: Simple gdb booleanparameter - if (self.value == False):
+PASS: gdb.python/py-parameter.exp: Simple gdb booleanparameter - val = "off"
+PASS: gdb.python/py-parameter.exp: Simple gdb booleanparameter - return "Test Parameter has been set to " + val
+PASS: gdb.python/py-parameter.exp: Simple gdb booleanparameter - def __init__ (self, name):
+PASS: gdb.python/py-parameter.exp: Simple gdb booleanparameter - super (TestUndocParam, self).__init__ (name, gdb.COMMAND_DATA, gdb.PARAM_BOOLEAN)
+PASS: gdb.python/py-parameter.exp: Simple gdb booleanparameter - self.value = True
+PASS: gdb.python/py-parameter.exp: Simple gdb booleanparameter - test_undoc_param = TestUndocParam ('print test-undoc-param')
+PASS: gdb.python/py-parameter.exp: Simple gdb booleanparameter - end
+PASS: gdb.python/py-parameter.exp: Show parameter on
+PASS: gdb.python/py-parameter.exp: Turn off parameter
+PASS: gdb.python/py-parameter.exp: Show parameter off
+PASS: gdb.python/py-parameter.exp: Test parameter value
+PASS: gdb.python/py-parameter.exp: Test show help
+PASS: gdb.python/py-parameter.exp: Test set help
+PASS: gdb.python/py-parameter.exp: Test general help
+PASS: gdb.python/py-parameter.exp: Simple gdb booleanparameter - python
+PASS: gdb.python/py-parameter.exp: Simple gdb booleanparameter - class TestNodocParam (gdb.Parameter):
+PASS: gdb.python/py-parameter.exp: Simple gdb booleanparameter - def __init__ (self, name):
+PASS: gdb.python/py-parameter.exp: Simple gdb booleanparameter - super (TestNodocParam, self).__init__ (name, gdb.COMMAND_DATA, gdb.PARAM_BOOLEAN)
+PASS: gdb.python/py-parameter.exp: Simple gdb booleanparameter - self.value = True
+PASS: gdb.python/py-parameter.exp: Simple gdb booleanparameter - test_nodoc_param = TestNodocParam ('print test-nodoc-param')
+PASS: gdb.python/py-parameter.exp: Simple gdb booleanparameter - end
+PASS: gdb.python/py-parameter.exp: Show parameter on
+PASS: gdb.python/py-parameter.exp: Turn off parameter
+PASS: gdb.python/py-parameter.exp: Show parameter off
+PASS: gdb.python/py-parameter.exp: Test parameter value
+PASS: gdb.python/py-parameter.exp: Test show help
+PASS: gdb.python/py-parameter.exp: Test set help
+PASS: gdb.python/py-parameter.exp: Test general help
+PASS: gdb.python/py-parameter.exp: Simple gdb booleanparameter - python
+PASS: gdb.python/py-parameter.exp: Simple gdb booleanparameter - class TestParam (gdb.Parameter):
+PASS: gdb.python/py-parameter.exp: Simple gdb booleanparameter - """When enabled, test param does something useful. When disabled, does nothing."""
+PASS: gdb.python/py-parameter.exp: Simple gdb booleanparameter - show_doc = "State of the Test Parameter"
+PASS: gdb.python/py-parameter.exp: Simple gdb booleanparameter - set_doc = "Set the state of the Test Parameter"
+PASS: gdb.python/py-parameter.exp: Simple gdb booleanparameter - def __init__ (self, name):
+PASS: gdb.python/py-parameter.exp: Simple gdb booleanparameter - super (TestParam, self).__init__ (name, gdb.COMMAND_DATA, gdb.PARAM_BOOLEAN)
+PASS: gdb.python/py-parameter.exp: Simple gdb booleanparameter - self.value = True
+PASS: gdb.python/py-parameter.exp: Simple gdb booleanparameter - test_param = TestParam ('print test-param')
+PASS: gdb.python/py-parameter.exp: Simple gdb booleanparameter - end
+PASS: gdb.python/py-parameter.exp: Test parameter value
+PASS: gdb.python/py-parameter.exp: Show parameter on
+PASS: gdb.python/py-parameter.exp: Turn off parameter
+PASS: gdb.python/py-parameter.exp: Show parameter off
+PASS: gdb.python/py-parameter.exp: Test parameter value
+PASS: gdb.python/py-parameter.exp: Test show help
+PASS: gdb.python/py-parameter.exp: Test set help
+PASS: gdb.python/py-parameter.exp: Test general help
+Running ./gdb.python/py-pp-maint.exp ...
+PASS: gdb.python/py-pp-maint.exp: b 77
+PASS: gdb.python/py-pp-maint.exp: continue
+PASS: gdb.python/py-pp-maint.exp: info pretty-printer
+PASS: gdb.python/py-pp-maint.exp: info pretty-printer global .*function
+PASS: gdb.python/py-pp-maint.exp: info pretty-printer .* pp-test
+PASS: gdb.python/py-pp-maint.exp: print flt enabled #1
+PASS: gdb.python/py-pp-maint.exp: print ss enabled #1
+PASS: gdb.python/py-pp-maint.exp: disable pretty-printer
+PASS: gdb.python/py-pp-maint.exp: enable pretty-printer
+PASS: gdb.python/py-pp-maint.exp: disable pretty-printer global
+PASS: gdb.python/py-pp-maint.exp: enable pretty-printer
+PASS: gdb.python/py-pp-maint.exp: disable pretty-printer global lookup_function_lookup_test
+PASS: gdb.python/py-pp-maint.exp: disable pretty-printer global pp-test;.*
+PASS: gdb.python/py-pp-maint.exp: info pretty-printer global .*function
+PASS: gdb.python/py-pp-maint.exp: info pretty-printer .* pp-test
+PASS: gdb.python/py-pp-maint.exp: print flt disabled
+PASS: gdb.python/py-pp-maint.exp: print ss disabled
+PASS: gdb.python/py-pp-maint.exp: enable pretty-printer global lookup_function_lookup_test
+PASS: gdb.python/py-pp-maint.exp: enable pretty-printer global pp-test
+PASS: gdb.python/py-pp-maint.exp: enable pretty-printer global pp-test;.*ss.*
+PASS: gdb.python/py-pp-maint.exp: enable pretty-printer global pp-test;.*s.*
+PASS: gdb.python/py-pp-maint.exp: enable pretty-printer global pp-test;.*
+PASS: gdb.python/py-pp-maint.exp: info pretty-printer
+PASS: gdb.python/py-pp-maint.exp: print flt re-enabled
+PASS: gdb.python/py-pp-maint.exp: print ss re-enabled
+PASS: gdb.python/py-pp-maint.exp: print FLAG_1
+PASS: gdb.python/py-pp-maint.exp: print FLAG_1 | FLAG_3
+PASS: gdb.python/py-pp-maint.exp: print FLAG_1 | 8
+Running ./gdb.python/py-prettyprint.exp ...
+PASS: gdb.python/py-prettyprint.exp: set print pretty on
+PASS: gdb.python/py-prettyprint.exp: b 351
+PASS: gdb.python/py-prettyprint.exp: continue
+PASS: gdb.python/py-prettyprint.exp: python exec (open ('py-prettyprint.py').read ())
+PASS: gdb.python/py-prettyprint.exp: print ss
+PASS: gdb.python/py-prettyprint.exp: print ssa[1]
+PASS: gdb.python/py-prettyprint.exp: print ssa
+PASS: gdb.python/py-prettyprint.exp: print arraystruct
+PASS: gdb.python/py-prettyprint.exp: print ns2
+PASS: gdb.python/py-prettyprint.exp: print x
+PASS: gdb.python/py-prettyprint.exp: print cstring
+PASS: gdb.python/py-prettyprint.exp: print estring
+PASS: gdb.python/py-prettyprint.exp: python pp_ls_encoding = 'UTF-8'
+PASS: gdb.python/py-prettyprint.exp: print estring2
+PASS: gdb.python/py-prettyprint.exp: set python print-stack full
+PASS: gdb.python/py-prettyprint.exp: print hint_error
+PASS: gdb.python/py-prettyprint.exp: print c
+PASS: gdb.python/py-prettyprint.exp: print nstype
+PASS: gdb.python/py-prettyprint.exp: set print pretty off
+PASS: gdb.python/py-prettyprint.exp: print nstype on one line
+FAIL: gdb.python/py-prettyprint.exp: setting breakpoint at exit
+PASS: gdb.python/py-prettyprint.exp: set print pretty on
+PASS: gdb.python/py-prettyprint.exp: b 351
+PASS: gdb.python/py-prettyprint.exp: continue
+PASS: gdb.python/py-prettyprint.exp: python exec (open ('py-prettyprint.py').read ())
+PASS: gdb.python/py-prettyprint.exp: print ss
+PASS: gdb.python/py-prettyprint.exp: print ssa[1]
+PASS: gdb.python/py-prettyprint.exp: print ssa
+PASS: gdb.python/py-prettyprint.exp: print arraystruct
+PASS: gdb.python/py-prettyprint.exp: print cps
+PASS: gdb.python/py-prettyprint.exp: print cpss
+PASS: gdb.python/py-prettyprint.exp: print cpssa[0]
+PASS: gdb.python/py-prettyprint.exp: print cpssa[1]
+PASS: gdb.python/py-prettyprint.exp: print cpssa
+PASS: gdb.python/py-prettyprint.exp: print sss
+PASS: gdb.python/py-prettyprint.exp: print ref
+PASS: gdb.python/py-prettyprint.exp: print derived
+PASS: gdb.python/py-prettyprint.exp: print ns
+PASS: gdb.python/py-prettyprint.exp:
+PASS: gdb.python/py-prettyprint.exp: print ns
+PASS: gdb.python/py-prettyprint.exp:
+PASS: gdb.python/py-prettyprint.exp: print ns
+PASS: gdb.python/py-prettyprint.exp:
+PASS: gdb.python/py-prettyprint.exp: print ns2
+PASS: gdb.python/py-prettyprint.exp: print x
+PASS: gdb.python/py-prettyprint.exp: print cstring
+PASS: gdb.python/py-prettyprint.exp: print estring
+PASS: gdb.python/py-prettyprint.exp: python pp_ls_encoding = 'UTF-8'
+PASS: gdb.python/py-prettyprint.exp: print estring2
+PASS: gdb.python/py-prettyprint.exp: set python print-stack full
+PASS: gdb.python/py-prettyprint.exp: print hint_error
+PASS: gdb.python/py-prettyprint.exp: print c
+PASS: gdb.python/py-prettyprint.exp: print nstype
+PASS: gdb.python/py-prettyprint.exp: set print pretty off
+PASS: gdb.python/py-prettyprint.exp: print nstype on one line
+FAIL: gdb.python/py-prettyprint.exp: setting breakpoint at exit
+PASS: gdb.python/py-prettyprint.exp: python exec (open ('py-prettyprint.py').read ())
+PASS: gdb.python/py-prettyprint.exp: continue to breakpoint: eval-break
+PASS: gdb.python/py-prettyprint.exp: info locals
+PASS: gdb.python/py-prettyprint.exp: b 351
+PASS: gdb.python/py-prettyprint.exp: continue
+PASS: gdb.python/py-prettyprint.exp: print ss enabled #1
+PASS: gdb.python/py-prettyprint.exp: python disable_lookup_function ()
+PASS: gdb.python/py-prettyprint.exp: print ss disabled
+PASS: gdb.python/py-prettyprint.exp: python enable_lookup_function ()
+PASS: gdb.python/py-prettyprint.exp: print ss enabled #2
+Running ./gdb.python/py-progspace.exp ...
+PASS: gdb.python/py-progspace.exp: current progspace filename (None)
+PASS: gdb.python/py-progspace.exp: python print (gdb.progspaces())
+PASS: gdb.python/py-progspace.exp: current progspace filename (py-progspace)
+Running ./gdb.python/py-prompt.exp ...
+Running ./gdb.python/py-section-script.exp ...
+PASS: gdb.python/py-section-script.exp: set auto-load safe-path
+PASS: gdb.python/py-section-script.exp: info auto-load python-scripts
+PASS: gdb.python/py-section-script.exp: info auto-load python-scripts py-section-script
+PASS: gdb.python/py-section-script.exp: info auto-load python-scripts no-script-matches-this
+PASS: gdb.python/py-section-script.exp: b 51
+PASS: gdb.python/py-section-script.exp: continue
+PASS: gdb.python/py-section-script.exp: print ss
+Running ./gdb.python/py-shared.exp ...
+PASS: gdb.python/py-shared.exp: func1 address
+FAIL: gdb.python/py-shared.exp: Aquire func1 address
+FAIL: gdb.python/py-shared.exp: test func1 solib location
+PASS: gdb.python/py-shared.exp: main address
+PASS: gdb.python/py-shared.exp: Aquire main address
+PASS: gdb.python/py-shared.exp: test main solib location
+Running ./gdb.python/py-strfns.exp ...
+PASS: gdb.python/py-strfns.exp: p $_streq (str1, str2)
+PASS: gdb.python/py-strfns.exp: p $_streq (str1, str3)
+PASS: gdb.python/py-strfns.exp: p $_strlen (str1)
+PASS: gdb.python/py-strfns.exp: p $_strlen (buf1)
+PASS: gdb.python/py-strfns.exp: p $_memeq (buf1, buf2, 4)
+PASS: gdb.python/py-strfns.exp: p $_memeq (buf1, buf3, 4)
+PASS: gdb.python/py-strfns.exp: p $_regex (str1, "Hello")
+PASS: gdb.python/py-strfns.exp: p $_regex (str1, "Help")
+PASS: gdb.python/py-strfns.exp: p $_regex (str1, "^Hello")
+PASS: gdb.python/py-strfns.exp: p $_regex (str1, "^Hello.$")
+PASS: gdb.python/py-strfns.exp: condition $bpnum $_streq (arg, "Goodbye.")
+PASS: gdb.python/py-strfns.exp: continue to breakpoint: Break func here.
+PASS: gdb.python/py-strfns.exp: p arg
+PASS: gdb.python/py-strfns.exp: condition $bpnum $_memeq (arg, buf3, 4)
+PASS: gdb.python/py-strfns.exp: continue to breakpoint: Break bfunc here.
+PASS: gdb.python/py-strfns.exp: p /d {char[4]} arg
+PASS: gdb.python/py-strfns.exp: save a corefile
+PASS: gdb.python/py-strfns.exp: re-load generated corefile
+PASS: gdb.python/py-strfns.exp: p $_streq (str1, str2)
+PASS: gdb.python/py-strfns.exp: p $_streq (str1, str3)
+PASS: gdb.python/py-strfns.exp: p $_strlen (str1)
+PASS: gdb.python/py-strfns.exp: p $_strlen (buf1)
+PASS: gdb.python/py-strfns.exp: p $_memeq (buf1, buf2, 4)
+PASS: gdb.python/py-strfns.exp: p $_memeq (buf1, buf3, 4)
+PASS: gdb.python/py-strfns.exp: p $_regex (str1, "Hello")
+PASS: gdb.python/py-strfns.exp: p $_regex (str1, "Help")
+PASS: gdb.python/py-strfns.exp: p $_regex (str1, "^Hello")
+PASS: gdb.python/py-strfns.exp: p $_regex (str1, "^Hello.$")
+Running ./gdb.python/py-symbol.exp ...
+PASS: gdb.python/py-symbol.exp: Lookup main
+PASS: gdb.python/py-symbol.exp: Test main_func.is_function
+PASS: gdb.python/py-symbol.exp: Test lookup_global_symbol("junk")
+PASS: gdb.python/py-symbol.exp: print value of main
+PASS: gdb.python/py-symbol.exp: print line number of qq
+PASS: gdb.python/py-symbol.exp: print value of qq
+PASS: gdb.python/py-symbol.exp: print whether qq needs a frame
+PASS: gdb.python/py-symbol.exp: continue to breakpoint: Block break here.
+PASS: gdb.python/py-symbol.exp: Test arg.is_variable
+PASS: gdb.python/py-symbol.exp: Test arg.is_constant
+PASS: gdb.python/py-symbol.exp: Test arg.is_argument
+PASS: gdb.python/py-symbol.exp: Test arg.is_function
+PASS: gdb.python/py-symbol.exp: Test func.is_variable
+PASS: gdb.python/py-symbol.exp: Test func.is_constant
+PASS: gdb.python/py-symbol.exp: Test func.is_argument
+PASS: gdb.python/py-symbol.exp: Test func.is_function
+PASS: gdb.python/py-symbol.exp: Test func.name
+PASS: gdb.python/py-symbol.exp: Test func.print_name
+PASS: gdb.python/py-symbol.exp: Test func.linkage_name
+PASS: gdb.python/py-symbol.exp: Test func.addr_class
+PASS: gdb.python/py-symbol.exp: continue to breakpoint: Break at end.
+PASS: gdb.python/py-symbol.exp: Test a.is_variable
+PASS: gdb.python/py-symbol.exp: Test a.is_constant
+PASS: gdb.python/py-symbol.exp: Test a.is_argument
+PASS: gdb.python/py-symbol.exp: Test a.is_function
+PASS: gdb.python/py-symbol.exp: Test a.addr_class
+PASS: gdb.python/py-symbol.exp: try to print value of a without a frame
+PASS: gdb.python/py-symbol.exp: print value of a
+PASS: gdb.python/py-symbol.exp: print whether a needs a frame
+PASS: gdb.python/py-symbol.exp: Test t.is_variable
+PASS: gdb.python/py-symbol.exp: Test t.is_constant
+PASS: gdb.python/py-symbol.exp: Test t.is_argument
+PASS: gdb.python/py-symbol.exp: Test t.is_function
+PASS: gdb.python/py-symbol.exp: Test t.addr_class
+PASS: gdb.python/py-symbol.exp: Get type
+PASS: gdb.python/py-symbol.exp: Get symtab
+PASS: gdb.python/py-symbol.exp: continue to breakpoint: Break in class.
+PASS: gdb.python/py-symbol.exp: Test func.is_variable
+PASS: gdb.python/py-symbol.exp: Test func.is_constant
+PASS: gdb.python/py-symbol.exp: Test func.is_argument
+PASS: gdb.python/py-symbol.exp: Test func.is_function
+PASS: gdb.python/py-symbol.exp: Test func.name
+PASS: gdb.python/py-symbol.exp: Test func.print_name
+PASS: gdb.python/py-symbol.exp: Test func.linkage_name
+PASS: gdb.python/py-symbol.exp: Test func.addr_class
+PASS: gdb.python/py-symbol.exp: continue to breakpoint: Break at end.
+PASS: gdb.python/py-symbol.exp: Test symbol validity
+PASS: gdb.python/py-symbol.exp: Test symbol validity
+PASS: gdb.python/py-symbol.exp: Test symbol destructor
+Running ./gdb.python/py-symtab.exp ...
+PASS: gdb.python/py-symtab.exp: continue to breakpoint: Block break here.
+PASS: gdb.python/py-symtab.exp: Test symtab
+PASS: gdb.python/py-symtab.exp: Test sal.pc
+PASS: gdb.python/py-symtab.exp: Test sal.last
+PASS: gdb.python/py-symtab.exp: Test sal.line
+PASS: gdb.python/py-symtab.exp: Test sal.is_valid
+PASS: gdb.python/py-symtab.exp: Test symtab.filename
+PASS: gdb.python/py-symtab.exp: Test symtab.objfile
+PASS: gdb.python/py-symtab.exp: Test symtab.fullname
+PASS: gdb.python/py-symtab.exp: Test symtab.is_valid()
+PASS: gdb.python/py-symtab.exp: Test qq in global symbols
+PASS: gdb.python/py-symtab.exp: Test func in global symbols
+PASS: gdb.python/py-symtab.exp: Test main in global symbols
+PASS: gdb.python/py-symtab.exp: Test int in static symbols
+PASS: gdb.python/py-symtab.exp: Test char in static symbols
+PASS: gdb.python/py-symtab.exp: Test simple_struct in static symbols
+PASS: gdb.python/py-symtab.exp: Test sal.is_valid
+PASS: gdb.python/py-symtab.exp: Test symtab.is_valid()
+PASS: gdb.python/py-symtab.exp: Test sal destructor
+PASS: gdb.python/py-symtab.exp: Test symtab destructor
+Running ./gdb.python/py-template.exp ...
+PASS: gdb.python/py-template.exp: print (foo)
+PASS: gdb.python/py-template.exp: python foo = gdb.history(0)
+PASS: gdb.python/py-template.exp: const int
+PASS: gdb.python/py-template.exp: print (foo)
+PASS: gdb.python/py-template.exp: python foo = gdb.history(0)
+PASS: gdb.python/py-template.exp: volatile int
+PASS: gdb.python/py-template.exp: print (foo)
+PASS: gdb.python/py-template.exp: python foo = gdb.history(0)
+PASS: gdb.python/py-template.exp: const int &
+PASS: gdb.python/py-template.exp: print (foo)
+PASS: gdb.python/py-template.exp: python foo = gdb.history(0)
+PASS: gdb.python/py-template.exp: volatile int &
+PASS: gdb.python/py-template.exp: print (foo)
+PASS: gdb.python/py-template.exp: python foo = gdb.history(0)
+PASS: gdb.python/py-template.exp: volatile int * const
+PASS: gdb.python/py-template.exp: print (foo)
+PASS: gdb.python/py-template.exp: python foo = gdb.history(0)
+PASS: gdb.python/py-template.exp: volatile int * const *
+PASS: gdb.python/py-template.exp: print (foo)
+PASS: gdb.python/py-template.exp: python foo = gdb.history(0)
+PASS: gdb.python/py-template.exp: const int * volatile
+PASS: gdb.python/py-template.exp: print (foo)
+PASS: gdb.python/py-template.exp: python foo = gdb.history(0)
+PASS: gdb.python/py-template.exp: const int * volatile * const * volatile *
+Running ./gdb.python/python.exp ...
+PASS: gdb.python/python.exp: multi-line python command - python
+PASS: gdb.python/python.exp: multi-line python command - print (23)
+PASS: gdb.python/python.exp: multi-line python command - end
+PASS: gdb.python/python.exp: show python command - define zzq
+PASS: gdb.python/python.exp: show python command - python
+PASS: gdb.python/python.exp: show python command - print (23)
+PASS: gdb.python/python.exp: show python command - end
+PASS: gdb.python/python.exp: show python command - end
+PASS: gdb.python/python.exp: show python command - show user zzq
+PASS: gdb.python/python.exp: indented multi-line python command - python
+PASS: gdb.python/python.exp: indented multi-line python command - def foo ():
+PASS: gdb.python/python.exp: indented multi-line python command - print ('hello, world!')
+PASS: gdb.python/python.exp: indented multi-line python command - foo ()
+PASS: gdb.python/python.exp: indented multi-line python command - end
+PASS: gdb.python/python.exp: source source2.py
+PASS: gdb.python/python.exp: source -s source2.py
+PASS: gdb.python/python.exp: python print (gdb.current_objfile())
+PASS: gdb.python/python.exp: python print (gdb.objfiles())
+PASS: gdb.python/python.exp: pythonX.Y/lib-dynload/*.so
+PASS: gdb.python/python.exp: python x = gdb.execute('printf "%d", 23', to_string = True)
+PASS: gdb.python/python.exp: python print (x)
+PASS: gdb.python/python.exp: post event insertion - python
+PASS: gdb.python/python.exp: post event insertion - someVal = 0
+PASS: gdb.python/python.exp: post event insertion - class Foo(object):
+PASS: gdb.python/python.exp: post event insertion - def __call__(self):
+PASS: gdb.python/python.exp: post event insertion - global someVal
+PASS: gdb.python/python.exp: post event insertion - someVal += 1
+PASS: gdb.python/python.exp: post event insertion - gdb.post_event(Foo())
+PASS: gdb.python/python.exp: post event insertion - end
+PASS: gdb.python/python.exp: test post event execution
+PASS: gdb.python/python.exp: Test non callable class
+PASS: gdb.python/python.exp: show height
+PASS: gdb.python/python.exp: set height 10
+PASS: gdb.python/python.exp: verify pagination beforehand
+PASS: gdb.python/python.exp: verify pagination beforehand: q
+PASS: gdb.python/python.exp: gdb.execute does not page
+PASS: gdb.python/python.exp: verify pagination afterwards
+PASS: gdb.python/python.exp: verify pagination afterwards: q
+PASS: gdb.python/python.exp: set height 0
+PASS: gdb.python/python.exp: collect help from uiout
+PASS: gdb.python/python.exp: verify help to uiout
+PASS: gdb.python/python.exp: Attempt to aquire thread with no inferior
+PASS: gdb.python/python.exp: Ensure that no threads are returned
+PASS: gdb.python/python.exp: register atexit function - python
+PASS: gdb.python/python.exp: register atexit function - import atexit
+PASS: gdb.python/python.exp: register atexit function - def printit(arg):
+PASS: gdb.python/python.exp: register atexit function - print (arg)
+PASS: gdb.python/python.exp: register atexit function - atexit.register(printit, 'good bye world')
+PASS: gdb.python/python.exp: register atexit function - end
+PASS: gdb.python/python.exp: atexit handling
+PASS: gdb.python/python.exp: test decode_line no source named main
+PASS: gdb.python/python.exp: test decode_line current location
+PASS: gdb.python/python.exp: Test decode_line current location
+PASS: gdb.python/python.exp: Test decode_line expression parse
+PASS: gdb.python/python.exp: Test decode_line current location
+PASS: gdb.python/python.exp: Test decode_line current locationn filename
+PASS: gdb.python/python.exp: Test decode_line current location line number
+PASS: gdb.python/python.exp: test decode_line python.c:26
+PASS: gdb.python/python.exp: Test decode_line python.c:26 length
+PASS: gdb.python/python.exp: Test decode_line expression parse
+PASS: gdb.python/python.exp: Test decode_line python.c:26 length
+PASS: gdb.python/python.exp: Test decode_line python.c:26 filename
+PASS: gdb.python/python.exp: Test decode_line python.c:26 line number
+PASS: gdb.python/python.exp: test decode_line randomfunc
+PASS: gdb.python/python.exp: test decode_line func1()
+PASS: gdb.python/python.exp: Test decode_line func1 length
+PASS: gdb.python/python.exp: Test decode_line func1 length
+PASS: gdb.python/python.exp: Test decode_line func1 filename
+PASS: gdb.python/python.exp: Test decode_line func1 line number
+PASS: gdb.python/python.exp: test decode_line func1,func2
+PASS: gdb.python/python.exp: stop at comma in linespec
+PASS: gdb.python/python.exp: Test stderr location
+PASS: gdb.python/python.exp: Test stdout location
+PASS: gdb.python/python.exp: Test default write
+PASS: gdb.python/python.exp: Test stderr write
+PASS: gdb.python/python.exp: Test stdout write
+PASS: gdb.python/python.exp: Test stdlog write
+PASS: gdb.python/python.exp: Test print-backtrace show setting. Default is message.
+PASS: gdb.python/python.exp: Test print-backtrace set setting
+PASS: gdb.python/python.exp: Test print-backtrace show setting to full.
+PASS: gdb.python/python.exp: prompt substitution - python
+PASS: gdb.python/python.exp: prompt substitution - someCounter = 0
+PASS: gdb.python/python.exp: prompt substitution - def prompt(current):
+PASS: gdb.python/python.exp: prompt substitution - global someCounter
+PASS: gdb.python/python.exp: prompt substitution - if (current == "testfake "):
+PASS: gdb.python/python.exp: prompt substitution - return None
+PASS: gdb.python/python.exp: prompt substitution - someCounter = someCounter + 1
+PASS: gdb.python/python.exp: prompt substitution - return "py prompt " + str (someCounter) + " "
+PASS: gdb.python/python.exp: prompt substitution - end
+PASS: gdb.python/python.exp: prompt substitution readline - python
+PASS: gdb.python/python.exp: prompt substitution readline - pCounter = 0
+PASS: gdb.python/python.exp: prompt substitution readline - def program_prompt(current):
+PASS: gdb.python/python.exp: prompt substitution readline - global pCounter
+PASS: gdb.python/python.exp: prompt substitution readline - if (current == ">"):
+PASS: gdb.python/python.exp: prompt substitution readline - pCounter = pCounter + 1
+PASS: gdb.python/python.exp: prompt substitution readline - return "python line " + str (pCounter) + ": "
+PASS: gdb.python/python.exp: prompt substitution readline - return None
+PASS: gdb.python/python.exp: prompt substitution readline - end
+PASS: gdb.python/python.exp: set hook
+PASS: gdb.python/python.exp: set prompt testfake
+PASS: gdb.python/python.exp: show prompt shows guarded prompt
+PASS: gdb.python/python.exp: set prompt blah overriden
+PASS: gdb.python/python.exp: Delete old hook
+PASS: gdb.python/python.exp: set default prompt
+PASS: gdb.python/python.exp: set programming hook
+PASS: gdb.python/python.exp: readline secondary are not substituted
+PASS: gdb.python/python.exp: end programming
+PASS: gdb.python/python.exp: prompt substitution readline - python
+PASS: gdb.python/python.exp: prompt substitution readline - import gdb.command.prompt
+PASS: gdb.python/python.exp: prompt substitution readline - end
+PASS: gdb.python/python.exp: set basic extended prompt
+PASS: gdb.python/python.exp: set extended prompt working directory
+PASS: gdb.python/python.exp: set extended prompt parameter
+PASS: gdb.python/python.exp: Test print-backtrace show setting. Default is message.
+PASS: gdb.python/python.exp: Test print-backtrace set setting
+PASS: gdb.python/python.exp: Test print-backtrace show setting to full.
+PASS: gdb.python/python.exp: Test print-backtrace set setting
+PASS: gdb.python/python.exp: Test print-backtrace show setting to none.
+PASS: gdb.python/python.exp: Test print-backtrace set setting
+PASS: gdb.python/python.exp: prompt substitution readline - python
+PASS: gdb.python/python.exp: prompt substitution readline - pCounter = 0
+PASS: gdb.python/python.exp: prompt substitution readline - def error_prompt(current):
+PASS: gdb.python/python.exp: prompt substitution readline - raise RuntimeError("Python exception called")
+PASS: gdb.python/python.exp: prompt substitution readline - end
+PASS: gdb.python/python.exp: set hook
+PASS: gdb.python/python.exp: set the hook to default
+PASS: gdb.python/python.exp: Test print-backtrace set setting
+PASS: gdb.python/python.exp: set hook
+PASS: gdb.python/python.exp: set the hook to default
+PASS: gdb.python/python.exp: Get line number of func2 call site
+PASS: gdb.python/python.exp: Test find_pc_line at func2 call site
+PASS: gdb.python/python.exp: Step into func2
+PASS: gdb.python/python.exp: Step out of func2
+PASS: gdb.python/python.exp: Test find_pc_line with resume address
+Running ./gdb.python/py-type.exp ...
+PASS: gdb.python/py-type.exp: lang_c: continue to breakpoint: break to inspect struct and array.
+PASS: gdb.python/py-type.exp: lang_c: test_fields: c typedef field list
+PASS: gdb.python/py-type.exp: lang_c: test_fields: print value (st)
+PASS: gdb.python/py-type.exp: lang_c: test_fields: get value (st) from history
+PASS: gdb.python/py-type.exp: lang_c: test_fields: get fields from st.type
+PASS: gdb.python/py-type.exp: lang_c: test_fields: Check number of fields (st)
+PASS: gdb.python/py-type.exp: lang_c: test_fields: Check structure field a name
+PASS: gdb.python/py-type.exp: lang_c: test_fields: Check structure field b name
+PASS: gdb.python/py-type.exp: lang_c: test_fields: Check that dir includes name
+PASS: gdb.python/py-type.exp: lang_c: test_fields: Check number of fields (st.type)
+PASS: gdb.python/py-type.exp: lang_c: test_fields: Check fields lookup by name
+PASS: gdb.python/py-type.exp: lang_c: test_fields: Check fields iteration over values
+PASS: gdb.python/py-type.exp: lang_c: test_fields: Check fields items list
+PASS: gdb.python/py-type.exp: lang_c: test_fields: Check field name exists test
+PASS: gdb.python/py-type.exp: lang_c: test_fields: Check field name nonexists test
+PASS: gdb.python/py-type.exp: lang_c: test_fields: Check conversion to bool
+PASS: gdb.python/py-type.exp: lang_c: test_fields: python print (len (st.type['a'].type))
+PASS: gdb.python/py-type.exp: lang_c: test_fields: python print (st.type['a'].type.has_key ('x'))
+PASS: gdb.python/py-type.exp: lang_c: test_fields: python print (st.type['a'].type.keys ())
+PASS: gdb.python/py-type.exp: lang_c: test_fields: python print (st.type['a'].type['x'])
+PASS: gdb.python/py-type.exp: lang_c: test_fields: python print (not not st.type['a'].type)
+PASS: gdb.python/py-type.exp: lang_c: test_fields: print value (ar)
+PASS: gdb.python/py-type.exp: lang_c: test_fields: get value (ar) from history
+PASS: gdb.python/py-type.exp: lang_c: test_fields: python fields = ar.type.fields()
+PASS: gdb.python/py-type.exp: lang_c: test_fields: Check the number of fields
+PASS: gdb.python/py-type.exp: lang_c: test_fields: Check array field type
+PASS: gdb.python/py-type.exp: lang_c: test_fields: cast to array with one argument
+PASS: gdb.python/py-type.exp: lang_c: test_fields: cast to array with two arguments
+PASS: gdb.python/py-type.exp: lang_c: test_fields: python print (ar[0].type == ar[0].type)
+PASS: gdb.python/py-type.exp: lang_c: test_fields: print value (vec_data_1)
+PASS: gdb.python/py-type.exp: lang_c: test_fields: get value (vec_data_1) from history
+PASS: gdb.python/py-type.exp: lang_c: test_fields: print value (vec_data_2)
+PASS: gdb.python/py-type.exp: lang_c: test_fields: get value (vec_data_2) from history
+PASS: gdb.python/py-type.exp: lang_c: test_fields: set vec1
+PASS: gdb.python/py-type.exp: lang_c: test_fields: cast to vector with one argument
+PASS: gdb.python/py-type.exp: lang_c: test_fields: set vec2
+PASS: gdb.python/py-type.exp: lang_c: test_fields: cast to vector with two arguments
+PASS: gdb.python/py-type.exp: lang_c: test_fields: python print vec1 == vec2
+PASS: gdb.python/py-type.exp: lang_c: test_fields: set vec3
+PASS: gdb.python/py-type.exp: lang_c: test_fields: python print vec1 == vec3
+PASS: gdb.python/py-type.exp: lang_c: test_enum: print value (e)
+PASS: gdb.python/py-type.exp: lang_c: test_enum: get value (e) from history
+PASS: gdb.python/py-type.exp: lang_c: test_enum: extract type fields from e
+PASS: gdb.python/py-type.exp: lang_c: test_enum: Check the number of enum fields
+PASS: gdb.python/py-type.exp: lang_c: test_enum: Check enum field[0] name
+PASS: gdb.python/py-type.exp: lang_c: test_enum: Check enum field[1]name
+PASS: gdb.python/py-type.exp: lang_c: test_enum: Check the number of type fields
+PASS: gdb.python/py-type.exp: lang_c: test_enum: Check enum field lookup by name (v1)
+PASS: gdb.python/py-type.exp: lang_c: test_enum: Check enum field lookup by name (v2)
+PASS: gdb.python/py-type.exp: lang_c: test_enum: Check num fields iteration over values
+PASS: gdb.python/py-type.exp: lang_c: test_enum: Check enum fields items list
+PASS: gdb.python/py-type.exp: lang_cpp: continue to breakpoint: break to inspect struct and array.
+PASS: gdb.python/py-type.exp: lang_cpp: test_fields: c++ typedef field list
+PASS: gdb.python/py-type.exp: lang_cpp: test_fields: print value (c)
+PASS: gdb.python/py-type.exp: lang_cpp: test_fields: get value (c) from history
+PASS: gdb.python/py-type.exp: lang_cpp: test_fields: get fields from c.type
+PASS: gdb.python/py-type.exp: lang_cpp: test_fields: Check number of fields (c)
+PASS: gdb.python/py-type.exp: lang_cpp: test_fields: Check class field c name
+PASS: gdb.python/py-type.exp: lang_cpp: test_fields: Check class field d name
+PASS: gdb.python/py-type.exp: lang_cpp: test_fields: python print (c.type == gdb.parse_and_eval('d').type)
+PASS: gdb.python/py-type.exp: lang_cpp: test_fields: python print (c.type == gdb.parse_and_eval('d').type.fields()[0].type)
+PASS: gdb.python/py-type.exp: lang_cpp: test_fields: print value (st)
+PASS: gdb.python/py-type.exp: lang_cpp: test_fields: get value (st) from history
+PASS: gdb.python/py-type.exp: lang_cpp: test_fields: get fields from st.type
+PASS: gdb.python/py-type.exp: lang_cpp: test_fields: Check number of fields (st)
+PASS: gdb.python/py-type.exp: lang_cpp: test_fields: Check structure field a name
+PASS: gdb.python/py-type.exp: lang_cpp: test_fields: Check structure field b name
+PASS: gdb.python/py-type.exp: lang_cpp: test_fields: Check that dir includes name
+PASS: gdb.python/py-type.exp: lang_cpp: test_fields: Check number of fields (st.type)
+PASS: gdb.python/py-type.exp: lang_cpp: test_fields: Check fields lookup by name
+PASS: gdb.python/py-type.exp: lang_cpp: test_fields: Check fields iteration over values
+PASS: gdb.python/py-type.exp: lang_cpp: test_fields: Check fields items list
+PASS: gdb.python/py-type.exp: lang_cpp: test_fields: Check field name exists test
+PASS: gdb.python/py-type.exp: lang_cpp: test_fields: Check field name nonexists test
+PASS: gdb.python/py-type.exp: lang_cpp: test_fields: Check conversion to bool
+PASS: gdb.python/py-type.exp: lang_cpp: test_fields: python print (len (st.type['a'].type))
+PASS: gdb.python/py-type.exp: lang_cpp: test_fields: python print (st.type['a'].type.has_key ('x'))
+PASS: gdb.python/py-type.exp: lang_cpp: test_fields: python print (st.type['a'].type.keys ())
+PASS: gdb.python/py-type.exp: lang_cpp: test_fields: python print (st.type['a'].type['x'])
+PASS: gdb.python/py-type.exp: lang_cpp: test_fields: python print (not not st.type['a'].type)
+PASS: gdb.python/py-type.exp: lang_cpp: test_fields: print value (ar)
+PASS: gdb.python/py-type.exp: lang_cpp: test_fields: get value (ar) from history
+PASS: gdb.python/py-type.exp: lang_cpp: test_fields: python fields = ar.type.fields()
+PASS: gdb.python/py-type.exp: lang_cpp: test_fields: Check the number of fields
+PASS: gdb.python/py-type.exp: lang_cpp: test_fields: Check array field type
+PASS: gdb.python/py-type.exp: lang_cpp: test_fields: cast to array with one argument
+PASS: gdb.python/py-type.exp: lang_cpp: test_fields: cast to array with two arguments
+PASS: gdb.python/py-type.exp: lang_cpp: test_fields: python print (ar[0].type == ar[0].type)
+PASS: gdb.python/py-type.exp: lang_cpp: test_fields: print value (vec_data_1)
+PASS: gdb.python/py-type.exp: lang_cpp: test_fields: get value (vec_data_1) from history
+PASS: gdb.python/py-type.exp: lang_cpp: test_fields: print value (vec_data_2)
+PASS: gdb.python/py-type.exp: lang_cpp: test_fields: get value (vec_data_2) from history
+PASS: gdb.python/py-type.exp: lang_cpp: test_fields: set vec1
+PASS: gdb.python/py-type.exp: lang_cpp: test_fields: cast to vector with one argument
+PASS: gdb.python/py-type.exp: lang_cpp: test_fields: set vec2
+PASS: gdb.python/py-type.exp: lang_cpp: test_fields: cast to vector with two arguments
+PASS: gdb.python/py-type.exp: lang_cpp: test_fields: python print vec1 == vec2
+PASS: gdb.python/py-type.exp: lang_cpp: test_fields: set vec3
+PASS: gdb.python/py-type.exp: lang_cpp: test_fields: python print vec1 == vec3
+PASS: gdb.python/py-type.exp: lang_cpp: test_base_class: print value (d)
+PASS: gdb.python/py-type.exp: lang_cpp: test_base_class: get value (d) from history
+PASS: gdb.python/py-type.exp: lang_cpp: test_base_class: extract type fields from d
+PASS: gdb.python/py-type.exp: lang_cpp: test_base_class: Check the number of fields
+PASS: gdb.python/py-type.exp: lang_cpp: test_base_class: Check base class (fields[0])
+PASS: gdb.python/py-type.exp: lang_cpp: test_base_class: Check base class (fields[1])
+PASS: gdb.python/py-type.exp: lang_cpp: test_range: on ranged value: print value (ar)
+PASS: gdb.python/py-type.exp: lang_cpp: test_range: on ranged value: get value (ar) from history
+PASS: gdb.python/py-type.exp: lang_cpp: test_range: on ranged value: Check correct tuple length
+PASS: gdb.python/py-type.exp: lang_cpp: test_range: on ranged value: Check range low bound
+PASS: gdb.python/py-type.exp: lang_cpp: test_range: on ranged value: Check range high bound
+PASS: gdb.python/py-type.exp: lang_cpp: test_range: on ranged type: print value (ar)
+PASS: gdb.python/py-type.exp: lang_cpp: test_range: on ranged type: get value (ar) from history
+PASS: gdb.python/py-type.exp: lang_cpp: test_range: on ranged type: get fields
+PASS: gdb.python/py-type.exp: lang_cpp: test_range: on ranged type: Check range low bound
+PASS: gdb.python/py-type.exp: lang_cpp: test_range: on ranged type: Check range high bound
+PASS: gdb.python/py-type.exp: lang_cpp: test_range: on unranged value: print value (st)
+PASS: gdb.python/py-type.exp: lang_cpp: test_range: on unranged value: get value (st) from history
+PASS: gdb.python/py-type.exp: lang_cpp: test_range: on unranged value: Check range for non ranged type.
+PASS: gdb.python/py-type.exp: lang_cpp: get type of temvar
+PASS: gdb.python/py-type.exp: lang_cpp: python print (ttype.template_argument(0))
+PASS: gdb.python/py-type.exp: lang_cpp: python print (isinstance(ttype.template_argument(0), gdb.Type))
+PASS: gdb.python/py-type.exp: lang_cpp: python print (ttype.template_argument(1))
+PASS: gdb.python/py-type.exp: lang_cpp: python print (isinstance(ttype.template_argument(1), gdb.Value))
+PASS: gdb.python/py-type.exp: lang_cpp: python print (ttype.template_argument(2))
+PASS: gdb.python/py-type.exp: lang_cpp: test_enum: print value (e)
+PASS: gdb.python/py-type.exp: lang_cpp: test_enum: get value (e) from history
+PASS: gdb.python/py-type.exp: lang_cpp: test_enum: extract type fields from e
+PASS: gdb.python/py-type.exp: lang_cpp: test_enum: Check the number of enum fields
+PASS: gdb.python/py-type.exp: lang_cpp: test_enum: Check enum field[0] name
+PASS: gdb.python/py-type.exp: lang_cpp: test_enum: Check enum field[1]name
+PASS: gdb.python/py-type.exp: lang_cpp: test_enum: Check the number of type fields
+PASS: gdb.python/py-type.exp: lang_cpp: test_enum: Check enum field lookup by name (v1)
+PASS: gdb.python/py-type.exp: lang_cpp: test_enum: Check enum field lookup by name (v2)
+PASS: gdb.python/py-type.exp: lang_cpp: test_enum: Check num fields iteration over values
+PASS: gdb.python/py-type.exp: lang_cpp: test_enum: Check enum fields items list
+Running ./gdb.python/py-typeprint.exp ...
+PASS: gdb.python/py-typeprint.exp: python exec (open ('py-typeprint.py').read ())
+PASS: gdb.python/py-typeprint.exp: basic test
+PASS: gdb.python/py-typeprint.exp: raw test
+PASS: gdb.python/py-typeprint.exp: disable type-printer string
+PASS: gdb.python/py-typeprint.exp: whatis with disabled printer
+PASS: gdb.python/py-typeprint.exp: info type-printers
+PASS: gdb.python/py-typeprint.exp: enable type-printer string
+PASS: gdb.python/py-typeprint.exp: whatis with enabled printer
+PASS: gdb.python/py-typeprint.exp: whatis s
+Running ./gdb.python/py-value-cc.exp ...
+PASS: gdb.python/py-value-cc.exp: continue to breakpoint: Break here
+PASS: gdb.python/py-value-cc.exp: python print (str(gdb.parse_and_eval("a").type))
+PASS: gdb.python/py-value-cc.exp: python print (str(gdb.parse_and_eval("a").referenced_value().type))
+PASS: gdb.python/py-value-cc.exp: python print (str(gdb.parse_and_eval("int_ref").type))
+PASS: gdb.python/py-value-cc.exp: python print (str(gdb.parse_and_eval("int_ref").referenced_value().type))
+PASS: gdb.python/py-value-cc.exp: python print (str(gdb.parse_and_eval("int_ref").referenced_value()))
+PASS: gdb.python/py-value-cc.exp: python print (str(gdb.parse_and_eval("int_ptr_ref").dereference().type))
+PASS: gdb.python/py-value-cc.exp: python print (str(gdb.parse_and_eval("int_ptr_ref").referenced_value().type))
+PASS: gdb.python/py-value-cc.exp: python print (str(gdb.parse_and_eval("int_ptr_ref").referenced_value().dereference()))
+PASS: gdb.python/py-value-cc.exp: python print (str(gdb.parse_and_eval("int_ptr_ref").referenced_value().referenced_value()))
+Running ./gdb.python/py-value.exp ...
+PASS: gdb.python/py-value.exp: create boolean value
+PASS: gdb.python/py-value.exp: create integer value
+PASS: gdb.python/py-value.exp: create long value
+PASS: gdb.python/py-value.exp: create double value
+PASS: gdb.python/py-value.exp: create 8-bit string value
+PASS: gdb.python/py-value.exp: print 8-bit string
+PASS: gdb.python/py-value.exp: verify type of 8-bit string
+PASS: gdb.python/py-value.exp: create unicode value
+PASS: gdb.python/py-value.exp: print Unicode string
+PASS: gdb.python/py-value.exp: verify type of unicode string
+PASS: gdb.python/py-value.exp: Test address attribute in non-addressable value
+PASS: gdb.python/py-value.exp: add two integer values
+PASS: gdb.python/py-value.exp: verify type of integer add result
+PASS: gdb.python/py-value.exp: add two double values
+PASS: gdb.python/py-value.exp: subtract two integer values
+PASS: gdb.python/py-value.exp: subtract two double values
+PASS: gdb.python/py-value.exp: multiply two integer values
+PASS: gdb.python/py-value.exp: multiply two double values
+PASS: gdb.python/py-value.exp: divide two integer values
+PASS: gdb.python/py-value.exp: divide two double values
+PASS: gdb.python/py-value.exp: take remainder of two integer values
+PASS: gdb.python/py-value.exp: integer value raised to the power of another integer value
+PASS: gdb.python/py-value.exp: double value raised to the power of integer value
+PASS: gdb.python/py-value.exp: negated integer value
+PASS: gdb.python/py-value.exp: positive integer value
+PASS: gdb.python/py-value.exp: negated double value
+PASS: gdb.python/py-value.exp: positive double value
+PASS: gdb.python/py-value.exp: absolute of integer value
+PASS: gdb.python/py-value.exp: absolute of double value
+PASS: gdb.python/py-value.exp: subtract integer value from python integer
+PASS: gdb.python/py-value.exp: verify type of mixed integer subtraction result
+PASS: gdb.python/py-value.exp: add double value with python float
+PASS: gdb.python/py-value.exp: subtract python integer from integer value
+PASS: gdb.python/py-value.exp: add python float with double value
+PASS: gdb.python/py-value.exp: print evalue
+PASS: gdb.python/py-value.exp: python evalue = gdb.history (0)
+PASS: gdb.python/py-value.exp: python print (int (evalue))
+PASS: gdb.python/py-value.exp: add pointer value with python integer
+PASS: gdb.python/py-value.exp: subtract python integer from pointer value
+PASS: gdb.python/py-value.exp: subtract two pointer values
+PASS: gdb.python/py-value.exp: catch error in python type conversion
+PASS: gdb.python/py-value.exp: catch throw of GDB error
+PASS: gdb.python/py-value.exp: define function to test booleans - python
+PASS: gdb.python/py-value.exp: define function to test booleans - def test_bool (val):
+PASS: gdb.python/py-value.exp: define function to test booleans - if val:
+PASS: gdb.python/py-value.exp: define function to test booleans - print ('yay')
+PASS: gdb.python/py-value.exp: define function to test booleans - else:
+PASS: gdb.python/py-value.exp: define function to test booleans - print ('nay')
+PASS: gdb.python/py-value.exp: define function to test booleans - end
+PASS: gdb.python/py-value.exp: check evaluation of true boolean value in expression
+PASS: gdb.python/py-value.exp: check evaluation of false boolean value in expression
+PASS: gdb.python/py-value.exp: check evaluation of true integer value in expression
+PASS: gdb.python/py-value.exp: check evaluation of false integer value in expression
+PASS: gdb.python/py-value.exp: check evaluation of true integer value in expression
+PASS: gdb.python/py-value.exp: check evaluation of false integer value in expression
+PASS: gdb.python/py-value.exp: less than, equal
+PASS: gdb.python/py-value.exp: less than, less
+PASS: gdb.python/py-value.exp: less than, greater
+PASS: gdb.python/py-value.exp: less than, None
+PASS: gdb.python/py-value.exp: less or equal, equal
+PASS: gdb.python/py-value.exp: less or equal, less
+PASS: gdb.python/py-value.exp: less or equal, greater
+PASS: gdb.python/py-value.exp: less or equal, None
+PASS: gdb.python/py-value.exp: equality of gdb.Values
+PASS: gdb.python/py-value.exp: inequality of gdb.Values
+PASS: gdb.python/py-value.exp: equality of gdb.Value with Python value
+PASS: gdb.python/py-value.exp: inequality of gdb.Value with Python value
+PASS: gdb.python/py-value.exp: inequality of gdb.Value with None
+PASS: gdb.python/py-value.exp: inequality, false
+PASS: gdb.python/py-value.exp: inequality, true
+PASS: gdb.python/py-value.exp: inequality, None
+PASS: gdb.python/py-value.exp: greater than, equal
+PASS: gdb.python/py-value.exp: greater than, less
+PASS: gdb.python/py-value.exp: greater than, greater
+PASS: gdb.python/py-value.exp: greater than, None
+PASS: gdb.python/py-value.exp: greater or equal, equal
+PASS: gdb.python/py-value.exp: greater or equal, less
+PASS: gdb.python/py-value.exp: greater or equal, greater
+PASS: gdb.python/py-value.exp: greater or equal, None
+PASS: gdb.python/py-value.exp: py-value in file.filename
+PASS: gdb.python/py-value.exp: python print (gdb.objfiles()[0].pretty_printers)
+PASS: gdb.python/py-value.exp: python gdb.objfiles()[0].pretty_printers = 0
+PASS: gdb.python/py-value.exp: parse_and_eval constant test
+PASS: gdb.python/py-value.exp: parse_and_eval simple expression test
+PASS: gdb.python/py-value.exp: parse_and_eval type test
+PASS: gdb.python/py-value.exp: Simple Python value dictionary - python
+PASS: gdb.python/py-value.exp: Simple Python value dictionary - one = gdb.Value(1)
+PASS: gdb.python/py-value.exp: Simple Python value dictionary - two = gdb.Value(2)
+PASS: gdb.python/py-value.exp: Simple Python value dictionary - three = gdb.Value(3)
+PASS: gdb.python/py-value.exp: Simple Python value dictionary - vdict = {one:"one str",two:"two str",three:"three str"}
+PASS: gdb.python/py-value.exp: Simple Python value dictionary - end
+PASS: gdb.python/py-value.exp: Test dictionary hash
+PASS: gdb.python/py-value.exp: Test dictionary hash
+PASS: gdb.python/py-value.exp: Test dictionary hash
+PASS: gdb.python/py-value.exp: Test inbuilt hash
+PASS: gdb.python/py-value.exp: continue to breakpoint: break to inspect struct and union
+PASS: gdb.python/py-value.exp: get value from history
+PASS: gdb.python/py-value.exp: access element inside struct using 8-bit string name
+PASS: gdb.python/py-value.exp: access element inside struct using unicode name
+PASS: gdb.python/py-value.exp: dereference value
+PASS: gdb.python/py-value.exp: Test is_optimized_out attribute
+PASS: gdb.python/py-value.exp: Test address attribute
+PASS: gdb.python/py-value.exp: parse_and_eval with memory error
+PASS: gdb.python/py-value.exp: python inval = gdb.parse_and_eval('*(int*)0')
+PASS: gdb.python/py-value.exp: python print (inval.is_lazy)
+PASS: gdb.python/py-value.exp: memory error and lazy values
+PASS: gdb.python/py-value.exp: memory error and lazy values
+PASS: gdb.python/py-value.exp: python argc_lazy = gdb.parse_and_eval('argc')
+PASS: gdb.python/py-value.exp: python argc_notlazy = gdb.parse_and_eval('argc')
+PASS: gdb.python/py-value.exp: python argc_notlazy.fetch_lazy()
+PASS: gdb.python/py-value.exp: python print (argc_lazy.is_lazy)
+PASS: gdb.python/py-value.exp: python print (argc_notlazy.is_lazy)
+PASS: gdb.python/py-value.exp: sanity check argc
+PASS: gdb.python/py-value.exp: python print (argc_lazy.is_lazy)
+PASS: gdb.python/py-value.exp: set argc=2
+PASS: gdb.python/py-value.exp: python print (argc_notlazy)
+PASS: gdb.python/py-value.exp: python print (argc_lazy)
+PASS: gdb.python/py-value.exp: python print (argc_lazy.is_lazy)
+PASS: gdb.python/py-value.exp: print st
+PASS: gdb.python/py-value.exp: get value from history
+PASS: gdb.python/py-value.exp: Test string with no length
+PASS: gdb.python/py-value.exp: Test string (length = -1) is all of the string
+PASS: gdb.python/py-value.exp: python print (st.string (length = 6))
+PASS: gdb.python/py-value.exp: Test string (length = 0) is empty
+PASS: gdb.python/py-value.exp: Test length is 0
+PASS: gdb.python/py-value.exp: print nullst
+PASS: gdb.python/py-value.exp: get value from history
+PASS: gdb.python/py-value.exp: Test string to first null
+PASS: gdb.python/py-value.exp: get string beyond null
+PASS: gdb.python/py-value.exp: python print (repr(nullst))
+PASS: gdb.python/py-value.exp: p/x fp1
+PASS: gdb.python/py-value.exp: get value from history
+PASS: gdb.python/py-value.exp: python fp1 = fp1.dereference()
+PASS: gdb.python/py-value.exp: python result = fp1()
+PASS: gdb.python/py-value.exp: python print (result)
+PASS: gdb.python/py-value.exp: p/x fp2
+PASS: gdb.python/py-value.exp: get value from history
+PASS: gdb.python/py-value.exp: python fp2 = fp2.dereference()
+PASS: gdb.python/py-value.exp: python result2 = fp2(10,20)
+PASS: gdb.python/py-value.exp: python print (result2)
+PASS: gdb.python/py-value.exp: p i
+PASS: gdb.python/py-value.exp: get value from history
+PASS: gdb.python/py-value.exp: python result3 = i()
+PASS: gdb.python/py-value.exp: p/x fp2
+PASS: gdb.python/py-value.exp: get value from history
+PASS: gdb.python/py-value.exp: python fp3 = fp3.dereference()
+PASS: gdb.python/py-value.exp: python result2 = fp3(10)
+PASS: gdb.python/py-value.exp: print sptr
+PASS: gdb.python/py-value.exp: Get value from history
+PASS: gdb.python/py-value.exp: Aquire lazy string
+PASS: gdb.python/py-value.exp: Test type name equality
+PASS: gdb.python/py-value.exp: Test type name equality
+PASS: gdb.python/py-value.exp: print sn
+PASS: gdb.python/py-value.exp: Get value from history
+PASS: gdb.python/py-value.exp: Test lazy string
+PASS: gdb.python/py-value.exp: Succesfully create a lazy string
+PASS: gdb.python/py-value.exp: Test lazy string length
+PASS: gdb.python/py-value.exp: Test lazy string address
+PASS: gdb.python/py-value.exp: create PTR type
+PASS: gdb.python/py-value.exp: kill the inferior
+PASS: gdb.python/py-value.exp: Discard the symbols
+PASS: gdb.python/py-value.exp: cast arg0 to PTR
+PASS: gdb.python/py-value.exp: delete PTR type
+PASS: gdb.python/py-value.exp: print value's type
+PASS: gdb.python/py-value.exp: continue to breakpoint: break to inspect struct and union
+PASS: gdb.python/py-value.exp: Create a value for subscript test
+PASS: gdb.python/py-value.exp: Create a value for subscript test
+PASS: gdb.python/py-value.exp: Baseline print of a Python value
+PASS: gdb.python/py-value.exp: Attempt to access an integer with a subscript
+PASS: gdb.python/py-value.exp: Baseline print of a Python value
+PASS: gdb.python/py-value.exp: Attempt to access a string with a subscript
+PASS: gdb.python/py-value.exp: Build pointer to array
+PASS: gdb.python/py-value.exp:
+PASS: gdb.python/py-value.exp: Access array via pointer with int subscript
+PASS: gdb.python/py-value.exp: Access array via pointer with value subscript
+PASS: gdb.python/py-value.exp: Attempt to access an integer with a subscript
+PASS: gdb.python/py-value.exp: Build array
+PASS: gdb.python/py-value.exp:
+PASS: gdb.python/py-value.exp: Test multiple subscript
+PASS: gdb.python/py-value.exp: continue to breakpoint: break to inspect pointer by reference
+PASS: gdb.python/py-value.exp: Obtain address
+PASS: gdb.python/py-value.exp: Obtains value from GDB
+PASS: gdb.python/py-value.exp: Check pointer passed as reference
+PASS: gdb.python/py-value.exp: python print (bool(gdb.parse_and_eval('base').dynamic_cast(gdb.lookup_type('Derived').pointer())))
+PASS: gdb.python/py-value.exp: python print (gdb.parse_and_eval('base').dynamic_type)
+PASS: gdb.python/py-value.exp: python print (gdb.parse_and_eval('5').dynamic_type)
+PASS: gdb.python/py-value.exp: continue to breakpoint: break to inspect struct and union
+PASS: gdb.python/py-value.exp: Create a value for subscript test
+PASS: gdb.python/py-value.exp: Create a value for subscript test
+PASS: gdb.python/py-value.exp: Baseline print of a Python value
+PASS: gdb.python/py-value.exp: Attempt to access an integer with a subscript
+PASS: gdb.python/py-value.exp: Baseline print of a Python value
+PASS: gdb.python/py-value.exp: Attempt to access a string with a subscript
+PASS: gdb.python/py-value.exp: Build pointer to array
+PASS: gdb.python/py-value.exp:
+PASS: gdb.python/py-value.exp: Access array via pointer with int subscript
+PASS: gdb.python/py-value.exp: Access array via pointer with value subscript
+PASS: gdb.python/py-value.exp: Attempt to access an integer with a subscript
+PASS: gdb.python/py-value.exp: Build array
+PASS: gdb.python/py-value.exp:
+PASS: gdb.python/py-value.exp: Test multiple subscript
+Running ./gdb.reverse/amd64-tailcall-reverse.exp ...
+Running ./gdb.reverse/break-precsave.exp ...
+Running ./gdb.reverse/break-reverse.exp ...
+Running ./gdb.reverse/consecutive-precsave.exp ...
+Running ./gdb.reverse/consecutive-reverse.exp ...
+Running ./gdb.reverse/finish-precsave.exp ...
+Running ./gdb.reverse/finish-reverse-bkpt.exp ...
+Running ./gdb.reverse/finish-reverse.exp ...
+Running ./gdb.reverse/i386-precsave.exp ...
+Running ./gdb.reverse/i386-reverse.exp ...
+Running ./gdb.reverse/i386-sse-reverse.exp ...
+Running ./gdb.reverse/i387-env-reverse.exp ...
+Running ./gdb.reverse/i387-stack-reverse.exp ...
+Running ./gdb.reverse/machinestate.exp ...
+Running ./gdb.reverse/machinestate-precsave.exp ...
+Running ./gdb.reverse/next-reverse-bkpt-over-sr.exp ...
+Running ./gdb.reverse/sigall-precsave.exp ...
+Running ./gdb.reverse/sigall-reverse.exp ...
+Running ./gdb.reverse/singlejmp-reverse.exp ...
+Running ./gdb.reverse/solib-precsave.exp ...
+Running ./gdb.reverse/solib-reverse.exp ...
+Running ./gdb.reverse/step-precsave.exp ...
+Running ./gdb.reverse/step-reverse.exp ...
+Running ./gdb.reverse/until-precsave.exp ...
+Running ./gdb.reverse/until-reverse.exp ...
+Running ./gdb.reverse/watch-precsave.exp ...
+Running ./gdb.reverse/watch-reverse.exp ...
+Running ./gdb.server/ext-attach.exp ...
+Running ./gdb.server/ext-run.exp ...
+PASS: gdb.server/ext-run.exp: disconnect
+PASS: gdb.server/ext-run.exp: set remote exec-file
+PASS: gdb.server/ext-run.exp: continue to main
+PASS: gdb.server/ext-run.exp: get process list
+PASS: gdb.server/ext-run.exp: kill
+PASS: gdb.server/ext-run.exp: load new file without any gdbserver inferior
+PASS: gdb.server/ext-run.exp: monitor exit
+Running ./gdb.server/file-transfer.exp ...
+PASS: gdb.server/file-transfer.exp: disconnect
+FAIL: gdb.server/file-transfer.exp: put binary file
+FAIL: gdb.server/file-transfer.exp: get binary file
+FAIL: gdb.server/file-transfer.exp: compare binary file
+FAIL: gdb.server/file-transfer.exp: deleted binary file
+FAIL: gdb.server/file-transfer.exp: put text file
+FAIL: gdb.server/file-transfer.exp: get text file
+FAIL: gdb.server/file-transfer.exp: compare text file
+FAIL: gdb.server/file-transfer.exp: deleted text file
+Running ./gdb.server/no-thread-db.exp ...
+PASS: gdb.server/no-thread-db.exp: successfully compiled posix threads test case
+PASS: gdb.server/no-thread-db.exp: disconnect
+PASS: gdb.server/no-thread-db.exp: libthread-db is now unresolvable
+FAIL: gdb.server/no-thread-db.exp: continue to breakpoint: after tls assignment
+FAIL: gdb.server/no-thread-db.exp: print foo
+Running ./gdb.server/server-exec-info.exp ...
+PASS: gdb.server/server-exec-info.exp: file
+PASS: gdb.server/server-exec-info.exp: set sysroot remote:
+PASS: gdb.server/server-exec-info.exp: info files
+Running ./gdb.server/server-kill.exp ...
+PASS: gdb.server/server-kill.exp: disconnect
+FAIL: gdb.server/server-kill.exp: tstatus
+Running ./gdb.server/server-mon.exp ...
+PASS: gdb.server/server-mon.exp: disconnect
+PASS: gdb.server/server-mon.exp: monitor help
+PASS: gdb.server/server-mon.exp: monitor
+PASS: gdb.server/server-mon.exp: monitor set debug 1
+PASS: gdb.server/server-mon.exp: monitor set debug 0
+PASS: gdb.server/server-mon.exp: monitor set remote-debug 1
+PASS: gdb.server/server-mon.exp: monitor set remote-debug 0
+Running ./gdb.server/server-run.exp ...
+PASS: gdb.server/server-run.exp: disconnect
+PASS: gdb.server/server-run.exp: loaded dynamic linker
+PASS: gdb.server/server-run.exp: continue to main
+Running ./gdb.server/solib-list.exp ...
+Running ./gdb.stabs/exclfwd.exp ...
+PASS: gdb.stabs/exclfwd.exp: ptype v1
+PASS: gdb.stabs/exclfwd.exp: ptype v2
+PASS: gdb.stabs/exclfwd.exp: ptype v3
+Running ./gdb.stabs/gdb11479.exp ...
+PASS: gdb.stabs/gdb11479.exp: Set breakpoints forced_stabs
+PASS: gdb.stabs/gdb11479.exp: Stop at first breakpoint forced_stabs
+PASS: gdb.stabs/gdb11479.exp: Inspect t in test2 forced_stabs
+PASS: gdb.stabs/gdb11479.exp: sizeof (e) in test2 forced_stabs
+PASS: gdb.stabs/gdb11479.exp: Stop at first breakpoint forced_stabs
+PASS: gdb.stabs/gdb11479.exp: Inspect t in test forced_stabs
+PASS: gdb.stabs/gdb11479.exp: sizeof (e) in test forced_stabs
+PASS: gdb.stabs/gdb11479.exp: Set breakpoints natural_debug_format
+PASS: gdb.stabs/gdb11479.exp: Stop at first breakpoint natural_debug_format
+PASS: gdb.stabs/gdb11479.exp: Inspect t in test2 natural_debug_format
+PASS: gdb.stabs/gdb11479.exp: sizeof (e) in test2 natural_debug_format
+PASS: gdb.stabs/gdb11479.exp: Stop at first breakpoint natural_debug_format
+PASS: gdb.stabs/gdb11479.exp: Inspect t in test natural_debug_format
+PASS: gdb.stabs/gdb11479.exp: sizeof (e) in test natural_debug_format
+Running ./gdb.stabs/weird.exp ...
+PASS: gdb.stabs/weird.exp: weirdx.o read without error
+PASS: gdb.stabs/weird.exp: stabs found
+PASS: gdb.stabs/weird.exp: variable var0 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (var0)
+PASS: gdb.stabs/weird.exp: variable var1 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (var1)
+PASS: gdb.stabs/weird.exp: variable var2 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (var2)
+PASS: gdb.stabs/weird.exp: variable var3 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (var3)
+PASS: gdb.stabs/weird.exp: variable attr32 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr32)
+PASS: gdb.stabs/weird.exp: variable attr33 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr33)
+PASS: gdb.stabs/weird.exp: variable attr35 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr35)
+PASS: gdb.stabs/weird.exp: variable attr36 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr36)
+PASS: gdb.stabs/weird.exp: variable attr37 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr37)
+PASS: gdb.stabs/weird.exp: variable attr38 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr38)
+PASS: gdb.stabs/weird.exp: variable attr39 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr39)
+PASS: gdb.stabs/weird.exp: variable attr41 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr41)
+PASS: gdb.stabs/weird.exp: variable attr42 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr42)
+PASS: gdb.stabs/weird.exp: variable attr43 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr43)
+PASS: gdb.stabs/weird.exp: variable attr44 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr44)
+PASS: gdb.stabs/weird.exp: variable attr46 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr46)
+PASS: gdb.stabs/weird.exp: variable attr47 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr47)
+PASS: gdb.stabs/weird.exp: variable attr58 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr58)
+PASS: gdb.stabs/weird.exp: variable attr59 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr59)
+PASS: gdb.stabs/weird.exp: variable attr60 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr60)
+PASS: gdb.stabs/weird.exp: variable attr61 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr61)
+PASS: gdb.stabs/weird.exp: variable attr62 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr62)
+PASS: gdb.stabs/weird.exp: variable attr63 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr63)
+PASS: gdb.stabs/weird.exp: variable attr64 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr64)
+PASS: gdb.stabs/weird.exp: variable attr65 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr65)
+PASS: gdb.stabs/weird.exp: variable attr66 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr66)
+PASS: gdb.stabs/weird.exp: variable attr67 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr67)
+PASS: gdb.stabs/weird.exp: variable attr68 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr68)
+PASS: gdb.stabs/weird.exp: variable attr69 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr69)
+PASS: gdb.stabs/weird.exp: variable attr70 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr70)
+PASS: gdb.stabs/weird.exp: variable attr71 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr71)
+PASS: gdb.stabs/weird.exp: variable attr72 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr72)
+PASS: gdb.stabs/weird.exp: variable attr73 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr73)
+PASS: gdb.stabs/weird.exp: variable attr74 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr74)
+PASS: gdb.stabs/weird.exp: variable attr75 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr75)
+PASS: gdb.stabs/weird.exp: variable attr76 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr76)
+PASS: gdb.stabs/weird.exp: variable attr77 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr77)
+PASS: gdb.stabs/weird.exp: variable attr78 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr78)
+PASS: gdb.stabs/weird.exp: variable attr79 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr79)
+PASS: gdb.stabs/weird.exp: variable attr80 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr80)
+PASS: gdb.stabs/weird.exp: variable attr81 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr81)
+PASS: gdb.stabs/weird.exp: variable attr82 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr82)
+PASS: gdb.stabs/weird.exp: variable attr83 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr83)
+PASS: gdb.stabs/weird.exp: variable attr84 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr84)
+PASS: gdb.stabs/weird.exp: variable attr85 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr85)
+PASS: gdb.stabs/weird.exp: variable attr86 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr86)
+PASS: gdb.stabs/weird.exp: variable attr87 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr87)
+PASS: gdb.stabs/weird.exp: variable attr88 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr88)
+PASS: gdb.stabs/weird.exp: variable attr89 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr89)
+PASS: gdb.stabs/weird.exp: variable attr90 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr90)
+PASS: gdb.stabs/weird.exp: variable attr91 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr91)
+PASS: gdb.stabs/weird.exp: variable attr92 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr92)
+PASS: gdb.stabs/weird.exp: variable attr93 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr93)
+PASS: gdb.stabs/weird.exp: variable attr94 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr94)
+PASS: gdb.stabs/weird.exp: variable attr95 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr95)
+PASS: gdb.stabs/weird.exp: variable attr96 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr96)
+PASS: gdb.stabs/weird.exp: variable attr97 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr97)
+PASS: gdb.stabs/weird.exp: variable attr98 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr98)
+PASS: gdb.stabs/weird.exp: variable attr99 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr99)
+PASS: gdb.stabs/weird.exp: variable attr100 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr100)
+PASS: gdb.stabs/weird.exp: variable attr101 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr101)
+PASS: gdb.stabs/weird.exp: variable attr102 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr102)
+PASS: gdb.stabs/weird.exp: variable attr103 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr103)
+PASS: gdb.stabs/weird.exp: variable attr104 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr104)
+PASS: gdb.stabs/weird.exp: variable attr105 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr105)
+PASS: gdb.stabs/weird.exp: variable attr106 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr106)
+PASS: gdb.stabs/weird.exp: variable attr107 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr107)
+PASS: gdb.stabs/weird.exp: variable attr108 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr108)
+PASS: gdb.stabs/weird.exp: variable attr109 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr109)
+PASS: gdb.stabs/weird.exp: variable attr110 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr110)
+PASS: gdb.stabs/weird.exp: variable attr111 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr111)
+PASS: gdb.stabs/weird.exp: variable attr112 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr112)
+PASS: gdb.stabs/weird.exp: variable attr113 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr113)
+PASS: gdb.stabs/weird.exp: variable attr114 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr114)
+PASS: gdb.stabs/weird.exp: variable attr115 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr115)
+PASS: gdb.stabs/weird.exp: variable attr116 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr116)
+PASS: gdb.stabs/weird.exp: variable attr117 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr117)
+PASS: gdb.stabs/weird.exp: variable attr118 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr118)
+PASS: gdb.stabs/weird.exp: variable attr119 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr119)
+PASS: gdb.stabs/weird.exp: variable attr120 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr120)
+PASS: gdb.stabs/weird.exp: variable attr121 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr121)
+PASS: gdb.stabs/weird.exp: variable attr122 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr122)
+PASS: gdb.stabs/weird.exp: variable attr123 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr123)
+PASS: gdb.stabs/weird.exp: variable attr124 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr124)
+PASS: gdb.stabs/weird.exp: variable attr125 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr125)
+PASS: gdb.stabs/weird.exp: variable attr126 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr126)
+PASS: gdb.stabs/weird.exp: 'e' constant on non-enum type
+PASS: gdb.stabs/weird.exp: whatis const69
+PASS: gdb.stabs/weird.exp: 'e' constant with embedded type
+PASS: gdb.stabs/weird.exp: char constant
+PASS: gdb.stabs/weird.exp: String constant 1
+PASS: gdb.stabs/weird.exp: String constant 2
+PASS: gdb.stabs/weird.exp: String constant 3
+PASS: gdb.stabs/weird.exp: String constant 4
+PASS: gdb.stabs/weird.exp: p bad_neg0
+PASS: gdb.stabs/weird.exp: ptype on inttype
+PASS: gdb.stabs/weird.exp: unrecognized floating point type
+PASS: gdb.stabs/weird.exp: print very big integer
+PASS: gdb.stabs/weird.exp: whatis consth
+PASS: gdb.stabs/weird.exp: whatis consth2
+XFAIL: gdb.stabs/weird.exp: print struct constant
+PASS: gdb.stabs/weird.exp: print bad_type0
+PASS: gdb.stabs/weird.exp: print bad_type1
+XFAIL: gdb.stabs/weird.exp: array0 with strange index
+XFAIL: gdb.stabs/weird.exp: array1 with strange index
+PASS: gdb.stabs/weird.exp: whatis one_var (known failure in gdb 4.10)
+PASS: gdb.stabs/weird.exp: whatis one_var test 2
+PASS: gdb.stabs/weird.exp: whatis two_var (known failure in gdb 4.10)
+PASS: gdb.stabs/weird.exp: whatis two_var test 2
+XFAIL: gdb.stabs/weird.exp: whatis pointer_to_int_var
+XFAIL: gdb.stabs/weird.exp: whatis intp_var
+PASS: gdb.stabs/weird.exp: p common0var0
+XFAIL: gdb.stabs/weird.exp: p common0var1
+XFAIL: gdb.stabs/weird.exp: p common0var2
+Running ./gdb.threads/attach-into-signal.exp ...
+Running ./gdb.threads/attach-stopped.exp ...
+Running ./gdb.threads/bp_in_thread.exp ...
+PASS: gdb.threads/bp_in_thread.exp: successfully compiled posix threads test case
+PASS: gdb.threads/bp_in_thread.exp: breakpoint on noreturn
+PASS: gdb.threads/bp_in_thread.exp: run to noreturn
+Running ./gdb.threads/clone-new-thread-event.exp ...
+PASS: gdb.threads/clone-new-thread-event.exp: catch SIGUSR1
+Running ./gdb.threads/corethreads.exp ...
+Running ./gdb.threads/create-fail.exp ...
+PASS: gdb.threads/create-fail.exp: successfully compiled posix threads test case
+FAIL: gdb.threads/create-fail.exp: iteration 1: run till end
+FAIL: gdb.threads/create-fail.exp: iteration 2: run till end
+FAIL: gdb.threads/create-fail.exp: iteration 3: run till end
+FAIL: gdb.threads/create-fail.exp: iteration 4: run till end
+FAIL: gdb.threads/create-fail.exp: iteration 5: run till end
+FAIL: gdb.threads/create-fail.exp: iteration 6: run till end
+FAIL: gdb.threads/create-fail.exp: iteration 7: run till end
+FAIL: gdb.threads/create-fail.exp: iteration 8: run till end
+FAIL: gdb.threads/create-fail.exp: iteration 9: run till end
+FAIL: gdb.threads/create-fail.exp: iteration 10: run till end
+Running ./gdb.threads/current-lwp-dead.exp ...
+PASS: gdb.threads/current-lwp-dead.exp: continue to breakpoint: fn_return
+Running ./gdb.threads/execl.exp ...
+Running ./gdb.threads/fork-child-threads.exp ...
+Running ./gdb.threads/fork-thread-pending.exp ...
+Running ./gdb.threads/gcore-thread.exp ...
+PASS: gdb.threads/gcore-thread.exp: successfully compiled posix threads test case
+PASS: gdb.threads/gcore-thread.exp: successfully compiled posix threads test case
+PASS: gdb.threads/gcore-thread.exp: help gcore
+PASS: gdb.threads/gcore-thread.exp: thread 1 is running
+PASS: gdb.threads/gcore-thread.exp: thread 2 is running
+PASS: gdb.threads/gcore-thread.exp: save a corefile
+XFAIL: gdb.threads/gcore-thread.exp: clear __stack_user.next
+XFAIL: gdb.threads/gcore-thread.exp: clear stack_used.next
+PASS: gdb.threads/gcore-thread.exp: corefile: re-load generated corefile
+PASS: gdb.threads/gcore-thread.exp: corefile: corefile contains at least two threads
+PASS: gdb.threads/gcore-thread.exp: corefile: a corefile thread is executing thread2
+PASS: gdb.threads/gcore-thread.exp: corefile: thread2 is current thread in corefile
+FAIL: gdb.threads/gcore-thread.exp: core0file: re-load generated corefile
+FAIL: gdb.threads/gcore-thread.exp: core0file: corefile contains at least two threads
+FAIL: gdb.threads/gcore-thread.exp: core0file: a corefile thread is executing thread2
+FAIL: gdb.threads/gcore-thread.exp: core0file: thread2 is current thread in corefile
+Running ./gdb.threads/hand-call-in-threads.exp ...
+PASS: gdb.threads/hand-call-in-threads.exp: successfully compiled posix threads test case
+PASS: gdb.threads/hand-call-in-threads.exp: breakpoint on all_threads_running
+PASS: gdb.threads/hand-call-in-threads.exp: breakpoint on hand_call
+PASS: gdb.threads/hand-call-in-threads.exp: run to all_threads_running
+PASS: gdb.threads/hand-call-in-threads.exp: enable scheduler locking
+PASS: gdb.threads/hand-call-in-threads.exp: show scheduler locking on
+PASS: gdb.threads/hand-call-in-threads.exp: prepare to make hand call, thread 1
+PASS: gdb.threads/hand-call-in-threads.exp: hand call, thread 1
+PASS: gdb.threads/hand-call-in-threads.exp: prepare to make hand call, thread 2
+PASS: gdb.threads/hand-call-in-threads.exp: hand call, thread 2
+PASS: gdb.threads/hand-call-in-threads.exp: prepare to make hand call, thread 3
+PASS: gdb.threads/hand-call-in-threads.exp: hand call, thread 3
+PASS: gdb.threads/hand-call-in-threads.exp: prepare to make hand call, thread 4
+PASS: gdb.threads/hand-call-in-threads.exp: hand call, thread 4
+PASS: gdb.threads/hand-call-in-threads.exp: prepare to make hand call, thread 5
+PASS: gdb.threads/hand-call-in-threads.exp: hand call, thread 5
+PASS: gdb.threads/hand-call-in-threads.exp: set confirm off
+PASS: gdb.threads/hand-call-in-threads.exp: prepare to discard hand call, thread 1
+PASS: gdb.threads/hand-call-in-threads.exp: dummy stack frame number, thread 1
+PASS: gdb.threads/hand-call-in-threads.exp: setting frame, thread 1
+PASS: gdb.threads/hand-call-in-threads.exp: discard hand call, thread 1
+PASS: gdb.threads/hand-call-in-threads.exp: prepare to discard hand call, thread 2
+PASS: gdb.threads/hand-call-in-threads.exp: dummy stack frame number, thread 2
+PASS: gdb.threads/hand-call-in-threads.exp: setting frame, thread 2
+PASS: gdb.threads/hand-call-in-threads.exp: discard hand call, thread 2
+PASS: gdb.threads/hand-call-in-threads.exp: prepare to discard hand call, thread 3
+PASS: gdb.threads/hand-call-in-threads.exp: dummy stack frame number, thread 3
+PASS: gdb.threads/hand-call-in-threads.exp: setting frame, thread 3
+PASS: gdb.threads/hand-call-in-threads.exp: discard hand call, thread 3
+PASS: gdb.threads/hand-call-in-threads.exp: prepare to discard hand call, thread 4
+PASS: gdb.threads/hand-call-in-threads.exp: dummy stack frame number, thread 4
+PASS: gdb.threads/hand-call-in-threads.exp: setting frame, thread 4
+PASS: gdb.threads/hand-call-in-threads.exp: discard hand call, thread 4
+PASS: gdb.threads/hand-call-in-threads.exp: prepare to discard hand call, thread 5
+PASS: gdb.threads/hand-call-in-threads.exp: dummy stack frame number, thread 5
+PASS: gdb.threads/hand-call-in-threads.exp: setting frame, thread 5
+PASS: gdb.threads/hand-call-in-threads.exp: discard hand call, thread 5
+PASS: gdb.threads/hand-call-in-threads.exp: all dummies popped
+PASS: gdb.threads/hand-call-in-threads.exp: disable scheduler locking
+PASS: gdb.threads/hand-call-in-threads.exp: show scheduler locking off
+Running ./gdb.threads/ia64-sigill.exp ...
+PASS: gdb.threads/ia64-sigill.exp: successfully compiled posix threads test case
+PASS: gdb.threads/ia64-sigill.exp: info addr label
+PASS: gdb.threads/ia64-sigill.exp: set $sigill_bpnum=$bpnum
+PASS: gdb.threads/ia64-sigill.exp: set debug infrun 1
+PASS: gdb.threads/ia64-sigill.exp: continue
+PASS: gdb.threads/ia64-sigill.exp: delete $sigill_bpnum
+PASS: gdb.threads/ia64-sigill.exp: continue for the pending signal
+Running ./gdb.threads/interrupted-hand-call.exp ...
+PASS: gdb.threads/interrupted-hand-call.exp: successfully compiled posix threads test case
+PASS: gdb.threads/interrupted-hand-call.exp: breakpoint on all_threads_running
+PASS: gdb.threads/interrupted-hand-call.exp: run to all_threads_running
+PASS: gdb.threads/interrupted-hand-call.exp: hand-call interrupted by signal in another thread
+PASS: gdb.threads/interrupted-hand-call.exp: dummy stack frame present
+PASS: gdb.threads/interrupted-hand-call.exp: finish hand-call
+PASS: gdb.threads/interrupted-hand-call.exp: dummy frame popped
+FAIL: gdb.threads/interrupted-hand-call.exp: setting breakpoint at exit
+Running ./gdb.threads/killed.exp ...
+PASS: gdb.threads/killed.exp: successfully compiled posix threads test case
+PASS: gdb.threads/killed.exp: run program to completion
+PASS: gdb.threads/killed.exp: GDB exits after multi-threaded program exits messily
+Running ./gdb.threads/leader-exit.exp ...
+PASS: gdb.threads/leader-exit.exp: successfully compiled posix threads test case
+FAIL: gdb.threads/leader-exit.exp: continue to breakpoint: break-here (timeout)
+FAIL: gdb.threads/leader-exit.exp: Single thread has been left (timeout)
+Running ./gdb.threads/linux-dp.exp ...
+PASS: gdb.threads/linux-dp.exp: successfully compiled posix threads test case
+PASS: gdb.threads/linux-dp.exp: set print sevenbit-strings
+PASS: gdb.threads/linux-dp.exp: info threads 1
+PASS: gdb.threads/linux-dp.exp: continue to breakpoint: about to create philosopher: 0
+UNSUPPORTED: gdb.threads/linux-dp.exp: create philosopher: 0
+PASS: gdb.threads/linux-dp.exp: info threads after: 0
+PASS: gdb.threads/linux-dp.exp: continue to breakpoint: about to create philosopher: 1
+UNSUPPORTED: gdb.threads/linux-dp.exp: create philosopher: 1
+PASS: gdb.threads/linux-dp.exp: info threads after: 1
+PASS: gdb.threads/linux-dp.exp: continue to breakpoint: about to create philosopher: 2
+UNSUPPORTED: gdb.threads/linux-dp.exp: create philosopher: 2
+PASS: gdb.threads/linux-dp.exp: info threads after: 2
+PASS: gdb.threads/linux-dp.exp: continue to breakpoint: about to create philosopher: 3
+UNSUPPORTED: gdb.threads/linux-dp.exp: create philosopher: 3
+PASS: gdb.threads/linux-dp.exp: info threads after: 3
+PASS: gdb.threads/linux-dp.exp: continue to breakpoint: about to create philosopher: 4
+UNSUPPORTED: gdb.threads/linux-dp.exp: create philosopher: 4
+PASS: gdb.threads/linux-dp.exp: info threads after: 4
+PASS: gdb.threads/linux-dp.exp: continue to breakpoint: main thread's sleep
+PASS: gdb.threads/linux-dp.exp: info threads 2
+PASS: gdb.threads/linux-dp.exp: continue to breakpoint: thread 5's print
+FAIL: gdb.threads/linux-dp.exp: first thread-specific breakpoint hit
+PASS: gdb.threads/linux-dp.exp: continue to breakpoint: thread 5's print, pass: 0
+PASS: gdb.threads/linux-dp.exp: continue to breakpoint: thread 5's print, pass: 1
+PASS: gdb.threads/linux-dp.exp: continue to breakpoint: thread 5's print, pass: 2
+PASS: gdb.threads/linux-dp.exp: continue to breakpoint: thread 5's print, pass: 3
+PASS: gdb.threads/linux-dp.exp: continue to breakpoint: thread 5's print, pass: 4
+PASS: gdb.threads/linux-dp.exp: continue to breakpoint: thread 5's print, pass: 5
+PASS: gdb.threads/linux-dp.exp: continue to breakpoint: thread 5's print, pass: 6
+PASS: gdb.threads/linux-dp.exp: continue to breakpoint: thread 5's print, pass: 7
+PASS: gdb.threads/linux-dp.exp: continue to breakpoint: thread 5's print, pass: 8
+PASS: gdb.threads/linux-dp.exp: continue to breakpoint: thread 5's print, pass: 9
+PASS: gdb.threads/linux-dp.exp: thread-specific breakpoint is thread-specific
+PASS: gdb.threads/linux-dp.exp: selected thread: 1
+PASS: gdb.threads/linux-dp.exp: philosopher is distinct: 1
+PASS: gdb.threads/linux-dp.exp: selected thread: 2
+PASS: gdb.threads/linux-dp.exp: philosopher is distinct: 2
+PASS: gdb.threads/linux-dp.exp: selected thread: 3
+PASS: gdb.threads/linux-dp.exp: philosopher is distinct: 3
+PASS: gdb.threads/linux-dp.exp: selected thread: 4
+PASS: gdb.threads/linux-dp.exp: philosopher is distinct: 4
+PASS: gdb.threads/linux-dp.exp: selected thread: 5
+PASS: gdb.threads/linux-dp.exp: philosopher is distinct: 5
+PASS: gdb.threads/linux-dp.exp: selected thread: 6
+PASS: gdb.threads/linux-dp.exp: philosopher is distinct: 6
+PASS: gdb.threads/linux-dp.exp: found an interesting thread
+PASS: gdb.threads/linux-dp.exp: manager thread found (not found) when expected
+Running ./gdb.threads/local-watch-wrong-thread.exp ...
+Running ./gdb.threads/manythreads.exp ...
+PASS: gdb.threads/manythreads.exp: successfully compiled posix threads test case
+PASS: gdb.threads/manythreads.exp: set print sevenbit-strings
+PASS: gdb.threads/manythreads.exp: shell stty intr '^C'
+PASS: gdb.threads/manythreads.exp: first continue
+PASS: gdb.threads/manythreads.exp: stop threads 1
+PASS: gdb.threads/manythreads.exp: info threads
+PASS: gdb.threads/manythreads.exp: give a name to the thread
+PASS: gdb.threads/manythreads.exp: check thread name
+PASS: gdb.threads/manythreads.exp: second continue
+PASS: gdb.threads/manythreads.exp: check for duplicate SIGINT
+PASS: gdb.threads/manythreads.exp: stop threads 2
+PASS: gdb.threads/manythreads.exp: GDB exits after stopping multithreaded program
+Running ./gdb.threads/multi-create.exp ...
+PASS: gdb.threads/multi-create.exp: successfully compiled posix threads test case
+PASS: gdb.threads/multi-create.exp: continue to breakpoint 0
+PASS: gdb.threads/multi-create.exp: continue to breakpoint 1
+PASS: gdb.threads/multi-create.exp: continue to breakpoint 2
+PASS: gdb.threads/multi-create.exp: continue to breakpoint 3
+PASS: gdb.threads/multi-create.exp: continue to breakpoint 4
+PASS: gdb.threads/multi-create.exp: continue to breakpoint 5
+PASS: gdb.threads/multi-create.exp: continue to breakpoint 6
+PASS: gdb.threads/multi-create.exp: continue to breakpoint 7
+PASS: gdb.threads/multi-create.exp: continue to breakpoint 8
+PASS: gdb.threads/multi-create.exp: continue to breakpoint 9
+PASS: gdb.threads/multi-create.exp: continue to breakpoint 10
+PASS: gdb.threads/multi-create.exp: continue to breakpoint 11
+PASS: gdb.threads/multi-create.exp: continue to breakpoint 12
+PASS: gdb.threads/multi-create.exp: continue to breakpoint 13
+PASS: gdb.threads/multi-create.exp: continue to breakpoint 14
+PASS: gdb.threads/multi-create.exp: continue to breakpoint 15
+PASS: gdb.threads/multi-create.exp: continue to breakpoint 16
+PASS: gdb.threads/multi-create.exp: continue to breakpoint 17
+PASS: gdb.threads/multi-create.exp: continue to breakpoint 18
+PASS: gdb.threads/multi-create.exp: continue to breakpoint 19
+PASS: gdb.threads/multi-create.exp: continue to breakpoint 20
+PASS: gdb.threads/multi-create.exp: continue to breakpoint 21
+PASS: gdb.threads/multi-create.exp: continue to breakpoint 22
+PASS: gdb.threads/multi-create.exp: continue to breakpoint 23
+PASS: gdb.threads/multi-create.exp: continue to breakpoint 24
+PASS: gdb.threads/multi-create.exp: continue to breakpoint 25
+PASS: gdb.threads/multi-create.exp: continue to breakpoint 26
+PASS: gdb.threads/multi-create.exp: continue to breakpoint 27
+PASS: gdb.threads/multi-create.exp: continue to breakpoint 28
+PASS: gdb.threads/multi-create.exp: continue to breakpoint 29
+PASS: gdb.threads/multi-create.exp: continue to breakpoint 30
+PASS: gdb.threads/multi-create.exp: continue to breakpoint 31
+Running ./gdb.threads/non-ldr-exc-1.exp ...
+Running ./gdb.threads/non-ldr-exc-2.exp ...
+Running ./gdb.threads/non-ldr-exc-3.exp ...
+Running ./gdb.threads/non-ldr-exc-4.exp ...
+Running ./gdb.threads/no-unwaited-for-left.exp ...
+PASS: gdb.threads/no-unwaited-for-left.exp: successfully compiled posix threads test case
+PASS: gdb.threads/no-unwaited-for-left.exp: continue to breakpoint: break-here
+PASS: gdb.threads/no-unwaited-for-left.exp: enable scheduler-locking, for thread 2
+FAIL: gdb.threads/no-unwaited-for-left.exp: continue stops when thread 2 exits (the program exited)
+FAIL: gdb.threads/no-unwaited-for-left.exp: only main thread left, thread 2 terminated
+PASS: gdb.threads/no-unwaited-for-left.exp: select main thread
+FAIL: gdb.threads/no-unwaited-for-left.exp: disable scheduler-locking, letting new thread start
+FAIL: gdb.threads/no-unwaited-for-left.exp: continue to breakpoint: break-here-2
+FAIL: gdb.threads/no-unwaited-for-left.exp: enable scheduler-locking, for main thread
+FAIL: gdb.threads/no-unwaited-for-left.exp: continue stops when the main thread exits (the program is no longer running)
+FAIL: gdb.threads/no-unwaited-for-left.exp: only thread 3 left, main thread terminated
+Running ./gdb.threads/pending-step.exp ...
+PASS: gdb.threads/pending-step.exp: successfully compiled posix threads test case
+PASS: gdb.threads/pending-step.exp: continue to breakpoint: continue to first breakpoint hit
+PASS: gdb.threads/pending-step.exp: next in multiple threads with breakpoints
+Running ./gdb.threads/print-threads.exp ...
+PASS: gdb.threads/print-threads.exp: successfully compiled posix threads test case
+PASS: gdb.threads/print-threads.exp: set print sevenbit-strings
+PASS: gdb.threads/print-threads.exp: set width 0
+PASS: gdb.threads/print-threads.exp: shell stty intr '^C'
+PASS: gdb.threads/print-threads.exp: break thread_function
+PASS: gdb.threads/print-threads.exp: set var slow = 0
+PASS: gdb.threads/print-threads.exp: Hit thread_function breakpoint, 1 (fast)
+PASS: gdb.threads/print-threads.exp: Hit thread_function breakpoint, 2 (fast)
+PASS: gdb.threads/print-threads.exp: Hit thread_function breakpoint, 3 (fast)
+PASS: gdb.threads/print-threads.exp: Hit thread_function breakpoint, 4 (fast)
+PASS: gdb.threads/print-threads.exp: Hit thread_function breakpoint, 5 (fast)
+PASS: gdb.threads/print-threads.exp: program exited normally
+PASS: gdb.threads/print-threads.exp: all threads ran once (fast)
+PASS: gdb.threads/print-threads.exp: break thread_function (2)
+PASS: gdb.threads/print-threads.exp: set var slow = 1
+PASS: gdb.threads/print-threads.exp: Hit thread_function breakpoint, 1 (slow)
+PASS: gdb.threads/print-threads.exp: Hit thread_function breakpoint, 2 (slow)
+PASS: gdb.threads/print-threads.exp: Hit thread_function breakpoint, 3 (slow)
+PASS: gdb.threads/print-threads.exp: Hit thread_function breakpoint, 4 (slow)
+PASS: gdb.threads/print-threads.exp: Hit thread_function breakpoint, 5 (slow)
+PASS: gdb.threads/print-threads.exp: program exited normally
+PASS: gdb.threads/print-threads.exp: all threads ran once (slow)
+PASS: gdb.threads/print-threads.exp: break thread_function (3)
+PASS: gdb.threads/print-threads.exp: set var slow = 1 (2)
+FAIL: gdb.threads/print-threads.exp: setting breakpoint at kill
+PASS: gdb.threads/print-threads.exp: Hit thread_function breakpoint, 1 (slow with kill breakpoint)
+PASS: gdb.threads/print-threads.exp: Hit thread_function breakpoint, 2 (slow with kill breakpoint)
+PASS: gdb.threads/print-threads.exp: Hit thread_function breakpoint, 3 (slow with kill breakpoint)
+PASS: gdb.threads/print-threads.exp: Hit thread_function breakpoint, 4 (slow with kill breakpoint)
+PASS: gdb.threads/print-threads.exp: Hit thread_function breakpoint, 5 (slow with kill breakpoint)
+PASS: gdb.threads/print-threads.exp: program exited normally
+PASS: gdb.threads/print-threads.exp: all threads ran once (slow with kill breakpoint)
+Running ./gdb.threads/pthread_cond_wait.exp ...
+PASS: gdb.threads/pthread_cond_wait.exp: successfully compiled posix threads test case
+PASS: gdb.threads/pthread_cond_wait.exp: breakpoint on break_me
+PASS: gdb.threads/pthread_cond_wait.exp: run to break_me
+FAIL: gdb.threads/pthread_cond_wait.exp: backtrace in blocked thread
+Running ./gdb.threads/pthreads.exp ...
+PASS: gdb.threads/pthreads.exp: successfully compiled posix threads test case
+PASS: gdb.threads/pthreads.exp: set print sevenbit-strings
+PASS: gdb.threads/pthreads.exp: set width 0
+PASS: gdb.threads/pthreads.exp: shell stty intr '^C'
+PASS: gdb.threads/pthreads.exp: info threads
+PASS: gdb.threads/pthreads.exp: break thread1
+PASS: gdb.threads/pthreads.exp: Continue to creation of first thread
+PASS: gdb.threads/pthreads.exp: disable
+PASS: gdb.threads/pthreads.exp: break thread2
+PASS: gdb.threads/pthreads.exp: Continue to creation of second thread
+PASS: gdb.threads/pthreads.exp: set var common_routine::hits=0
+PASS: gdb.threads/pthreads.exp: set var common_routine::from_thread1=0
+PASS: gdb.threads/pthreads.exp: set var common_routine::from_thread2=0
+PASS: gdb.threads/pthreads.exp: set var common_routine::from_main=0
+PASS: gdb.threads/pthreads.exp: set var common_routine::full_coverage=0
+PASS: gdb.threads/pthreads.exp: disable
+PASS: gdb.threads/pthreads.exp: tbreak common_routine if hits >= 15
+PASS: gdb.threads/pthreads.exp: stopped before calling common_routine 15 times
+PASS: gdb.threads/pthreads.exp: All threads running after startup
+PASS: gdb.threads/pthreads.exp: Continue with all threads running
+PASS: gdb.threads/pthreads.exp: Stopped with a ^C
+PASS: gdb.threads/pthreads.exp: bt
+FAIL: gdb.threads/pthreads.exp: set var common_routine::hits=0
+FAIL: gdb.threads/pthreads.exp: set var common_routine::from_thread1=0
+FAIL: gdb.threads/pthreads.exp: set var common_routine::from_thread2=0
+FAIL: gdb.threads/pthreads.exp: set var common_routine::from_main=0
+FAIL: gdb.threads/pthreads.exp: set var common_routine::full_coverage=0
+PASS: gdb.threads/pthreads.exp: disable
+PASS: gdb.threads/pthreads.exp: tbreak common_routine if hits >= 15
+PASS: gdb.threads/pthreads.exp: stopped before calling common_routine 15 times
+PASS: gdb.threads/pthreads.exp: All threads running after continuing from ^C stop
+FAIL: gdb.threads/pthreads.exp: check backtrace from main thread
+FAIL: gdb.threads/pthreads.exp: check backtrace from thread 1
+FAIL: gdb.threads/pthreads.exp: check backtrace from thread 2
+FAIL: gdb.threads/pthreads.exp: apply backtrace command to all three threads
+PASS: gdb.threads/pthreads.exp: set break at common_routine in thread 2
+PASS: gdb.threads/pthreads.exp: continue to bkpt at common_routine in thread 2
+PASS: gdb.threads/pthreads.exp: backtrace from thread 2 bkpt in common_routine
+Running ./gdb.threads/schedlock.exp ...
+PASS: gdb.threads/schedlock.exp: successfully compiled posix threads test case
+PASS: gdb.threads/schedlock.exp: shell stty intr '^C'
+PASS: gdb.threads/schedlock.exp: set print sevenbit-strings
+PASS: gdb.threads/schedlock.exp: set width 0
+PASS: gdb.threads/schedlock.exp: scheduler locking set to none
+PASS: gdb.threads/schedlock.exp: continue to breakpoint: all threads started
+PASS: gdb.threads/schedlock.exp: listed args (1)
+PASS: gdb.threads/schedlock.exp: continue (initial)
+PASS: gdb.threads/schedlock.exp: stop all threads (initial)
+PASS: gdb.threads/schedlock.exp: continue to breakpoint: return to loop (initial)
+PASS: gdb.threads/schedlock.exp: listed args (2)
+PASS: gdb.threads/schedlock.exp: all threads alive
+PASS: gdb.threads/schedlock.exp: find current thread (1)
+PASS: gdb.threads/schedlock.exp: set scheduler-locking off
+PASS: gdb.threads/schedlock.exp: step to increment (unlocked 0)
+PASS: gdb.threads/schedlock.exp: step to increment (unlocked 1)
+PASS: gdb.threads/schedlock.exp: step to increment (unlocked 2)
+PASS: gdb.threads/schedlock.exp: step to increment (unlocked 3)
+PASS: gdb.threads/schedlock.exp: step to increment (unlocked 4)
+PASS: gdb.threads/schedlock.exp: step to increment (unlocked 5)
+PASS: gdb.threads/schedlock.exp: step to increment (unlocked 6)
+PASS: gdb.threads/schedlock.exp: step to increment (unlocked 7)
+PASS: gdb.threads/schedlock.exp: step to increment (unlocked 8)
+PASS: gdb.threads/schedlock.exp: step to increment (unlocked 9)
+PASS: gdb.threads/schedlock.exp: find current thread (2)
+PASS: gdb.threads/schedlock.exp: step without lock does not change thread
+PASS: gdb.threads/schedlock.exp: listed args (3)
+PASS: gdb.threads/schedlock.exp: current thread stepped
+PASS: gdb.threads/schedlock.exp: other threads ran - unlocked
+PASS: gdb.threads/schedlock.exp: set scheduler-locking on
+PASS: gdb.threads/schedlock.exp: continue (with lock)
+PASS: gdb.threads/schedlock.exp: stop all threads (with lock)
+PASS: gdb.threads/schedlock.exp: continue to breakpoint: return to loop (with lock)
+PASS: gdb.threads/schedlock.exp: find current thread (3)
+PASS: gdb.threads/schedlock.exp: continue with lock does not change thread
+PASS: gdb.threads/schedlock.exp: listed args (4)
+PASS: gdb.threads/schedlock.exp: current thread ran
+PASS: gdb.threads/schedlock.exp: other threads didn't run - locked
+PASS: gdb.threads/schedlock.exp: step to increment (locked 0)
+PASS: gdb.threads/schedlock.exp: step to increment (locked 1)
+PASS: gdb.threads/schedlock.exp: step to increment (locked 2)
+PASS: gdb.threads/schedlock.exp: step to increment (locked 3)
+PASS: gdb.threads/schedlock.exp: step to increment (locked 4)
+PASS: gdb.threads/schedlock.exp: step to increment (locked 5)
+PASS: gdb.threads/schedlock.exp: step to increment (locked 6)
+PASS: gdb.threads/schedlock.exp: step to increment (locked 7)
+PASS: gdb.threads/schedlock.exp: step to increment (locked 8)
+PASS: gdb.threads/schedlock.exp: step to increment (locked 9)
+PASS: gdb.threads/schedlock.exp: find current thread (2)
+PASS: gdb.threads/schedlock.exp: step with lock does not change thread
+PASS: gdb.threads/schedlock.exp: listed args (5)
+PASS: gdb.threads/schedlock.exp: current thread stepped locked
+PASS: gdb.threads/schedlock.exp: other threads didn't run - step locked
+Running ./gdb.threads/siginfo-threads.exp ...
+PASS: gdb.threads/siginfo-threads.exp: successfully compiled posix threads test case
+PASS: gdb.threads/siginfo-threads.exp: handle SIGUSR1 stop print pass
+PASS: gdb.threads/siginfo-threads.exp: handle SIGUSR2 stop print pass
+PASS: gdb.threads/siginfo-threads.exp: get pid
+PASS: gdb.threads/siginfo-threads.exp: catch signal 0
+PASS: gdb.threads/siginfo-threads.exp: signal 0 si_signo
+PASS: gdb.threads/siginfo-threads.exp: signal 0 si_code is SI_TKILL
+PASS: gdb.threads/siginfo-threads.exp: signal 0 si_pid
+PASS: gdb.threads/siginfo-threads.exp: catch signal 1
+PASS: gdb.threads/siginfo-threads.exp: signal 1 si_signo
+PASS: gdb.threads/siginfo-threads.exp: signal 1 si_code is SI_TKILL
+PASS: gdb.threads/siginfo-threads.exp: signal 1 si_pid
+PASS: gdb.threads/siginfo-threads.exp: catch signal 2
+PASS: gdb.threads/siginfo-threads.exp: signal 2 si_signo
+PASS: gdb.threads/siginfo-threads.exp: signal 2 si_code is SI_TKILL
+PASS: gdb.threads/siginfo-threads.exp: signal 2 si_pid
+PASS: gdb.threads/siginfo-threads.exp: catch signal 3
+PASS: gdb.threads/siginfo-threads.exp: signal 3 si_signo
+PASS: gdb.threads/siginfo-threads.exp: signal 3 si_code is SI_TKILL
+PASS: gdb.threads/siginfo-threads.exp: signal 3 si_pid
+PASS: gdb.threads/siginfo-threads.exp: continue to breakpoint: break-at-exit
+Running ./gdb.threads/sigstep-threads.exp ...
+PASS: gdb.threads/sigstep-threads.exp: successfully compiled posix threads test case
+PASS: gdb.threads/sigstep-threads.exp: handle SIGUSR1 nostop print pass
+PASS: gdb.threads/sigstep-threads.exp: set scheduler-locking off
+PASS: gdb.threads/sigstep-threads.exp: set $step1=$bpnum
+PASS: gdb.threads/sigstep-threads.exp: continue to breakpoint: step-1
+PASS: gdb.threads/sigstep-threads.exp: disable $step1
+PASS: gdb.threads/sigstep-threads.exp: step
+Running ./gdb.threads/sigthread.exp ...
+PASS: gdb.threads/sigthread.exp: successfully compiled posix threads test case
+PASS: gdb.threads/sigthread.exp: handle SIGUSR1 nostop noprint pass
+PASS: gdb.threads/sigthread.exp: handle SIGUSR2 nostop noprint pass
+PASS: gdb.threads/sigthread.exp: continue
+PASS: gdb.threads/sigthread.exp: stop with control-c
+Running ./gdb.threads/staticthreads.exp ...
+PASS: gdb.threads/staticthreads.exp: successfully compiled posix threads test case
+PASS: gdb.threads/staticthreads.exp: set print sevenbit-strings
+PASS: gdb.threads/staticthreads.exp: break sem_post
+PASS: gdb.threads/staticthreads.exp: Continue to main's call of sem_post
+PASS: gdb.threads/staticthreads.exp: rerun to main
+PASS: gdb.threads/staticthreads.exp: handle SIG32 nostop noprint pass
+PASS: gdb.threads/staticthreads.exp: handle SIG32 helps
+PASS: gdb.threads/staticthreads.exp: info threads
+PASS: gdb.threads/staticthreads.exp: GDB exits with static thread program
+Running ./gdb.threads/switch-threads.exp ...
+PASS: gdb.threads/switch-threads.exp: successfully compiled posix threads test case
+PASS: gdb.threads/switch-threads.exp: continue to breakpoint: continue to thread_func
+PASS: gdb.threads/switch-threads.exp: next
+Running ./gdb.threads/threadapply.exp ...
+PASS: gdb.threads/threadapply.exp: successfully compiled posix threads test case
+PASS: gdb.threads/threadapply.exp: b 62
+PASS: gdb.threads/threadapply.exp: continue
+PASS: gdb.threads/threadapply.exp: macro details
+PASS: gdb.threads/threadapply.exp: defining macro
+PASS: gdb.threads/threadapply.exp: set backtrace limit 3
+PASS: gdb.threads/threadapply.exp: thread apply all backthread
+PASS: gdb.threads/threadapply.exp: step to the thread_function
+PASS: gdb.threads/threadapply.exp: go up in the stack frame
+PASS: gdb.threads/threadapply.exp: run a simple print command on all threads
+PASS: gdb.threads/threadapply.exp: go down and check selected frame
+Running ./gdb.threads/thread_check.exp ...
+PASS: gdb.threads/thread_check.exp: successfully compiled posix threads test case
+PASS: gdb.threads/thread_check.exp: breakpoint at tf
+PASS: gdb.threads/thread_check.exp: continue to tf
+PASS: gdb.threads/thread_check.exp: backtrace from thread function
+Running ./gdb.threads/thread_events.exp ...
+Running ./gdb.threads/thread-execl.exp ...
+Running ./gdb.threads/thread-find.exp ...
+PASS: gdb.threads/thread-find.exp: successfully compiled posix threads test case
+PASS: gdb.threads/thread-find.exp: set print sevenbit-strings
+PASS: gdb.threads/thread-find.exp: continue to breakpoint: main thread's sleep
+PASS: gdb.threads/thread-find.exp: info threads
+PASS: gdb.threads/thread-find.exp: name thread 1
+PASS: gdb.threads/thread-find.exp: name thread 2
+PASS: gdb.threads/thread-find.exp: name thread 3
+PASS: gdb.threads/thread-find.exp: name thread 4
+PASS: gdb.threads/thread-find.exp: name thread 5
+PASS: gdb.threads/thread-find.exp: name thread 6
+PASS: gdb.threads/thread-find.exp: collect thread id
+PASS: gdb.threads/thread-find.exp: got thread ids
+PASS: gdb.threads/thread-find.exp: collect process id
+PASS: gdb.threads/thread-find.exp: collect lwp id
+PASS: gdb.threads/thread-find.exp: find thread name 6
+PASS: gdb.threads/thread-find.exp: find thread name 5
+PASS: gdb.threads/thread-find.exp: find thread name 4
+PASS: gdb.threads/thread-find.exp: find thread name 3
+PASS: gdb.threads/thread-find.exp: find thread name 2
+PASS: gdb.threads/thread-find.exp: find thread name 1
+PASS: gdb.threads/thread-find.exp: find thread id 6
+PASS: gdb.threads/thread-find.exp: find thread id 5
+PASS: gdb.threads/thread-find.exp: find thread id 4
+PASS: gdb.threads/thread-find.exp: find thread id 3
+PASS: gdb.threads/thread-find.exp: find thread id 2
+PASS: gdb.threads/thread-find.exp: find thread id 1
+PASS: gdb.threads/thread-find.exp: no thread
+PASS: gdb.threads/thread-find.exp: test regular exp
+PASS: gdb.threads/thread-find.exp: info threads 2 4 6
+PASS: gdb.threads/thread-find.exp: info threads 3-5
+PASS: gdb.threads/thread-find.exp: test inverted range
+PASS: gdb.threads/thread-find.exp: info threads 3-3
+PASS: gdb.threads/thread-find.exp: info thread foo
+PASS: gdb.threads/thread-find.exp: info thread foo -1
+Running ./gdb.threads/thread-specific.exp ...
+PASS: gdb.threads/thread-specific.exp: successfully compiled posix threads test case
+PASS: gdb.threads/thread-specific.exp: set print sevenbit-strings
+PASS: gdb.threads/thread-specific.exp: set width 0
+PASS: gdb.threads/thread-specific.exp: thread var when not running
+PASS: gdb.threads/thread-specific.exp: continue to breakpoint: all threads started
+PASS: gdb.threads/thread-specific.exp: get threads list
+PASS: gdb.threads/thread-specific.exp: thread var in main
+PASS: gdb.threads/thread-specific.exp: breakpoint 59 main thread
+PASS: gdb.threads/thread-specific.exp: continue to thread-specific breakpoint
+PASS: gdb.threads/thread-specific.exp: found breakpoint for thread number
+PASS: gdb.threads/thread-specific.exp: thread var at break
+Running ./gdb.threads/thread-unwindonsignal.exp ...
+PASS: gdb.threads/thread-unwindonsignal.exp: successfully compiled posix threads test case
+PASS: gdb.threads/thread-unwindonsignal.exp: breakpoint on all_threads_running
+PASS: gdb.threads/thread-unwindonsignal.exp: run to all_threads_running
+PASS: gdb.threads/thread-unwindonsignal.exp: setting unwindonsignal
+PASS: gdb.threads/thread-unwindonsignal.exp: showing unwindonsignal
+PASS: gdb.threads/thread-unwindonsignal.exp: hand-call interrupted by signal in another thread
+PASS: gdb.threads/thread-unwindonsignal.exp: dummy stack frame present
+FAIL: gdb.threads/thread-unwindonsignal.exp: wrong thread not unwound
+PASS: gdb.threads/thread-unwindonsignal.exp: finish hand-call
+PASS: gdb.threads/thread-unwindonsignal.exp: dummy frame popped
+FAIL: gdb.threads/thread-unwindonsignal.exp: setting breakpoint at exit
+Running ./gdb.threads/threxit-hop-specific.exp ...
+PASS: gdb.threads/threxit-hop-specific.exp: successfully compiled posix threads test case
+PASS: gdb.threads/threxit-hop-specific.exp: continue to thread start
+PASS: gdb.threads/threxit-hop-specific.exp: set thread specific breakpoint
+PASS: gdb.threads/threxit-hop-specific.exp: get past the thread specific breakpoint
+Running ./gdb.threads/tls.exp ...
+PASS: gdb.threads/tls.exp: successfully compiled posix threads test case
+PASS: gdb.threads/tls.exp: set breakpoint at all threads
+PASS: gdb.threads/tls.exp: set breakpoint at synch point
+PASS: gdb.threads/tls.exp: set breakpoint at exit
+PASS: gdb.threads/tls.exp: continue to first thread: get to thread
+PASS: gdb.threads/tls.exp: at least one th in spin while stopped at first th
+PASS: gdb.threads/tls.exp: first thread print me
+FAIL: gdb.threads/tls.exp: first thread local storage
+FAIL: gdb.threads/tls.exp: first another thread local storage
+PASS: gdb.threads/tls.exp: first info address a_thread_local
+PASS: gdb.threads/tls.exp: first info address another_thread_local
+PASS: gdb.threads/tls.exp: continue to second thread
+PASS: gdb.threads/tls.exp: at least one th in spin while stopped at second th
+PASS: gdb.threads/tls.exp: second thread print me
+FAIL: gdb.threads/tls.exp: second thread local storage
+FAIL: gdb.threads/tls.exp: second another thread local storage
+PASS: gdb.threads/tls.exp: second info address a_thread_local
+PASS: gdb.threads/tls.exp: second info address another_thread_local
+PASS: gdb.threads/tls.exp: continue to third thread
+PASS: gdb.threads/tls.exp: at least one th in spin while stopped at third th
+PASS: gdb.threads/tls.exp: third thread print me
+FAIL: gdb.threads/tls.exp: third thread local storage
+FAIL: gdb.threads/tls.exp: third another thread local storage
+PASS: gdb.threads/tls.exp: third info address a_thread_local
+PASS: gdb.threads/tls.exp: third info address another_thread_local
+PASS: gdb.threads/tls.exp: continue to synch point
+PASS: gdb.threads/tls.exp: get number of threads
+PASS: gdb.threads/tls.exp: selected thread: 1
+PASS: gdb.threads/tls.exp: backtrace of thread number 1 not relevant
+PASS: gdb.threads/tls.exp: selected thread: 2
+PASS: gdb.threads/tls.exp: backtrace of thread number 2 not relevant
+PASS: gdb.threads/tls.exp: selected thread: 3
+PASS: gdb.threads/tls.exp: backtrace of thread number 3 not relevant
+PASS: gdb.threads/tls.exp: selected thread: 4
+PASS: gdb.threads/tls.exp: backtrace of thread number 4 not relevant
+FAIL: gdb.threads/tls.exp: No thread backtrace reported spin (vsyscall kernel problem?)
+PASS: gdb.threads/tls.exp: threads exited
+PASS: gdb.threads/tls.exp: Expect only base thread at end
+PASS: gdb.threads/tls.exp: info address a_global
+FAIL: gdb.threads/tls.exp: info address me
+FAIL: gdb.threads/tls.exp: p a_thread_local
+FAIL: gdb.threads/tls.exp: p file2_thread_local
+PASS: gdb.threads/tls.exp: info address file2_thread_local
+FAIL: gdb.threads/tls.exp: p a_thread_local second time
+PASS: gdb.threads/tls.exp: info address a_thread_local
+Running ./gdb.threads/tls-nodebug.exp ...
+PASS: gdb.threads/tls-nodebug.exp: successfully compiled posix threads test case
+FAIL: gdb.threads/tls-nodebug.exp: thread local storage
+Running ./gdb.threads/tls-shared.exp ...
+PASS: gdb.threads/tls-shared.exp: successfully compiled posix threads test case
+PASS: gdb.threads/tls-shared.exp: successfully compiled posix threads test case
+FAIL: gdb.threads/tls-shared.exp: print thread local storage variable
+PASS: gdb.threads/tls-shared.exp: ptype of thread local storage variable
+PASS: gdb.threads/tls-shared.exp: print storage info for thread local storage variable
+PASS: gdb.threads/tls-shared.exp: break at and of main
+PASS: gdb.threads/tls-shared.exp: continue to break
+PASS: gdb.threads/tls-shared.exp: print result
+Running ./gdb.threads/tls-var.exp ...
+PASS: gdb.threads/tls-var.exp: successfully compiled posix threads test case
+PASS: gdb.threads/tls-var.exp: whatis tls_var
+FAIL: gdb.threads/tls-var.exp: print tls_var
+Running ./gdb.threads/watchpoint-fork.exp ...
+KFAIL: gdb.threads/watchpoint-fork.exp: gdbserver does not support debugging across fork (PRMS: remote/13584)
+Running ./gdb.threads/watchthreads2.exp ...
+Running ./gdb.threads/watchthreads.exp ...
+Running ./gdb.threads/watchthreads-reorder.exp ...
+Running ./gdb.trace/actions.exp ...
+PASS: gdb.trace/actions.exp: 5.1a: set three tracepoints, no actions
+PASS: gdb.trace/actions.exp: 5.1b: set actions for first tracepoint
+PASS: gdb.trace/actions.exp: 5.1c: verify actions set for first tracepoint
+PASS: gdb.trace/actions.exp: 5.1d: set actions for second tracepoint
+PASS: gdb.trace/actions.exp: 5.1e: verify actions set for second tracepoint
+PASS: gdb.trace/actions.exp: 5.2a: set actions for last (default) tracepoint
+PASS: gdb.trace/actions.exp: 5.2b: verify actions set for second tracepoint
+PASS: gdb.trace/actions.exp: 5.3a: reset actions for first tracepoint
+PASS: gdb.trace/actions.exp: 5.3b: verify actions set for first tracepoint
+PASS: gdb.trace/actions.exp: 5.4: 'end' command out of context
+PASS: gdb.trace/actions.exp: 5.5a: set empty actions for first tracepoint
+PASS: gdb.trace/actions.exp: 5.5c: verify NO actions for first tracepoint
+PASS: gdb.trace/actions.exp: 5.6: actions for invalid tracepoint number
+PASS: gdb.trace/actions.exp: 5.7: invalid action
+PASS: gdb.trace/actions.exp: 5.8a: help actions
+PASS: gdb.trace/actions.exp: 5.8b: help collect
+PASS: gdb.trace/actions.exp: 5.8c: help while-stepping
+PASS: gdb.trace/actions.exp: 5.8d: help end
+PASS: gdb.trace/actions.exp: 5.9a: set default-collect
+PASS: gdb.trace/actions.exp: 5.9b: show default-collect
+PASS: gdb.trace/actions.exp: 5.9c: set default-collect
+PASS: gdb.trace/actions.exp: Create a trace state variable
+PASS: gdb.trace/actions.exp: 5.10a: set teval action for first tracepoint
+PASS: gdb.trace/actions.exp: 5.10a: set teval action for second tracepoint
+PASS: gdb.trace/actions.exp: 5.10a: verify teval actions set for two tracepoints
+Running ./gdb.trace/ax.exp ...
+PASS: gdb.trace/ax.exp: maint agent 12
+PASS: gdb.trace/ax.exp: maint agent gdb_char_test
+PASS: gdb.trace/ax.exp: maint agent gdb_arr_test[12]
+PASS: gdb.trace/ax.exp: maint agent gdb_arr_test[gdb_short_test]
+PASS: gdb.trace/ax.exp: maint agent gdb_struct1_test
+PASS: gdb.trace/ax.exp: maint agent gdb_struct1_test.s
+PASS: gdb.trace/ax.exp: maint agent gdb_struct1_test.arr[gdb_struct1_test.c]
+PASS: gdb.trace/ax.exp: maint agent gdb_structp_test
+PASS: gdb.trace/ax.exp: maint agent gdb_structp_test->l
+PASS: gdb.trace/ax.exp: maint agent gdb_structp_test->bfield
+PASS: gdb.trace/ax.exp: maint agent gdb_long_test + gdb_short_test
+PASS: gdb.trace/ax.exp: maint agent gdb_long_test - gdb_short_test
+PASS: gdb.trace/ax.exp: maint agent gdb_long_test * gdb_short_test
+PASS: gdb.trace/ax.exp: maint agent gdb_long_test / gdb_short_test
+PASS: gdb.trace/ax.exp: maint agent gdb_structp_test + 1
+PASS: gdb.trace/ax.exp: maint agent gdb_long_test == gdb_short_test
+PASS: gdb.trace/ax.exp: maint agent gdb_long_test != gdb_short_test
+PASS: gdb.trace/ax.exp: maint agent gdb_long_test < gdb_short_test
+PASS: gdb.trace/ax.exp: maint agent gdb_long_test <= gdb_short_test
+PASS: gdb.trace/ax.exp: maint agent gdb_long_test > gdb_short_test
+PASS: gdb.trace/ax.exp: maint agent gdb_long_test >= gdb_short_test
+PASS: gdb.trace/ax.exp: maint agent &gdb_long_test == &gdb_short_test
+PASS: gdb.trace/ax.exp: maint agent &gdb_long_test < &gdb_short_test
+PASS: gdb.trace/ax.exp: maint agent-eval 12
+PASS: gdb.trace/ax.exp: maint agent-eval gdb_char_test
+PASS: gdb.trace/ax.exp: maint agent-eval gdb_arr_test[12]
+PASS: gdb.trace/ax.exp: maint agent-eval gdb_arr_test[gdb_short_test]
+PASS: gdb.trace/ax.exp: maint agent-eval gdb_struct1_test
+PASS: gdb.trace/ax.exp: maint agent-eval gdb_struct1_test.s
+PASS: gdb.trace/ax.exp: maint agent-eval gdb_struct1_test.arr[gdb_struct1_test.c]
+PASS: gdb.trace/ax.exp: maint agent-eval gdb_structp_test
+PASS: gdb.trace/ax.exp: maint agent-eval gdb_structp_test->l
+PASS: gdb.trace/ax.exp: maint agent-eval gdb_structp_test->bfield
+PASS: gdb.trace/ax.exp: maint agent-eval gdb_long_test + gdb_short_test
+PASS: gdb.trace/ax.exp: maint agent-eval gdb_long_test - gdb_short_test
+PASS: gdb.trace/ax.exp: maint agent-eval gdb_long_test * gdb_short_test
+PASS: gdb.trace/ax.exp: maint agent-eval gdb_long_test / gdb_short_test
+PASS: gdb.trace/ax.exp: maint agent-eval gdb_structp_test + 1
+PASS: gdb.trace/ax.exp: maint agent-eval gdb_long_test == gdb_short_test
+PASS: gdb.trace/ax.exp: maint agent-eval gdb_long_test != gdb_short_test
+PASS: gdb.trace/ax.exp: maint agent-eval gdb_long_test < gdb_short_test
+PASS: gdb.trace/ax.exp: maint agent-eval gdb_long_test <= gdb_short_test
+PASS: gdb.trace/ax.exp: maint agent-eval gdb_long_test > gdb_short_test
+PASS: gdb.trace/ax.exp: maint agent-eval gdb_long_test >= gdb_short_test
+PASS: gdb.trace/ax.exp: maint agent-eval &gdb_long_test == &gdb_short_test
+PASS: gdb.trace/ax.exp: maint agent-eval &gdb_long_test < &gdb_short_test
+Running ./gdb.trace/backtrace.exp ...
+UNSUPPORTED: gdb.trace/backtrace.exp: Current target does not support trace
+Running ./gdb.trace/change-loc.exp ...
+UNSUPPORTED: gdb.trace/change-loc.exp: Current target does not support trace
+Running ./gdb.trace/circ.exp ...
+PASS: gdb.trace/circ.exp: set circular-trace-buffer on
+PASS: gdb.trace/circ.exp: show circular-trace-buffer (on)
+PASS: gdb.trace/circ.exp: set circular-trace-buffer off
+PASS: gdb.trace/circ.exp: show circular-trace-buffer (off)
+UNSUPPORTED: gdb.trace/circ.exp: Current target does not support trace
+Running ./gdb.trace/collection.exp ...
+UNSUPPORTED: gdb.trace/collection.exp: Current target does not support trace
+Running ./gdb.trace/deltrace.exp ...
+PASS: gdb.trace/deltrace.exp: set tracepoint 1
+PASS: gdb.trace/deltrace.exp: set tracepoint 2
+PASS: gdb.trace/deltrace.exp: set tracepoint 3
+PASS: gdb.trace/deltrace.exp: 3.1a: set three tracepoints
+PASS: gdb.trace/deltrace.exp: 3.1b: delete all tracepoints
+PASS: gdb.trace/deltrace.exp: 3.2a: set three tracepoints
+PASS: gdb.trace/deltrace.exp: 3.2b: delete first tracepoint
+PASS: gdb.trace/deltrace.exp: 3.2c: verify delete first tracepoint
+PASS: gdb.trace/deltrace.exp: 3.2d: delete second tracepoint
+PASS: gdb.trace/deltrace.exp: 3.2e: verify delete second tracepoint
+PASS: gdb.trace/deltrace.exp: 3.2f: delete third tracepoint
+PASS: gdb.trace/deltrace.exp: 3.2g: verify delete third tracepoint
+PASS: gdb.trace/deltrace.exp: 3.3a: set three tracepoints
+PASS: gdb.trace/deltrace.exp: 3.3b: delete three tracepoints
+PASS: gdb.trace/deltrace.exp: 3.3c: verify delete three tracepoints
+PASS: gdb.trace/deltrace.exp: 3.4: delete invalid tracepoint number
+PASS: gdb.trace/deltrace.exp: 3.5: delete tracepoint number zero
+PASS: gdb.trace/deltrace.exp: 3.6: help delete tracepoints
+Running ./gdb.trace/disconnected-tracing.exp ...
+UNSUPPORTED: gdb.trace/disconnected-tracing.exp: target does not support trace
+Running ./gdb.trace/ftrace.exp ...
+UNSUPPORTED: gdb.trace/ftrace.exp: target does not support trace
+Running ./gdb.trace/infotrace.exp ...
+PASS: gdb.trace/infotrace.exp: 2.1: info tracepoints (all)
+PASS: gdb.trace/infotrace.exp: 2.2a: info tracepoint 1 (gdb_c_test)
+PASS: gdb.trace/infotrace.exp: 2.2b: info tracepoint 2 (gdb_asm_test)
+PASS: gdb.trace/infotrace.exp: 2.3: info tracepoint (invalid tracepoint number)
+PASS: gdb.trace/infotrace.exp: 2.4: info trace rejects multiple tracepoint numbers
+PASS: gdb.trace/infotrace.exp: 2.5: help info tracepoints
+PASS: gdb.trace/infotrace.exp: collect on tracepoint 1
+UNSUPPORTED: gdb.trace/infotrace.exp: Current target does not support trace
+Running ./gdb.trace/mi-traceframe-changed.exp ...
+ERROR: remote_download to host of to basic.tf: cp: missing destination file operand after 'basic.tf'
+Try 'cp --help' for more information.
+UNRESOLVED: gdb.trace/mi-traceframe-changed.exp: tfile: select trace file
+FAIL: gdb.trace/mi-traceframe-changed.exp: tfile: tfind 0
+FAIL: gdb.trace/mi-traceframe-changed.exp: tfile: tfind 0 again
+FAIL: gdb.trace/mi-traceframe-changed.exp: tfile: tfind end
+FAIL: gdb.trace/mi-traceframe-changed.exp: tfile: -trace-find frame-number 0
+UNSUPPORTED: gdb.trace/mi-traceframe-changed.exp: Current target does not support trace
+Running ./gdb.trace/mi-tracepoint-changed.exp ...
+UNSUPPORTED: gdb.trace/mi-tracepoint-changed.exp: Current target does not support trace
+Running ./gdb.trace/mi-tsv-changed.exp ...
+PASS: gdb.trace/mi-tsv-changed.exp: create delete modify: tvariable $tvar1
+PASS: gdb.trace/mi-tsv-changed.exp: create delete modify: tvariable $tvar1 modified
+PASS: gdb.trace/mi-tsv-changed.exp: create delete modify: tvariable $tvar1 modified without notification
+PASS: gdb.trace/mi-tsv-changed.exp: create delete modify: tvariable $tvar2
+PASS: gdb.trace/mi-tsv-changed.exp: create delete modify: delete tvariable $tvar2
+PASS: gdb.trace/mi-tsv-changed.exp: create delete modify: delete all tvariables
+UNSUPPORTED: gdb.trace/mi-tsv-changed.exp: create delete modify: Current target does not support trace
+UNSUPPORTED: gdb.trace/mi-tsv-changed.exp: Current target does not support trace
+Running ./gdb.trace/packetlen.exp ...
+UNSUPPORTED: gdb.trace/packetlen.exp: Current target does not support trace
+Running ./gdb.trace/passc-dyn.exp ...
+UNSUPPORTED: gdb.trace/passc-dyn.exp: Current target does not support trace
+Running ./gdb.trace/passcount.exp ...
+PASS: gdb.trace/passcount.exp: 4.1a: set three tracepoints, passcounts all zero
+PASS: gdb.trace/passcount.exp: 4.1b: set 1st tracepoint's passcount to two
+PASS: gdb.trace/passcount.exp: 4.1c: verify 1st tracepoint's passcount set to two
+PASS: gdb.trace/passcount.exp: 4.1d: set 2nd tracepoint's passcount to four
+PASS: gdb.trace/passcount.exp: 4.1c: verify 2nd tracepoint's passcount set to four
+PASS: gdb.trace/passcount.exp: 4.2b: set last (default) tp's passcount to six
+PASS: gdb.trace/passcount.exp: 4.2b: verify last (default) tp's passcount set to six
+PASS: gdb.trace/passcount.exp: 4.4a: reset last (default) tp's passcount to seven
+PASS: gdb.trace/passcount.exp: 4.4a: verify reset last (default) tp's passcount to seven
+PASS: gdb.trace/passcount.exp: 4.4b: reset second tracepoint's passcount to five
+PASS: gdb.trace/passcount.exp: 4.4c: verify reset second tracepoint's passcount to five
+PASS: gdb.trace/passcount.exp: 4.20a: set all three passcounts to three
+PASS: gdb.trace/passcount.exp: 4.20a: set all three passcounts to three
+PASS: gdb.trace/passcount.exp: 4.20a: reset all three passcounts to four
+PASS: gdb.trace/passcount.exp: 4.20b: reset all three passcounts to four
+PASS: gdb.trace/passcount.exp: 4.6: set passcount to zero
+PASS: gdb.trace/passcount.exp: 4.6: set passcount to zero
+PASS: gdb.trace/passcount.exp: 4.7: set passcount to large number (32767)
+PASS: gdb.trace/passcount.exp: 4.7: set passcount to large number (32767)
+PASS: gdb.trace/passcount.exp: 4.8: invalid tracepoint number in passcount
+PASS: gdb.trace/passcount.exp: 4.9: help passcount
+Running ./gdb.trace/pending.exp ...
+UNSUPPORTED: gdb.trace/pending.exp: Current target does not support trace
+Running ./gdb.trace/qtro.exp ...
+PASS: gdb.trace/qtro.exp: probe for target remote
+UNSUPPORTED: gdb.trace/qtro.exp: Current target does not support trace
+Running ./gdb.trace/report.exp ...
+UNSUPPORTED: gdb.trace/report.exp: Current target does not support trace
+Running ./gdb.trace/save-trace.exp ...
+PASS: gdb.trace/save-trace.exp: 10.x: set passcount for tracepoint 1
+PASS: gdb.trace/save-trace.exp: 10.x: set condition for tracepoint 1
+PASS: gdb.trace/save-trace.exp: 10.x: set actions for tracepoint 1
+PASS: gdb.trace/save-trace.exp: 10.x: set passcount for tracepoint 2
+PASS: gdb.trace/save-trace.exp: 10.x: set condition for tracepoint 2
+PASS: gdb.trace/save-trace.exp: 10.x: set actions for tracepoint 2
+PASS: gdb.trace/save-trace.exp: 10.x: set passcount for tracepoint 3
+PASS: gdb.trace/save-trace.exp: 10.x: set condition for tracepoint 3
+PASS: gdb.trace/save-trace.exp: 10.x: set actions for tracepoint 3
+PASS: gdb.trace/save-trace.exp: 10.x: set passcount for tracepoint 4
+PASS: gdb.trace/save-trace.exp: 10.x: set condition for tracepoint 4
+PASS: gdb.trace/save-trace.exp: 10.x: set actions for tracepoint 4
+PASS: gdb.trace/save-trace.exp: 10.x: set passcount for tracepoint 5
+PASS: gdb.trace/save-trace.exp: 10.x: set condition for tracepoint 5
+PASS: gdb.trace/save-trace.exp: 10.x: set actions for tracepoint 5
+PASS: gdb.trace/save-trace.exp: 10.x: set passcount for tracepoint 6
+PASS: gdb.trace/save-trace.exp: 10.x: set condition for tracepoint 6
+PASS: gdb.trace/save-trace.exp: 10.x: set actions for tracepoint 6
+PASS: gdb.trace/save-trace.exp: 10: set default-collect
+PASS: gdb.trace/save-trace.exp: 10.x: verify trace setup
+PASS: gdb.trace/save-trace.exp: 10: show default-collect
+PASS: gdb.trace/save-trace.exp: 10.1: save tracepoint definitions
+PASS: gdb.trace/save-trace.exp: 10.2: clear default-collect
+PASS: gdb.trace/save-trace.exp: 10.2: delete tracepoints
+PASS: gdb.trace/save-trace.exp: 10.2: read back saved tracepoints
+PASS: gdb.trace/save-trace.exp: 10.2: verify recovered tracepoints
+PASS: gdb.trace/save-trace.exp: 10: show default-collect
+PASS: gdb.trace/save-trace.exp: 10.3: save tracepoint definitions, full path
+PASS: gdb.trace/save-trace.exp: 10.3: clear default-collect
+PASS: gdb.trace/save-trace.exp: 10.3: delete tracepoints
+PASS: gdb.trace/save-trace.exp: 10.4: read saved tracepoints, full path
+PASS: gdb.trace/save-trace.exp: 10.3: verify recovered tracepoints, full path
+PASS: gdb.trace/save-trace.exp: 10: show default-collect
+PASS: gdb.trace/save-trace.exp: 10.7: help save-tracepoints
+Running ./gdb.trace/stap-trace.exp ...
+Running ./gdb.trace/status-stop.exp ...
+UNSUPPORTED: gdb.trace/status-stop.exp: target does not support trace
+Running ./gdb.trace/strace.exp ...
+UNTESTED: gdb.trace/strace.exp: UST library or headers are not installed
+Running ./gdb.trace/tfile.exp ...
+ERROR: remote_download to host of to basic.tf: cp: missing destination file operand after 'basic.tf'
+Try 'cp --help' for more information.
+ERROR: remote_download to host of to error.tf: cp: missing destination file operand after 'error.tf'
+Try 'cp --help' for more information.
+UNRESOLVED: gdb.trace/tfile.exp: target tfile
+FAIL: gdb.trace/tfile.exp: info tracepoints on trace file
+FAIL: gdb.trace/tfile.exp: tfind 0 on trace file
+PASS: gdb.trace/tfile.exp: print testglob on trace file
+PASS: gdb.trace/tfile.exp: print testglob2 on trace file
+PASS: gdb.trace/tfile.exp: print constglob on trace file
+PASS: gdb.trace/tfile.exp: tfind does not find a second frame in trace file
+FAIL: gdb.trace/tfile.exp: tstatus on trace file
+PASS: gdb.trace/tfile.exp: leave tfind mode
+PASS: gdb.trace/tfile.exp: no stack if no traceframe selected
+PASS: gdb.trace/tfile.exp: no registers if no traceframe selected
+FAIL: gdb.trace/tfile.exp: target tfile
+FAIL: gdb.trace/tfile.exp: tstatus on error trace file
+FAIL: gdb.trace/tfile.exp: interpreter-exec mi "-target-select tfile basic.tf"
+FAIL: gdb.trace/tfile.exp: -trace-status
+Running ./gdb.trace/tfind.exp ...
+PASS: gdb.trace/tfind.exp: 6.2: help tstart
+PASS: gdb.trace/tfind.exp: 7.2: help tstop
+PASS: gdb.trace/tfind.exp: 8.38: help tfind
+PASS: gdb.trace/tfind.exp: 8.38: help tfind PC
+PASS: gdb.trace/tfind.exp: 8.38: help tfind end
+PASS: gdb.trace/tfind.exp: 8.38: help tfind none
+PASS: gdb.trace/tfind.exp: 8.38: help tfind line
+PASS: gdb.trace/tfind.exp: 8.38: help tfind start
+PASS: gdb.trace/tfind.exp: 8.38: help tfind range
+PASS: gdb.trace/tfind.exp: 8.38: help tfind tracepoint
+UNSUPPORTED: gdb.trace/tfind.exp: Current target does not support trace
+Running ./gdb.trace/trace-break.exp ...
+UNSUPPORTED: gdb.trace/trace-break.exp: target does not support trace
+Running ./gdb.trace/trace-buffer-size.exp ...
+UNSUPPORTED: gdb.trace/trace-buffer-size.exp: target does not support trace
+Running ./gdb.trace/tracecmd.exp ...
+PASS: gdb.trace/tracecmd.exp: 1.0: help tracepoints
+PASS: gdb.trace/tracecmd.exp: 1.1a: set tracepoint at sourceline
+PASS: gdb.trace/tracecmd.exp: 1.1b: trace sourcefile:line
+PASS: gdb.trace/tracecmd.exp: set breakpoint pending off
+PASS: gdb.trace/tracecmd.exp: 1.2a: trace invalid line in sourcefile
+PASS: gdb.trace/tracecmd.exp: 1.2b: reject invalid line in srcfile
+PASS: gdb.trace/tracecmd.exp: 1.3a: trace invalid source file
+PASS: gdb.trace/tracecmd.exp: 1.3b: reject invalid srcfile
+PASS: gdb.trace/tracecmd.exp: 1.4a: trace function by name
+PASS: gdb.trace/tracecmd.exp: 1.4b: trace function by name
+PASS: gdb.trace/tracecmd.exp: 1.5a: trace invalid function
+PASS: gdb.trace/tracecmd.exp: 1.5b: reject invalid srcfile
+PASS: gdb.trace/tracecmd.exp: 1.6a: trace at specific address
+PASS: gdb.trace/tracecmd.exp: 1.6b: verify trace at specific address
+PASS: gdb.trace/tracecmd.exp: 1.7a: trace at function label (before prologue)
+PASS: gdb.trace/tracecmd.exp: 1.7b: verify trace at specific address
+PASS: gdb.trace/tracecmd.exp: 1.9: trace <no arguments>
+PASS: gdb.trace/tracecmd.exp: 1.11a: conditional tracepoint
+PASS: gdb.trace/tracecmd.exp: 1.11b: verify conditional tracepoint
+PASS: gdb.trace/tracecmd.exp: 1.14: help trace
+PASS: gdb.trace/tracecmd.exp: Set a fast tracepoint
+Running ./gdb.trace/trace-mt.exp ...
+PASS: gdb.trace/trace-mt.exp: successfully compiled posix threads test case
+UNSUPPORTED: gdb.trace/trace-mt.exp: target does not support trace
+Running ./gdb.trace/tspeed.exp ...
+gdb compile failed, armv7a-cros-linux-gnueabi-gcc.real: error: /var/tmp/portage/cross-armv7a-cros-linux-gnueabi/gdb-7.6.1/work/gdb-7.6.1/gdb/testsuite/../gdbserver/libinproctrace.so: No such file or directory
+UNTESTED: gdb.trace/tspeed.exp: tspeed.exp
+Running ./gdb.trace/tstatus.exp ...
+UNSUPPORTED: gdb.trace/tstatus.exp: target does not support trace
+Running ./gdb.trace/tsv.exp ...
+PASS: gdb.trace/tsv.exp: Create a trace state variable
+PASS: gdb.trace/tsv.exp: Create a trace state variable with initial value
+PASS: gdb.trace/tsv.exp: Change initial value of a trace state variable
+PASS: gdb.trace/tsv.exp: Create a trace state variable with expression
+PASS: gdb.trace/tsv.exp: Init trace state variable to a 64-bit value
+PASS: gdb.trace/tsv.exp: tvariable syntax error, not empty variable name
+PASS: gdb.trace/tsv.exp: tvariable syntax error, bad name
+PASS: gdb.trace/tsv.exp: tvariable syntax error, bad name 2
+PASS: gdb.trace/tsv.exp: tvariable syntax error, bad name 3
+PASS: gdb.trace/tsv.exp: tvariable syntax error, not an assignment
+PASS: gdb.trace/tsv.exp: tvariable creation fails with invalid expression
+PASS: gdb.trace/tsv.exp: List tvariables
+PASS: gdb.trace/tsv.exp: Print a trace state variable before run
+PASS: gdb.trace/tsv.exp: delete trace state variable
+PASS: gdb.trace/tsv.exp: List tvariables after deletion
+PASS: gdb.trace/tsv.exp: Delete all trace state variables
+PASS: gdb.trace/tsv.exp: List tvariables after deleting all
+UNSUPPORTED: gdb.trace/tsv.exp: Current target does not support trace
+Running ./gdb.trace/unavailable.exp ...
+UNSUPPORTED: gdb.trace/unavailable.exp: Current target does not support trace
+Running ./gdb.trace/while-dyn.exp ...
+UNSUPPORTED: gdb.trace/while-dyn.exp: Current target does not support trace
+Running ./gdb.trace/while-stepping.exp ...
+PASS: gdb.trace/while-stepping.exp: 5.12: set a tracepoint, stepcount is zero
+PASS: gdb.trace/while-stepping.exp: 5.12: set stepcount to 12
+PASS: gdb.trace/while-stepping.exp: 5.12: info trace shows "while-stepping"
+PASS: gdb.trace/while-stepping.exp: 5.14: while-stepping null stepcount
+PASS: gdb.trace/while-stepping.exp: 5.15: while-stepping rejects zero stepcount
+PASS: gdb.trace/while-stepping.exp: 5.16: step without collecting anything
+PASS: gdb.trace/while-stepping.exp: 5.16: confirm actions, step without collecting anything
+Running ./gdb.xml/tdesc-arch.exp ...
+PASS: gdb.xml/tdesc-arch.exp: read valid architectures
+PASS: gdb.xml/tdesc-arch.exp: read default architecture
+PASS: gdb.xml/tdesc-arch.exp: set tdesc filename tdesc-arch.xml (first architecture)
+PASS: gdb.xml/tdesc-arch.exp: show architecture (first architecture)
+PASS: gdb.xml/tdesc-arch.exp: set tdesc filename tdesc-arch.xml (second architecture)
+PASS: gdb.xml/tdesc-arch.exp: show architecture (second architecture)
+PASS: gdb.xml/tdesc-arch.exp: set tdesc filename tdesc-arch.xml (invalid architecture)
+PASS: gdb.xml/tdesc-arch.exp: show architecture (invalid architecture)
+Running ./gdb.xml/tdesc-errors.exp ...
+PASS: gdb.xml/tdesc-errors.exp: set tdesc filename gdb.xml/tdesc-bogus.xml
+PASS: gdb.xml/tdesc-errors.exp: set tdesc filename gdb.xml/tdesc-unknown.xml
+Running ./gdb.xml/tdesc-regs.exp ...
+PASS: gdb.xml/tdesc-regs.exp: set tdesc file single-reg.xml
+PASS: gdb.xml/tdesc-regs.exp: set tdesc filename regs.xml - from extra-regs.xml
+PASS: gdb.xml/tdesc-regs.exp: ptype $extrareg
+PASS: gdb.xml/tdesc-regs.exp: ptype $uintreg
+PASS: gdb.xml/tdesc-regs.exp: ptype $vecreg
+PASS: gdb.xml/tdesc-regs.exp: ptype $unionreg
+PASS: gdb.xml/tdesc-regs.exp: ptype $unionreg.v4
+PASS: gdb.xml/tdesc-regs.exp: ptype $structreg
+PASS: gdb.xml/tdesc-regs.exp: ptype $structreg.v4
+PASS: gdb.xml/tdesc-regs.exp: ptype $bitfields
+PASS: gdb.xml/tdesc-regs.exp: set tdesc filename regs.xml - from core-only.xml
+PASS: gdb.xml/tdesc-regs.exp: ptype $extrareg
+Running ./gdb.xml/tdesc-xinclude.exp ...
+PASS: gdb.xml/tdesc-xinclude.exp: set tdesc filename gdb.xml/includes.xml
+PASS: gdb.xml/tdesc-xinclude.exp: set tdesc filename gdb.xml/bad-include.xml
+PASS: gdb.xml/tdesc-xinclude.exp: set tdesc filename gdb.xml/loop.xml
+
+ === gdb Summary ===
+
+# of expected passes 17017
+# of unexpected failures 610
+# of unexpected successes 1
+# of expected failures 32
+# of known failures 41
+# of untested testcases 56
+# of unresolved testcases 4
+# of unsupported tests 131
+/var/tmp/portage/cross-armv7a-cros-linux-gnueabi/gdb-7.6.1/work/gdb-7.6.1/gdb/testsuite/../../gdb/gdb version 7.6.1 -nw -nx -data-directory /var/tmp/portage/cross-armv7a-cros-linux-gnueabi/gdb-7.6.1/work/gdb-7.6.1/gdb/testsuite/../data-directory
+
diff --git a/dejagnu/gdb_baseline/i686-pc-linux-gnu b/dejagnu/gdb_baseline/i686-pc-linux-gnu
new file mode 100644
index 00000000..e3e1ee7c
--- /dev/null
+++ b/dejagnu/gdb_baseline/i686-pc-linux-gnu
@@ -0,0 +1,19167 @@
+Test Run By yunlian on Fri Dec 27 14:14:24 2013
+Target is i686-pc-linux-gnu
+
+ === gdb tests ===
+
+Schedule of variations:
+ x86-alex
+
+Running target x86-alex
+Running ./gdb.ada/aliased_array.exp ...
+UNSUPPORTED: gdb.ada/aliased_array.exp: compilation foo.adb
+Running ./gdb.ada/array_bounds.exp ...
+UNSUPPORTED: gdb.ada/array_bounds.exp: compilation bar.adb
+Running ./gdb.ada/arrayidx.exp ...
+UNSUPPORTED: gdb.ada/arrayidx.exp: compilation p.adb
+Running ./gdb.ada/arrayparam.exp ...
+UNSUPPORTED: gdb.ada/arrayparam.exp: compilation foo.adb
+Running ./gdb.ada/arrayptr.exp ...
+UNSUPPORTED: gdb.ada/arrayptr.exp: compilation foo.adb
+Running ./gdb.ada/array_return.exp ...
+UNSUPPORTED: gdb.ada/array_return.exp: compilation p.adb
+Running ./gdb.ada/array_subscript_addr.exp ...
+UNSUPPORTED: gdb.ada/array_subscript_addr.exp: compilation p.adb
+Running ./gdb.ada/assign_1.exp ...
+PASS: gdb.ada/assign_1.exp: Changing the language to ada
+PASS: gdb.ada/assign_1.exp: set convenience variable $xxx to 1
+Running ./gdb.ada/atomic_enum.exp ...
+UNSUPPORTED: gdb.ada/atomic_enum.exp: compilation foo.adb
+Running ./gdb.ada/bad-task-bp-keyword.exp ...
+UNSUPPORTED: gdb.ada/bad-task-bp-keyword.exp: compilation foo.adb
+Running ./gdb.ada/boolean_expr.exp ...
+PASS: gdb.ada/boolean_expr.exp: Changing the language to ada
+PASS: gdb.ada/boolean_expr.exp: print 1 = 2
+PASS: gdb.ada/boolean_expr.exp: print 3 = 3
+Running ./gdb.ada/bp_enum_homonym.exp ...
+UNSUPPORTED: gdb.ada/bp_enum_homonym.exp: compilation p.adb
+Running ./gdb.ada/bp_on_var.exp ...
+UNSUPPORTED: gdb.ada/bp_on_var.exp: compilation foo.adb
+Running ./gdb.ada/bp_range_type.exp ...
+UNSUPPORTED: gdb.ada/bp_range_type.exp: compilation foo.adb
+Running ./gdb.ada/bp_reset.exp ...
+UNSUPPORTED: gdb.ada/bp_reset.exp: compilation foo.adb
+Running ./gdb.ada/call_pn.exp ...
+UNSUPPORTED: gdb.ada/call_pn.exp: compilation foo.adb
+Running ./gdb.ada/catch_ex.exp ...
+UNSUPPORTED: gdb.ada/catch_ex.exp: compilation foo.adb
+Running ./gdb.ada/char_enum.exp ...
+UNSUPPORTED: gdb.ada/char_enum.exp: compilation foo.adb
+Running ./gdb.ada/char_param.exp ...
+UNSUPPORTED: gdb.ada/char_param.exp: compilation foo.adb
+Running ./gdb.ada/complete.exp ...
+UNSUPPORTED: gdb.ada/complete.exp: compilation foo.adb
+Running ./gdb.ada/cond_lang.exp ...
+UNSUPPORTED: gdb.ada/cond_lang.exp: compilation a.adb
+Running ./gdb.ada/dyn_loc.exp ...
+UNSUPPORTED: gdb.ada/dyn_loc.exp: compilation p.adb
+Running ./gdb.ada/enum_idx_packed.exp ...
+UNSUPPORTED: gdb.ada/enum_idx_packed.exp: compilation foo.adb
+Running ./gdb.ada/exec_changed.exp ...
+UNTESTED: gdb.ada/exec_changed.exp: exec_changed.exp
+Running ./gdb.ada/expr_delims.exp ...
+UNSUPPORTED: gdb.ada/expr_delims.exp: compilation foo.adb
+Running ./gdb.ada/exprs.exp ...
+UNSUPPORTED: gdb.ada/exprs.exp: compilation p.adb
+Running ./gdb.ada/fixed_cmp.exp ...
+UNSUPPORTED: gdb.ada/fixed_cmp.exp: compilation fixed.adb
+Running ./gdb.ada/fixed_points.exp ...
+UNSUPPORTED: gdb.ada/fixed_points.exp: compilation fixed_points.adb
+Running ./gdb.ada/formatted_ref.exp ...
+UNSUPPORTED: gdb.ada/formatted_ref.exp: compilation formatted_ref.adb
+UNTESTED: gdb.ada/formatted_ref.exp: formatted-ref.exp
+Running ./gdb.ada/frame_args.exp ...
+UNSUPPORTED: gdb.ada/frame_args.exp: compilation foo.adb
+Running ./gdb.ada/fullname_bp.exp ...
+UNSUPPORTED: gdb.ada/fullname_bp.exp: compilation foo.adb
+Running ./gdb.ada/fun_addr.exp ...
+UNSUPPORTED: gdb.ada/fun_addr.exp: compilation foo.adb
+Running ./gdb.ada/funcall_param.exp ...
+UNSUPPORTED: gdb.ada/funcall_param.exp: compilation foo.adb
+Running ./gdb.ada/fun_in_declare.exp ...
+UNSUPPORTED: gdb.ada/fun_in_declare.exp: compilation foo.adb
+Running ./gdb.ada/homonym.exp ...
+UNSUPPORTED: gdb.ada/homonym.exp: compilation homonym_main.adb
+Running ./gdb.ada/info_locals_renaming.exp ...
+UNSUPPORTED: gdb.ada/info_locals_renaming.exp: compilation foo.adb
+Running ./gdb.ada/info_types.exp ...
+PASS: gdb.ada/info_types.exp: set lang ada
+PASS: gdb.ada/info_types.exp: info types new_integer_type
+Running ./gdb.ada/int_deref.exp ...
+UNSUPPORTED: gdb.ada/int_deref.exp: compilation foo.adb
+Running ./gdb.ada/interface.exp ...
+UNSUPPORTED: gdb.ada/interface.exp: compilation foo.adb
+Running ./gdb.ada/iwide.exp ...
+UNSUPPORTED: gdb.ada/iwide.exp: compilation p.adb
+Running ./gdb.ada/lang_switch.exp ...
+UNSUPPORTED: gdb.ada/lang_switch.exp: compilation lang_switch.adb
+Running ./gdb.ada/mi_catch_ex.exp ...
+UNSUPPORTED: gdb.ada/mi_catch_ex.exp: compilation foo.adb
+Running ./gdb.ada/mi_task_arg.exp ...
+UNSUPPORTED: gdb.ada/mi_task_arg.exp: compilation task_switch.adb
+Running ./gdb.ada/mi_task_info.exp ...
+UNSUPPORTED: gdb.ada/mi_task_info.exp: compilation task_switch.adb
+Running ./gdb.ada/mod_from_name.exp ...
+UNSUPPORTED: gdb.ada/mod_from_name.exp: compilation foo.adb
+Running ./gdb.ada/nested.exp ...
+UNSUPPORTED: gdb.ada/nested.exp: compilation hello.adb
+Running ./gdb.ada/null_array.exp ...
+UNSUPPORTED: gdb.ada/null_array.exp: compilation foo.adb
+Running ./gdb.ada/null_record.exp ...
+UNSUPPORTED: gdb.ada/null_record.exp: compilation null_record.adb
+Running ./gdb.ada/operator_bp.exp ...
+UNSUPPORTED: gdb.ada/operator_bp.exp: compilation ops_test.adb
+Running ./gdb.ada/optim_drec.exp ...
+UNSUPPORTED: gdb.ada/optim_drec.exp: compilation foo.adb
+Running ./gdb.ada/packed_array.exp ...
+UNSUPPORTED: gdb.ada/packed_array.exp: compilation pa.adb
+Running ./gdb.ada/packed_tagged.exp ...
+UNSUPPORTED: gdb.ada/packed_tagged.exp: compilation comp_bug.adb
+Running ./gdb.ada/print_chars.exp ...
+UNSUPPORTED: gdb.ada/print_chars.exp: compilation foo.adb
+Running ./gdb.ada/print_pc.exp ...
+UNSUPPORTED: gdb.ada/print_pc.exp: compilation dummy.adb
+Running ./gdb.ada/ptr_typedef.exp ...
+UNSUPPORTED: gdb.ada/ptr_typedef.exp: compilation foo.adb
+Running ./gdb.ada/ptype_arith_binop.exp ...
+PASS: gdb.ada/ptype_arith_binop.exp: set lang ada
+PASS: gdb.ada/ptype_arith_binop.exp: ptype 3 * 2.0
+PASS: gdb.ada/ptype_arith_binop.exp: ptype 3 / 2.0
+Running ./gdb.ada/ptype_field.exp ...
+UNSUPPORTED: gdb.ada/ptype_field.exp: compilation foo.adb
+Running ./gdb.ada/ptype_tagged_param.exp ...
+UNSUPPORTED: gdb.ada/ptype_tagged_param.exp: compilation foo.adb
+Running ./gdb.ada/rdv_wait.exp ...
+UNSUPPORTED: gdb.ada/rdv_wait.exp: compilation foo.adb
+Running ./gdb.ada/rec_return.exp ...
+UNSUPPORTED: gdb.ada/rec_return.exp: compilation foo.adb
+Running ./gdb.ada/ref_param.exp ...
+UNSUPPORTED: gdb.ada/ref_param.exp: compilation foo.adb
+Running ./gdb.ada/ref_tick_size.exp ...
+UNSUPPORTED: gdb.ada/ref_tick_size.exp: compilation p.adb
+Running ./gdb.ada/same_enum.exp ...
+UNSUPPORTED: gdb.ada/same_enum.exp: compilation a.adb
+Running ./gdb.ada/set_pckd_arr_elt.exp ...
+UNSUPPORTED: gdb.ada/set_pckd_arr_elt.exp: compilation foo.adb
+Running ./gdb.ada/set_wstr.exp ...
+UNSUPPORTED: gdb.ada/set_wstr.exp: compilation a.adb
+Running ./gdb.ada/small_reg_param.exp ...
+UNSUPPORTED: gdb.ada/small_reg_param.exp: compilation foo.adb
+Running ./gdb.ada/start.exp ...
+UNTESTED: gdb.ada/start.exp: start.exp
+Running ./gdb.ada/str_ref_cmp.exp ...
+UNSUPPORTED: gdb.ada/str_ref_cmp.exp: compilation foo.adb
+Running ./gdb.ada/sym_print_name.exp ...
+UNSUPPORTED: gdb.ada/sym_print_name.exp: compilation foo.adb
+Running ./gdb.ada/taft_type.exp ...
+UNSUPPORTED: gdb.ada/taft_type.exp: compilation p.adb
+Running ./gdb.ada/tagged.exp ...
+UNSUPPORTED: gdb.ada/tagged.exp: compilation foo.adb
+Running ./gdb.ada/tagged_not_init.exp ...
+UNSUPPORTED: gdb.ada/tagged_not_init.exp: compilation foo.adb
+Running ./gdb.ada/task_bp.exp ...
+UNSUPPORTED: gdb.ada/task_bp.exp: compilation foo.adb
+Running ./gdb.ada/tasks.exp ...
+UNSUPPORTED: gdb.ada/tasks.exp: compilation foo.adb
+Running ./gdb.ada/tick_last_segv.exp ...
+UNSUPPORTED: gdb.ada/tick_last_segv.exp: compilation foo.adb
+Running ./gdb.ada/type_coercion.exp ...
+UNSUPPORTED: gdb.ada/type_coercion.exp: compilation assign.adb
+Running ./gdb.ada/unc_arr_ptr_in_var_rec.exp ...
+UNSUPPORTED: gdb.ada/unc_arr_ptr_in_var_rec.exp: compilation foo.adb
+Running ./gdb.ada/uninitialized_vars.exp ...
+UNSUPPORTED: gdb.ada/uninitialized_vars.exp: compilation parse.adb
+Running ./gdb.ada/variant_record_packed_array.exp ...
+UNSUPPORTED: gdb.ada/variant_record_packed_array.exp: compilation foo.adb
+Running ./gdb.ada/watch_arg.exp ...
+UNSUPPORTED: gdb.ada/watch_arg.exp: compilation watch.adb
+Running ./gdb.ada/whatis_array_val.exp ...
+UNSUPPORTED: gdb.ada/whatis_array_val.exp: compilation foo.adb
+Running ./gdb.ada/widewide.exp ...
+UNSUPPORTED: gdb.ada/widewide.exp: compilation foo.adb
+Running ./gdb.arch/alpha-step.exp ...
+Running ./gdb.arch/altivec-abi.exp ...
+Running ./gdb.arch/altivec-regs.exp ...
+Running ./gdb.arch/amd64-byte.exp ...
+Running ./gdb.arch/amd64-disp-step.exp ...
+Running ./gdb.arch/amd64-dword.exp ...
+Running ./gdb.arch/amd64-entry-value.exp ...
+Running ./gdb.arch/amd64-entry-value-inline.exp ...
+Running ./gdb.arch/amd64-entry-value-param.exp ...
+Running ./gdb.arch/amd64-i386-address.exp ...
+Running ./gdb.arch/amd64-prologue-xmm.exp ...
+Running ./gdb.arch/amd64-tailcall-cxx.exp ...
+Running ./gdb.arch/amd64-tailcall-noret.exp ...
+Running ./gdb.arch/amd64-tailcall-ret.exp ...
+Running ./gdb.arch/amd64-word.exp ...
+Running ./gdb.arch/arm-bl-branch-dest.exp ...
+Running ./gdb.arch/arm-disp-step.exp ...
+Running ./gdb.arch/e500-abi.exp ...
+Running ./gdb.arch/e500-prologue.exp ...
+Running ./gdb.arch/e500-regs.exp ...
+Running ./gdb.arch/gdb1291.exp ...
+Running ./gdb.arch/gdb1431.exp ...
+Running ./gdb.arch/gdb1558.exp ...
+Running ./gdb.arch/i386-avx.exp ...
+Running ./gdb.arch/i386-bp_permanent.exp ...
+PASS: gdb.arch/i386-bp_permanent.exp: Stop at the 'standard' start breakpoint (fetching esp).
+PASS: gdb.arch/i386-bp_permanent.exp: Stop at permanent breakpoint.
+PASS: gdb.arch/i386-bp_permanent.exp: Single stepping past permanent breakpoint.
+PASS: gdb.arch/i386-bp_permanent.exp: ESP value does not match - step_permanent_breakpoint wrong.
+Running ./gdb.arch/i386-byte.exp ...
+gdb compile failed, ./gdb.arch/i386-pseudo.c: In function 'main':
+./gdb.arch/i386-pseudo.c:32:3: error: PIC register clobbered by 'ebx' in 'asm'
+ asm ("mov 0(%0), %%eax\n\t"
+ ^
+./gdb.arch/i386-pseudo.c:41:3: error: PIC register clobbered by 'ebx' in 'asm'
+ asm ("mov %%eax, 0(%0)\n\t"
+ ^
+UNTESTED: gdb.arch/i386-byte.exp: i386-byte
+Running ./gdb.arch/i386-cfi-notcurrent.exp ...
+PASS: gdb.arch/i386-cfi-notcurrent.exp: backtrace
+Running ./gdb.arch/i386-disp-step.exp ...
+PASS: gdb.arch/i386-disp-step.exp: set displaced-stepping on
+PASS: gdb.arch/i386-disp-step.exp: show displaced-stepping
+PASS: gdb.arch/i386-disp-step.exp: break test_call
+PASS: gdb.arch/i386-disp-step.exp: break test_call_end
+PASS: gdb.arch/i386-disp-step.exp: break test_ret
+PASS: gdb.arch/i386-disp-step.exp: break test_ret_end
+PASS: gdb.arch/i386-disp-step.exp: continue to test_call
+PASS: gdb.arch/i386-disp-step.exp: continue to test_call_end
+PASS: gdb.arch/i386-disp-step.exp: continue to test_ret
+PASS: gdb.arch/i386-disp-step.exp: continue to test_ret_end
+PASS: gdb.arch/i386-disp-step.exp: break test_prefixed_abs_jump
+PASS: gdb.arch/i386-disp-step.exp: break test_prefixed_abs_jump_end
+PASS: gdb.arch/i386-disp-step.exp: continue to test_prefixed_abs_jump
+PASS: gdb.arch/i386-disp-step.exp: continue to test_prefixed_abs_jump_end
+PASS: gdb.arch/i386-disp-step.exp: break test_syscall
+PASS: gdb.arch/i386-disp-step.exp: break test_syscall_end
+PASS: gdb.arch/i386-disp-step.exp: continue to test_syscall
+PASS: gdb.arch/i386-disp-step.exp: continue to test_syscall_end
+PASS: gdb.arch/i386-disp-step.exp: break test_prefixed_syscall
+PASS: gdb.arch/i386-disp-step.exp: break test_prefixed_syscall_end
+PASS: gdb.arch/i386-disp-step.exp: continue to test_prefixed_syscall
+PASS: gdb.arch/i386-disp-step.exp: continue to test_prefixed_syscall_end
+PASS: gdb.arch/i386-disp-step.exp: break test_int3
+PASS: gdb.arch/i386-disp-step.exp: break test_int3_end
+PASS: gdb.arch/i386-disp-step.exp: continue to test_int3
+PASS: gdb.arch/i386-disp-step.exp: continue to test_int3_end
+PASS: gdb.arch/i386-disp-step.exp: continue until exit at i386-disp-step
+Running ./gdb.arch/i386-dr3-watch.exp ...
+PASS: gdb.arch/i386-dr3-watch.exp: set breakpoint always-inserted on
+PASS: gdb.arch/i386-dr3-watch.exp: watch i1
+PASS: gdb.arch/i386-dr3-watch.exp: watch i2
+PASS: gdb.arch/i386-dr3-watch.exp: watch i3
+PASS: gdb.arch/i386-dr3-watch.exp: watch i4
+PASS: gdb.arch/i386-dr3-watch.exp: continue to i1 watchpoint
+PASS: gdb.arch/i386-dr3-watch.exp: continue to i2 watchpoint
+PASS: gdb.arch/i386-dr3-watch.exp: continue to i3 watchpoint
+PASS: gdb.arch/i386-dr3-watch.exp: continue to i4 watchpoint
+PASS: gdb.arch/i386-dr3-watch.exp: set watchpoint occuping one debug register
+PASS: gdb.arch/i386-dr3-watch.exp: watchpoint on gap1 does not fit debug registers
+PASS: gdb.arch/i386-dr3-watch.exp: delete all watchpoints
+PASS: gdb.arch/i386-dr3-watch.exp: watch i1 still fits
+PASS: gdb.arch/i386-dr3-watch.exp: watch i2 still fits
+PASS: gdb.arch/i386-dr3-watch.exp: watch i3 still fits
+PASS: gdb.arch/i386-dr3-watch.exp: watch i4 still fits
+Running ./gdb.arch/i386-float.exp ...
+PASS: gdb.arch/i386-float.exp: first stepi
+PASS: gdb.arch/i386-float.exp: info float
+PASS: gdb.arch/i386-float.exp: second stepi
+PASS: gdb.arch/i386-float.exp: info float
+Running ./gdb.arch/i386-gnu-cfi.exp ...
+PASS: gdb.arch/i386-gnu-cfi.exp: continue to abort()
+PASS: gdb.arch/i386-gnu-cfi.exp: backtrace
+PASS: gdb.arch/i386-gnu-cfi.exp: shift up to the modified frame
+PASS: gdb.arch/i386-gnu-cfi.exp: Existence of the CFI inserted register
+PASS: gdb.arch/i386-gnu-cfi.exp: Value of the CFI inserted register
+Running ./gdb.arch/i386-permbkpt.exp ...
+PASS: gdb.arch/i386-permbkpt.exp: First permanent break
+PASS: gdb.arch/i386-permbkpt.exp: Second permanent break
+Running ./gdb.arch/i386-prologue.exp ...
+PASS: gdb.arch/i386-prologue.exp: continue to standard
+PASS: gdb.arch/i386-prologue.exp: skip breakpoint in standard
+PASS: gdb.arch/i386-prologue.exp: backtrace in standard
+PASS: gdb.arch/i386-prologue.exp: saved registers in standard
+PASS: gdb.arch/i386-prologue.exp: break *(stack_align_ecx + 7)
+PASS: gdb.arch/i386-prologue.exp: continue to stack_align_ecx + 7
+PASS: gdb.arch/i386-prologue.exp: first backtrace in stack_align_ecx
+PASS: gdb.arch/i386-prologue.exp: continue in stack_align_ecx
+PASS: gdb.arch/i386-prologue.exp: skip breakpoint in stack_align_ecx
+PASS: gdb.arch/i386-prologue.exp: second backtrace in stack_align_ecx
+PASS: gdb.arch/i386-prologue.exp: saved registers in stack_align_ecx
+PASS: gdb.arch/i386-prologue.exp: break *(stack_align_edx + 7)
+PASS: gdb.arch/i386-prologue.exp: continue to stack_align_edx + 7
+PASS: gdb.arch/i386-prologue.exp: first backtrace in stack_align_edx
+PASS: gdb.arch/i386-prologue.exp: continue in stack_align_edx
+PASS: gdb.arch/i386-prologue.exp: skip breakpoint in stack_align_edx
+PASS: gdb.arch/i386-prologue.exp: second backtrace in stack_align_edx
+PASS: gdb.arch/i386-prologue.exp: saved registers in stack_align_edx
+PASS: gdb.arch/i386-prologue.exp: break *(stack_align_eax + 7)
+PASS: gdb.arch/i386-prologue.exp: continue to stack_align_eax + 7
+PASS: gdb.arch/i386-prologue.exp: first backtrace in stack_align_eax
+PASS: gdb.arch/i386-prologue.exp: continue in stack_align_eax
+PASS: gdb.arch/i386-prologue.exp: skip breakpoint in stack_align_eax
+PASS: gdb.arch/i386-prologue.exp: second backtrace in stack_align_eax
+PASS: gdb.arch/i386-prologue.exp: saved registers in stack_align_eax
+PASS: gdb.arch/i386-prologue.exp: continue to gdb1253
+PASS: gdb.arch/i386-prologue.exp: skip breakpoint in gdb1253
+PASS: gdb.arch/i386-prologue.exp: backtrace in gdb1253
+PASS: gdb.arch/i386-prologue.exp: saved registers in gdb1253
+PASS: gdb.arch/i386-prologue.exp: continue to gdb1718
+PASS: gdb.arch/i386-prologue.exp: skip breakpoint in gdb1718
+PASS: gdb.arch/i386-prologue.exp: backtrace in gdb1718
+KFAIL: gdb.arch/i386-prologue.exp: saved registers in gdb1718 (PRMS: gdb/1718)
+PASS: gdb.arch/i386-prologue.exp: continue to gdb1338
+PASS: gdb.arch/i386-prologue.exp: skip breakpoint in gdb1338
+PASS: gdb.arch/i386-prologue.exp: backtrace in gdb1338
+PASS: gdb.arch/i386-prologue.exp: saved registers in gdb1338
+PASS: gdb.arch/i386-prologue.exp: check jump_at_beginning prologue end
+Running ./gdb.arch/i386-signal.exp ...
+PASS: gdb.arch/i386-signal.exp: backtrace 10
+PASS: gdb.arch/i386-signal.exp: finish
+Running ./gdb.arch/i386-size.exp ...
+PASS: gdb.arch/i386-size.exp: run past main
+PASS: gdb.arch/i386-size.exp: backtrace shows no function
+PASS: gdb.arch/i386-size.exp: disassemble stops at end of main
+Running ./gdb.arch/i386-size-overlap.exp ...
+PASS: gdb.arch/i386-size-overlap.exp: run past main
+PASS: gdb.arch/i386-size-overlap.exp: backtrace shows the outer function
+Running ./gdb.arch/i386-sse.exp ...
+PASS: gdb.arch/i386-sse.exp: check whether processor supports SSE
+PASS: gdb.arch/i386-sse.exp: set first breakpoint in main
+PASS: gdb.arch/i386-sse.exp: continue to breakpoint: continue to first breakpoint in main
+PASS: gdb.arch/i386-sse.exp: check float contents of %xmm0
+PASS: gdb.arch/i386-sse.exp: check int8 contents of %xmm0
+PASS: gdb.arch/i386-sse.exp: check float contents of %xmm1
+PASS: gdb.arch/i386-sse.exp: check int8 contents of %xmm1
+PASS: gdb.arch/i386-sse.exp: check float contents of %xmm2
+PASS: gdb.arch/i386-sse.exp: check int8 contents of %xmm2
+PASS: gdb.arch/i386-sse.exp: check float contents of %xmm3
+PASS: gdb.arch/i386-sse.exp: check int8 contents of %xmm3
+PASS: gdb.arch/i386-sse.exp: check float contents of %xmm4
+PASS: gdb.arch/i386-sse.exp: check int8 contents of %xmm4
+PASS: gdb.arch/i386-sse.exp: check float contents of %xmm5
+PASS: gdb.arch/i386-sse.exp: check int8 contents of %xmm5
+PASS: gdb.arch/i386-sse.exp: check float contents of %xmm6
+PASS: gdb.arch/i386-sse.exp: check int8 contents of %xmm6
+PASS: gdb.arch/i386-sse.exp: check float contents of %xmm7
+PASS: gdb.arch/i386-sse.exp: check int8 contents of %xmm7
+PASS: gdb.arch/i386-sse.exp: set %xmm0
+PASS: gdb.arch/i386-sse.exp: set %xmm1
+PASS: gdb.arch/i386-sse.exp: set %xmm2
+PASS: gdb.arch/i386-sse.exp: set %xmm3
+PASS: gdb.arch/i386-sse.exp: set %xmm4
+PASS: gdb.arch/i386-sse.exp: set %xmm5
+PASS: gdb.arch/i386-sse.exp: set %xmm6
+PASS: gdb.arch/i386-sse.exp: set %xmm7
+PASS: gdb.arch/i386-sse.exp: set second breakpoint in main
+PASS: gdb.arch/i386-sse.exp: continue to breakpoint: continue to second breakpoint in main
+PASS: gdb.arch/i386-sse.exp: check contents of data[0]
+PASS: gdb.arch/i386-sse.exp: check contents of data[1]
+PASS: gdb.arch/i386-sse.exp: check contents of data[2]
+PASS: gdb.arch/i386-sse.exp: check contents of data[3]
+PASS: gdb.arch/i386-sse.exp: check contents of data[4]
+PASS: gdb.arch/i386-sse.exp: check contents of data[5]
+PASS: gdb.arch/i386-sse.exp: check contents of data[6]
+PASS: gdb.arch/i386-sse.exp: check contents of data[7]
+Running ./gdb.arch/i386-sse-stack-align.exp ...
+PASS: gdb.arch/i386-sse-stack-align.exp: print g0 ()
+PASS: gdb.arch/i386-sse-stack-align.exp: print g1 (1)
+PASS: gdb.arch/i386-sse-stack-align.exp: print g2 (1, 2)
+PASS: gdb.arch/i386-sse-stack-align.exp: print g3 (1, 2, 3)
+PASS: gdb.arch/i386-sse-stack-align.exp: print g4 (1, 2, 3, 4)
+Running ./gdb.arch/i386-unwind.exp ...
+PASS: gdb.arch/i386-unwind.exp: run past gdb1435
+PASS: gdb.arch/i386-unwind.exp: backtrace past gdb1435
+Running ./gdb.arch/i386-word.exp ...
+gdb compile failed, ./gdb.arch/i386-pseudo.c: In function 'main':
+./gdb.arch/i386-pseudo.c:32:3: error: PIC register clobbered by 'ebx' in 'asm'
+ asm ("mov 0(%0), %%eax\n\t"
+ ^
+./gdb.arch/i386-pseudo.c:41:3: error: PIC register clobbered by 'ebx' in 'asm'
+ asm ("mov %%eax, 0(%0)\n\t"
+ ^
+UNTESTED: gdb.arch/i386-word.exp: i386-word
+Running ./gdb.arch/ia64-breakpoint-shadow.exp ...
+Running ./gdb.arch/iwmmxt-regs.exp ...
+Running ./gdb.arch/mips16-thunks.exp ...
+Running ./gdb.arch/mips-octeon-bbit.exp ...
+Running ./gdb.arch/pa-nullify.exp ...
+Running ./gdb.arch/powerpc-aix-prologue.exp ...
+Running ./gdb.arch/powerpc-d128-regs.exp ...
+Running ./gdb.arch/powerpc-prologue.exp ...
+Running ./gdb.arch/ppc64-atomic-inst.exp ...
+Running ./gdb.arch/ppc-dfp.exp ...
+Running ./gdb.arch/ppc-fp.exp ...
+Running ./gdb.arch/spu-info.exp ...
+Running ./gdb.arch/spu-ls.exp ...
+Running ./gdb.arch/system-gcore.exp ...
+PASS: gdb.arch/system-gcore.exp: help gcore
+PASS: gdb.arch/system-gcore.exp: set breakpoint at terminal_func
+PASS: gdb.arch/system-gcore.exp: continue to terminal_func
+PASS: gdb.arch/system-gcore.exp: save a corefile
+FAIL: gdb.arch/system-gcore.exp: re-load generated corefile (bad file format)
+Running ./gdb.arch/thumb2-it.exp ...
+Running ./gdb.arch/thumb-bx-pc.exp ...
+Running ./gdb.arch/thumb-prologue.exp ...
+Running ./gdb.arch/thumb-singlestep.exp ...
+Running ./gdb.arch/vsx-regs.exp ...
+Running ./gdb.asm/asm-source.exp ...
+PASS: gdb.asm/asm-source.exp: f at main
+PASS: gdb.asm/asm-source.exp: next over macro
+PASS: gdb.asm/asm-source.exp: step into foo2
+PASS: gdb.asm/asm-source.exp: info target
+PASS: gdb.asm/asm-source.exp: info symbol
+PASS: gdb.asm/asm-source.exp: list
+PASS: gdb.asm/asm-source.exp: search
+PASS: gdb.asm/asm-source.exp: f in foo2
+PASS: gdb.asm/asm-source.exp: n in foo2
+PASS: gdb.asm/asm-source.exp: bt ALL in foo2
+PASS: gdb.asm/asm-source.exp: bt 2 in foo2
+PASS: gdb.asm/asm-source.exp: s 2
+PASS: gdb.asm/asm-source.exp: n 2
+PASS: gdb.asm/asm-source.exp: bt 3 in foo3
+PASS: gdb.asm/asm-source.exp: info source asmsrc1.s
+PASS: gdb.asm/asm-source.exp: finish from foo3
+PASS: gdb.asm/asm-source.exp: info source asmsrc2.s
+PASS: gdb.asm/asm-source.exp: info sources
+PASS: gdb.asm/asm-source.exp: info line
+PASS: gdb.asm/asm-source.exp: next over foo3
+PASS: gdb.asm/asm-source.exp: return from foo2
+PASS: gdb.asm/asm-source.exp: look at global variable
+PASS: gdb.asm/asm-source.exp: x/i &globalvar
+PASS: gdb.asm/asm-source.exp: disassem &globalvar, &globalvar+1
+PASS: gdb.asm/asm-source.exp: look at static variable
+PASS: gdb.asm/asm-source.exp: x/i &staticvar
+PASS: gdb.asm/asm-source.exp: disassem &staticvar, &staticvar+1
+PASS: gdb.asm/asm-source.exp: look at static function
+Running ./gdb.base/a2-run.exp ...
+Running ./gdb.base/advance.exp ...
+PASS: gdb.base/advance.exp: advance line number
+PASS: gdb.base/advance.exp: malformed advance
+PASS: gdb.base/advance.exp: advance func
+PASS: gdb.base/advance.exp: advance function not called by current frame
+PASS: gdb.base/advance.exp: set breakpoint at call to func3
+PASS: gdb.base/advance.exp: continue to call to func3 in main
+PASS: gdb.base/advance.exp: advance function called as param
+PASS: gdb.base/advance.exp: advance with no argument
+Running ./gdb.base/alias.exp ...
+PASS: gdb.base/alias.exp: alias -a set2=set
+PASS: gdb.base/alias.exp: set2 print elements 42
+PASS: gdb.base/alias.exp: verify set2
+PASS: gdb.base/alias.exp: abbrev set2 not present in help command list
+PASS: gdb.base/alias.exp: alias -a set3= set
+PASS: gdb.base/alias.exp: set3 print elements 43
+PASS: gdb.base/alias.exp: verify set3
+PASS: gdb.base/alias.exp: abbrev set3 not present in help command list
+PASS: gdb.base/alias.exp: alias -a set4 =set
+PASS: gdb.base/alias.exp: set4 print elements 44
+PASS: gdb.base/alias.exp: verify set4
+PASS: gdb.base/alias.exp: abbrev set4 not present in help command list
+PASS: gdb.base/alias.exp: alias -a set5 = set
+PASS: gdb.base/alias.exp: set5 print elements 45
+PASS: gdb.base/alias.exp: verify set5
+PASS: gdb.base/alias.exp: abbrev set5 not present in help command list
+PASS: gdb.base/alias.exp: alias -a -- set6 = set
+PASS: gdb.base/alias.exp: set6 print elements 46
+PASS: gdb.base/alias.exp: verify set6
+PASS: gdb.base/alias.exp: abbrev set6 not present in help command list
+PASS: gdb.base/alias.exp: alias -a -- -a = set
+PASS: gdb.base/alias.exp: -a print elements 47
+PASS: gdb.base/alias.exp: verify -a
+PASS: gdb.base/alias.exp: abbrev -a not present in help command list
+PASS: gdb.base/alias.exp: alias set2=set
+PASS: gdb.base/alias.exp: alias foo=bar
+PASS: gdb.base/alias.exp: alias spe = set p elem
+PASS: gdb.base/alias.exp: spe 50
+PASS: gdb.base/alias.exp: verify spe
+PASS: gdb.base/alias.exp: alias set pr elms = set p elem
+PASS: gdb.base/alias.exp: set pr elms 51
+PASS: gdb.base/alias.exp: verify set pr elms
+PASS: gdb.base/alias.exp: help set print
+Running ./gdb.base/all-bin.exp ...
+PASS: gdb.base/all-bin.exp: continuing after dummy()
+PASS: gdb.base/all-bin.exp: print value of v_int+v_char
+PASS: gdb.base/all-bin.exp: print value of v_int+v_short
+PASS: gdb.base/all-bin.exp: print value of v_int+v_signed_char
+PASS: gdb.base/all-bin.exp: print value of v_int+v_unsigned_char
+PASS: gdb.base/all-bin.exp: print value of v_int+v_signed_short
+PASS: gdb.base/all-bin.exp: print value of v_int+v_unsigned_short
+PASS: gdb.base/all-bin.exp: print value of v_int+v_signed_int
+PASS: gdb.base/all-bin.exp: print value of v_int+v_unsigned_int
+PASS: gdb.base/all-bin.exp: print value of v_int+v_long
+PASS: gdb.base/all-bin.exp: print value of v_int+v_signed_long
+PASS: gdb.base/all-bin.exp: print value of v_int+v_unsigned_long
+PASS: gdb.base/all-bin.exp: print value of v_int+v_float
+PASS: gdb.base/all-bin.exp: print value of v_int+v_double
+PASS: gdb.base/all-bin.exp: print value of v_int<=v_char
+PASS: gdb.base/all-bin.exp: print value of v_int<=v_short
+PASS: gdb.base/all-bin.exp: print value of v_int<=v_signed_char
+PASS: gdb.base/all-bin.exp: print value of v_int<=v_unsigned_char
+PASS: gdb.base/all-bin.exp: print value of v_int<=v_signed_short
+PASS: gdb.base/all-bin.exp: print value of v_int<=v_unsigned_short
+PASS: gdb.base/all-bin.exp: print value of v_int<=v_signed_int
+PASS: gdb.base/all-bin.exp: print value of v_int<=v_unsigned_int
+PASS: gdb.base/all-bin.exp: print value of v_int<=v_long
+PASS: gdb.base/all-bin.exp: print value of v_int<=v_signed_long
+PASS: gdb.base/all-bin.exp: print value of v_int<=v_unsigned_long
+PASS: gdb.base/all-bin.exp: print value of v_int<=v_float
+PASS: gdb.base/all-bin.exp: print value of v_int<=v_double
+PASS: gdb.base/all-bin.exp: set v_char=0
+PASS: gdb.base/all-bin.exp: set v_double=0
+PASS: gdb.base/all-bin.exp: set v_unsigned_long=0
+PASS: gdb.base/all-bin.exp: print value of v_int&&v_char
+PASS: gdb.base/all-bin.exp: print value of v_int&&v_short
+PASS: gdb.base/all-bin.exp: print value of v_int&&v_signed_char
+PASS: gdb.base/all-bin.exp: print value of v_int&&v_unsigned_char
+PASS: gdb.base/all-bin.exp: print value of v_int&&v_signed_short
+PASS: gdb.base/all-bin.exp: print value of v_int&&v_unsigned_short
+PASS: gdb.base/all-bin.exp: print value of v_int&&v_signed_int
+PASS: gdb.base/all-bin.exp: print value of v_int&&v_unsigned_int
+PASS: gdb.base/all-bin.exp: print value of v_int&&v_long
+PASS: gdb.base/all-bin.exp: print value of v_int&&v_signed_long
+PASS: gdb.base/all-bin.exp: print value of v_int&&v_unsigned_long
+PASS: gdb.base/all-bin.exp: print value of v_int&&v_float
+PASS: gdb.base/all-bin.exp: print value of v_int&&v_double
+Running ./gdb.base/annota1.exp ...
+Running ./gdb.base/annota3.exp ...
+Running ./gdb.base/anon.exp ...
+PASS: gdb.base/anon.exp: set breakpoint in anon.c
+PASS: gdb.base/anon.exp: continue to breakpoint: continue to breakpoint in anon.c
+PASS: gdb.base/anon.exp: print val.data.six
+Running ./gdb.base/args.exp ...
+Running ./gdb.base/argv0-symlink.exp ...
+PASS: gdb.base/argv0-symlink.exp: kept file symbolic link name
+FAIL: gdb.base/argv0-symlink.exp: kept directory symbolic link name
+Running ./gdb.base/arithmet.exp ...
+PASS: gdb.base/arithmet.exp: set variable x=14
+PASS: gdb.base/arithmet.exp: set variable y=2
+PASS: gdb.base/arithmet.exp: set variable z=2
+PASS: gdb.base/arithmet.exp: set variable w=3
+PASS: gdb.base/arithmet.exp: print x
+PASS: gdb.base/arithmet.exp: print y
+PASS: gdb.base/arithmet.exp: print z
+PASS: gdb.base/arithmet.exp: print w
+PASS: gdb.base/arithmet.exp: print x+y
+PASS: gdb.base/arithmet.exp: print x-y
+PASS: gdb.base/arithmet.exp: print x*y
+PASS: gdb.base/arithmet.exp: print x/y
+PASS: gdb.base/arithmet.exp: print x%y
+PASS: gdb.base/arithmet.exp: print x+y+z
+PASS: gdb.base/arithmet.exp: print x-y-z
+PASS: gdb.base/arithmet.exp: print x*y*z
+PASS: gdb.base/arithmet.exp: print x/y/z
+PASS: gdb.base/arithmet.exp: print x%y%z
+PASS: gdb.base/arithmet.exp: set variable x=10
+PASS: gdb.base/arithmet.exp: set variable y=4
+PASS: gdb.base/arithmet.exp: print x+y-z
+PASS: gdb.base/arithmet.exp: print x+y*z
+PASS: gdb.base/arithmet.exp: print x+y%w
+PASS: gdb.base/arithmet.exp: print x+y/w
+PASS: gdb.base/arithmet.exp: print x-y*z
+PASS: gdb.base/arithmet.exp: print x-y%z
+PASS: gdb.base/arithmet.exp: print x-y/z
+PASS: gdb.base/arithmet.exp: print x*y/z
+PASS: gdb.base/arithmet.exp: print x*y%w
+PASS: gdb.base/arithmet.exp: print x/y%w
+PASS: gdb.base/arithmet.exp: print x-(y+w)
+PASS: gdb.base/arithmet.exp: print x/(y*w)
+PASS: gdb.base/arithmet.exp: print x-(y/w)
+PASS: gdb.base/arithmet.exp: print (x+y)*w
+Running ./gdb.base/arrayidx.exp ...
+PASS: gdb.base/arrayidx.exp: Set print array-indexes to off
+PASS: gdb.base/arrayidx.exp: Print array with array-indexes off
+PASS: gdb.base/arrayidx.exp: Set print array-indexes to on
+PASS: gdb.base/arrayidx.exp: Print array with array-indexes on
+Running ./gdb.base/assign.exp ...
+PASS: gdb.base/assign.exp: continuing after dummy()
+PASS: gdb.base/assign.exp: v_int=57
+PASS: gdb.base/assign.exp: set v_int to 6
+PASS: gdb.base/assign.exp: v_int+=57
+PASS: gdb.base/assign.exp: set v_int to 6 (2)
+PASS: gdb.base/assign.exp: v_int-=57
+PASS: gdb.base/assign.exp: set v_int to 6 (3)
+PASS: gdb.base/assign.exp: v_int*=5
+PASS: gdb.base/assign.exp: set v_int to 6 (4)
+PASS: gdb.base/assign.exp: v_int/=4
+PASS: gdb.base/assign.exp: set v_int to 6 (5)
+PASS: gdb.base/assign.exp: v_int%=4
+PASS: gdb.base/assign.exp: set v_int to 6 (6)
+PASS: gdb.base/assign.exp: v_int+=char
+PASS: gdb.base/assign.exp: set v_int to 6 (7)
+PASS: gdb.base/assign.exp: v_int+=signed_char
+PASS: gdb.base/assign.exp: set v_int to 6 (8)
+PASS: gdb.base/assign.exp: v_int+=unsigned_char
+PASS: gdb.base/assign.exp: set v_int to 6 (9)
+PASS: gdb.base/assign.exp: v_int+=short
+PASS: gdb.base/assign.exp: set v_int to 6 (10)
+PASS: gdb.base/assign.exp: v_int+=signed_short
+PASS: gdb.base/assign.exp: set v_int to 6 (11)
+PASS: gdb.base/assign.exp: v_int=+unsigned_short
+PASS: gdb.base/assign.exp: set v_int to 6 (12)
+PASS: gdb.base/assign.exp: v_int+=signed_int
+PASS: gdb.base/assign.exp: set v_int to 6 (13)
+PASS: gdb.base/assign.exp: v_int+=unsigned_int
+PASS: gdb.base/assign.exp: set v_int to 6 (14)
+PASS: gdb.base/assign.exp: v_int+=long
+PASS: gdb.base/assign.exp: set v_int to 6 (15)
+PASS: gdb.base/assign.exp: v_int+=signed_long
+PASS: gdb.base/assign.exp: set v_int to 6 (16)
+PASS: gdb.base/assign.exp: v_int+=unsigned_long
+PASS: gdb.base/assign.exp: set v_int to 6 (17)
+PASS: gdb.base/assign.exp: v_int+=v_float
+PASS: gdb.base/assign.exp: set v_int to 6 (18)
+PASS: gdb.base/assign.exp: v_int+=double
+Running ./gdb.base/async.exp ...
+Running ./gdb.base/async-shell.exp ...
+Running ./gdb.base/attach.exp ...
+Running ./gdb.base/attach-pie-misread.exp ...
+Running ./gdb.base/attach-pie-noexec.exp ...
+Running ./gdb.base/attach-twice.exp ...
+Running ./gdb.base/auxv.exp ...
+PASS: gdb.base/auxv.exp: set print sevenbit-strings
+PASS: gdb.base/auxv.exp: set width 0
+PASS: gdb.base/auxv.exp: tbreak 78
+PASS: gdb.base/auxv.exp: continue
+PASS: gdb.base/auxv.exp: info auxv on live process
+PASS: gdb.base/auxv.exp: gcore
+PASS: gdb.base/auxv.exp: continue
+PASS: gdb.base/auxv.exp: continue
+UNSUPPORTED: gdb.base/auxv.exp: generate native core dump
+UNSUPPORTED: gdb.base/auxv.exp: info auxv on native core dump
+UNSUPPORTED: gdb.base/auxv.exp: matching auxv data from live and core
+FAIL: gdb.base/auxv.exp: load core file for info auxv on gcore-created dump
+FAIL: gdb.base/auxv.exp: info auxv on gcore-created dump
+FAIL: gdb.base/auxv.exp: matching auxv data from live and gcore
+Running ./gdb.base/bang.exp ...
+PASS: gdb.base/bang.exp: run program
+Running ./gdb.base/bfp-test.exp ...
+PASS: gdb.base/bfp-test.exp: continue to breakpoint: return
+PASS: gdb.base/bfp-test.exp: The original value of b32 is 1.5
+PASS: gdb.base/bfp-test.exp: The original value of b64 is 2.25
+PASS: gdb.base/bfp-test.exp: The original value of b128 is 3.375
+PASS: gdb.base/bfp-test.exp: Try to change b32 to -1.5 with 'print b32=-1.5f'
+PASS: gdb.base/bfp-test.exp: Try to change b64 to -2.25 with 'print b64=-2.25f'
+PASS: gdb.base/bfp-test.exp: Try to change b128 to -3.375 with 'print b128=-3.375l'
+PASS: gdb.base/bfp-test.exp: set variable b32 = 10.5f
+PASS: gdb.base/bfp-test.exp: set variable b64 = 20.25f
+PASS: gdb.base/bfp-test.exp: set variable b128 = 30.375l
+PASS: gdb.base/bfp-test.exp: The value of b32 is changed to 10.5
+PASS: gdb.base/bfp-test.exp: The value of b64 is changed to 20.25
+PASS: gdb.base/bfp-test.exp: The value of b128 is changed to 30.375
+PASS: gdb.base/bfp-test.exp: set variable b32 = 100.5a
+PASS: gdb.base/bfp-test.exp: set variable b64 = 200.25x
+PASS: gdb.base/bfp-test.exp: set variable b128 = 300.375fl
+PASS: gdb.base/bfp-test.exp: set variable b128 = 300.375fff
+Running ./gdb.base/bigcore.exp ...
+UNTESTED: gdb.base/bigcore.exp: Remote system
+Running ./gdb.base/bitfields2.exp ...
+PASS: gdb.base/bitfields2.exp: set print sevenbit-strings
+PASS: gdb.base/bitfields2.exp: break tester prior to break1
+PASS: gdb.base/bitfields2.exp: continuing to tester prior to break1
+PASS: gdb.base/bitfields2.exp: continuing to break1 #0
+PASS: gdb.base/bitfields2.exp: bitfield uniqueness; flags.s1 = 1
+PASS: gdb.base/bitfields2.exp: continuing to break1 #1
+PASS: gdb.base/bitfields2.exp: bitfield uniqueness; flags.u1 = 1
+PASS: gdb.base/bitfields2.exp: continuing to break1 #2
+PASS: gdb.base/bitfields2.exp: bitfield uniqueness; flags.s2 = 1
+PASS: gdb.base/bitfields2.exp: continuing to break1 #3
+PASS: gdb.base/bitfields2.exp: bitfield uniqueness; flags.u2 = 1
+PASS: gdb.base/bitfields2.exp: continuing to break1 #4
+PASS: gdb.base/bitfields2.exp: bitfield uniqueness; flags.s3 = 1
+PASS: gdb.base/bitfields2.exp: continuing to break1 #5
+PASS: gdb.base/bitfields2.exp: bitfield uniqueness; flags.u3 = 1
+PASS: gdb.base/bitfields2.exp: break tester prior to break2
+PASS: gdb.base/bitfields2.exp: continuing to tester prior to break2
+PASS: gdb.base/bitfields2.exp: continuing to break2 #0
+PASS: gdb.base/bitfields2.exp: bitfield containment; flags.u1, flags.u3, and flags.s3 to all 1s
+PASS: gdb.base/bitfields2.exp: continuing to break2 #1
+PASS: gdb.base/bitfields2.exp: bitfield containment; flags.u2, flags.s1, flags.s2 to all 1s
+PASS: gdb.base/bitfields2.exp: break tester prior to break3
+PASS: gdb.base/bitfields2.exp: continuing to tester prior to break3
+PASS: gdb.base/bitfields2.exp: continuing to break3 #0
+PASS: gdb.base/bitfields2.exp: maximum unsigned bitfield values
+PASS: gdb.base/bitfields2.exp: break tester prior to break4
+PASS: gdb.base/bitfields2.exp: continuing to tester prior to break4
+PASS: gdb.base/bitfields2.exp: continuing to break4 #0
+PASS: gdb.base/bitfields2.exp: maximum signed bitfield values
+PASS: gdb.base/bitfields2.exp: continuing to break4 #1
+PASS: gdb.base/bitfields2.exp: determining signed-ness of bitfields
+PASS: gdb.base/bitfields2.exp: most negative signed bitfield values
+PASS: gdb.base/bitfields2.exp: continuing to break4 #2
+PASS: gdb.base/bitfields2.exp: signed bitfields containing -1
+PASS: gdb.base/bitfields2.exp: break tester prior to break5
+PASS: gdb.base/bitfields2.exp: continuing to tester prior to break5
+PASS: gdb.base/bitfields2.exp: continuing to break5 #0
+PASS: gdb.base/bitfields2.exp: set long long unsigned bitfield
+PASS: gdb.base/bitfields2.exp: set long long signed bitfield positive
+PASS: gdb.base/bitfields2.exp: long long bitfield values after set
+PASS: gdb.base/bitfields2.exp: set long long signed bitfield negative
+PASS: gdb.base/bitfields2.exp: long long bitfield values after set negative
+Running ./gdb.base/bitfields.exp ...
+PASS: gdb.base/bitfields.exp: set print sevenbit-strings
+PASS: gdb.base/bitfields.exp: print flags
+PASS: gdb.base/bitfields.exp: continuing to break1 #1
+PASS: gdb.base/bitfields.exp: bitfield uniqueness (s1)
+PASS: gdb.base/bitfields.exp: continuing to break1 #2
+PASS: gdb.base/bitfields.exp: bitfield uniqueness (u1)
+PASS: gdb.base/bitfields.exp: continuing to break1 #3
+PASS: gdb.base/bitfields.exp: bitfield uniqueness (s2)
+PASS: gdb.base/bitfields.exp: continuing to break1 #4
+PASS: gdb.base/bitfields.exp: bitfield uniqueness (u2)
+PASS: gdb.base/bitfields.exp: continuing to break1 #5
+PASS: gdb.base/bitfields.exp: bitfield uniqueness (s3)
+PASS: gdb.base/bitfields.exp: continuing to break1 #6
+PASS: gdb.base/bitfields.exp: bitfield uniqueness (u3)
+PASS: gdb.base/bitfields.exp: continuing to break1 #7
+PASS: gdb.base/bitfields.exp: bitfield uniqueness (s9)
+PASS: gdb.base/bitfields.exp: continuing to break1 #8
+PASS: gdb.base/bitfields.exp: bitfield uniqueness (u9)
+PASS: gdb.base/bitfields.exp: continuing to break1 #9
+PASS: gdb.base/bitfields.exp: bitfield uniqueness (sc)
+PASS: gdb.base/bitfields.exp: bitfield containment #1
+PASS: gdb.base/bitfields.exp: continuing to break2
+PASS: gdb.base/bitfields.exp: bitfield containment #2
+PASS: gdb.base/bitfields.exp: unsigned bitfield ranges
+PASS: gdb.base/bitfields.exp: signed bitfields, max positive values
+PASS: gdb.base/bitfields.exp: continuing to break4 #1
+PASS: gdb.base/bitfields.exp: determining signed-ness of bitfields
+PASS: gdb.base/bitfields.exp: signed bitfields, max negative values
+PASS: gdb.base/bitfields.exp: continuing to break4 #2
+PASS: gdb.base/bitfields.exp: signed bitfields with -1
+PASS: gdb.base/bitfields.exp: continuing to break5
+PASS: gdb.base/bitfields.exp: distinct bitfields in container
+PASS: gdb.base/bitfields.exp: print container.one.u3
+PASS: gdb.base/bitfields.exp: print container.two.u3
+PASS: gdb.base/bitfields.exp: set internal var
+PASS: gdb.base/bitfields.exp: set $myvar.a = 0
+PASS: gdb.base/bitfields.exp: set $myvar.inner.b = 1
+PASS: gdb.base/bitfields.exp: set $myvar.inner.deep.c = 0
+PASS: gdb.base/bitfields.exp: set $myvar.inner.deep.d = -1
+PASS: gdb.base/bitfields.exp: set $myvar.inner.e = 1
+PASS: gdb.base/bitfields.exp: set $myvar.f = 1
+PASS: gdb.base/bitfields.exp: print $myvar.a
+PASS: gdb.base/bitfields.exp: print $myvar.inner.b
+PASS: gdb.base/bitfields.exp: print $myvar.inner.deep.c
+PASS: gdb.base/bitfields.exp: print $myvar.inner.deep.d
+PASS: gdb.base/bitfields.exp: print $myvar.inner.e
+PASS: gdb.base/bitfields.exp: print $myvar.f
+Running ./gdb.base/bitops.exp ...
+PASS: gdb.base/bitops.exp: print value of !1
+PASS: gdb.base/bitops.exp: print value of !0
+PASS: gdb.base/bitops.exp: print value of !100
+PASS: gdb.base/bitops.exp: print value of !1000
+PASS: gdb.base/bitops.exp: print value of !10
+PASS: gdb.base/bitops.exp: print value of !2
+PASS: gdb.base/bitops.exp: print value of 10 | 5
+PASS: gdb.base/bitops.exp: print value of 10 & 5
+PASS: gdb.base/bitops.exp: print value of 10 ^ 5
+PASS: gdb.base/bitops.exp: print value of -!0
+PASS: gdb.base/bitops.exp: print value of ~-!0
+PASS: gdb.base/bitops.exp: print value of 3 * 2 / 4.0 * 2.0
+PASS: gdb.base/bitops.exp: print value of 8 << 2 >> 4
+PASS: gdb.base/bitops.exp: print value of -1 < 0 > 1
+PASS: gdb.base/bitops.exp: print value of 15 ^ 10 ^ 5 ^ 7
+PASS: gdb.base/bitops.exp: print value of 3.5 < 4.0
+PASS: gdb.base/bitops.exp: print value of 3.5 < -4.0
+PASS: gdb.base/bitops.exp: print value of 2 > -3
+PASS: gdb.base/bitops.exp: print value of -3>4
+PASS: gdb.base/bitops.exp: print value of (-3 > 4)
+PASS: gdb.base/bitops.exp: print value of 3>=2.5
+PASS: gdb.base/bitops.exp: print value of 3>=4.5
+PASS: gdb.base/bitops.exp: print value of 3==3.0
+PASS: gdb.base/bitops.exp: print value of 3==4.0
+PASS: gdb.base/bitops.exp: print value of 3!=3.0
+PASS: gdb.base/bitops.exp: print value of 3!=5.0
+PASS: gdb.base/bitops.exp: print value of 0 || 1 && 0 | 0 ^ 0 == 8 > 128 >>1 +2 *2
+PASS: gdb.base/bitops.exp: print value of 1.0 || 0
+PASS: gdb.base/bitops.exp: print value of 0.0 || 1.0
+PASS: gdb.base/bitops.exp: print value of 0.0 || 0
+PASS: gdb.base/bitops.exp: print value of 0 || 1 && 0 | 0 ^ 0 == 8
+PASS: gdb.base/bitops.exp: print value of 0 == 8 > 128 >> 1 + 2 * 2
+Running ./gdb.base/break-always.exp ...
+PASS: gdb.base/break-always.exp: set breakpoint always-inserted on
+PASS: gdb.base/break-always.exp: confirm breakpoint always-inserted
+PASS: gdb.base/break-always.exp: set breakpoint on bar
+PASS: gdb.base/break-always.exp: set 2nd breakpoint on bar
+PASS: gdb.base/break-always.exp: set 3rd breakpoint on bar
+PASS: gdb.base/break-always.exp: set 4th breakpoint on bar
+PASS: gdb.base/break-always.exp: initial check breakpoint state
+PASS: gdb.base/break-always.exp: initial disable all breakpoints
+PASS: gdb.base/break-always.exp: initial enable all breakpoints
+PASS: gdb.base/break-always.exp: re-disable all breakpoints
+PASS: gdb.base/break-always.exp: enable 3.A
+PASS: gdb.base/break-always.exp: disable 3.B
+PASS: gdb.base/break-always.exp: enable 3.C
+PASS: gdb.base/break-always.exp: enable 2.D
+PASS: gdb.base/break-always.exp: disable 2.E
+PASS: gdb.base/break-always.exp: disable 3.F
+PASS: gdb.base/break-always.exp: enable 3.G
+PASS: gdb.base/break-always.exp: enable 2.H
+PASS: gdb.base/break-always.exp: disable 2.I
+PASS: gdb.base/break-always.exp: before re-enable check breakpoint state
+PASS: gdb.base/break-always.exp: re-enable all breakpoints
+PASS: gdb.base/break-always.exp: set breakpoint on bar 2
+PASS: gdb.base/break-always.exp: save shadow
+PASS: gdb.base/break-always.exp: write 0 to breakpoint's address
+PASS: gdb.base/break-always.exp: read back 0 from the breakpoint's address
+PASS: gdb.base/break-always.exp: write 1 to breakpoint's address
+PASS: gdb.base/break-always.exp: read back 1 from the breakpoint's address
+PASS: gdb.base/break-always.exp: p /x *(char *) 0x555555c3 = $shadow
+PASS: gdb.base/break-always.exp: continue to breakpoint: bar
+Running ./gdb.base/break-caller-line.exp ...
+PASS: gdb.base/break-caller-line.exp: up
+PASS: gdb.base/break-caller-line.exp: info line *$pc
+PASS: gdb.base/break-caller-line.exp: break
+Running ./gdb.base/break-entry.exp ...
+UNTESTED: gdb.base/break-entry.exp: break-entry.exp
+Running ./gdb.base/break.exp ...
+PASS: gdb.base/break.exp: Delete all breakpoints when none
+PASS: gdb.base/break.exp: breakpoint function
+PASS: gdb.base/break.exp: breakpoint quoted function
+PASS: gdb.base/break.exp: breakpoint function in file
+PASS: gdb.base/break.exp: use `list' to establish default source file
+PASS: gdb.base/break.exp: breakpoint line number
+PASS: gdb.base/break.exp: breakpoint duplicate
+PASS: gdb.base/break.exp: breakpoint line number in file
+PASS: gdb.base/break.exp: breakpoint at start of multi line if conditional
+PASS: gdb.base/break.exp: breakpoint at start of multi line while conditional
+PASS: gdb.base/break.exp: breakpoint info
+PASS: gdb.base/break.exp: info break 2 4 6
+PASS: gdb.base/break.exp: info break 3-5
+PASS: gdb.base/break.exp: disable using history values
+PASS: gdb.base/break.exp: check disable with history values
+PASS: gdb.base/break.exp: disable with convenience values
+PASS: gdb.base/break.exp: check disable with convenience values
+PASS: gdb.base/break.exp: disable non-existent breakpoint 10
+PASS: gdb.base/break.exp: set $baz 1.234
+PASS: gdb.base/break.exp: disable with non-integer convenience var
+PASS: gdb.base/break.exp: disable with non-existent convenience var
+PASS: gdb.base/break.exp: disable with non-existent history value
+PASS: gdb.base/break.exp: disable with badly formed history value
+PASS: gdb.base/break.exp: run until function breakpoint
+PASS: gdb.base/break.exp: list marker1
+PASS: gdb.base/break.exp: break lineno
+PASS: gdb.base/break.exp: delete $bpnum
+PASS: gdb.base/break.exp: run until breakpoint set at a line number
+PASS: gdb.base/break.exp: run until file:function(6) breakpoint
+PASS: gdb.base/break.exp: run until file:function(5) breakpoint
+PASS: gdb.base/break.exp: run until file:function(4) breakpoint
+PASS: gdb.base/break.exp: run until file:function(3) breakpoint
+PASS: gdb.base/break.exp: run until file:function(2) breakpoint
+PASS: gdb.base/break.exp: run until file:function(1) breakpoint
+PASS: gdb.base/break.exp: run until quoted breakpoint
+PASS: gdb.base/break.exp: run until file:linenum breakpoint
+PASS: gdb.base/break.exp: breakpoint offset +1
+PASS: gdb.base/break.exp: step onto breakpoint
+PASS: gdb.base/break.exp: setting breakpoint at }
+PASS: gdb.base/break.exp: continue to breakpoint at }
+PASS: gdb.base/break.exp: Temporary breakpoint function
+PASS: gdb.base/break.exp: Temporary breakpoint function in file
+PASS: gdb.base/break.exp: Temporary breakpoint line number #1
+PASS: gdb.base/break.exp: Temporary breakpoint line number #2
+PASS: gdb.base/break.exp: Temporary breakpoint line number in file #1
+PASS: gdb.base/break.exp: Temporary breakpoint line number in file #2
+PASS: gdb.base/break.exp: Temporary breakpoint info
+PASS: gdb.base/break.exp: catch requires an event name
+PASS: gdb.base/break.exp: set catch fork, never expected to trigger
+PASS: gdb.base/break.exp: set catch vfork, never expected to trigger
+PASS: gdb.base/break.exp: set catch exec, never expected to trigger
+PASS: gdb.base/break.exp: set breakpoint pending off
+PASS: gdb.base/break.exp: break on non-existent source line
+PASS: gdb.base/break.exp: until bp_location1
+PASS: gdb.base/break.exp: break on default location, 1st time
+PASS: gdb.base/break.exp: break on default location, 2nd time
+PASS: gdb.base/break.exp: break on default location, 3rd time
+PASS: gdb.base/break.exp: break on default location, 4th time
+PASS: gdb.base/break.exp: set to-be-silent break bp_location1
+PASS: gdb.base/break.exp: set silent break bp_location1
+PASS: gdb.base/break.exp: info silent break bp_location1
+PASS: gdb.base/break.exp: hit silent break bp_location1
+PASS: gdb.base/break.exp: stopped for silent break bp_location1
+PASS: gdb.base/break.exp: thread-specific breakpoint on non-existent thread disallowed
+PASS: gdb.base/break.exp: thread-specific breakpoint on bogus thread ID disallowed
+PASS: gdb.base/break.exp: breakpoint with trailing garbage disallowed
+PASS: gdb.base/break.exp: step over breakpoint
+PASS: gdb.base/break.exp: clear line has no breakpoint disallowed
+PASS: gdb.base/break.exp: clear current line has no breakpoint disallowed
+PASS: gdb.base/break.exp: break marker3 #1
+PASS: gdb.base/break.exp: break marker3 #2
+PASS: gdb.base/break.exp: clear marker3
+PASS: gdb.base/break.exp: set convenience variable $foo to bp_location11
+PASS: gdb.base/break.exp: set breakpoint via convenience variable
+PASS: gdb.base/break.exp: set convenience variable $foo to 81.5
+PASS: gdb.base/break.exp: set breakpoint via non-integer convenience variable disallowed
+PASS: gdb.base/break.exp: set breakpoint on to-be-called function
+PASS: gdb.base/break.exp: hit breakpoint on called function
+PASS: gdb.base/break.exp: backtrace while in called function
+PASS: gdb.base/break.exp: finish from called function
+PASS: gdb.base/break.exp: finish with arguments disallowed
+PASS: gdb.base/break.exp: finish from outermost frame disallowed
+PASS: gdb.base/break.exp: kill program
+PASS: gdb.base/break.exp: break at factorial
+PASS: gdb.base/break.exp: continue to factorial(5)
+PASS: gdb.base/break.exp: backtrace from factorial(5)
+PASS: gdb.base/break.exp: next to recursive call
+PASS: gdb.base/break.exp: next over recursive call
+PASS: gdb.base/break.exp: backtrace from factorial(5.1)
+PASS: gdb.base/break.exp: continue until exit at recursive next test
+PASS: gdb.base/break.exp: breakpoint function, optimized file
+PASS: gdb.base/break.exp: breakpoint small function, optimized file
+PASS: gdb.base/break.exp: run until function breakpoint, optimized file (code motion)
+PASS: gdb.base/break.exp: run until breakpoint set at small function, optimized file
+PASS: gdb.base/break.exp: rbreak junk pending setup
+PASS: gdb.base/break.exp: rbreak junk set breakpoint
+PASS: gdb.base/break.exp: rbreak junk
+Running ./gdb.base/break-inline.exp ...
+PASS: gdb.base/break-inline.exp: break
+Running ./gdb.base/break-interp.exp ...
+Running ./gdb.base/break-on-linker-gcd-function.exp ...
+PASS: gdb.base/break-on-linker-gcd-function.exp: b 25
+Running ./gdb.base/breakpoint-shadow.exp ...
+PASS: gdb.base/breakpoint-shadow.exp: set breakpoint always-inserted on
+PASS: gdb.base/breakpoint-shadow.exp: show breakpoint always-inserted
+PASS: gdb.base/breakpoint-shadow.exp: disassembly without breakpoints
+PASS: gdb.base/breakpoint-shadow.exp: First breakpoint placed
+PASS: gdb.base/breakpoint-shadow.exp: Second breakpoint placed
+PASS: gdb.base/breakpoint-shadow.exp: disassembly with breakpoints
+Running ./gdb.base/call-ar-st.exp ...
+PASS: gdb.base/call-ar-st.exp: set print sevenbit-strings
+PASS: gdb.base/call-ar-st.exp: set print address off
+PASS: gdb.base/call-ar-st.exp: set width 0
+PASS: gdb.base/call-ar-st.exp: tbreakpoint line 1209
+PASS: gdb.base/call-ar-st.exp: run until breakpoint set at a line
+PASS: gdb.base/call-ar-st.exp: tbreakpoint line 1216
+PASS: gdb.base/call-ar-st.exp: tbreakpoint line 1220
+PASS: gdb.base/call-ar-st.exp: step inside print_all_arrays
+PASS: gdb.base/call-ar-st.exp: tbreakpoint line 1236
+PASS: gdb.base/call-ar-st.exp: tbreakpoint line 1241
+PASS: gdb.base/call-ar-st.exp: continue to 1241
+PASS: gdb.base/call-ar-st.exp: set breakpoint in sum_array_print
+PASS: gdb.base/call-ar-st.exp: set print frame-arguments all
+PASS: gdb.base/call-ar-st.exp: check args of sum_array_print
+PASS: gdb.base/call-ar-st.exp: tbreakpoint line 1281
+PASS: gdb.base/call-ar-st.exp: print compute_with_small_structs(20)
+PASS: gdb.base/call-ar-st.exp: tbreakpoint line 1286
+PASS: gdb.base/call-ar-st.exp: continue to 1286
+PASS: gdb.base/call-ar-st.exp: tbreak in print_long_arg_list after stepping into memcpy
+PASS: gdb.base/call-ar-st.exp: step into print_long_arg_list
+PASS: gdb.base/call-ar-st.exp: tbreakpoint line 1300
+PASS: gdb.base/call-ar-st.exp: step into init_bit_flags_combo
+PASS: gdb.base/call-ar-st.exp: tbreakpoint line 1305
+PASS: gdb.base/call-ar-st.exp: continue to 1305
+PASS: gdb.base/call-ar-st.exp: tbreakpoint line 1311
+PASS: gdb.base/call-ar-st.exp: continue to 1311
+Running ./gdb.base/callexit.exp ...
+PASS: gdb.base/callexit.exp: inferior function call terminated program
+Running ./gdb.base/callfuncs.exp ...
+PASS: gdb.base/callfuncs.exp: set print sevenbit-strings
+PASS: gdb.base/callfuncs.exp: set print address off
+PASS: gdb.base/callfuncs.exp: set width 0
+PASS: gdb.base/callfuncs.exp: set language c
+PASS: gdb.base/callfuncs.exp: next to t_double_values
+PASS: gdb.base/callfuncs.exp: next to t_structs_c
+PASS: gdb.base/callfuncs.exp: retrieve original register contents
+PASS: gdb.base/callfuncs.exp: set unwindonsignal on
+PASS: gdb.base/callfuncs.exp: p t_char_values(0,0)
+PASS: gdb.base/callfuncs.exp: p t_char_values('a','b')
+PASS: gdb.base/callfuncs.exp: p t_char_values(char_val1,char_val2)
+PASS: gdb.base/callfuncs.exp: p t_char_values('a',char_val2)
+PASS: gdb.base/callfuncs.exp: p t_char_values(char_val1,'b')
+PASS: gdb.base/callfuncs.exp: p t_short_values(0,0)
+PASS: gdb.base/callfuncs.exp: p t_short_values(10,-23)
+PASS: gdb.base/callfuncs.exp: p t_short_values(short_val1,short_val2)
+PASS: gdb.base/callfuncs.exp: p t_short_values(10,short_val2)
+PASS: gdb.base/callfuncs.exp: p t_short_values(short_val1,-23)
+PASS: gdb.base/callfuncs.exp: p t_int_values(0,0)
+PASS: gdb.base/callfuncs.exp: p t_int_values(87,-26)
+PASS: gdb.base/callfuncs.exp: p t_int_values(int_val1,int_val2)
+PASS: gdb.base/callfuncs.exp: p t_int_values(87,int_val2)
+PASS: gdb.base/callfuncs.exp: p t_int_values(int_val1,-26)
+PASS: gdb.base/callfuncs.exp: p t_long_values(0,0)
+PASS: gdb.base/callfuncs.exp: p t_long_values(789,-321)
+PASS: gdb.base/callfuncs.exp: p t_long_values(long_val1,long_val2)
+PASS: gdb.base/callfuncs.exp: p t_long_values(789,long_val2)
+PASS: gdb.base/callfuncs.exp: p t_long_values(long_val1,-321)
+PASS: gdb.base/callfuncs.exp: p t_float_values(0.0,0.0)
+PASS: gdb.base/callfuncs.exp: p t_float_values(3.14159,-2.3765)
+PASS: gdb.base/callfuncs.exp: p t_float_values(float_val1,float_val2)
+PASS: gdb.base/callfuncs.exp: p t_float_values(3.14159,float_val2)
+PASS: gdb.base/callfuncs.exp: p t_float_values(float_val1,-2.3765)
+PASS: gdb.base/callfuncs.exp: p t_float_values2(0.0,0.0)
+PASS: gdb.base/callfuncs.exp: p t_float_values2(3.14159,float_val2)
+PASS: gdb.base/callfuncs.exp: Call function with many float arguments.
+PASS: gdb.base/callfuncs.exp: p t_small_values(1,2,3,4,5,6,7,8,9,10)
+PASS: gdb.base/callfuncs.exp: p t_double_values(0.0,0.0)
+PASS: gdb.base/callfuncs.exp: p t_double_values(45.654,-67.66)
+PASS: gdb.base/callfuncs.exp: p t_double_values(double_val1,double_val2)
+PASS: gdb.base/callfuncs.exp: p t_double_values(45.654,double_val2)
+PASS: gdb.base/callfuncs.exp: p t_double_values(double_val1,-67.66)
+PASS: gdb.base/callfuncs.exp: Call function with many double arguments.
+PASS: gdb.base/callfuncs.exp: p t_double_int(99.0, 1)
+PASS: gdb.base/callfuncs.exp: p t_double_int(99.0, 99)
+PASS: gdb.base/callfuncs.exp: p t_int_double(99, 1.0)
+PASS: gdb.base/callfuncs.exp: p t_int_double(99, 99.0)
+PASS: gdb.base/callfuncs.exp: p t_float_complex_values(fc1, fc2)
+PASS: gdb.base/callfuncs.exp: p t_float_complex_values(fc3, fc4)
+PASS: gdb.base/callfuncs.exp: p t_float_complex_many_args(fc1, fc2, fc3, fc4, fc1, fc2, fc3, fc4, fc1, fc2, fc3, fc4, fc1, fc2, fc3, fc4)
+PASS: gdb.base/callfuncs.exp: p t_float_complex_many_args(fc1, fc1, fc1, fc1, fc1, fc1, fc1, fc1, fc1, fc1, fc1, fc1, fc1, fc1, fc1, fc1)
+PASS: gdb.base/callfuncs.exp: p t_double_complex_values(dc1, dc2)
+PASS: gdb.base/callfuncs.exp: p t_double_complex_values(dc3, dc4)
+PASS: gdb.base/callfuncs.exp: p t_double_complex_many_args(dc1, dc2, dc3, dc4, dc1, dc2, dc3, dc4, dc1, dc2, dc3, dc4, dc1, dc2, dc3, dc4)
+PASS: gdb.base/callfuncs.exp: p t_double_complex_many_args(dc1, dc1, dc1, dc1, dc1, dc1, dc1, dc1, dc1, dc1, dc1, dc1, dc1, dc1, dc1, dc1)
+PASS: gdb.base/callfuncs.exp: p t_long_double_complex_values(ldc1, ldc2)
+PASS: gdb.base/callfuncs.exp: p t_long_double_complex_values(ldc3, ldc4)
+PASS: gdb.base/callfuncs.exp: p t_long_double_complex_many_args(ldc1, ldc2, ldc3, ldc4, ldc1, ldc2, ldc3, ldc4, ldc1, ldc2, ldc3, ldc4, ldc1, ldc2, ldc3, ldc4)
+PASS: gdb.base/callfuncs.exp: p t_long_double_complex_many_args(ldc1, ldc1, ldc1, ldc1, ldc1, ldc1, ldc1,ldc1, ldc1, ldc1, ldc1, ldc1, ldc1, ldc1, ldc1, ldc1)
+PASS: gdb.base/callfuncs.exp: p t_string_values(string_val2,string_val1)
+PASS: gdb.base/callfuncs.exp: p t_string_values(string_val1,string_val2)
+PASS: gdb.base/callfuncs.exp: p t_string_values("string 1","string 2")
+PASS: gdb.base/callfuncs.exp: p t_string_values("string 1",string_val2)
+PASS: gdb.base/callfuncs.exp: p t_string_values(string_val1,"string 2")
+PASS: gdb.base/callfuncs.exp: p t_char_array_values(char_array_val2,char_array_val1)
+PASS: gdb.base/callfuncs.exp: p t_char_array_values(char_array_val1,char_array_val2)
+PASS: gdb.base/callfuncs.exp: p t_char_array_values("carray 1","carray 2")
+PASS: gdb.base/callfuncs.exp: p t_char_array_values("carray 1",char_array_val2)
+PASS: gdb.base/callfuncs.exp: p t_char_array_values(char_array_val1,"carray 2")
+PASS: gdb.base/callfuncs.exp: p doubleit(4)
+PASS: gdb.base/callfuncs.exp: p add(4,5)
+PASS: gdb.base/callfuncs.exp: p t_func_values(func_val2,func_val1)
+PASS: gdb.base/callfuncs.exp: p t_func_values(func_val1,func_val2)
+PASS: gdb.base/callfuncs.exp: p function_struct.func(5)
+PASS: gdb.base/callfuncs.exp: p function_struct_ptr->func(10)
+PASS: gdb.base/callfuncs.exp: p t_func_values(add,func_val2)
+PASS: gdb.base/callfuncs.exp: p t_func_values(func_val1,doubleit)
+PASS: gdb.base/callfuncs.exp: p t_call_add(add,3,4)
+PASS: gdb.base/callfuncs.exp: p t_call_add(func_val1,3,4)
+PASS: gdb.base/callfuncs.exp: p t_enum_value1(enumval1)
+PASS: gdb.base/callfuncs.exp: p t_enum_value1(enum_val1)
+PASS: gdb.base/callfuncs.exp: p t_enum_value1(enum_val2)
+PASS: gdb.base/callfuncs.exp: p t_enum_value2(enumval2)
+PASS: gdb.base/callfuncs.exp: p t_enum_value2(enum_val2)
+PASS: gdb.base/callfuncs.exp: p t_enum_value2(enum_val1)
+PASS: gdb.base/callfuncs.exp: p sum_args(1,{2})
+PASS: gdb.base/callfuncs.exp: p sum_args(2,{2,3})
+PASS: gdb.base/callfuncs.exp: p sum_args(3,{2,3,4})
+PASS: gdb.base/callfuncs.exp: p sum_args(4,{2,3,4,5})
+PASS: gdb.base/callfuncs.exp: p sum10 (1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
+PASS: gdb.base/callfuncs.exp: p cmp10 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9)
+PASS: gdb.base/callfuncs.exp: call inferior func with struct - returns char
+PASS: gdb.base/callfuncs.exp: call inferior func with struct - returns short
+PASS: gdb.base/callfuncs.exp: call inferior func with struct - returns int
+PASS: gdb.base/callfuncs.exp: call inferior func with struct - returns long
+PASS: gdb.base/callfuncs.exp: call inferior func with struct - returns float
+PASS: gdb.base/callfuncs.exp: call inferior func with struct - returns double
+PASS: gdb.base/callfuncs.exp: call inferior func with struct - returns float _Complex
+PASS: gdb.base/callfuncs.exp: call inferior func with struct - returns double _Complex
+PASS: gdb.base/callfuncs.exp: call inferior func with struct - returns long double _Complex
+PASS: gdb.base/callfuncs.exp: call inferior func with struct - returns char *
+PASS: gdb.base/callfuncs.exp: set unwindonsignal off
+PASS: gdb.base/callfuncs.exp: register contents after gdb function calls
+PASS: gdb.base/callfuncs.exp: gdb function calls preserve register contents
+PASS: gdb.base/callfuncs.exp: set language c
+PASS: gdb.base/callfuncs.exp: next to t_double_values
+PASS: gdb.base/callfuncs.exp: next to t_structs_c
+PASS: gdb.base/callfuncs.exp: retrieve original register contents
+PASS: gdb.base/callfuncs.exp: stop at breakpoint in call dummy function
+PASS: gdb.base/callfuncs.exp: continue from call dummy breakpoint
+PASS: gdb.base/callfuncs.exp: bt after continuing from call dummy breakpoint
+PASS: gdb.base/callfuncs.exp: register contents after stop in call dummy
+PASS: gdb.base/callfuncs.exp: continue after stop in call dummy preserves register contents
+PASS: gdb.base/callfuncs.exp: set language c
+PASS: gdb.base/callfuncs.exp: next to t_double_values
+PASS: gdb.base/callfuncs.exp: next to t_structs_c
+PASS: gdb.base/callfuncs.exp: retrieve original register contents
+PASS: gdb.base/callfuncs.exp: call function causing a breakpoint then do a finish
+PASS: gdb.base/callfuncs.exp: finish from call dummy breakpoint returns correct value
+PASS: gdb.base/callfuncs.exp: bt after finishing from call dummy breakpoint
+PASS: gdb.base/callfuncs.exp: register contents after finish in call dummy
+PASS: gdb.base/callfuncs.exp: finish after stop in call dummy preserves register contents
+PASS: gdb.base/callfuncs.exp: set language c
+PASS: gdb.base/callfuncs.exp: next to t_double_values
+PASS: gdb.base/callfuncs.exp: next to t_structs_c
+PASS: gdb.base/callfuncs.exp: retrieve original register contents
+PASS: gdb.base/callfuncs.exp: call function causing a breakpoint and then do a return
+PASS: gdb.base/callfuncs.exp: back at main after return from call dummy breakpoint
+PASS: gdb.base/callfuncs.exp: register contents after return in call dummy
+PASS: gdb.base/callfuncs.exp: return after stop in call dummy preserves register contents
+PASS: gdb.base/callfuncs.exp: set language c
+PASS: gdb.base/callfuncs.exp: next to t_double_values
+PASS: gdb.base/callfuncs.exp: next to t_structs_c
+PASS: gdb.base/callfuncs.exp: retrieve original register contents
+PASS: gdb.base/callfuncs.exp: stop at nested call level 1
+PASS: gdb.base/callfuncs.exp: backtrace at nested call level 1
+PASS: gdb.base/callfuncs.exp: stop at nested call level 2
+PASS: gdb.base/callfuncs.exp: backtrace at nested call level 2
+PASS: gdb.base/callfuncs.exp: stop at nested call level 3
+PASS: gdb.base/callfuncs.exp: backtrace at nested call level 3
+PASS: gdb.base/callfuncs.exp: stop at nested call level 4
+PASS: gdb.base/callfuncs.exp: backtrace at nested call level 4
+PASS: gdb.base/callfuncs.exp: Finish from nested call level 4
+PASS: gdb.base/callfuncs.exp: backtrace after finish from nested call level 4
+PASS: gdb.base/callfuncs.exp: Finish from nested call level 3
+PASS: gdb.base/callfuncs.exp: backtrace after finish from nested call level 3
+PASS: gdb.base/callfuncs.exp: Finish from nested call level 2
+PASS: gdb.base/callfuncs.exp: backtrace after finish from nested call level 2
+PASS: gdb.base/callfuncs.exp: Finish from nested call level 1
+PASS: gdb.base/callfuncs.exp: backtrace after finish from nested call level 1
+PASS: gdb.base/callfuncs.exp: register contents after nested call dummies
+PASS: gdb.base/callfuncs.exp: nested call dummies preserve register contents
+PASS: gdb.base/callfuncs.exp: set $old_sp = $sp
+PASS: gdb.base/callfuncs.exp: set $sp = 0
+PASS: gdb.base/callfuncs.exp: sp == 0: call doubleit (1)
+PASS: gdb.base/callfuncs.exp: set $sp = -1
+PASS: gdb.base/callfuncs.exp: sp == -1: call doubleit (1)
+PASS: gdb.base/callfuncs.exp: set $sp = $old_sp
+PASS: gdb.base/callfuncs.exp: print callfunc (Lcallfunc, 5)
+PASS: gdb.base/callfuncs.exp: print *((int *(*) (void)) voidfunc)()
+Running ./gdb.base/call-rt-st.exp ...
+PASS: gdb.base/call-rt-st.exp: set print sevenbit-strings
+PASS: gdb.base/call-rt-st.exp: set print address off
+PASS: gdb.base/call-rt-st.exp: set width 0
+PASS: gdb.base/call-rt-st.exp: breakpoint loop_count
+PASS: gdb.base/call-rt-st.exp: continue to loop_count
+PASS: gdb.base/call-rt-st.exp: finish out from loop_count (line 777)
+Running ./gdb.base/call-sc.exp ...
+PASS: gdb.base/call-sc.exp: set print sevenbit-strings
+PASS: gdb.base/call-sc.exp: set print address off
+PASS: gdb.base/call-sc.exp: set width 0
+PASS: gdb.base/call-sc.exp: ptype; call-sc-tc (char)
+PASS: gdb.base/call-sc.exp: ptype foo; call-sc-tc char
+PASS: gdb.base/call-sc.exp: p/c fun(); call call-sc-tc
+PASS: gdb.base/call-sc.exp: call Fun(foo); call call-sc-tc
+PASS: gdb.base/call-sc.exp: p/c L; call call-sc-tc
+PASS: gdb.base/call-sc.exp: advance to fun for return; return call-sc-tc
+PASS: gdb.base/call-sc.exp: zed L for return; return call-sc-tc
+PASS: gdb.base/call-sc.exp: return foo; return call-sc-tc
+PASS: gdb.base/call-sc.exp: return foo; synchronize pc to main()
+PASS: gdb.base/call-sc.exp: value foo returned; return call-sc-tc
+PASS: gdb.base/call-sc.exp: advance to fun for finish; return call-sc-tc
+PASS: gdb.base/call-sc.exp: zed L for finish; return call-sc-tc
+PASS: gdb.base/call-sc.exp: finish foo; return call-sc-tc
+PASS: gdb.base/call-sc.exp: value foo finished; return call-sc-tc
+PASS: gdb.base/call-sc.exp: return and finish use same convention; return call-sc-tc
+PASS: gdb.base/call-sc.exp: set print sevenbit-strings
+PASS: gdb.base/call-sc.exp: set print address off
+PASS: gdb.base/call-sc.exp: set width 0
+PASS: gdb.base/call-sc.exp: ptype; call-sc-ts (short int)
+PASS: gdb.base/call-sc.exp: ptype foo; call-sc-ts short int
+PASS: gdb.base/call-sc.exp: p/c fun(); call call-sc-ts
+PASS: gdb.base/call-sc.exp: call Fun(foo); call call-sc-ts
+PASS: gdb.base/call-sc.exp: p/c L; call call-sc-ts
+PASS: gdb.base/call-sc.exp: advance to fun for return; return call-sc-ts
+PASS: gdb.base/call-sc.exp: zed L for return; return call-sc-ts
+PASS: gdb.base/call-sc.exp: return foo; return call-sc-ts
+PASS: gdb.base/call-sc.exp: return foo; synchronize pc to main()
+PASS: gdb.base/call-sc.exp: value foo returned; return call-sc-ts
+PASS: gdb.base/call-sc.exp: advance to fun for finish; return call-sc-ts
+PASS: gdb.base/call-sc.exp: zed L for finish; return call-sc-ts
+PASS: gdb.base/call-sc.exp: finish foo; return call-sc-ts
+PASS: gdb.base/call-sc.exp: value foo finished; return call-sc-ts
+PASS: gdb.base/call-sc.exp: return and finish use same convention; return call-sc-ts
+PASS: gdb.base/call-sc.exp: set print sevenbit-strings
+PASS: gdb.base/call-sc.exp: set print address off
+PASS: gdb.base/call-sc.exp: set width 0
+PASS: gdb.base/call-sc.exp: ptype; call-sc-ti (int)
+PASS: gdb.base/call-sc.exp: ptype foo; call-sc-ti int
+PASS: gdb.base/call-sc.exp: p/c fun(); call call-sc-ti
+PASS: gdb.base/call-sc.exp: call Fun(foo); call call-sc-ti
+PASS: gdb.base/call-sc.exp: p/c L; call call-sc-ti
+PASS: gdb.base/call-sc.exp: advance to fun for return; return call-sc-ti
+PASS: gdb.base/call-sc.exp: zed L for return; return call-sc-ti
+PASS: gdb.base/call-sc.exp: return foo; return call-sc-ti
+PASS: gdb.base/call-sc.exp: return foo; synchronize pc to main()
+PASS: gdb.base/call-sc.exp: value foo returned; return call-sc-ti
+PASS: gdb.base/call-sc.exp: advance to fun for finish; return call-sc-ti
+PASS: gdb.base/call-sc.exp: zed L for finish; return call-sc-ti
+PASS: gdb.base/call-sc.exp: finish foo; return call-sc-ti
+PASS: gdb.base/call-sc.exp: value foo finished; return call-sc-ti
+PASS: gdb.base/call-sc.exp: return and finish use same convention; return call-sc-ti
+PASS: gdb.base/call-sc.exp: set print sevenbit-strings
+PASS: gdb.base/call-sc.exp: set print address off
+PASS: gdb.base/call-sc.exp: set width 0
+PASS: gdb.base/call-sc.exp: ptype; call-sc-tl (long int)
+PASS: gdb.base/call-sc.exp: ptype foo; call-sc-tl long int
+PASS: gdb.base/call-sc.exp: p/c fun(); call call-sc-tl
+PASS: gdb.base/call-sc.exp: call Fun(foo); call call-sc-tl
+PASS: gdb.base/call-sc.exp: p/c L; call call-sc-tl
+PASS: gdb.base/call-sc.exp: advance to fun for return; return call-sc-tl
+PASS: gdb.base/call-sc.exp: zed L for return; return call-sc-tl
+PASS: gdb.base/call-sc.exp: return foo; return call-sc-tl
+PASS: gdb.base/call-sc.exp: return foo; synchronize pc to main()
+PASS: gdb.base/call-sc.exp: value foo returned; return call-sc-tl
+PASS: gdb.base/call-sc.exp: advance to fun for finish; return call-sc-tl
+PASS: gdb.base/call-sc.exp: zed L for finish; return call-sc-tl
+PASS: gdb.base/call-sc.exp: finish foo; return call-sc-tl
+PASS: gdb.base/call-sc.exp: value foo finished; return call-sc-tl
+PASS: gdb.base/call-sc.exp: return and finish use same convention; return call-sc-tl
+PASS: gdb.base/call-sc.exp: set print sevenbit-strings
+PASS: gdb.base/call-sc.exp: set print address off
+PASS: gdb.base/call-sc.exp: set width 0
+PASS: gdb.base/call-sc.exp: ptype; call-sc-tll (long long int)
+PASS: gdb.base/call-sc.exp: ptype foo; call-sc-tll long long int
+PASS: gdb.base/call-sc.exp: p/c fun(); call call-sc-tll
+PASS: gdb.base/call-sc.exp: call Fun(foo); call call-sc-tll
+PASS: gdb.base/call-sc.exp: p/c L; call call-sc-tll
+PASS: gdb.base/call-sc.exp: advance to fun for return; return call-sc-tll
+PASS: gdb.base/call-sc.exp: zed L for return; return call-sc-tll
+PASS: gdb.base/call-sc.exp: return foo; return call-sc-tll
+PASS: gdb.base/call-sc.exp: return foo; synchronize pc to main()
+PASS: gdb.base/call-sc.exp: value foo returned; return call-sc-tll
+PASS: gdb.base/call-sc.exp: advance to fun for finish; return call-sc-tll
+PASS: gdb.base/call-sc.exp: zed L for finish; return call-sc-tll
+PASS: gdb.base/call-sc.exp: finish foo; return call-sc-tll
+PASS: gdb.base/call-sc.exp: value foo finished; return call-sc-tll
+PASS: gdb.base/call-sc.exp: return and finish use same convention; return call-sc-tll
+PASS: gdb.base/call-sc.exp: set print sevenbit-strings
+PASS: gdb.base/call-sc.exp: set print address off
+PASS: gdb.base/call-sc.exp: set width 0
+PASS: gdb.base/call-sc.exp: ptype; call-sc-tf (float)
+PASS: gdb.base/call-sc.exp: ptype foo; call-sc-tf float
+PASS: gdb.base/call-sc.exp: p/c fun(); call call-sc-tf
+PASS: gdb.base/call-sc.exp: call Fun(foo); call call-sc-tf
+PASS: gdb.base/call-sc.exp: p/c L; call call-sc-tf
+PASS: gdb.base/call-sc.exp: advance to fun for return; return call-sc-tf
+PASS: gdb.base/call-sc.exp: zed L for return; return call-sc-tf
+PASS: gdb.base/call-sc.exp: return foo; return call-sc-tf
+PASS: gdb.base/call-sc.exp: return foo; synchronize pc to main()
+PASS: gdb.base/call-sc.exp: value foo returned; return call-sc-tf
+PASS: gdb.base/call-sc.exp: advance to fun for finish; return call-sc-tf
+PASS: gdb.base/call-sc.exp: zed L for finish; return call-sc-tf
+PASS: gdb.base/call-sc.exp: finish foo; return call-sc-tf
+PASS: gdb.base/call-sc.exp: value foo finished; return call-sc-tf
+PASS: gdb.base/call-sc.exp: return and finish use same convention; return call-sc-tf
+PASS: gdb.base/call-sc.exp: set print sevenbit-strings
+PASS: gdb.base/call-sc.exp: set print address off
+PASS: gdb.base/call-sc.exp: set width 0
+PASS: gdb.base/call-sc.exp: ptype; call-sc-td (double)
+PASS: gdb.base/call-sc.exp: ptype foo; call-sc-td double
+PASS: gdb.base/call-sc.exp: p/c fun(); call call-sc-td
+PASS: gdb.base/call-sc.exp: call Fun(foo); call call-sc-td
+PASS: gdb.base/call-sc.exp: p/c L; call call-sc-td
+PASS: gdb.base/call-sc.exp: advance to fun for return; return call-sc-td
+PASS: gdb.base/call-sc.exp: zed L for return; return call-sc-td
+PASS: gdb.base/call-sc.exp: return foo; return call-sc-td
+PASS: gdb.base/call-sc.exp: return foo; synchronize pc to main()
+PASS: gdb.base/call-sc.exp: value foo returned; return call-sc-td
+PASS: gdb.base/call-sc.exp: advance to fun for finish; return call-sc-td
+PASS: gdb.base/call-sc.exp: zed L for finish; return call-sc-td
+PASS: gdb.base/call-sc.exp: finish foo; return call-sc-td
+PASS: gdb.base/call-sc.exp: value foo finished; return call-sc-td
+PASS: gdb.base/call-sc.exp: return and finish use same convention; return call-sc-td
+PASS: gdb.base/call-sc.exp: set print sevenbit-strings
+PASS: gdb.base/call-sc.exp: set print address off
+PASS: gdb.base/call-sc.exp: set width 0
+PASS: gdb.base/call-sc.exp: ptype; call-sc-tld (long double)
+PASS: gdb.base/call-sc.exp: ptype foo; call-sc-tld long double
+PASS: gdb.base/call-sc.exp: p/c fun(); call call-sc-tld
+PASS: gdb.base/call-sc.exp: call Fun(foo); call call-sc-tld
+PASS: gdb.base/call-sc.exp: p/c L; call call-sc-tld
+PASS: gdb.base/call-sc.exp: advance to fun for return; return call-sc-tld
+PASS: gdb.base/call-sc.exp: zed L for return; return call-sc-tld
+PASS: gdb.base/call-sc.exp: return foo; return call-sc-tld
+PASS: gdb.base/call-sc.exp: return foo; synchronize pc to main()
+PASS: gdb.base/call-sc.exp: value foo returned; return call-sc-tld
+PASS: gdb.base/call-sc.exp: advance to fun for finish; return call-sc-tld
+PASS: gdb.base/call-sc.exp: zed L for finish; return call-sc-tld
+PASS: gdb.base/call-sc.exp: finish foo; return call-sc-tld
+PASS: gdb.base/call-sc.exp: value foo finished; return call-sc-tld
+PASS: gdb.base/call-sc.exp: return and finish use same convention; return call-sc-tld
+PASS: gdb.base/call-sc.exp: set print sevenbit-strings
+PASS: gdb.base/call-sc.exp: set print address off
+PASS: gdb.base/call-sc.exp: set width 0
+PASS: gdb.base/call-sc.exp: ptype; call-sc-te (enum {e = 49})
+PASS: gdb.base/call-sc.exp: ptype foo; call-sc-te enum {e = 49}
+PASS: gdb.base/call-sc.exp: p/c fun(); call call-sc-te
+PASS: gdb.base/call-sc.exp: call Fun(foo); call call-sc-te
+PASS: gdb.base/call-sc.exp: p/c L; call call-sc-te
+PASS: gdb.base/call-sc.exp: advance to fun for return; return call-sc-te
+PASS: gdb.base/call-sc.exp: zed L for return; return call-sc-te
+PASS: gdb.base/call-sc.exp: return foo; return call-sc-te
+PASS: gdb.base/call-sc.exp: return foo; synchronize pc to main()
+PASS: gdb.base/call-sc.exp: value foo returned; return call-sc-te
+PASS: gdb.base/call-sc.exp: advance to fun for finish; return call-sc-te
+PASS: gdb.base/call-sc.exp: zed L for finish; return call-sc-te
+PASS: gdb.base/call-sc.exp: finish foo; return call-sc-te
+PASS: gdb.base/call-sc.exp: value foo finished; return call-sc-te
+PASS: gdb.base/call-sc.exp: return and finish use same convention; return call-sc-te
+Running ./gdb.base/call-signal-resume.exp ...
+Running ./gdb.base/call-strs.exp ...
+PASS: gdb.base/call-strs.exp: set print sevenbit-strings
+PASS: gdb.base/call-strs.exp: set print address off
+PASS: gdb.base/call-strs.exp: set print symbol off
+PASS: gdb.base/call-strs.exp: set width 0
+PASS: gdb.base/call-strs.exp: step after assignment to s
+PASS: gdb.base/call-strs.exp: next over strcpy
+PASS: gdb.base/call-strs.exp: print buf
+PASS: gdb.base/call-strs.exp: print s
+Running ./gdb.base/catch-load.exp ...
+PASS: gdb.base/catch-load.exp: plain load: set var libname = "catch-load-so.so"
+PASS: gdb.base/catch-load.exp: plain load: set stop-on-solib-events 0
+PASS: gdb.base/catch-load.exp: plain load: catch load
+PASS: gdb.base/catch-load.exp: plain load: continue
+PASS: gdb.base/catch-load.exp: plain load with stop-on-solib-events: set var libname = "catch-load-so.so"
+PASS: gdb.base/catch-load.exp: plain load with stop-on-solib-events: set stop-on-solib-events 1
+PASS: gdb.base/catch-load.exp: plain load with stop-on-solib-events: catch load
+PASS: gdb.base/catch-load.exp: plain load with stop-on-solib-events: continue
+PASS: gdb.base/catch-load.exp: rx load: set var libname = "catch-load-so.so"
+PASS: gdb.base/catch-load.exp: rx load: set stop-on-solib-events 0
+PASS: gdb.base/catch-load.exp: rx load: catch load catch-load-so
+PASS: gdb.base/catch-load.exp: rx load: continue
+PASS: gdb.base/catch-load.exp: rx load with stop-on-solib-events: set var libname = "catch-load-so.so"
+PASS: gdb.base/catch-load.exp: rx load with stop-on-solib-events: set stop-on-solib-events 1
+PASS: gdb.base/catch-load.exp: rx load with stop-on-solib-events: catch load catch-load-so
+PASS: gdb.base/catch-load.exp: rx load with stop-on-solib-events: continue
+PASS: gdb.base/catch-load.exp: non-matching load: set var libname = "catch-load-so.so"
+PASS: gdb.base/catch-load.exp: non-matching load: set stop-on-solib-events 0
+PASS: gdb.base/catch-load.exp: non-matching load: catch load zardoz
+PASS: gdb.base/catch-load.exp: non-matching load: continue
+PASS: gdb.base/catch-load.exp: non-matching load with stop-on-solib-events: set var libname = "catch-load-so.so"
+PASS: gdb.base/catch-load.exp: non-matching load with stop-on-solib-events: set stop-on-solib-events 1
+PASS: gdb.base/catch-load.exp: non-matching load with stop-on-solib-events: catch load zardoz
+PASS: gdb.base/catch-load.exp: non-matching load with stop-on-solib-events: continue
+PASS: gdb.base/catch-load.exp: plain unload: set var libname = "catch-load-so.so"
+PASS: gdb.base/catch-load.exp: plain unload: set stop-on-solib-events 0
+PASS: gdb.base/catch-load.exp: plain unload: catch unload
+PASS: gdb.base/catch-load.exp: plain unload: continue
+PASS: gdb.base/catch-load.exp: plain unload with stop-on-solib-events: set var libname = "catch-load-so.so"
+PASS: gdb.base/catch-load.exp: plain unload with stop-on-solib-events: set stop-on-solib-events 1
+PASS: gdb.base/catch-load.exp: plain unload with stop-on-solib-events: catch unload
+PASS: gdb.base/catch-load.exp: plain unload with stop-on-solib-events: continue
+PASS: gdb.base/catch-load.exp: rx unload: set var libname = "catch-load-so.so"
+PASS: gdb.base/catch-load.exp: rx unload: set stop-on-solib-events 0
+PASS: gdb.base/catch-load.exp: rx unload: catch unload catch-load-so
+PASS: gdb.base/catch-load.exp: rx unload: continue
+PASS: gdb.base/catch-load.exp: rx unload with stop-on-solib-events: set var libname = "catch-load-so.so"
+PASS: gdb.base/catch-load.exp: rx unload with stop-on-solib-events: set stop-on-solib-events 1
+PASS: gdb.base/catch-load.exp: rx unload with stop-on-solib-events: catch unload catch-load-so
+PASS: gdb.base/catch-load.exp: rx unload with stop-on-solib-events: continue
+PASS: gdb.base/catch-load.exp: non-matching unload: set var libname = "catch-load-so.so"
+PASS: gdb.base/catch-load.exp: non-matching unload: set stop-on-solib-events 0
+PASS: gdb.base/catch-load.exp: non-matching unload: catch unload zardoz
+PASS: gdb.base/catch-load.exp: non-matching unload: continue
+PASS: gdb.base/catch-load.exp: non-matching unload with stop-on-solib-events: set var libname = "catch-load-so.so"
+PASS: gdb.base/catch-load.exp: non-matching unload with stop-on-solib-events: set stop-on-solib-events 1
+PASS: gdb.base/catch-load.exp: non-matching unload with stop-on-solib-events: catch unload zardoz
+PASS: gdb.base/catch-load.exp: non-matching unload with stop-on-solib-events: continue
+Running ./gdb.base/catch-signal.exp ...
+PASS: gdb.base/catch-signal.exp: SIGHUP: continue to breakpoint: first HUP
+PASS: gdb.base/catch-signal.exp: SIGHUP: handle SIGHUP nostop noprint pass
+PASS: gdb.base/catch-signal.exp: SIGHUP: catch signal
+PASS: gdb.base/catch-signal.exp: SIGHUP: continue
+PASS: gdb.base/catch-signal.exp: SIGHUP: continue to breakpoint: handle marker
+PASS: gdb.base/catch-signal.exp: SIGHUP: continue to breakpoint: second HUP
+PASS: gdb.base/catch-signal.exp: SIGHUP: catch signal SIGHUP
+PASS: gdb.base/catch-signal.exp: SIGHUP: continue
+PASS: gdb.base/catch-signal.exp: SIGHUP: continue to breakpoint: third HUP
+PASS: gdb.base/catch-signal.exp: SIGHUP: handle SIGUSR1 nostop noprint pass
+PASS: gdb.base/catch-signal.exp: SIGHUP: catch signal SIGUSR1
+PASS: gdb.base/catch-signal.exp: SIGHUP: handle SIGHUP nostop noprint nopass
+PASS: gdb.base/catch-signal.exp: SIGHUP: continue to breakpoint: fourth HUP
+PASS: gdb.base/catch-signal.exp: 1: continue to breakpoint: first HUP
+PASS: gdb.base/catch-signal.exp: 1: handle SIGHUP nostop noprint pass
+PASS: gdb.base/catch-signal.exp: 1: catch signal
+PASS: gdb.base/catch-signal.exp: 1: continue
+PASS: gdb.base/catch-signal.exp: 1: continue to breakpoint: handle marker
+PASS: gdb.base/catch-signal.exp: 1: continue to breakpoint: second HUP
+PASS: gdb.base/catch-signal.exp: 1: catch signal 1
+PASS: gdb.base/catch-signal.exp: 1: continue
+PASS: gdb.base/catch-signal.exp: 1: continue to breakpoint: third HUP
+PASS: gdb.base/catch-signal.exp: 1: handle SIGUSR1 nostop noprint pass
+PASS: gdb.base/catch-signal.exp: 1: catch signal SIGUSR1
+PASS: gdb.base/catch-signal.exp: 1: handle SIGHUP nostop noprint nopass
+PASS: gdb.base/catch-signal.exp: 1: continue to breakpoint: fourth HUP
+PASS: gdb.base/catch-signal.exp: SIGHUP SIGUSR2: continue to breakpoint: first HUP
+PASS: gdb.base/catch-signal.exp: SIGHUP SIGUSR2: handle SIGHUP nostop noprint pass
+PASS: gdb.base/catch-signal.exp: SIGHUP SIGUSR2: catch signal
+PASS: gdb.base/catch-signal.exp: SIGHUP SIGUSR2: continue
+PASS: gdb.base/catch-signal.exp: SIGHUP SIGUSR2: continue to breakpoint: handle marker
+PASS: gdb.base/catch-signal.exp: SIGHUP SIGUSR2: continue to breakpoint: second HUP
+PASS: gdb.base/catch-signal.exp: SIGHUP SIGUSR2: catch signal SIGHUP SIGUSR2
+PASS: gdb.base/catch-signal.exp: SIGHUP SIGUSR2: continue
+PASS: gdb.base/catch-signal.exp: SIGHUP SIGUSR2: continue to breakpoint: third HUP
+PASS: gdb.base/catch-signal.exp: SIGHUP SIGUSR2: handle SIGUSR1 nostop noprint pass
+PASS: gdb.base/catch-signal.exp: SIGHUP SIGUSR2: catch signal SIGUSR1
+PASS: gdb.base/catch-signal.exp: SIGHUP SIGUSR2: handle SIGHUP nostop noprint nopass
+PASS: gdb.base/catch-signal.exp: SIGHUP SIGUSR2: continue to breakpoint: fourth HUP
+PASS: gdb.base/catch-signal.exp: catch signal SIGZARDOZ
+PASS: gdb.base/catch-signal.exp: catch signal all
+PASS: gdb.base/catch-signal.exp: catch signal all SIGHUP
+PASS: gdb.base/catch-signal.exp: catch signal SIGHUP all
+PASS: gdb.base/catch-signal.exp: set catchpoint '' for printing
+PASS: gdb.base/catch-signal.exp: info break for ''
+PASS: gdb.base/catch-signal.exp: save breakpoints for ''
+PASS: gdb.base/catch-signal.exp: results of save breakpoints for ''
+PASS: gdb.base/catch-signal.exp: set catchpoint 'SIGHUP' for printing
+PASS: gdb.base/catch-signal.exp: info break for 'SIGHUP'
+PASS: gdb.base/catch-signal.exp: save breakpoints for 'SIGHUP'
+PASS: gdb.base/catch-signal.exp: results of save breakpoints for 'SIGHUP'
+PASS: gdb.base/catch-signal.exp: set catchpoint 'SIGHUP SIGUSR2' for printing
+PASS: gdb.base/catch-signal.exp: info break for 'SIGHUP SIGUSR2'
+PASS: gdb.base/catch-signal.exp: save breakpoints for 'SIGHUP SIGUSR2'
+PASS: gdb.base/catch-signal.exp: results of save breakpoints for 'SIGHUP SIGUSR2'
+PASS: gdb.base/catch-signal.exp: set catchpoint 'all' for printing
+PASS: gdb.base/catch-signal.exp: info break for 'all'
+PASS: gdb.base/catch-signal.exp: save breakpoints for 'all'
+PASS: gdb.base/catch-signal.exp: results of save breakpoints for 'all'
+Running ./gdb.base/catch-syscall.exp ...
+Running ./gdb.base/charset.exp ...
+PASS: gdb.base/charset.exp: show charset
+PASS: gdb.base/charset.exp: show target-charset
+PASS: gdb.base/charset.exp: check `show target-charset' against `show charset'
+PASS: gdb.base/charset.exp: show host-charset
+PASS: gdb.base/charset.exp: check `show host-charset' against `show charset'
+PASS: gdb.base/charset.exp: try malformed `set charset'
+PASS: gdb.base/charset.exp: try `set host-charset' with invalid charset
+PASS: gdb.base/charset.exp: try `set target-charset' with invalid charset
+PASS: gdb.base/charset.exp: capture valid host charsets
+PASS: gdb.base/charset.exp: capture valid target charsets
+PASS: gdb.base/charset.exp: try `set host-charset ASCII'
+PASS: gdb.base/charset.exp: parse `show charset' after `set host-charset ASCII'
+PASS: gdb.base/charset.exp: check effect of `set host-charset ASCII'
+PASS: gdb.base/charset.exp: try `set target-charset ASCII'
+PASS: gdb.base/charset.exp: parse `show charset' after `set target-charset ASCII'
+PASS: gdb.base/charset.exp: check effect of `set target-charset ASCII'
+PASS: gdb.base/charset.exp: try `set target-charset ISO-8859-1'
+PASS: gdb.base/charset.exp: parse `show charset' after `set target-charset ISO-8859-1'
+PASS: gdb.base/charset.exp: check effect of `set target-charset ISO-8859-1'
+PASS: gdb.base/charset.exp: try `set target-charset EBCDIC-US'
+PASS: gdb.base/charset.exp: parse `show charset' after `set target-charset EBCDIC-US'
+PASS: gdb.base/charset.exp: check effect of `set target-charset EBCDIC-US'
+PASS: gdb.base/charset.exp: try `set target-charset IBM1047'
+PASS: gdb.base/charset.exp: parse `show charset' after `set target-charset IBM1047'
+PASS: gdb.base/charset.exp: check effect of `set target-charset IBM1047'
+PASS: gdb.base/charset.exp: try `set host-charset ISO-8859-1'
+PASS: gdb.base/charset.exp: parse `show charset' after `set host-charset ISO-8859-1'
+PASS: gdb.base/charset.exp: check effect of `set host-charset ISO-8859-1'
+PASS: gdb.base/charset.exp: try `set target-charset ASCII'
+PASS: gdb.base/charset.exp: parse `show charset' after `set target-charset ASCII'
+PASS: gdb.base/charset.exp: check effect of `set target-charset ASCII'
+PASS: gdb.base/charset.exp: try `set target-charset ISO-8859-1'
+PASS: gdb.base/charset.exp: parse `show charset' after `set target-charset ISO-8859-1'
+PASS: gdb.base/charset.exp: check effect of `set target-charset ISO-8859-1'
+PASS: gdb.base/charset.exp: try `set target-charset EBCDIC-US'
+PASS: gdb.base/charset.exp: parse `show charset' after `set target-charset EBCDIC-US'
+PASS: gdb.base/charset.exp: check effect of `set target-charset EBCDIC-US'
+PASS: gdb.base/charset.exp: try `set target-charset IBM1047'
+PASS: gdb.base/charset.exp: parse `show charset' after `set target-charset IBM1047'
+PASS: gdb.base/charset.exp: check effect of `set target-charset IBM1047'
+PASS: gdb.base/charset.exp: try `set host-charset EBCDIC-US'
+PASS: gdb.base/charset.exp: parse `show charset' after `set host-charset EBCDIC-US'
+PASS: gdb.base/charset.exp: check effect of `set host-charset EBCDIC-US'
+PASS: gdb.base/charset.exp: try `set target-charset ASCII'
+PASS: gdb.base/charset.exp: parse `show charset' after `set target-charset ASCII'
+PASS: gdb.base/charset.exp: check effect of `set target-charset ASCII'
+PASS: gdb.base/charset.exp: try `set target-charset ISO-8859-1'
+PASS: gdb.base/charset.exp: parse `show charset' after `set target-charset ISO-8859-1'
+PASS: gdb.base/charset.exp: check effect of `set target-charset ISO-8859-1'
+PASS: gdb.base/charset.exp: try `set target-charset EBCDIC-US'
+PASS: gdb.base/charset.exp: parse `show charset' after `set target-charset EBCDIC-US'
+PASS: gdb.base/charset.exp: check effect of `set target-charset EBCDIC-US'
+PASS: gdb.base/charset.exp: try `set target-charset IBM1047'
+PASS: gdb.base/charset.exp: parse `show charset' after `set target-charset IBM1047'
+PASS: gdb.base/charset.exp: check effect of `set target-charset IBM1047'
+PASS: gdb.base/charset.exp: try `set host-charset IBM1047'
+PASS: gdb.base/charset.exp: parse `show charset' after `set host-charset IBM1047'
+PASS: gdb.base/charset.exp: check effect of `set host-charset IBM1047'
+PASS: gdb.base/charset.exp: try `set target-charset ASCII'
+PASS: gdb.base/charset.exp: parse `show charset' after `set target-charset ASCII'
+PASS: gdb.base/charset.exp: check effect of `set target-charset ASCII'
+PASS: gdb.base/charset.exp: try `set target-charset ISO-8859-1'
+PASS: gdb.base/charset.exp: parse `show charset' after `set target-charset ISO-8859-1'
+PASS: gdb.base/charset.exp: check effect of `set target-charset ISO-8859-1'
+PASS: gdb.base/charset.exp: try `set target-charset EBCDIC-US'
+PASS: gdb.base/charset.exp: parse `show charset' after `set target-charset EBCDIC-US'
+PASS: gdb.base/charset.exp: check effect of `set target-charset EBCDIC-US'
+PASS: gdb.base/charset.exp: try `set target-charset IBM1047'
+PASS: gdb.base/charset.exp: parse `show charset' after `set target-charset IBM1047'
+PASS: gdb.base/charset.exp: check effect of `set target-charset IBM1047'
+PASS: gdb.base/charset.exp: set breakpoint after all strings have been initialized
+PASS: gdb.base/charset.exp: run until all strings have been initialized
+PASS: gdb.base/charset.exp: get integer valueof "sizeof (wchar_t)" (4)
+PASS: gdb.base/charset.exp: set host-charset ASCII
+PASS: gdb.base/charset.exp: set target-charset ASCII
+PASS: gdb.base/charset.exp: print the null character in ASCII
+PASS: gdb.base/charset.exp: print string in ASCII
+PASS: gdb.base/charset.exp: parse character literal in ASCII
+PASS: gdb.base/charset.exp: check value of parsed character literal in ASCII
+PASS: gdb.base/charset.exp: parse string literal in ASCII
+PASS: gdb.base/charset.exp: check value of parsed string literal in ASCII
+PASS: gdb.base/charset.exp: try printing '\a' in ASCII
+PASS: gdb.base/charset.exp: check value of '\a' in ASCII
+PASS: gdb.base/charset.exp: check value of "\a" in ASCII
+PASS: gdb.base/charset.exp: try printing '\b' in ASCII
+PASS: gdb.base/charset.exp: check value of '\b' in ASCII
+PASS: gdb.base/charset.exp: check value of "\b" in ASCII
+PASS: gdb.base/charset.exp: try printing '\f' in ASCII
+PASS: gdb.base/charset.exp: check value of '\f' in ASCII
+PASS: gdb.base/charset.exp: check value of "\f" in ASCII
+PASS: gdb.base/charset.exp: try printing '\n' in ASCII
+PASS: gdb.base/charset.exp: check value of '\n' in ASCII
+PASS: gdb.base/charset.exp: check value of "\n" in ASCII
+PASS: gdb.base/charset.exp: try printing '\r' in ASCII
+PASS: gdb.base/charset.exp: check value of '\r' in ASCII
+PASS: gdb.base/charset.exp: check value of "\r" in ASCII
+PASS: gdb.base/charset.exp: try printing '\t' in ASCII
+PASS: gdb.base/charset.exp: check value of '\t' in ASCII
+PASS: gdb.base/charset.exp: check value of "\t" in ASCII
+PASS: gdb.base/charset.exp: try printing '\v' in ASCII
+PASS: gdb.base/charset.exp: check value of '\v' in ASCII
+PASS: gdb.base/charset.exp: check value of "\v" in ASCII
+PASS: gdb.base/charset.exp: print escape that doesn't exist in ASCII
+PASS: gdb.base/charset.exp: check value of escape that doesn't exist in ASCII
+PASS: gdb.base/charset.exp: set target-charset ISO-8859-1
+PASS: gdb.base/charset.exp: print the null character in ISO-8859-1
+PASS: gdb.base/charset.exp: print string in ISO-8859-1
+PASS: gdb.base/charset.exp: parse character literal in ISO-8859-1
+PASS: gdb.base/charset.exp: check value of parsed character literal in ISO-8859-1
+PASS: gdb.base/charset.exp: parse string literal in ISO-8859-1
+PASS: gdb.base/charset.exp: check value of parsed string literal in ISO-8859-1
+PASS: gdb.base/charset.exp: try printing '\a' in ISO-8859-1
+PASS: gdb.base/charset.exp: check value of '\a' in ISO-8859-1
+PASS: gdb.base/charset.exp: check value of "\a" in ISO-8859-1
+PASS: gdb.base/charset.exp: try printing '\b' in ISO-8859-1
+PASS: gdb.base/charset.exp: check value of '\b' in ISO-8859-1
+PASS: gdb.base/charset.exp: check value of "\b" in ISO-8859-1
+PASS: gdb.base/charset.exp: try printing '\f' in ISO-8859-1
+PASS: gdb.base/charset.exp: check value of '\f' in ISO-8859-1
+PASS: gdb.base/charset.exp: check value of "\f" in ISO-8859-1
+PASS: gdb.base/charset.exp: try printing '\n' in ISO-8859-1
+PASS: gdb.base/charset.exp: check value of '\n' in ISO-8859-1
+PASS: gdb.base/charset.exp: check value of "\n" in ISO-8859-1
+PASS: gdb.base/charset.exp: try printing '\r' in ISO-8859-1
+PASS: gdb.base/charset.exp: check value of '\r' in ISO-8859-1
+PASS: gdb.base/charset.exp: check value of "\r" in ISO-8859-1
+PASS: gdb.base/charset.exp: try printing '\t' in ISO-8859-1
+PASS: gdb.base/charset.exp: check value of '\t' in ISO-8859-1
+PASS: gdb.base/charset.exp: check value of "\t" in ISO-8859-1
+PASS: gdb.base/charset.exp: try printing '\v' in ISO-8859-1
+PASS: gdb.base/charset.exp: check value of '\v' in ISO-8859-1
+PASS: gdb.base/charset.exp: check value of "\v" in ISO-8859-1
+PASS: gdb.base/charset.exp: print escape that doesn't exist in ISO-8859-1
+PASS: gdb.base/charset.exp: check value of escape that doesn't exist in ISO-8859-1
+PASS: gdb.base/charset.exp: set target-charset EBCDIC-US
+PASS: gdb.base/charset.exp: print the null character in EBCDIC-US
+PASS: gdb.base/charset.exp: print string in EBCDIC-US
+PASS: gdb.base/charset.exp: parse character literal in EBCDIC-US
+PASS: gdb.base/charset.exp: check value of parsed character literal in EBCDIC-US
+PASS: gdb.base/charset.exp: parse string literal in EBCDIC-US
+PASS: gdb.base/charset.exp: check value of parsed string literal in EBCDIC-US
+PASS: gdb.base/charset.exp: try printing '\a' in EBCDIC-US
+PASS: gdb.base/charset.exp: check value of '\a' in EBCDIC-US
+PASS: gdb.base/charset.exp: check value of "\a" in EBCDIC-US
+PASS: gdb.base/charset.exp: try printing '\b' in EBCDIC-US
+PASS: gdb.base/charset.exp: check value of '\b' in EBCDIC-US
+PASS: gdb.base/charset.exp: check value of "\b" in EBCDIC-US
+PASS: gdb.base/charset.exp: try printing '\f' in EBCDIC-US
+PASS: gdb.base/charset.exp: check value of '\f' in EBCDIC-US
+PASS: gdb.base/charset.exp: check value of "\f" in EBCDIC-US
+PASS: gdb.base/charset.exp: try printing '\n' in EBCDIC-US
+PASS: gdb.base/charset.exp: check value of '\n' in EBCDIC-US
+PASS: gdb.base/charset.exp: check value of "\n" in EBCDIC-US
+PASS: gdb.base/charset.exp: try printing '\r' in EBCDIC-US
+PASS: gdb.base/charset.exp: check value of '\r' in EBCDIC-US
+PASS: gdb.base/charset.exp: check value of "\r" in EBCDIC-US
+PASS: gdb.base/charset.exp: try printing '\t' in EBCDIC-US
+PASS: gdb.base/charset.exp: check value of '\t' in EBCDIC-US
+PASS: gdb.base/charset.exp: check value of "\t" in EBCDIC-US
+PASS: gdb.base/charset.exp: try printing '\v' in EBCDIC-US
+PASS: gdb.base/charset.exp: check value of '\v' in EBCDIC-US
+PASS: gdb.base/charset.exp: check value of "\v" in EBCDIC-US
+PASS: gdb.base/charset.exp: print escape that doesn't exist in EBCDIC-US
+PASS: gdb.base/charset.exp: check value of escape that doesn't exist in EBCDIC-US
+PASS: gdb.base/charset.exp: set target-charset IBM1047
+PASS: gdb.base/charset.exp: print the null character in IBM1047
+PASS: gdb.base/charset.exp: print string in IBM1047
+PASS: gdb.base/charset.exp: parse character literal in IBM1047
+PASS: gdb.base/charset.exp: check value of parsed character literal in IBM1047
+PASS: gdb.base/charset.exp: parse string literal in IBM1047
+PASS: gdb.base/charset.exp: check value of parsed string literal in IBM1047
+PASS: gdb.base/charset.exp: try printing '\a' in IBM1047
+PASS: gdb.base/charset.exp: check value of '\a' in IBM1047
+PASS: gdb.base/charset.exp: check value of "\a" in IBM1047
+PASS: gdb.base/charset.exp: try printing '\b' in IBM1047
+PASS: gdb.base/charset.exp: check value of '\b' in IBM1047
+PASS: gdb.base/charset.exp: check value of "\b" in IBM1047
+PASS: gdb.base/charset.exp: try printing '\f' in IBM1047
+PASS: gdb.base/charset.exp: check value of '\f' in IBM1047
+PASS: gdb.base/charset.exp: check value of "\f" in IBM1047
+PASS: gdb.base/charset.exp: try printing '\n' in IBM1047
+PASS: gdb.base/charset.exp: check value of '\n' in IBM1047
+PASS: gdb.base/charset.exp: check value of "\n" in IBM1047
+PASS: gdb.base/charset.exp: try printing '\r' in IBM1047
+PASS: gdb.base/charset.exp: check value of '\r' in IBM1047
+PASS: gdb.base/charset.exp: check value of "\r" in IBM1047
+PASS: gdb.base/charset.exp: try printing '\t' in IBM1047
+PASS: gdb.base/charset.exp: check value of '\t' in IBM1047
+PASS: gdb.base/charset.exp: check value of "\t" in IBM1047
+PASS: gdb.base/charset.exp: try printing '\v' in IBM1047
+PASS: gdb.base/charset.exp: check value of '\v' in IBM1047
+PASS: gdb.base/charset.exp: check value of "\v" in IBM1047
+PASS: gdb.base/charset.exp: print escape that doesn't exist in IBM1047
+PASS: gdb.base/charset.exp: check value of escape that doesn't exist in IBM1047
+PASS: gdb.base/charset.exp: set target-wide-charset UTF-32
+PASS: gdb.base/charset.exp: print the null character in UTF-32
+PASS: gdb.base/charset.exp: print string in UTF-32
+PASS: gdb.base/charset.exp: parse character literal in UTF-32
+PASS: gdb.base/charset.exp: check value of parsed character literal in UTF-32
+PASS: gdb.base/charset.exp: parse string literal in UTF-32
+PASS: gdb.base/charset.exp: check value of parsed string literal in UTF-32
+PASS: gdb.base/charset.exp: try printing '\a' in UTF-32
+PASS: gdb.base/charset.exp: check value of '\a' in UTF-32
+PASS: gdb.base/charset.exp: check value of "\a" in UTF-32
+PASS: gdb.base/charset.exp: try printing '\b' in UTF-32
+PASS: gdb.base/charset.exp: check value of '\b' in UTF-32
+PASS: gdb.base/charset.exp: check value of "\b" in UTF-32
+PASS: gdb.base/charset.exp: try printing '\f' in UTF-32
+PASS: gdb.base/charset.exp: check value of '\f' in UTF-32
+PASS: gdb.base/charset.exp: check value of "\f" in UTF-32
+PASS: gdb.base/charset.exp: try printing '\n' in UTF-32
+PASS: gdb.base/charset.exp: check value of '\n' in UTF-32
+PASS: gdb.base/charset.exp: check value of "\n" in UTF-32
+PASS: gdb.base/charset.exp: try printing '\r' in UTF-32
+PASS: gdb.base/charset.exp: check value of '\r' in UTF-32
+PASS: gdb.base/charset.exp: check value of "\r" in UTF-32
+PASS: gdb.base/charset.exp: try printing '\t' in UTF-32
+PASS: gdb.base/charset.exp: check value of '\t' in UTF-32
+PASS: gdb.base/charset.exp: check value of "\t" in UTF-32
+PASS: gdb.base/charset.exp: try printing '\v' in UTF-32
+PASS: gdb.base/charset.exp: check value of '\v' in UTF-32
+PASS: gdb.base/charset.exp: check value of "\v" in UTF-32
+PASS: gdb.base/charset.exp: print escape that doesn't exist in UTF-32
+PASS: gdb.base/charset.exp: check value of escape that doesn't exist in UTF-32
+PASS: gdb.base/charset.exp: set target-charset UTF-8
+PASS: gdb.base/charset.exp: non-representable target character
+PASS: gdb.base/charset.exp: print '\x'
+PASS: gdb.base/charset.exp: print '\u'
+PASS: gdb.base/charset.exp: print '\9'
+PASS: gdb.base/charset.exp: print "\1011"
+PASS: gdb.base/charset.exp: basic wide string concatenation
+PASS: gdb.base/charset.exp: narrow and wide string concatenation
+PASS: gdb.base/charset.exp: wide and narrow string concatenation
+PASS: gdb.base/charset.exp: wide string concatenation with escape
+PASS: gdb.base/charset.exp: concatenate three strings with empty wide string
+PASS: gdb.base/charset.exp: basic wide character
+PASS: gdb.base/charset.exp: get integer valueof "sizeof (char16_t)" (2)
+PASS: gdb.base/charset.exp: basic UTF-16 string concatenation
+PASS: gdb.base/charset.exp: narrow and UTF-16 string concatenation
+PASS: gdb.base/charset.exp: UTF-16 and narrow string concatenation
+PASS: gdb.base/charset.exp: UTF-16 string concatenation with escape
+PASS: gdb.base/charset.exp: concatenate three strings with empty UTF-16 string
+PASS: gdb.base/charset.exp: basic UTF-16 character
+PASS: gdb.base/charset.exp: get integer valueof "sizeof (char32_t)" (4)
+PASS: gdb.base/charset.exp: basic UTF-32 string concatenation
+PASS: gdb.base/charset.exp: narrow and UTF-32 string concatenation
+PASS: gdb.base/charset.exp: UTF-32 and narrow string concatenation
+PASS: gdb.base/charset.exp: UTF-32 string concatenation with escape
+PASS: gdb.base/charset.exp: concatenate three strings with empty UTF-32 string
+PASS: gdb.base/charset.exp: basic UTF-32 character
+PASS: gdb.base/charset.exp: undefined concatenation of wide and UTF-16
+PASS: gdb.base/charset.exp: undefined concatenation of wide and UTF-32
+PASS: gdb.base/charset.exp: typedef to wchar_t
+PASS: gdb.base/charset.exp: undefined concatenation of UTF-16 and UTF-32
+PASS: gdb.base/charset.exp: set up for python printing of utf-16 string
+PASS: gdb.base/charset.exp: extract utf-16 string using python
+PASS: gdb.base/charset.exp: EVAL_SKIP cleanup handling regression test
+PASS: gdb.base/charset.exp: Assign String16 with prefix u
+PASS: gdb.base/charset.exp: Display String String16 with x/hs
+PASS: gdb.base/charset.exp: Assign String32 with prefix U
+PASS: gdb.base/charset.exp: Display String String32 with x/ws
+PASS: gdb.base/charset.exp: Assign String32 with prefix L
+PASS: gdb.base/charset.exp: Display String String32 with x/ws
+PASS: gdb.base/charset.exp: assign string to short array
+PASS: gdb.base/charset.exp: assign string to int array
+PASS: gdb.base/charset.exp: assign string to long array
+Running ./gdb.base/checkpoint.exp ...
+Running ./gdb.base/chng-syms.exp ...
+PASS: gdb.base/chng-syms.exp: setting conditional breakpoint on function
+PASS: gdb.base/chng-syms.exp: continue until exit at breakpoint first time through
+PASS: gdb.base/chng-syms.exp: running with invalidated bpt condition after executable changes
+Running ./gdb.base/code_elim.exp ...
+PASS: gdb.base/code_elim.exp: symbol-file code_elim1
+PASS: gdb.base/code_elim.exp: single psymtabs: test eliminated var my_global_symbol
+PASS: gdb.base/code_elim.exp: single psymtabs: test eliminated var my_static_symbol
+PASS: gdb.base/code_elim.exp: single psymtabs: test eliminated var my_global_func
+PASS: gdb.base/code_elim.exp: single psymtabs: get address of main
+PASS: gdb.base/code_elim.exp: single symtabs: test eliminated var my_global_symbol
+PASS: gdb.base/code_elim.exp: single symtabs: test eliminated var my_static_symbol
+PASS: gdb.base/code_elim.exp: single symtabs: test eliminated var my_global_func
+PASS: gdb.base/code_elim.exp: single symtabs: get address of main
+PASS: gdb.base/code_elim.exp: order1: add-symbol-file code_elim1 0x100000
+PASS: gdb.base/code_elim.exp: order1: add-symbol-file code_elim2 0x200000
+PASS: gdb.base/code_elim.exp: order1: get address of my_global_symbol
+PASS: gdb.base/code_elim.exp: order1: get address of my_static_symbol
+PASS: gdb.base/code_elim.exp: order1: get address of my_global_func
+PASS: gdb.base/code_elim.exp: order1: get address of main
+PASS: gdb.base/code_elim.exp: order2: add-symbol-file code_elim2 0x200000
+PASS: gdb.base/code_elim.exp: order2: add-symbol-file code_elim1 0x100000
+PASS: gdb.base/code_elim.exp: order2: get address of my_global_symbol
+PASS: gdb.base/code_elim.exp: order2: get address of my_static_symbol
+PASS: gdb.base/code_elim.exp: order2: get address of my_global_func
+PASS: gdb.base/code_elim.exp: order2: get address of main
+Running ./gdb.base/code-expr.exp ...
+PASS: gdb.base/code-expr.exp: set print sevenbit-strings
+PASS: gdb.base/code-expr.exp: set print address off
+PASS: gdb.base/code-expr.exp: set width 0
+PASS: gdb.base/code-expr.exp: (@code char)
+PASS: gdb.base/code-expr.exp: (@code signed char)
+PASS: gdb.base/code-expr.exp: (@code unsigned char)
+PASS: gdb.base/code-expr.exp: (@code short)
+PASS: gdb.base/code-expr.exp: (@code signed short)
+PASS: gdb.base/code-expr.exp: (@code unsigned short)
+PASS: gdb.base/code-expr.exp: (@code int)
+PASS: gdb.base/code-expr.exp: (@code signed int)
+PASS: gdb.base/code-expr.exp: (@code unsigned int)
+PASS: gdb.base/code-expr.exp: (@code long)
+PASS: gdb.base/code-expr.exp: (@code signed long)
+PASS: gdb.base/code-expr.exp: (@code unsigned long)
+PASS: gdb.base/code-expr.exp: (@code long long)
+PASS: gdb.base/code-expr.exp: (@code signed long long)
+PASS: gdb.base/code-expr.exp: (@code unsigned long long)
+PASS: gdb.base/code-expr.exp: (@code float)
+PASS: gdb.base/code-expr.exp: (@code double)
+PASS: gdb.base/code-expr.exp: (@data char)
+PASS: gdb.base/code-expr.exp: (@data signed char)
+PASS: gdb.base/code-expr.exp: (@data unsigned char)
+PASS: gdb.base/code-expr.exp: (@data short)
+PASS: gdb.base/code-expr.exp: (@data signed short)
+PASS: gdb.base/code-expr.exp: (@data unsigned short)
+PASS: gdb.base/code-expr.exp: (@data int)
+PASS: gdb.base/code-expr.exp: (@data signed int)
+PASS: gdb.base/code-expr.exp: (@data unsigned int)
+PASS: gdb.base/code-expr.exp: (@data long)
+PASS: gdb.base/code-expr.exp: (@data signed long)
+PASS: gdb.base/code-expr.exp: (@data unsigned long)
+PASS: gdb.base/code-expr.exp: (@data long long)
+PASS: gdb.base/code-expr.exp: (@data signed long long)
+PASS: gdb.base/code-expr.exp: (@data unsigned long long)
+PASS: gdb.base/code-expr.exp: (@data float)
+PASS: gdb.base/code-expr.exp: (@data double)
+PASS: gdb.base/code-expr.exp: (char @code)
+PASS: gdb.base/code-expr.exp: (signed char @code)
+PASS: gdb.base/code-expr.exp: (unsigned char @code)
+PASS: gdb.base/code-expr.exp: (short @code)
+PASS: gdb.base/code-expr.exp: (signed short @code)
+PASS: gdb.base/code-expr.exp: (unsigned short @code)
+PASS: gdb.base/code-expr.exp: (int @code)
+PASS: gdb.base/code-expr.exp: (signed int @code)
+PASS: gdb.base/code-expr.exp: (unsigned int @code)
+PASS: gdb.base/code-expr.exp: (long @code)
+PASS: gdb.base/code-expr.exp: (signed long @code)
+PASS: gdb.base/code-expr.exp: (unsigned long @code)
+PASS: gdb.base/code-expr.exp: (long long @code)
+PASS: gdb.base/code-expr.exp: (signed long long @code)
+PASS: gdb.base/code-expr.exp: (unsigned long long @code)
+PASS: gdb.base/code-expr.exp: (float @code)
+PASS: gdb.base/code-expr.exp: (double @code)
+PASS: gdb.base/code-expr.exp: (char @data)
+PASS: gdb.base/code-expr.exp: (signed char @data)
+PASS: gdb.base/code-expr.exp: (unsigned char @data)
+PASS: gdb.base/code-expr.exp: (short @data)
+PASS: gdb.base/code-expr.exp: (signed short @data)
+PASS: gdb.base/code-expr.exp: (unsigned short @data)
+PASS: gdb.base/code-expr.exp: (int @data)
+PASS: gdb.base/code-expr.exp: (signed int @data)
+PASS: gdb.base/code-expr.exp: (unsigned int @data)
+PASS: gdb.base/code-expr.exp: (long @data)
+PASS: gdb.base/code-expr.exp: (signed long @data)
+PASS: gdb.base/code-expr.exp: (unsigned long @data)
+PASS: gdb.base/code-expr.exp: (long long @data)
+PASS: gdb.base/code-expr.exp: (signed long long @data)
+PASS: gdb.base/code-expr.exp: (unsigned long long @data)
+PASS: gdb.base/code-expr.exp: (float @data)
+PASS: gdb.base/code-expr.exp: (double @data)
+PASS: gdb.base/code-expr.exp: (@code enum misordered)
+PASS: gdb.base/code-expr.exp: (enum misordered @code)
+PASS: gdb.base/code-expr.exp: (@data enum misordered)
+PASS: gdb.base/code-expr.exp: (enum misordered @data)
+PASS: gdb.base/code-expr.exp: (@code int *)
+PASS: gdb.base/code-expr.exp: (int @code *)
+PASS: gdb.base/code-expr.exp: (int * @code)
+PASS: gdb.base/code-expr.exp: (@code int * @code)
+PASS: gdb.base/code-expr.exp: (int @code * @code)
+PASS: gdb.base/code-expr.exp: (@code int **)
+PASS: gdb.base/code-expr.exp: (int @code **)
+PASS: gdb.base/code-expr.exp: (int ** @code)
+PASS: gdb.base/code-expr.exp: (@code int * @code *)
+PASS: gdb.base/code-expr.exp: (int @code * @code *)
+PASS: gdb.base/code-expr.exp: (@code int * @code * @code)
+PASS: gdb.base/code-expr.exp: (int @code * @code * @code)
+PASS: gdb.base/code-expr.exp: (@code struct t_struct)
+PASS: gdb.base/code-expr.exp: (@code union t_union)
+PASS: gdb.base/code-expr.exp: (struct t_struct @code)
+PASS: gdb.base/code-expr.exp: (union t_union @code)
+PASS: gdb.base/code-expr.exp: (@code struct t_struct *)
+PASS: gdb.base/code-expr.exp: (@code union t_union *)
+PASS: gdb.base/code-expr.exp: (struct t_struct @code *)
+PASS: gdb.base/code-expr.exp: (union t_union @code *)
+PASS: gdb.base/code-expr.exp: (struct t_struct * @code)
+PASS: gdb.base/code-expr.exp: (union t_union * @code)
+PASS: gdb.base/code-expr.exp: (@code struct t_struct * @code)
+PASS: gdb.base/code-expr.exp: (@code union t_union * @code)
+PASS: gdb.base/code-expr.exp: (struct t_struct @code * @code)
+PASS: gdb.base/code-expr.exp: (union t_union @code * @code)
+Running ./gdb.base/commands.exp ...
+PASS: gdb.base/commands.exp: set foo in gdbvar_simple_if_test
+PASS: gdb.base/commands.exp: gdbvar_simple_if_test #1
+PASS: gdb.base/commands.exp: gdbvar_simple_if_test #2
+PASS: gdb.base/commands.exp: set foo in gdbvar_simple_while_test
+PASS: gdb.base/commands.exp: gdbvar_simple_while_test #1
+PASS: gdb.base/commands.exp: set foo in gdbvar complex_if_while_test
+PASS: gdb.base/commands.exp: gdbvar_complex_if_while_test #1
+PASS: gdb.base/commands.exp: set foo in user_defined_command_test
+PASS: gdb.base/commands.exp: define mycommand in user_defined_command_test
+PASS: gdb.base/commands.exp: enter commands in user_defined_command_test
+PASS: gdb.base/commands.exp: execute user defined command in user_defined_command_test
+PASS: gdb.base/commands.exp: display user command in user_defined_command_test
+PASS: gdb.base/commands.exp: tried to deprecate non-existing command
+PASS: gdb.base/commands.exp: maintenance deprecate p "new_p" /1/
+PASS: gdb.base/commands.exp: p deprecated warning, with replacement
+PASS: gdb.base/commands.exp: Deprecated warning goes away /1/
+PASS: gdb.base/commands.exp: maintenance deprecate p "new_p" /2/
+PASS: gdb.base/commands.exp: maintenance deprecate print "new_print"
+PASS: gdb.base/commands.exp: both alias and command are deprecated
+PASS: gdb.base/commands.exp: Deprecated warning goes away /2/
+PASS: gdb.base/commands.exp: deprecate long command /1/
+PASS: gdb.base/commands.exp: long command deprecated /1/
+PASS: gdb.base/commands.exp: deprecate long command /2/
+PASS: gdb.base/commands.exp: long command deprecated with no alternative /2/
+PASS: gdb.base/commands.exp: deprecate with no arguments
+PASS: gdb.base/commands.exp: stray_arg0_test #1
+PASS: gdb.base/commands.exp: stray_arg0_test #2
+PASS: gdb.base/commands.exp: stray_arg0_test #3
+PASS: gdb.base/commands.exp: stray_arg0_test #4
+PASS: gdb.base/commands.exp: source file with indented comment
+PASS: gdb.base/commands.exp: recursive source test
+PASS: gdb.base/commands.exp: set $tem in if_commands_test
+PASS: gdb.base/commands.exp: if $tem == 2 - if_commands_test 1
+PASS: gdb.base/commands.exp: break main - if_commands_test 1
+PASS: gdb.base/commands.exp: else - if_commands_test 1
+PASS: gdb.base/commands.exp: break factorial - if_commands_test 1
+PASS: gdb.base/commands.exp: commands - if_commands_test 1
+PASS: gdb.base/commands.exp: silent - if_commands_test 1
+PASS: gdb.base/commands.exp: set $tem = 3 - if_commands_test 1
+PASS: gdb.base/commands.exp: continue - if_commands_test 1
+PASS: gdb.base/commands.exp: first end - if_commands_test 1
+PASS: gdb.base/commands.exp: second end - if_commands_test 1
+PASS: gdb.base/commands.exp: if $tem == 1 - if_commands_test 2
+PASS: gdb.base/commands.exp: break main - if_commands_test 2
+PASS: gdb.base/commands.exp: else - if_commands_test 2
+PASS: gdb.base/commands.exp: break factorial - if_commands_test 2
+PASS: gdb.base/commands.exp: commands - if_commands_test 2
+PASS: gdb.base/commands.exp: silent - if_commands_test 2
+PASS: gdb.base/commands.exp: set $tem = 3 - if_commands_test 2
+PASS: gdb.base/commands.exp: continue - if_commands_test 2
+PASS: gdb.base/commands.exp: first end - if_commands_test 2
+PASS: gdb.base/commands.exp: second end - if_commands_test 2
+PASS: gdb.base/commands.exp: hook-stop 1
+PASS: gdb.base/commands.exp: hook-stop 1a
+PASS: gdb.base/commands.exp: hook-stop 1b
+PASS: gdb.base/commands.exp: main commands 1
+PASS: gdb.base/commands.exp: main commands 1a
+PASS: gdb.base/commands.exp: main commands 1b
+PASS: gdb.base/commands.exp: main commands 1c
+PASS: gdb.base/commands.exp: main commands 2
+PASS: gdb.base/commands.exp: main commands 2a
+PASS: gdb.base/commands.exp: main commands 2b
+PASS: gdb.base/commands.exp: main commands 2c
+PASS: gdb.base/commands.exp: cmd1 error
+PASS: gdb.base/commands.exp: no cmd2
+PASS: gdb.base/commands.exp: define one
+PASS: gdb.base/commands.exp: define hook-one
+PASS: gdb.base/commands.exp: define one in redefine_hook_test
+PASS: gdb.base/commands.exp: enter commands for one redefinition in redefine_hook_test
+PASS: gdb.base/commands.exp: execute one command in redefine_hook_test
+PASS: gdb.base/commands.exp: define backtrace
+PASS: gdb.base/commands.exp: expect response to define backtrace
+PASS: gdb.base/commands.exp: enter commands in redefine_backtrace_test
+PASS: gdb.base/commands.exp: execute backtrace command in redefine_backtrace_test
+PASS: gdb.base/commands.exp: execute bt command in redefine_backtrace_test
+Running ./gdb.base/completion.exp ...
+PASS: gdb.base/completion.exp: complete 'hfgfh'
+PASS: gdb.base/completion.exp: complete 'show output'
+PASS: gdb.base/completion.exp: complete 'show output-'
+PASS: gdb.base/completion.exp: complete 'p'
+PASS: gdb.base/completion.exp: complete 'p '
+PASS: gdb.base/completion.exp: complete 'info t foo'
+PASS: gdb.base/completion.exp: complete 'info t'
+PASS: gdb.base/completion.exp: complete 'info t '
+PASS: gdb.base/completion.exp: complete 'info asdfgh'
+PASS: gdb.base/completion.exp: complete 'info asdfgh '
+PASS: gdb.base/completion.exp: complete 'info'
+PASS: gdb.base/completion.exp: complete 'info '
+PASS: gdb.base/completion.exp: complete (2) 'info '
+PASS: gdb.base/completion.exp: complete 'help info wat'
+PASS: gdb.base/completion.exp: complete 'p "break1'
+XFAIL: gdb.base/completion.exp: complete 'p "break1.'
+PASS: gdb.base/completion.exp: complete 'p 'arg'
+PASS: gdb.base/completion.exp: complete (2) 'p 'arg'
+PASS: gdb.base/completion.exp: complete 'handle signal'
+PASS: gdb.base/completion.exp: complete 'handle keyword'
+PASS: gdb.base/completion.exp: complete help aliases
+PASS: gdb.base/completion.exp: complete 'p no_var_named_this-arg'
+PASS: gdb.base/completion.exp: complete (2) 'p no_var_named_this-arg'
+ERROR: internal buffer is full.
+UNRESOLVED: gdb.base/completion.exp: complete (2) 'p no_var_named_this-'
+ERROR: internal buffer is full.
+UNRESOLVED: gdb.base/completion.exp: complete 'p values[0].a'
+ERROR: internal buffer is full.
+UNRESOLVED: gdb.base/completion.exp: complete 'p values[0] . a'
+ERROR: internal buffer is full.
+UNRESOLVED: gdb.base/completion.exp: complete 'p &values[0] -> a'
+ERROR: internal buffer is full.
+UNRESOLVED: gdb.base/completion.exp: completion of field in anonymous union
+ERROR: internal buffer is full.
+UNRESOLVED: gdb.base/completion.exp: ptype completion of field in anonymous union
+ERROR: internal buffer is full.
+UNRESOLVED: gdb.base/completion.exp: whatis completion of field in anonymous union
+PASS: gdb.base/completion.exp: cd to ${srcdir}
+PASS: gdb.base/completion.exp: directory completion
+PASS: gdb.base/completion.exp: directory completion 2
+PASS: gdb.base/completion.exp: Glob remaining of directory test
+PASS: gdb.base/completion.exp: complete-command 'file ./gdb.base/compl'
+PASS: gdb.base/completion.exp: complete 'file ./gdb.base/complet'
+PASS: gdb.base/completion.exp: complete 'info func marke'
+PASS: gdb.base/completion.exp: complete 'set follow-fork-mode'
+PASS: gdb.base/completion.exp: field completion with invalid field
+PASS: gdb.base/completion.exp: test non-deprecated completion
+PASS: gdb.base/completion.exp: test deprecated completion
+PASS: gdb.base/completion.exp: complete ptype struct some_
+PASS: gdb.base/completion.exp: complete ptype enum some_
+PASS: gdb.base/completion.exp: complete ptype union some_
+PASS: gdb.base/completion.exp: complete set gnutarget aut
+PASS: gdb.base/completion.exp: complete set cp-abi aut
+Running ./gdb.base/complex.exp ...
+PASS: gdb.base/complex.exp: print complex packed value in C
+PASS: gdb.base/complex.exp: print complex value in C
+Running ./gdb.base/comprdebug.exp ...
+PASS: gdb.base/comprdebug.exp: file comprdebug0.o
+Running ./gdb.base/condbreak.exp ...
+PASS: gdb.base/condbreak.exp: breakpoint function
+PASS: gdb.base/condbreak.exp: break marker1 if 1==1
+PASS: gdb.base/condbreak.exp: delete 2
+PASS: gdb.base/condbreak.exp: break break.c:92 if 1==1
+PASS: gdb.base/condbreak.exp: delete 3
+PASS: gdb.base/condbreak.exp: break marker1 if (1==1)
+PASS: gdb.base/condbreak.exp: break break.c:92 if (1==1)
+PASS: gdb.base/condbreak.exp: break marker2 if (a==43)
+PASS: gdb.base/condbreak.exp: break marker3 if (multi_line_if_conditional(1,1,1)==0)
+PASS: gdb.base/condbreak.exp: break marker4
+PASS: gdb.base/condbreak.exp: breakpoint info
+PASS: gdb.base/condbreak.exp: rerun to main
+PASS: gdb.base/condbreak.exp: run until breakpoint set at a line number
+PASS: gdb.base/condbreak.exp: run until breakpoint at marker1
+PASS: gdb.base/condbreak.exp: run until breakpoint at marker2
+PASS: gdb.base/condbreak.exp: break main if (1==1) thread 999
+PASS: gdb.base/condbreak.exp: break main thread 999 if (1==1)
+PASS: gdb.base/condbreak.exp: break *main if (1==1) thread 999
+PASS: gdb.base/condbreak.exp: break *main thread 999 if (1==1)
+PASS: gdb.base/condbreak.exp: break *main if (1==1) task 999
+PASS: gdb.base/condbreak.exp: break *main task 999 if (1==1)
+PASS: gdb.base/condbreak.exp: break *main if (1==1) t 999
+PASS: gdb.base/condbreak.exp: break *main if (1==1) th 999
+PASS: gdb.base/condbreak.exp: break *main if (1==1) ta 999
+PASS: gdb.base/condbreak.exp: run until breakpoint at marker3
+PASS: gdb.base/condbreak.exp: run until breakpoint at marker4
+PASS: gdb.base/condbreak.exp: complete cond 1
+PASS: gdb.base/condbreak.exp: set variable $var = 1
+PASS: gdb.base/condbreak.exp: complete cond $v
+PASS: gdb.base/condbreak.exp: complete cond 1 values[0].a
+Running ./gdb.base/cond-eval-mode.exp ...
+PASS: gdb.base/cond-eval-mode.exp: set breakpoint condition-evaluation host
+PASS: gdb.base/cond-eval-mode.exp: set breakpoint condition-evaluation auto
+PASS: gdb.base/cond-eval-mode.exp: set breakpoint condition-evaluation target
+Running ./gdb.base/cond-expr.exp ...
+PASS: gdb.base/cond-expr.exp: print value of cond expr (const true)
+PASS: gdb.base/cond-expr.exp: print value of cond expr (const false)
+PASS: gdb.base/cond-expr.exp: set variable x=14
+PASS: gdb.base/cond-expr.exp: set variable y=2
+PASS: gdb.base/cond-expr.exp: set variable z=3
+PASS: gdb.base/cond-expr.exp: print value of cond expr (var true)
+PASS: gdb.base/cond-expr.exp: set variable x=0
+PASS: gdb.base/cond-expr.exp: print value of cond expr (var false)
+PASS: gdb.base/cond-expr.exp: print whatis of cond expr
+Running ./gdb.base/consecutive.exp ...
+PASS: gdb.base/consecutive.exp: continue to breakpoint in foo
+PASS: gdb.base/consecutive.exp: get breakpoint address for foo
+PASS: gdb.base/consecutive.exp: set bp, 2nd instr
+PASS: gdb.base/consecutive.exp: stopped at bp, 2nd instr
+Running ./gdb.base/constvars.exp ...
+PASS: gdb.base/constvars.exp: break marker1
+PASS: gdb.base/constvars.exp: continue to marker1
+PASS: gdb.base/constvars.exp: up from marker1
+PASS: gdb.base/constvars.exp: ptype qux1
+PASS: gdb.base/constvars.exp: print lave
+PASS: gdb.base/constvars.exp: ptype lave
+PASS: gdb.base/constvars.exp: print lavish
+PASS: gdb.base/constvars.exp: ptype lavish
+PASS: gdb.base/constvars.exp: print lax
+PASS: gdb.base/constvars.exp: ptype lax
+PASS: gdb.base/constvars.exp: print lecherous
+PASS: gdb.base/constvars.exp: ptype lecherous
+PASS: gdb.base/constvars.exp: print lechery
+PASS: gdb.base/constvars.exp: ptype lechery
+PASS: gdb.base/constvars.exp: print lectern
+PASS: gdb.base/constvars.exp: ptype lectern
+PASS: gdb.base/constvars.exp: print leeway
+PASS: gdb.base/constvars.exp: ptype leeway
+PASS: gdb.base/constvars.exp: print legacy
+PASS: gdb.base/constvars.exp: ptype legacy
+PASS: gdb.base/constvars.exp: print laconic
+PASS: gdb.base/constvars.exp: ptype laconic
+PASS: gdb.base/constvars.exp: print laggard
+PASS: gdb.base/constvars.exp: ptype laggard
+PASS: gdb.base/constvars.exp: print lagoon
+PASS: gdb.base/constvars.exp: ptype lagoon
+PASS: gdb.base/constvars.exp: print laity
+PASS: gdb.base/constvars.exp: ptype laity
+PASS: gdb.base/constvars.exp: print lambent
+PASS: gdb.base/constvars.exp: ptype lambent
+PASS: gdb.base/constvars.exp: print laminated
+PASS: gdb.base/constvars.exp: ptype laminated
+PASS: gdb.base/constvars.exp: print lampoon
+PASS: gdb.base/constvars.exp: ptype lampoon
+PASS: gdb.base/constvars.exp: print languid
+PASS: gdb.base/constvars.exp: ptype languid
+PASS: gdb.base/constvars.exp: print *legend
+PASS: gdb.base/constvars.exp: ptype legend
+PASS: gdb.base/constvars.exp: print *legerdemain
+PASS: gdb.base/constvars.exp: ptype legerdemain
+PASS: gdb.base/constvars.exp: print *leniency
+PASS: gdb.base/constvars.exp: ptype leniency
+PASS: gdb.base/constvars.exp: print *leonine
+PASS: gdb.base/constvars.exp: ptype leonine
+PASS: gdb.base/constvars.exp: print *lesion
+PASS: gdb.base/constvars.exp: ptype lesion
+PASS: gdb.base/constvars.exp: print *lethal
+PASS: gdb.base/constvars.exp: ptype lethal
+PASS: gdb.base/constvars.exp: print *lethargic
+PASS: gdb.base/constvars.exp: ptype lethargic
+PASS: gdb.base/constvars.exp: print *levity
+PASS: gdb.base/constvars.exp: ptype levity
+PASS: gdb.base/constvars.exp: print *lewd
+PASS: gdb.base/constvars.exp: ptype lewd
+PASS: gdb.base/constvars.exp: print *lexicographer
+PASS: gdb.base/constvars.exp: ptype lexicographer
+PASS: gdb.base/constvars.exp: print *lexicon
+PASS: gdb.base/constvars.exp: ptype lexicon
+PASS: gdb.base/constvars.exp: print *liaison
+PASS: gdb.base/constvars.exp: ptype liaison
+PASS: gdb.base/constvars.exp: print *libation
+PASS: gdb.base/constvars.exp: ptype libation
+PASS: gdb.base/constvars.exp: print *libelous
+PASS: gdb.base/constvars.exp: ptype libelous
+PASS: gdb.base/constvars.exp: print *libertine
+PASS: gdb.base/constvars.exp: ptype libertine
+PASS: gdb.base/constvars.exp: print *libidinous
+PASS: gdb.base/constvars.exp: ptype libidinous
+PASS: gdb.base/constvars.exp: print *languish
+PASS: gdb.base/constvars.exp: ptype languish
+PASS: gdb.base/constvars.exp: print *languor
+PASS: gdb.base/constvars.exp: ptype languor
+PASS: gdb.base/constvars.exp: print *lank
+PASS: gdb.base/constvars.exp: ptype lank
+PASS: gdb.base/constvars.exp: print *lapidary
+PASS: gdb.base/constvars.exp: ptype lapidary
+PASS: gdb.base/constvars.exp: print *larceny
+PASS: gdb.base/constvars.exp: ptype larceny
+PASS: gdb.base/constvars.exp: print *largess
+PASS: gdb.base/constvars.exp: ptype largess
+PASS: gdb.base/constvars.exp: print *lascivious
+PASS: gdb.base/constvars.exp: ptype lascivious
+PASS: gdb.base/constvars.exp: print *lassitude
+PASS: gdb.base/constvars.exp: ptype lassitude
+PASS: gdb.base/constvars.exp: print *lamprey
+PASS: gdb.base/constvars.exp: ptype lamprey
+PASS: gdb.base/constvars.exp: print *lariat
+PASS: gdb.base/constvars.exp: ptype lariat
+PASS: gdb.base/constvars.exp: print *laudanum
+PASS: gdb.base/constvars.exp: ptype laudanum
+PASS: gdb.base/constvars.exp: print *lecithin
+PASS: gdb.base/constvars.exp: ptype lecithin
+PASS: gdb.base/constvars.exp: print *leviathan
+PASS: gdb.base/constvars.exp: ptype leviathan
+PASS: gdb.base/constvars.exp: print *libretto
+PASS: gdb.base/constvars.exp: ptype libretto
+PASS: gdb.base/constvars.exp: print *lissome
+PASS: gdb.base/constvars.exp: ptype lissome
+PASS: gdb.base/constvars.exp: print *locust
+PASS: gdb.base/constvars.exp: ptype locust
+PASS: gdb.base/constvars.exp: ptype logical
+PASS: gdb.base/constvars.exp: ptype lugged
+PASS: gdb.base/constvars.exp: ptype luck
+PASS: gdb.base/constvars.exp: ptype lunar
+PASS: gdb.base/constvars.exp: ptype lumen
+PASS: gdb.base/constvars.exp: ptype lurk
+PASS: gdb.base/constvars.exp: ptype lush
+PASS: gdb.base/constvars.exp: ptype lynx
+PASS: gdb.base/constvars.exp: ptype crass
+PASS: gdb.base/constvars.exp: ptype crisp
+Running ./gdb.base/corefile.exp ...
+Running ./gdb.base/ctxobj.exp ...
+PASS: gdb.base/ctxobj.exp: break in get_version functions
+PASS: gdb.base/ctxobj.exp: continue to get_version_1
+PASS: gdb.base/ctxobj.exp: print libctxobj1's this_version_num from partial symtab
+PASS: gdb.base/ctxobj.exp: print libctxobj1's this_version_num from symtab
+PASS: gdb.base/ctxobj.exp: continue to get_version_2
+PASS: gdb.base/ctxobj.exp: print libctxobj2's this_version_num from partial symtab
+PASS: gdb.base/ctxobj.exp: print libctxobj2's this_version_num from symtab
+Running ./gdb.base/cursal.exp ...
+PASS: gdb.base/cursal.exp: set listsize 1
+PASS: gdb.base/cursal.exp: list before run
+PASS: gdb.base/cursal.exp: list in main
+PASS: gdb.base/cursal.exp: list in func2
+PASS: gdb.base/cursal.exp: backtrace
+PASS: gdb.base/cursal.exp: list after backtrace
+PASS: gdb.base/cursal.exp: set listsize 3
+PASS: gdb.base/cursal.exp: list size 3
+Running ./gdb.base/cvexpr.exp ...
+PASS: gdb.base/cvexpr.exp: set print sevenbit-strings
+PASS: gdb.base/cvexpr.exp: set print address off
+PASS: gdb.base/cvexpr.exp: set width 0
+PASS: gdb.base/cvexpr.exp: (const char)
+PASS: gdb.base/cvexpr.exp: (const signed char)
+PASS: gdb.base/cvexpr.exp: (const unsigned char)
+PASS: gdb.base/cvexpr.exp: (const short)
+PASS: gdb.base/cvexpr.exp: (const signed short)
+PASS: gdb.base/cvexpr.exp: (const unsigned short)
+PASS: gdb.base/cvexpr.exp: (const int)
+PASS: gdb.base/cvexpr.exp: (const signed int)
+PASS: gdb.base/cvexpr.exp: (const unsigned int)
+PASS: gdb.base/cvexpr.exp: (const long)
+PASS: gdb.base/cvexpr.exp: (const signed long)
+PASS: gdb.base/cvexpr.exp: (const unsigned long)
+PASS: gdb.base/cvexpr.exp: (const long long)
+PASS: gdb.base/cvexpr.exp: (const signed long long)
+PASS: gdb.base/cvexpr.exp: (const unsigned long long)
+PASS: gdb.base/cvexpr.exp: (const float)
+PASS: gdb.base/cvexpr.exp: (const double)
+PASS: gdb.base/cvexpr.exp: (volatile char)
+PASS: gdb.base/cvexpr.exp: (volatile signed char)
+PASS: gdb.base/cvexpr.exp: (volatile unsigned char)
+PASS: gdb.base/cvexpr.exp: (volatile short)
+PASS: gdb.base/cvexpr.exp: (volatile signed short)
+PASS: gdb.base/cvexpr.exp: (volatile unsigned short)
+PASS: gdb.base/cvexpr.exp: (volatile int)
+PASS: gdb.base/cvexpr.exp: (volatile signed int)
+PASS: gdb.base/cvexpr.exp: (volatile unsigned int)
+PASS: gdb.base/cvexpr.exp: (volatile long)
+PASS: gdb.base/cvexpr.exp: (volatile signed long)
+PASS: gdb.base/cvexpr.exp: (volatile unsigned long)
+PASS: gdb.base/cvexpr.exp: (volatile long long)
+PASS: gdb.base/cvexpr.exp: (volatile signed long long)
+PASS: gdb.base/cvexpr.exp: (volatile unsigned long long)
+PASS: gdb.base/cvexpr.exp: (volatile float)
+PASS: gdb.base/cvexpr.exp: (volatile double)
+PASS: gdb.base/cvexpr.exp: (const volatile int)
+PASS: gdb.base/cvexpr.exp: (volatile const int)
+PASS: gdb.base/cvexpr.exp: (const int volatile)
+PASS: gdb.base/cvexpr.exp: (volatile int const)
+PASS: gdb.base/cvexpr.exp: (int const volatile)
+PASS: gdb.base/cvexpr.exp: (int volatile const)
+PASS: gdb.base/cvexpr.exp: (const volatile int *)
+PASS: gdb.base/cvexpr.exp: (volatile const int *)
+PASS: gdb.base/cvexpr.exp: (const int volatile)
+PASS: gdb.base/cvexpr.exp: (volatile int const *)
+PASS: gdb.base/cvexpr.exp: (int const volatile *)
+PASS: gdb.base/cvexpr.exp: (int volatile const *)
+PASS: gdb.base/cvexpr.exp: (int * const volatile)
+PASS: gdb.base/cvexpr.exp: (int * volatile const)
+PASS: gdb.base/cvexpr.exp: (char const)
+PASS: gdb.base/cvexpr.exp: (signed char const)
+PASS: gdb.base/cvexpr.exp: (unsigned char const)
+PASS: gdb.base/cvexpr.exp: (short const)
+PASS: gdb.base/cvexpr.exp: (signed short const)
+PASS: gdb.base/cvexpr.exp: (unsigned short const)
+PASS: gdb.base/cvexpr.exp: (int const)
+PASS: gdb.base/cvexpr.exp: (signed int const)
+PASS: gdb.base/cvexpr.exp: (unsigned int const)
+PASS: gdb.base/cvexpr.exp: (long const)
+PASS: gdb.base/cvexpr.exp: (signed long const)
+PASS: gdb.base/cvexpr.exp: (unsigned long const)
+PASS: gdb.base/cvexpr.exp: (long long const)
+PASS: gdb.base/cvexpr.exp: (signed long long const)
+PASS: gdb.base/cvexpr.exp: (unsigned long long const)
+PASS: gdb.base/cvexpr.exp: (float const)
+PASS: gdb.base/cvexpr.exp: (double const)
+PASS: gdb.base/cvexpr.exp: (char volatile)
+PASS: gdb.base/cvexpr.exp: (signed char volatile)
+PASS: gdb.base/cvexpr.exp: (unsigned char volatile)
+PASS: gdb.base/cvexpr.exp: (short volatile)
+PASS: gdb.base/cvexpr.exp: (signed short volatile)
+PASS: gdb.base/cvexpr.exp: (unsigned short volatile)
+PASS: gdb.base/cvexpr.exp: (int volatile)
+PASS: gdb.base/cvexpr.exp: (signed int volatile)
+PASS: gdb.base/cvexpr.exp: (unsigned int volatile)
+PASS: gdb.base/cvexpr.exp: (long volatile)
+PASS: gdb.base/cvexpr.exp: (signed long volatile)
+PASS: gdb.base/cvexpr.exp: (unsigned long volatile)
+PASS: gdb.base/cvexpr.exp: (long long volatile)
+PASS: gdb.base/cvexpr.exp: (signed long long volatile)
+PASS: gdb.base/cvexpr.exp: (unsigned long long volatile)
+PASS: gdb.base/cvexpr.exp: (float volatile)
+PASS: gdb.base/cvexpr.exp: (double volatile)
+PASS: gdb.base/cvexpr.exp: (const enum misordered)
+PASS: gdb.base/cvexpr.exp: (enum misordered const)
+PASS: gdb.base/cvexpr.exp: (volatile enum misordered)
+PASS: gdb.base/cvexpr.exp: (enum misordered volatile)
+PASS: gdb.base/cvexpr.exp: (const int *)
+PASS: gdb.base/cvexpr.exp: (int const *)
+PASS: gdb.base/cvexpr.exp: (int * const)
+PASS: gdb.base/cvexpr.exp: (const int * const)
+PASS: gdb.base/cvexpr.exp: (int const * const)
+PASS: gdb.base/cvexpr.exp: (const int **)
+PASS: gdb.base/cvexpr.exp: (int const **)
+PASS: gdb.base/cvexpr.exp: (int ** const)
+PASS: gdb.base/cvexpr.exp: (const int * const *)
+PASS: gdb.base/cvexpr.exp: (int const * const *)
+PASS: gdb.base/cvexpr.exp: (const int * const * const)
+PASS: gdb.base/cvexpr.exp: (int const * const * const)
+PASS: gdb.base/cvexpr.exp: (const struct t_struct)
+PASS: gdb.base/cvexpr.exp: (const union t_union)
+PASS: gdb.base/cvexpr.exp: (struct t_struct const)
+PASS: gdb.base/cvexpr.exp: (union t_union const)
+PASS: gdb.base/cvexpr.exp: (const struct t_struct *)
+PASS: gdb.base/cvexpr.exp: (const union t_union *)
+PASS: gdb.base/cvexpr.exp: (struct t_struct const *)
+PASS: gdb.base/cvexpr.exp: (union t_union const *)
+PASS: gdb.base/cvexpr.exp: (struct t_struct * const)
+PASS: gdb.base/cvexpr.exp: (union t_union * const)
+PASS: gdb.base/cvexpr.exp: (const struct t_struct * const)
+PASS: gdb.base/cvexpr.exp: (const union t_union * const)
+PASS: gdb.base/cvexpr.exp: (struct t_struct const * const)
+PASS: gdb.base/cvexpr.exp: (union t_union const * const)
+Running ./gdb.base/dbx.exp ...
+PASS: gdb.base/dbx.exp: stop in main
+PASS: gdb.base/dbx.exp: status
+PASS: gdb.base/dbx.exp: stop at average.c:43
+PASS: gdb.base/dbx.exp: stop in average.c:43
+PASS: gdb.base/dbx.exp: stop at main
+PASS: gdb.base/dbx.exp: running to main
+PASS: gdb.base/dbx.exp: assign first
+PASS: gdb.base/dbx.exp: print first
+PASS: gdb.base/dbx.exp: whereis my_list
+PASS: gdb.base/dbx.exp: file average.c:1
+PASS: gdb.base/dbx.exp: cont 1
+PASS: gdb.base/dbx.exp: step
+XFAIL: gdb.base/dbx.exp: func sum
+PASS: gdb.base/dbx.exp: stop in sum
+PASS: gdb.base/dbx.exp: cont 2
+XFAIL: gdb.base/dbx.exp: func print_average
+Running ./gdb.base/debug-expr.exp ...
+PASS: gdb.base/debug-expr.exp: set variable array[0] = 0
+PASS: gdb.base/debug-expr.exp: set variable array[1] = 1
+PASS: gdb.base/debug-expr.exp: set variable array[2] = 2
+PASS: gdb.base/debug-expr.exp: set variable array[3] = 3
+PASS: gdb.base/debug-expr.exp: set debug expression 1
+PASS: gdb.base/debug-expr.exp: print /x {char[4]} array
+Running ./gdb.base/default.exp ...
+PASS: gdb.base/default.exp: add-symbol-file
+PASS: gdb.base/default.exp: append
+PASS: gdb.base/default.exp: append binary
+PASS: gdb.base/default.exp: append memory
+PASS: gdb.base/default.exp: append value
+PASS: gdb.base/default.exp: append binary memory
+PASS: gdb.base/default.exp: append binary value
+WARNING: Skipping backtrace and break tests because of GDB stub.
+PASS: gdb.base/default.exp: continue
+PASS: gdb.base/default.exp: continue "c" abbreviation
+PASS: gdb.base/default.exp: call
+PASS: gdb.base/default.exp: catch
+PASS: gdb.base/default.exp: cd
+PASS: gdb.base/default.exp: clear
+PASS: gdb.base/default.exp: commands
+PASS: gdb.base/default.exp: condition
+PASS: gdb.base/default.exp: core-file
+PASS: gdb.base/default.exp: delete "d" abbreviation
+PASS: gdb.base/default.exp: delete
+PASS: gdb.base/default.exp: define
+PASS: gdb.base/default.exp: delete breakpoints
+PASS: gdb.base/default.exp: delete display prompt
+PASS: gdb.base/default.exp: detach
+PASS: gdb.base/default.exp: directory prompt
+PASS: gdb.base/default.exp: disable "dis" abbreviation
+PASS: gdb.base/default.exp: disable "disa" abbreviation
+PASS: gdb.base/default.exp: disable
+PASS: gdb.base/default.exp: disable breakpoints
+PASS: gdb.base/default.exp: disable display
+PASS: gdb.base/default.exp: disassemble
+PASS: gdb.base/default.exp: display
+PASS: gdb.base/default.exp: do
+PASS: gdb.base/default.exp: document
+PASS: gdb.base/default.exp: down
+PASS: gdb.base/default.exp: down-silently
+PASS: gdb.base/default.exp: dump
+PASS: gdb.base/default.exp: dump binary
+PASS: gdb.base/default.exp: dump ihex
+PASS: gdb.base/default.exp: dump memory
+PASS: gdb.base/default.exp: dump srec
+PASS: gdb.base/default.exp: dump tekhex
+PASS: gdb.base/default.exp: dump value
+PASS: gdb.base/default.exp: dump binary memory
+PASS: gdb.base/default.exp: dump binary value
+PASS: gdb.base/default.exp: dump ihex memory
+PASS: gdb.base/default.exp: dump ihex value
+PASS: gdb.base/default.exp: dump srec memory
+PASS: gdb.base/default.exp: dump srec value
+PASS: gdb.base/default.exp: dump tekhex memory
+PASS: gdb.base/default.exp: dump tekhex value
+PASS: gdb.base/default.exp: echo
+PASS: gdb.base/default.exp: enable breakpoints delete
+PASS: gdb.base/default.exp: enable breakpoints once
+PASS: gdb.base/default.exp: enable breakpoints
+PASS: gdb.base/default.exp: enable delete
+PASS: gdb.base/default.exp: enable display
+PASS: gdb.base/default.exp: enable once
+PASS: gdb.base/default.exp: enable
+PASS: gdb.base/default.exp: exec-file
+PASS: gdb.base/default.exp: frame "f" abbreviation
+PASS: gdb.base/default.exp: frame
+PASS: gdb.base/default.exp: fg
+PASS: gdb.base/default.exp: file
+PASS: gdb.base/default.exp: finish
+PASS: gdb.base/default.exp: forward-search
+PASS: gdb.base/default.exp: gcore
+PASS: gdb.base/default.exp: generate-core-file
+PASS: gdb.base/default.exp: help "h" abbreviation
+PASS: gdb.base/default.exp: help
+PASS: gdb.base/default.exp: handle
+PASS: gdb.base/default.exp: info "i" abbreviation
+PASS: gdb.base/default.exp: info
+PASS: gdb.base/default.exp: ignore
+PASS: gdb.base/default.exp: info address
+PASS: gdb.base/default.exp: info all-registers
+PASS: gdb.base/default.exp: info args
+PASS: gdb.base/default.exp: info bogus-gdb-command
+PASS: gdb.base/default.exp: info breakpoints
+PASS: gdb.base/default.exp: info copying
+PASS: gdb.base/default.exp: info display
+PASS: gdb.base/default.exp: info frame "f" abbreviation
+PASS: gdb.base/default.exp: info frame
+PASS: gdb.base/default.exp: info files
+PASS: gdb.base/default.exp: info float
+PASS: gdb.base/default.exp: info functions
+PASS: gdb.base/default.exp: info locals
+PASS: gdb.base/default.exp: info program
+PASS: gdb.base/default.exp: info registers
+PASS: gdb.base/default.exp: info stack "s" abbreviation
+PASS: gdb.base/default.exp: info stack
+PASS: gdb.base/default.exp: info set
+PASS: gdb.base/default.exp: info symbol
+PASS: gdb.base/default.exp: info source
+PASS: gdb.base/default.exp: info sources
+PASS: gdb.base/default.exp: info target
+PASS: gdb.base/default.exp: info terminal
+PASS: gdb.base/default.exp: info threads
+PASS: gdb.base/default.exp: info types
+PASS: gdb.base/default.exp: info variables
+PASS: gdb.base/default.exp: info vector
+PASS: gdb.base/default.exp: info warranty
+PASS: gdb.base/default.exp: info watchpoints
+PASS: gdb.base/default.exp: inspect
+PASS: gdb.base/default.exp: jump
+PASS: gdb.base/default.exp: kill
+PASS: gdb.base/default.exp: list "l" abbreviation
+PASS: gdb.base/default.exp: list
+PASS: gdb.base/default.exp: load
+PASS: gdb.base/default.exp: next "n" abbreviation
+PASS: gdb.base/default.exp: next
+PASS: gdb.base/default.exp: nexti "ni" abbreviation
+PASS: gdb.base/default.exp: nexti
+PASS: gdb.base/default.exp: output
+PASS: gdb.base/default.exp: overlay
+PASS: gdb.base/default.exp: overlay on
+PASS: gdb.base/default.exp: overlay manual #1
+PASS: gdb.base/default.exp: overlay auto
+PASS: gdb.base/default.exp: overlay off
+PASS: gdb.base/default.exp: overlay list
+PASS: gdb.base/default.exp: overlay map #1
+PASS: gdb.base/default.exp: overlay unmap #1
+PASS: gdb.base/default.exp: overlay manual #2
+PASS: gdb.base/default.exp: overlay map #2
+PASS: gdb.base/default.exp: overlay unmap #2
+PASS: gdb.base/default.exp: print "p" abbreviation
+PASS: gdb.base/default.exp: print
+PASS: gdb.base/default.exp: printf
+PASS: gdb.base/default.exp: ptype
+PASS: gdb.base/default.exp: pwd
+PASS: gdb.base/default.exp: rbreak
+PASS: gdb.base/default.exp: restore
+PASS: gdb.base/default.exp: return
+PASS: gdb.base/default.exp: reverse-search
+PASS: gdb.base/default.exp: step "s" abbreviation #1
+PASS: gdb.base/default.exp: step #1
+PASS: gdb.base/default.exp: search
+PASS: gdb.base/default.exp: section
+PASS: gdb.base/default.exp: set annotate
+PASS: gdb.base/default.exp: set args
+PASS: gdb.base/default.exp: set check "c" abbreviation
+PASS: gdb.base/default.exp: set check "ch" abbreviation
+PASS: gdb.base/default.exp: set check "check" abbreviation
+PASS: gdb.base/default.exp: set check range
+PASS: gdb.base/default.exp: set check type
+PASS: gdb.base/default.exp: set complaints
+PASS: gdb.base/default.exp: set confirm
+PASS: gdb.base/default.exp: set environment
+PASS: gdb.base/default.exp: set height
+PASS: gdb.base/default.exp: set history expansion
+PASS: gdb.base/default.exp: set history filename
+PASS: gdb.base/default.exp: set history save
+PASS: gdb.base/default.exp: set history size
+PASS: gdb.base/default.exp: set history
+PASS: gdb.base/default.exp: set language
+PASS: gdb.base/default.exp: set listsize
+PASS: gdb.base/default.exp: set print "p" abbreviation
+PASS: gdb.base/default.exp: set print "pr" abbreviation
+PASS: gdb.base/default.exp: set print
+PASS: gdb.base/default.exp: set print address
+PASS: gdb.base/default.exp: set print array
+PASS: gdb.base/default.exp: set print asm-demangle
+PASS: gdb.base/default.exp: set print demangle
+PASS: gdb.base/default.exp: set print elements
+PASS: gdb.base/default.exp: set print object
+PASS: gdb.base/default.exp: set print pretty
+PASS: gdb.base/default.exp: set print sevenbit-strings
+PASS: gdb.base/default.exp: set print union
+PASS: gdb.base/default.exp: set print vtbl
+PASS: gdb.base/default.exp: set radix
+PASS: gdb.base/default.exp: set variable
+PASS: gdb.base/default.exp: set verbose
+PASS: gdb.base/default.exp: set width
+PASS: gdb.base/default.exp: set write
+PASS: gdb.base/default.exp: set
+PASS: gdb.base/default.exp: shell echo Hi dad!
+PASS: gdb.base/default.exp: show annotate
+PASS: gdb.base/default.exp: show args
+PASS: gdb.base/default.exp: show check "c" abbreviation
+PASS: gdb.base/default.exp: show check "ch" abbreviation
+PASS: gdb.base/default.exp: show check "check" abbreviation
+PASS: gdb.base/default.exp: show check range
+PASS: gdb.base/default.exp: show check type
+PASS: gdb.base/default.exp: show commands
+PASS: gdb.base/default.exp: show complaints
+PASS: gdb.base/default.exp: show confirm
+PASS: gdb.base/default.exp: show convenience
+PASS: gdb.base/default.exp: show directories
+PASS: gdb.base/default.exp: show editing
+PASS: gdb.base/default.exp: show height
+PASS: gdb.base/default.exp: show history expansion
+PASS: gdb.base/default.exp: show history filename
+PASS: gdb.base/default.exp: show history save
+PASS: gdb.base/default.exp: show history size
+PASS: gdb.base/default.exp: show history
+PASS: gdb.base/default.exp: show language
+PASS: gdb.base/default.exp: show listsize
+PASS: gdb.base/default.exp: show p
+PASS: gdb.base/default.exp: show pr
+PASS: gdb.base/default.exp: show print
+PASS: gdb.base/default.exp: show paths
+PASS: gdb.base/default.exp: show print address
+PASS: gdb.base/default.exp: show print array
+PASS: gdb.base/default.exp: show print asm-demangle
+PASS: gdb.base/default.exp: show print demangle
+PASS: gdb.base/default.exp: show print elements
+PASS: gdb.base/default.exp: show print object
+PASS: gdb.base/default.exp: show print pretty
+PASS: gdb.base/default.exp: show print sevenbit-strings
+PASS: gdb.base/default.exp: show print union
+PASS: gdb.base/default.exp: show print vtbl
+PASS: gdb.base/default.exp: show prompt
+PASS: gdb.base/default.exp: show radix
+PASS: gdb.base/default.exp: show user
+PASS: gdb.base/default.exp: show values
+PASS: gdb.base/default.exp: show verbose
+PASS: gdb.base/default.exp: show version
+PASS: gdb.base/default.exp: show width
+PASS: gdb.base/default.exp: show write
+PASS: gdb.base/default.exp: show
+PASS: gdb.base/default.exp: stepi "si" abbreviation
+PASS: gdb.base/default.exp: stepi
+PASS: gdb.base/default.exp: signal
+PASS: gdb.base/default.exp: source
+PASS: gdb.base/default.exp: step "s" abbreviation #2
+PASS: gdb.base/default.exp: step #2
+PASS: gdb.base/default.exp: symbol-file
+PASS: gdb.base/default.exp: target child
+PASS: gdb.base/default.exp: target procfs
+PASS: gdb.base/default.exp: target core
+PASS: gdb.base/default.exp: target exec
+PASS: gdb.base/default.exp: target remote
+PASS: gdb.base/default.exp: target
+PASS: gdb.base/default.exp: tbreak
+PASS: gdb.base/default.exp: thread
+PASS: gdb.base/default.exp: thread apply
+PASS: gdb.base/default.exp: thread find
+PASS: gdb.base/default.exp: thread name
+PASS: gdb.base/default.exp: tty
+PASS: gdb.base/default.exp: until "u" abbreviation
+PASS: gdb.base/default.exp: until
+PASS: gdb.base/default.exp: undisplay prompt
+PASS: gdb.base/default.exp: unset environment prompt
+PASS: gdb.base/default.exp: unset
+PASS: gdb.base/default.exp: up-silently
+PASS: gdb.base/default.exp: watch
+PASS: gdb.base/default.exp: whatis
+PASS: gdb.base/default.exp: where
+PASS: gdb.base/default.exp: x
+Running ./gdb.base/define.exp ...
+PASS: gdb.base/define.exp: define user command: nextwhere
+PASS: gdb.base/define.exp: use user command: nextwhere
+PASS: gdb.base/define.exp: define user command: nextwh
+PASS: gdb.base/define.exp: redefine user command aborted: nextwhere
+PASS: gdb.base/define.exp: redefine user command: nextwhere
+PASS: gdb.base/define.exp: redocumenting builtin command disallowed
+PASS: gdb.base/define.exp: document user command: nextwhere
+PASS: gdb.base/define.exp: re-document user command: nextwhere
+PASS: gdb.base/define.exp: help user command: nextwhere
+PASS: gdb.base/define.exp: set up whitespace in help string
+PASS: gdb.base/define.exp: preserve whitespace in help string
+PASS: gdb.base/define.exp: define user command: ifnospace
+PASS: gdb.base/define.exp: test ifnospace is parsed correctly
+PASS: gdb.base/define.exp: define user command: whilenospace
+PASS: gdb.base/define.exp: test whilenospace is parsed correctly
+PASS: gdb.base/define.exp: define user command: user-bt
+PASS: gdb.base/define.exp: define hook-stop command
+PASS: gdb.base/define.exp: use hook-stop command
+PASS: gdb.base/define.exp: define hook undefined command aborted: bar
+PASS: gdb.base/define.exp: define hook undefined command: bar
+PASS: gdb.base/define.exp: define target testsuite
+PASS: gdb.base/define.exp: document target testsuite
+PASS: gdb.base/define.exp: help target
+PASS: gdb.base/define.exp: target testsuite
+PASS: gdb.base/define.exp: show user target testsuite
+PASS: gdb.base/define.exp: define target hook-testsuite
+PASS: gdb.base/define.exp: define target hookpost-testsuite
+PASS: gdb.base/define.exp: target testsuite with hooks
+PASS: gdb.base/define.exp: set gdb_prompt
+PASS: gdb.base/define.exp: reset gdb_prompt
+Running ./gdb.base/del.exp ...
+PASS: gdb.base/del.exp: Remove all breakpoints (del)
+PASS: gdb.base/del.exp: info break after removing break on main
+PASS: gdb.base/del.exp: breakpoint insertion (del)
+PASS: gdb.base/del.exp: Remove last breakpoint (del)
+PASS: gdb.base/del.exp: info break after removing break on main (del)
+PASS: gdb.base/del.exp: Remove all breakpoints (d)
+PASS: gdb.base/del.exp: info break after removing break on main
+PASS: gdb.base/del.exp: breakpoint insertion (d)
+PASS: gdb.base/del.exp: Remove last breakpoint (d)
+PASS: gdb.base/del.exp: info break after removing break on main (d)
+Running ./gdb.base/detach.exp ...
+Running ./gdb.base/dfp-exprs.exp ...
+PASS: gdb.base/dfp-exprs.exp: p 1.2df
+PASS: gdb.base/dfp-exprs.exp: p -1.2df
+PASS: gdb.base/dfp-exprs.exp: p 1.234567df
+PASS: gdb.base/dfp-exprs.exp: p -1.234567df
+PASS: gdb.base/dfp-exprs.exp: p 1234567.df
+PASS: gdb.base/dfp-exprs.exp: p -1234567.df
+PASS: gdb.base/dfp-exprs.exp: p 1.2E1df
+PASS: gdb.base/dfp-exprs.exp: p 1.2E10df
+PASS: gdb.base/dfp-exprs.exp: p 1.2E-10df
+PASS: gdb.base/dfp-exprs.exp: p 1.2E96df
+PASS: gdb.base/dfp-exprs.exp: p 1.2dd
+PASS: gdb.base/dfp-exprs.exp: p -1.2dd
+PASS: gdb.base/dfp-exprs.exp: p 1.234567890123456dd
+PASS: gdb.base/dfp-exprs.exp: p -1.234567890123456dd
+PASS: gdb.base/dfp-exprs.exp: p 1234567890123456.dd
+PASS: gdb.base/dfp-exprs.exp: p -1234567890123456.dd
+PASS: gdb.base/dfp-exprs.exp: p 1.2E1dd
+PASS: gdb.base/dfp-exprs.exp: p 1.2E10dd
+PASS: gdb.base/dfp-exprs.exp: p 1.2E-10dd
+PASS: gdb.base/dfp-exprs.exp: p 1.2E384dd
+PASS: gdb.base/dfp-exprs.exp: p 1.2dl
+PASS: gdb.base/dfp-exprs.exp: p -1.2dl
+PASS: gdb.base/dfp-exprs.exp: p 1.234567890123456789012345678901234dl
+PASS: gdb.base/dfp-exprs.exp: p -1.234567890123456789012345678901234dl
+PASS: gdb.base/dfp-exprs.exp: p 1234567890123456789012345678901234.dl
+PASS: gdb.base/dfp-exprs.exp: p -1234567890123456789012345678901234.dl
+PASS: gdb.base/dfp-exprs.exp: p 1.2E1dl
+PASS: gdb.base/dfp-exprs.exp: p 1.2E10dl
+PASS: gdb.base/dfp-exprs.exp: p 1.2E-10dl
+PASS: gdb.base/dfp-exprs.exp: p 1.2E6144dl
+PASS: gdb.base/dfp-exprs.exp: p 1.4df + 1.2df
+PASS: gdb.base/dfp-exprs.exp: p 1.4df - 1.2df
+PASS: gdb.base/dfp-exprs.exp: p 1.4df * 1.2df
+PASS: gdb.base/dfp-exprs.exp: p 1.4df / 1.2df
+PASS: gdb.base/dfp-exprs.exp: p 1.4dd + 1.2dd
+PASS: gdb.base/dfp-exprs.exp: p 1.4dd - 1.2dd
+PASS: gdb.base/dfp-exprs.exp: p 1.4dd * 1.2dd
+PASS: gdb.base/dfp-exprs.exp: p 1.4dd / 1.2dd
+PASS: gdb.base/dfp-exprs.exp: p 1.4dl + 1.2dl
+PASS: gdb.base/dfp-exprs.exp: p 1.4dl - 1.2dl
+PASS: gdb.base/dfp-exprs.exp: p 1.4dl * 1.2dl
+PASS: gdb.base/dfp-exprs.exp: p 1.4dl / 1.2dl
+PASS: gdb.base/dfp-exprs.exp: ptype 2.df + 2.df
+PASS: gdb.base/dfp-exprs.exp: ptype 2.dd + 2.dd
+PASS: gdb.base/dfp-exprs.exp: ptype 2.dl + 2.dl
+PASS: gdb.base/dfp-exprs.exp: p 2.1df + 2.7dd
+PASS: gdb.base/dfp-exprs.exp: p 2.1dd + 2.7df
+PASS: gdb.base/dfp-exprs.exp: p 2.6df + 2.7dl
+PASS: gdb.base/dfp-exprs.exp: p 2.6dl + 2.7df
+PASS: gdb.base/dfp-exprs.exp: p 2.3dd + 2.2dl
+PASS: gdb.base/dfp-exprs.exp: p 2.3dl + 2.2dd
+PASS: gdb.base/dfp-exprs.exp: ptype 2.df + 2.dd
+PASS: gdb.base/dfp-exprs.exp: ptype 2.df + 2.dl
+PASS: gdb.base/dfp-exprs.exp: ptype 2.dd + 2.dl
+PASS: gdb.base/dfp-exprs.exp: p 1.2df + 1
+PASS: gdb.base/dfp-exprs.exp: p 2 + 1.7dd
+PASS: gdb.base/dfp-exprs.exp: p 3 + 2.1dl
+PASS: gdb.base/dfp-exprs.exp: ptype 1.2df + 1
+PASS: gdb.base/dfp-exprs.exp: ptype 2 + 1.7dd
+PASS: gdb.base/dfp-exprs.exp: ptype 3 + 2.1dl
+PASS: gdb.base/dfp-exprs.exp: p 1.2df + 2ll
+PASS: gdb.base/dfp-exprs.exp: p 1.2df + 1.2f
+PASS: gdb.base/dfp-exprs.exp: p !0.df
+PASS: gdb.base/dfp-exprs.exp: p !0.dd
+PASS: gdb.base/dfp-exprs.exp: p !0.dl
+PASS: gdb.base/dfp-exprs.exp: p !0.5df
+PASS: gdb.base/dfp-exprs.exp: p !0.5dd
+PASS: gdb.base/dfp-exprs.exp: p !0.5dl
+PASS: gdb.base/dfp-exprs.exp: p 1.2df == 1.2df
+PASS: gdb.base/dfp-exprs.exp: p 1.2df == 1.2dd
+PASS: gdb.base/dfp-exprs.exp: p 1.2df == 1.2dl
+PASS: gdb.base/dfp-exprs.exp: p 1.2dd == 1.2df
+PASS: gdb.base/dfp-exprs.exp: p 1.2dd == 1.2dl
+PASS: gdb.base/dfp-exprs.exp: p 1.2dl == 1.2df
+PASS: gdb.base/dfp-exprs.exp: p 1.2dl == 1.2dd
+PASS: gdb.base/dfp-exprs.exp: p 1.2df == 1.3df
+PASS: gdb.base/dfp-exprs.exp: p 1.2df == 1.3dd
+PASS: gdb.base/dfp-exprs.exp: p 1.2df == 1.3dl
+PASS: gdb.base/dfp-exprs.exp: p 1.2dd == 1.3df
+PASS: gdb.base/dfp-exprs.exp: p 1.2dd == 1.3dl
+PASS: gdb.base/dfp-exprs.exp: p 1.2dl == 1.3df
+PASS: gdb.base/dfp-exprs.exp: p 1.2dl == 1.3dd
+PASS: gdb.base/dfp-exprs.exp: p +1.2df
+PASS: gdb.base/dfp-exprs.exp: p +1.2dd
+PASS: gdb.base/dfp-exprs.exp: p +1.2dl
+PASS: gdb.base/dfp-exprs.exp: p 1.2df < 1.3df
+PASS: gdb.base/dfp-exprs.exp: p 1.2df < 1.3dd
+PASS: gdb.base/dfp-exprs.exp: p 1.2dl < 1.3df
+PASS: gdb.base/dfp-exprs.exp: p 1.2dd < 1.3dd
+PASS: gdb.base/dfp-exprs.exp: p 1.2dd < 1.3dl
+PASS: gdb.base/dfp-exprs.exp: p 1.2dl < 1.3dl
+PASS: gdb.base/dfp-exprs.exp: p 1.2dl < 1.3df
+PASS: gdb.base/dfp-exprs.exp: p 1.2df > 1
+PASS: gdb.base/dfp-exprs.exp: p 1.2dl > 2
+PASS: gdb.base/dfp-exprs.exp: p 2 > 1.2dd
+PASS: gdb.base/dfp-exprs.exp: p 2 > 3.1dl
+PASS: gdb.base/dfp-exprs.exp: p (float) -0.1df
+PASS: gdb.base/dfp-exprs.exp: p (int) 8.3dd
+PASS: gdb.base/dfp-exprs.exp: p (_Decimal64) 3.1
+PASS: gdb.base/dfp-exprs.exp: p (_Decimal128) 3.7df
+PASS: gdb.base/dfp-exprs.exp: p (_Decimal32) 4
+Running ./gdb.base/dfp-test.exp ...
+PASS: gdb.base/dfp-test.exp: get integer valueof "sizeof (long)" (4)
+PASS: gdb.base/dfp-test.exp: next after initializing d32
+PASS: gdb.base/dfp-test.exp: d32 is initialized to 1.2345
+PASS: gdb.base/dfp-test.exp: next after assigning builtin infinity to d32
+PASS: gdb.base/dfp-test.exp: d32 is positive Infinity
+PASS: gdb.base/dfp-test.exp: next after assigning negative builtin infinity to d32
+PASS: gdb.base/dfp-test.exp: d32 is negative Infinity
+PASS: gdb.base/dfp-test.exp: next after assigning builtin NaN to d32
+PASS: gdb.base/dfp-test.exp: d32 is NaN
+PASS: gdb.base/dfp-test.exp: p d32=123.45df
+PASS: gdb.base/dfp-test.exp: p d32=12345.df
+PASS: gdb.base/dfp-test.exp: p d32=12345.67df
+PASS: gdb.base/dfp-test.exp: p d32=1234567.df
+PASS: gdb.base/dfp-test.exp: p d32=1.234567E0df
+PASS: gdb.base/dfp-test.exp: p d32=1.234567E10df
+PASS: gdb.base/dfp-test.exp: p d32=1.234567E+96df
+PASS: gdb.base/dfp-test.exp: p d32=9.999999E96df
+PASS: gdb.base/dfp-test.exp: p d32=1.0E-95df
+PASS: gdb.base/dfp-test.exp: p d32=1.E-101df
+PASS: gdb.base/dfp-test.exp: p d32=0.000001E-95df
+PASS: gdb.base/dfp-test.exp: 1.2345678 is rounded to 1.234568
+PASS: gdb.base/dfp-test.exp: 1.0E-101 is rounded to 1E-101
+PASS: gdb.base/dfp-test.exp: 1.234567E+97 is Infinity
+PASS: gdb.base/dfp-test.exp: 12345. is a valid number
+PASS: gdb.base/dfp-test.exp: 12345 is an invalid number
+PASS: gdb.base/dfp-test.exp: 1.23E is an invalid number
+PASS: gdb.base/dfp-test.exp: 1.23E45A is an invalid number
+PASS: gdb.base/dfp-test.exp: next after initializing d64
+PASS: gdb.base/dfp-test.exp: d64 is initialized to 1.2345
+PASS: gdb.base/dfp-test.exp: next after assigning builtin infinity to d64
+PASS: gdb.base/dfp-test.exp: d64 is positive Infinity
+PASS: gdb.base/dfp-test.exp: next after assigning negative builtin infinity to d64
+PASS: gdb.base/dfp-test.exp: d64 is negative Infinity
+PASS: gdb.base/dfp-test.exp: next after assigning builtin NaN to d64
+PASS: gdb.base/dfp-test.exp: d64 is NaN
+PASS: gdb.base/dfp-test.exp: p d64=123.45dd
+PASS: gdb.base/dfp-test.exp: p d64=12345.dd
+PASS: gdb.base/dfp-test.exp: p d64=12345.67dd
+PASS: gdb.base/dfp-test.exp: p d64=1.234567890123456dd
+PASS: gdb.base/dfp-test.exp: p d64=1.234567890123456E10dd
+PASS: gdb.base/dfp-test.exp: p d64=1.234567890123456E100dd
+PASS: gdb.base/dfp-test.exp: p d64=1.234567890123456E384dd
+PASS: gdb.base/dfp-test.exp: p d64=9.999999999999999E384dd
+PASS: gdb.base/dfp-test.exp: p d64=1.E-383dd
+PASS: gdb.base/dfp-test.exp: p d64=1.E-398dd
+PASS: gdb.base/dfp-test.exp: p d64=0.000000000000001E-383dd
+PASS: gdb.base/dfp-test.exp: 1.2345678901234567 is rounded to 1.234567890123457
+PASS: gdb.base/dfp-test.exp: d64=9.9999999999999999E384 is Infinity
+PASS: gdb.base/dfp-test.exp: d64=1.234567890123456E385 is Infinity
+PASS: gdb.base/dfp-test.exp: 12345dd is an invalid number
+PASS: gdb.base/dfp-test.exp: 1.23E is an invalid number
+PASS: gdb.base/dfp-test.exp: 1.23E45A is an invalid number
+PASS: gdb.base/dfp-test.exp: next after initializing d128
+PASS: gdb.base/dfp-test.exp: d128 is initialized to 1.2345
+PASS: gdb.base/dfp-test.exp: p d128=123.45dl
+PASS: gdb.base/dfp-test.exp: p d128=12345.dl
+PASS: gdb.base/dfp-test.exp: p d128=12345.67dl
+PASS: gdb.base/dfp-test.exp: p d128=1.234567890123456789012345678901234dl
+PASS: gdb.base/dfp-test.exp: p d128=1.234567890123456E10dl
+PASS: gdb.base/dfp-test.exp: p d128=1.234567890123456E100dl
+PASS: gdb.base/dfp-test.exp: p d128=1.234567890123456E1000dl
+PASS: gdb.base/dfp-test.exp: p d128=9.999999999999999999999999999999999E6144dl
+PASS: gdb.base/dfp-test.exp: p d128=1.E-6143dl
+PASS: gdb.base/dfp-test.exp: p d128=1.E-6176dl
+PASS: gdb.base/dfp-test.exp: p d128=0.000000000000000000000000000000001E-6143dl
+PASS: gdb.base/dfp-test.exp: 1.2345678901234567890123456789012345 is rounded to 1.234567890123456789012345678901234
+PASS: gdb.base/dfp-test.exp: d128=1.234567890123456E6145 is Infinity
+PASS: gdb.base/dfp-test.exp: 12345dl is an invalid number
+PASS: gdb.base/dfp-test.exp: 1.23E is an invalid number
+PASS: gdb.base/dfp-test.exp: 1.23E45A is an invalid number
+PASS: gdb.base/dfp-test.exp: next after assigning builtin infinity to d128
+PASS: gdb.base/dfp-test.exp: d128 is positive Infinity
+PASS: gdb.base/dfp-test.exp: next after assigning negative builtin infinity to d128
+PASS: gdb.base/dfp-test.exp: d128 is negative Infinity
+PASS: gdb.base/dfp-test.exp: next after assigning builtin NaN to d128
+PASS: gdb.base/dfp-test.exp: d128 is NaN
+PASS: gdb.base/dfp-test.exp: continue to breakpoint: entry to arg0_32
+PASS: gdb.base/dfp-test.exp: backtrace at arg0_32
+PASS: gdb.base/dfp-test.exp: continue to breakpoint: entry to arg0_64
+PASS: gdb.base/dfp-test.exp: backtrace at arg0_64
+PASS: gdb.base/dfp-test.exp: continue to breakpoint: entry to arg0_128
+PASS: gdb.base/dfp-test.exp: backtrace at arg0_128
+PASS: gdb.base/dfp-test.exp: Call function with correct _Decimal32 arguments.
+PASS: gdb.base/dfp-test.exp: Backtrace function with correct _Decimal32 arguments.
+PASS: gdb.base/dfp-test.exp: Correct _Decimal32 return value from called function.
+PASS: gdb.base/dfp-test.exp: Call function with correct _Decimal64 arguments.
+PASS: gdb.base/dfp-test.exp: Backtrace function with correct _Decimal64 arguments.
+PASS: gdb.base/dfp-test.exp: Correct _Decimal64 return value from called function.
+PASS: gdb.base/dfp-test.exp: Call function with correct _Decimal128 arguments.
+PASS: gdb.base/dfp-test.exp: Backtrace function with correct _Decimal128 arguments.
+PASS: gdb.base/dfp-test.exp: Correct _Decimal128 return value from called function.
+PASS: gdb.base/dfp-test.exp: Call function with mixed decimal float arguments TEST.
+PASS: gdb.base/dfp-test.exp: Call function with mixed decimal float arguments.
+PASS: gdb.base/dfp-test.exp: Call function with many _Decimal32 arguments.
+PASS: gdb.base/dfp-test.exp: Call function with many _Decimal64 arguments.
+PASS: gdb.base/dfp-test.exp: Call function with many _Decimal128 arguments.
+PASS: gdb.base/dfp-test.exp: Call function with many mixed decimal float arguments.
+PASS: gdb.base/dfp-test.exp: continue to breakpoint: Setting a decimal struct
+PASS: gdb.base/dfp-test.exp: print ds.dec32
+PASS: gdb.base/dfp-test.exp: print ds.dec64
+PASS: gdb.base/dfp-test.exp: print ds.dec128
+PASS: gdb.base/dfp-test.exp: print d32 + ds.dec32
+PASS: gdb.base/dfp-test.exp: print d64 + ds.dec64
+PASS: gdb.base/dfp-test.exp: print d128 + ds.dec128
+PASS: gdb.base/dfp-test.exp: ptype d64 + ds.dec32
+PASS: gdb.base/dfp-test.exp: ptype d128 + ds.dec32
+PASS: gdb.base/dfp-test.exp: ptype d128 + ds.dec64
+PASS: gdb.base/dfp-test.exp: p d32 + 1
+PASS: gdb.base/dfp-test.exp: p 2 + d64
+PASS: gdb.base/dfp-test.exp: p ds.int4 + d128
+PASS: gdb.base/dfp-test.exp: ptype d32 + 1
+PASS: gdb.base/dfp-test.exp: ptype ds.int4 + d128
+PASS: gdb.base/dfp-test.exp: p !d32
+PASS: gdb.base/dfp-test.exp: p !d64
+PASS: gdb.base/dfp-test.exp: p !d128
+PASS: gdb.base/dfp-test.exp: p +d32
+PASS: gdb.base/dfp-test.exp: p +d64
+PASS: gdb.base/dfp-test.exp: p +d128
+PASS: gdb.base/dfp-test.exp: p d64 == d128
+PASS: gdb.base/dfp-test.exp: p d128 == ds.dec32
+PASS: gdb.base/dfp-test.exp: p d128 == d32
+PASS: gdb.base/dfp-test.exp: p ds.dec32 == ds.dec64
+PASS: gdb.base/dfp-test.exp: p d32 < ds.dec32
+PASS: gdb.base/dfp-test.exp: p d64 < ds.dec64
+PASS: gdb.base/dfp-test.exp: p d128 < ds.dec128
+PASS: gdb.base/dfp-test.exp: p ds.dec32 < d32
+PASS: gdb.base/dfp-test.exp: p d64 > ds.dec64
+PASS: gdb.base/dfp-test.exp: p ds.dec128 > d128
+PASS: gdb.base/dfp-test.exp: p d32 < ds.int4
+PASS: gdb.base/dfp-test.exp: p ds.int4 > d32
+PASS: gdb.base/dfp-test.exp: p ds.dec32 < ds.int4
+PASS: gdb.base/dfp-test.exp: p ds.int4 > ds.dec64
+PASS: gdb.base/dfp-test.exp: p ds.dec128 > ds.int4
+PASS: gdb.base/dfp-test.exp: p d64 + ds.float4
+PASS: gdb.base/dfp-test.exp: p ds.double8 + d128
+PASS: gdb.base/dfp-test.exp: print ds.dec32=d32
+PASS: gdb.base/dfp-test.exp: print ds.dec64=d64
+PASS: gdb.base/dfp-test.exp: print ds.dec128=d128
+PASS: gdb.base/dfp-test.exp: print ds.dec32 = -d32
+PASS: gdb.base/dfp-test.exp: print ds.dec64 = -d64
+PASS: gdb.base/dfp-test.exp: print ds.dec128 = -d128
+PASS: gdb.base/dfp-test.exp: print ds.double8 = ds.dec64
+PASS: gdb.base/dfp-test.exp: print ds.dec64 = ds.float4
+PASS: gdb.base/dfp-test.exp: print ds.dec128 = -ds.double8
+PASS: gdb.base/dfp-test.exp: print ds.dec128 = ds.dec32
+PASS: gdb.base/dfp-test.exp: print ds.dec32 = ds.int4
+PASS: gdb.base/dfp-test.exp: print ds.int4 = 7.3dl
+Running ./gdb.base/disabled-location.exp ...
+PASS: gdb.base/disabled-location.exp: setting breakpoint on function
+PASS: gdb.base/disabled-location.exp: disable location
+PASS: gdb.base/disabled-location.exp: step doesn't trip on disabled location
+Running ./gdb.base/disasm-end-cu.exp ...
+PASS: gdb.base/disasm-end-cu.exp: get hexadecimal valueof "&main"
+PASS: gdb.base/disasm-end-cu.exp: get hexadecimal valueof "&dummy_3"
+PASS: gdb.base/disasm-end-cu.exp: disassemble command returned some output
+Running ./gdb.base/display.exp ...
+PASS: gdb.base/display.exp: break do_loops
+PASS: gdb.base/display.exp: get to do_loops
+PASS: gdb.base/display.exp: set watch
+PASS: gdb.base/display.exp: break loop end
+PASS: gdb.base/display.exp: inf disp
+PASS: gdb.base/display.exp: display i
+PASS: gdb.base/display.exp: display j
+PASS: gdb.base/display.exp: display &k
+PASS: gdb.base/display.exp: display/f f
+PASS: gdb.base/display.exp: display/s &sum
+PASS: gdb.base/display.exp: first disp
+PASS: gdb.base/display.exp: second disp
+PASS: gdb.base/display.exp: catch err
+PASS: gdb.base/display.exp: disab disp 1
+PASS: gdb.base/display.exp: disab disp 2
+PASS: gdb.base/display.exp: re-enab
+PASS: gdb.base/display.exp: re-enab of enab
+PASS: gdb.base/display.exp: undisp
+PASS: gdb.base/display.exp: info disp
+PASS: gdb.base/display.exp: next hit
+PASS: gdb.base/display.exp: undisp all
+PASS: gdb.base/display.exp: disp *p_i
+PASS: gdb.base/display.exp: p p_i = 0x0
+PASS: gdb.base/display.exp: display bad address
+PASS: gdb.base/display.exp: p p_i = &i
+PASS: gdb.base/display.exp: display good address
+PASS: gdb.base/display.exp: undisp all again
+PASS: gdb.base/display.exp: disab 3
+PASS: gdb.base/display.exp: watch off
+PASS: gdb.base/display.exp: finish
+PASS: gdb.base/display.exp: step
+PASS: gdb.base/display.exp: tbreak in do_vars
+PASS: gdb.base/display.exp: cont
+PASS: gdb.base/display.exp: printf
+PASS: gdb.base/display.exp: printf %d
+PASS: gdb.base/display.exp: printf "%d
+PASS: gdb.base/display.exp: printf "%d%d",i
+PASS: gdb.base/display.exp: printf "\\!\a\f\r\t\v\b\n"
+PASS: gdb.base/display.exp: re-set term
+PASS: gdb.base/display.exp: printf "\w"
+PASS: gdb.base/display.exp: printf "%d" j
+PASS: gdb.base/display.exp: printf "%p\n", 0
+PASS: gdb.base/display.exp: printf "%p\n", 1
+PASS: gdb.base/display.exp: print/z j
+PASS: gdb.base/display.exp: debug test output 1
+PASS: gdb.base/display.exp: debug test output 1a
+PASS: gdb.base/display.exp: debug test output 2
+PASS: gdb.base/display.exp: debug test output 2a
+PASS: gdb.base/display.exp: debug test output 3
+PASS: gdb.base/display.exp: x/0 j
+PASS: gdb.base/display.exp: print/0 j
+PASS: gdb.base/display.exp: ignored s
+PASS: gdb.base/display.exp: no i
+PASS: gdb.base/display.exp: print/a &sum
+PASS: gdb.base/display.exp: print/a main+4
+PASS: gdb.base/display.exp: print/a $pc
+PASS: gdb.base/display.exp: print/a &&j
+Running ./gdb.base/disp-step-syscall.exp ...
+PASS: gdb.base/disp-step-syscall.exp: fork: delete break 1
+PASS: gdb.base/disp-step-syscall.exp: fork: break marker
+PASS: gdb.base/disp-step-syscall.exp: fork: set displaced-stepping off
+PASS: gdb.base/disp-step-syscall.exp: fork: break fork
+PASS: gdb.base/disp-step-syscall.exp: fork: continue to fork (1st time)
+PASS: gdb.base/disp-step-syscall.exp: fork: continue to fork (2nd time)
+PASS: gdb.base/disp-step-syscall.exp: fork: display/i $pc
+PASS: gdb.base/disp-step-syscall.exp: fork: get hexadecimal valueof "$pc"
+PASS: gdb.base/disp-step-syscall.exp: fork: stepi fork insn
+PASS: gdb.base/disp-step-syscall.exp: fork: get hexadecimal valueof "$pc"
+PASS: gdb.base/disp-step-syscall.exp: fork: continue to fork (3rd time)
+PASS: gdb.base/disp-step-syscall.exp: fork: break on syscall insns
+PASS: gdb.base/disp-step-syscall.exp: fork: delete break fork
+PASS: gdb.base/disp-step-syscall.exp: fork: continue to syscall insn fork
+PASS: gdb.base/disp-step-syscall.exp: fork: set displaced-stepping on
+PASS: gdb.base/disp-step-syscall.exp: fork: single step over fork
+PASS: gdb.base/disp-step-syscall.exp: fork: get hexadecimal valueof "$pc"
+PASS: gdb.base/disp-step-syscall.exp: fork: single step over fork final pc
+PASS: gdb.base/disp-step-syscall.exp: fork: delete break fork insn
+PASS: gdb.base/disp-step-syscall.exp: fork: continue to marker (fork)
+PASS: gdb.base/disp-step-syscall.exp: vfork: delete break 1
+PASS: gdb.base/disp-step-syscall.exp: vfork: break marker
+PASS: gdb.base/disp-step-syscall.exp: vfork: set displaced-stepping off
+PASS: gdb.base/disp-step-syscall.exp: vfork: break vfork
+PASS: gdb.base/disp-step-syscall.exp: vfork: continue to vfork (1st time)
+PASS: gdb.base/disp-step-syscall.exp: vfork: continue to vfork (2nd time)
+PASS: gdb.base/disp-step-syscall.exp: vfork: display/i $pc
+PASS: gdb.base/disp-step-syscall.exp: vfork: get hexadecimal valueof "$pc"
+PASS: gdb.base/disp-step-syscall.exp: vfork: stepi vfork insn
+PASS: gdb.base/disp-step-syscall.exp: vfork: get hexadecimal valueof "$pc"
+PASS: gdb.base/disp-step-syscall.exp: vfork: continue to vfork (3rd time)
+PASS: gdb.base/disp-step-syscall.exp: vfork: break on syscall insns
+PASS: gdb.base/disp-step-syscall.exp: vfork: delete break vfork
+PASS: gdb.base/disp-step-syscall.exp: vfork: continue to syscall insn vfork
+PASS: gdb.base/disp-step-syscall.exp: vfork: set displaced-stepping on
+KPASS: gdb.base/disp-step-syscall.exp: vfork: single step over vfork (PRMS server/13796)
+FAIL: gdb.base/disp-step-syscall.exp: vfork: get hexadecimal valueof "$pc" (timeout)
+FAIL: gdb.base/disp-step-syscall.exp: vfork: single step over vfork final pc
+FAIL: gdb.base/disp-step-syscall.exp: vfork: delete break vfork insn
+FAIL: gdb.base/disp-step-syscall.exp: vfork: continue to marker (vfork) (the program is no longer running)
+Running ./gdb.base/dmsym.exp ...
+PASS: gdb.base/dmsym.exp: set lang ada
+PASS: gdb.base/dmsym.exp: break pck__foo__bar__minsym
+PASS: gdb.base/dmsym.exp: info line pck__foo__bar__minsym
+PASS: gdb.base/dmsym.exp: set lang auto
+PASS: gdb.base/dmsym.exp: Run until breakpoint at BREAK
+PASS: gdb.base/dmsym.exp: continue
+PASS: gdb.base/dmsym.exp: print val
+Running ./gdb.base/dprintf.exp ...
+PASS: gdb.base/dprintf.exp: dprintf
+PASS: gdb.base/dprintf.exp: dprintf foo
+PASS: gdb.base/dprintf.exp: dprintf 29
+PASS: gdb.base/dprintf.exp: dprintf foo,"At foo entry\n"
+PASS: gdb.base/dprintf.exp: ignore $bpnum 1
+PASS: gdb.base/dprintf.exp: dprintf 26,"arg=%d, g=%d\n", arg, g
+PASS: gdb.base/dprintf.exp: dprintf info 1
+PASS: gdb.base/dprintf.exp: break 27
+PASS: gdb.base/dprintf.exp: 1st dprintf, gdb
+PASS: gdb.base/dprintf.exp: 2nd dprintf, gdb
+PASS: gdb.base/dprintf.exp: Set dprintf style to agent - can do
+PASS: gdb.base/dprintf.exp: 1st dprintf, agent
+PASS: gdb.base/dprintf.exp: 2nd dprintf, agent
+PASS: gdb.base/dprintf.exp: dprintf info 2
+PASS: gdb.base/dprintf.exp: Set dprintf style to an unrecognized type
+Running ./gdb.base/dprintf-next.exp ...
+PASS: gdb.base/dprintf-next.exp: dprintf 24, "%d\n", x
+PASS: gdb.base/dprintf-next.exp: next 1
+PASS: gdb.base/dprintf-next.exp: next 2
+Running ./gdb.base/dprintf-non-stop.exp ...
+UNSUPPORTED: gdb.base/dprintf-non-stop.exp: Testing dprintf with remote/non-stop is not supported.
+Running ./gdb.base/dprintf-pending.exp ...
+PASS: gdb.base/dprintf-pending.exp: without format: set pending dprintf
+PASS: gdb.base/dprintf-pending.exp: without format: resolved dprintf fails to be re-set
+PASS: gdb.base/dprintf-pending.exp: without symbols: set pending dprintf
+PASS: gdb.base/dprintf-pending.exp: without symbols: single pending dprintf info
+PASS: gdb.base/dprintf-pending.exp: without symbols: run to resolved dprintf
+PASS: gdb.base/dprintf-pending.exp: set pending dprintf
+PASS: gdb.base/dprintf-pending.exp: single pending dprintf info
+PASS: gdb.base/dprintf-pending.exp: run to resolved dprintf
+Running ./gdb.base/dump.exp ...
+PASS: gdb.base/dump.exp: inaccessible memory is reported
+PASS: gdb.base/dump.exp: endianness: little
+PASS: gdb.base/dump.exp: dump array as value, default
+PASS: gdb.base/dump.exp: dump struct as value, default
+PASS: gdb.base/dump.exp: dump array as value, binary
+PASS: gdb.base/dump.exp: dump struct as value, binary
+PASS: gdb.base/dump.exp: dump array as value, srec
+PASS: gdb.base/dump.exp: dump struct as value, srec
+PASS: gdb.base/dump.exp: dump array as value, intel hex
+PASS: gdb.base/dump.exp: dump struct as value, intel hex
+PASS: gdb.base/dump.exp: dump array as value, tekhex
+PASS: gdb.base/dump.exp: dump struct as value, tekhex
+PASS: gdb.base/dump.exp: capture /x &intarray[0]
+PASS: gdb.base/dump.exp: capture /x &intarray[32]
+PASS: gdb.base/dump.exp: capture /x &intstruct
+PASS: gdb.base/dump.exp: capture /x &intstruct + 1
+PASS: gdb.base/dump.exp: capture intarray
+PASS: gdb.base/dump.exp: capture intstruct
+PASS: gdb.base/dump.exp: capture type of pointer &intarray
+PASS: gdb.base/dump.exp: capture type of pointer &intstruct
+PASS: gdb.base/dump.exp: dump array as memory, default
+PASS: gdb.base/dump.exp: dump struct as memory, default
+PASS: gdb.base/dump.exp: dump array as memory, binary
+PASS: gdb.base/dump.exp: dump struct as memory, binary
+PASS: gdb.base/dump.exp: dump array as memory, srec
+PASS: gdb.base/dump.exp: dump struct as memory, srec
+PASS: gdb.base/dump.exp: dump array as memory, ihex
+PASS: gdb.base/dump.exp: dump struct as memory, ihex
+PASS: gdb.base/dump.exp: dump array as memory, tekhex
+PASS: gdb.base/dump.exp: dump struct as memory, tekhex
+PASS: gdb.base/dump.exp: dump array as mem, srec, expressions
+PASS: gdb.base/dump.exp: print zero_all ()
+PASS: gdb.base/dump.exp: array as value, srec; file restored ok
+PASS: gdb.base/dump.exp: array as value, srec; capture intarray
+PASS: gdb.base/dump.exp: array as value, srec; value restored ok
+PASS: gdb.base/dump.exp: struct as value, srec; file restored ok
+PASS: gdb.base/dump.exp: struct as value, srec; capture intstruct
+PASS: gdb.base/dump.exp: struct as value, srec; value restored ok
+PASS: gdb.base/dump.exp: zero all
+PASS: gdb.base/dump.exp: array as memory, srec; file restored ok
+PASS: gdb.base/dump.exp: array as memory, srec; capture intarray
+PASS: gdb.base/dump.exp: array as memory, srec; value restored ok
+PASS: gdb.base/dump.exp: struct as memory, srec; file restored ok
+PASS: gdb.base/dump.exp: struct as memory, srec; capture intstruct
+PASS: gdb.base/dump.exp: struct as memory, srec; value restored ok
+PASS: gdb.base/dump.exp: print zero_all ()
+PASS: gdb.base/dump.exp: array as value, ihex; file restored ok
+PASS: gdb.base/dump.exp: array as value, ihex; capture intarray
+PASS: gdb.base/dump.exp: array as value, ihex; value restored ok
+PASS: gdb.base/dump.exp: struct as value, ihex; file restored ok
+PASS: gdb.base/dump.exp: struct as value, ihex; capture intstruct
+PASS: gdb.base/dump.exp: struct as value, ihex; value restored ok
+PASS: gdb.base/dump.exp: print zero_all ()
+PASS: gdb.base/dump.exp: array as memory, ihex; file restored ok
+PASS: gdb.base/dump.exp: array as memory, ihex; capture intarray
+PASS: gdb.base/dump.exp: array as memory, ihex; value restored ok
+PASS: gdb.base/dump.exp: struct as memory, ihex; file restored ok
+PASS: gdb.base/dump.exp: struct as memory, ihex; capture intstruct
+PASS: gdb.base/dump.exp: struct as memory, ihex; value restored ok
+PASS: gdb.base/dump.exp: print zero_all ()
+PASS: gdb.base/dump.exp: array as value, tekhex; file restored ok
+PASS: gdb.base/dump.exp: array as value, tekhex; capture intarray
+PASS: gdb.base/dump.exp: array as value, tekhex; value restored ok
+PASS: gdb.base/dump.exp: struct as value, tekhex; file restored ok
+PASS: gdb.base/dump.exp: struct as value, tekhex; capture intstruct
+PASS: gdb.base/dump.exp: struct as value, tekhex; value restored ok
+PASS: gdb.base/dump.exp: print zero_all ()
+PASS: gdb.base/dump.exp: array as memory, tekhex; file restored ok
+PASS: gdb.base/dump.exp: array as memory, tekhex; capture intarray
+PASS: gdb.base/dump.exp: array as memory, tekhex; value restored ok
+PASS: gdb.base/dump.exp: struct as memory, tekhex; file restored ok
+PASS: gdb.base/dump.exp: struct as memory, tekhex; capture intstruct
+PASS: gdb.base/dump.exp: struct as memory, tekhex; value restored ok
+PASS: gdb.base/dump.exp: print zero_all ()
+PASS: gdb.base/dump.exp: array as value, binary; file restored ok
+PASS: gdb.base/dump.exp: array as value, binary; capture intarray
+PASS: gdb.base/dump.exp: array as value, binary; value restored ok
+PASS: gdb.base/dump.exp: struct as value, binary; file restored ok
+PASS: gdb.base/dump.exp: struct as value, binary; capture intstruct
+PASS: gdb.base/dump.exp: struct as value, binary; value restored ok
+PASS: gdb.base/dump.exp: print zero_all ()
+PASS: gdb.base/dump.exp: array as memory, binary; file restored ok
+PASS: gdb.base/dump.exp: array as memory, binary; capture intarray
+PASS: gdb.base/dump.exp: array as memory, binary; value restored ok
+PASS: gdb.base/dump.exp: struct as memory, binary; file restored ok
+PASS: gdb.base/dump.exp: struct as memory, binary; capture intstruct
+PASS: gdb.base/dump.exp: struct as memory, binary; value restored ok
+PASS: gdb.base/dump.exp: capture /x &intarray2[0]
+PASS: gdb.base/dump.exp: capture /x &intstruct2
+PASS: gdb.base/dump.exp: capture (char *) &intarray2 - (char *) &intarray
+PASS: gdb.base/dump.exp: capture (char *) &intstruct2 - (char *) &intstruct
+PASS: gdb.base/dump.exp: print zero_all ()
+PASS: gdb.base/dump.exp: array copy, srec; file restored ok
+PASS: gdb.base/dump.exp: array copy, srec; capture intarray2
+PASS: gdb.base/dump.exp: array copy, srec; value restored ok
+PASS: gdb.base/dump.exp: struct copy, srec; file restored ok
+PASS: gdb.base/dump.exp: struct copy, srec; capture intstruct2
+PASS: gdb.base/dump.exp: struct copy, srec; value restored ok
+PASS: gdb.base/dump.exp: print zero_all ()
+PASS: gdb.base/dump.exp: array copy, ihex; file restored ok
+PASS: gdb.base/dump.exp: array copy, ihex; capture intarray2
+PASS: gdb.base/dump.exp: array copy, ihex; value restored ok
+PASS: gdb.base/dump.exp: struct copy, ihex; file restored ok
+PASS: gdb.base/dump.exp: struct copy, ihex; capture intstruct2
+PASS: gdb.base/dump.exp: struct copy, ihex; value restored ok
+PASS: gdb.base/dump.exp: print zero_all ()
+PASS: gdb.base/dump.exp: array copy, tekhex; file restored ok
+PASS: gdb.base/dump.exp: array copy, tekhex; capture intarray2
+PASS: gdb.base/dump.exp: array copy, tekhex; value restored ok
+PASS: gdb.base/dump.exp: struct copy, tekhex; file restored ok
+PASS: gdb.base/dump.exp: struct copy, tekhex; capture intstruct2
+PASS: gdb.base/dump.exp: struct copy, tekhex; value restored ok
+PASS: gdb.base/dump.exp: print zero_all ()
+PASS: gdb.base/dump.exp: array copy, binary; file restored ok
+PASS: gdb.base/dump.exp: array copy, binary; capture intarray2
+PASS: gdb.base/dump.exp: array copy, binary; value restored ok
+PASS: gdb.base/dump.exp: struct copy, binary; file restored ok
+PASS: gdb.base/dump.exp: struct copy, binary; capture intstruct2
+PASS: gdb.base/dump.exp: struct copy, binary; value restored ok
+PASS: gdb.base/dump.exp: capture /x &intarray[3]
+PASS: gdb.base/dump.exp: capture /x &intarray[4]
+PASS: gdb.base/dump.exp: capture /x (char *) &intarray[3] - (char *) &intarray[0]
+PASS: gdb.base/dump.exp: capture /x (char *) &intarray[4] - (char *) &intarray[0]
+PASS: gdb.base/dump.exp: print zero_all ()
+PASS: gdb.base/dump.exp: array partial, srec; file restored ok
+PASS: gdb.base/dump.exp: array partial, srec; capture intarray[3]
+PASS: gdb.base/dump.exp: array partial, srec; value restored ok
+PASS: gdb.base/dump.exp: element 2 not changed - 1
+PASS: gdb.base/dump.exp: element 4 not changed - 1
+PASS: gdb.base/dump.exp: print zero_all ()
+PASS: gdb.base/dump.exp: array partial, ihex; file restored ok
+PASS: gdb.base/dump.exp: array partial, ihex; capture intarray[3]
+PASS: gdb.base/dump.exp: array partial, ihex; value restored ok
+PASS: gdb.base/dump.exp: element 2 not changed - 2
+PASS: gdb.base/dump.exp: element 4 not changed - 2
+PASS: gdb.base/dump.exp: print zero_all ()
+PASS: gdb.base/dump.exp: array partial, tekhex; file restored ok
+PASS: gdb.base/dump.exp: array partial, tekhex; capture intarray[3]
+PASS: gdb.base/dump.exp: array partial, tekhex; value restored ok
+PASS: gdb.base/dump.exp: element 2 not changed - 3
+PASS: gdb.base/dump.exp: element 4 not changed - 3
+PASS: gdb.base/dump.exp: print zero_all ()
+PASS: gdb.base/dump.exp: array partial, binary; file restored ok
+PASS: gdb.base/dump.exp: array partial, binary; capture intarray[3]
+PASS: gdb.base/dump.exp: array partial, binary; value restored ok
+PASS: gdb.base/dump.exp: element 2 not changed - 4
+PASS: gdb.base/dump.exp: element 4 not changed - 4
+PASS: gdb.base/dump.exp: array partial with expressions; file restored ok
+PASS: gdb.base/dump.exp: array partial with expressions; capture intarray2[3]
+PASS: gdb.base/dump.exp: array partial with expressions; value restored ok
+PASS: gdb.base/dump.exp: element 2 not changed, == 4
+PASS: gdb.base/dump.exp: element 4 not changed, == 4
+PASS: gdb.base/dump.exp: setting little endianness
+PASS: gdb.base/dump.exp: file binfile; capture intarray
+PASS: gdb.base/dump.exp: start with intarray un-initialized
+PASS: gdb.base/dump.exp: file binfile; capture intstruct
+PASS: gdb.base/dump.exp: start with intstruct un-initialized
+PASS: gdb.base/dump.exp: reload array as value, srec; capture * (int (*)[32]) 0x55557040
+PASS: gdb.base/dump.exp: reload array as value, srec; value restored ok
+PASS: gdb.base/dump.exp: reload struct as value, srec; capture * (struct teststruct *) 0x55557140
+PASS: gdb.base/dump.exp: reload struct as value, srec; value restored ok
+PASS: gdb.base/dump.exp: reload array as memory, srec; capture * (int (*)[32]) 0x55557040
+PASS: gdb.base/dump.exp: reload array as memory, srec; value restored ok
+PASS: gdb.base/dump.exp: reload struct as memory, srec; capture * (struct teststruct *) 0x55557140
+PASS: gdb.base/dump.exp: reload struct as memory, srec; value restored ok
+PASS: gdb.base/dump.exp: reload array as value, intel hex; capture * (int (*)[32]) 0x55557040
+PASS: gdb.base/dump.exp: reload array as value, intel hex; value restored ok
+PASS: gdb.base/dump.exp: reload struct as value, intel hex; capture * (struct teststruct *) 0x55557140
+PASS: gdb.base/dump.exp: reload struct as value, intel hex; value restored ok
+PASS: gdb.base/dump.exp: reload array as memory, intel hex; capture * (int (*)[32]) 0x55557040
+PASS: gdb.base/dump.exp: reload array as memory, intel hex; value restored ok
+PASS: gdb.base/dump.exp: reload struct as memory, intel hex; capture * (struct teststruct *) 0x55557140
+PASS: gdb.base/dump.exp: reload struct as memory, intel hex; value restored ok
+PASS: gdb.base/dump.exp: reload array as value, tekhex; capture * (int (*)[32]) 0x55557040
+PASS: gdb.base/dump.exp: reload array as value, tekhex; value restored ok
+PASS: gdb.base/dump.exp: reload struct as value, tekhex; capture * (struct teststruct *) 0x55557140
+PASS: gdb.base/dump.exp: reload struct as value, tekhex; value restored ok
+PASS: gdb.base/dump.exp: reload array as memory, tekhex; capture * (int (*)[32]) 0x55557040
+PASS: gdb.base/dump.exp: reload array as memory, tekhex; value restored ok
+PASS: gdb.base/dump.exp: reload struct as memory, tekhex; capture * (struct teststruct *) 0x55557140
+PASS: gdb.base/dump.exp: reload struct as memory, tekhex; value restored ok
+Running ./gdb.base/duplicate-bp.exp ...
+PASS: gdb.base/duplicate-bp.exp: del_1_stop_2: set $bp_num_1 = $bpnum
+PASS: gdb.base/duplicate-bp.exp: del_1_stop_2: set $bp_num_2 = $bpnum
+PASS: gdb.base/duplicate-bp.exp: del_1_stop_2: step to place breakpoints
+PASS: gdb.base/duplicate-bp.exp: del_1_stop_2: delete $bp_num_1
+PASS: gdb.base/duplicate-bp.exp: del_1_stop_2: delete #1, stop at #2
+PASS: gdb.base/duplicate-bp.exp: del_2_stop_1: set $bp_num_1 = $bpnum
+PASS: gdb.base/duplicate-bp.exp: del_2_stop_1: set $bp_num_2 = $bpnum
+PASS: gdb.base/duplicate-bp.exp: del_2_stop_1: step to place breakpoints
+PASS: gdb.base/duplicate-bp.exp: del_2_stop_1: delete $bp_num_2
+PASS: gdb.base/duplicate-bp.exp: del_2_stop_1: delete #2, stop at #1
+PASS: gdb.base/duplicate-bp.exp: dis_1_del_2_stop_3: set $bp_num_1 = $bpnum
+PASS: gdb.base/duplicate-bp.exp: dis_1_del_2_stop_3: set $bp_num_2 = $bpnum
+PASS: gdb.base/duplicate-bp.exp: dis_1_del_2_stop_3: set $bp_num_3 = $bpnum
+PASS: gdb.base/duplicate-bp.exp: dis_1_del_2_stop_3: step to place breakpoints
+PASS: gdb.base/duplicate-bp.exp: dis_1_del_2_stop_3: disable $bp_num_1
+PASS: gdb.base/duplicate-bp.exp: dis_1_del_2_stop_3: step
+PASS: gdb.base/duplicate-bp.exp: dis_1_del_2_stop_3: delete $bp_num_2
+PASS: gdb.base/duplicate-bp.exp: dis_1_del_2_stop_3: disable #1, delete #2, stop at #3
+PASS: gdb.base/duplicate-bp.exp: dis_2_del_1_stop_3: set $bp_num_1 = $bpnum
+PASS: gdb.base/duplicate-bp.exp: dis_2_del_1_stop_3: set $bp_num_2 = $bpnum
+PASS: gdb.base/duplicate-bp.exp: dis_2_del_1_stop_3: set $bp_num_3 = $bpnum
+PASS: gdb.base/duplicate-bp.exp: dis_2_del_1_stop_3: step to place breakpoints
+PASS: gdb.base/duplicate-bp.exp: dis_2_del_1_stop_3: disable $bp_num_2
+PASS: gdb.base/duplicate-bp.exp: dis_2_del_1_stop_3: step
+PASS: gdb.base/duplicate-bp.exp: dis_2_del_1_stop_3: delete $bp_num_1
+PASS: gdb.base/duplicate-bp.exp: dis_2_del_1_stop_3: disable #2, delete #1, stop at #3
+PASS: gdb.base/duplicate-bp.exp: dis_1_del_3_stop_1: set $bp_num_1 = $bpnum
+PASS: gdb.base/duplicate-bp.exp: dis_1_del_3_stop_1: set $bp_num_2 = $bpnum
+PASS: gdb.base/duplicate-bp.exp: dis_1_del_3_stop_1: set $bp_num_3 = $bpnum
+PASS: gdb.base/duplicate-bp.exp: dis_1_del_3_stop_1: step to place breakpoints
+PASS: gdb.base/duplicate-bp.exp: dis_1_del_3_stop_1: disable $bp_num_1
+PASS: gdb.base/duplicate-bp.exp: dis_1_del_3_stop_1: step
+PASS: gdb.base/duplicate-bp.exp: dis_1_del_3_stop_1: delete $bp_num_3
+PASS: gdb.base/duplicate-bp.exp: dis_1_del_3_stop_1: disable #1, delete #3, stop at #2
+PASS: gdb.base/duplicate-bp.exp: dis_3_del_1_stop_2: set $bp_num_1 = $bpnum
+PASS: gdb.base/duplicate-bp.exp: dis_3_del_1_stop_2: set $bp_num_2 = $bpnum
+PASS: gdb.base/duplicate-bp.exp: dis_3_del_1_stop_2: set $bp_num_3 = $bpnum
+PASS: gdb.base/duplicate-bp.exp: dis_3_del_1_stop_2: step to place breakpoints
+PASS: gdb.base/duplicate-bp.exp: dis_3_del_1_stop_2: disable $bp_num_3
+PASS: gdb.base/duplicate-bp.exp: dis_3_del_1_stop_2: step
+PASS: gdb.base/duplicate-bp.exp: dis_3_del_1_stop_2: delete $bp_num_1
+PASS: gdb.base/duplicate-bp.exp: dis_3_del_1_stop_2: disable #3, delete #1, stop at #2
+PASS: gdb.base/duplicate-bp.exp: dis_2_del_3_stop_1: set $bp_num_1 = $bpnum
+PASS: gdb.base/duplicate-bp.exp: dis_2_del_3_stop_1: set $bp_num_2 = $bpnum
+PASS: gdb.base/duplicate-bp.exp: dis_2_del_3_stop_1: set $bp_num_3 = $bpnum
+PASS: gdb.base/duplicate-bp.exp: dis_2_del_3_stop_1: step to place breakpoints
+PASS: gdb.base/duplicate-bp.exp: dis_2_del_3_stop_1: disable $bp_num_2
+PASS: gdb.base/duplicate-bp.exp: dis_2_del_3_stop_1: step
+PASS: gdb.base/duplicate-bp.exp: dis_2_del_3_stop_1: delete $bp_num_3
+PASS: gdb.base/duplicate-bp.exp: dis_2_del_3_stop_1: disable #2, delete #3, stop at #1
+PASS: gdb.base/duplicate-bp.exp: dis_3_del_2_stop_1: set $bp_num_1 = $bpnum
+PASS: gdb.base/duplicate-bp.exp: dis_3_del_2_stop_1: set $bp_num_2 = $bpnum
+PASS: gdb.base/duplicate-bp.exp: dis_3_del_2_stop_1: set $bp_num_3 = $bpnum
+PASS: gdb.base/duplicate-bp.exp: dis_3_del_2_stop_1: step to place breakpoints
+PASS: gdb.base/duplicate-bp.exp: dis_3_del_2_stop_1: disable $bp_num_3
+PASS: gdb.base/duplicate-bp.exp: dis_3_del_2_stop_1: step
+PASS: gdb.base/duplicate-bp.exp: dis_3_del_2_stop_1: delete $bp_num_2
+PASS: gdb.base/duplicate-bp.exp: dis_3_del_2_stop_1: disable #3, delete #2, stop at #1
+Running ./gdb.base/dup-sect.exp ...
+PASS: gdb.base/dup-sect.exp: rename section
+PASS: gdb.base/dup-sect.exp: split
+PASS: gdb.base/dup-sect.exp: strip
+PASS: gdb.base/dup-sect.exp: var1 after strip
+PASS: gdb.base/dup-sect.exp: var2 after strip
+Running ./gdb.base/echo.exp ...
+PASS: gdb.base/echo.exp: Echo test
+Running ./gdb.base/empty_exe.exp ...
+PASS: gdb.base/empty_exe.exp: file ''
+PASS: gdb.base/empty_exe.exp: print 1
+Running ./gdb.base/ena-dis-br.exp ...
+PASS: gdb.base/ena-dis-br.exp: break marker1
+PASS: gdb.base/ena-dis-br.exp: enable break marker1
+PASS: gdb.base/ena-dis-br.exp: info break marker1
+PASS: gdb.base/ena-dis-br.exp: continue to break marker1
+PASS: gdb.base/ena-dis-br.exp: delete break marker1
+PASS: gdb.base/ena-dis-br.exp: break marker2
+PASS: gdb.base/ena-dis-br.exp: enable once break marker2
+PASS: gdb.base/ena-dis-br.exp: info auto-disabled break marker2
+PASS: gdb.base/ena-dis-br.exp: continue to auto-disabled break marker2
+PASS: gdb.base/ena-dis-br.exp: info auto-disabled break marker2
+PASS: gdb.base/ena-dis-br.exp: continue until exit at no stop
+PASS: gdb.base/ena-dis-br.exp: rerun to main
+PASS: gdb.base/ena-dis-br.exp: continue until exit at no stop at auto-disabled break marker2
+PASS: gdb.base/ena-dis-br.exp: break marker3
+PASS: gdb.base/ena-dis-br.exp: enable del break marker3
+PASS: gdb.base/ena-dis-br.exp: info auto-deleted break marker2
+PASS: gdb.base/ena-dis-br.exp: continue to auto-deleted break marker3
+PASS: gdb.base/ena-dis-br.exp: info auto-deleted break marker3
+PASS: gdb.base/ena-dis-br.exp: break marker4
+PASS: gdb.base/ena-dis-br.exp: disable break marker4
+PASS: gdb.base/ena-dis-br.exp: info break marker4
+PASS: gdb.base/ena-dis-br.exp: break 113
+PASS: gdb.base/ena-dis-br.exp: break marker1
+PASS: gdb.base/ena-dis-br.exp: disable break with count
+PASS: gdb.base/ena-dis-br.exp: continue from enable count, first time
+PASS: gdb.base/ena-dis-br.exp: continue from enable count, second time
+PASS: gdb.base/ena-dis-br.exp: continue through enable count, now disabled
+PASS: gdb.base/ena-dis-br.exp: break marker1
+PASS: gdb.base/ena-dis-br.exp: ignore non-existent break
+PASS: gdb.base/ena-dis-br.exp: ignore break with missing ignore count
+PASS: gdb.base/ena-dis-br.exp: ignore break marker1 -1
+PASS: gdb.base/ena-dis-br.exp: ignore break marker1 0
+PASS: gdb.base/ena-dis-br.exp: ignore break marker1
+PASS: gdb.base/ena-dis-br.exp: info ignored break marker1
+PASS: gdb.base/ena-dis-br.exp: continue until exit at no stop at ignored break marker1
+PASS: gdb.base/ena-dis-br.exp: rerun to main
+PASS: gdb.base/ena-dis-br.exp: continue to break marker1, 2nd time
+PASS: gdb.base/ena-dis-br.exp: break marker1
+PASS: gdb.base/ena-dis-br.exp: ignore break marker1
+PASS: gdb.base/ena-dis-br.exp: enable del break marker1
+PASS: gdb.base/ena-dis-br.exp: info break marker1
+PASS: gdb.base/ena-dis-br.exp: continue until exit at no stop at ignored & auto-deleted break marker1
+PASS: gdb.base/ena-dis-br.exp: rerun to main
+PASS: gdb.base/ena-dis-br.exp: continue to ignored & auto-deleted break marker1
+PASS: gdb.base/ena-dis-br.exp: break marker1
+PASS: gdb.base/ena-dis-br.exp: ignore break marker1
+PASS: gdb.base/ena-dis-br.exp: disable break marker1
+PASS: gdb.base/ena-dis-br.exp: continue until exit at no stop at ignored & disabled break marker1
+PASS: gdb.base/ena-dis-br.exp: rerun to main
+PASS: gdb.base/ena-dis-br.exp: info ignored & disabled break marker1
+PASS: gdb.base/ena-dis-br.exp: prepare to continue with ignore count
+PASS: gdb.base/ena-dis-br.exp: continue with ignore count
+PASS: gdb.base/ena-dis-br.exp: step
+PASS: gdb.base/ena-dis-br.exp: continue with ignore count, not stopped at bpt
+Running ./gdb.base/ending-run.exp ...
+PASS: gdb.base/ending-run.exp: bpt at line before routine
+PASS: gdb.base/ending-run.exp: b ending-run.c:14, one
+PASS: gdb.base/ending-run.exp: b ending-run.c:31
+PASS: gdb.base/ending-run.exp: run
+PASS: gdb.base/ending-run.exp: clear worked
+PASS: gdb.base/ending-run.exp: cleared bp at line before routine
+PASS: gdb.base/ending-run.exp: b ending-run.c:1
+PASS: gdb.base/ending-run.exp: b ending-run.c:14, two
+PASS: gdb.base/ending-run.exp: Cleared 2 by line
+PASS: gdb.base/ending-run.exp: b ending-run.c:14
+PASS: gdb.base/ending-run.exp: Breakpoint 7 at *ending-run.c:14
+PASS: gdb.base/ending-run.exp: Clear 2 by default
+PASS: gdb.base/ending-run.exp: all set to continue
+PASS: gdb.base/ending-run.exp: cont
+PASS: gdb.base/ending-run.exp: step out of main
+Running ./gdb.base/enum_cond.exp ...
+PASS: gdb.base/enum_cond.exp: break call_me if param.e == 1
+PASS: gdb.base/enum_cond.exp: continue to conditional breakpoint in call_me
+Running ./gdb.base/enumval.exp ...
+PASS: gdb.base/enumval.exp: print e
+PASS: gdb.base/enumval.exp: print f
+PASS: gdb.base/enumval.exp: print J
+PASS: gdb.base/enumval.exp: print K
+Running ./gdb.base/environ.exp ...
+Running ./gdb.base/eu-strip-infcall.exp ...
+PASS: gdb.base/eu-strip-infcall.exp: infcall
+Running ./gdb.base/eval.exp ...
+PASS: gdb.base/eval.exp: Initialize $a.
+PASS: gdb.base/eval.exp: First eval.
+PASS: gdb.base/eval.exp: Second eval.
+Running ./gdb.base/eval-skip.exp ...
+PASS: gdb.base/eval-skip.exp: set variable x=14
+PASS: gdb.base/eval-skip.exp: set variable y=2
+PASS: gdb.base/eval-skip.exp: set variable z=2
+PASS: gdb.base/eval-skip.exp: set variable w=3
+PASS: gdb.base/eval-skip.exp: print value of (0 && (x+y))
+PASS: gdb.base/eval-skip.exp: print value of (0 && (x-y))
+PASS: gdb.base/eval-skip.exp: print value of (0 && (x*y))
+PASS: gdb.base/eval-skip.exp: print value of (0 && (x/y))
+PASS: gdb.base/eval-skip.exp: print value of (0 && (x%y))
+PASS: gdb.base/eval-skip.exp: print value of (0 && (x&&y))
+PASS: gdb.base/eval-skip.exp: print value of (0 && (x||y))
+PASS: gdb.base/eval-skip.exp: print value of (0 && (x&y))
+PASS: gdb.base/eval-skip.exp: print value of (0 && (x|y))
+PASS: gdb.base/eval-skip.exp: print value of (0 && (x^y))
+PASS: gdb.base/eval-skip.exp: print value of (0 && (x < y))
+PASS: gdb.base/eval-skip.exp: print value of (0 && (x <= y))
+PASS: gdb.base/eval-skip.exp: print value of (0 && (x>y))
+PASS: gdb.base/eval-skip.exp: print value of (0 && (x>=y))
+PASS: gdb.base/eval-skip.exp: print value of (0 && (x==y))
+PASS: gdb.base/eval-skip.exp: print value of (0 && (x!=y))
+PASS: gdb.base/eval-skip.exp: print value of (0 && (x<<31))
+PASS: gdb.base/eval-skip.exp: print value of (0 && (x>>31))
+PASS: gdb.base/eval-skip.exp: print value of (0 && (!x))
+PASS: gdb.base/eval-skip.exp: print value of (0 && (~x))
+PASS: gdb.base/eval-skip.exp: print value of (0 && (-x))
+PASS: gdb.base/eval-skip.exp: print value of (0 && (x++))
+PASS: gdb.base/eval-skip.exp: print value of (0 && (++x))
+PASS: gdb.base/eval-skip.exp: print value of (0 && (x--))
+PASS: gdb.base/eval-skip.exp: print value of (0 && (--x))
+PASS: gdb.base/eval-skip.exp: print value of (0 && (x+=7))
+PASS: gdb.base/eval-skip.exp: print value of (0 && (x=y))
+Running ./gdb.base/exe-lock.exp ...
+PASS: gdb.base/exe-lock.exp: continue until exit
+Running ./gdb.base/expand-psymtabs.exp ...
+PASS: gdb.base/expand-psymtabs.exp: Expand psymtabs
+Running ./gdb.base/exprs.exp ...
+PASS: gdb.base/exprs.exp: print char == (setup)
+PASS: gdb.base/exprs.exp: print char == (print v_char == 0)
+PASS: gdb.base/exprs.exp: print char == (print v_char == 127)
+PASS: gdb.base/exprs.exp: print char != (setup)
+PASS: gdb.base/exprs.exp: print char != (print v_char != 0)
+PASS: gdb.base/exprs.exp: print char != (print v_char != 127)
+PASS: gdb.base/exprs.exp: print char < (setup)
+PASS: gdb.base/exprs.exp: print char < (print v_char < 0)
+PASS: gdb.base/exprs.exp: print char < (print v_char < 127)
+PASS: gdb.base/exprs.exp: print char > (setup)
+PASS: gdb.base/exprs.exp: print char > (print v_char > 0)
+PASS: gdb.base/exprs.exp: print char > (print v_char > 127)
+PASS: gdb.base/exprs.exp: print signed char == (setup)
+PASS: gdb.base/exprs.exp: print signed char == (print v_signed_char == 0)
+PASS: gdb.base/exprs.exp: print signed char == (print v_signed_char == 127)
+PASS: gdb.base/exprs.exp: print signed char != (setup)
+PASS: gdb.base/exprs.exp: print signed char != (print v_signed_char != 0)
+PASS: gdb.base/exprs.exp: print signed char != (print v_signed_char != 127)
+PASS: gdb.base/exprs.exp: print signed char < (setup)
+PASS: gdb.base/exprs.exp: print signed char < (print v_signed_char < 0)
+PASS: gdb.base/exprs.exp: print signed char < (print v_signed_char < 127)
+PASS: gdb.base/exprs.exp: print signed char > (setup)
+PASS: gdb.base/exprs.exp: print signed char > (print v_signed_char > 0)
+PASS: gdb.base/exprs.exp: print signed char > (print v_signed_char > 127)
+PASS: gdb.base/exprs.exp: print signed char == (minus) (setup)
+PASS: gdb.base/exprs.exp: print signed char == (minus) (print v_signed_char == 0)
+PASS: gdb.base/exprs.exp: print signed char == (minus) (print v_signed_char == -1)
+PASS: gdb.base/exprs.exp: print signed char != (minus) (setup)
+PASS: gdb.base/exprs.exp: print signed char != (minus) (print v_signed_char != 0)
+PASS: gdb.base/exprs.exp: print signed char != (minus) (print v_signed_char != -1)
+PASS: gdb.base/exprs.exp: print signed char < (minus) (setup)
+PASS: gdb.base/exprs.exp: print signed char < (minus) (print v_signed_char < 0)
+PASS: gdb.base/exprs.exp: print signed char < (minus) (print v_signed_char < 127)
+PASS: gdb.base/exprs.exp: print signed char > (minus) (setup)
+PASS: gdb.base/exprs.exp: print signed char > (minus) (print v_signed_char > 0)
+PASS: gdb.base/exprs.exp: print signed char > (minus) (print v_signed_char > 127)
+PASS: gdb.base/exprs.exp: print unsigned char == (setup)
+PASS: gdb.base/exprs.exp: print unsigned char == (print v_unsigned_char == 0)
+PASS: gdb.base/exprs.exp: print unsigned char == (print v_unsigned_char == 127)
+PASS: gdb.base/exprs.exp: print unsigned char != (setup)
+PASS: gdb.base/exprs.exp: print unsigned char != (print v_unsigned_char != 0)
+PASS: gdb.base/exprs.exp: print unsigned char != (print v_unsigned_char != 127)
+PASS: gdb.base/exprs.exp: print unsigned char < (setup)
+PASS: gdb.base/exprs.exp: print unsigned char < (print v_unsigned_char < 0)
+PASS: gdb.base/exprs.exp: print unsigned char < (print v_unsigned_char < 127)
+PASS: gdb.base/exprs.exp: print unsigned char > (setup)
+PASS: gdb.base/exprs.exp: print unsigned char > (print v_unsigned_char > 0)
+PASS: gdb.base/exprs.exp: print unsigned char > (print v_unsigned_char > 127)
+PASS: gdb.base/exprs.exp: print unsigned char == (~0) (setup)
+PASS: gdb.base/exprs.exp: print unsigned char == (~0) (print v_unsigned_char == 0)
+PASS: gdb.base/exprs.exp: print unsigned char == (~0) (print v_unsigned_char == ~0)
+PASS: gdb.base/exprs.exp: print unsigned char == (~0) (print v_unsigned_char == (unsigned char)~0)
+PASS: gdb.base/exprs.exp: print unsigned char != (~0) (setup)
+PASS: gdb.base/exprs.exp: print unsigned char != (~0) (print v_unsigned_char != 0)
+PASS: gdb.base/exprs.exp: print unsigned char != (~0) (print v_unsigned_char != (unsigned char)~0)
+PASS: gdb.base/exprs.exp: print unsigned char != (~0) (print v_unsigned_char != ~0)
+PASS: gdb.base/exprs.exp: print unsigned char < (~0) (setup)
+PASS: gdb.base/exprs.exp: print unsigned char < (~0) (print v_unsigned_char < 0)
+PASS: gdb.base/exprs.exp: print unsigned char < (~0) (print v_unsigned_char < 127)
+PASS: gdb.base/exprs.exp: print unsigned char > (~0) (setup)
+PASS: gdb.base/exprs.exp: print unsigned char > (~0) (print v_unsigned_char > 0)
+PASS: gdb.base/exprs.exp: print unsigned char > (~0) (print v_unsigned_char > 127)
+PASS: gdb.base/exprs.exp: print signed short == (setup)
+PASS: gdb.base/exprs.exp: print signed short == (print v_short == 0)
+PASS: gdb.base/exprs.exp: print signed short == (print v_short == 0x7FFF)
+PASS: gdb.base/exprs.exp: print signed short != (setup)
+PASS: gdb.base/exprs.exp: print signed short != (print v_short != 0)
+PASS: gdb.base/exprs.exp: print signed short != (print v_short != 0x7FFF)
+PASS: gdb.base/exprs.exp: print signed short < (setup)
+PASS: gdb.base/exprs.exp: print signed short < (print v_short < 0)
+PASS: gdb.base/exprs.exp: print signed short < (print v_short < 0x7FFF)
+PASS: gdb.base/exprs.exp: print signed short > (setup)
+PASS: gdb.base/exprs.exp: print signed short > (print v_short > 0)
+PASS: gdb.base/exprs.exp: print signed short > (print v_short > 0x7FFF)
+PASS: gdb.base/exprs.exp: print signed short == (minus) (setup)
+PASS: gdb.base/exprs.exp: print signed short == (minus) (print v_short == 0)
+PASS: gdb.base/exprs.exp: print signed short == (minus) (print v_short == -1)
+PASS: gdb.base/exprs.exp: print signed short != (minus) (setup)
+PASS: gdb.base/exprs.exp: print signed short != (minus) (print v_short != 0)
+PASS: gdb.base/exprs.exp: print signed short != (minus) (print v_short != -1)
+PASS: gdb.base/exprs.exp: print signed short < (minus) (setup)
+PASS: gdb.base/exprs.exp: print signed short < (minus) (print v_short < 0)
+PASS: gdb.base/exprs.exp: print signed short < (minus) (print v_short < 0x7FFF)
+PASS: gdb.base/exprs.exp: print signed short > (minus) (setup)
+PASS: gdb.base/exprs.exp: print signed short > (minus) (print v_short > 0)
+PASS: gdb.base/exprs.exp: print signed short > (minus) (print v_short > 0x7FFF)
+PASS: gdb.base/exprs.exp: print signed signed short == (setup)
+PASS: gdb.base/exprs.exp: print signed signed short == (print v_signed_short == 0)
+PASS: gdb.base/exprs.exp: print signed signed short == (print v_signed_short == 0x7FFF)
+PASS: gdb.base/exprs.exp: print signed signed short != (setup)
+PASS: gdb.base/exprs.exp: print signed signed short != (print v_signed_short != 0)
+PASS: gdb.base/exprs.exp: print signed signed short != (print v_signed_short != 0x7FFF)
+PASS: gdb.base/exprs.exp: print signed signed short < (setup)
+PASS: gdb.base/exprs.exp: print signed signed short < (print v_signed_short < 0)
+PASS: gdb.base/exprs.exp: print signed signed short < (print v_signed_short < 0x7FFF)
+PASS: gdb.base/exprs.exp: print signed signed short > (setup)
+PASS: gdb.base/exprs.exp: print signed signed short > (print v_signed_short > 0)
+PASS: gdb.base/exprs.exp: print signed signed short > (print v_signed_short > 0x7FFF)
+PASS: gdb.base/exprs.exp: print signed signed short == (minus) (setup)
+PASS: gdb.base/exprs.exp: print signed signed short == (minus) (print v_signed_short == 0)
+PASS: gdb.base/exprs.exp: print signed signed short == (minus) (print v_signed_short == -1)
+PASS: gdb.base/exprs.exp: print signed signed short != (minus) (setup)
+PASS: gdb.base/exprs.exp: print signed signed short != (minus) (print v_signed_short != 0)
+PASS: gdb.base/exprs.exp: print signed signed short != (minus) (print v_signed_short != -1)
+PASS: gdb.base/exprs.exp: print signed signed short < (minus) (setup)
+PASS: gdb.base/exprs.exp: print signed signed short < (minus) (print v_signed_short < 0)
+PASS: gdb.base/exprs.exp: print signed signed short < (minus) (print v_signed_short < 0x7FFF)
+PASS: gdb.base/exprs.exp: print signed signed short > (minus) (setup)
+PASS: gdb.base/exprs.exp: print signed signed short > (minus) (print v_signed_short > 0)
+PASS: gdb.base/exprs.exp: print signed signed short > (minus) (print v_signed_short > 0x7FFF)
+PASS: gdb.base/exprs.exp: print unsigned short == (setup)
+PASS: gdb.base/exprs.exp: print unsigned short == (print v_unsigned_short == 0)
+PASS: gdb.base/exprs.exp: print unsigned short == (print v_unsigned_short == 0x7FFF)
+PASS: gdb.base/exprs.exp: print unsigned short != (setup)
+PASS: gdb.base/exprs.exp: print unsigned short != (print v_unsigned_short != 0)
+PASS: gdb.base/exprs.exp: print unsigned short != (print v_unsigned_short != 0x7FFF)
+PASS: gdb.base/exprs.exp: print unsigned short < (setup)
+PASS: gdb.base/exprs.exp: print unsigned short < (print v_unsigned_short < 0)
+PASS: gdb.base/exprs.exp: print unsigned short < (print v_unsigned_short < 0x7FFF)
+PASS: gdb.base/exprs.exp: print unsigned short > (setup)
+PASS: gdb.base/exprs.exp: print unsigned short > (print v_unsigned_short > 0)
+PASS: gdb.base/exprs.exp: print unsigned short > (print v_unsigned_short > 0x7FFF)
+PASS: gdb.base/exprs.exp: print unsigned short == (~0) (setup)
+PASS: gdb.base/exprs.exp: print unsigned short == (~0) (print v_unsigned_short == 0)
+PASS: gdb.base/exprs.exp: print unsigned short == (~0) (print sizeof (v_unsigned_short) < sizeof (~0) && v_unsigned_short == ~0)
+PASS: gdb.base/exprs.exp: print unsigned short == (~0) (print v_unsigned_short == (unsigned short)~0)
+PASS: gdb.base/exprs.exp: print unsigned short != (~0) (setup)
+PASS: gdb.base/exprs.exp: print unsigned short != (~0) (print v_unsigned_short != 0)
+PASS: gdb.base/exprs.exp: print unsigned short != (~0) (print v_unsigned_short != (unsigned short)~0)
+PASS: gdb.base/exprs.exp: print unsigned short < (~0) (setup)
+PASS: gdb.base/exprs.exp: print unsigned short < (~0) (print v_unsigned_short < 0)
+PASS: gdb.base/exprs.exp: print unsigned short < (~0) (print v_unsigned_short < 0x7FFF)
+PASS: gdb.base/exprs.exp: print unsigned short > (~0) (setup)
+PASS: gdb.base/exprs.exp: print unsigned short > (~0) (print v_unsigned_short > 0)
+PASS: gdb.base/exprs.exp: print unsigned short > (~0) (print v_unsigned_short > 0x7FFF)
+PASS: gdb.base/exprs.exp: print signed int == (setup)
+PASS: gdb.base/exprs.exp: print signed int == (print v_int == 0)
+PASS: gdb.base/exprs.exp: print signed int == (print v_int == 0x7FFF)
+PASS: gdb.base/exprs.exp: print signed int != (setup)
+PASS: gdb.base/exprs.exp: print signed int != (print v_int != 0)
+PASS: gdb.base/exprs.exp: print signed int != (print v_int != 0x7FFF)
+PASS: gdb.base/exprs.exp: print signed int < (setup)
+PASS: gdb.base/exprs.exp: print signed int < (print v_int < 0)
+PASS: gdb.base/exprs.exp: print signed int < (print v_int < 0x7FFF)
+PASS: gdb.base/exprs.exp: print signed int > (setup)
+PASS: gdb.base/exprs.exp: print signed int > (print v_int > 0)
+PASS: gdb.base/exprs.exp: print signed int > (print v_int > 0x7FFF)
+PASS: gdb.base/exprs.exp: print signed int == (minus) (setup)
+PASS: gdb.base/exprs.exp: print signed int == (minus) (print v_int == 0)
+PASS: gdb.base/exprs.exp: print signed int == (minus) (print v_int == -1)
+PASS: gdb.base/exprs.exp: print signed int != (minus) (setup)
+PASS: gdb.base/exprs.exp: print signed int != (minus) (print v_int != 0)
+PASS: gdb.base/exprs.exp: print signed int != (minus) (print v_int != -1)
+PASS: gdb.base/exprs.exp: print signed int < (minus) (setup)
+PASS: gdb.base/exprs.exp: print signed int < (minus) (print v_int < 0)
+PASS: gdb.base/exprs.exp: print signed int < (minus) (print v_int < 0x7FFF)
+PASS: gdb.base/exprs.exp: print signed int > (minus) (setup)
+PASS: gdb.base/exprs.exp: print signed int > (minus) (print v_int > 0)
+PASS: gdb.base/exprs.exp: print signed int > (minus) (print v_int > 0x7FFF)
+PASS: gdb.base/exprs.exp: print signed signed int == (setup)
+PASS: gdb.base/exprs.exp: print signed signed int == (print v_signed_int == 0)
+PASS: gdb.base/exprs.exp: print signed signed int == (print v_signed_int == 0x7FFF)
+PASS: gdb.base/exprs.exp: print signed signed int != (setup)
+PASS: gdb.base/exprs.exp: print signed signed int != (print v_signed_int != 0)
+PASS: gdb.base/exprs.exp: print signed signed int != (print v_signed_int != 0x7FFF)
+PASS: gdb.base/exprs.exp: print signed signed int < (setup)
+PASS: gdb.base/exprs.exp: print signed signed int < (print v_signed_int < 0)
+PASS: gdb.base/exprs.exp: print signed signed int < (print v_signed_int < 0x7FFF)
+PASS: gdb.base/exprs.exp: print signed signed int > (setup)
+PASS: gdb.base/exprs.exp: print signed signed int > (print v_signed_int > 0)
+PASS: gdb.base/exprs.exp: print signed signed int > (print v_signed_int > 0x7FFF)
+PASS: gdb.base/exprs.exp: print signed signed int == (minus) (setup)
+PASS: gdb.base/exprs.exp: print signed signed int == (minus) (print v_signed_int == 0)
+PASS: gdb.base/exprs.exp: print signed signed int == (minus) (print v_signed_int == -1)
+PASS: gdb.base/exprs.exp: print signed signed int != (minus) (setup)
+PASS: gdb.base/exprs.exp: print signed signed int != (minus) (print v_signed_int != 0)
+PASS: gdb.base/exprs.exp: print signed signed int != (minus) (print v_signed_int != -1)
+PASS: gdb.base/exprs.exp: print signed signed int < (minus) (setup)
+PASS: gdb.base/exprs.exp: print signed signed int < (minus) (print v_signed_int < 0)
+PASS: gdb.base/exprs.exp: print signed signed int < (minus) (print v_signed_int < 0x7FFF)
+PASS: gdb.base/exprs.exp: print signed signed int > (minus) (setup)
+PASS: gdb.base/exprs.exp: print signed signed int > (minus) (print v_signed_int > 0)
+PASS: gdb.base/exprs.exp: print signed signed int > (minus) (print v_signed_int > 0x7FFF)
+PASS: gdb.base/exprs.exp: print unsigned int == (setup)
+PASS: gdb.base/exprs.exp: print unsigned int == (print v_unsigned_int == 0)
+PASS: gdb.base/exprs.exp: print unsigned int == (print v_unsigned_int == 0x7FFF)
+PASS: gdb.base/exprs.exp: print unsigned int != (setup)
+PASS: gdb.base/exprs.exp: print unsigned int != (print v_unsigned_int != 0)
+PASS: gdb.base/exprs.exp: print unsigned int != (print v_unsigned_int != 0x7FFF)
+PASS: gdb.base/exprs.exp: print unsigned int < (setup)
+PASS: gdb.base/exprs.exp: print unsigned int < (print v_unsigned_int < 0)
+PASS: gdb.base/exprs.exp: print unsigned int < (print v_unsigned_int < 0x7FFF)
+PASS: gdb.base/exprs.exp: print unsigned int > (setup)
+PASS: gdb.base/exprs.exp: print unsigned int > (print v_unsigned_int > 0)
+PASS: gdb.base/exprs.exp: print unsigned int > (print v_unsigned_int > 0x7FFF)
+PASS: gdb.base/exprs.exp: print unsigned int == (~0) (setup)
+PASS: gdb.base/exprs.exp: print unsigned int == (~0) (print v_unsigned_int == 0)
+PASS: gdb.base/exprs.exp: print unsigned int == (~0) (print v_unsigned_int == ~0)
+PASS: gdb.base/exprs.exp: print unsigned int == (~0) (print v_unsigned_int == (unsigned int)~0)
+PASS: gdb.base/exprs.exp: print unsigned int != (~0) (setup)
+PASS: gdb.base/exprs.exp: print unsigned int != (~0) (print v_unsigned_int != 0)
+PASS: gdb.base/exprs.exp: print unsigned int != (~0) (print v_unsigned_int != (unsigned int)~0)
+PASS: gdb.base/exprs.exp: print unsigned int < (~0) (setup)
+PASS: gdb.base/exprs.exp: print unsigned int < (~0) (print v_unsigned_int < 0)
+PASS: gdb.base/exprs.exp: print unsigned int < (~0) (print v_unsigned_int < 0x7FFF)
+PASS: gdb.base/exprs.exp: print unsigned int > (~0) (setup)
+PASS: gdb.base/exprs.exp: print unsigned int > (~0) (print v_unsigned_int > 0)
+PASS: gdb.base/exprs.exp: print unsigned int > (~0) (print v_unsigned_int > 0x7FFF)
+PASS: gdb.base/exprs.exp: print signed long == (setup)
+PASS: gdb.base/exprs.exp: print signed long == (print v_long == 0)
+PASS: gdb.base/exprs.exp: print signed long == (print v_long == 0x7FFF)
+PASS: gdb.base/exprs.exp: print signed long != (setup)
+PASS: gdb.base/exprs.exp: print signed long != (print v_long != 0)
+PASS: gdb.base/exprs.exp: print signed long != (print v_long != 0x7FFF)
+PASS: gdb.base/exprs.exp: print signed long < (setup)
+PASS: gdb.base/exprs.exp: print signed long < (print v_long < 0)
+PASS: gdb.base/exprs.exp: print signed long < (print v_long < 0x7FFF)
+PASS: gdb.base/exprs.exp: print signed long > (setup)
+PASS: gdb.base/exprs.exp: print signed long > (print v_long > 0)
+PASS: gdb.base/exprs.exp: print signed long > (print v_long > 0x7FFF)
+PASS: gdb.base/exprs.exp: print signed long == (minus) (setup)
+PASS: gdb.base/exprs.exp: print signed long == (minus) (print v_long == 0)
+PASS: gdb.base/exprs.exp: print signed long == (minus) (print v_long == -1)
+PASS: gdb.base/exprs.exp: print signed long != (minus) (setup)
+PASS: gdb.base/exprs.exp: print signed long != (minus) (print v_long != 0)
+PASS: gdb.base/exprs.exp: print signed long != (minus) (print v_long != -1)
+PASS: gdb.base/exprs.exp: print signed long < (minus) (setup)
+PASS: gdb.base/exprs.exp: print signed long < (minus) (print v_long < 0)
+PASS: gdb.base/exprs.exp: print signed long < (minus) (print v_long < 0x7FFF)
+PASS: gdb.base/exprs.exp: print signed long > (minus) (setup)
+PASS: gdb.base/exprs.exp: print signed long > (minus) (print v_long > 0)
+PASS: gdb.base/exprs.exp: print signed long > (minus) (print v_long > 0x7FFF)
+PASS: gdb.base/exprs.exp: print signed signed long == (setup)
+PASS: gdb.base/exprs.exp: print signed signed long == (print v_signed_long == 0)
+PASS: gdb.base/exprs.exp: print signed signed long == (print v_signed_long == 0x7FFF)
+PASS: gdb.base/exprs.exp: print signed signed long != (setup)
+PASS: gdb.base/exprs.exp: print signed signed long != (print v_signed_long != 0)
+PASS: gdb.base/exprs.exp: print signed signed long != (print v_signed_long != 0x7FFF)
+PASS: gdb.base/exprs.exp: print signed signed long < (setup)
+PASS: gdb.base/exprs.exp: print signed signed long < (print v_signed_long < 0)
+PASS: gdb.base/exprs.exp: print signed signed long < (print v_signed_long < 0x7FFF)
+PASS: gdb.base/exprs.exp: print signed signed long > (setup)
+PASS: gdb.base/exprs.exp: print signed signed long > (print v_signed_long > 0)
+PASS: gdb.base/exprs.exp: print signed signed long > (print v_signed_long > 0x7FFF)
+PASS: gdb.base/exprs.exp: print signed signed long == (minus) (setup)
+PASS: gdb.base/exprs.exp: print signed signed long == (minus) (print v_signed_long == 0)
+PASS: gdb.base/exprs.exp: print signed signed long == (minus) (print v_signed_long == -1)
+PASS: gdb.base/exprs.exp: print signed signed long != (minus) (setup)
+PASS: gdb.base/exprs.exp: print signed signed long != (minus) (print v_signed_long != 0)
+PASS: gdb.base/exprs.exp: print signed signed long != (minus) (print v_signed_long != -1)
+PASS: gdb.base/exprs.exp: print signed signed long < (minus) (setup)
+PASS: gdb.base/exprs.exp: print signed signed long < (minus) (print v_signed_long < 0)
+PASS: gdb.base/exprs.exp: print signed signed long < (minus) (print v_signed_long < 0x7FFF)
+PASS: gdb.base/exprs.exp: print signed signed long > (minus) (setup)
+PASS: gdb.base/exprs.exp: print signed signed long > (minus) (print v_signed_long > 0)
+PASS: gdb.base/exprs.exp: print signed signed long > (minus) (print v_signed_long > 0x7FFF)
+PASS: gdb.base/exprs.exp: print unsigned long == (setup)
+PASS: gdb.base/exprs.exp: print unsigned long == (print v_unsigned_long == 0)
+PASS: gdb.base/exprs.exp: print unsigned long == (print v_unsigned_long == 0x7FFF)
+PASS: gdb.base/exprs.exp: print unsigned long != (setup)
+PASS: gdb.base/exprs.exp: print unsigned long != (print v_unsigned_long != 0)
+PASS: gdb.base/exprs.exp: print unsigned long != (print v_unsigned_long != 0x7FFF)
+PASS: gdb.base/exprs.exp: print unsigned long < (setup)
+PASS: gdb.base/exprs.exp: print unsigned long < (print v_unsigned_long < 0)
+PASS: gdb.base/exprs.exp: print unsigned long < (print v_unsigned_long < 0x7FFF)
+PASS: gdb.base/exprs.exp: print unsigned long > (setup)
+PASS: gdb.base/exprs.exp: print unsigned long > (print v_unsigned_long > 0)
+PASS: gdb.base/exprs.exp: print unsigned long > (print v_unsigned_long > 0x7FFF)
+PASS: gdb.base/exprs.exp: print unsigned long == (~0) (setup)
+PASS: gdb.base/exprs.exp: print unsigned long == (~0) (print v_unsigned_long == 0)
+PASS: gdb.base/exprs.exp: print unsigned long == (~0) (print v_unsigned_long == ~0)
+PASS: gdb.base/exprs.exp: print unsigned long == (~0) (print v_unsigned_long == (unsigned long)~0)
+PASS: gdb.base/exprs.exp: print unsigned long != (~0) (setup)
+PASS: gdb.base/exprs.exp: print unsigned long != (~0) (print v_unsigned_long != 0)
+PASS: gdb.base/exprs.exp: print unsigned long != (~0) (print v_unsigned_long != (unsigned long)~0)
+PASS: gdb.base/exprs.exp: print unsigned long < (~0) (setup)
+PASS: gdb.base/exprs.exp: print unsigned long < (~0) (print v_unsigned_long < 0)
+PASS: gdb.base/exprs.exp: print unsigned long < (~0) (print v_unsigned_long < 0x7FFF)
+PASS: gdb.base/exprs.exp: print unsigned long > (~0) (setup)
+PASS: gdb.base/exprs.exp: print unsigned long > (~0) (print v_unsigned_long > 0)
+PASS: gdb.base/exprs.exp: print unsigned long > (~0) (print v_unsigned_long > 0x7FFF)
+PASS: gdb.base/exprs.exp: print (void*)v_signed_char (setup)
+PASS: gdb.base/exprs.exp: print (void*)v_signed_char (print (void*)v_signed_char)
+PASS: gdb.base/exprs.exp: print (void*)v_signed_short (setup)
+PASS: gdb.base/exprs.exp: print (void*)v_signed_short (print (void*)v_signed_short)
+PASS: gdb.base/exprs.exp: print (void*)v_signed_int (setup)
+PASS: gdb.base/exprs.exp: print (void*)v_signed_int (print (void*)v_signed_int)
+PASS: gdb.base/exprs.exp: print (void*)v_signed_long (setup)
+PASS: gdb.base/exprs.exp: print (void*)v_signed_long (print (void*)v_signed_long)
+PASS: gdb.base/exprs.exp: print (void*)v_unsigned_char (setup)
+PASS: gdb.base/exprs.exp: print (void*)v_unsigned_char (print (void*)v_unsigned_char)
+PASS: gdb.base/exprs.exp: print (void*)v_unsigned_short (setup)
+PASS: gdb.base/exprs.exp: print (void*)v_unsigned_short (print (void*)v_unsigned_short)
+PASS: gdb.base/exprs.exp: print (void*)v_unsigned_int (setup)
+PASS: gdb.base/exprs.exp: print (void*)v_unsigned_int (print (void*)v_unsigned_int)
+PASS: gdb.base/exprs.exp: print (void*)v_unsigned_long (setup)
+PASS: gdb.base/exprs.exp: print (void*)v_unsigned_long (print (void*)v_unsigned_long)
+PASS: gdb.base/exprs.exp: sizeof (long long) > sizeof (long) (true)
+PASS: gdb.base/exprs.exp: truncate (void*) 0x00000000ffffffff + 1
+PASS: gdb.base/exprs.exp: truncate (void*) 0xffffffff00000000 - 1
+PASS: gdb.base/exprs.exp: \$[0-9]* = "xy" (setup)
+PASS: gdb.base/exprs.exp: \$[0-9]* = "xyz" (setup)
+PASS: gdb.base/exprs.exp: \$[0-9]* = red (setup)
+PASS: gdb.base/exprs.exp: set output-radix 8
+PASS: gdb.base/exprs.exp: \$[0-9]* = red (setup)
+PASS: gdb.base/exprs.exp: \$[0-9]* = 0 (setup)
+PASS: gdb.base/exprs.exp: set output-radix 10
+PASS: gdb.base/exprs.exp: set variable v_int = 1
+PASS: gdb.base/exprs.exp: print v_int++
+PASS: gdb.base/exprs.exp: print ++v_int
+PASS: gdb.base/exprs.exp: print v_int--
+PASS: gdb.base/exprs.exp: print --v_int
+PASS: gdb.base/exprs.exp: print v_int++ = 5
+PASS: gdb.base/exprs.exp: print v_int-- = 5
+PASS: gdb.base/exprs.exp: print v_int_array_init
+PASS: gdb.base/exprs.exp: print *v_int_array_init@1
+PASS: gdb.base/exprs.exp: print *v_int_array_init@2
+PASS: gdb.base/exprs.exp: print v_int_array_init[0]@1
+PASS: gdb.base/exprs.exp: print v_int_array_init[0]@2
+PASS: gdb.base/exprs.exp: print v_int_array_init[1]@1
+PASS: gdb.base/exprs.exp: set variable v_short_array[0] = 42
+PASS: gdb.base/exprs.exp: print {short} v_short_array
+PASS: gdb.base/exprs.exp: print (void) v_int_pointer
+PASS: gdb.base/exprs.exp: print & (void) v_char
+Running ./gdb.base/fileio.exp ...
+Running ./gdb.base/find.exp ...
+PASS: gdb.base/find.exp: breakpoint function in file
+PASS: gdb.base/find.exp: run until function breakpoint
+PASS: gdb.base/find.exp: find string pattern
+PASS: gdb.base/find.exp: pattern not found at end of range
+PASS: gdb.base/find.exp: pattern found at end of range
+PASS: gdb.base/find.exp: max-count
+PASS: gdb.base/find.exp: $_
+PASS: gdb.base/find.exp: $numfound
+PASS: gdb.base/find.exp: size,max-count, /1b
+PASS: gdb.base/find.exp: size,max-count, /b1
+PASS: gdb.base/find.exp: size,max-count, /b/1
+PASS: gdb.base/find.exp: size,max-count, /1/b
+PASS: gdb.base/find.exp: find byte pattern with end address
+PASS: gdb.base/find.exp: find 16-bit pattern
+PASS: gdb.base/find.exp: find 16-bit pattern
+PASS: gdb.base/find.exp: find 32-bit pattern
+PASS: gdb.base/find.exp: find 32-bit pattern
+PASS: gdb.base/find.exp: find 64-bit pattern
+PASS: gdb.base/find.exp: find 64-bit pattern
+PASS: gdb.base/find.exp: find mixed-sized pattern
+PASS: gdb.base/find.exp: search spanning large range
+PASS: gdb.base/find.exp: find int64_search_buf, +64/8*100, int64_search_buf
+Running ./gdb.base/find-unmapped.exp ...
+Running ./gdb.base/finish.exp ...
+PASS: gdb.base/finish.exp: set break on void_func
+PASS: gdb.base/finish.exp: continue to void_func
+PASS: gdb.base/finish.exp: finish from void_func
+PASS: gdb.base/finish.exp: set break on char_func
+PASS: gdb.base/finish.exp: continue to char_func
+PASS: gdb.base/finish.exp: finish from char_func
+PASS: gdb.base/finish.exp: set break on short_func
+PASS: gdb.base/finish.exp: continue to short_func
+PASS: gdb.base/finish.exp: finish from short_func
+PASS: gdb.base/finish.exp: set break on int_func
+PASS: gdb.base/finish.exp: continue to int_func
+PASS: gdb.base/finish.exp: finish from int_func
+PASS: gdb.base/finish.exp: set break on long_func
+PASS: gdb.base/finish.exp: continue to long_func
+PASS: gdb.base/finish.exp: finish from long_func
+PASS: gdb.base/finish.exp: set break on long_long_func
+PASS: gdb.base/finish.exp: continue to long_long_func
+PASS: gdb.base/finish.exp: finish from long_long_func
+PASS: gdb.base/finish.exp: set break on float_func
+PASS: gdb.base/finish.exp: continue to float_func
+PASS: gdb.base/finish.exp: finish from float_func
+PASS: gdb.base/finish.exp: set break on double_func
+PASS: gdb.base/finish.exp: continue to double_func
+PASS: gdb.base/finish.exp: finish from double_func
+PASS: gdb.base/finish.exp: Testing the "fin" abbreviation for "finish"
+Running ./gdb.base/fixsection.exp ...
+PASS: gdb.base/fixsection.exp: breakpoint at static_fun
+Running ./gdb.base/float.exp ...
+PASS: gdb.base/float.exp: info float
+PASS: gdb.base/float.exp: step
+PASS: gdb.base/float.exp: finish
+Running ./gdb.base/foll-exec.exp ...
+Running ./gdb.base/foll-fork.exp ...
+Running ./gdb.base/foll-vfork.exp ...
+Running ./gdb.base/fortran-sym-case.exp ...
+PASS: gdb.base/fortran-sym-case.exp: set language fortran
+PASS: gdb.base/fortran-sym-case.exp: frame
+Running ./gdb.base/frame-args.exp ...
+PASS: gdb.base/frame-args.exp: set print frame-arguments all
+PASS: gdb.base/frame-args.exp: frame 1 with print frame-arguments set to all
+PASS: gdb.base/frame-args.exp: set print frame-arguments scalars
+PASS: gdb.base/frame-args.exp: frame 1 with print frame-arguments set to scalars
+PASS: gdb.base/frame-args.exp: set print frame-arguments none
+PASS: gdb.base/frame-args.exp: frame 1 with print frame-arguments set to none
+Running ./gdb.base/freebpcmd.exp ...
+PASS: gdb.base/freebpcmd.exp: set breakpoint
+PASS: gdb.base/freebpcmd.exp: send breakpoint commands
+PASS: gdb.base/freebpcmd.exp: run program with breakpoint commands
+Running ./gdb.base/fullname.exp ...
+PASS: gdb.base/fullname.exp: set breakpoint by full path before loading symbols - built absolute
+PASS: gdb.base/fullname.exp: set breakpoint at main - built absolute
+PASS: gdb.base/fullname.exp: set breakpoint by full path after loading symbols - built absolute
+PASS: gdb.base/fullname.exp: set breakpoint by full path before loading symbols - built relative
+PASS: gdb.base/fullname.exp: set breakpoint at main - built relative
+PASS: gdb.base/fullname.exp: set breakpoint by full path after loading symbols - built relative
+PASS: gdb.base/fullname.exp: set breakpoint by full path before loading symbols - built other
+PASS: gdb.base/fullname.exp: set breakpoint at main - built other
+PASS: gdb.base/fullname.exp: set breakpoint by full path after loading symbols - built other
+Running ./gdb.base/fullpath-expand.exp ...
+PASS: gdb.base/fullpath-expand.exp: rbreak XXX/fullpath-expand-func.c:func
+PASS: gdb.base/fullpath-expand.exp: list func
+PASS: gdb.base/fullpath-expand.exp: info source
+Running ./gdb.base/funcargs.exp ...
+PASS: gdb.base/funcargs.exp: set print frame-arguments all
+PASS: gdb.base/funcargs.exp: run to call0a
+PASS: gdb.base/funcargs.exp: print c after run to call0a
+PASS: gdb.base/funcargs.exp: print s after run to call0a
+PASS: gdb.base/funcargs.exp: print i after run to call0a
+PASS: gdb.base/funcargs.exp: print l after run to call0a
+PASS: gdb.base/funcargs.exp: continue to call0b
+PASS: gdb.base/funcargs.exp: continue to call0c
+PASS: gdb.base/funcargs.exp: continue to call0d
+PASS: gdb.base/funcargs.exp: continue to call0e
+PASS: gdb.base/funcargs.exp: run to call1a
+PASS: gdb.base/funcargs.exp: print uc
+PASS: gdb.base/funcargs.exp: print us
+PASS: gdb.base/funcargs.exp: print ui
+PASS: gdb.base/funcargs.exp: print ul
+PASS: gdb.base/funcargs.exp: continue to call1b
+PASS: gdb.base/funcargs.exp: continue to call1c
+PASS: gdb.base/funcargs.exp: continue to call1d
+PASS: gdb.base/funcargs.exp: continue to call1e
+PASS: gdb.base/funcargs.exp: run to call2a
+PASS: gdb.base/funcargs.exp: print c after run to call2a
+PASS: gdb.base/funcargs.exp: print f1 after run to call2a
+PASS: gdb.base/funcargs.exp: print s after run to call2a
+PASS: gdb.base/funcargs.exp: print d1 after run to call2a
+PASS: gdb.base/funcargs.exp: print i after run to call2a
+PASS: gdb.base/funcargs.exp: print f2 after run to call2a
+PASS: gdb.base/funcargs.exp: print l after run to call2a
+PASS: gdb.base/funcargs.exp: print d2 after run to call2a
+PASS: gdb.base/funcargs.exp: continue to call2b
+PASS: gdb.base/funcargs.exp: continue to call2c
+PASS: gdb.base/funcargs.exp: continue to call2d
+PASS: gdb.base/funcargs.exp: continue to call2e
+PASS: gdb.base/funcargs.exp: continue to call2f
+PASS: gdb.base/funcargs.exp: continue to call2g
+PASS: gdb.base/funcargs.exp: continue to call2h
+PASS: gdb.base/funcargs.exp: continue to call2i
+PASS: gdb.base/funcargs.exp: run to call2a
+PASS: gdb.base/funcargs.exp: continue to callcb
+PASS: gdb.base/funcargs.exp: continue to callcc
+PASS: gdb.base/funcargs.exp: continue to callcd
+PASS: gdb.base/funcargs.exp: continue to callce
+PASS: gdb.base/funcargs.exp: continue to callcf
+PASS: gdb.base/funcargs.exp: run to callc1a
+PASS: gdb.base/funcargs.exp: continue to callc1b
+PASS: gdb.base/funcargs.exp: run to callc2a
+PASS: gdb.base/funcargs.exp: continue to callc2b
+PASS: gdb.base/funcargs.exp: run to call3a
+PASS: gdb.base/funcargs.exp: print *cp
+PASS: gdb.base/funcargs.exp: print *sp
+PASS: gdb.base/funcargs.exp: print *ip
+PASS: gdb.base/funcargs.exp: print *lp
+PASS: gdb.base/funcargs.exp: continue to call3b
+PASS: gdb.base/funcargs.exp: print *ucp
+PASS: gdb.base/funcargs.exp: print *usp
+PASS: gdb.base/funcargs.exp: print *uip
+PASS: gdb.base/funcargs.exp: print *ulp
+PASS: gdb.base/funcargs.exp: continue to call3c
+PASS: gdb.base/funcargs.exp: print *fp
+PASS: gdb.base/funcargs.exp: print *dp
+PASS: gdb.base/funcargs.exp: run to call4a
+PASS: gdb.base/funcargs.exp: print *stp
+PASS: gdb.base/funcargs.exp: continue to call4b
+PASS: gdb.base/funcargs.exp: print *unp (sizeof long == sizeof int)
+PASS: gdb.base/funcargs.exp: locate actual args, structs/unions passed by reference
+PASS: gdb.base/funcargs.exp: run to call5a
+PASS: gdb.base/funcargs.exp: print st
+PASS: gdb.base/funcargs.exp: continue to call5b (sizeof long == sizeof int)
+PASS: gdb.base/funcargs.exp: print un (sizeof long == sizeof int)
+PASS: gdb.base/funcargs.exp: run to call6a
+PASS: gdb.base/funcargs.exp: backtrace from call6a
+PASS: gdb.base/funcargs.exp: continue to call6b
+PASS: gdb.base/funcargs.exp: backtrace from call6b
+PASS: gdb.base/funcargs.exp: continue to call6c
+PASS: gdb.base/funcargs.exp: backtrace from call6c
+PASS: gdb.base/funcargs.exp: continue to call6d
+PASS: gdb.base/funcargs.exp: backtrace from call6d
+PASS: gdb.base/funcargs.exp: continue to call6e
+PASS: gdb.base/funcargs.exp: backtrace from call6e
+PASS: gdb.base/funcargs.exp: continue to call6f
+PASS: gdb.base/funcargs.exp: backtrace from call6f
+PASS: gdb.base/funcargs.exp: continue to call6g
+PASS: gdb.base/funcargs.exp: backtrace from call6g
+PASS: gdb.base/funcargs.exp: continue to call6h
+PASS: gdb.base/funcargs.exp: backtrace from call6h
+PASS: gdb.base/funcargs.exp: continue to call6i
+PASS: gdb.base/funcargs.exp: backtrace from call6i
+PASS: gdb.base/funcargs.exp: continue to call6j
+PASS: gdb.base/funcargs.exp: backtrace from call6j
+PASS: gdb.base/funcargs.exp: continue to call6k
+PASS: gdb.base/funcargs.exp: backtrace from call6k
+PASS: gdb.base/funcargs.exp: run to call7a
+PASS: gdb.base/funcargs.exp: backtrace from call7a
+PASS: gdb.base/funcargs.exp: continue to call7b
+PASS: gdb.base/funcargs.exp: backtrace from call7b
+PASS: gdb.base/funcargs.exp: continue to call7c
+PASS: gdb.base/funcargs.exp: backtrace from call7c
+PASS: gdb.base/funcargs.exp: continue to call7d
+PASS: gdb.base/funcargs.exp: backtrace from call7d
+PASS: gdb.base/funcargs.exp: continue to call7e
+PASS: gdb.base/funcargs.exp: backtrace from call7e
+PASS: gdb.base/funcargs.exp: continue to call7f
+PASS: gdb.base/funcargs.exp: backtrace from call7f
+PASS: gdb.base/funcargs.exp: continue to call7g
+PASS: gdb.base/funcargs.exp: backtrace from call7g
+PASS: gdb.base/funcargs.exp: continue to call7h
+PASS: gdb.base/funcargs.exp: backtrace from call7h
+PASS: gdb.base/funcargs.exp: continue to call7i
+PASS: gdb.base/funcargs.exp: backtrace from call7i
+PASS: gdb.base/funcargs.exp: continue to call7j
+PASS: gdb.base/funcargs.exp: backtrace from call7j
+PASS: gdb.base/funcargs.exp: continue to call7k
+PASS: gdb.base/funcargs.exp: backtrace from call7k
+PASS: gdb.base/funcargs.exp: run to hitbottom
+PASS: gdb.base/funcargs.exp: recursive passing of structs by value
+PASS: gdb.base/funcargs.exp: print c after runto localvars_after_alloca
+PASS: gdb.base/funcargs.exp: print s after runto localvars_after_alloca
+PASS: gdb.base/funcargs.exp: print i after runto localvars_after_alloca
+PASS: gdb.base/funcargs.exp: print l after runto localvars_after_alloca
+PASS: gdb.base/funcargs.exp: next in localvars_after_alloca()
+PASS: gdb.base/funcargs.exp: print c in localvars_after_alloca
+PASS: gdb.base/funcargs.exp: print s in localvars_after_alloca
+PASS: gdb.base/funcargs.exp: print i in localvars_after_alloca
+PASS: gdb.base/funcargs.exp: print l in localvars_after_alloca
+PASS: gdb.base/funcargs.exp: backtrace after alloca
+PASS: gdb.base/funcargs.exp: print c in call_after_alloca
+PASS: gdb.base/funcargs.exp: print s in call_after_alloca
+PASS: gdb.base/funcargs.exp: print i in call_after_alloca
+PASS: gdb.base/funcargs.exp: print l in call_after_alloca
+PASS: gdb.base/funcargs.exp: backtrace from call_after_alloca_subr
+PASS: gdb.base/funcargs.exp: continue to call0a
+PASS: gdb.base/funcargs.exp: print c in localvars_in_indirect_call
+PASS: gdb.base/funcargs.exp: print s in localvars_in_indirect_call
+PASS: gdb.base/funcargs.exp: print i in localvars_in_indirect_call
+PASS: gdb.base/funcargs.exp: print l in localvars_in_indirect_call
+PASS: gdb.base/funcargs.exp: backtrace in indirectly called function
+PASS: gdb.base/funcargs.exp: finish from indirectly called function
+PASS: gdb.base/funcargs.exp: stepping into indirectly called function
+PASS: gdb.base/funcargs.exp: finish from marker_call_with_trampolines
+PASS: gdb.base/funcargs.exp: stepping into function called with trampolines
+PASS: gdb.base/funcargs.exp: backtrace through call with trampolines
+PASS: gdb.base/funcargs.exp: stepping back to main from function called with trampolines
+Running ./gdb.base/gcore-buffer-overflow.exp ...
+PASS: gdb.base/gcore-buffer-overflow.exp: help gcore
+PASS: gdb.base/gcore-buffer-overflow.exp: Set buffer exceeding arguments
+PASS: gdb.base/gcore-buffer-overflow.exp: save a corefile
+Running ./gdb.base/gcore.exp ...
+PASS: gdb.base/gcore.exp: help gcore
+PASS: gdb.base/gcore.exp: set breakpoint at terminal_func
+PASS: gdb.base/gcore.exp: continue to terminal_func
+PASS: gdb.base/gcore.exp: save a corefile
+FAIL: gdb.base/gcore.exp: re-load generated corefile (bad file format)
+Running ./gdb.base/gcore-relro.exp ...
+PASS: gdb.base/gcore-relro.exp: help gcore
+PASS: gdb.base/gcore-relro.exp: save a corefile
+FAIL: gdb.base/gcore-relro.exp: re-load generated corefile
+FAIL: gdb.base/gcore-relro.exp: library got loaded
+Running ./gdb.base/gdb1056.exp ...
+PASS: gdb.base/gdb1056.exp: print 1/0
+PASS: gdb.base/gdb1056.exp: Test unsigned division by zero
+Running ./gdb.base/gdb1090.exp ...
+PASS: gdb.base/gdb1090.exp: continue to breakpoint: break-here
+PASS: gdb.base/gdb1090.exp: print s24
+Running ./gdb.base/gdb11530.exp ...
+PASS: gdb.base/gdb11530.exp: print a.i
+PASS: gdb.base/gdb11530.exp: print sizeof (a.i)
+PASS: gdb.base/gdb11530.exp: print sizeof (a.i) == sizeof (int)
+Running ./gdb.base/gdb11531.exp ...
+PASS: gdb.base/gdb11531.exp: Set watchpoint
+PASS: gdb.base/gdb11531.exp: watchpoint variable triggers at next
+PASS: gdb.base/gdb11531.exp: watchpoint variable triggers at continue
+Running ./gdb.base/gdb1250.exp ...
+PASS: gdb.base/gdb1250.exp: backtrace from abort
+Running ./gdb.base/gdb1555.exp ...
+PASS: gdb.base/gdb1555.exp: Step into shared lib function
+PASS: gdb.base/gdb1555.exp: Next while in a shared lib function
+Running ./gdb.base/gdb1821.exp ...
+PASS: gdb.base/gdb1821.exp: print /x bar
+Running ./gdb.base/gdbindex-stabs.exp ...
+PASS: gdb.base/gdbindex-stabs.exp: list stabs_function
+Running ./gdb.base/gdbvars.exp ...
+PASS: gdb.base/gdbvars.exp: set print sevenbit-strings
+PASS: gdb.base/gdbvars.exp: Set value-history[1] using $1
+PASS: gdb.base/gdbvars.exp: Set value-history[2] using $2
+PASS: gdb.base/gdbvars.exp: Set value-history[3] using $3
+PASS: gdb.base/gdbvars.exp: Print value-history[MAX-1] using inplicit index $$
+PASS: gdb.base/gdbvars.exp: Print value-history[MAX-1] again using implicit index $$
+PASS: gdb.base/gdbvars.exp: Print value-history[MAX] using implicit index $
+PASS: gdb.base/gdbvars.exp: Print value-history[MAX-2] using explicit index $$2
+PASS: gdb.base/gdbvars.exp: Print value-history[MAX] using explicit index $0
+PASS: gdb.base/gdbvars.exp: print 108
+PASS: gdb.base/gdbvars.exp: Print value-history[MAX] using explicit index $$0
+PASS: gdb.base/gdbvars.exp: Print value-history[1] using explicit index $1
+PASS: gdb.base/gdbvars.exp: Print value-history[2] using explicit index $2
+PASS: gdb.base/gdbvars.exp: Print value-history[3] using explicit index $3
+PASS: gdb.base/gdbvars.exp: Print (value-history[MAX] - 3) using implicit index $
+PASS: gdb.base/gdbvars.exp: Use value-history element in arithmetic expression
+PASS: gdb.base/gdbvars.exp: Set a new convenience variable
+PASS: gdb.base/gdbvars.exp: Print contents of new convenience variable
+PASS: gdb.base/gdbvars.exp: Set convenience variable to a new value
+PASS: gdb.base/gdbvars.exp: Print new contents of convenience variable
+PASS: gdb.base/gdbvars.exp: Set convenience variable $_
+PASS: gdb.base/gdbvars.exp: Print contents of convenience variable $_
+PASS: gdb.base/gdbvars.exp: Use convenience variable in arithmetic expression
+PASS: gdb.base/gdbvars.exp: Use convenience variable assignment in arithmetic expression
+PASS: gdb.base/gdbvars.exp: Print contents of uninitialized convenience variable
+PASS: gdb.base/gdbvars.exp: Set a new convenience variable to a program variable
+PASS: gdb.base/gdbvars.exp: Print contents of new convenience variable of program variable
+Running ./gdb.base/gnu-debugdata.exp ...
+PASS: gdb.base/gnu-debugdata.exp: nm -D - invoke i686-pc-linux-gnu-nm
+PASS: gdb.base/gnu-debugdata.exp: nm -D - invoke awk
+PASS: gdb.base/gnu-debugdata.exp: nm -D - invoke sort
+PASS: gdb.base/gnu-debugdata.exp: nm - invoke i686-pc-linux-gnu-nm
+PASS: gdb.base/gnu-debugdata.exp: nm - invoke awk
+PASS: gdb.base/gnu-debugdata.exp: nm - invoke sort
+PASS: gdb.base/gnu-debugdata.exp: comm
+PASS: gdb.base/gnu-debugdata.exp: objcopy 1
+PASS: gdb.base/gnu-debugdata.exp: strip
+PASS: gdb.base/gnu-debugdata.exp: copydebug
+PASS: gdb.base/gnu-debugdata.exp: addlink
+PASS: gdb.base/gnu-debugdata.exp: xz
+PASS: gdb.base/gnu-debugdata.exp: objcopy 2
+PASS: gdb.base/gnu-debugdata.exp: no symtab
+PASS: gdb.base/gnu-debugdata.exp: have symtab
+PASS: gdb.base/gnu-debugdata.exp: unload MiniDebugInfo
+Running ./gdb.base/gnu-ifunc.exp ...
+PASS: gdb.base/gnu-ifunc.exp: continue to breakpoint: break-at-call
+FAIL: gdb.base/gnu-ifunc.exp: p gnu_ifunc (3)
+FAIL: gdb.base/gnu-ifunc.exp: step
+FAIL: gdb.base/gnu-ifunc.exp: continue to break-at-nextcall
+FAIL: gdb.base/gnu-ifunc.exp: continue to breakpoint: nextcall gnu_ifunc
+FAIL: gdb.base/gnu-ifunc.exp: nextcall gnu_ifunc skipped
+PASS: gdb.base/gnu-ifunc.exp: p gnu_ifunc executing
+PASS: gdb.base/gnu-ifunc.exp: info sym gnu_ifunc executing
+PASS: gdb.base/gnu-ifunc.exp: info addr gnu_ifunc
+PASS: gdb.base/gnu-ifunc.exp: info sym <gnu_ifunc-address>
+PASS: gdb.base/gnu-ifunc.exp: static gnu_ifunc
+Running ./gdb.base/gnu_vector.exp ...
+PASS: gdb.base/gnu_vector.exp: print c4
+PASS: gdb.base/gnu_vector.exp: print c4[2]
+PASS: gdb.base/gnu_vector.exp: print i4a
+PASS: gdb.base/gnu_vector.exp: print i4b
+PASS: gdb.base/gnu_vector.exp: print i4a + i4b
+PASS: gdb.base/gnu_vector.exp: print i4a - i4b
+PASS: gdb.base/gnu_vector.exp: print i4a * i4b
+PASS: gdb.base/gnu_vector.exp: print i4a / i4b
+PASS: gdb.base/gnu_vector.exp: print i4a % i4b
+PASS: gdb.base/gnu_vector.exp: print i4a++
+PASS: gdb.base/gnu_vector.exp: print ++i4a
+PASS: gdb.base/gnu_vector.exp: print i4a--
+PASS: gdb.base/gnu_vector.exp: print --i4a
+PASS: gdb.base/gnu_vector.exp: print +i4a
+PASS: gdb.base/gnu_vector.exp: print -i4a
+PASS: gdb.base/gnu_vector.exp: print i4a & i4b
+PASS: gdb.base/gnu_vector.exp: print i4a | i4b
+PASS: gdb.base/gnu_vector.exp: print i4a ^ i4b
+PASS: gdb.base/gnu_vector.exp: print ~i4a
+PASS: gdb.base/gnu_vector.exp: print i4a << i4b
+PASS: gdb.base/gnu_vector.exp: print i4a >> i4b
+PASS: gdb.base/gnu_vector.exp: print f4a
+PASS: gdb.base/gnu_vector.exp: print f4b
+PASS: gdb.base/gnu_vector.exp: print f4a + f4b
+PASS: gdb.base/gnu_vector.exp: print f4a - f4b
+PASS: gdb.base/gnu_vector.exp: print f4a * f4b
+PASS: gdb.base/gnu_vector.exp: print f4a / f4b
+PASS: gdb.base/gnu_vector.exp: print +f4a
+PASS: gdb.base/gnu_vector.exp: print -f4a
+PASS: gdb.base/gnu_vector.exp: print (char4) 0x01010101
+PASS: gdb.base/gnu_vector.exp: print (char4) ia
+PASS: gdb.base/gnu_vector.exp: print (int2) lla
+PASS: gdb.base/gnu_vector.exp: print (int2) 1
+PASS: gdb.base/gnu_vector.exp: print (longlong2) 2
+PASS: gdb.base/gnu_vector.exp: print (float2) 3
+PASS: gdb.base/gnu_vector.exp: print (double2) 4
+PASS: gdb.base/gnu_vector.exp: print (uint4) ia
+PASS: gdb.base/gnu_vector.exp: print (int4) -3
+PASS: gdb.base/gnu_vector.exp: print (float4) 4
+PASS: gdb.base/gnu_vector.exp: print i4b = ia
+PASS: gdb.base/gnu_vector.exp: print i4a = 3
+PASS: gdb.base/gnu_vector.exp: print f4a = fb
+PASS: gdb.base/gnu_vector.exp: print f4b = 2
+PASS: gdb.base/gnu_vector.exp: print c4 + lla
+PASS: gdb.base/gnu_vector.exp: print i4a + lla
+PASS: gdb.base/gnu_vector.exp: print lla + c4
+PASS: gdb.base/gnu_vector.exp: print lla + i4a
+PASS: gdb.base/gnu_vector.exp: print c4 + ib
+PASS: gdb.base/gnu_vector.exp: print i4a + ib
+PASS: gdb.base/gnu_vector.exp: print i4a + 1
+PASS: gdb.base/gnu_vector.exp: print 1 + i4a
+PASS: gdb.base/gnu_vector.exp: print fa - f4b
+PASS: gdb.base/gnu_vector.exp: print 2 - f4b
+PASS: gdb.base/gnu_vector.exp: print f4a * fb
+PASS: gdb.base/gnu_vector.exp: print f4a * 1
+PASS: gdb.base/gnu_vector.exp: print ia / i4b
+PASS: gdb.base/gnu_vector.exp: print 2 / i4b
+PASS: gdb.base/gnu_vector.exp: print i4a % ib
+PASS: gdb.base/gnu_vector.exp: print i4a % 1
+PASS: gdb.base/gnu_vector.exp: print ia & i4b
+PASS: gdb.base/gnu_vector.exp: print 2 & i4b
+PASS: gdb.base/gnu_vector.exp: print i4a | ib
+PASS: gdb.base/gnu_vector.exp: print i4a | 1
+PASS: gdb.base/gnu_vector.exp: print ia ^ i4b
+PASS: gdb.base/gnu_vector.exp: print 2 ^ i4b
+PASS: gdb.base/gnu_vector.exp: print i4a << ib
+PASS: gdb.base/gnu_vector.exp: print i4a << 1
+PASS: gdb.base/gnu_vector.exp: print i4a >> ib
+PASS: gdb.base/gnu_vector.exp: print i4a >> 1
+PASS: gdb.base/gnu_vector.exp: print i4a = {2, 4, 8, 16}
+PASS: gdb.base/gnu_vector.exp: print i4a <<= ib
+PASS: gdb.base/gnu_vector.exp: print i4a + d2
+PASS: gdb.base/gnu_vector.exp: print d2 + i4a
+PASS: gdb.base/gnu_vector.exp: print f4a + ll2
+PASS: gdb.base/gnu_vector.exp: print ll2 + f4a
+PASS: gdb.base/gnu_vector.exp: print i2 + ll2
+PASS: gdb.base/gnu_vector.exp: print ll2 + i2
+PASS: gdb.base/gnu_vector.exp: print i4a + ll2
+PASS: gdb.base/gnu_vector.exp: print ll2 + i4a
+PASS: gdb.base/gnu_vector.exp: print f4a + d2
+PASS: gdb.base/gnu_vector.exp: print d2 + f4a
+PASS: gdb.base/gnu_vector.exp: print ui4 + i4a
+PASS: gdb.base/gnu_vector.exp: print i4a + ui4
+PASS: gdb.base/gnu_vector.exp: print i4a + i2
+PASS: gdb.base/gnu_vector.exp: print i2 + i4a
+PASS: gdb.base/gnu_vector.exp: print f4a + f2
+PASS: gdb.base/gnu_vector.exp: print f2 + f4a
+PASS: gdb.base/gnu_vector.exp: print (double2) f2
+PASS: gdb.base/gnu_vector.exp: print (int4) c4
+PASS: gdb.base/gnu_vector.exp: print (char4) i4a
+PASS: gdb.base/gnu_vector.exp: ptype c4
+PASS: gdb.base/gnu_vector.exp: ptype char4
+PASS: gdb.base/gnu_vector.exp: ptype i4a
+PASS: gdb.base/gnu_vector.exp: ptype int4
+PASS: gdb.base/gnu_vector.exp: ptype f4b
+PASS: gdb.base/gnu_vector.exp: ptype float4
+PASS: gdb.base/gnu_vector.exp: ptype union_with_vector_1
+PASS: gdb.base/gnu_vector.exp: ptype struct_with_vector_1
+Running ./gdb.base/hashline1.exp ...
+PASS: gdb.base/hashline1.exp: set breakpoint
+Running ./gdb.base/hashline2.exp ...
+PASS: gdb.base/hashline2.exp: set breakpoint
+Running ./gdb.base/hashline3.exp ...
+PASS: gdb.base/hashline3.exp: set breakpoint
+Running ./gdb.base/hbreak2.exp ...
+PASS: gdb.base/hbreak2.exp: hardware breakpoint support
+PASS: gdb.base/hbreak2.exp: hardware breakpoint insertion
+PASS: gdb.base/hbreak2.exp: hardware breakpoint function
+PASS: gdb.base/hbreak2.exp: hardware breakpoint quoted function
+PASS: gdb.base/hbreak2.exp: hardware breakpoint function in file
+PASS: gdb.base/hbreak2.exp: use `list' to establish default source file
+PASS: gdb.base/hbreak2.exp: hardware breakpoint line number
+PASS: gdb.base/hbreak2.exp: hardware breakpoint line number in file
+PASS: gdb.base/hbreak2.exp: hardware breakpoint at start of multi line if conditional
+PASS: gdb.base/hbreak2.exp: hardware breakpoint at start of multi line while conditional
+PASS: gdb.base/hbreak2.exp: hardware breakpoint info
+PASS: gdb.base/hbreak2.exp: hardware breakpoint function (2)
+PASS: gdb.base/hbreak2.exp: run until function breakpoint
+PASS: gdb.base/hbreak2.exp: hardware breakpoint line number (2)
+PASS: gdb.base/hbreak2.exp: run until breakpoint set at a line number
+PASS: gdb.base/hbreak2.exp: hardware breakpoint function in file (2)
+PASS: gdb.base/hbreak2.exp: run until file:function(6) breakpoint
+PASS: gdb.base/hbreak2.exp: run until file:function(5) breakpoint
+PASS: gdb.base/hbreak2.exp: run until file:function(4) breakpoint
+PASS: gdb.base/hbreak2.exp: run until file:function(3) breakpoint
+PASS: gdb.base/hbreak2.exp: run until file:function(2) breakpoint
+PASS: gdb.base/hbreak2.exp: run until file:function(1) breakpoint
+PASS: gdb.base/hbreak2.exp: hardware breakpoint quoted function (2)
+PASS: gdb.base/hbreak2.exp: run until quoted breakpoint
+PASS: gdb.base/hbreak2.exp: hardware breakpoint line number in file (2)
+PASS: gdb.base/hbreak2.exp: run until file:linenum breakpoint
+PASS: gdb.base/hbreak2.exp: hardware breakpoint offset +1
+PASS: gdb.base/hbreak2.exp: step onto hardware breakpoint
+PASS: gdb.base/hbreak2.exp: setting hardware breakpoint at }
+PASS: gdb.base/hbreak2.exp: continue to hardware breakpoint at }
+PASS: gdb.base/hbreak2.exp: temporary hardware breakpoint function
+PASS: gdb.base/hbreak2.exp: temporary hardware breakpoint function in file
+PASS: gdb.base/hbreak2.exp: temporary hardware breakpoint line number #1
+PASS: gdb.base/hbreak2.exp: temporary hardware breakpoint line number #2
+PASS: gdb.base/hbreak2.exp: temporary hardware breakpoint line number in file #1
+PASS: gdb.base/hbreak2.exp: temporary hardware breakpoint line number in file #2
+PASS: gdb.base/hbreak2.exp: temporary hardware breakpoint info
+PASS: gdb.base/hbreak2.exp: set breakpoint pending off
+PASS: gdb.base/hbreak2.exp: hardware break on non-existent source line
+PASS: gdb.base/hbreak2.exp: until bp_location1
+PASS: gdb.base/hbreak2.exp: hardware break on default location
+PASS: gdb.base/hbreak2.exp: set to-be-silent hardware break bp_location1
+PASS: gdb.base/hbreak2.exp: set silent break bp_location1
+PASS: gdb.base/hbreak2.exp: info silent hardware break bp_location1
+PASS: gdb.base/hbreak2.exp: hit silent hardware break bp_location1
+PASS: gdb.base/hbreak2.exp: stopped for silent hardware break bp_location1
+PASS: gdb.base/hbreak2.exp: thread-specific hardware breakpoint on non-existent thread disallowed
+PASS: gdb.base/hbreak2.exp: thread-specific hardware breakpoint on bogus thread ID disallowed
+PASS: gdb.base/hbreak2.exp: hardware breakpoint with trailing garbage disallowed
+PASS: gdb.base/hbreak2.exp: step over hardware breakpoint
+PASS: gdb.base/hbreak2.exp: clear line has no breakpoint disallowed
+PASS: gdb.base/hbreak2.exp: clear current line has no breakpoint disallowed
+PASS: gdb.base/hbreak2.exp: set convenience variable $foo to bp_location11
+PASS: gdb.base/hbreak2.exp: set hardware breakpoint via convenience variable
+PASS: gdb.base/hbreak2.exp: set convenience variable $foo to 81.5
+PASS: gdb.base/hbreak2.exp: set hardware breakpoint via non-integer convenience variable disallowed
+PASS: gdb.base/hbreak2.exp: set hardware breakpoint on to-be-called function
+PASS: gdb.base/hbreak2.exp: hit hardware breakpoint on called function
+PASS: gdb.base/hbreak2.exp: backtrace while in called function
+PASS: gdb.base/hbreak2.exp: finish from called function
+PASS: gdb.base/hbreak2.exp: hardware break at factorial
+PASS: gdb.base/hbreak2.exp: kill program
+PASS: gdb.base/hbreak2.exp: run to factorial(6)
+PASS: gdb.base/hbreak2.exp: continue to factorial(5)
+PASS: gdb.base/hbreak2.exp: backtrace from factorial(5)
+PASS: gdb.base/hbreak2.exp: next to recursive call
+PASS: gdb.base/hbreak2.exp: next over recursive call
+PASS: gdb.base/hbreak2.exp: backtrace from factorial(5.1)
+PASS: gdb.base/hbreak2.exp: continue until exit at recursive next test
+PASS: gdb.base/hbreak2.exp: hardware breakpoint function, optimized file
+PASS: gdb.base/hbreak2.exp: run until hardware function breakpoint, optimized file (code motion)
+PASS: gdb.base/hbreak2.exp: hardware breakpoint small function, optimized file
+PASS: gdb.base/hbreak2.exp: run until hardware breakpoint set at small function, optimized file
+Running ./gdb.base/hbreak.exp ...
+Running ./gdb.base/help.exp ...
+PASS: gdb.base/help.exp: disable pagination
+PASS: gdb.base/help.exp: help aliases
+PASS: gdb.base/help.exp: help breakpoints
+PASS: gdb.base/help.exp: help data
+PASS: gdb.base/help.exp: help files
+PASS: gdb.base/help.exp: help internals
+PASS: gdb.base/help.exp: help obscure
+PASS: gdb.base/help.exp: help running
+PASS: gdb.base/help.exp: help stack
+PASS: gdb.base/help.exp: help status
+PASS: gdb.base/help.exp: help support
+PASS: gdb.base/help.exp: help tracepoints
+PASS: gdb.base/help.exp: help user-defined
+PASS: gdb.base/help.exp: help breakpoint "b" abbreviation
+PASS: gdb.base/help.exp: help breakpoint "br" abbreviation
+PASS: gdb.base/help.exp: help breakpoint "bre" abbreviation
+PASS: gdb.base/help.exp: help breakpoint "brea" abbreviation
+PASS: gdb.base/help.exp: help breakpoint "break" abbreviation
+PASS: gdb.base/help.exp: help backtrace "bt" abbreviation
+PASS: gdb.base/help.exp: help backtrace
+PASS: gdb.base/help.exp: help commands
+PASS: gdb.base/help.exp: help delete "d" abbreviation
+PASS: gdb.base/help.exp: help delete
+PASS: gdb.base/help.exp: help help "h" abbreviation
+PASS: gdb.base/help.exp: help help
+PASS: gdb.base/help.exp: help show copying
+PASS: gdb.base/help.exp: help show warranty
+PASS: gdb.base/help.exp: help show commands
+PASS: gdb.base/help.exp: help show confirm
+PASS: gdb.base/help.exp: help info bogus-gdb-command
+PASS: gdb.base/help.exp: help gotcha
+PASS: gdb.base/help.exp: apropos \(print[^ bsiedf\".-]\)
+PASS: gdb.base/help.exp: apropos handle signal
+PASS: gdb.base/help.exp: apropos apropos
+Running ./gdb.base/hook-stop-continue.exp ...
+PASS: gdb.base/hook-stop-continue.exp: breakpoint line number
+PASS: gdb.base/hook-stop-continue.exp: print $do_continue = 1
+PASS: gdb.base/hook-stop-continue.exp: define hook-stop command
+PASS: gdb.base/hook-stop-continue.exp: next triggering hook-stop
+PASS: gdb.base/hook-stop-continue.exp: next no hook-stop
+Running ./gdb.base/hook-stop-frame.exp ...
+PASS: gdb.base/hook-stop-frame.exp: breakpoint line number
+PASS: gdb.base/hook-stop-frame.exp: define hook-stop command
+PASS: gdb.base/hook-stop-frame.exp: hook-stop runs before frame print
+Running ./gdb.base/huge.exp ...
+PASS: gdb.base/huge.exp: print a very large data object
+Running ./gdb.base/ifelse.exp ...
+PASS: gdb.base/ifelse.exp: if 1 with empty body
+PASS: gdb.base/ifelse.exp: if 0 with empty body
+PASS: gdb.base/ifelse.exp: if true else false #1
+PASS: gdb.base/ifelse.exp: if 1 .. else with empty body
+PASS: gdb.base/ifelse.exp: if true else false #2
+PASS: gdb.base/ifelse.exp: if 0 .. else with empty body
+PASS: gdb.base/ifelse.exp: if true else false #3
+PASS: gdb.base/ifelse.exp: create define with empty else
+PASS: gdb.base/ifelse.exp: call original define
+PASS: gdb.base/ifelse.exp: replace define with if .. else with empty body
+PASS: gdb.base/ifelse.exp: call replacement define
+Running ./gdb.base/included.exp ...
+PASS: gdb.base/included.exp: set listsize 1
+PASS: gdb.base/included.exp: list main
+PASS: gdb.base/included.exp: list integer
+PASS: gdb.base/included.exp: ptype integer
+PASS: gdb.base/included.exp: info variables integer
+Running ./gdb.base/inferior-died.exp ...
+UNSUPPORTED: gdb.base/inferior-died.exp: inferior-died.exp
+Running ./gdb.base/infnan.exp ...
+PASS: gdb.base/infnan.exp: print a
+PASS: gdb.base/infnan.exp: print b
+Running ./gdb.base/info-fun.exp ...
+Running ./gdb.base/infoline.exp ...
+PASS: gdb.base/infoline.exp: info line infoline.c:18
+Running ./gdb.base/info-macros.exp ...
+FAIL: gdb.base/info-macros.exp: info macro -- -all
+FAIL: gdb.base/info-macros.exp: info macro -- -all
+PASS: gdb.base/info-macros.exp: info macro -all --
+PASS: gdb.base/info-macros.exp: info macro -all --
+PASS: gdb.base/info-macros.exp: info macro -all --
+PASS: gdb.base/info-macros.exp: info macro --
+PASS: gdb.base/info-macros.exp: 'info macro -- '
+PASS: gdb.base/info-macros.exp: 'info macro -- '
+PASS: gdb.base/info-macros.exp: info macro -invalid-option 1
+PASS: gdb.base/info-macros.exp: info macro -invalid-option
+PASS: gdb.base/info-macros.exp: info macro -invalid-option FOO
+PASS: gdb.base/info-macros.exp: info macro -invalid-option FOO
+FAIL: gdb.base/info-macros.exp: info macro -- FOO
+FAIL: gdb.base/info-macros.exp: info macro -- FOO
+FAIL: gdb.base/info-macros.exp: info macro -- FOO
+FAIL: gdb.base/info-macros.exp: info macro FOO
+FAIL: gdb.base/info-macros.exp: info macro FOO
+FAIL: gdb.base/info-macros.exp: info macro -a FOO 1
+FAIL: gdb.base/info-macros.exp: info macro -a -- FOO 1
+FAIL: gdb.base/info-macros.exp: info macro -all -- FOO 1
+FAIL: gdb.base/info-macros.exp: info macro -a -- FOO
+FAIL: gdb.base/info-macros.exp: info macro -a -- FOO
+FAIL: gdb.base/info-macros.exp: info macros 2
+FAIL: gdb.base/info-macros.exp: info macros 3
+FAIL: gdb.base/info-macros.exp: info macros 4
+FAIL: gdb.base/info-macros.exp: info macros *$pc
+FAIL: gdb.base/info-macros.exp: info macros
+FAIL: gdb.base/info-macros.exp: info macros 6
+FAIL: gdb.base/info-macros.exp: info macros 7
+KFAIL: gdb.base/info-macros.exp: info macros info-macros.c:42 (PRMS: gdb/NNNN)
+Running ./gdb.base/info-os.exp ...
+PASS: gdb.base/info-os.exp: get inferior process ID
+PASS: gdb.base/info-os.exp: continue to breakpoint: Set breakpoint here
+PASS: gdb.base/info-os.exp: get shared memory key
+PASS: gdb.base/info-os.exp: get shared memory ID
+PASS: gdb.base/info-os.exp: get semaphore key
+PASS: gdb.base/info-os.exp: get semaphore ID
+PASS: gdb.base/info-os.exp: get message queue key
+PASS: gdb.base/info-os.exp: get message queue ID
+PASS: gdb.base/info-os.exp: get socket port number
+PASS: gdb.base/info-os.exp: get process list
+PASS: gdb.base/info-os.exp: get process groups
+PASS: gdb.base/info-os.exp: get threads
+PASS: gdb.base/info-os.exp: get threads
+PASS: gdb.base/info-os.exp: get file descriptors
+PASS: gdb.base/info-os.exp: get internet-domain sockets
+PASS: gdb.base/info-os.exp: get shared-memory regions
+PASS: gdb.base/info-os.exp: get semaphores
+PASS: gdb.base/info-os.exp: get message queues
+PASS: gdb.base/info-os.exp: continue
+Running ./gdb.base/info-proc.exp ...
+PASS: gdb.base/info-proc.exp: help info proc
+PASS: gdb.base/info-proc.exp: info proc without a process
+PASS: gdb.base/info-proc.exp: info proc with process
+PASS: gdb.base/info-proc.exp: info proc mapping
+PASS: gdb.base/info-proc.exp: save a core file
+FAIL: gdb.base/info-proc.exp: core break.gcore
+FAIL: gdb.base/info-proc.exp: info proc mapping with core file
+Running ./gdb.base/info-target.exp ...
+PASS: gdb.base/info-target.exp: info target
+Running ./gdb.base/interact.exp ...
+PASS: gdb.base/interact.exp: set interactive-mode auto
+PASS: gdb.base/interact.exp: source script with interactive-mode auto
+PASS: gdb.base/interact.exp: sanity check with interactive-mode auto
+PASS: gdb.base/interact.exp: show interactive-mode (auto)
+PASS: gdb.base/interact.exp: set interactive-mode on
+PASS: gdb.base/interact.exp: source script with interactive-mode on
+PASS: gdb.base/interact.exp: sanity check with interactive-mode on
+PASS: gdb.base/interact.exp: show interactive-mode (on)
+PASS: gdb.base/interact.exp: set interactive-mode off
+PASS: gdb.base/interact.exp: source script with interactive-mode off
+PASS: gdb.base/interact.exp: sanity check with interactive-mode off
+PASS: gdb.base/interact.exp: show interactive-mode (off)
+Running ./gdb.base/interp.exp ...
+PASS: gdb.base/interp.exp: interpreter-exec mi "-var-update *"
+PASS: gdb.base/interp.exp: interpreter-exec console "show version"
+PASS: gdb.base/interp.exp: interpreter-exec mi "-var-update *"
+PASS: gdb.base/interp.exp: interpreter-exec mi "-stack-info-frame"
+PASS: gdb.base/interp.exp: interpreter-exec mi1 "-break-insert main"
+PASS: gdb.base/interp.exp: interpreter-exec mi2 "-break-insert main"
+PASS: gdb.base/interp.exp: interpreter-exec mi3 "-break-insert main"
+PASS: gdb.base/interp.exp: can list sources
+Running ./gdb.base/interrupt.exp ...
+Running ./gdb.base/jit.exp ...
+PASS: gdb.base/jit.exp: one_jit_test-1: continue to breakpoint: break here 0
+PASS: gdb.base/jit.exp: one_jit_test-1: set var argc = 2
+PASS: gdb.base/jit.exp: one_jit_test-1: set var libname = "SHLIBDIR/jit-solib.so"
+PASS: gdb.base/jit.exp: one_jit_test-1: set var count = 1
+PASS: gdb.base/jit.exp: one_jit_test-1: continue to breakpoint: break here 1
+PASS: gdb.base/jit.exp: one_jit_test-1: info function jit_function
+PASS: gdb.base/jit.exp: one_jit_test-1: continue to breakpoint: break here 2
+PASS: gdb.base/jit.exp: one_jit_test-1: info function jit_function
+PASS: gdb.base/jit.exp: one_jit_test-2: continue to breakpoint: break here 0
+PASS: gdb.base/jit.exp: one_jit_test-2: set var argc = 2
+PASS: gdb.base/jit.exp: one_jit_test-2: set var libname = "SHLIBDIR/jit-solib.so"
+PASS: gdb.base/jit.exp: one_jit_test-2: set var count = 2
+PASS: gdb.base/jit.exp: one_jit_test-2: continue to breakpoint: break here 1
+PASS: gdb.base/jit.exp: one_jit_test-2: info function jit_function
+PASS: gdb.base/jit.exp: one_jit_test-2: continue to breakpoint: break here 2
+PASS: gdb.base/jit.exp: one_jit_test-2: info function jit_function
+PASS: gdb.base/jit.exp: PIE: one_jit_test-1: continue to breakpoint: break here 0
+PASS: gdb.base/jit.exp: PIE: one_jit_test-1: set var argc = 2
+PASS: gdb.base/jit.exp: PIE: one_jit_test-1: set var libname = "SHLIBDIR/jit-solib.so"
+PASS: gdb.base/jit.exp: PIE: one_jit_test-1: set var count = 1
+PASS: gdb.base/jit.exp: PIE: one_jit_test-1: continue to breakpoint: break here 1
+PASS: gdb.base/jit.exp: PIE: one_jit_test-1: info function jit_function
+PASS: gdb.base/jit.exp: PIE: one_jit_test-1: continue to breakpoint: break here 2
+PASS: gdb.base/jit.exp: PIE: one_jit_test-1: info function jit_function
+Running ./gdb.base/jit-simple.exp ...
+PASS: gdb.base/jit-simple.exp: blah 1
+PASS: gdb.base/jit-simple.exp: recompile jit-simple.c
+PASS: gdb.base/jit-simple.exp: blah 1
+Running ./gdb.base/jit-so.exp ...
+PASS: gdb.base/jit-so.exp: one_jit_test-1: continue to breakpoint: break here before-dlopen
+PASS: gdb.base/jit-so.exp: one_jit_test-1: set var jit_libname = "jit-main.so"
+PASS: gdb.base/jit-so.exp: one_jit_test-1: continue to breakpoint: break here after-dlopen
+PASS: gdb.base/jit-so.exp: one_jit_test-1: continue to breakpoint: break here 0
+PASS: gdb.base/jit-so.exp: one_jit_test-1: set var argc = 2
+PASS: gdb.base/jit-so.exp: one_jit_test-1: set var libname = "SHLIBDIR/jit-solib.so"
+PASS: gdb.base/jit-so.exp: one_jit_test-1: set var count = 1
+PASS: gdb.base/jit-so.exp: one_jit_test-1: continue to breakpoint: break here 1
+PASS: gdb.base/jit-so.exp: one_jit_test-1: info function jit_function
+PASS: gdb.base/jit-so.exp: one_jit_test-1: continue to breakpoint: break here 2
+PASS: gdb.base/jit-so.exp: one_jit_test-1: info function jit_function
+PASS: gdb.base/jit-so.exp: one_jit_test-2: continue to breakpoint: break here before-dlopen
+PASS: gdb.base/jit-so.exp: one_jit_test-2: set var jit_libname = "jit-main.so"
+PASS: gdb.base/jit-so.exp: one_jit_test-2: continue to breakpoint: break here after-dlopen
+PASS: gdb.base/jit-so.exp: one_jit_test-2: continue to breakpoint: break here 0
+PASS: gdb.base/jit-so.exp: one_jit_test-2: set var argc = 2
+PASS: gdb.base/jit-so.exp: one_jit_test-2: set var libname = "SHLIBDIR/jit-solib.so"
+PASS: gdb.base/jit-so.exp: one_jit_test-2: set var count = 2
+PASS: gdb.base/jit-so.exp: one_jit_test-2: continue to breakpoint: break here 1
+PASS: gdb.base/jit-so.exp: one_jit_test-2: info function jit_function
+PASS: gdb.base/jit-so.exp: one_jit_test-2: continue to breakpoint: break here 2
+PASS: gdb.base/jit-so.exp: one_jit_test-2: info function jit_function
+Running ./gdb.base/jump.exp ...
+PASS: gdb.base/jump.exp: break before jump to non-call
+PASS: gdb.base/jump.exp: jump to non-call
+PASS: gdb.base/jump.exp: break before jump to call
+PASS: gdb.base/jump.exp: jump to call
+PASS: gdb.base/jump.exp: disable breakpoint on call
+PASS: gdb.base/jump.exp: jump to call with disabled breakpoint
+PASS: gdb.base/jump.exp: jump without argument disallowed
+PASS: gdb.base/jump.exp: jump with trailing argument junk
+PASS: gdb.base/jump.exp: aborted jump out of current function
+PASS: gdb.base/jump.exp: jump out of current function
+Running ./gdb.base/kill-after-signal.exp ...
+PASS: gdb.base/kill-after-signal.exp: handle SIGUSR1 stop print pass
+PASS: gdb.base/kill-after-signal.exp: continue
+PASS: gdb.base/kill-after-signal.exp: stepi
+PASS: gdb.base/kill-after-signal.exp: kill
+Running ./gdb.base/label.exp ...
+Running ./gdb.base/langs.exp ...
+PASS: gdb.base/langs.exp: break on nonexistent function in langs.exp
+PASS: gdb.base/langs.exp: show language at csub in langs.exp
+PASS: gdb.base/langs.exp: backtrace in langs.exp
+PASS: gdb.base/langs.exp: up to foo in langs.exp
+PASS: gdb.base/langs.exp: show language at foo in langs.exp
+PASS: gdb.base/langs.exp: up to cppsub_ in langs.exp
+PASS: gdb.base/langs.exp: show language at cppsub_ in langs.exp
+PASS: gdb.base/langs.exp: up to fsub in langs.exp
+PASS: gdb.base/langs.exp: show language at fsub in langs.exp
+PASS: gdb.base/langs.exp: up to langs0__2do in langs.exp
+PASS: gdb.base/langs.exp: show language at langs0__2do in langs.exp
+PASS: gdb.base/langs.exp: up to main in langs.exp
+PASS: gdb.base/langs.exp: show language at main in langs.exp
+PASS: gdb.base/langs.exp: continue until exit at langs.exp
+PASS: gdb.base/langs.exp: set lang to minimal
+PASS: gdb.base/langs.exp: print parameter value
+Running ./gdb.base/ldbl_e308.exp ...
+PASS: gdb.base/ldbl_e308.exp: set variable ldbl_308 = 1.6e+308l
+PASS: gdb.base/ldbl_e308.exp: print ldbl_308
+Running ./gdb.base/lineinc.exp ...
+PASS: gdb.base/lineinc.exp: tolerate macro info with multiple #inclusions per line
+Running ./gdb.base/linespecs.exp ...
+PASS: gdb.base/linespecs.exp: list c:/foo/bar/baz.c:1
+PASS: gdb.base/linespecs.exp: list c:/foo/bar/baz.c
+PASS: gdb.base/linespecs.exp: list fooc:/foo/bar/baz.c:1
+PASS: gdb.base/linespecs.exp: list fooc:/foo/bar/baz.c
+Running ./gdb.base/list.exp ...
+PASS: gdb.base/list.exp: set width 0
+PASS: gdb.base/list.exp: show default list size
+PASS: gdb.base/list.exp: list default lines around main
+PASS: gdb.base/list.exp: setting listsize to 1 #1
+PASS: gdb.base/list.exp: show listsize 1 #1
+PASS: gdb.base/list.exp: list line 1 with listsize 1
+PASS: gdb.base/list.exp: list line 2 with listsize 1
+PASS: gdb.base/list.exp: setting listsize to 2 #2
+PASS: gdb.base/list.exp: show listsize 2 #2
+PASS: gdb.base/list.exp: list line 1 with listsize 2
+PASS: gdb.base/list.exp: list line 2 with listsize 2
+PASS: gdb.base/list.exp: list line 3 with listsize 2
+PASS: gdb.base/list.exp: setting listsize to 3 #3
+PASS: gdb.base/list.exp: show listsize 3 #3
+PASS: gdb.base/list.exp: list line 1 with listsize 3
+PASS: gdb.base/list.exp: list line 2 with listsize 3
+PASS: gdb.base/list.exp: list line 3 with listsize 3
+PASS: gdb.base/list.exp: setting listsize to 4 #4
+PASS: gdb.base/list.exp: show listsize 4 #4
+PASS: gdb.base/list.exp: list line 1 with listsize 4
+PASS: gdb.base/list.exp: list line 2 with listsize 4
+PASS: gdb.base/list.exp: list line 3 with listsize 4
+PASS: gdb.base/list.exp: list line 4 with listsize 4
+PASS: gdb.base/list.exp: setting listsize to 100 #5
+PASS: gdb.base/list.exp: show listsize 100 #5
+PASS: gdb.base/list.exp: list line 1 with listsize 100
+PASS: gdb.base/list.exp: list line 10 with listsize 100
+PASS: gdb.base/list.exp: setting listsize to 0 #6
+PASS: gdb.base/list.exp: show listsize unlimited #6
+PASS: gdb.base/list.exp: list line 1 with unlimited listsize
+PASS: gdb.base/list.exp: setting listsize to 10 #7
+PASS: gdb.base/list.exp: show listsize 10 #7
+PASS: gdb.base/list.exp: list line 1 in include file
+PASS: gdb.base/list.exp: list message for lines past EOF
+PASS: gdb.base/list.exp: list filename:number (4 tests)
+PASS: gdb.base/list.exp: list function in source file 1
+PASS: gdb.base/list.exp: list function in source file 2
+PASS: gdb.base/list.exp: list function in include file
+PASS: gdb.base/list.exp: successive list commands to page forward (4 tests)
+PASS: gdb.base/list.exp: 4 successive "list -" commands to page backwards
+PASS: gdb.base/list.exp: repeat list commands to page forward using 'return' (4 tests)
+PASS: gdb.base/list.exp: list range; filename:line1,filename:line2
+PASS: gdb.base/list.exp: list range; line1,line2
+PASS: gdb.base/list.exp: list range; upper bound past EOF
+PASS: gdb.base/list.exp: list range; both bounds past EOF
+PASS: gdb.base/list.exp: list range, must be same files
+PASS: gdb.base/list.exp: list filename:function (5 tests)
+PASS: gdb.base/list.exp: list 'list0.c:main'
+XFAIL: gdb.base/list.exp: list filename:function; wrong filename rejected
+PASS: gdb.base/list.exp: list filename:function; nonexistant file
+PASS: gdb.base/list.exp: list filename:function; nonexistant function
+PASS: gdb.base/list.exp: set listsize 4
+PASS: gdb.base/list.exp: list long_line
+PASS: gdb.base/list.exp: search 4321
+PASS: gdb.base/list.exp: search 6789
+PASS: gdb.base/list.exp: search extremely long line (> 5000 chars)
+PASS: gdb.base/list.exp: set listsize 2
+PASS: gdb.base/list.exp: list 1
+PASS: gdb.base/list.exp: list ,5
+Running ./gdb.base/logical.exp ...
+PASS: gdb.base/logical.exp: evaluate x; variables x = 0; expecting 0
+PASS: gdb.base/logical.exp: evaluate !x; variables x = 0; expecting 1
+PASS: gdb.base/logical.exp: evaluate !!x; variables x = 0; expecting 0
+PASS: gdb.base/logical.exp: evaluate x; variables x = 1; expecting 1
+PASS: gdb.base/logical.exp: evaluate !x; variables x = 1; expecting 0
+PASS: gdb.base/logical.exp: evaluate !!x; variables x = 1; expecting 1
+PASS: gdb.base/logical.exp: evaluate x && y; variables x = 0, y = 0; expecting 0
+PASS: gdb.base/logical.exp: evaluate !x && y; variables x = 0, y = 0; expecting 0
+PASS: gdb.base/logical.exp: evaluate x && !y; variables x = 0, y = 0; expecting 0
+PASS: gdb.base/logical.exp: evaluate !x && !y; variables x = 0, y = 0; expecting 1
+PASS: gdb.base/logical.exp: evaluate x || y; variables x = 0, y = 0; expecting 0
+PASS: gdb.base/logical.exp: evaluate !x || y; variables x = 0, y = 0; expecting 1
+PASS: gdb.base/logical.exp: evaluate x || !y; variables x = 0, y = 0; expecting 1
+PASS: gdb.base/logical.exp: evaluate !x || !y; variables x = 0, y = 0; expecting 1
+PASS: gdb.base/logical.exp: evaluate x < y; variables x = 0, y = 0; expecting 0
+PASS: gdb.base/logical.exp: evaluate x <= y; variables x = 0, y = 0; expecting 1
+PASS: gdb.base/logical.exp: evaluate x == y; variables x = 0, y = 0; expecting 1
+PASS: gdb.base/logical.exp: evaluate x != y; variables x = 0, y = 0; expecting 0
+PASS: gdb.base/logical.exp: evaluate x >= y; variables x = 0, y = 0; expecting 1
+PASS: gdb.base/logical.exp: evaluate x > y; variables x = 0, y = 0; expecting 0
+PASS: gdb.base/logical.exp: evaluate x && y; variables x = 0, y = 1; expecting 0
+PASS: gdb.base/logical.exp: evaluate !x && y; variables x = 0, y = 1; expecting 1
+PASS: gdb.base/logical.exp: evaluate x && !y; variables x = 0, y = 1; expecting 0
+PASS: gdb.base/logical.exp: evaluate !x && !y; variables x = 0, y = 1; expecting 0
+PASS: gdb.base/logical.exp: evaluate x || y; variables x = 0, y = 1; expecting 1
+PASS: gdb.base/logical.exp: evaluate !x || y; variables x = 0, y = 1; expecting 1
+PASS: gdb.base/logical.exp: evaluate x || !y; variables x = 0, y = 1; expecting 0
+PASS: gdb.base/logical.exp: evaluate !x || !y; variables x = 0, y = 1; expecting 1
+PASS: gdb.base/logical.exp: evaluate x < y; variables x = 0, y = 1; expecting 1
+PASS: gdb.base/logical.exp: evaluate x <= y; variables x = 0, y = 1; expecting 1
+PASS: gdb.base/logical.exp: evaluate x == y; variables x = 0, y = 1; expecting 0
+PASS: gdb.base/logical.exp: evaluate x != y; variables x = 0, y = 1; expecting 1
+PASS: gdb.base/logical.exp: evaluate x >= y; variables x = 0, y = 1; expecting 0
+PASS: gdb.base/logical.exp: evaluate x > y; variables x = 0, y = 1; expecting 0
+PASS: gdb.base/logical.exp: evaluate x && y; variables x = 1, y = 0; expecting 0
+PASS: gdb.base/logical.exp: evaluate !x && y; variables x = 1, y = 0; expecting 0
+PASS: gdb.base/logical.exp: evaluate x && !y; variables x = 1, y = 0; expecting 1
+PASS: gdb.base/logical.exp: evaluate !x && !y; variables x = 1, y = 0; expecting 0
+PASS: gdb.base/logical.exp: evaluate x || y; variables x = 1, y = 0; expecting 1
+PASS: gdb.base/logical.exp: evaluate !x || y; variables x = 1, y = 0; expecting 0
+PASS: gdb.base/logical.exp: evaluate x || !y; variables x = 1, y = 0; expecting 1
+PASS: gdb.base/logical.exp: evaluate !x || !y; variables x = 1, y = 0; expecting 1
+PASS: gdb.base/logical.exp: evaluate x < y; variables x = 1, y = 0; expecting 0
+PASS: gdb.base/logical.exp: evaluate x <= y; variables x = 1, y = 0; expecting 0
+PASS: gdb.base/logical.exp: evaluate x == y; variables x = 1, y = 0; expecting 0
+PASS: gdb.base/logical.exp: evaluate x != y; variables x = 1, y = 0; expecting 1
+PASS: gdb.base/logical.exp: evaluate x >= y; variables x = 1, y = 0; expecting 1
+PASS: gdb.base/logical.exp: evaluate x > y; variables x = 1, y = 0; expecting 1
+PASS: gdb.base/logical.exp: evaluate x && y; variables x = 1, y = 1; expecting 1
+PASS: gdb.base/logical.exp: evaluate !x && y; variables x = 1, y = 1; expecting 0
+PASS: gdb.base/logical.exp: evaluate x && !y; variables x = 1, y = 1; expecting 0
+PASS: gdb.base/logical.exp: evaluate !x && !y; variables x = 1, y = 1; expecting 0
+PASS: gdb.base/logical.exp: evaluate x || y; variables x = 1, y = 1; expecting 1
+PASS: gdb.base/logical.exp: evaluate !x || y; variables x = 1, y = 1; expecting 1
+PASS: gdb.base/logical.exp: evaluate x || !y; variables x = 1, y = 1; expecting 1
+PASS: gdb.base/logical.exp: evaluate !x || !y; variables x = 1, y = 1; expecting 0
+PASS: gdb.base/logical.exp: evaluate x < y; variables x = 1, y = 1; expecting 0
+PASS: gdb.base/logical.exp: evaluate x <= y; variables x = 1, y = 1; expecting 1
+PASS: gdb.base/logical.exp: evaluate x == y; variables x = 1, y = 1; expecting 1
+PASS: gdb.base/logical.exp: evaluate x != y; variables x = 1, y = 1; expecting 0
+PASS: gdb.base/logical.exp: evaluate x >= y; variables x = 1, y = 1; expecting 1
+PASS: gdb.base/logical.exp: evaluate x > y; variables x = 1, y = 1; expecting 0
+PASS: gdb.base/logical.exp: evaluate x && y && z; variables x = 0, y = 0, z = 0; expecting 0
+PASS: gdb.base/logical.exp: evaluate x || y && z; variables x = 0, y = 0, z = 0; expecting 0
+PASS: gdb.base/logical.exp: evaluate x && y || z; variables x = 0, y = 0, z = 0; expecting 0
+PASS: gdb.base/logical.exp: evaluate x || y || z; variables x = 0, y = 0, z = 0; expecting 0
+PASS: gdb.base/logical.exp: evaluate x || !y && z; variables x = 0, y = 0, z = 0; expecting 0
+PASS: gdb.base/logical.exp: evaluate !x || y && z; variables x = 0, y = 0, z = 0; expecting 1
+PASS: gdb.base/logical.exp: evaluate !x || y && !z; variables x = 0, y = 0, z = 0; expecting 1
+PASS: gdb.base/logical.exp: evaluate x && y && z; variables x = 0, y = 0, z = 1; expecting 0
+PASS: gdb.base/logical.exp: evaluate x || y && z; variables x = 0, y = 0, z = 1; expecting 0
+PASS: gdb.base/logical.exp: evaluate x && y || z; variables x = 0, y = 0, z = 1; expecting 1
+PASS: gdb.base/logical.exp: evaluate x || y || z; variables x = 0, y = 0, z = 1; expecting 1
+PASS: gdb.base/logical.exp: evaluate x || !y && z; variables x = 0, y = 0, z = 1; expecting 1
+PASS: gdb.base/logical.exp: evaluate !x || y && z; variables x = 0, y = 0, z = 1; expecting 1
+PASS: gdb.base/logical.exp: evaluate !x || y && !z; variables x = 0, y = 0, z = 1; expecting 1
+PASS: gdb.base/logical.exp: evaluate x && y && z; variables x = 0, y = 1, z = 0; expecting 0
+PASS: gdb.base/logical.exp: evaluate x || y && z; variables x = 0, y = 1, z = 0; expecting 0
+PASS: gdb.base/logical.exp: evaluate x && y || z; variables x = 0, y = 1, z = 0; expecting 0
+PASS: gdb.base/logical.exp: evaluate x || y || z; variables x = 0, y = 1, z = 0; expecting 1
+PASS: gdb.base/logical.exp: evaluate x || !y && z; variables x = 0, y = 1, z = 0; expecting 0
+PASS: gdb.base/logical.exp: evaluate !x || y && z; variables x = 0, y = 1, z = 0; expecting 1
+PASS: gdb.base/logical.exp: evaluate !x || y && !z; variables x = 0, y = 1, z = 0; expecting 1
+PASS: gdb.base/logical.exp: evaluate x && y && z; variables x = 0, y = 1, z = 1; expecting 0
+PASS: gdb.base/logical.exp: evaluate x || y && z; variables x = 0, y = 1, z = 1; expecting 1
+PASS: gdb.base/logical.exp: evaluate x && y || z; variables x = 0, y = 1, z = 1; expecting 1
+PASS: gdb.base/logical.exp: evaluate x || y || z; variables x = 0, y = 1, z = 1; expecting 1
+PASS: gdb.base/logical.exp: evaluate x || !y && z; variables x = 0, y = 1, z = 1; expecting 0
+PASS: gdb.base/logical.exp: evaluate !x || y && z; variables x = 0, y = 1, z = 1; expecting 1
+PASS: gdb.base/logical.exp: evaluate !x || y && !z; variables x = 0, y = 1, z = 1; expecting 1
+PASS: gdb.base/logical.exp: evaluate x && y && z; variables x = 1, y = 0, z = 0; expecting 0
+PASS: gdb.base/logical.exp: evaluate x || y && z; variables x = 1, y = 0, z = 0; expecting 1
+PASS: gdb.base/logical.exp: evaluate x && y || z; variables x = 1, y = 0, z = 0; expecting 0
+PASS: gdb.base/logical.exp: evaluate x || y || z; variables x = 1, y = 0, z = 0; expecting 1
+PASS: gdb.base/logical.exp: evaluate x || !y && z; variables x = 1, y = 0, z = 0; expecting 1
+PASS: gdb.base/logical.exp: evaluate !x || y && z; variables x = 1, y = 0, z = 0; expecting 0
+PASS: gdb.base/logical.exp: evaluate !x || y && !z; variables x = 1, y = 0, z = 0; expecting 0
+PASS: gdb.base/logical.exp: evaluate x && y && z; variables x = 1, y = 0, z = 1; expecting 0
+PASS: gdb.base/logical.exp: evaluate x || y && z; variables x = 1, y = 0, z = 1; expecting 1
+PASS: gdb.base/logical.exp: evaluate x && y || z; variables x = 1, y = 0, z = 1; expecting 1
+PASS: gdb.base/logical.exp: evaluate x || y || z; variables x = 1, y = 0, z = 1; expecting 1
+PASS: gdb.base/logical.exp: evaluate x || !y && z; variables x = 1, y = 0, z = 1; expecting 1
+PASS: gdb.base/logical.exp: evaluate !x || y && z; variables x = 1, y = 0, z = 1; expecting 0
+PASS: gdb.base/logical.exp: evaluate !x || y && !z; variables x = 1, y = 0, z = 1; expecting 0
+PASS: gdb.base/logical.exp: evaluate x && y && z; variables x = 1, y = 1, z = 0; expecting 0
+PASS: gdb.base/logical.exp: evaluate x || y && z; variables x = 1, y = 1, z = 0; expecting 1
+PASS: gdb.base/logical.exp: evaluate x && y || z; variables x = 1, y = 1, z = 0; expecting 1
+PASS: gdb.base/logical.exp: evaluate x || y || z; variables x = 1, y = 1, z = 0; expecting 1
+PASS: gdb.base/logical.exp: evaluate x || !y && z; variables x = 1, y = 1, z = 0; expecting 1
+PASS: gdb.base/logical.exp: evaluate !x || y && z; variables x = 1, y = 1, z = 0; expecting 0
+PASS: gdb.base/logical.exp: evaluate !x || y && !z; variables x = 1, y = 1, z = 0; expecting 1
+PASS: gdb.base/logical.exp: evaluate x && y && z; variables x = 1, y = 1, z = 1; expecting 1
+PASS: gdb.base/logical.exp: evaluate x || y && z; variables x = 1, y = 1, z = 1; expecting 1
+PASS: gdb.base/logical.exp: evaluate x && y || z; variables x = 1, y = 1, z = 1; expecting 1
+PASS: gdb.base/logical.exp: evaluate x || y || z; variables x = 1, y = 1, z = 1; expecting 1
+PASS: gdb.base/logical.exp: evaluate x || !y && z; variables x = 1, y = 1, z = 1; expecting 1
+PASS: gdb.base/logical.exp: evaluate !x || y && z; variables x = 1, y = 1, z = 1; expecting 1
+PASS: gdb.base/logical.exp: evaluate !x || y && !z; variables x = 1, y = 1, z = 1; expecting 0
+PASS: gdb.base/logical.exp: evaluate x > y || w == z; variables x = 1, y = 2, w = 3, z = 3; expecting 1
+PASS: gdb.base/logical.exp: evaluate x >= y && w != z; variables x = 1, y = 2, w = 3, z = 3; expecting 0
+PASS: gdb.base/logical.exp: evaluate ! x > y || w + z; variables x = 1, y = 2, w = 3, z = 3; expecting 1
+PASS: gdb.base/logical.exp: evaluate x > y || w == z; variables x = 1, y = 2, w = 1, z = 3; expecting 0
+PASS: gdb.base/logical.exp: evaluate x >= y && w != z; variables x = 1, y = 2, w = 1, z = 3; expecting 0
+PASS: gdb.base/logical.exp: evaluate ! x > y || w + z; variables x = 1, y = 2, w = 1, z = 3; expecting 1
+PASS: gdb.base/logical.exp: evaluate x > y || w == z; variables x = 2, y = 2, w = 2, z = 3; expecting 0
+PASS: gdb.base/logical.exp: evaluate x >= y && w != z; variables x = 2, y = 2, w = 2, z = 3; expecting 1
+PASS: gdb.base/logical.exp: evaluate ! x > y || w + z; variables x = 2, y = 2, w = 2, z = 3; expecting 1
+Running ./gdb.base/longest-types.exp ...
+UNTESTED: gdb.base/longest-types.exp: longest-types.exp
+Running ./gdb.base/longjmp.exp ...
+PASS: gdb.base/longjmp.exp: breakpoint at pattern 1 start
+PASS: gdb.base/longjmp.exp: continue to breakpoint at pattern 1 start
+PASS: gdb.base/longjmp.exp: breakpoint at miss_step_1
+PASS: gdb.base/longjmp.exp: next over setjmp (1)
+PASS: gdb.base/longjmp.exp: next to longjmp (1)
+FAIL: gdb.base/longjmp.exp: next over longjmp(1)
+PASS: gdb.base/longjmp.exp: breakpoint at pattern 2 start
+PASS: gdb.base/longjmp.exp: continue to breakpoint at pattern 2 start
+PASS: gdb.base/longjmp.exp: breakpoint at miss_step_2
+PASS: gdb.base/longjmp.exp: next over setjmp (2)
+FAIL: gdb.base/longjmp.exp: next over call_longjmp (2)
+PASS: gdb.base/longjmp.exp: breakpoint at pattern 3 start
+PASS: gdb.base/longjmp.exp: continue to breakpoint at pattern 3 start
+FAIL: gdb.base/longjmp.exp: next over patt3
+Running ./gdb.base/long_long.exp ...
+PASS: gdb.base/long_long.exp: get integer valueof "sizeof (char)" (1)
+PASS: gdb.base/long_long.exp: get integer valueof "sizeof (short)" (2)
+PASS: gdb.base/long_long.exp: get integer valueof "sizeof (int)" (4)
+PASS: gdb.base/long_long.exp: get integer valueof "sizeof (long)" (4)
+PASS: gdb.base/long_long.exp: get integer valueof "sizeof (long long)" (8)
+PASS: gdb.base/long_long.exp: get integer valueof "sizeof (void *)" (4)
+PASS: gdb.base/long_long.exp: get integer valueof "sizeof (double)" (8)
+PASS: gdb.base/long_long.exp: get integer valueof "sizeof (long double)" (12)
+PASS: gdb.base/long_long.exp: continue to breakpoint: Stop here and look
+PASS: gdb.base/long_long.exp: hex print p/x
+PASS: gdb.base/long_long.exp: decimal print p/x
+PASS: gdb.base/long_long.exp: default print val.dec
+PASS: gdb.base/long_long.exp: default print val.bin
+PASS: gdb.base/long_long.exp: default print val.oct
+PASS: gdb.base/long_long.exp: default print hex
+PASS: gdb.base/long_long.exp: decimal print p/u
+PASS: gdb.base/long_long.exp: binary print
+PASS: gdb.base/long_long.exp: octal print
+PASS: gdb.base/long_long.exp: print +ve long long
+PASS: gdb.base/long_long.exp: decimal print p/d
+PASS: gdb.base/long_long.exp: p/d val.oct
+PASS: gdb.base/long_long.exp: p/u val.oct
+PASS: gdb.base/long_long.exp: p/o val.oct
+PASS: gdb.base/long_long.exp: p/t val.oct
+PASS: gdb.base/long_long.exp: p/a val.oct
+PASS: gdb.base/long_long.exp: p/c val.oct
+PASS: gdb.base/long_long.exp: p/f val.oct
+PASS: gdb.base/long_long.exp: p/x *(char *)c
+PASS: gdb.base/long_long.exp: p/d *(char *)c
+PASS: gdb.base/long_long.exp: p/u *(char *)c
+PASS: gdb.base/long_long.exp: p/o *(char *)c
+PASS: gdb.base/long_long.exp: p/t *(char *)c
+PASS: gdb.base/long_long.exp: p/a *(char *)c
+PASS: gdb.base/long_long.exp: p/f *(char *)c
+PASS: gdb.base/long_long.exp: p/c *(char *)c
+PASS: gdb.base/long_long.exp: p/x *(short *)s
+PASS: gdb.base/long_long.exp: p/d *(short *)s
+PASS: gdb.base/long_long.exp: p/u *(short *)s
+PASS: gdb.base/long_long.exp: p/o *(short *)s
+PASS: gdb.base/long_long.exp: p/t *(short *)s
+PASS: gdb.base/long_long.exp: p/a *(short *)s
+PASS: gdb.base/long_long.exp: p/f *(short *)s
+PASS: gdb.base/long_long.exp: p/c *(short *)s
+PASS: gdb.base/long_long.exp: p/x *(int *)i
+PASS: gdb.base/long_long.exp: p/d *(int *)i
+PASS: gdb.base/long_long.exp: p/u *(int *)i
+PASS: gdb.base/long_long.exp: p/o *(int *)i
+PASS: gdb.base/long_long.exp: p/t *(int *)i
+PASS: gdb.base/long_long.exp: p/a *(int *)i
+PASS: gdb.base/long_long.exp: p/f *(int *)i
+PASS: gdb.base/long_long.exp: p/c *(int *)i
+PASS: gdb.base/long_long.exp: p/x *(long *)l
+PASS: gdb.base/long_long.exp: p/d *(long *)l
+PASS: gdb.base/long_long.exp: p/u *(long *)l
+PASS: gdb.base/long_long.exp: p/o *(long *)l
+PASS: gdb.base/long_long.exp: p/t *(long *)l
+PASS: gdb.base/long_long.exp: p/a *(long *)l
+PASS: gdb.base/long_long.exp: p/f *(long *)l
+PASS: gdb.base/long_long.exp: p/c *(long *)l
+PASS: gdb.base/long_long.exp: p/x *(long long *)ll
+PASS: gdb.base/long_long.exp: p/d *(long long *)ll
+PASS: gdb.base/long_long.exp: p/u *(long long *)ll
+PASS: gdb.base/long_long.exp: p/o *(long long *)ll
+PASS: gdb.base/long_long.exp: p/t *(long long *)ll
+PASS: gdb.base/long_long.exp: p/a *(long long *)ll
+PASS: gdb.base/long_long.exp: p/f *(long long *)ll
+PASS: gdb.base/long_long.exp: p/c *(long long *)ll
+PASS: gdb.base/long_long.exp: set examine size to w
+PASS: gdb.base/long_long.exp: x/x w
+PASS: gdb.base/long_long.exp: x/d w
+PASS: gdb.base/long_long.exp: x/u w
+PASS: gdb.base/long_long.exp: x/o w
+PASS: gdb.base/long_long.exp: x/t w
+PASS: gdb.base/long_long.exp: x/a
+PASS: gdb.base/long_long.exp: x/c b
+PASS: gdb.base/long_long.exp: x/f &val.oct
+PASS: gdb.base/long_long.exp: set examine size to g
+PASS: gdb.base/long_long.exp: x/2x g
+PASS: gdb.base/long_long.exp: x/2d g
+PASS: gdb.base/long_long.exp: x/2u g
+PASS: gdb.base/long_long.exp: x/2o g
+PASS: gdb.base/long_long.exp: x/2t g
+PASS: gdb.base/long_long.exp: x/2a
+PASS: gdb.base/long_long.exp: x/2c b
+PASS: gdb.base/long_long.exp: x/2f &val.oct
+PASS: gdb.base/long_long.exp: x/2bx b
+PASS: gdb.base/long_long.exp: x/2bd b
+PASS: gdb.base/long_long.exp: x/2bu b
+PASS: gdb.base/long_long.exp: x/2bo b
+PASS: gdb.base/long_long.exp: x/2bt b
+PASS: gdb.base/long_long.exp: x/2ba b
+PASS: gdb.base/long_long.exp: x/2bc b
+PASS: gdb.base/long_long.exp: x/2bf b
+PASS: gdb.base/long_long.exp: x/2hx h
+PASS: gdb.base/long_long.exp: x/2hd h
+PASS: gdb.base/long_long.exp: x/2hu h
+PASS: gdb.base/long_long.exp: x/2ho h
+PASS: gdb.base/long_long.exp: x/2ht h
+PASS: gdb.base/long_long.exp: x/2ha h
+PASS: gdb.base/long_long.exp: x/2hc h
+PASS: gdb.base/long_long.exp: x/2hf h
+PASS: gdb.base/long_long.exp: x/2wx w
+PASS: gdb.base/long_long.exp: x/2wd w
+PASS: gdb.base/long_long.exp: x/2wu w
+PASS: gdb.base/long_long.exp: x/2wo w
+PASS: gdb.base/long_long.exp: x/2wt w
+PASS: gdb.base/long_long.exp: x/2wa w
+PASS: gdb.base/long_long.exp: x/2wc w
+PASS: gdb.base/long_long.exp: x/2wf w
+PASS: gdb.base/long_long.exp: x/2gx g
+PASS: gdb.base/long_long.exp: x/2gd g
+PASS: gdb.base/long_long.exp: x/2gu g
+PASS: gdb.base/long_long.exp: x/2go g
+PASS: gdb.base/long_long.exp: x/2gt g
+PASS: gdb.base/long_long.exp: x/2ga g
+PASS: gdb.base/long_long.exp: x/2gc g
+PASS: gdb.base/long_long.exp: x/2gf g
+Running ./gdb.base/macscp.exp ...
+PASS: gdb.base/macscp.exp: list main for support check
+UNSUPPORTED: gdb.base/macscp.exp: Skipping test because debug information does not include macro information.
+Running ./gdb.base/maint.exp ...
+PASS: gdb.base/maint.exp: set height 0
+PASS: gdb.base/maint.exp: maint print registers
+PASS: gdb.base/maint.exp: maint check-symtabs
+PASS: gdb.base/maint.exp: maint space
+PASS: gdb.base/maint.exp: maint space 1
+PASS: gdb.base/maint.exp: maint time
+PASS: gdb.base/maint.exp: maint time 1
+PASS: gdb.base/maint.exp: maint time 0
+PASS: gdb.base/maint.exp: maint space 0
+PASS: gdb.base/maint.exp: maint demangle
+PASS: gdb.base/maint.exp: maint demangle main
+PASS: gdb.base/maint.exp: maint print statistics
+PASS: gdb.base/maint.exp: maint print dummy-frames
+PASS: gdb.base/maint.exp: maint print objfiles: header
+PASS: gdb.base/maint.exp: maint print objfiles: psymtabs
+PASS: gdb.base/maint.exp: maint print objfiles: symtabs
+PASS: gdb.base/maint.exp: maint print psymbols w/o args
+PASS: gdb.base/maint.exp: maint print psymbols 1
+PASS: gdb.base/maint.exp: shell rm -f psymbols_output
+PASS: gdb.base/maint.exp: maint print msymbols w/o args
+PASS: gdb.base/maint.exp: maint print msymbols
+PASS: gdb.base/maint.exp: shell rm -f msymbols_output
+PASS: gdb.base/maint.exp: cd to objdir
+PASS: gdb.base/maint.exp: maint print msymbols
+PASS: gdb.base/maint.exp: shell rm -f msymbols_output2
+PASS: gdb.base/maint.exp: cd to mydir
+PASS: gdb.base/maint.exp: maint print symbols w/o args
+PASS: gdb.base/maint.exp: maint print symbols
+PASS: gdb.base/maint.exp: shell rm -f symbols_output
+PASS: gdb.base/maint.exp: maint print type
+PASS: gdb.base/maint.exp: maint info sections
+PASS: gdb.base/maint.exp: maint info sections .text
+PASS: gdb.base/maint.exp: maint info sections CODE
+PASS: gdb.base/maint.exp: maint info sections DATA
+PASS: gdb.base/maint.exp: maint info breakpoints
+PASS: gdb.base/maint.exp: maint print w/o args
+PASS: gdb.base/maint.exp: maint info w/o args
+PASS: gdb.base/maint.exp: maint w/o args
+PASS: gdb.base/maint.exp: help maint
+PASS: gdb.base/maint.exp: help maint check-symtabs
+PASS: gdb.base/maint.exp: help maint space
+PASS: gdb.base/maint.exp: help maint time
+PASS: gdb.base/maint.exp: help maint demangle
+PASS: gdb.base/maint.exp: help maint dump-me
+PASS: gdb.base/maint.exp: help maint internal-error
+PASS: gdb.base/maint.exp: help maint internal-warning
+PASS: gdb.base/maint.exp: help maint print statistics
+PASS: gdb.base/maint.exp: help maint print dummy-frames
+PASS: gdb.base/maint.exp: help maint print objfiles
+PASS: gdb.base/maint.exp: help maint print psymbols
+PASS: gdb.base/maint.exp: help maint print msymbols
+PASS: gdb.base/maint.exp: help maint print symbols
+PASS: gdb.base/maint.exp: help maint print type
+PASS: gdb.base/maint.exp: help maint info sections
+PASS: gdb.base/maint.exp: help maint info breakpoints
+PASS: gdb.base/maint.exp: help maint info
+PASS: gdb.base/maint.exp: help maint print
+PASS: gdb.base/maint.exp: help maint
+PASS: gdb.base/maint.exp: maint dump-me
+PASS: gdb.base/maint.exp: maint internal-error
+PASS: gdb.base/maint.exp: internal-error resync
+Running ./gdb.base/memattr.exp ...
+PASS: gdb.base/memattr.exp: create mem region 1
+PASS: gdb.base/memattr.exp: create mem region 2
+PASS: gdb.base/memattr.exp: create mem region 3
+PASS: gdb.base/memattr.exp: create mem region 4
+PASS: gdb.base/memattr.exp: create mem region 5
+PASS: gdb.base/memattr.exp: info mem (1)
+PASS: gdb.base/memattr.exp: mem1 cannot be read
+PASS: gdb.base/memattr.exp: mem1 can be written
+PASS: gdb.base/memattr.exp: mem2 cannot be written
+PASS: gdb.base/memattr.exp: mem2 can be read
+PASS: gdb.base/memattr.exp: disable mem 1
+PASS: gdb.base/memattr.exp: mem 1 was disabled
+PASS: gdb.base/memattr.exp: enable mem 1
+PASS: gdb.base/memattr.exp: mem 1 was enabled
+PASS: gdb.base/memattr.exp: disable mem 2 4
+PASS: gdb.base/memattr.exp: mem 2 and 4 were disabled
+PASS: gdb.base/memattr.exp: enable mem 2-4
+PASS: gdb.base/memattr.exp: mem 2-4 were enabled
+PASS: gdb.base/memattr.exp: disable mem
+PASS: gdb.base/memattr.exp: mem 1 to 5 were disabled
+PASS: gdb.base/memattr.exp: enable mem
+PASS: gdb.base/memattr.exp: mem 1 to 5 were enabled
+PASS: gdb.base/memattr.exp: disable non-existant regions
+PASS: gdb.base/memattr.exp: delete mem 1
+PASS: gdb.base/memattr.exp: mem 1 was deleted
+PASS: gdb.base/memattr.exp: delete mem 2 4
+PASS: gdb.base/memattr.exp: mem 2 and 4 were deleted
+PASS: gdb.base/memattr.exp: delete mem 2-4
+PASS: gdb.base/memattr.exp: mem 2-4 were deleted
+PASS: gdb.base/memattr.exp: delete non-existant region
+PASS: gdb.base/memattr.exp: mem 0x30 0x60 ro
+PASS: gdb.base/memattr.exp: 0x30 0x60: 0x20 0x40: overlap
+PASS: gdb.base/memattr.exp: 0x30 0x60: 0x30 0x40: overlap
+PASS: gdb.base/memattr.exp: 0x30 0x60: 0x40 0x50: overlap
+PASS: gdb.base/memattr.exp: 0x30 0x60: 0x50 0x60: overlap
+PASS: gdb.base/memattr.exp: 0x30 0x60: 0x50 0x70: overlap
+PASS: gdb.base/memattr.exp: 0x30 0x60: 0x30 0x60: overlap
+PASS: gdb.base/memattr.exp: 0x30 0x60: 0x20 0x70: overlap
+PASS: gdb.base/memattr.exp: 0x30 0x60: 0x20 0x0: overlap
+PASS: gdb.base/memattr.exp: 0x30 0x60: 0x30 0x0: overlap
+PASS: gdb.base/memattr.exp: 0x30 0x60: 0x40 0x0: overlap
+PASS: gdb.base/memattr.exp: 0x30 0x60: 0x20 0x30: no-overlap
+PASS: gdb.base/memattr.exp: 0x30 0x60: 0x60 0x70: no-overlap
+PASS: gdb.base/memattr.exp: 0x30 0x60: 0x80 0x0: no-overlap
+PASS: gdb.base/memattr.exp: mem 0x30 0x0 ro
+PASS: gdb.base/memattr.exp: 0x30 0x0: 0x20 0x50: overlap
+PASS: gdb.base/memattr.exp: 0x30 0x0: 0x30 0x50: overlap
+PASS: gdb.base/memattr.exp: 0x30 0x0: 0x40 0x50: overlap
+PASS: gdb.base/memattr.exp: 0x30 0x0: 0x20 0x0: overlap
+PASS: gdb.base/memattr.exp: 0x30 0x0: 0x30 0x0: overlap
+PASS: gdb.base/memattr.exp: 0x30 0x0: 0x40 0x0: overlap
+PASS: gdb.base/memattr.exp: 0x30 0x0: 0x20 0x30: no-overlap
+PASS: gdb.base/memattr.exp: 0x30 0x0: 0x00 0x10: no-overlap
+Running ./gdb.base/mips_pro.exp ...
+PASS: gdb.base/mips_pro.exp: backtrace
+Running ./gdb.base/miscexprs.exp ...
+PASS: gdb.base/miscexprs.exp: continue to marker1
+PASS: gdb.base/miscexprs.exp: up from marker1
+PASS: gdb.base/miscexprs.exp: print value of &ibig.i[0]
+PASS: gdb.base/miscexprs.exp: print value of &cbig.c[0]
+PASS: gdb.base/miscexprs.exp: print value of &fbig.f[0]
+PASS: gdb.base/miscexprs.exp: print value of &dbig.d[0]
+PASS: gdb.base/miscexprs.exp: print value of &sbig.s[0]
+PASS: gdb.base/miscexprs.exp: print value of &lbig.l[0]
+PASS: gdb.base/miscexprs.exp: print value of ibig.i[100] | 1
+PASS: gdb.base/miscexprs.exp: print value of sbig.s[90] & 127
+PASS: gdb.base/miscexprs.exp: print value of !ibig.i[100]
+PASS: gdb.base/miscexprs.exp: print value of !sbig.s[90]
+PASS: gdb.base/miscexprs.exp: print value of !ibig.i[100]
+PASS: gdb.base/miscexprs.exp: print value of !ibig.i[100]
+PASS: gdb.base/miscexprs.exp: print value of !sbig.s[90] * 10
+PASS: gdb.base/miscexprs.exp: print value of ibig.i[100] * sbig.s[90]
+PASS: gdb.base/miscexprs.exp: print value of fbig.f[100] * dbig.d[202]
+PASS: gdb.base/miscexprs.exp: print value of !(sbig.s[90] * 2)
+PASS: gdb.base/miscexprs.exp: print value of sizeof sbig
+PASS: gdb.base/miscexprs.exp: print value of sizeof cbig
+PASS: gdb.base/miscexprs.exp: print value of sizeof lbig / sizeof long
+PASS: gdb.base/miscexprs.exp: print value of ibig.i[100] << 2
+PASS: gdb.base/miscexprs.exp: print value of sbig.s[90] >> 4
+PASS: gdb.base/miscexprs.exp: print value of lbig.l[333] >> 6
+Running ./gdb.base/morestack.exp ...
+PASS: gdb.base/morestack.exp: continue
+FAIL: gdb.base/morestack.exp: up 3000
+Running ./gdb.base/moribund-step.exp ...
+PASS: gdb.base/moribund-step.exp: set non-stop on
+Running ./gdb.base/multi-forks.exp ...
+Running ./gdb.base/nextoverexit.exp ...
+PASS: gdb.base/nextoverexit.exp: next over exit
+Running ./gdb.base/nodebug.exp ...
+PASS: gdb.base/nodebug.exp: p top
+PASS: gdb.base/nodebug.exp: whatis top
+PASS: gdb.base/nodebug.exp: ptype top
+PASS: gdb.base/nodebug.exp: p middle
+PASS: gdb.base/nodebug.exp: whatis middle
+PASS: gdb.base/nodebug.exp: ptype middle
+PASS: gdb.base/nodebug.exp: p dataglobal
+PASS: gdb.base/nodebug.exp: whatis dataglobal
+PASS: gdb.base/nodebug.exp: ptype dataglobal
+PASS: gdb.base/nodebug.exp: p datalocal
+PASS: gdb.base/nodebug.exp: whatis datalocal
+PASS: gdb.base/nodebug.exp: ptype datalocal
+PASS: gdb.base/nodebug.exp: p bssglobal
+PASS: gdb.base/nodebug.exp: whatis bssglobal
+PASS: gdb.base/nodebug.exp: ptype bssglobal
+PASS: gdb.base/nodebug.exp: p bsslocal
+PASS: gdb.base/nodebug.exp: whatis bsslocal
+PASS: gdb.base/nodebug.exp: ptype bsslocal
+PASS: gdb.base/nodebug.exp: backtrace from inner in nodebug.exp
+PASS: gdb.base/nodebug.exp: p/c array_index("abcdef",2)
+PASS: gdb.base/nodebug.exp: backtrace from middle in nodebug.exp
+Running ./gdb.base/nofield.exp ...
+PASS: gdb.base/nofield.exp: ptype struct not_empty
+PASS: gdb.base/nofield.exp: ptype struct empty
+PASS: gdb.base/nofield.exp: ptype union empty_union
+Running ./gdb.base/nostdlib.exp ...
+UNTESTED: gdb.base/nostdlib.exp: nostdlib.exp
+Running ./gdb.base/opaque.exp ...
+PASS: gdb.base/opaque.exp: whatis on opaque struct pointer (statically)
+PASS: gdb.base/opaque.exp: ptype on opaque struct pointer (statically)
+PASS: gdb.base/opaque.exp: whatis on opaque struct instance (statically)
+PASS: gdb.base/opaque.exp: ptype on opaque struct instance (statically)
+PASS: gdb.base/opaque.exp: ptype on opaque struct tagname (statically)
+PASS: gdb.base/opaque.exp: whatis on opaque struct pointer (dynamically)
+PASS: gdb.base/opaque.exp: ptype on opaque struct pointer (dynamically) 1
+PASS: gdb.base/opaque.exp: whatis on opaque struct instance (dynamically) 1
+PASS: gdb.base/opaque.exp: ptype on opaque struct instance (dynamically) 1
+PASS: gdb.base/opaque.exp: ptype on opaque struct tagname (dynamically) 1
+PASS: gdb.base/opaque.exp: whatis on opaque struct pointer (dynamically) 1
+PASS: gdb.base/opaque.exp: ptype on opaque struct pointer (dynamically) 2
+PASS: gdb.base/opaque.exp: whatis on opaque struct instance (dynamically) 2
+PASS: gdb.base/opaque.exp: ptype on opaque struct instance (dynamically) 2
+PASS: gdb.base/opaque.exp: ptype on opaque struct tagname (dynamically) 2
+Running ./gdb.base/overlays.exp ...
+Running ./gdb.base/page.exp ...
+PASS: gdb.base/page.exp: set pagination off
+PASS: gdb.base/page.exp: pagination is off
+PASS: gdb.base/page.exp: unpaged help
+PASS: gdb.base/page.exp: set pagination on
+PASS: gdb.base/page.exp: pagination is on
+PASS: gdb.base/page.exp: set height 10
+PASS: gdb.base/page.exp: paged help
+PASS: gdb.base/page.exp: q
+Running ./gdb.base/pc-fp.exp ...
+PASS: gdb.base/pc-fp.exp: get hexadecimal valueof "$pc"
+PASS: gdb.base/pc-fp.exp: get hexadecimal valueof "$fp"
+PASS: gdb.base/pc-fp.exp: display/i $pc
+PASS: gdb.base/pc-fp.exp: display/w $fp
+PASS: gdb.base/pc-fp.exp: info register $pc
+PASS: gdb.base/pc-fp.exp: info register $fp
+PASS: gdb.base/pc-fp.exp: info register pc fp
+Running ./gdb.base/pending.exp ...
+PASS: gdb.base/pending.exp: set pending breakpoint (without symbols)
+PASS: gdb.base/pending.exp: complete condition
+PASS: gdb.base/pending.exp: single pending breakpoint info (without symbols)
+PASS: gdb.base/pending.exp: run to resolved breakpoint 1 (without symbols)
+PASS: gdb.base/pending.exp: set pending breakpoint
+PASS: gdb.base/pending.exp: single pending breakpoint info
+PASS: gdb.base/pending.exp: breakpoint function
+PASS: gdb.base/pending.exp: pending plus real breakpoint info
+PASS: gdb.base/pending.exp: Don't set pending breakpoint
+PASS: gdb.base/pending.exp: condition 1 k == 1
+PASS: gdb.base/pending.exp: pending plus condition
+PASS: gdb.base/pending.exp: disable 1
+PASS: gdb.base/pending.exp: pending disabled
+PASS: gdb.base/pending.exp: Set commands for pending breakpoint
+PASS: gdb.base/pending.exp: pending disabled plus commands
+PASS: gdb.base/pending.exp: Set pending breakpoint 2
+PASS: gdb.base/pending.exp: multiple pending breakpoints
+PASS: gdb.base/pending.exp: Set pending breakpoint 3
+PASS: gdb.base/pending.exp: set ignore count on pending breakpoint 3
+PASS: gdb.base/pending.exp: multiple pending breakpoints 2
+PASS: gdb.base/pending.exp: running to main
+PASS: gdb.base/pending.exp: re-enabling pending breakpoint that can resolve instantly
+PASS: gdb.base/pending.exp: continue to resolved breakpoint 2
+PASS: gdb.base/pending.exp: continue to resolved breakpoint 1
+PASS: gdb.base/pending.exp: Disable other breakpoints
+PASS: gdb.base/pending.exp: Disable other breakpoints
+PASS: gdb.base/pending.exp: continue to resolved breakpoint 3
+PASS: gdb.base/pending.exp: set imaginary pending breakpoint
+PASS: gdb.base/pending.exp: rerun to main
+PASS: gdb.base/pending.exp: verify pending breakpoint after restart
+Running ./gdb.base/permissions.exp ...
+PASS: gdb.base/permissions.exp: show may-write-registers
+PASS: gdb.base/permissions.exp: show may-write-memory
+PASS: gdb.base/permissions.exp: show may-insert-breakpoints
+PASS: gdb.base/permissions.exp: show may-insert-tracepoints
+PASS: gdb.base/permissions.exp: show may-insert-fast-tracepoints
+PASS: gdb.base/permissions.exp: show may-interrupt
+PASS: gdb.base/permissions.exp: enable observer mode
+PASS: gdb.base/permissions.exp: show may-write-memory
+PASS: gdb.base/permissions.exp: show may-write-registers
+PASS: gdb.base/permissions.exp: show may-insert-breakpoints
+PASS: gdb.base/permissions.exp: show may-insert-tracepoints
+PASS: gdb.base/permissions.exp: show may-insert-fast-tracepoints
+PASS: gdb.base/permissions.exp: show may-interrupt
+PASS: gdb.base/permissions.exp: disable observer mode
+PASS: gdb.base/permissions.exp: set non-stop off
+PASS: gdb.base/permissions.exp: set a global
+PASS: gdb.base/permissions.exp: print x
+PASS: gdb.base/permissions.exp: set may-write-memory off
+PASS: gdb.base/permissions.exp: try to set a global
+PASS: gdb.base/permissions.exp: print x
+Running ./gdb.base/pie-execl.exp ...
+Running ./gdb.base/pointers.exp ...
+PASS: gdb.base/pointers.exp: continuing after dummy()
+PASS: gdb.base/pointers.exp: set pointer to beginning of array
+PASS: gdb.base/pointers.exp: set pointer to end of array
+PASS: gdb.base/pointers.exp: print object pointed to
+PASS: gdb.base/pointers.exp: print object pointed to #2
+PASS: gdb.base/pointers.exp: pointer1==pointer2
+PASS: gdb.base/pointers.exp: pointer1!=pointer2
+PASS: gdb.base/pointers.exp: pointer1<=pointer2
+PASS: gdb.base/pointers.exp: pointer1>=pointer2
+PASS: gdb.base/pointers.exp: pointer1<pointer2
+PASS: gdb.base/pointers.exp: pointer1>pointer2
+PASS: gdb.base/pointers.exp: set y = *v_int_pointer++
+PASS: gdb.base/pointers.exp: pointer assignment
+PASS: gdb.base/pointers.exp: and post-increment
+PASS: gdb.base/pointers.exp: set y = *--v_int_pointer2
+PASS: gdb.base/pointers.exp: pointer assignment
+PASS: gdb.base/pointers.exp: and pre-decrement
+PASS: gdb.base/pointers.exp: set y =v_int_pointer-v_int_pointer2
+PASS: gdb.base/pointers.exp: pointer1-pointer2
+PASS: gdb.base/pointers.exp: set v_int_pointer=v_int_array
+PASS: gdb.base/pointers.exp: print array element through pointer
+PASS: gdb.base/pointers.exp: print array element through pointer #2
+PASS: gdb.base/pointers.exp: print array element through pointer #3
+PASS: gdb.base/pointers.exp: print array element through pointer #4
+PASS: gdb.base/pointers.exp: print array element through pointer #5
+PASS: gdb.base/pointers.exp: increment rptr
+PASS: gdb.base/pointers.exp: print array element through pointer #6
+PASS: gdb.base/pointers.exp: print array element through pointer #7
+PASS: gdb.base/pointers.exp: print array element through pointer #8
+PASS: gdb.base/pointers.exp: print array element w/ pointer arithmetic
+PASS: gdb.base/pointers.exp: print through ptr to ptr
+PASS: gdb.base/pointers.exp: continue
+PASS: gdb.base/pointers.exp: up from marker1
+PASS: gdb.base/pointers.exp: print value of *pUC
+PASS: gdb.base/pointers.exp: ptype pUC
+PASS: gdb.base/pointers.exp: print value of *pS
+PASS: gdb.base/pointers.exp: ptype pS
+PASS: gdb.base/pointers.exp: print value of *pUS
+PASS: gdb.base/pointers.exp: ptype pUS
+PASS: gdb.base/pointers.exp: print value of *pI
+PASS: gdb.base/pointers.exp: ptype pI
+PASS: gdb.base/pointers.exp: print value of *pUI
+PASS: gdb.base/pointers.exp: ptype pUI
+PASS: gdb.base/pointers.exp: print value of *pL
+PASS: gdb.base/pointers.exp: ptype pL
+PASS: gdb.base/pointers.exp: print value of *pUL
+PASS: gdb.base/pointers.exp: ptype pUL
+PASS: gdb.base/pointers.exp: print value of *pF
+PASS: gdb.base/pointers.exp: ptype pF
+PASS: gdb.base/pointers.exp: print value of *pD
+PASS: gdb.base/pointers.exp: ptype pD
+PASS: gdb.base/pointers.exp: print value of ******ppppppC
+PASS: gdb.base/pointers.exp: ptype pC
+PASS: gdb.base/pointers.exp: ptype ppC
+PASS: gdb.base/pointers.exp: ptype pppC
+PASS: gdb.base/pointers.exp: ptype ppppC
+PASS: gdb.base/pointers.exp: ptype pppppC
+PASS: gdb.base/pointers.exp: ptype ppppppC
+PASS: gdb.base/pointers.exp: p instance.array_variable + 0
+Running ./gdb.base/pr10179.exp ...
+PASS: gdb.base/pr10179.exp: rbreak foo.*
+PASS: gdb.base/pr10179.exp: rbreak pr10179-a.c:foo.*
+PASS: gdb.base/pr10179.exp: rbreak pr10179-a.c : .*
+Running ./gdb.base/pr11022.exp ...
+Running ./gdb.base/prelink.exp ...
+Running ./gdb.base/printcmds.exp ...
+PASS: gdb.base/printcmds.exp: print $pc
+PASS: gdb.base/printcmds.exp: print "abc"
+PASS: gdb.base/printcmds.exp: print sizeof ("abc")
+PASS: gdb.base/printcmds.exp: ptype "abc"
+PASS: gdb.base/printcmds.exp: print $cvar = "abc"
+PASS: gdb.base/printcmds.exp: print sizeof ($cvar)
+PASS: gdb.base/printcmds.exp: print $pc (with file)
+PASS: gdb.base/printcmds.exp: set print sevenbit-strings
+PASS: gdb.base/printcmds.exp: set print address off
+PASS: gdb.base/printcmds.exp: set width 0
+PASS: gdb.base/printcmds.exp: p ctable1[120] #1
+PASS: gdb.base/printcmds.exp: p 123
+PASS: gdb.base/printcmds.exp: p -123
+PASS: gdb.base/printcmds.exp: p/d 123
+PASS: gdb.base/printcmds.exp: p 0123
+PASS: gdb.base/printcmds.exp: p 00123
+PASS: gdb.base/printcmds.exp: p -0123
+PASS: gdb.base/printcmds.exp: p/o 0123
+PASS: gdb.base/printcmds.exp: p 0x123
+PASS: gdb.base/printcmds.exp: p -0x123
+PASS: gdb.base/printcmds.exp: p 0x0123
+PASS: gdb.base/printcmds.exp: p -0x0123
+PASS: gdb.base/printcmds.exp: p 0xABCDEF
+PASS: gdb.base/printcmds.exp: p 0xabcdef
+PASS: gdb.base/printcmds.exp: p 0xAbCdEf
+PASS: gdb.base/printcmds.exp: p/x 0x123
+PASS: gdb.base/printcmds.exp: p 0b0
+PASS: gdb.base/printcmds.exp: p 0b1111
+PASS: gdb.base/printcmds.exp: p 0B1111
+PASS: gdb.base/printcmds.exp: p -0b1111
+PASS: gdb.base/printcmds.exp: reject p 0x
+PASS: gdb.base/printcmds.exp: reject p 0b
+PASS: gdb.base/printcmds.exp: p ''
+PASS: gdb.base/printcmds.exp: p '''
+PASS: gdb.base/printcmds.exp: reject p '\'
+PASS: gdb.base/printcmds.exp: reject p '\\\'
+PASS: gdb.base/printcmds.exp: reject p DEADBEEF
+PASS: gdb.base/printcmds.exp: reject p 09
+PASS: gdb.base/printcmds.exp: reject p 079
+PASS: gdb.base/printcmds.exp: reject p 0xG
+PASS: gdb.base/printcmds.exp: reject p 0xAG
+PASS: gdb.base/printcmds.exp: reject p 0b2
+PASS: gdb.base/printcmds.exp: reject p 0b12
+PASS: gdb.base/printcmds.exp: check for floating addition
+PASS: gdb.base/printcmds.exp: p 1.
+PASS: gdb.base/printcmds.exp: p 1.5
+PASS: gdb.base/printcmds.exp: p 1.f
+PASS: gdb.base/printcmds.exp: p 1.5f
+PASS: gdb.base/printcmds.exp: p 1.l
+PASS: gdb.base/printcmds.exp: p 1.5l
+PASS: gdb.base/printcmds.exp: p 0x1.1
+PASS: gdb.base/printcmds.exp: reject p 123DEADBEEF
+PASS: gdb.base/printcmds.exp: reject p 123foobar.bazfoo3
+PASS: gdb.base/printcmds.exp: reject p 123EEEEEEEEEEEEEEEEE33333k333
+PASS: gdb.base/printcmds.exp: reject p 1.1x
+PASS: gdb.base/printcmds.exp: reject p 1.1ff
+PASS: gdb.base/printcmds.exp: reject p 1.1ll
+PASS: gdb.base/printcmds.exp: p 'a'
+PASS: gdb.base/printcmds.exp: p/c 'a'
+PASS: gdb.base/printcmds.exp: p/x 'a'
+PASS: gdb.base/printcmds.exp: p/d 'a'
+PASS: gdb.base/printcmds.exp: p/t 'a'
+PASS: gdb.base/printcmds.exp: p '\141'
+PASS: gdb.base/printcmds.exp: p/x '\377'
+PASS: gdb.base/printcmds.exp: p '\''
+PASS: gdb.base/printcmds.exp: p '\\'
+PASS: gdb.base/printcmds.exp: p ctable1[0]
+PASS: gdb.base/printcmds.exp: p ctable1[1]
+PASS: gdb.base/printcmds.exp: p ctable1[2]
+PASS: gdb.base/printcmds.exp: p ctable1[3]
+PASS: gdb.base/printcmds.exp: p ctable1[4]
+PASS: gdb.base/printcmds.exp: p ctable1[5]
+PASS: gdb.base/printcmds.exp: p ctable1[6]
+PASS: gdb.base/printcmds.exp: p ctable1[7]
+PASS: gdb.base/printcmds.exp: p ctable1[8]
+PASS: gdb.base/printcmds.exp: p ctable1[9]
+PASS: gdb.base/printcmds.exp: p ctable1[10]
+PASS: gdb.base/printcmds.exp: p ctable1[11]
+PASS: gdb.base/printcmds.exp: p ctable1[12]
+PASS: gdb.base/printcmds.exp: p ctable1[13]
+PASS: gdb.base/printcmds.exp: p ctable1[14]
+PASS: gdb.base/printcmds.exp: p ctable1[15]
+PASS: gdb.base/printcmds.exp: p ctable1[16]
+PASS: gdb.base/printcmds.exp: p ctable1[17]
+PASS: gdb.base/printcmds.exp: p ctable1[18]
+PASS: gdb.base/printcmds.exp: p ctable1[19]
+PASS: gdb.base/printcmds.exp: p ctable1[20]
+PASS: gdb.base/printcmds.exp: p ctable1[21]
+PASS: gdb.base/printcmds.exp: p ctable1[22]
+PASS: gdb.base/printcmds.exp: p ctable1[23]
+PASS: gdb.base/printcmds.exp: p ctable1[24]
+PASS: gdb.base/printcmds.exp: p ctable1[25]
+PASS: gdb.base/printcmds.exp: p ctable1[26]
+PASS: gdb.base/printcmds.exp: p ctable1[27]
+PASS: gdb.base/printcmds.exp: p ctable1[28]
+PASS: gdb.base/printcmds.exp: p ctable1[29]
+PASS: gdb.base/printcmds.exp: p ctable1[30]
+PASS: gdb.base/printcmds.exp: p ctable1[31]
+PASS: gdb.base/printcmds.exp: p ctable1[32]
+PASS: gdb.base/printcmds.exp: p ctable1[33]
+PASS: gdb.base/printcmds.exp: p ctable1[34]
+PASS: gdb.base/printcmds.exp: p ctable1[35]
+PASS: gdb.base/printcmds.exp: p ctable1[36]
+PASS: gdb.base/printcmds.exp: p ctable1[37]
+PASS: gdb.base/printcmds.exp: p ctable1[38]
+PASS: gdb.base/printcmds.exp: p ctable1[39]
+PASS: gdb.base/printcmds.exp: p ctable1[40]
+PASS: gdb.base/printcmds.exp: p ctable1[41]
+PASS: gdb.base/printcmds.exp: p ctable1[42]
+PASS: gdb.base/printcmds.exp: p ctable1[43]
+PASS: gdb.base/printcmds.exp: p ctable1[44]
+PASS: gdb.base/printcmds.exp: p ctable1[45]
+PASS: gdb.base/printcmds.exp: p ctable1[46]
+PASS: gdb.base/printcmds.exp: p ctable1[47]
+PASS: gdb.base/printcmds.exp: p ctable1[48]
+PASS: gdb.base/printcmds.exp: p ctable1[49]
+PASS: gdb.base/printcmds.exp: p ctable1[50]
+PASS: gdb.base/printcmds.exp: p ctable1[51]
+PASS: gdb.base/printcmds.exp: p ctable1[52]
+PASS: gdb.base/printcmds.exp: p ctable1[53]
+PASS: gdb.base/printcmds.exp: p ctable1[54]
+PASS: gdb.base/printcmds.exp: p ctable1[55]
+PASS: gdb.base/printcmds.exp: p ctable1[56]
+PASS: gdb.base/printcmds.exp: p ctable1[57]
+PASS: gdb.base/printcmds.exp: p ctable1[58]
+PASS: gdb.base/printcmds.exp: p ctable1[59]
+PASS: gdb.base/printcmds.exp: p ctable1[60]
+PASS: gdb.base/printcmds.exp: p ctable1[61]
+PASS: gdb.base/printcmds.exp: p ctable1[62]
+PASS: gdb.base/printcmds.exp: p ctable1[63]
+PASS: gdb.base/printcmds.exp: p ctable1[64]
+PASS: gdb.base/printcmds.exp: p ctable1[65]
+PASS: gdb.base/printcmds.exp: p ctable1[66]
+PASS: gdb.base/printcmds.exp: p ctable1[67]
+PASS: gdb.base/printcmds.exp: p ctable1[68]
+PASS: gdb.base/printcmds.exp: p ctable1[69]
+PASS: gdb.base/printcmds.exp: p ctable1[70]
+PASS: gdb.base/printcmds.exp: p ctable1[71]
+PASS: gdb.base/printcmds.exp: p ctable1[72]
+PASS: gdb.base/printcmds.exp: p ctable1[73]
+PASS: gdb.base/printcmds.exp: p ctable1[74]
+PASS: gdb.base/printcmds.exp: p ctable1[75]
+PASS: gdb.base/printcmds.exp: p ctable1[76]
+PASS: gdb.base/printcmds.exp: p ctable1[77]
+PASS: gdb.base/printcmds.exp: p ctable1[78]
+PASS: gdb.base/printcmds.exp: p ctable1[79]
+PASS: gdb.base/printcmds.exp: p ctable1[80]
+PASS: gdb.base/printcmds.exp: p ctable1[81]
+PASS: gdb.base/printcmds.exp: p ctable1[82]
+PASS: gdb.base/printcmds.exp: p ctable1[83]
+PASS: gdb.base/printcmds.exp: p ctable1[84]
+PASS: gdb.base/printcmds.exp: p ctable1[85]
+PASS: gdb.base/printcmds.exp: p ctable1[86]
+PASS: gdb.base/printcmds.exp: p ctable1[87]
+PASS: gdb.base/printcmds.exp: p ctable1[88]
+PASS: gdb.base/printcmds.exp: p ctable1[89]
+PASS: gdb.base/printcmds.exp: p ctable1[90]
+PASS: gdb.base/printcmds.exp: p ctable1[91]
+PASS: gdb.base/printcmds.exp: p ctable1[92]
+PASS: gdb.base/printcmds.exp: p ctable1[93]
+PASS: gdb.base/printcmds.exp: p ctable1[94]
+PASS: gdb.base/printcmds.exp: p ctable1[95]
+PASS: gdb.base/printcmds.exp: p ctable1[96]
+PASS: gdb.base/printcmds.exp: p ctable1[97]
+PASS: gdb.base/printcmds.exp: p ctable1[98]
+PASS: gdb.base/printcmds.exp: p ctable1[99]
+PASS: gdb.base/printcmds.exp: p ctable1[100]
+PASS: gdb.base/printcmds.exp: p ctable1[101]
+PASS: gdb.base/printcmds.exp: p ctable1[102]
+PASS: gdb.base/printcmds.exp: p ctable1[103]
+PASS: gdb.base/printcmds.exp: p ctable1[104]
+PASS: gdb.base/printcmds.exp: p ctable1[105]
+PASS: gdb.base/printcmds.exp: p ctable1[106]
+PASS: gdb.base/printcmds.exp: p ctable1[107]
+PASS: gdb.base/printcmds.exp: p ctable1[108]
+PASS: gdb.base/printcmds.exp: p ctable1[109]
+PASS: gdb.base/printcmds.exp: p ctable1[110]
+PASS: gdb.base/printcmds.exp: p ctable1[111]
+PASS: gdb.base/printcmds.exp: p ctable1[112]
+PASS: gdb.base/printcmds.exp: p ctable1[113]
+PASS: gdb.base/printcmds.exp: p ctable1[114]
+PASS: gdb.base/printcmds.exp: p ctable1[115]
+PASS: gdb.base/printcmds.exp: p ctable1[116]
+PASS: gdb.base/printcmds.exp: p ctable1[117]
+PASS: gdb.base/printcmds.exp: p ctable1[118]
+PASS: gdb.base/printcmds.exp: p ctable1[119]
+PASS: gdb.base/printcmds.exp: p ctable1[120]
+PASS: gdb.base/printcmds.exp: p ctable1[121]
+PASS: gdb.base/printcmds.exp: p ctable1[122]
+PASS: gdb.base/printcmds.exp: p ctable1[123]
+PASS: gdb.base/printcmds.exp: p ctable1[124]
+PASS: gdb.base/printcmds.exp: p ctable1[125]
+PASS: gdb.base/printcmds.exp: p ctable1[126]
+PASS: gdb.base/printcmds.exp: p ctable1[127]
+PASS: gdb.base/printcmds.exp: p ctable1[128]
+PASS: gdb.base/printcmds.exp: p ctable1[129]
+PASS: gdb.base/printcmds.exp: p ctable1[130]
+PASS: gdb.base/printcmds.exp: p ctable1[131]
+PASS: gdb.base/printcmds.exp: p ctable1[132]
+PASS: gdb.base/printcmds.exp: p ctable1[133]
+PASS: gdb.base/printcmds.exp: p ctable1[134]
+PASS: gdb.base/printcmds.exp: p ctable1[135]
+PASS: gdb.base/printcmds.exp: p ctable1[136]
+PASS: gdb.base/printcmds.exp: p ctable1[137]
+PASS: gdb.base/printcmds.exp: p ctable1[138]
+PASS: gdb.base/printcmds.exp: p ctable1[139]
+PASS: gdb.base/printcmds.exp: p ctable1[140]
+PASS: gdb.base/printcmds.exp: p ctable1[141]
+PASS: gdb.base/printcmds.exp: p ctable1[142]
+PASS: gdb.base/printcmds.exp: p ctable1[143]
+PASS: gdb.base/printcmds.exp: p ctable1[144]
+PASS: gdb.base/printcmds.exp: p ctable1[145]
+PASS: gdb.base/printcmds.exp: p ctable1[146]
+PASS: gdb.base/printcmds.exp: p ctable1[147]
+PASS: gdb.base/printcmds.exp: p ctable1[148]
+PASS: gdb.base/printcmds.exp: p ctable1[149]
+PASS: gdb.base/printcmds.exp: p ctable1[150]
+PASS: gdb.base/printcmds.exp: p ctable1[151]
+PASS: gdb.base/printcmds.exp: p ctable1[152]
+PASS: gdb.base/printcmds.exp: p ctable1[153]
+PASS: gdb.base/printcmds.exp: p ctable1[154]
+PASS: gdb.base/printcmds.exp: p ctable1[155]
+PASS: gdb.base/printcmds.exp: p ctable1[156]
+PASS: gdb.base/printcmds.exp: p ctable1[157]
+PASS: gdb.base/printcmds.exp: p ctable1[158]
+PASS: gdb.base/printcmds.exp: p ctable1[159]
+PASS: gdb.base/printcmds.exp: p ctable1[160]
+PASS: gdb.base/printcmds.exp: p ctable1[161]
+PASS: gdb.base/printcmds.exp: p ctable1[162]
+PASS: gdb.base/printcmds.exp: p ctable1[163]
+PASS: gdb.base/printcmds.exp: p ctable1[164]
+PASS: gdb.base/printcmds.exp: p ctable1[165]
+PASS: gdb.base/printcmds.exp: p ctable1[166]
+PASS: gdb.base/printcmds.exp: p ctable1[167]
+PASS: gdb.base/printcmds.exp: p ctable1[168]
+PASS: gdb.base/printcmds.exp: p ctable1[169]
+PASS: gdb.base/printcmds.exp: p ctable1[170]
+PASS: gdb.base/printcmds.exp: p ctable1[171]
+PASS: gdb.base/printcmds.exp: p ctable1[172]
+PASS: gdb.base/printcmds.exp: p ctable1[173]
+PASS: gdb.base/printcmds.exp: p ctable1[174]
+PASS: gdb.base/printcmds.exp: p ctable1[175]
+PASS: gdb.base/printcmds.exp: p ctable1[176]
+PASS: gdb.base/printcmds.exp: p ctable1[177]
+PASS: gdb.base/printcmds.exp: p ctable1[178]
+PASS: gdb.base/printcmds.exp: p ctable1[179]
+PASS: gdb.base/printcmds.exp: p ctable1[180]
+PASS: gdb.base/printcmds.exp: p ctable1[181]
+PASS: gdb.base/printcmds.exp: p ctable1[182]
+PASS: gdb.base/printcmds.exp: p ctable1[183]
+PASS: gdb.base/printcmds.exp: p ctable1[184]
+PASS: gdb.base/printcmds.exp: p ctable1[185]
+PASS: gdb.base/printcmds.exp: p ctable1[186]
+PASS: gdb.base/printcmds.exp: p ctable1[187]
+PASS: gdb.base/printcmds.exp: p ctable1[188]
+PASS: gdb.base/printcmds.exp: p ctable1[189]
+PASS: gdb.base/printcmds.exp: p ctable1[190]
+PASS: gdb.base/printcmds.exp: p ctable1[191]
+PASS: gdb.base/printcmds.exp: p ctable1[192]
+PASS: gdb.base/printcmds.exp: p ctable1[193]
+PASS: gdb.base/printcmds.exp: p ctable1[194]
+PASS: gdb.base/printcmds.exp: p ctable1[195]
+PASS: gdb.base/printcmds.exp: p ctable1[196]
+PASS: gdb.base/printcmds.exp: p ctable1[197]
+PASS: gdb.base/printcmds.exp: p ctable1[198]
+PASS: gdb.base/printcmds.exp: p ctable1[199]
+PASS: gdb.base/printcmds.exp: p ctable1[200]
+PASS: gdb.base/printcmds.exp: p ctable1[201]
+PASS: gdb.base/printcmds.exp: p ctable1[202]
+PASS: gdb.base/printcmds.exp: p ctable1[203]
+PASS: gdb.base/printcmds.exp: p ctable1[204]
+PASS: gdb.base/printcmds.exp: p ctable1[205]
+PASS: gdb.base/printcmds.exp: p ctable1[206]
+PASS: gdb.base/printcmds.exp: p ctable1[207]
+PASS: gdb.base/printcmds.exp: p ctable1[208]
+PASS: gdb.base/printcmds.exp: p ctable1[209]
+PASS: gdb.base/printcmds.exp: p ctable1[210]
+PASS: gdb.base/printcmds.exp: p ctable1[211]
+PASS: gdb.base/printcmds.exp: p ctable1[212]
+PASS: gdb.base/printcmds.exp: p ctable1[213]
+PASS: gdb.base/printcmds.exp: p ctable1[214]
+PASS: gdb.base/printcmds.exp: p ctable1[215]
+PASS: gdb.base/printcmds.exp: p ctable1[216]
+PASS: gdb.base/printcmds.exp: p ctable1[217]
+PASS: gdb.base/printcmds.exp: p ctable1[218]
+PASS: gdb.base/printcmds.exp: p ctable1[219]
+PASS: gdb.base/printcmds.exp: p ctable1[220]
+PASS: gdb.base/printcmds.exp: p ctable1[221]
+PASS: gdb.base/printcmds.exp: p ctable1[222]
+PASS: gdb.base/printcmds.exp: p ctable1[223]
+PASS: gdb.base/printcmds.exp: p ctable1[224]
+PASS: gdb.base/printcmds.exp: p ctable1[225]
+PASS: gdb.base/printcmds.exp: p ctable1[226]
+PASS: gdb.base/printcmds.exp: p ctable1[227]
+PASS: gdb.base/printcmds.exp: p ctable1[228]
+PASS: gdb.base/printcmds.exp: p ctable1[229]
+PASS: gdb.base/printcmds.exp: p ctable1[230]
+PASS: gdb.base/printcmds.exp: p ctable1[231]
+PASS: gdb.base/printcmds.exp: p ctable1[232]
+PASS: gdb.base/printcmds.exp: p ctable1[233]
+PASS: gdb.base/printcmds.exp: p ctable1[234]
+PASS: gdb.base/printcmds.exp: p ctable1[235]
+PASS: gdb.base/printcmds.exp: p ctable1[236]
+PASS: gdb.base/printcmds.exp: p ctable1[237]
+PASS: gdb.base/printcmds.exp: p ctable1[238]
+PASS: gdb.base/printcmds.exp: p ctable1[239]
+PASS: gdb.base/printcmds.exp: p ctable1[240]
+PASS: gdb.base/printcmds.exp: p ctable1[241]
+PASS: gdb.base/printcmds.exp: p ctable1[242]
+PASS: gdb.base/printcmds.exp: p ctable1[243]
+PASS: gdb.base/printcmds.exp: p ctable1[244]
+PASS: gdb.base/printcmds.exp: p ctable1[245]
+PASS: gdb.base/printcmds.exp: p ctable1[246]
+PASS: gdb.base/printcmds.exp: p ctable1[247]
+PASS: gdb.base/printcmds.exp: p ctable1[248]
+PASS: gdb.base/printcmds.exp: p ctable1[249]
+PASS: gdb.base/printcmds.exp: p ctable1[250]
+PASS: gdb.base/printcmds.exp: p ctable1[251]
+PASS: gdb.base/printcmds.exp: p ctable1[252]
+PASS: gdb.base/printcmds.exp: p ctable1[253]
+PASS: gdb.base/printcmds.exp: p ctable1[254]
+PASS: gdb.base/printcmds.exp: p ctable1[255]
+PASS: gdb.base/printcmds.exp: set print elements 1
+PASS: gdb.base/printcmds.exp: p &ctable2[0*16] with print elements set to 1
+PASS: gdb.base/printcmds.exp: p &ctable2[1*16] with print elements set to 1
+PASS: gdb.base/printcmds.exp: p &ctable2[2*16] with print elements set to 1
+PASS: gdb.base/printcmds.exp: p &ctable2[3*16] with print elements set to 1
+PASS: gdb.base/printcmds.exp: p &ctable2[4*16] with print elements set to 1
+PASS: gdb.base/printcmds.exp: p &ctable2[5*16] with print elements set to 1
+PASS: gdb.base/printcmds.exp: p &ctable2[6*16] with print elements set to 1
+PASS: gdb.base/printcmds.exp: p &ctable2[7*16] with print elements set to 1
+PASS: gdb.base/printcmds.exp: p &ctable2[8*16] with print elements set to 1
+PASS: gdb.base/printcmds.exp: p &ctable2[9*16] with print elements set to 1
+PASS: gdb.base/printcmds.exp: p &ctable2[10*16] with print elements set to 1
+PASS: gdb.base/printcmds.exp: p &ctable2[11*16] with print elements set to 1
+PASS: gdb.base/printcmds.exp: p &ctable2[12*16] with print elements set to 1
+PASS: gdb.base/printcmds.exp: p &ctable2[13*16] with print elements set to 1
+PASS: gdb.base/printcmds.exp: p &ctable2[14*16] with print elements set to 1
+PASS: gdb.base/printcmds.exp: p &ctable2[15*16] with print elements set to 1
+PASS: gdb.base/printcmds.exp: set print elements 2
+PASS: gdb.base/printcmds.exp: p &ctable2[0*16] with print elements set to 2
+PASS: gdb.base/printcmds.exp: p &ctable2[1*16] with print elements set to 2
+PASS: gdb.base/printcmds.exp: p &ctable2[2*16] with print elements set to 2
+PASS: gdb.base/printcmds.exp: p &ctable2[3*16] with print elements set to 2
+PASS: gdb.base/printcmds.exp: p &ctable2[4*16] with print elements set to 2
+PASS: gdb.base/printcmds.exp: p &ctable2[5*16] with print elements set to 2
+PASS: gdb.base/printcmds.exp: p &ctable2[6*16] with print elements set to 2
+PASS: gdb.base/printcmds.exp: p &ctable2[7*16] with print elements set to 2
+PASS: gdb.base/printcmds.exp: p &ctable2[8*16] with print elements set to 2
+PASS: gdb.base/printcmds.exp: p &ctable2[9*16] with print elements set to 2
+PASS: gdb.base/printcmds.exp: p &ctable2[10*16] with print elements set to 2
+PASS: gdb.base/printcmds.exp: p &ctable2[11*16] with print elements set to 2
+PASS: gdb.base/printcmds.exp: p &ctable2[12*16] with print elements set to 2
+PASS: gdb.base/printcmds.exp: p &ctable2[13*16] with print elements set to 2
+PASS: gdb.base/printcmds.exp: p &ctable2[14*16] with print elements set to 2
+PASS: gdb.base/printcmds.exp: p &ctable2[15*16] with print elements set to 2
+PASS: gdb.base/printcmds.exp: set print elements 3
+PASS: gdb.base/printcmds.exp: p &ctable2[0*16] with print elements set to 3
+PASS: gdb.base/printcmds.exp: p &ctable2[1*16] with print elements set to 3
+PASS: gdb.base/printcmds.exp: p &ctable2[2*16] with print elements set to 3
+PASS: gdb.base/printcmds.exp: p &ctable2[3*16] with print elements set to 3
+PASS: gdb.base/printcmds.exp: p &ctable2[4*16] with print elements set to 3
+PASS: gdb.base/printcmds.exp: p &ctable2[5*16] with print elements set to 3
+PASS: gdb.base/printcmds.exp: p &ctable2[6*16] with print elements set to 3
+PASS: gdb.base/printcmds.exp: p &ctable2[7*16] with print elements set to 3
+PASS: gdb.base/printcmds.exp: p &ctable2[8*16] with print elements set to 3
+PASS: gdb.base/printcmds.exp: p &ctable2[9*16] with print elements set to 3
+PASS: gdb.base/printcmds.exp: p &ctable2[10*16] with print elements set to 3
+PASS: gdb.base/printcmds.exp: p &ctable2[11*16] with print elements set to 3
+PASS: gdb.base/printcmds.exp: p &ctable2[12*16] with print elements set to 3
+PASS: gdb.base/printcmds.exp: p &ctable2[13*16] with print elements set to 3
+PASS: gdb.base/printcmds.exp: p &ctable2[14*16] with print elements set to 3
+PASS: gdb.base/printcmds.exp: p &ctable2[15*16] with print elements set to 3
+PASS: gdb.base/printcmds.exp: set print elements 4
+PASS: gdb.base/printcmds.exp: p &ctable2[0*16] with print elements set to 4
+PASS: gdb.base/printcmds.exp: p &ctable2[1*16] with print elements set to 4
+PASS: gdb.base/printcmds.exp: p &ctable2[2*16] with print elements set to 4
+PASS: gdb.base/printcmds.exp: p &ctable2[3*16] with print elements set to 4
+PASS: gdb.base/printcmds.exp: p &ctable2[4*16] with print elements set to 4
+PASS: gdb.base/printcmds.exp: p &ctable2[5*16] with print elements set to 4
+PASS: gdb.base/printcmds.exp: p &ctable2[6*16] with print elements set to 4
+PASS: gdb.base/printcmds.exp: p &ctable2[7*16] with print elements set to 4
+PASS: gdb.base/printcmds.exp: p &ctable2[8*16] with print elements set to 4
+PASS: gdb.base/printcmds.exp: p &ctable2[9*16] with print elements set to 4
+PASS: gdb.base/printcmds.exp: p &ctable2[10*16] with print elements set to 4
+PASS: gdb.base/printcmds.exp: p &ctable2[11*16] with print elements set to 4
+PASS: gdb.base/printcmds.exp: p &ctable2[12*16] with print elements set to 4
+PASS: gdb.base/printcmds.exp: p &ctable2[13*16] with print elements set to 4
+PASS: gdb.base/printcmds.exp: p &ctable2[14*16] with print elements set to 4
+PASS: gdb.base/printcmds.exp: p &ctable2[15*16] with print elements set to 4
+PASS: gdb.base/printcmds.exp: set print elements 5
+PASS: gdb.base/printcmds.exp: p &ctable2[0*16] with print elements set to 5
+PASS: gdb.base/printcmds.exp: p &ctable2[1*16] with print elements set to 5
+PASS: gdb.base/printcmds.exp: p &ctable2[2*16] with print elements set to 5
+PASS: gdb.base/printcmds.exp: p &ctable2[3*16] with print elements set to 5
+PASS: gdb.base/printcmds.exp: p &ctable2[4*16] with print elements set to 5
+PASS: gdb.base/printcmds.exp: p &ctable2[5*16] with print elements set to 5
+PASS: gdb.base/printcmds.exp: p &ctable2[6*16] with print elements set to 5
+PASS: gdb.base/printcmds.exp: p &ctable2[7*16] with print elements set to 5
+PASS: gdb.base/printcmds.exp: p &ctable2[8*16] with print elements set to 5
+PASS: gdb.base/printcmds.exp: p &ctable2[9*16] with print elements set to 5
+PASS: gdb.base/printcmds.exp: p &ctable2[10*16] with print elements set to 5
+PASS: gdb.base/printcmds.exp: p &ctable2[11*16] with print elements set to 5
+PASS: gdb.base/printcmds.exp: p &ctable2[12*16] with print elements set to 5
+PASS: gdb.base/printcmds.exp: p &ctable2[13*16] with print elements set to 5
+PASS: gdb.base/printcmds.exp: p &ctable2[14*16] with print elements set to 5
+PASS: gdb.base/printcmds.exp: p &ctable2[15*16] with print elements set to 5
+PASS: gdb.base/printcmds.exp: set print elements 6
+PASS: gdb.base/printcmds.exp: p &ctable2[0*16] with print elements set to 6
+PASS: gdb.base/printcmds.exp: p &ctable2[1*16] with print elements set to 6
+PASS: gdb.base/printcmds.exp: p &ctable2[2*16] with print elements set to 6
+PASS: gdb.base/printcmds.exp: p &ctable2[3*16] with print elements set to 6
+PASS: gdb.base/printcmds.exp: p &ctable2[4*16] with print elements set to 6
+PASS: gdb.base/printcmds.exp: p &ctable2[5*16] with print elements set to 6
+PASS: gdb.base/printcmds.exp: p &ctable2[6*16] with print elements set to 6
+PASS: gdb.base/printcmds.exp: p &ctable2[7*16] with print elements set to 6
+PASS: gdb.base/printcmds.exp: p &ctable2[8*16] with print elements set to 6
+PASS: gdb.base/printcmds.exp: p &ctable2[9*16] with print elements set to 6
+PASS: gdb.base/printcmds.exp: p &ctable2[10*16] with print elements set to 6
+PASS: gdb.base/printcmds.exp: p &ctable2[11*16] with print elements set to 6
+PASS: gdb.base/printcmds.exp: p &ctable2[12*16] with print elements set to 6
+PASS: gdb.base/printcmds.exp: p &ctable2[13*16] with print elements set to 6
+PASS: gdb.base/printcmds.exp: p &ctable2[14*16] with print elements set to 6
+PASS: gdb.base/printcmds.exp: p &ctable2[15*16] with print elements set to 6
+PASS: gdb.base/printcmds.exp: set print elements 7
+PASS: gdb.base/printcmds.exp: p &ctable2[0*16] with print elements set to 7
+PASS: gdb.base/printcmds.exp: p &ctable2[1*16] with print elements set to 7
+PASS: gdb.base/printcmds.exp: p &ctable2[2*16] with print elements set to 7
+PASS: gdb.base/printcmds.exp: p &ctable2[3*16] with print elements set to 7
+PASS: gdb.base/printcmds.exp: p &ctable2[4*16] with print elements set to 7
+PASS: gdb.base/printcmds.exp: p &ctable2[5*16] with print elements set to 7
+PASS: gdb.base/printcmds.exp: p &ctable2[6*16] with print elements set to 7
+PASS: gdb.base/printcmds.exp: p &ctable2[7*16] with print elements set to 7
+PASS: gdb.base/printcmds.exp: p &ctable2[8*16] with print elements set to 7
+PASS: gdb.base/printcmds.exp: p &ctable2[9*16] with print elements set to 7
+PASS: gdb.base/printcmds.exp: p &ctable2[10*16] with print elements set to 7
+PASS: gdb.base/printcmds.exp: p &ctable2[11*16] with print elements set to 7
+PASS: gdb.base/printcmds.exp: p &ctable2[12*16] with print elements set to 7
+PASS: gdb.base/printcmds.exp: p &ctable2[13*16] with print elements set to 7
+PASS: gdb.base/printcmds.exp: p &ctable2[14*16] with print elements set to 7
+PASS: gdb.base/printcmds.exp: p &ctable2[15*16] with print elements set to 7
+PASS: gdb.base/printcmds.exp: set print elements 8
+PASS: gdb.base/printcmds.exp: p &ctable2[0*16] with print elements set to 8
+PASS: gdb.base/printcmds.exp: p &ctable2[1*16] with print elements set to 8
+PASS: gdb.base/printcmds.exp: p &ctable2[2*16] with print elements set to 8
+PASS: gdb.base/printcmds.exp: p &ctable2[3*16] with print elements set to 8
+PASS: gdb.base/printcmds.exp: p &ctable2[4*16] with print elements set to 8
+PASS: gdb.base/printcmds.exp: p &ctable2[5*16] with print elements set to 8
+PASS: gdb.base/printcmds.exp: p &ctable2[6*16] with print elements set to 8
+PASS: gdb.base/printcmds.exp: p &ctable2[7*16] with print elements set to 8
+PASS: gdb.base/printcmds.exp: p &ctable2[8*16] with print elements set to 8
+PASS: gdb.base/printcmds.exp: p &ctable2[9*16] with print elements set to 8
+PASS: gdb.base/printcmds.exp: p &ctable2[10*16] with print elements set to 8
+PASS: gdb.base/printcmds.exp: p &ctable2[11*16] with print elements set to 8
+PASS: gdb.base/printcmds.exp: p &ctable2[12*16] with print elements set to 8
+PASS: gdb.base/printcmds.exp: p &ctable2[13*16] with print elements set to 8
+PASS: gdb.base/printcmds.exp: p &ctable2[14*16] with print elements set to 8
+PASS: gdb.base/printcmds.exp: p &ctable2[15*16] with print elements set to 8
+PASS: gdb.base/printcmds.exp: set print elements 9
+PASS: gdb.base/printcmds.exp: p &ctable2[0*16] with print elements set to 9
+PASS: gdb.base/printcmds.exp: p &ctable2[1*16] with print elements set to 9
+PASS: gdb.base/printcmds.exp: p &ctable2[2*16] with print elements set to 9
+PASS: gdb.base/printcmds.exp: p &ctable2[3*16] with print elements set to 9
+PASS: gdb.base/printcmds.exp: p &ctable2[4*16] with print elements set to 9
+PASS: gdb.base/printcmds.exp: p &ctable2[5*16] with print elements set to 9
+PASS: gdb.base/printcmds.exp: p &ctable2[6*16] with print elements set to 9
+PASS: gdb.base/printcmds.exp: p &ctable2[7*16] with print elements set to 9
+PASS: gdb.base/printcmds.exp: p &ctable2[8*16] with print elements set to 9
+PASS: gdb.base/printcmds.exp: p &ctable2[9*16] with print elements set to 9
+PASS: gdb.base/printcmds.exp: p &ctable2[10*16] with print elements set to 9
+PASS: gdb.base/printcmds.exp: p &ctable2[11*16] with print elements set to 9
+PASS: gdb.base/printcmds.exp: p &ctable2[12*16] with print elements set to 9
+PASS: gdb.base/printcmds.exp: p &ctable2[13*16] with print elements set to 9
+PASS: gdb.base/printcmds.exp: p &ctable2[14*16] with print elements set to 9
+PASS: gdb.base/printcmds.exp: p &ctable2[15*16] with print elements set to 9
+PASS: gdb.base/printcmds.exp: set print elements 10
+PASS: gdb.base/printcmds.exp: p &ctable2[0*16] with print elements set to 10
+PASS: gdb.base/printcmds.exp: p &ctable2[1*16] with print elements set to 10
+PASS: gdb.base/printcmds.exp: p &ctable2[2*16] with print elements set to 10
+PASS: gdb.base/printcmds.exp: p &ctable2[3*16] with print elements set to 10
+PASS: gdb.base/printcmds.exp: p &ctable2[4*16] with print elements set to 10
+PASS: gdb.base/printcmds.exp: p &ctable2[5*16] with print elements set to 10
+PASS: gdb.base/printcmds.exp: p &ctable2[6*16] with print elements set to 10
+PASS: gdb.base/printcmds.exp: p &ctable2[7*16] with print elements set to 10
+PASS: gdb.base/printcmds.exp: p &ctable2[8*16] with print elements set to 10
+PASS: gdb.base/printcmds.exp: p &ctable2[9*16] with print elements set to 10
+PASS: gdb.base/printcmds.exp: p &ctable2[10*16] with print elements set to 10
+PASS: gdb.base/printcmds.exp: p &ctable2[11*16] with print elements set to 10
+PASS: gdb.base/printcmds.exp: p &ctable2[12*16] with print elements set to 10
+PASS: gdb.base/printcmds.exp: p &ctable2[13*16] with print elements set to 10
+PASS: gdb.base/printcmds.exp: p &ctable2[14*16] with print elements set to 10
+PASS: gdb.base/printcmds.exp: p &ctable2[15*16] with print elements set to 10
+PASS: gdb.base/printcmds.exp: set print elements 11
+PASS: gdb.base/printcmds.exp: p &ctable2[0*16] with print elements set to 11
+PASS: gdb.base/printcmds.exp: p &ctable2[1*16] with print elements set to 11
+PASS: gdb.base/printcmds.exp: p &ctable2[2*16] with print elements set to 11
+PASS: gdb.base/printcmds.exp: p &ctable2[3*16] with print elements set to 11
+PASS: gdb.base/printcmds.exp: p &ctable2[4*16] with print elements set to 11
+PASS: gdb.base/printcmds.exp: p &ctable2[5*16] with print elements set to 11
+PASS: gdb.base/printcmds.exp: p &ctable2[6*16] with print elements set to 11
+PASS: gdb.base/printcmds.exp: p &ctable2[7*16] with print elements set to 11
+PASS: gdb.base/printcmds.exp: p &ctable2[8*16] with print elements set to 11
+PASS: gdb.base/printcmds.exp: p &ctable2[9*16] with print elements set to 11
+PASS: gdb.base/printcmds.exp: p &ctable2[10*16] with print elements set to 11
+PASS: gdb.base/printcmds.exp: p &ctable2[11*16] with print elements set to 11
+PASS: gdb.base/printcmds.exp: p &ctable2[12*16] with print elements set to 11
+PASS: gdb.base/printcmds.exp: p &ctable2[13*16] with print elements set to 11
+PASS: gdb.base/printcmds.exp: p &ctable2[14*16] with print elements set to 11
+PASS: gdb.base/printcmds.exp: p &ctable2[15*16] with print elements set to 11
+PASS: gdb.base/printcmds.exp: set print elements 12
+PASS: gdb.base/printcmds.exp: p &ctable2[0*16] with print elements set to 12
+PASS: gdb.base/printcmds.exp: p &ctable2[1*16] with print elements set to 12
+PASS: gdb.base/printcmds.exp: p &ctable2[2*16] with print elements set to 12
+PASS: gdb.base/printcmds.exp: p &ctable2[3*16] with print elements set to 12
+PASS: gdb.base/printcmds.exp: p &ctable2[4*16] with print elements set to 12
+PASS: gdb.base/printcmds.exp: p &ctable2[5*16] with print elements set to 12
+PASS: gdb.base/printcmds.exp: p &ctable2[6*16] with print elements set to 12
+PASS: gdb.base/printcmds.exp: p &ctable2[7*16] with print elements set to 12
+PASS: gdb.base/printcmds.exp: p &ctable2[8*16] with print elements set to 12
+PASS: gdb.base/printcmds.exp: p &ctable2[9*16] with print elements set to 12
+PASS: gdb.base/printcmds.exp: p &ctable2[10*16] with print elements set to 12
+PASS: gdb.base/printcmds.exp: p &ctable2[11*16] with print elements set to 12
+PASS: gdb.base/printcmds.exp: p &ctable2[12*16] with print elements set to 12
+PASS: gdb.base/printcmds.exp: p &ctable2[13*16] with print elements set to 12
+PASS: gdb.base/printcmds.exp: p &ctable2[14*16] with print elements set to 12
+PASS: gdb.base/printcmds.exp: p &ctable2[15*16] with print elements set to 12
+PASS: gdb.base/printcmds.exp: set print elements 13
+PASS: gdb.base/printcmds.exp: p &ctable2[0*16] with print elements set to 13
+PASS: gdb.base/printcmds.exp: p &ctable2[1*16] with print elements set to 13
+PASS: gdb.base/printcmds.exp: p &ctable2[2*16] with print elements set to 13
+PASS: gdb.base/printcmds.exp: p &ctable2[3*16] with print elements set to 13
+PASS: gdb.base/printcmds.exp: p &ctable2[4*16] with print elements set to 13
+PASS: gdb.base/printcmds.exp: p &ctable2[5*16] with print elements set to 13
+PASS: gdb.base/printcmds.exp: p &ctable2[6*16] with print elements set to 13
+PASS: gdb.base/printcmds.exp: p &ctable2[7*16] with print elements set to 13
+PASS: gdb.base/printcmds.exp: p &ctable2[8*16] with print elements set to 13
+PASS: gdb.base/printcmds.exp: p &ctable2[9*16] with print elements set to 13
+PASS: gdb.base/printcmds.exp: p &ctable2[10*16] with print elements set to 13
+PASS: gdb.base/printcmds.exp: p &ctable2[11*16] with print elements set to 13
+PASS: gdb.base/printcmds.exp: p &ctable2[12*16] with print elements set to 13
+PASS: gdb.base/printcmds.exp: p &ctable2[13*16] with print elements set to 13
+PASS: gdb.base/printcmds.exp: p &ctable2[14*16] with print elements set to 13
+PASS: gdb.base/printcmds.exp: p &ctable2[15*16] with print elements set to 13
+PASS: gdb.base/printcmds.exp: set print elements 14
+PASS: gdb.base/printcmds.exp: p &ctable2[0*16] with print elements set to 14
+PASS: gdb.base/printcmds.exp: p &ctable2[1*16] with print elements set to 14
+PASS: gdb.base/printcmds.exp: p &ctable2[2*16] with print elements set to 14
+PASS: gdb.base/printcmds.exp: p &ctable2[3*16] with print elements set to 14
+PASS: gdb.base/printcmds.exp: p &ctable2[4*16] with print elements set to 14
+PASS: gdb.base/printcmds.exp: p &ctable2[5*16] with print elements set to 14
+PASS: gdb.base/printcmds.exp: p &ctable2[6*16] with print elements set to 14
+PASS: gdb.base/printcmds.exp: p &ctable2[7*16] with print elements set to 14
+PASS: gdb.base/printcmds.exp: p &ctable2[8*16] with print elements set to 14
+PASS: gdb.base/printcmds.exp: p &ctable2[9*16] with print elements set to 14
+PASS: gdb.base/printcmds.exp: p &ctable2[10*16] with print elements set to 14
+PASS: gdb.base/printcmds.exp: p &ctable2[11*16] with print elements set to 14
+PASS: gdb.base/printcmds.exp: p &ctable2[12*16] with print elements set to 14
+PASS: gdb.base/printcmds.exp: p &ctable2[13*16] with print elements set to 14
+PASS: gdb.base/printcmds.exp: p &ctable2[14*16] with print elements set to 14
+PASS: gdb.base/printcmds.exp: p &ctable2[15*16] with print elements set to 14
+PASS: gdb.base/printcmds.exp: set print elements 15
+PASS: gdb.base/printcmds.exp: p &ctable2[0*16] with print elements set to 15
+PASS: gdb.base/printcmds.exp: p &ctable2[1*16] with print elements set to 15
+PASS: gdb.base/printcmds.exp: p &ctable2[2*16] with print elements set to 15
+PASS: gdb.base/printcmds.exp: p &ctable2[3*16] with print elements set to 15
+PASS: gdb.base/printcmds.exp: p &ctable2[4*16] with print elements set to 15
+PASS: gdb.base/printcmds.exp: p &ctable2[5*16] with print elements set to 15
+PASS: gdb.base/printcmds.exp: p &ctable2[6*16] with print elements set to 15
+PASS: gdb.base/printcmds.exp: p &ctable2[7*16] with print elements set to 15
+PASS: gdb.base/printcmds.exp: p &ctable2[8*16] with print elements set to 15
+PASS: gdb.base/printcmds.exp: p &ctable2[9*16] with print elements set to 15
+PASS: gdb.base/printcmds.exp: p &ctable2[10*16] with print elements set to 15
+PASS: gdb.base/printcmds.exp: p &ctable2[11*16] with print elements set to 15
+PASS: gdb.base/printcmds.exp: p &ctable2[12*16] with print elements set to 15
+PASS: gdb.base/printcmds.exp: p &ctable2[13*16] with print elements set to 15
+PASS: gdb.base/printcmds.exp: p &ctable2[14*16] with print elements set to 15
+PASS: gdb.base/printcmds.exp: p &ctable2[15*16] with print elements set to 15
+PASS: gdb.base/printcmds.exp: set print elements 16
+PASS: gdb.base/printcmds.exp: p &ctable2[0*16] with print elements set to 16
+PASS: gdb.base/printcmds.exp: p &ctable2[1*16] with print elements set to 16
+PASS: gdb.base/printcmds.exp: p &ctable2[2*16] with print elements set to 16
+PASS: gdb.base/printcmds.exp: p &ctable2[3*16] with print elements set to 16
+PASS: gdb.base/printcmds.exp: p &ctable2[4*16] with print elements set to 16
+PASS: gdb.base/printcmds.exp: p &ctable2[5*16] with print elements set to 16
+PASS: gdb.base/printcmds.exp: p &ctable2[6*16] with print elements set to 16
+PASS: gdb.base/printcmds.exp: p &ctable2[7*16] with print elements set to 16
+PASS: gdb.base/printcmds.exp: p &ctable2[8*16] with print elements set to 16
+PASS: gdb.base/printcmds.exp: p &ctable2[9*16] with print elements set to 16
+PASS: gdb.base/printcmds.exp: p &ctable2[10*16] with print elements set to 16
+PASS: gdb.base/printcmds.exp: p &ctable2[11*16] with print elements set to 16
+PASS: gdb.base/printcmds.exp: p &ctable2[12*16] with print elements set to 16
+PASS: gdb.base/printcmds.exp: p &ctable2[13*16] with print elements set to 16
+PASS: gdb.base/printcmds.exp: p &ctable2[14*16] with print elements set to 16
+PASS: gdb.base/printcmds.exp: p &ctable2[15*16] with print elements set to 16
+PASS: gdb.base/printcmds.exp: correct element repeats in array embedded at offset > 0
+PASS: gdb.base/printcmds.exp: set print elements 0
+PASS: gdb.base/printcmds.exp: p teststring with elements set to 0
+PASS: gdb.base/printcmds.exp: set print elements 1
+PASS: gdb.base/printcmds.exp: p teststring with elements set to 1
+PASS: gdb.base/printcmds.exp: set print elements 5
+PASS: gdb.base/printcmds.exp: p teststring with elements set to 5
+PASS: gdb.base/printcmds.exp: set print elements 19
+PASS: gdb.base/printcmds.exp: p teststring with elements set to 19
+PASS: gdb.base/printcmds.exp: set print elements 20
+PASS: gdb.base/printcmds.exp: p teststring with elements set to 20
+PASS: gdb.base/printcmds.exp: set print elements 8
+PASS: gdb.base/printcmds.exp: p &ctable1[0]
+PASS: gdb.base/printcmds.exp: p &ctable1[1]
+PASS: gdb.base/printcmds.exp: p &ctable1[1*8]
+PASS: gdb.base/printcmds.exp: p &ctable1[2*8]
+PASS: gdb.base/printcmds.exp: p &ctable1[3*8]
+PASS: gdb.base/printcmds.exp: p &ctable1[4*8]
+PASS: gdb.base/printcmds.exp: p &ctable1[5*8]
+PASS: gdb.base/printcmds.exp: p &ctable1[6*8]
+PASS: gdb.base/printcmds.exp: p &ctable1[7*8]
+PASS: gdb.base/printcmds.exp: p &ctable1[8*8]
+PASS: gdb.base/printcmds.exp: p &ctable1[9*8]
+PASS: gdb.base/printcmds.exp: p &ctable1[10*8]
+PASS: gdb.base/printcmds.exp: p &ctable1[11*8]
+PASS: gdb.base/printcmds.exp: p &ctable1[12*8]
+PASS: gdb.base/printcmds.exp: p &ctable1[13*8]
+PASS: gdb.base/printcmds.exp: p &ctable1[14*8]
+PASS: gdb.base/printcmds.exp: p &ctable1[15*8]
+PASS: gdb.base/printcmds.exp: p &ctable1[16*8]
+PASS: gdb.base/printcmds.exp: p &ctable1[17*8]
+PASS: gdb.base/printcmds.exp: p &ctable1[18*8]
+PASS: gdb.base/printcmds.exp: p &ctable1[19*8]
+PASS: gdb.base/printcmds.exp: p &ctable1[20*8]
+PASS: gdb.base/printcmds.exp: p &ctable1[21*8]
+PASS: gdb.base/printcmds.exp: p &ctable1[22*8]
+PASS: gdb.base/printcmds.exp: p &ctable1[23*8]
+PASS: gdb.base/printcmds.exp: p &ctable1[24*8]
+PASS: gdb.base/printcmds.exp: p &ctable1[25*8]
+PASS: gdb.base/printcmds.exp: p &ctable1[26*8]
+PASS: gdb.base/printcmds.exp: p &ctable1[27*8]
+PASS: gdb.base/printcmds.exp: p &ctable1[28*8]
+PASS: gdb.base/printcmds.exp: p &ctable1[29*8]
+PASS: gdb.base/printcmds.exp: p &ctable1[30*8]
+PASS: gdb.base/printcmds.exp: p &ctable1[31*8]
+PASS: gdb.base/printcmds.exp: set print elements 24
+PASS: gdb.base/printcmds.exp: set print elements 24
+PASS: gdb.base/printcmds.exp: p a1[0]
+PASS: gdb.base/printcmds.exp: p a1[9]
+PASS: gdb.base/printcmds.exp: p a2
+PASS: gdb.base/printcmds.exp: p a2[0]
+PASS: gdb.base/printcmds.exp: p a2[3]
+PASS: gdb.base/printcmds.exp: set print null-stop on
+PASS: gdb.base/printcmds.exp: print a2 with null-stop on
+PASS: gdb.base/printcmds.exp: set print null-stop off
+PASS: gdb.base/printcmds.exp: p int1dim[0]@2
+PASS: gdb.base/printcmds.exp: p int1dim[0]@2@3
+PASS: gdb.base/printcmds.exp: set print elements 24
+PASS: gdb.base/printcmds.exp: set print address on
+PASS: gdb.base/printcmds.exp: p arrays
+PASS: gdb.base/printcmds.exp: p parrays
+PASS: gdb.base/printcmds.exp: p parrays->array1
+PASS: gdb.base/printcmds.exp: p &parrays->array1
+PASS: gdb.base/printcmds.exp: p parrays->array2
+PASS: gdb.base/printcmds.exp: p &parrays->array2
+PASS: gdb.base/printcmds.exp: p parrays->array3
+PASS: gdb.base/printcmds.exp: p &parrays->array3
+PASS: gdb.base/printcmds.exp: p parrays->array4
+PASS: gdb.base/printcmds.exp: p &parrays->array4
+PASS: gdb.base/printcmds.exp: p parrays->array5
+PASS: gdb.base/printcmds.exp: p &parrays->array5
+PASS: gdb.base/printcmds.exp: set print address off
+PASS: gdb.base/printcmds.exp: set print elements 50
+PASS: gdb.base/printcmds.exp: p "a string"
+PASS: gdb.base/printcmds.exp: p "embedded \000 null"
+PASS: gdb.base/printcmds.exp: p "abcd"[2]
+PASS: gdb.base/printcmds.exp: p sizeof ("abcdef")
+PASS: gdb.base/printcmds.exp: ptype "foo"
+PASS: gdb.base/printcmds.exp: p *"foo"
+PASS: gdb.base/printcmds.exp: ptype *"foo"
+PASS: gdb.base/printcmds.exp: p &*"foo"
+PASS: gdb.base/printcmds.exp: ptype &*"foo"
+PASS: gdb.base/printcmds.exp: p (char *)"foo"
+PASS: gdb.base/printcmds.exp: print {'a','b','c'}
+PASS: gdb.base/printcmds.exp: print {4,5,6}[2]
+PASS: gdb.base/printcmds.exp: print *&{4,5,6}[1]
+PASS: gdb.base/printcmds.exp: print some_volatile_enum
+PASS: gdb.base/printcmds.exp: print three
+PASS: gdb.base/printcmds.exp: printf "x=%d,y=%d,z=%d\n", 5, 6, 7
+PASS: gdb.base/printcmds.exp: printf "string=%.4sxx\n", teststring
+PASS: gdb.base/printcmds.exp: printf "string=%sxx\n", teststring
+PASS: gdb.base/printcmds.exp: printf "%f is fun\n", 1.0
+PASS: gdb.base/printcmds.exp: printf "x=%d,y=%f,z=%d\n", 5, 6.0, 7
+PASS: gdb.base/printcmds.exp: printf "%x %f, %c %x, %x, %f\n", 0xbad, -99.541, 'z', 0xfeedface, 0xdeadbeef, 5.0
+PASS: gdb.base/printcmds.exp: printf "%c\n", "x"[1,0]
+PASS: gdb.base/printcmds.exp: printf "%%%d%%\n", 5
+PASS: gdb.base/printcmds.exp: printf "%Hf\n",1.2df
+PASS: gdb.base/printcmds.exp: printf "%Hf\n",-1.2df
+PASS: gdb.base/printcmds.exp: printf "%Hf\n",1.234567df
+PASS: gdb.base/printcmds.exp: printf "%Hf\n",-1.234567df
+PASS: gdb.base/printcmds.exp: printf "%Hf\n",1234567.df
+PASS: gdb.base/printcmds.exp: printf "%Hf\n",-1234567.df
+PASS: gdb.base/printcmds.exp: printf "%Hf\n",1.2E1df
+PASS: gdb.base/printcmds.exp: printf "%Hf\n",1.2E10df
+PASS: gdb.base/printcmds.exp: printf "%Hf\n",1.2E-10df
+PASS: gdb.base/printcmds.exp: printf "%Hf\n",1.2E96df
+PASS: gdb.base/printcmds.exp: printf "%Df\n",1.2dd
+PASS: gdb.base/printcmds.exp: printf "%Df\n",-1.2dd
+PASS: gdb.base/printcmds.exp: printf "%Df\n",1.234567890123456dd
+PASS: gdb.base/printcmds.exp: printf "%Df\n",-1.234567890123456dd
+PASS: gdb.base/printcmds.exp: printf "%Df\n",1234567890123456.dd
+PASS: gdb.base/printcmds.exp: printf "%Df\n",-1234567890123456.dd
+PASS: gdb.base/printcmds.exp: printf "%Df\n",1.2E1dd
+PASS: gdb.base/printcmds.exp: printf "%Df\n",1.2E10dd
+PASS: gdb.base/printcmds.exp: printf "%Df\n",1.2E-10dd
+PASS: gdb.base/printcmds.exp: printf "%Df\n",1.2E384dd
+PASS: gdb.base/printcmds.exp: printf "%DDf\n",1.2dl
+PASS: gdb.base/printcmds.exp: printf "%DDf\n",-1.2dl
+PASS: gdb.base/printcmds.exp: printf "%DDf\n",1.234567890123456789012345678901234dl
+PASS: gdb.base/printcmds.exp: printf "%DDf\n",-1.234567890123456789012345678901234dl
+PASS: gdb.base/printcmds.exp: printf "%DDf\n",1234567890123456789012345678901234.dl
+PASS: gdb.base/printcmds.exp: printf "%DDf\n",-1234567890123456789012345678901234.dl
+PASS: gdb.base/printcmds.exp: printf "%DDf\n",1.2E1dl
+PASS: gdb.base/printcmds.exp: printf "%DDf\n",1.2E10dl
+PASS: gdb.base/printcmds.exp: printf "%DDf\n",1.2E-10dl
+PASS: gdb.base/printcmds.exp: printf "%DDf\n",1.2E6144dl
+PASS: gdb.base/printcmds.exp: printf "%Hf %Hf\n",1.2df,1.3df
+PASS: gdb.base/printcmds.exp: set print symbol on
+PASS: gdb.base/printcmds.exp: print &three
+PASS: gdb.base/printcmds.exp: print parrays
+PASS: gdb.base/printcmds.exp: set print symbol off
+PASS: gdb.base/printcmds.exp: print invalid_LLL
+PASS: gdb.base/printcmds.exp: print invalid_LLE
+PASS: gdb.base/printcmds.exp: print invalid_LLR
+PASS: gdb.base/printcmds.exp: print invalid_LLS
+PASS: gdb.base/printcmds.exp: print invalid_ELL
+PASS: gdb.base/printcmds.exp: print invalid_ELR
+PASS: gdb.base/printcmds.exp: print invalid_ELS
+PASS: gdb.base/printcmds.exp: print invalid_RLL
+PASS: gdb.base/printcmds.exp: print invalid_RLE
+PASS: gdb.base/printcmds.exp: print invalid_RLR
+PASS: gdb.base/printcmds.exp: print invalid_RLS
+PASS: gdb.base/printcmds.exp: print invalid_SLL
+PASS: gdb.base/printcmds.exp: print invalid_SLE
+PASS: gdb.base/printcmds.exp: print invalid_SLR
+PASS: gdb.base/printcmds.exp: print invalid_SLS
+PASS: gdb.base/printcmds.exp: print invalid_LRL
+PASS: gdb.base/printcmds.exp: print invalid_LRE
+PASS: gdb.base/printcmds.exp: print invalid_LRR
+PASS: gdb.base/printcmds.exp: print invalid_LRS
+PASS: gdb.base/printcmds.exp: print invalid_ERL
+PASS: gdb.base/printcmds.exp: print invalid_ERR
+PASS: gdb.base/printcmds.exp: print invalid_ERS
+PASS: gdb.base/printcmds.exp: print invalid_RRL
+PASS: gdb.base/printcmds.exp: print invalid_RRE
+PASS: gdb.base/printcmds.exp: print invalid_RRR
+PASS: gdb.base/printcmds.exp: print invalid_RRS
+PASS: gdb.base/printcmds.exp: print invalid_SRL
+PASS: gdb.base/printcmds.exp: print invalid_SRE
+PASS: gdb.base/printcmds.exp: print invalid_SRR
+PASS: gdb.base/printcmds.exp: print invalid_SRS
+PASS: gdb.base/printcmds.exp: print invalid_LSL
+PASS: gdb.base/printcmds.exp: print invalid_LSE
+PASS: gdb.base/printcmds.exp: print invalid_LSR
+PASS: gdb.base/printcmds.exp: print invalid_LSS
+PASS: gdb.base/printcmds.exp: print invalid_ESL
+PASS: gdb.base/printcmds.exp: print invalid_ESR
+PASS: gdb.base/printcmds.exp: print invalid_ESS
+PASS: gdb.base/printcmds.exp: print invalid_RSL
+PASS: gdb.base/printcmds.exp: print invalid_RSE
+PASS: gdb.base/printcmds.exp: print invalid_RSR
+PASS: gdb.base/printcmds.exp: print invalid_RSS
+PASS: gdb.base/printcmds.exp: print invalid_SSL
+PASS: gdb.base/printcmds.exp: print invalid_SSE
+PASS: gdb.base/printcmds.exp: print invalid_SSR
+PASS: gdb.base/printcmds.exp: print invalid_SSS
+Running ./gdb.base/print-file-var.exp ...
+PASS: gdb.base/print-file-var.exp: breapoint past v1 & v2 initialization
+PASS: gdb.base/print-file-var.exp: continue to STOP marker
+PASS: gdb.base/print-file-var.exp: print 'print-file-var-lib1.c'::this_version_id == v1
+PASS: gdb.base/print-file-var.exp: print 'print-file-var-lib2.c'::this_version_id == v2
+Running ./gdb.base/prologue.exp ...
+PASS: gdb.base/prologue.exp: setting breakpoint at marker
+PASS: gdb.base/prologue.exp: continue to marker
+PASS: gdb.base/prologue.exp: reading $pc: marker
+PASS: gdb.base/prologue.exp: setting breakpoint at other
+PASS: gdb.base/prologue.exp: continue to other
+PASS: gdb.base/prologue.exp: reading $pc: other
+PASS: gdb.base/prologue.exp: same pc from minimal symbol
+Running ./gdb.base/prologue-include.exp ...
+PASS: gdb.base/prologue-include.exp: breakpoint main
+Running ./gdb.base/psymtab.exp ...
+PASS: gdb.base/psymtab.exp: psymtab pending setup
+PASS: gdb.base/psymtab.exp: Don't search past end of psymtab.
+Running ./gdb.base/ptr-typedef.exp ...
+PASS: gdb.base/ptr-typedef.exp: print foo_ptr
+PASS: gdb.base/ptr-typedef.exp: print foz_ptr
+Running ./gdb.base/ptype.exp ...
+PASS: gdb.base/ptype.exp: ptype unnamed enumeration member
+PASS: gdb.base/ptype.exp: ptype structure
+PASS: gdb.base/ptype.exp: ptype v_struct1.v_float_member
+PASS: gdb.base/ptype.exp: ptype v_struct1->v_float_member
+PASS: gdb.base/ptype.exp: ptype v_t_struct_p.v_float_member
+PASS: gdb.base/ptype.exp: ptype v_t_struct_p->v_float_member
+PASS: gdb.base/ptype.exp: ptype linked list structure
+PASS: gdb.base/ptype.exp: ptype union
+PASS: gdb.base/ptype.exp: ptype linked list union
+PASS: gdb.base/ptype.exp: ptype unnamed enumeration
+PASS: gdb.base/ptype.exp: ptype named enumeration
+PASS: gdb.base/ptype.exp: ptype unnamed typedef'd enumeration
+PASS: gdb.base/ptype.exp: list main
+PASS: gdb.base/ptype.exp: whatis unnamed typedef'd enum (compiler bug in IBM's xlc)
+PASS: gdb.base/ptype.exp: printing typedef'd struct
+PASS: gdb.base/ptype.exp: printing typedef'd union
+PASS: gdb.base/ptype.exp: ptype named typedef'd enumf'd enum
+PASS: gdb.base/ptype.exp: ptype misordered enumeration
+PASS: gdb.base/ptype.exp: ptype named enumeration member
+PASS: gdb.base/ptype.exp: ptype unnamed enumeration member #2
+PASS: gdb.base/ptype.exp: ptype short
+PASS: gdb.base/ptype.exp: ptype int
+PASS: gdb.base/ptype.exp: ptype t_char_array
+PASS: gdb.base/ptype.exp: ptype pv_char_array
+PASS: gdb.base/ptype.exp: ptype outer structure
+PASS: gdb.base/ptype.exp: ptype inner structure
+PASS: gdb.base/ptype.exp: ptype inner union
+PASS: gdb.base/ptype.exp: ptype nested structure
+PASS: gdb.base/ptype.exp: ptype outer int
+PASS: gdb.base/ptype.exp: ptype nested structure #2
+PASS: gdb.base/ptype.exp: ptype inner int
+PASS: gdb.base/ptype.exp: ptype nested union
+PASS: gdb.base/ptype.exp: ptype the_highest
+PASS: gdb.base/ptype.exp: ptype the_highest
+PASS: gdb.base/ptype.exp: ptype func_type
+PASS: gdb.base/ptype.exp: ptype old_fptr
+PASS: gdb.base/ptype.exp: ptype new_fptr
+PASS: gdb.base/ptype.exp: ptype fptr
+PASS: gdb.base/ptype.exp: ptype fptr2
+PASS: gdb.base/ptype.exp: ptype xptr
+PASS: gdb.base/ptype.exp: ptype ffptr
+PASS: gdb.base/ptype.exp: ptype fffptr
+PASS: gdb.base/ptype.exp: list intfoo
+PASS: gdb.base/ptype.exp: ptype foo typedef after first list of intfoo
+PASS: gdb.base/ptype.exp: list charfoo
+PASS: gdb.base/ptype.exp: ptype foo typedef after first list of charfoo
+PASS: gdb.base/ptype.exp: list intfoo
+PASS: gdb.base/ptype.exp: ptype foo typedef after second list of intfoo
+PASS: gdb.base/ptype.exp: list charfoo
+PASS: gdb.base/ptype.exp: ptype foo typedef after second list of charfoo
+PASS: gdb.base/ptype.exp: ptype "abc"
+PASS: gdb.base/ptype.exp: ptype {'a','b','c'}
+PASS: gdb.base/ptype.exp: ptype {0,1,2}
+PASS: gdb.base/ptype.exp: ptype {(long)0,(long)1,(long)2}
+PASS: gdb.base/ptype.exp: ptype {(float)0,(float)1,(float)2}
+PASS: gdb.base/ptype.exp: ptype {{0,1,2},{3,4,5}}
+PASS: gdb.base/ptype.exp: ptype {4,5,6}[2]
+PASS: gdb.base/ptype.exp: ptype *&{4,5,6}[1]
+PASS: gdb.base/ptype.exp: ptype $pc
+Running ./gdb.base/radix.exp ...
+PASS: gdb.base/radix.exp: initialize radix, input radix 2
+PASS: gdb.base/radix.exp: set input-radix 2
+PASS: gdb.base/radix.exp: show radix, input radix 2
+PASS: gdb.base/radix.exp: print 010; expect 8; input radix 2
+PASS: gdb.base/radix.exp: print 20.; expect 20; input radix 2
+PASS: gdb.base/radix.exp: print (int) 20.; expect 20; input radix 2
+PASS: gdb.base/radix.exp: print 0xf; expect 15; input radix 2
+PASS: gdb.base/radix.exp: print 0; expect 0; input radix 2
+PASS: gdb.base/radix.exp: print 1; expect 1; input radix 2
+PASS: gdb.base/radix.exp: print -1; expect -1; input radix 2
+PASS: gdb.base/radix.exp: print 10; expect 2; input radix 2
+PASS: gdb.base/radix.exp: print 11; expect 3; input radix 2
+PASS: gdb.base/radix.exp: print -10; expect -2; input radix 2
+PASS: gdb.base/radix.exp: print -11; expect -3; input radix 2
+PASS: gdb.base/radix.exp: print 100; expect 4; input radix 2
+PASS: gdb.base/radix.exp: print 101; expect 5; input radix 2
+PASS: gdb.base/radix.exp: print -100; expect -4; input radix 2
+PASS: gdb.base/radix.exp: print -101; expect -5; input radix 2
+PASS: gdb.base/radix.exp: print 10101; expect 21; input radix 2
+PASS: gdb.base/radix.exp: print 4; expect Invalid number "4"\.; input radix 2
+PASS: gdb.base/radix.exp: print -2; expect Invalid number "2"\.; input radix 2
+PASS: gdb.base/radix.exp: initialize radix, input radix 3
+PASS: gdb.base/radix.exp: set input-radix 3
+PASS: gdb.base/radix.exp: show radix, input radix 3
+PASS: gdb.base/radix.exp: print 010; expect 8; input radix 3
+PASS: gdb.base/radix.exp: print 20.; expect 20; input radix 3
+PASS: gdb.base/radix.exp: print (int) 20.; expect 20; input radix 3
+PASS: gdb.base/radix.exp: print 0xf; expect 15; input radix 3
+PASS: gdb.base/radix.exp: print 0; expect 0; input radix 3
+PASS: gdb.base/radix.exp: print 1; expect 1; input radix 3
+PASS: gdb.base/radix.exp: print -1; expect -1; input radix 3
+PASS: gdb.base/radix.exp: print 10; expect 3; input radix 3
+PASS: gdb.base/radix.exp: print 11; expect 4; input radix 3
+PASS: gdb.base/radix.exp: print -10; expect -3; input radix 3
+PASS: gdb.base/radix.exp: print -11; expect -4; input radix 3
+PASS: gdb.base/radix.exp: print 100; expect 9; input radix 3
+PASS: gdb.base/radix.exp: print 101; expect 10; input radix 3
+PASS: gdb.base/radix.exp: print -100; expect -9; input radix 3
+PASS: gdb.base/radix.exp: print -101; expect -10; input radix 3
+PASS: gdb.base/radix.exp: print 10101; expect 91; input radix 3
+PASS: gdb.base/radix.exp: print 2; expect 2; input radix 3
+PASS: gdb.base/radix.exp: print 20; expect 6; input radix 3
+PASS: gdb.base/radix.exp: print 3; expect Invalid number "3"\.; input radix 3
+PASS: gdb.base/radix.exp: print 30; expect Invalid number "30"\.; input radix 2
+PASS: gdb.base/radix.exp: initialize radix, input radix 8
+PASS: gdb.base/radix.exp: set input-radix 8
+PASS: gdb.base/radix.exp: show radix, input radix 8
+PASS: gdb.base/radix.exp: print 010; expect 8; input radix 8
+PASS: gdb.base/radix.exp: print 20.; expect 20; input radix 8
+PASS: gdb.base/radix.exp: print (int) 20.; expect 20; input radix 8
+PASS: gdb.base/radix.exp: print 0xf; expect 15; input radix 8
+PASS: gdb.base/radix.exp: print 0; expect 0; input radix 8
+PASS: gdb.base/radix.exp: print 1; expect 1; input radix 8
+PASS: gdb.base/radix.exp: print -1; expect -1; input radix 8
+PASS: gdb.base/radix.exp: print 10; expect 8; input radix 8
+PASS: gdb.base/radix.exp: print 11; expect 9; input radix 8
+PASS: gdb.base/radix.exp: print -10; expect -8; input radix 8
+PASS: gdb.base/radix.exp: print -11; expect -9; input radix 8
+PASS: gdb.base/radix.exp: print 100; expect 64; input radix 8
+PASS: gdb.base/radix.exp: print 101; expect 65; input radix 8
+PASS: gdb.base/radix.exp: print -100; expect -64; input radix 8
+PASS: gdb.base/radix.exp: print -101; expect -65; input radix 8
+PASS: gdb.base/radix.exp: print 10101; expect 4161; input radix 8
+PASS: gdb.base/radix.exp: print 20; expect 16; input radix 8
+PASS: gdb.base/radix.exp: print -20; expect -16; input radix 8
+PASS: gdb.base/radix.exp: print 8; expect Invalid number "8".; input radix 8
+PASS: gdb.base/radix.exp: print -9; expect Invalid number "9".; input radix 8
+PASS: gdb.base/radix.exp: initialize radix, input radix 10
+PASS: gdb.base/radix.exp: set input-radix 10
+PASS: gdb.base/radix.exp: show radix, input radix 10
+PASS: gdb.base/radix.exp: print 010; expect 8; input radix 10
+PASS: gdb.base/radix.exp: print 20.; expect 20; input radix 10
+PASS: gdb.base/radix.exp: print (int) 20.; expect 20; input radix 10
+PASS: gdb.base/radix.exp: print 0xf; expect 15; input radix 10
+PASS: gdb.base/radix.exp: print 0; expect 0; input radix 10
+PASS: gdb.base/radix.exp: print 1; expect 1; input radix 10
+PASS: gdb.base/radix.exp: print -1; expect -1; input radix 10
+PASS: gdb.base/radix.exp: print 10; expect 10; input radix 10
+PASS: gdb.base/radix.exp: print 11; expect 11; input radix 10
+PASS: gdb.base/radix.exp: print -10; expect -10; input radix 10
+PASS: gdb.base/radix.exp: print -11; expect -11; input radix 10
+PASS: gdb.base/radix.exp: print 100; expect 100; input radix 10
+PASS: gdb.base/radix.exp: print 101; expect 101; input radix 10
+PASS: gdb.base/radix.exp: print -100; expect -100; input radix 10
+PASS: gdb.base/radix.exp: print -101; expect -101; input radix 10
+PASS: gdb.base/radix.exp: print 10101; expect 10101; input radix 10
+PASS: gdb.base/radix.exp: print -12; expect -12; input radix 10
+PASS: gdb.base/radix.exp: initialize radix, input radix 16
+PASS: gdb.base/radix.exp: set input-radix 16
+PASS: gdb.base/radix.exp: show radix, input radix 16
+PASS: gdb.base/radix.exp: print 010; expect 8; input radix 16
+PASS: gdb.base/radix.exp: print 20.; expect 20; input radix 16
+PASS: gdb.base/radix.exp: print (int) 20.; expect 20; input radix 16
+PASS: gdb.base/radix.exp: print 0xf; expect 15; input radix 16
+PASS: gdb.base/radix.exp: print 0; expect 0; input radix 16
+PASS: gdb.base/radix.exp: print 1; expect 1; input radix 16
+PASS: gdb.base/radix.exp: print -1; expect -1; input radix 16
+PASS: gdb.base/radix.exp: print 10; expect 16; input radix 16
+PASS: gdb.base/radix.exp: print 11; expect 17; input radix 16
+PASS: gdb.base/radix.exp: print -10; expect -16; input radix 16
+PASS: gdb.base/radix.exp: print -11; expect -17; input radix 16
+PASS: gdb.base/radix.exp: print 100; expect 256; input radix 16
+PASS: gdb.base/radix.exp: print 101; expect 257; input radix 16
+PASS: gdb.base/radix.exp: print -100; expect -256; input radix 16
+PASS: gdb.base/radix.exp: print -101; expect -257; input radix 16
+PASS: gdb.base/radix.exp: print 10101; expect 65793; input radix 16
+PASS: gdb.base/radix.exp: initialize radix, output radix 8
+PASS: gdb.base/radix.exp: set output-radix 8
+PASS: gdb.base/radix.exp: show radix, output radix 8
+PASS: gdb.base/radix.exp: print 010; expect 010; output radix 8
+PASS: gdb.base/radix.exp: print 0xf; expect 17; output radix 8
+PASS: gdb.base/radix.exp: print 10; expect 12; output radix 8
+PASS: gdb.base/radix.exp: print 100; expect 144; output radix 8
+KFAIL: gdb.base/radix.exp: print 20.; expect 24; output radix 8 (PRMS: gdb/1715)
+PASS: gdb.base/radix.exp: print (int) 20.; expect 24; output radix 8
+PASS: gdb.base/radix.exp: initialize radix, output radix 10
+PASS: gdb.base/radix.exp: set output-radix 10
+PASS: gdb.base/radix.exp: show radix, output radix 10
+PASS: gdb.base/radix.exp: print 010; expect 8; output radix 10
+PASS: gdb.base/radix.exp: print 0xf; expect 15; output radix 10
+PASS: gdb.base/radix.exp: print 10; expect 10; output radix 10
+PASS: gdb.base/radix.exp: print 100; expect 100; output radix 10
+PASS: gdb.base/radix.exp: print 20.; expect 20; output radix 10
+PASS: gdb.base/radix.exp: print (int) 20.; expect 20; output radix 10
+PASS: gdb.base/radix.exp: initialize radix, output radix 16
+PASS: gdb.base/radix.exp: set output-radix 16
+PASS: gdb.base/radix.exp: show radix, output radix 16
+PASS: gdb.base/radix.exp: print 010; expect 8; output radix 16
+PASS: gdb.base/radix.exp: print 0xf; expect f; output radix 16
+PASS: gdb.base/radix.exp: print 10; expect a; output radix 16
+PASS: gdb.base/radix.exp: print 100; expect 64; output radix 16
+KFAIL: gdb.base/radix.exp: print 20.; expect 14; output radix 16 (PRMS: gdb/1715)
+PASS: gdb.base/radix.exp: print (int) 20.; expect 14; output radix 16
+PASS: gdb.base/radix.exp: Reset radices
+PASS: gdb.base/radix.exp: Reject input-radix 0
+PASS: gdb.base/radix.exp: Input radix unchanged after rejecting 0
+PASS: gdb.base/radix.exp: Reject input-radix 1
+PASS: gdb.base/radix.exp: Input radix unchanged after rejecting 1
+PASS: gdb.base/radix.exp: Reject output-radix 0
+PASS: gdb.base/radix.exp: Output radix unchanged after rejecting 0
+PASS: gdb.base/radix.exp: Reject output-radix 1
+PASS: gdb.base/radix.exp: Output radix unchanged after rejecting 1
+PASS: gdb.base/radix.exp: set radix 7 rejected
+PASS: gdb.base/radix.exp: Output radix unchanged after rejection through set radix command
+Running ./gdb.base/randomize.exp ...
+UNTESTED: gdb.base/randomize.exp: Disabling randomization is not supported on this Linux GDB
+Running ./gdb.base/random-signal.exp ...
+PASS: gdb.base/random-signal.exp: set can-use-hw-watchpoints 0
+PASS: gdb.base/random-signal.exp: watch v
+PASS: gdb.base/random-signal.exp: continue
+FAIL: gdb.base/random-signal.exp: stop with control-c
+Running ./gdb.base/readline-ask.exp ...
+PASS: gdb.base/readline-ask.exp: set width 50
+PASS: gdb.base/readline-ask.exp: set height 3
+PASS: gdb.base/readline-ask.exp: bell for more message
+FAIL: gdb.base/readline-ask.exp: more message for 01 and 02
+FAIL: gdb.base/readline-ask.exp: more message for 03
+FAIL: gdb.base/readline-ask.exp: more finish for 04
+ERROR: Undefined command "foo".
+UNRESOLVED: gdb.base/readline-ask.exp: abort more message
+PASS: gdb.base/readline-ask.exp: bell for ask message
+FAIL: gdb.base/readline-ask.exp: ask message
+Running ./gdb.base/readline.exp ...
+PASS: gdb.base/readline.exp: Simple operate-and-get-next - send p 1
+PASS: gdb.base/readline.exp: Simple operate-and-get-next - send p 2
+PASS: gdb.base/readline.exp: Simple operate-and-get-next - send p 3
+PASS: gdb.base/readline.exp: Simple operate-and-get-next - C-p to p 3
+PASS: gdb.base/readline.exp: Simple operate-and-get-next - C-p to p 2
+PASS: gdb.base/readline.exp: Simple operate-and-get-next - C-p to p 1
+PASS: gdb.base/readline.exp: Simple operate-and-get-next - C-o for p 1
+PASS: gdb.base/readline.exp: Simple operate-and-get-next - C-o for p 2
+PASS: gdb.base/readline.exp: Simple operate-and-get-next - C-o for p 3
+PASS: gdb.base/readline.exp: Simple operate-and-get-next - final prompt
+PASS: gdb.base/readline.exp: operate-and-get-next with secondary prompt - send if 1 > 0
+PASS: gdb.base/readline.exp: operate-and-get-next with secondary prompt - send p 5
+PASS: gdb.base/readline.exp: operate-and-get-next with secondary prompt - send end
+PASS: gdb.base/readline.exp: operate-and-get-next with secondary prompt - C-p to end
+PASS: gdb.base/readline.exp: operate-and-get-next with secondary prompt - C-p to p 5
+PASS: gdb.base/readline.exp: operate-and-get-next with secondary prompt - C-p to if 1 > 0
+PASS: gdb.base/readline.exp: operate-and-get-next with secondary prompt - C-o for if 1 > 0
+PASS: gdb.base/readline.exp: operate-and-get-next with secondary prompt - C-o for p 5
+PASS: gdb.base/readline.exp: operate-and-get-next with secondary prompt - C-o for end
+PASS: gdb.base/readline.exp: operate-and-get-next with secondary prompt - final prompt
+PASS: gdb.base/readline.exp: print 42
+PASS: gdb.base/readline.exp: arrow keys with secondary prompt
+PASS: gdb.base/readline.exp: Simple operate-and-get-next - send p 7
+PASS: gdb.base/readline.exp: Simple operate-and-get-next - send p 8
+PASS: gdb.base/readline.exp: Simple operate-and-get-next - send p 9
+PASS: gdb.base/readline.exp: Simple operate-and-get-next - C-p to p 9
+PASS: gdb.base/readline.exp: Simple operate-and-get-next - C-p to p 8
+PASS: gdb.base/readline.exp: Simple operate-and-get-next - C-p to p 7
+PASS: gdb.base/readline.exp: Simple operate-and-get-next - C-o for p 7
+PASS: gdb.base/readline.exp: Simple operate-and-get-next - C-o for p 8
+PASS: gdb.base/readline.exp: Simple operate-and-get-next - C-o for p 9
+PASS: gdb.base/readline.exp: Simple operate-and-get-next - final prompt
+Running ./gdb.base/realname-expand.exp ...
+PASS: gdb.base/realname-expand.exp: set basenames-may-differ on
+PASS: gdb.base/realname-expand.exp: rbreak realname-expand-real.c:func
+PASS: gdb.base/realname-expand.exp: set basenames-may-differ on
+PASS: gdb.base/realname-expand.exp: break realname-expand-real.c:func
+Running ./gdb.base/recpar.exp ...
+PASS: gdb.base/recpar.exp: break recpar.c:26 if n == 3
+PASS: gdb.base/recpar.exp: continue
+PASS: gdb.base/recpar.exp: backtrace
+PASS: gdb.base/recpar.exp: frame 2
+PASS: gdb.base/recpar.exp: print foo::val
+Running ./gdb.base/recurse.exp ...
+PASS: gdb.base/recurse.exp: next over b = 0 in first instance
+PASS: gdb.base/recurse.exp: set first instance watchpoint
+PASS: gdb.base/recurse.exp: continue to first instance watchpoint, first time
+PASS: gdb.base/recurse.exp: continue to recurse (a = 9)
+PASS: gdb.base/recurse.exp: continue to recurse (a = 8)
+PASS: gdb.base/recurse.exp: continue to recurse (a = 7)
+PASS: gdb.base/recurse.exp: continue to recurse (a = 6)
+PASS: gdb.base/recurse.exp: continue to recurse (a = 5)
+PASS: gdb.base/recurse.exp: next over b = 0 in second instance
+PASS: gdb.base/recurse.exp: set second instance watchpoint
+PASS: gdb.base/recurse.exp: continue to second instance watchpoint, first time
+PASS: gdb.base/recurse.exp: continue to recurse (a = 4)
+PASS: gdb.base/recurse.exp: continue to recurse (a = 3)
+PASS: gdb.base/recurse.exp: continue to recurse (a = 2)
+PASS: gdb.base/recurse.exp: continue to recurse (a = 1)
+PASS: gdb.base/recurse.exp: continue to second instance watchpoint, second time
+PASS: gdb.base/recurse.exp: second instance watchpoint deleted when leaving scope
+PASS: gdb.base/recurse.exp: continue to first instance watchpoint, second time
+PASS: gdb.base/recurse.exp: first instance watchpoint deleted when leaving scope
+Running ./gdb.base/relational.exp ...
+PASS: gdb.base/relational.exp: set variable x=14
+PASS: gdb.base/relational.exp: set variable y=2
+PASS: gdb.base/relational.exp: set variable z=2
+PASS: gdb.base/relational.exp: set variable w=3
+PASS: gdb.base/relational.exp: print value of x
+PASS: gdb.base/relational.exp: print value of y
+PASS: gdb.base/relational.exp: print value of z
+PASS: gdb.base/relational.exp: print value of w
+PASS: gdb.base/relational.exp: print value of x<y
+PASS: gdb.base/relational.exp: print value of x<=y
+PASS: gdb.base/relational.exp: print value of x>y
+PASS: gdb.base/relational.exp: print value of x>=y
+PASS: gdb.base/relational.exp: print value of x==y
+PASS: gdb.base/relational.exp: print value of x!=y
+PASS: gdb.base/relational.exp: set variable x
+PASS: gdb.base/relational.exp: set variable y
+PASS: gdb.base/relational.exp: set variable z
+PASS: gdb.base/relational.exp: print value of x<y<z
+PASS: gdb.base/relational.exp: print value of x<=y<=z
+PASS: gdb.base/relational.exp: print value of x>y>z
+PASS: gdb.base/relational.exp: print value of x>=y>=z
+PASS: gdb.base/relational.exp: set variable x
+PASS: gdb.base/relational.exp: set variable y
+PASS: gdb.base/relational.exp: set variable z
+PASS: gdb.base/relational.exp: print value of x==y==z
+PASS: gdb.base/relational.exp: set variable z
+PASS: gdb.base/relational.exp: print value of x!=y!=z
+PASS: gdb.base/relational.exp: set variable x
+PASS: gdb.base/relational.exp: set variable y
+PASS: gdb.base/relational.exp: set variable z
+PASS: gdb.base/relational.exp: print value of x<y==z
+PASS: gdb.base/relational.exp: print value of x<y!=z
+PASS: gdb.base/relational.exp: set variable x
+PASS: gdb.base/relational.exp: set variable y
+PASS: gdb.base/relational.exp: set variable z
+PASS: gdb.base/relational.exp: print value of x<y<=z
+PASS: gdb.base/relational.exp: print value of x<y>=z
+PASS: gdb.base/relational.exp: set variable z
+PASS: gdb.base/relational.exp: print value of x<y>z
+PASS: gdb.base/relational.exp: set variable x
+PASS: gdb.base/relational.exp: print value of x>y>=z
+PASS: gdb.base/relational.exp: set variable z
+PASS: gdb.base/relational.exp: print value of x>y==z
+PASS: gdb.base/relational.exp: set variable x
+PASS: gdb.base/relational.exp: set variable z
+PASS: gdb.base/relational.exp: print value of x>y!=z
+PASS: gdb.base/relational.exp: set x to 4
+PASS: gdb.base/relational.exp: print value of x>y<=z
+PASS: gdb.base/relational.exp: print value of x>=y==z
+PASS: gdb.base/relational.exp: set variable x
+PASS: gdb.base/relational.exp: print value of x>=y!=z
+PASS: gdb.base/relational.exp: set variable x
+PASS: gdb.base/relational.exp: set variable z
+PASS: gdb.base/relational.exp: print value of x>=y<=z
+PASS: gdb.base/relational.exp: print value of x<=y==z
+PASS: gdb.base/relational.exp: set variable x
+PASS: gdb.base/relational.exp: print value of x<=y!=z
+PASS: gdb.base/relational.exp: print value of x==y!=z
+PASS: gdb.base/relational.exp: set variable z
+PASS: gdb.base/relational.exp: print value of x>=(y<z)
+PASS: gdb.base/relational.exp: print value of x>=(y!=z)
+PASS: gdb.base/relational.exp: print value of x==(y==z)
+PASS: gdb.base/relational.exp: set variable x
+PASS: gdb.base/relational.exp: set variable z
+PASS: gdb.base/relational.exp: print value of (x==y)<z
+Running ./gdb.base/relativedebug.exp ...
+PASS: gdb.base/relativedebug.exp: continue
+PASS: gdb.base/relativedebug.exp: pause found in backtrace
+Running ./gdb.base/relocate.exp ...
+PASS: gdb.base/relocate.exp: add-symbol-file relocate.o 0
+PASS: gdb.base/relocate.exp: get address of static_foo
+PASS: gdb.base/relocate.exp: get address of static_bar
+PASS: gdb.base/relocate.exp: static variables have different addresses
+PASS: gdb.base/relocate.exp: get address of global_foo
+PASS: gdb.base/relocate.exp: get address of global_bar
+PASS: gdb.base/relocate.exp: global variables have different addresses
+PASS: gdb.base/relocate.exp: get address of function_foo
+PASS: gdb.base/relocate.exp: get address of function_bar
+PASS: gdb.base/relocate.exp: functions have different addresses
+PASS: gdb.base/relocate.exp: set $offset = 0x10000
+PASS: gdb.base/relocate.exp: add-symbol-file relocate.o $offset
+PASS: gdb.base/relocate.exp: get address of function_foo
+PASS: gdb.base/relocate.exp: function foo has a different address
+PASS: gdb.base/relocate.exp: print static_foo
+PASS: gdb.base/relocate.exp: print static_bar
+PASS: gdb.base/relocate.exp: print global_foo
+PASS: gdb.base/relocate.exp: print global_bar
+Running ./gdb.base/remote.exp ...
+PASS: gdb.base/remote.exp: write-packet default
+PASS: gdb.base/remote.exp: set write-packet - NULL
+PASS: gdb.base/remote.exp: set remote memory-write-packet-size 20
+PASS: gdb.base/remote.exp: set write-packet - small
+PASS: gdb.base/remote.exp: set remote memory-write-packet-size 1
+PASS: gdb.base/remote.exp: set write-packet - very-small
+PASS: gdb.base/remote.exp: timed download `remote' - limit, 398 - set packet size
+PASS: gdb.base/remote.exp: timed download `remote' - limit, 398
+PASS: gdb.base/remote.exp: timed download `remote' - limit, 400 - set packet size
+PASS: gdb.base/remote.exp: timed download `remote' - limit, 400
+PASS: gdb.base/remote.exp: timed download `remote' - fixed, 0 - set packet size
+PASS: gdb.base/remote.exp: timed download `remote' - fixed, 0 - set write size class
+PASS: gdb.base/remote.exp: timed download `remote' - fixed, 16385 - set packet size
+PASS: gdb.base/remote.exp: timed download `remote' - limit, 0 - set packet size
+PASS: gdb.base/remote.exp: timed download `remote' - limit, 0
+PASS: gdb.base/remote.exp: get integer valueof "sizeof (random_data)" (49152)
+PASS: gdb.base/remote.exp: x/8ub random_data
+PASS: gdb.base/remote.exp: x/8ub random_data + 400 - 4
+PASS: gdb.base/remote.exp: x/8ub random_data + 16384 - 4
+PASS: gdb.base/remote.exp: set remote memory-read-packet-size 16
+PASS: gdb.base/remote.exp: show remote memory-read-packet-size
+PASS: gdb.base/remote.exp: x/17ub random_data
+PASS: gdb.base/remote.exp: set remote hardware-watchpoint-limit -1
+PASS: gdb.base/remote.exp: set remote hardware-breakpoint-limit -1
+PASS: gdb.base/remote.exp: set remote hardware-watchpoint-limit 2147483647
+PASS: gdb.base/remote.exp: set remote hardware-breakpoint-limit 2147483647
+Running ./gdb.base/remotetimeout.exp ...
+Running ./gdb.base/reread.exp ...
+PASS: gdb.base/reread.exp: breakpoint foo in first file
+PASS: gdb.base/reread.exp: run to foo()
+UNSUPPORTED: gdb.base/reread.exp: run to foo() second time
+UNSUPPORTED: gdb.base/reread.exp: second pass: GDB should check for changes before running
+Running ./gdb.base/restore.exp ...
+PASS: gdb.base/restore.exp: tbreak caller1
+PASS: gdb.base/restore.exp: run to caller1
+PASS: gdb.base/restore.exp: caller1 calls callee1; tbreak callee
+PASS: gdb.base/restore.exp: caller1 calls callee1; continue to callee
+PASS: gdb.base/restore.exp: caller1 calls callee1; return callee now
+PASS: gdb.base/restore.exp: caller1 calls callee1; return restored l1 to 32492
+PASS: gdb.base/restore.exp: caller1 calls callee2; tbreak callee
+PASS: gdb.base/restore.exp: caller1 calls callee2; continue to callee
+PASS: gdb.base/restore.exp: caller1 calls callee2; return callee now
+PASS: gdb.base/restore.exp: caller1 calls callee2; return restored l1 to 32492
+PASS: gdb.base/restore.exp: caller1 calls callee3; tbreak callee
+PASS: gdb.base/restore.exp: caller1 calls callee3; continue to callee
+PASS: gdb.base/restore.exp: caller1 calls callee3; return callee now
+PASS: gdb.base/restore.exp: caller1 calls callee3; return restored l1 to 32492
+PASS: gdb.base/restore.exp: caller1 calls callee4; tbreak callee
+PASS: gdb.base/restore.exp: caller1 calls callee4; continue to callee
+PASS: gdb.base/restore.exp: caller1 calls callee4; return callee now
+PASS: gdb.base/restore.exp: caller1 calls callee4; return restored l1 to 32492
+PASS: gdb.base/restore.exp: caller1 calls callee5; tbreak callee
+PASS: gdb.base/restore.exp: caller1 calls callee5; continue to callee
+PASS: gdb.base/restore.exp: caller1 calls callee5; return callee now
+PASS: gdb.base/restore.exp: caller1 calls callee5; return restored l1 to 32492
+PASS: gdb.base/restore.exp: tbreak caller2
+PASS: gdb.base/restore.exp: run to caller2
+PASS: gdb.base/restore.exp: caller2 calls callee1; tbreak callee
+PASS: gdb.base/restore.exp: caller2 calls callee1; continue to callee
+PASS: gdb.base/restore.exp: caller2 calls callee1; return callee now
+FAIL: gdb.base/restore.exp: caller2 calls callee1; return restored l1 to 32492
+PASS: gdb.base/restore.exp: caller2 calls callee1; return restored l2 to 32493
+PASS: gdb.base/restore.exp: caller2 calls callee2; tbreak callee
+PASS: gdb.base/restore.exp: caller2 calls callee2; continue to callee
+PASS: gdb.base/restore.exp: caller2 calls callee2; return callee now
+FAIL: gdb.base/restore.exp: caller2 calls callee2; return restored l1 to 32492
+PASS: gdb.base/restore.exp: caller2 calls callee2; return restored l2 to 32493
+PASS: gdb.base/restore.exp: caller2 calls callee3; tbreak callee
+PASS: gdb.base/restore.exp: caller2 calls callee3; continue to callee
+PASS: gdb.base/restore.exp: caller2 calls callee3; return callee now
+FAIL: gdb.base/restore.exp: caller2 calls callee3; return restored l1 to 32492
+PASS: gdb.base/restore.exp: caller2 calls callee3; return restored l2 to 32493
+PASS: gdb.base/restore.exp: caller2 calls callee4; tbreak callee
+PASS: gdb.base/restore.exp: caller2 calls callee4; continue to callee
+PASS: gdb.base/restore.exp: caller2 calls callee4; return callee now
+FAIL: gdb.base/restore.exp: caller2 calls callee4; return restored l1 to 32492
+PASS: gdb.base/restore.exp: caller2 calls callee4; return restored l2 to 32493
+PASS: gdb.base/restore.exp: caller2 calls callee5; tbreak callee
+PASS: gdb.base/restore.exp: caller2 calls callee5; continue to callee
+PASS: gdb.base/restore.exp: caller2 calls callee5; return callee now
+FAIL: gdb.base/restore.exp: caller2 calls callee5; return restored l1 to 32492
+PASS: gdb.base/restore.exp: caller2 calls callee5; return restored l2 to 32493
+PASS: gdb.base/restore.exp: tbreak caller3
+PASS: gdb.base/restore.exp: run to caller3
+PASS: gdb.base/restore.exp: caller3 calls callee1; tbreak callee
+PASS: gdb.base/restore.exp: caller3 calls callee1; continue to callee
+PASS: gdb.base/restore.exp: caller3 calls callee1; return callee now
+FAIL: gdb.base/restore.exp: caller3 calls callee1; return restored l1 to 32492
+FAIL: gdb.base/restore.exp: caller3 calls callee1; return restored l2 to 32493
+PASS: gdb.base/restore.exp: caller3 calls callee1; return restored l3 to 32494
+PASS: gdb.base/restore.exp: caller3 calls callee2; tbreak callee
+PASS: gdb.base/restore.exp: caller3 calls callee2; continue to callee
+PASS: gdb.base/restore.exp: caller3 calls callee2; return callee now
+FAIL: gdb.base/restore.exp: caller3 calls callee2; return restored l1 to 32492
+FAIL: gdb.base/restore.exp: caller3 calls callee2; return restored l2 to 32493
+PASS: gdb.base/restore.exp: caller3 calls callee2; return restored l3 to 32494
+PASS: gdb.base/restore.exp: caller3 calls callee3; tbreak callee
+PASS: gdb.base/restore.exp: caller3 calls callee3; continue to callee
+PASS: gdb.base/restore.exp: caller3 calls callee3; return callee now
+FAIL: gdb.base/restore.exp: caller3 calls callee3; return restored l1 to 32492
+FAIL: gdb.base/restore.exp: caller3 calls callee3; return restored l2 to 32493
+PASS: gdb.base/restore.exp: caller3 calls callee3; return restored l3 to 32494
+PASS: gdb.base/restore.exp: caller3 calls callee4; tbreak callee
+PASS: gdb.base/restore.exp: caller3 calls callee4; continue to callee
+PASS: gdb.base/restore.exp: caller3 calls callee4; return callee now
+FAIL: gdb.base/restore.exp: caller3 calls callee4; return restored l1 to 32492
+FAIL: gdb.base/restore.exp: caller3 calls callee4; return restored l2 to 32493
+PASS: gdb.base/restore.exp: caller3 calls callee4; return restored l3 to 32494
+PASS: gdb.base/restore.exp: caller3 calls callee5; tbreak callee
+PASS: gdb.base/restore.exp: caller3 calls callee5; continue to callee
+PASS: gdb.base/restore.exp: caller3 calls callee5; return callee now
+FAIL: gdb.base/restore.exp: caller3 calls callee5; return restored l1 to 32492
+FAIL: gdb.base/restore.exp: caller3 calls callee5; return restored l2 to 32493
+PASS: gdb.base/restore.exp: caller3 calls callee5; return restored l3 to 32494
+PASS: gdb.base/restore.exp: tbreak caller4
+PASS: gdb.base/restore.exp: run to caller4
+PASS: gdb.base/restore.exp: caller4 calls callee1; tbreak callee
+PASS: gdb.base/restore.exp: caller4 calls callee1; continue to callee
+PASS: gdb.base/restore.exp: caller4 calls callee1; return callee now
+FAIL: gdb.base/restore.exp: caller4 calls callee1; return restored l1 to 32492
+FAIL: gdb.base/restore.exp: caller4 calls callee1; return restored l2 to 32493
+FAIL: gdb.base/restore.exp: caller4 calls callee1; return restored l3 to 32494
+PASS: gdb.base/restore.exp: caller4 calls callee1; return restored l4 to 32495
+PASS: gdb.base/restore.exp: caller4 calls callee2; tbreak callee
+PASS: gdb.base/restore.exp: caller4 calls callee2; continue to callee
+PASS: gdb.base/restore.exp: caller4 calls callee2; return callee now
+FAIL: gdb.base/restore.exp: caller4 calls callee2; return restored l1 to 32492
+FAIL: gdb.base/restore.exp: caller4 calls callee2; return restored l2 to 32493
+FAIL: gdb.base/restore.exp: caller4 calls callee2; return restored l3 to 32494
+PASS: gdb.base/restore.exp: caller4 calls callee2; return restored l4 to 32495
+PASS: gdb.base/restore.exp: caller4 calls callee3; tbreak callee
+PASS: gdb.base/restore.exp: caller4 calls callee3; continue to callee
+PASS: gdb.base/restore.exp: caller4 calls callee3; return callee now
+FAIL: gdb.base/restore.exp: caller4 calls callee3; return restored l1 to 32492
+FAIL: gdb.base/restore.exp: caller4 calls callee3; return restored l2 to 32493
+FAIL: gdb.base/restore.exp: caller4 calls callee3; return restored l3 to 32494
+PASS: gdb.base/restore.exp: caller4 calls callee3; return restored l4 to 32495
+PASS: gdb.base/restore.exp: caller4 calls callee4; tbreak callee
+PASS: gdb.base/restore.exp: caller4 calls callee4; continue to callee
+PASS: gdb.base/restore.exp: caller4 calls callee4; return callee now
+FAIL: gdb.base/restore.exp: caller4 calls callee4; return restored l1 to 32492
+FAIL: gdb.base/restore.exp: caller4 calls callee4; return restored l2 to 32493
+FAIL: gdb.base/restore.exp: caller4 calls callee4; return restored l3 to 32494
+PASS: gdb.base/restore.exp: caller4 calls callee4; return restored l4 to 32495
+PASS: gdb.base/restore.exp: caller4 calls callee5; tbreak callee
+PASS: gdb.base/restore.exp: caller4 calls callee5; continue to callee
+PASS: gdb.base/restore.exp: caller4 calls callee5; return callee now
+FAIL: gdb.base/restore.exp: caller4 calls callee5; return restored l1 to 32492
+FAIL: gdb.base/restore.exp: caller4 calls callee5; return restored l2 to 32493
+FAIL: gdb.base/restore.exp: caller4 calls callee5; return restored l3 to 32494
+PASS: gdb.base/restore.exp: caller4 calls callee5; return restored l4 to 32495
+PASS: gdb.base/restore.exp: tbreak caller5
+PASS: gdb.base/restore.exp: run to caller5
+PASS: gdb.base/restore.exp: caller5 calls callee1; tbreak callee
+PASS: gdb.base/restore.exp: caller5 calls callee1; continue to callee
+PASS: gdb.base/restore.exp: caller5 calls callee1; return callee now
+FAIL: gdb.base/restore.exp: caller5 calls callee1; return restored l1 to 32492
+FAIL: gdb.base/restore.exp: caller5 calls callee1; return restored l2 to 32493
+FAIL: gdb.base/restore.exp: caller5 calls callee1; return restored l3 to 32494
+FAIL: gdb.base/restore.exp: caller5 calls callee1; return restored l4 to 32495
+PASS: gdb.base/restore.exp: caller5 calls callee1; return restored l5 to 32496
+PASS: gdb.base/restore.exp: caller5 calls callee2; tbreak callee
+PASS: gdb.base/restore.exp: caller5 calls callee2; continue to callee
+PASS: gdb.base/restore.exp: caller5 calls callee2; return callee now
+FAIL: gdb.base/restore.exp: caller5 calls callee2; return restored l1 to 32492
+FAIL: gdb.base/restore.exp: caller5 calls callee2; return restored l2 to 32493
+FAIL: gdb.base/restore.exp: caller5 calls callee2; return restored l3 to 32494
+FAIL: gdb.base/restore.exp: caller5 calls callee2; return restored l4 to 32495
+PASS: gdb.base/restore.exp: caller5 calls callee2; return restored l5 to 32496
+PASS: gdb.base/restore.exp: caller5 calls callee3; tbreak callee
+PASS: gdb.base/restore.exp: caller5 calls callee3; continue to callee
+PASS: gdb.base/restore.exp: caller5 calls callee3; return callee now
+FAIL: gdb.base/restore.exp: caller5 calls callee3; return restored l1 to 32492
+FAIL: gdb.base/restore.exp: caller5 calls callee3; return restored l2 to 32493
+FAIL: gdb.base/restore.exp: caller5 calls callee3; return restored l3 to 32494
+FAIL: gdb.base/restore.exp: caller5 calls callee3; return restored l4 to 32495
+PASS: gdb.base/restore.exp: caller5 calls callee3; return restored l5 to 32496
+PASS: gdb.base/restore.exp: caller5 calls callee4; tbreak callee
+PASS: gdb.base/restore.exp: caller5 calls callee4; continue to callee
+PASS: gdb.base/restore.exp: caller5 calls callee4; return callee now
+FAIL: gdb.base/restore.exp: caller5 calls callee4; return restored l1 to 32492
+FAIL: gdb.base/restore.exp: caller5 calls callee4; return restored l2 to 32493
+FAIL: gdb.base/restore.exp: caller5 calls callee4; return restored l3 to 32494
+FAIL: gdb.base/restore.exp: caller5 calls callee4; return restored l4 to 32495
+PASS: gdb.base/restore.exp: caller5 calls callee4; return restored l5 to 32496
+PASS: gdb.base/restore.exp: caller5 calls callee5; tbreak callee
+PASS: gdb.base/restore.exp: caller5 calls callee5; continue to callee
+PASS: gdb.base/restore.exp: caller5 calls callee5; return callee now
+FAIL: gdb.base/restore.exp: caller5 calls callee5; return restored l1 to 32492
+FAIL: gdb.base/restore.exp: caller5 calls callee5; return restored l2 to 32493
+FAIL: gdb.base/restore.exp: caller5 calls callee5; return restored l3 to 32494
+FAIL: gdb.base/restore.exp: caller5 calls callee5; return restored l4 to 32495
+PASS: gdb.base/restore.exp: caller5 calls callee5; return restored l5 to 32496
+Running ./gdb.base/return2.exp ...
+PASS: gdb.base/return2.exp: set break on void_func
+PASS: gdb.base/return2.exp: continue to void_func
+PASS: gdb.base/return2.exp: return from void_func
+PASS: gdb.base/return2.exp: void function returned successfully
+PASS: gdb.base/return2.exp: set break on char_func
+PASS: gdb.base/return2.exp: continue to char_func
+PASS: gdb.base/return2.exp: return from char_func
+PASS: gdb.base/return2.exp: char value returned successfully
+PASS: gdb.base/return2.exp: validate result value not equal to program return value
+PASS: gdb.base/return2.exp: set break on short_func
+PASS: gdb.base/return2.exp: continue to short_func
+PASS: gdb.base/return2.exp: return from short_func
+PASS: gdb.base/return2.exp: short value returned successfully
+PASS: gdb.base/return2.exp: validate result value not equal to program return value
+PASS: gdb.base/return2.exp: set break on int_func
+PASS: gdb.base/return2.exp: continue to int_func
+PASS: gdb.base/return2.exp: return from int_func
+PASS: gdb.base/return2.exp: int value returned successfully
+PASS: gdb.base/return2.exp: validate result value not equal to program return value
+PASS: gdb.base/return2.exp: set break on long_func
+PASS: gdb.base/return2.exp: continue to long_func
+PASS: gdb.base/return2.exp: return from long_func
+PASS: gdb.base/return2.exp: long value returned successfully
+PASS: gdb.base/return2.exp: validate result value not equal to program return value
+PASS: gdb.base/return2.exp: set break on long_long_func
+PASS: gdb.base/return2.exp: continue to long_long_func
+PASS: gdb.base/return2.exp: return from long_long_func
+PASS: gdb.base/return2.exp: long_long value returned successfully
+PASS: gdb.base/return2.exp: validate result value not equal to program return value
+PASS: gdb.base/return2.exp: set break on float_func
+PASS: gdb.base/return2.exp: continue to float_func
+PASS: gdb.base/return2.exp: return from float_func
+PASS: gdb.base/return2.exp: float value returned successfully
+PASS: gdb.base/return2.exp: validate result value not equal to program return value
+PASS: gdb.base/return2.exp: set break on double_func
+PASS: gdb.base/return2.exp: continue to double_func
+PASS: gdb.base/return2.exp: return from double_func
+PASS: gdb.base/return2.exp: double value returned successfully
+PASS: gdb.base/return2.exp: validate result value not equal to program return value
+Running ./gdb.base/return.exp ...
+PASS: gdb.base/return.exp: simple return
+PASS: gdb.base/return.exp: break func2
+PASS: gdb.base/return.exp: break func3
+PASS: gdb.base/return.exp: continue to return of -5
+PASS: gdb.base/return.exp: next over call to func2
+PASS: gdb.base/return.exp: correct value returned (integer test)
+PASS: gdb.base/return.exp: continue to return of -5.0
+PASS: gdb.base/return.exp: next over call to func3
+PASS: gdb.base/return.exp: correct value returned double test (known problem with sparc solaris)
+Running ./gdb.base/return-nodebug.exp ...
+PASS: gdb.base/return-nodebug.exp: signed-char: return from function with no debug info without a cast
+PASS: gdb.base/return-nodebug.exp: signed-char: return from function with no debug info with a cast
+PASS: gdb.base/return-nodebug.exp: signed-char: advance to marker
+PASS: gdb.base/return-nodebug.exp: signed-char: full width of the returned result
+PASS: gdb.base/return-nodebug.exp: short: return from function with no debug info without a cast
+PASS: gdb.base/return-nodebug.exp: short: return from function with no debug info with a cast
+PASS: gdb.base/return-nodebug.exp: short: advance to marker
+PASS: gdb.base/return-nodebug.exp: short: full width of the returned result
+PASS: gdb.base/return-nodebug.exp: int: return from function with no debug info without a cast
+PASS: gdb.base/return-nodebug.exp: int: return from function with no debug info with a cast
+PASS: gdb.base/return-nodebug.exp: int: advance to marker
+PASS: gdb.base/return-nodebug.exp: int: full width of the returned result
+PASS: gdb.base/return-nodebug.exp: long: return from function with no debug info without a cast
+PASS: gdb.base/return-nodebug.exp: long: return from function with no debug info with a cast
+PASS: gdb.base/return-nodebug.exp: long: advance to marker
+PASS: gdb.base/return-nodebug.exp: long: full width of the returned result
+PASS: gdb.base/return-nodebug.exp: long-long: return from function with no debug info without a cast
+PASS: gdb.base/return-nodebug.exp: long-long: return from function with no debug info with a cast
+PASS: gdb.base/return-nodebug.exp: long-long: advance to marker
+PASS: gdb.base/return-nodebug.exp: long-long: full width of the returned result
+PASS: gdb.base/return-nodebug.exp: float: return from function with no debug info without a cast
+PASS: gdb.base/return-nodebug.exp: float: return from function with no debug info with a cast
+PASS: gdb.base/return-nodebug.exp: float: advance to marker
+PASS: gdb.base/return-nodebug.exp: float: full width of the returned result
+PASS: gdb.base/return-nodebug.exp: double: return from function with no debug info without a cast
+PASS: gdb.base/return-nodebug.exp: double: return from function with no debug info with a cast
+PASS: gdb.base/return-nodebug.exp: double: advance to marker
+PASS: gdb.base/return-nodebug.exp: double: full width of the returned result
+Running ./gdb.base/save-bp.exp ...
+PASS: gdb.base/save-bp.exp: add breakpoint commands
+PASS: gdb.base/save-bp.exp: dprintf save-bp.c:33,"At foo entry\n"
+PASS: gdb.base/save-bp.exp: save breakpoint bps
+PASS: gdb.base/save-bp.exp: source bps
+PASS: gdb.base/save-bp.exp: info break
+Running ./gdb.base/savedregs.exp ...
+PASS: gdb.base/savedregs.exp: advance thrower
+PASS: gdb.base/savedregs.exp: Get main info frame
+PASS: gdb.base/savedregs.exp: handle SIGSEGV pass print nostop
+PASS: gdb.base/savedregs.exp: handle SIGILL pass print nostop
+PASS: gdb.base/savedregs.exp: advance catcher
+PASS: gdb.base/savedregs.exp: Get sigtramp info frame
+PASS: gdb.base/savedregs.exp: Get thrower info frame
+PASS: gdb.base/savedregs.exp: Check main info frame; stack contains catcher sigtramp thrower main
+PASS: gdb.base/savedregs.exp: break caller
+PASS: gdb.base/savedregs.exp: call caller (1,2,3,4,5,6,7,8)
+PASS: gdb.base/savedregs.exp: Get dummy info frame
+PASS: gdb.base/savedregs.exp: Get catcher info frame
+PASS: gdb.base/savedregs.exp: Check sigtramp info frame; stack contains caller dummy catcher sigtramp thrower main
+PASS: gdb.base/savedregs.exp: Check thrower info frame; stack contains caller dummy catcher sigtramp thrower main
+PASS: gdb.base/savedregs.exp: Check main info frame; stack contains caller dummy catcher sigtramp thrower main
+PASS: gdb.base/savedregs.exp: advance callee
+PASS: gdb.base/savedregs.exp: Get caller info frame
+PASS: gdb.base/savedregs.exp: Check dummy info frame; stack contains callee caller dummy catcher sigtramp thrower main
+PASS: gdb.base/savedregs.exp: Check catcher info frame; stack contains callee caller dummy catcher sigtramp thrower main
+PASS: gdb.base/savedregs.exp: Check sigtramp info frame; stack contains callee caller dummy catcher sigtramp thrower main
+PASS: gdb.base/savedregs.exp: Check thrower info frame; stack contains callee caller dummy catcher sigtramp thrower main
+PASS: gdb.base/savedregs.exp: Check main info frame; stack contains callee caller dummy catcher sigtramp thrower main
+Running ./gdb.base/scope.exp ...
+PASS: gdb.base/scope.exp: print 'scope0.c'::filelocal_ro
+UNSUPPORTED: gdb.base/scope.exp: print 'scope0.c'::filelocal_bss before run
+PASS: gdb.base/scope.exp: print 'scope0.c'::filelocal before run
+PASS: gdb.base/scope.exp: next over init0() in main
+PASS: gdb.base/scope.exp: print filelocal
+PASS: gdb.base/scope.exp: print 'scope0.c'::filelocal at main
+PASS: gdb.base/scope.exp: print filelocal_bss
+PASS: gdb.base/scope.exp: print 'scope0.c'::filelocal_bss in test_at_main
+PASS: gdb.base/scope.exp: print filelocal_ro in test_at_main
+PASS: gdb.base/scope.exp: print 'scope0.c'::filelocal_ro
+PASS: gdb.base/scope.exp: print 'scope1.c'::filelocal
+PASS: gdb.base/scope.exp: print 'scope1.c'::filelocal_bss
+PASS: gdb.base/scope.exp: print 'scope1.c'::filelocal_ro
+PASS: gdb.base/scope.exp: print foo::funclocal
+PASS: gdb.base/scope.exp: print 'scope1.c'::foo::funclocal
+PASS: gdb.base/scope.exp: print foo::funclocal_ro
+PASS: gdb.base/scope.exp: print 'scope1.c'::foo::funclocal_ro
+PASS: gdb.base/scope.exp: print bar::funclocal
+PASS: gdb.base/scope.exp: print 'scope1.c'::bar::funclocal
+PASS: gdb.base/scope.exp: print 'scope0.c'::filelocal at foo
+PASS: gdb.base/scope.exp: print 'scope0.c'::filelocal_bss in test_at_foo
+PASS: gdb.base/scope.exp: print 'scope0.c'::filelocal_ro
+PASS: gdb.base/scope.exp: print filelocal at foo
+PASS: gdb.base/scope.exp: print 'scope1.c'::filelocal at foo
+PASS: gdb.base/scope.exp: print filelocal_bss at foo
+PASS: gdb.base/scope.exp: print 'scope1.c'::filelocal_bss at foo
+PASS: gdb.base/scope.exp: print filelocal_ro at foo
+PASS: gdb.base/scope.exp: print 'scope1.c'::filelocal_ro at foo
+PASS: gdb.base/scope.exp: print funclocal at foo
+PASS: gdb.base/scope.exp: print foo::funclocal at foo
+PASS: gdb.base/scope.exp: print 'scope1.c'::foo::funclocal at foo
+PASS: gdb.base/scope.exp: print funclocal_bss at foo
+PASS: gdb.base/scope.exp: print foo::funclocal_bss at foo
+PASS: gdb.base/scope.exp: print 'scope1.c'::foo::funclocal_bss at foo
+PASS: gdb.base/scope.exp: print funclocal_ro at foo
+PASS: gdb.base/scope.exp: print foo::funclocal_ro at foo
+PASS: gdb.base/scope.exp: print 'scope1.c'::foo::funclocal_ro at foo
+PASS: gdb.base/scope.exp: print bar::funclocal at foo
+PASS: gdb.base/scope.exp: print 'scope1.c'::bar::funclocal at foo
+PASS: gdb.base/scope.exp: print 'scope0.c'::filelocal at bar
+PASS: gdb.base/scope.exp: print 'scope0.c'::filelocal_bss in test_at_bar
+PASS: gdb.base/scope.exp: print 'scope0.c'::filelocal_ro at bar
+PASS: gdb.base/scope.exp: print filelocal at bar
+PASS: gdb.base/scope.exp: print 'scope1.c'::filelocal at bar
+PASS: gdb.base/scope.exp: print filelocal_bss at bar
+PASS: gdb.base/scope.exp: print 'scope1.c'::filelocal_bss at bar
+PASS: gdb.base/scope.exp: print filelocal_ro in test_at_bar
+PASS: gdb.base/scope.exp: print 'scope1.c'::filelocal_ro at bar
+PASS: gdb.base/scope.exp: print foo::funclocal at bar
+PASS: gdb.base/scope.exp: print 'scope1.c'::foo::funclocal at bar
+PASS: gdb.base/scope.exp: print foo::funclocal_bss at bar
+PASS: gdb.base/scope.exp: print 'scope1.c'::foo::funclocal_bss at bar
+PASS: gdb.base/scope.exp: print foo::funclocal_ro at bar
+PASS: gdb.base/scope.exp: print 'scope1.c'::foo::funclocal_ro at bar
+PASS: gdb.base/scope.exp: print funclocal at bar
+PASS: gdb.base/scope.exp: print bar::funclocal at bar
+PASS: gdb.base/scope.exp: print 'scope1.c'::bar::funclocal at bar
+PASS: gdb.base/scope.exp: print funclocal_bss at bar
+PASS: gdb.base/scope.exp: print bar::funclocal_bss at bar
+PASS: gdb.base/scope.exp: print 'scope1.c'::bar::funclocal_bss at bar
+PASS: gdb.base/scope.exp: continue to marker2
+PASS: gdb.base/scope.exp: up from marker2 in scopes.exp
+PASS: gdb.base/scope.exp: print localval, outer scope
+PASS: gdb.base/scope.exp: print localval1, outer scope
+PASS: gdb.base/scope.exp: print localval2, outer scope
+PASS: gdb.base/scope.exp: print localval3, outer scope
+PASS: gdb.base/scope.exp: continue to marker3 in scope.exp
+PASS: gdb.base/scope.exp: up from marker3 in scope.exp
+PASS: gdb.base/scope.exp: print localval, first nested scope
+PASS: gdb.base/scope.exp: print localval1, first nested scope
+PASS: gdb.base/scope.exp: print localval2, first nested scope
+PASS: gdb.base/scope.exp: print localval3, first nested scope
+PASS: gdb.base/scope.exp: continue to marker4 in scope.exp
+PASS: gdb.base/scope.exp: up from marker4 in scope.exp
+PASS: gdb.base/scope.exp: print localval, innermost scope
+PASS: gdb.base/scope.exp: print localval1, innermost scope
+PASS: gdb.base/scope.exp: print localval2, innermost scope
+PASS: gdb.base/scope.exp: print localval3, innermost scope
+PASS: gdb.base/scope.exp: continue to marker1
+PASS: gdb.base/scope.exp: up from marker1 in scope.exp
+PASS: gdb.base/scope.exp: 100 auto variables correctly initialized
+PASS: gdb.base/scope.exp: args in correct order
+Running ./gdb.base/sect-cmd.exp ...
+Running ./gdb.base/sepdebug.exp ...
+PASS: gdb.base/sepdebug.exp: breakpoint function
+PASS: gdb.base/sepdebug.exp: breakpoint quoted function
+PASS: gdb.base/sepdebug.exp: breakpoint function in file
+PASS: gdb.base/sepdebug.exp: use `list' to establish default source file
+PASS: gdb.base/sepdebug.exp: breakpoint line number
+PASS: gdb.base/sepdebug.exp: breakpoint duplicate
+PASS: gdb.base/sepdebug.exp: breakpoint line number in file
+PASS: gdb.base/sepdebug.exp: breakpoint at start of multi line if conditional
+PASS: gdb.base/sepdebug.exp: breakpoint at start of multi line while conditional
+PASS: gdb.base/sepdebug.exp: breakpoint info
+PASS: gdb.base/sepdebug.exp: run until function breakpoint
+PASS: gdb.base/sepdebug.exp: run until breakpoint set at a line number
+PASS: gdb.base/sepdebug.exp: run until file:function(6) breakpoint
+PASS: gdb.base/sepdebug.exp: run until file:function(5) breakpoint
+PASS: gdb.base/sepdebug.exp: run until file:function(4) breakpoint
+PASS: gdb.base/sepdebug.exp: run until file:function(3) breakpoint
+PASS: gdb.base/sepdebug.exp: run until file:function(2) breakpoint
+PASS: gdb.base/sepdebug.exp: run until file:function(1) breakpoint
+PASS: gdb.base/sepdebug.exp: run until quoted breakpoint
+PASS: gdb.base/sepdebug.exp: run until file:linenum breakpoint
+PASS: gdb.base/sepdebug.exp: breakpoint offset +1
+PASS: gdb.base/sepdebug.exp: step onto breakpoint
+PASS: gdb.base/sepdebug.exp: Temporary breakpoint function
+PASS: gdb.base/sepdebug.exp: Temporary breakpoint function in file
+PASS: gdb.base/sepdebug.exp: Temporary breakpoint line number #1
+PASS: gdb.base/sepdebug.exp: Temporary breakpoint line number #2
+PASS: gdb.base/sepdebug.exp: Temporary breakpoint line number in file #1
+PASS: gdb.base/sepdebug.exp: Temporary breakpoint line number in file #2
+PASS: gdb.base/sepdebug.exp: Temporary breakpoint info
+PASS: gdb.base/sepdebug.exp: catch requires an event name
+PASS: gdb.base/sepdebug.exp: set catch fork, never expected to trigger
+PASS: gdb.base/sepdebug.exp: set catch vfork, never expected to trigger
+PASS: gdb.base/sepdebug.exp: set catch exec, never expected to trigger
+PASS: gdb.base/sepdebug.exp: set breakpoint pending off
+PASS: gdb.base/sepdebug.exp: break on non-existent source line
+PASS: gdb.base/sepdebug.exp: until bp_location1
+PASS: gdb.base/sepdebug.exp: break on default location, 1st time
+PASS: gdb.base/sepdebug.exp: break on default location, 2nd time
+PASS: gdb.base/sepdebug.exp: break on default location, 3rd time
+PASS: gdb.base/sepdebug.exp: break on default location, 4th time
+PASS: gdb.base/sepdebug.exp: set to-be-silent break bp_location1
+PASS: gdb.base/sepdebug.exp: set silent break bp_location1
+PASS: gdb.base/sepdebug.exp: info silent break bp_location1
+PASS: gdb.base/sepdebug.exp: hit silent break bp_location1
+PASS: gdb.base/sepdebug.exp: stopped for silent break bp_location1
+PASS: gdb.base/sepdebug.exp: thread-specific breakpoint on non-existent thread disallowed
+PASS: gdb.base/sepdebug.exp: thread-specific breakpoint on bogus thread ID disallowed
+PASS: gdb.base/sepdebug.exp: breakpoint with trailing garbage disallowed
+PASS: gdb.base/sepdebug.exp: step over breakpoint
+PASS: gdb.base/sepdebug.exp: clear line has no breakpoint disallowed
+PASS: gdb.base/sepdebug.exp: clear current line has no breakpoint disallowed
+PASS: gdb.base/sepdebug.exp: break marker3 #1
+PASS: gdb.base/sepdebug.exp: break marker3 #2
+PASS: gdb.base/sepdebug.exp: clear marker3
+PASS: gdb.base/sepdebug.exp: set convenience variable $foo to bp_location11
+PASS: gdb.base/sepdebug.exp: set breakpoint via convenience variable
+PASS: gdb.base/sepdebug.exp: set convenience variable $foo to 81.5
+PASS: gdb.base/sepdebug.exp: set breakpoint via non-integer convenience variable disallowed
+PASS: gdb.base/sepdebug.exp: set breakpoint on to-be-called function
+PASS: gdb.base/sepdebug.exp: hit breakpoint on called function
+PASS: gdb.base/sepdebug.exp: backtrace while in called function
+PASS: gdb.base/sepdebug.exp: finish from called function
+PASS: gdb.base/sepdebug.exp: finish with arguments disallowed
+PASS: gdb.base/sepdebug.exp: finish from outermost frame disallowed
+PASS: gdb.base/sepdebug.exp: kill program
+PASS: gdb.base/sepdebug.exp: break at factorial
+PASS: gdb.base/sepdebug.exp: continue to factorial(5)
+PASS: gdb.base/sepdebug.exp: backtrace from factorial(5)
+PASS: gdb.base/sepdebug.exp: next to recursive call
+PASS: gdb.base/sepdebug.exp: next over recursive call
+PASS: gdb.base/sepdebug.exp: backtrace from factorial(5.1)
+PASS: gdb.base/sepdebug.exp: continue until exit at recursive next test
+PASS: gdb.base/sepdebug.exp: debuglink: set separate debug location
+PASS: gdb.base/sepdebug.exp: debuglink: breakpoint function, optimized file
+PASS: gdb.base/sepdebug.exp: debuglink: breakpoint small function, optimized file
+PASS: gdb.base/sepdebug.exp: debuglink: run until function breakpoint, optimized file
+PASS: gdb.base/sepdebug.exp: debuglink: run until breakpoint set at small function, optimized file
+PASS: gdb.base/sepdebug.exp: CRC mismatch is reported
+PASS: gdb.base/sepdebug.exp: build-id support by binutils
+PASS: gdb.base/sepdebug.exp: build-id: set separate debug location
+PASS: gdb.base/sepdebug.exp: build-id: breakpoint function, optimized file
+PASS: gdb.base/sepdebug.exp: build-id: breakpoint small function, optimized file
+PASS: gdb.base/sepdebug.exp: build-id: run until function breakpoint, optimized file
+PASS: gdb.base/sepdebug.exp: build-id: run until breakpoint set at small function, optimized file
+PASS: gdb.base/sepdebug.exp: multiple-dirs: set separate debug location
+PASS: gdb.base/sepdebug.exp: multiple-dirs: breakpoint function, optimized file
+PASS: gdb.base/sepdebug.exp: multiple-dirs: breakpoint small function, optimized file
+PASS: gdb.base/sepdebug.exp: multiple-dirs: run until function breakpoint, optimized file
+PASS: gdb.base/sepdebug.exp: multiple-dirs: run until breakpoint set at small function, optimized file
+Running ./gdb.base/sep.exp ...
+PASS: gdb.base/sep.exp: list using location inside included file
+PASS: gdb.base/sep.exp: breakpoint inside included file
+Running ./gdb.base/sepsymtab.exp ...
+PASS: gdb.base/sepsymtab.exp: info sym main
+Running ./gdb.base/set-lang-auto.exp ...
+PASS: gdb.base/set-lang-auto.exp: show lang after loading binary
+PASS: gdb.base/set-lang-auto.exp: forcing the language to ada
+PASS: gdb.base/set-lang-auto.exp: show lang after switching language to ada
+PASS: gdb.base/set-lang-auto.exp: switching the language back to auto
+PASS: gdb.base/set-lang-auto.exp: show lang after having switched back to auto
+Running ./gdb.base/set-noassign.exp ...
+PASS: gdb.base/set-noassign.exp: set language ada
+PASS: gdb.base/set-noassign.exp: warning for set without assignment
+Running ./gdb.base/setshow.exp ...
+PASS: gdb.base/setshow.exp: default annotation_level is zero
+PASS: gdb.base/setshow.exp: set annotate 2
+PASS: gdb.base/setshow.exp: show annotate 2
+PASS: gdb.base/setshow.exp: annotation_level 2
+PASS: gdb.base/setshow.exp: set annotate 1
+PASS: gdb.base/setshow.exp: show annotate (1)
+PASS: gdb.base/setshow.exp: annotation_level 1
+PASS: gdb.base/setshow.exp: set annotate 0
+PASS: gdb.base/setshow.exp: show annotate (0)
+PASS: gdb.base/setshow.exp: annotation_level 0
+PASS: gdb.base/setshow.exp: set args ~
+PASS: gdb.base/setshow.exp: show args ~
+PASS: gdb.base/setshow.exp: set args
+PASS: gdb.base/setshow.exp: show args
+PASS: gdb.base/setshow.exp: set check range on
+PASS: gdb.base/setshow.exp: show check range (on)
+PASS: gdb.base/setshow.exp: set check range off
+PASS: gdb.base/setshow.exp: show check range (off)
+PASS: gdb.base/setshow.exp: set check range auto
+PASS: gdb.base/setshow.exp: show check range (auto)
+PASS: gdb.base/setshow.exp: set check type on
+PASS: gdb.base/setshow.exp: show check type (on)
+PASS: gdb.base/setshow.exp: set check type off
+PASS: gdb.base/setshow.exp: show check type (off)
+PASS: gdb.base/setshow.exp: set complaints 100
+PASS: gdb.base/setshow.exp: show complaints (100)
+PASS: gdb.base/setshow.exp: set complaints 0
+PASS: gdb.base/setshow.exp: show complaints (0)
+PASS: gdb.base/setshow.exp: set confirm off
+PASS: gdb.base/setshow.exp: show confirm (off)
+PASS: gdb.base/setshow.exp: set confirm on
+PASS: gdb.base/setshow.exp: show confirm (on)
+PASS: gdb.base/setshow.exp: set editing off
+PASS: gdb.base/setshow.exp: show editing (off)
+PASS: gdb.base/setshow.exp: set environment FOOBARBAZ
+PASS: gdb.base/setshow.exp: show environment FOOBARBAZ
+PASS: gdb.base/setshow.exp: set height 100
+PASS: gdb.base/setshow.exp: show height
+PASS: gdb.base/setshow.exp: set history expansion on
+PASS: gdb.base/setshow.exp: show history expansion
+PASS: gdb.base/setshow.exp: set history filename foobar.baz
+PASS: gdb.base/setshow.exp: show history filename (foobar.baz)
+PASS: gdb.base/setshow.exp: set history save on
+PASS: gdb.base/setshow.exp: show history save (on)
+PASS: gdb.base/setshow.exp: set history size 100
+PASS: gdb.base/setshow.exp: show history size (100)
+PASS: gdb.base/setshow.exp: set language asm
+PASS: gdb.base/setshow.exp: show language (asm)
+PASS: gdb.base/setshow.exp: set language java
+PASS: gdb.base/setshow.exp: show language (java)
+PASS: gdb.base/setshow.exp: complete set language minimal
+PASS: gdb.base/setshow.exp: set language auto
+PASS: gdb.base/setshow.exp: show language (auto)
+PASS: gdb.base/setshow.exp: set listsize 100
+PASS: gdb.base/setshow.exp: show listsize (100)
+PASS: gdb.base/setshow.exp: set prompt FooBarBaz
+PASS: gdb.base/setshow.exp: show prompt FooBarBaz
+PASS: gdb.base/setshow.exp: set prompt gdb
+PASS: gdb.base/setshow.exp: set radix 11
+PASS: gdb.base/setshow.exp: set radix 16
+PASS: gdb.base/setshow.exp: show radix (16)
+PASS: gdb.base/setshow.exp: set radix 10
+PASS: gdb.base/setshow.exp: show radix (10)
+PASS: gdb.base/setshow.exp: set width 90
+PASS: gdb.base/setshow.exp: show width (90)
+PASS: gdb.base/setshow.exp: set write on
+PASS: gdb.base/setshow.exp: show write (on)
+PASS: gdb.base/setshow.exp: show user
+PASS: gdb.base/setshow.exp: set verbose on
+PASS: gdb.base/setshow.exp: show verbose (on)
+PASS: gdb.base/setshow.exp: set verbose off
+PASS: gdb.base/setshow.exp: show verbose (off)
+Running ./gdb.base/setvar.exp ...
+PASS: gdb.base/setvar.exp: set print sevenbit-strings
+PASS: gdb.base/setvar.exp: set variable char=0
+PASS: gdb.base/setvar.exp: set variable char=1
+PASS: gdb.base/setvar.exp: set variable char=7 (Bel)
+PASS: gdb.base/setvar.exp: set variable char=32 (SPC)
+PASS: gdb.base/setvar.exp: set variable char=65 ('A')
+PASS: gdb.base/setvar.exp: set variable char=97 ('a')
+PASS: gdb.base/setvar.exp: set variable char=126 ('~')
+PASS: gdb.base/setvar.exp: set variable char=127 (8-bit)
+PASS: gdb.base/setvar.exp: set variable signed char=0
+PASS: gdb.base/setvar.exp: set variable signed char=1
+PASS: gdb.base/setvar.exp: set variable signed char=7 (Bel)
+PASS: gdb.base/setvar.exp: set variable signed char=32 (SPC)
+PASS: gdb.base/setvar.exp: set variable signed char=65 ('A')
+PASS: gdb.base/setvar.exp: set variable signed char=97 ('a')
+PASS: gdb.base/setvar.exp: set variable signed char=126 ('~')
+PASS: gdb.base/setvar.exp: set variable signed char=127 (8-bit)
+PASS: gdb.base/setvar.exp: set variable v_signed_char=-1
+PASS: gdb.base/setvar.exp: set variable signed char=-1 (-1)
+PASS: gdb.base/setvar.exp: set variable v_signed_char=0xFF
+PASS: gdb.base/setvar.exp: set variable signed char=0xFF (0xFF)
+PASS: gdb.base/setvar.exp: set variable unsigned char=0
+PASS: gdb.base/setvar.exp: set variable unsigned char=1
+PASS: gdb.base/setvar.exp: set variable unsigned char=7 (Bel)
+PASS: gdb.base/setvar.exp: set variable unsigned char=32 (SPC)
+PASS: gdb.base/setvar.exp: set variable unsigned char=65 ('A')
+PASS: gdb.base/setvar.exp: set variable unsigned char=97 ('a')
+PASS: gdb.base/setvar.exp: set variable unsigned char=126 ('~')
+PASS: gdb.base/setvar.exp: set variable unsigned char=255 (8-bit)
+PASS: gdb.base/setvar.exp: set variable short=0
+PASS: gdb.base/setvar.exp: set variable short=1
+PASS: gdb.base/setvar.exp: set variable short=-1 (minus)
+PASS: gdb.base/setvar.exp: set variable signed short=0
+PASS: gdb.base/setvar.exp: set variable signed short=1
+PASS: gdb.base/setvar.exp: set variable signed short=-1 (minus)
+PASS: gdb.base/setvar.exp: set variable unsigned short=0
+PASS: gdb.base/setvar.exp: set variable unsigned short=1
+PASS: gdb.base/setvar.exp: set variable unsigned short=~0 (minus)
+PASS: gdb.base/setvar.exp: set variable int=0
+PASS: gdb.base/setvar.exp: set variable int=1
+PASS: gdb.base/setvar.exp: set variable int=-1 (minus)
+PASS: gdb.base/setvar.exp: set variable signed int=0
+PASS: gdb.base/setvar.exp: set variable signed int=1
+PASS: gdb.base/setvar.exp: set variable signed int=-1 (minus)
+PASS: gdb.base/setvar.exp: set variable unsigned int=0
+PASS: gdb.base/setvar.exp: set variable unsigned int=1
+PASS: gdb.base/setvar.exp: set variable unsigned int=~0 (minus)
+PASS: gdb.base/setvar.exp: set variable long=0
+PASS: gdb.base/setvar.exp: set variable long=1
+PASS: gdb.base/setvar.exp: set variable long=-1 (minus)
+PASS: gdb.base/setvar.exp: set variable signed long=0
+PASS: gdb.base/setvar.exp: set variable signed long=1
+PASS: gdb.base/setvar.exp: set variable signed long=-1 (minus)
+PASS: gdb.base/setvar.exp: set variable unsigned long=0
+PASS: gdb.base/setvar.exp: set variable unsigned long=1
+PASS: gdb.base/setvar.exp: set variable unsigned long=~0 (minus)
+PASS: gdb.base/setvar.exp: set variable float=0
+PASS: gdb.base/setvar.exp: set variable float=1
+PASS: gdb.base/setvar.exp: set variable float=-1 (minus)
+PASS: gdb.base/setvar.exp: set variable double=0
+PASS: gdb.base/setvar.exp: set variable double=1
+PASS: gdb.base/setvar.exp: set variable double=-1 (minus)
+PASS: gdb.base/setvar.exp: set variable char array="hi" (string)
+PASS: gdb.base/setvar.exp: set variable signed char array="hi" (string)
+PASS: gdb.base/setvar.exp: set variable unsigned char array="hi" (string)
+PASS: gdb.base/setvar.exp: set variable short array
+PASS: gdb.base/setvar.exp: set variable signed short array
+PASS: gdb.base/setvar.exp: set variable unsigned short array
+PASS: gdb.base/setvar.exp: set variable int array
+PASS: gdb.base/setvar.exp: set variable signed int array
+PASS: gdb.base/setvar.exp: set variable unsigned int array
+PASS: gdb.base/setvar.exp: set variable long array
+PASS: gdb.base/setvar.exp: set variable signed long array
+PASS: gdb.base/setvar.exp: set variable unsigned long array
+PASS: gdb.base/setvar.exp: set variable float array
+PASS: gdb.base/setvar.exp: set variable double array
+PASS: gdb.base/setvar.exp: set variable char pointer="hi" (string)
+PASS: gdb.base/setvar.exp: set variable char pointer="hi" (string) (#2)
+PASS: gdb.base/setvar.exp: set variable signed char pointer="hi" (string)
+PASS: gdb.base/setvar.exp: set variable signed char pointer="hi" (string) (#2)
+PASS: gdb.base/setvar.exp: set variable unsigned char pointer="hi" (string)
+PASS: gdb.base/setvar.exp: set variable unsigned char pointer="hi" (string) (#2)
+PASS: gdb.base/setvar.exp: set variable short pointer
+PASS: gdb.base/setvar.exp: set variable short pointer (#2)
+PASS: gdb.base/setvar.exp: set v_signed_short_pointer=v_signed_short_array
+PASS: gdb.base/setvar.exp: set variable *(v_signed_short_pointer)=123
+PASS: gdb.base/setvar.exp: set variable *(v_signed_short_pointer+1)=-456
+PASS: gdb.base/setvar.exp: set variable signed short pointer
+PASS: gdb.base/setvar.exp: print *(v_signed_short_pointer+1)
+PASS: gdb.base/setvar.exp: set v_unsigned_short_pointer=v_unsigned_short_array
+PASS: gdb.base/setvar.exp: set variable *(v_unsigned_short_pointer)=123
+PASS: gdb.base/setvar.exp: set variable *(v_unsigned_short_pointer+1)=-456
+PASS: gdb.base/setvar.exp: set variable unsigned short pointer
+PASS: gdb.base/setvar.exp: print *(v_unsigned_short_pointer+1)
+PASS: gdb.base/setvar.exp: set variable int pointer
+PASS: gdb.base/setvar.exp: set variable int pointer (#2)
+PASS: gdb.base/setvar.exp: set variable signed int pointer
+PASS: gdb.base/setvar.exp: set variable signed int pointer (#2)
+PASS: gdb.base/setvar.exp: set variable unsigned int pointer
+PASS: gdb.base/setvar.exp: print variable unsigned int pointer+1
+PASS: gdb.base/setvar.exp: set variable long pointer
+PASS: gdb.base/setvar.exp: set variable long pointer (#2)
+PASS: gdb.base/setvar.exp: set variable signed long pointer
+PASS: gdb.base/setvar.exp: set variable signed long pointer (#2)
+PASS: gdb.base/setvar.exp: set variable unsigned long pointer
+PASS: gdb.base/setvar.exp: set variable unsigned long pointer (#2)
+PASS: gdb.base/setvar.exp: set variable float pointer
+PASS: gdb.base/setvar.exp: set variable float pointer (#2)
+PASS: gdb.base/setvar.exp: set variable double pointer
+PASS: gdb.base/setvar.exp: set variable double pointer (#2)
+PASS: gdb.base/setvar.exp: set variable structure char member
+PASS: gdb.base/setvar.exp: set variable structure short member
+PASS: gdb.base/setvar.exp: set variable structure int member
+PASS: gdb.base/setvar.exp: set variable structure long member
+PASS: gdb.base/setvar.exp: set variable structure float member
+PASS: gdb.base/setvar.exp: set variable structure double member
+PASS: gdb.base/setvar.exp: set print structure #1
+PASS: gdb.base/setvar.exp: set print structure #2
+PASS: gdb.base/setvar.exp: set print structure #3
+PASS: gdb.base/setvar.exp: set print structure #4
+PASS: gdb.base/setvar.exp: print sef.field=sm1
+PASS: gdb.base/setvar.exp: print sef.field (sm1)
+PASS: gdb.base/setvar.exp: print sef.field=s1
+PASS: gdb.base/setvar.exp: print sef.field (s1)
+PASS: gdb.base/setvar.exp: print uef.field=u2
+PASS: gdb.base/setvar.exp: print uef.field (u2)
+PASS: gdb.base/setvar.exp: print uef.field=u1
+PASS: gdb.base/setvar.exp: print uef.field (u1)
+PASS: gdb.base/setvar.exp: print sef.field=7
+PASS: gdb.base/setvar.exp: print uef.field=6
+Running ./gdb.base/shell.exp ...
+PASS: gdb.base/shell.exp: shell echo foo
+PASS: gdb.base/shell.exp: ! echo foo
+PASS: gdb.base/shell.exp: !echo foo
+Running ./gdb.base/shlib-call.exp ...
+PASS: gdb.base/shlib-call.exp: set print sevenbit-strings
+PASS: gdb.base/shlib-call.exp: set print address off
+PASS: gdb.base/shlib-call.exp: set width 0
+PASS: gdb.base/shlib-call.exp: next to shr1
+PASS: gdb.base/shlib-call.exp: print g
+PASS: gdb.base/shlib-call.exp: print g
+PASS: gdb.base/shlib-call.exp: breakpoint function shr2
+PASS: gdb.base/shlib-call.exp: run until breakpoint set at a function
+PASS: gdb.base/shlib-call.exp: print mainshr1(1) from shlib func
+PASS: gdb.base/shlib-call.exp: step out of shr2 to main (stopped in shr2 epilogue)
+PASS: gdb.base/shlib-call.exp: step out of shr2 epilogue to main
+PASS: gdb.base/shlib-call.exp: print mainshr1(1)
+PASS: gdb.base/shlib-call.exp: step into mainshr1
+PASS: gdb.base/shlib-call.exp: set print sevenbit-strings
+PASS: gdb.base/shlib-call.exp: set print address off
+PASS: gdb.base/shlib-call.exp: set width 0
+Running ./gdb.base/shreloc.exp ...
+PASS: gdb.base/shreloc.exp: get address of fn_1
+PASS: gdb.base/shreloc.exp: get address of fn_2
+PASS: gdb.base/shreloc.exp: relocated extern functions have different addresses
+PASS: gdb.base/shreloc.exp: get address of extern_var_1
+PASS: gdb.base/shreloc.exp: get address of extern_var_2
+PASS: gdb.base/shreloc.exp: relocated extern variables have different addresses
+PASS: gdb.base/shreloc.exp: get address of static_var_1
+PASS: gdb.base/shreloc.exp: get address of static_var_2
+PASS: gdb.base/shreloc.exp: relocated static variables have different addresses
+PASS: gdb.base/shreloc.exp: get_msym_addrs static_var_[12]
+PASS: gdb.base/shreloc.exp: (msymbol) relocated static vars have different addresses
+PASS: gdb.base/shreloc.exp: get_msym_addrs extern_var_[12]
+PASS: gdb.base/shreloc.exp: (msymbol) relocated extern vars have different addresses
+PASS: gdb.base/shreloc.exp: get_msym_addrs fn_[12]
+PASS: gdb.base/shreloc.exp: (msymbol) relocated functions have different addresses
+Running ./gdb.base/sigall.exp ...
+PASS: gdb.base/sigall.exp: handle SIGABRT stop print
+PASS: gdb.base/sigall.exp: b handle_ABRT
+PASS: gdb.base/sigall.exp: b gen_HUP
+PASS: gdb.base/sigall.exp: get signal ABRT
+PASS: gdb.base/sigall.exp: send signal ABRT
+PASS: gdb.base/sigall.exp: advance to HUP
+PASS: gdb.base/sigall.exp: handle SIGHUP stop print
+PASS: gdb.base/sigall.exp: b handle_HUP
+PASS: gdb.base/sigall.exp: b gen_QUIT
+PASS: gdb.base/sigall.exp: get signal HUP
+PASS: gdb.base/sigall.exp: send signal HUP
+PASS: gdb.base/sigall.exp: advance to QUIT
+PASS: gdb.base/sigall.exp: handle SIGQUIT stop print
+PASS: gdb.base/sigall.exp: b handle_QUIT
+PASS: gdb.base/sigall.exp: b gen_ILL
+PASS: gdb.base/sigall.exp: get signal QUIT
+PASS: gdb.base/sigall.exp: send signal QUIT
+PASS: gdb.base/sigall.exp: advance to ILL
+PASS: gdb.base/sigall.exp: handle SIGILL stop print
+PASS: gdb.base/sigall.exp: b handle_ILL
+PASS: gdb.base/sigall.exp: b gen_EMT
+PASS: gdb.base/sigall.exp: get signal ILL
+PASS: gdb.base/sigall.exp: send signal ILL
+PASS: gdb.base/sigall.exp: advance to EMT
+PASS: gdb.base/sigall.exp: handle SIGEMT stop print
+PASS: gdb.base/sigall.exp: b handle_EMT
+PASS: gdb.base/sigall.exp: b gen_FPE
+PASS: gdb.base/sigall.exp: send signal EMT
+PASS: gdb.base/sigall.exp: advance to FPE
+PASS: gdb.base/sigall.exp: handle SIGFPE stop print
+PASS: gdb.base/sigall.exp: b handle_FPE
+PASS: gdb.base/sigall.exp: b gen_BUS
+PASS: gdb.base/sigall.exp: get signal FPE
+PASS: gdb.base/sigall.exp: send signal FPE
+PASS: gdb.base/sigall.exp: advance to BUS
+PASS: gdb.base/sigall.exp: handle SIGBUS stop print
+PASS: gdb.base/sigall.exp: b handle_BUS
+PASS: gdb.base/sigall.exp: b gen_SEGV
+PASS: gdb.base/sigall.exp: get signal BUS
+PASS: gdb.base/sigall.exp: send signal BUS
+PASS: gdb.base/sigall.exp: advance to SEGV
+PASS: gdb.base/sigall.exp: handle SIGSEGV stop print
+PASS: gdb.base/sigall.exp: b handle_SEGV
+PASS: gdb.base/sigall.exp: b gen_SYS
+PASS: gdb.base/sigall.exp: get signal SEGV
+PASS: gdb.base/sigall.exp: send signal SEGV
+PASS: gdb.base/sigall.exp: advance to SYS
+PASS: gdb.base/sigall.exp: handle SIGSYS stop print
+PASS: gdb.base/sigall.exp: b handle_SYS
+PASS: gdb.base/sigall.exp: b gen_PIPE
+PASS: gdb.base/sigall.exp: get signal SYS
+PASS: gdb.base/sigall.exp: send signal SYS
+PASS: gdb.base/sigall.exp: advance to PIPE
+PASS: gdb.base/sigall.exp: handle SIGPIPE stop print
+PASS: gdb.base/sigall.exp: b handle_PIPE
+PASS: gdb.base/sigall.exp: b gen_ALRM
+PASS: gdb.base/sigall.exp: get signal PIPE
+PASS: gdb.base/sigall.exp: send signal PIPE
+PASS: gdb.base/sigall.exp: advance to ALRM
+PASS: gdb.base/sigall.exp: handle SIGALRM stop print
+PASS: gdb.base/sigall.exp: b handle_ALRM
+PASS: gdb.base/sigall.exp: b gen_URG
+PASS: gdb.base/sigall.exp: get signal ALRM
+PASS: gdb.base/sigall.exp: send signal ALRM
+PASS: gdb.base/sigall.exp: advance to URG
+PASS: gdb.base/sigall.exp: handle SIGURG stop print
+PASS: gdb.base/sigall.exp: b handle_URG
+PASS: gdb.base/sigall.exp: b gen_TSTP
+PASS: gdb.base/sigall.exp: get signal URG
+PASS: gdb.base/sigall.exp: send signal URG
+PASS: gdb.base/sigall.exp: advance to TSTP
+PASS: gdb.base/sigall.exp: handle SIGTSTP stop print
+PASS: gdb.base/sigall.exp: b handle_TSTP
+PASS: gdb.base/sigall.exp: b gen_CONT
+PASS: gdb.base/sigall.exp: get signal TSTP
+PASS: gdb.base/sigall.exp: send signal TSTP
+PASS: gdb.base/sigall.exp: advance to CONT
+PASS: gdb.base/sigall.exp: handle SIGCONT stop print
+PASS: gdb.base/sigall.exp: b handle_CONT
+PASS: gdb.base/sigall.exp: b gen_CHLD
+PASS: gdb.base/sigall.exp: get signal CONT
+PASS: gdb.base/sigall.exp: send signal CONT
+PASS: gdb.base/sigall.exp: advance to CHLD
+PASS: gdb.base/sigall.exp: handle SIGCHLD stop print
+PASS: gdb.base/sigall.exp: b handle_CHLD
+PASS: gdb.base/sigall.exp: b gen_TTIN
+PASS: gdb.base/sigall.exp: get signal CHLD
+PASS: gdb.base/sigall.exp: send signal CHLD
+PASS: gdb.base/sigall.exp: advance to TTIN
+PASS: gdb.base/sigall.exp: handle SIGTTIN stop print
+PASS: gdb.base/sigall.exp: b handle_TTIN
+PASS: gdb.base/sigall.exp: b gen_TTOU
+PASS: gdb.base/sigall.exp: get signal TTIN
+PASS: gdb.base/sigall.exp: send signal TTIN
+PASS: gdb.base/sigall.exp: advance to TTOU
+PASS: gdb.base/sigall.exp: handle SIGTTOU stop print
+PASS: gdb.base/sigall.exp: b handle_TTOU
+PASS: gdb.base/sigall.exp: b gen_IO
+PASS: gdb.base/sigall.exp: get signal TTOU
+PASS: gdb.base/sigall.exp: send signal TTOU
+PASS: gdb.base/sigall.exp: advance to IO
+PASS: gdb.base/sigall.exp: handle SIGIO stop print
+PASS: gdb.base/sigall.exp: b handle_IO
+PASS: gdb.base/sigall.exp: b gen_XCPU
+PASS: gdb.base/sigall.exp: get signal IO
+PASS: gdb.base/sigall.exp: send signal IO
+PASS: gdb.base/sigall.exp: advance to XCPU
+PASS: gdb.base/sigall.exp: handle SIGXCPU stop print
+PASS: gdb.base/sigall.exp: b handle_XCPU
+PASS: gdb.base/sigall.exp: b gen_XFSZ
+PASS: gdb.base/sigall.exp: get signal XCPU
+PASS: gdb.base/sigall.exp: send signal XCPU
+PASS: gdb.base/sigall.exp: advance to XFSZ
+PASS: gdb.base/sigall.exp: handle SIGXFSZ stop print
+PASS: gdb.base/sigall.exp: b handle_XFSZ
+PASS: gdb.base/sigall.exp: b gen_VTALRM
+PASS: gdb.base/sigall.exp: get signal XFSZ
+PASS: gdb.base/sigall.exp: send signal XFSZ
+PASS: gdb.base/sigall.exp: advance to VTALRM
+PASS: gdb.base/sigall.exp: handle SIGVTALRM stop print
+PASS: gdb.base/sigall.exp: b handle_VTALRM
+PASS: gdb.base/sigall.exp: b gen_PROF
+PASS: gdb.base/sigall.exp: get signal VTALRM
+PASS: gdb.base/sigall.exp: send signal VTALRM
+PASS: gdb.base/sigall.exp: advance to PROF
+PASS: gdb.base/sigall.exp: handle SIGPROF stop print
+PASS: gdb.base/sigall.exp: b handle_PROF
+PASS: gdb.base/sigall.exp: b gen_WINCH
+PASS: gdb.base/sigall.exp: get signal PROF
+PASS: gdb.base/sigall.exp: send signal PROF
+PASS: gdb.base/sigall.exp: advance to WINCH
+PASS: gdb.base/sigall.exp: handle SIGWINCH stop print
+PASS: gdb.base/sigall.exp: b handle_WINCH
+PASS: gdb.base/sigall.exp: b gen_LOST
+PASS: gdb.base/sigall.exp: get signal WINCH
+PASS: gdb.base/sigall.exp: send signal WINCH
+PASS: gdb.base/sigall.exp: advance to LOST
+PASS: gdb.base/sigall.exp: handle SIGLOST stop print
+PASS: gdb.base/sigall.exp: b handle_LOST
+PASS: gdb.base/sigall.exp: b gen_USR1
+PASS: gdb.base/sigall.exp: send signal LOST
+PASS: gdb.base/sigall.exp: advance to USR1
+PASS: gdb.base/sigall.exp: handle SIGUSR1 stop print
+PASS: gdb.base/sigall.exp: b handle_USR1
+PASS: gdb.base/sigall.exp: b gen_USR2
+PASS: gdb.base/sigall.exp: get signal USR1
+PASS: gdb.base/sigall.exp: send signal USR1
+PASS: gdb.base/sigall.exp: advance to USR2
+PASS: gdb.base/sigall.exp: handle SIGUSR2 stop print
+PASS: gdb.base/sigall.exp: b handle_USR2
+PASS: gdb.base/sigall.exp: b gen_PWR
+PASS: gdb.base/sigall.exp: get signal USR2
+PASS: gdb.base/sigall.exp: send signal USR2
+PASS: gdb.base/sigall.exp: advance to PWR
+PASS: gdb.base/sigall.exp: handle SIGPWR stop print
+PASS: gdb.base/sigall.exp: b handle_PWR
+PASS: gdb.base/sigall.exp: b gen_POLL
+PASS: gdb.base/sigall.exp: get signal PWR
+PASS: gdb.base/sigall.exp: send signal PWR
+PASS: gdb.base/sigall.exp: advance to POLL
+PASS: gdb.base/sigall.exp: handle SIGPOLL stop print
+PASS: gdb.base/sigall.exp: b handle_POLL
+PASS: gdb.base/sigall.exp: b gen_WIND
+PASS: gdb.base/sigall.exp: send signal POLL
+PASS: gdb.base/sigall.exp: advance to WIND
+PASS: gdb.base/sigall.exp: handle SIGWIND stop print
+PASS: gdb.base/sigall.exp: b handle_WIND
+PASS: gdb.base/sigall.exp: b gen_PHONE
+PASS: gdb.base/sigall.exp: send signal WIND
+PASS: gdb.base/sigall.exp: advance to PHONE
+PASS: gdb.base/sigall.exp: handle SIGPHONE stop print
+PASS: gdb.base/sigall.exp: b handle_PHONE
+PASS: gdb.base/sigall.exp: b gen_WAITING
+PASS: gdb.base/sigall.exp: send signal PHONE
+PASS: gdb.base/sigall.exp: advance to WAITING
+PASS: gdb.base/sigall.exp: handle SIGWAITING stop print
+PASS: gdb.base/sigall.exp: b handle_WAITING
+PASS: gdb.base/sigall.exp: b gen_LWP
+PASS: gdb.base/sigall.exp: send signal WAITING
+PASS: gdb.base/sigall.exp: advance to LWP
+PASS: gdb.base/sigall.exp: handle SIGLWP stop print
+PASS: gdb.base/sigall.exp: b handle_LWP
+PASS: gdb.base/sigall.exp: b gen_DANGER
+PASS: gdb.base/sigall.exp: send signal LWP
+PASS: gdb.base/sigall.exp: advance to DANGER
+PASS: gdb.base/sigall.exp: handle SIGDANGER stop print
+PASS: gdb.base/sigall.exp: b handle_DANGER
+PASS: gdb.base/sigall.exp: b gen_GRANT
+PASS: gdb.base/sigall.exp: send signal DANGER
+PASS: gdb.base/sigall.exp: advance to GRANT
+PASS: gdb.base/sigall.exp: handle SIGGRANT stop print
+PASS: gdb.base/sigall.exp: b handle_GRANT
+PASS: gdb.base/sigall.exp: b gen_RETRACT
+PASS: gdb.base/sigall.exp: send signal GRANT
+PASS: gdb.base/sigall.exp: advance to RETRACT
+PASS: gdb.base/sigall.exp: handle SIGRETRACT stop print
+PASS: gdb.base/sigall.exp: b handle_RETRACT
+PASS: gdb.base/sigall.exp: b gen_MSG
+PASS: gdb.base/sigall.exp: send signal RETRACT
+PASS: gdb.base/sigall.exp: advance to MSG
+PASS: gdb.base/sigall.exp: handle SIGMSG stop print
+PASS: gdb.base/sigall.exp: b handle_MSG
+PASS: gdb.base/sigall.exp: b gen_SOUND
+PASS: gdb.base/sigall.exp: send signal MSG
+PASS: gdb.base/sigall.exp: advance to SOUND
+PASS: gdb.base/sigall.exp: handle SIGSOUND stop print
+PASS: gdb.base/sigall.exp: b handle_SOUND
+PASS: gdb.base/sigall.exp: b gen_SAK
+PASS: gdb.base/sigall.exp: send signal SOUND
+PASS: gdb.base/sigall.exp: advance to SAK
+PASS: gdb.base/sigall.exp: handle SIGSAK stop print
+PASS: gdb.base/sigall.exp: b handle_SAK
+PASS: gdb.base/sigall.exp: b gen_PRIO
+PASS: gdb.base/sigall.exp: send signal SAK
+PASS: gdb.base/sigall.exp: advance to PRIO
+PASS: gdb.base/sigall.exp: handle SIGPRIO stop print
+PASS: gdb.base/sigall.exp: b handle_PRIO
+PASS: gdb.base/sigall.exp: b gen_33
+PASS: gdb.base/sigall.exp: send signal PRIO
+PASS: gdb.base/sigall.exp: advance to 33
+PASS: gdb.base/sigall.exp: handle SIG33 stop print
+PASS: gdb.base/sigall.exp: b handle_33
+PASS: gdb.base/sigall.exp: b gen_34
+PASS: gdb.base/sigall.exp: send signal 33
+PASS: gdb.base/sigall.exp: advance to 34
+PASS: gdb.base/sigall.exp: handle SIG34 stop print
+PASS: gdb.base/sigall.exp: b handle_34
+PASS: gdb.base/sigall.exp: b gen_35
+PASS: gdb.base/sigall.exp: send signal 34
+PASS: gdb.base/sigall.exp: advance to 35
+PASS: gdb.base/sigall.exp: handle SIG35 stop print
+PASS: gdb.base/sigall.exp: b handle_35
+PASS: gdb.base/sigall.exp: b gen_36
+PASS: gdb.base/sigall.exp: send signal 35
+PASS: gdb.base/sigall.exp: advance to 36
+PASS: gdb.base/sigall.exp: handle SIG36 stop print
+PASS: gdb.base/sigall.exp: b handle_36
+PASS: gdb.base/sigall.exp: b gen_37
+PASS: gdb.base/sigall.exp: send signal 36
+PASS: gdb.base/sigall.exp: advance to 37
+PASS: gdb.base/sigall.exp: handle SIG37 stop print
+PASS: gdb.base/sigall.exp: b handle_37
+PASS: gdb.base/sigall.exp: b gen_38
+PASS: gdb.base/sigall.exp: send signal 37
+PASS: gdb.base/sigall.exp: advance to 38
+PASS: gdb.base/sigall.exp: handle SIG38 stop print
+PASS: gdb.base/sigall.exp: b handle_38
+PASS: gdb.base/sigall.exp: b gen_39
+PASS: gdb.base/sigall.exp: send signal 38
+PASS: gdb.base/sigall.exp: advance to 39
+PASS: gdb.base/sigall.exp: handle SIG39 stop print
+PASS: gdb.base/sigall.exp: b handle_39
+PASS: gdb.base/sigall.exp: b gen_40
+PASS: gdb.base/sigall.exp: send signal 39
+PASS: gdb.base/sigall.exp: advance to 40
+PASS: gdb.base/sigall.exp: handle SIG40 stop print
+PASS: gdb.base/sigall.exp: b handle_40
+PASS: gdb.base/sigall.exp: b gen_41
+PASS: gdb.base/sigall.exp: send signal 40
+PASS: gdb.base/sigall.exp: advance to 41
+PASS: gdb.base/sigall.exp: handle SIG41 stop print
+PASS: gdb.base/sigall.exp: b handle_41
+PASS: gdb.base/sigall.exp: b gen_42
+PASS: gdb.base/sigall.exp: send signal 41
+PASS: gdb.base/sigall.exp: advance to 42
+PASS: gdb.base/sigall.exp: handle SIG42 stop print
+PASS: gdb.base/sigall.exp: b handle_42
+PASS: gdb.base/sigall.exp: b gen_43
+PASS: gdb.base/sigall.exp: send signal 42
+PASS: gdb.base/sigall.exp: advance to 43
+PASS: gdb.base/sigall.exp: handle SIG43 stop print
+PASS: gdb.base/sigall.exp: b handle_43
+PASS: gdb.base/sigall.exp: b gen_44
+PASS: gdb.base/sigall.exp: send signal 43
+PASS: gdb.base/sigall.exp: advance to 44
+PASS: gdb.base/sigall.exp: handle SIG44 stop print
+PASS: gdb.base/sigall.exp: b handle_44
+PASS: gdb.base/sigall.exp: b gen_45
+PASS: gdb.base/sigall.exp: send signal 44
+PASS: gdb.base/sigall.exp: advance to 45
+PASS: gdb.base/sigall.exp: handle SIG45 stop print
+PASS: gdb.base/sigall.exp: b handle_45
+PASS: gdb.base/sigall.exp: b gen_46
+PASS: gdb.base/sigall.exp: send signal 45
+PASS: gdb.base/sigall.exp: advance to 46
+PASS: gdb.base/sigall.exp: handle SIG46 stop print
+PASS: gdb.base/sigall.exp: b handle_46
+PASS: gdb.base/sigall.exp: b gen_47
+PASS: gdb.base/sigall.exp: send signal 46
+PASS: gdb.base/sigall.exp: advance to 47
+PASS: gdb.base/sigall.exp: handle SIG47 stop print
+PASS: gdb.base/sigall.exp: b handle_47
+PASS: gdb.base/sigall.exp: b gen_48
+PASS: gdb.base/sigall.exp: send signal 47
+PASS: gdb.base/sigall.exp: advance to 48
+PASS: gdb.base/sigall.exp: handle SIG48 stop print
+PASS: gdb.base/sigall.exp: b handle_48
+PASS: gdb.base/sigall.exp: b gen_49
+PASS: gdb.base/sigall.exp: send signal 48
+PASS: gdb.base/sigall.exp: advance to 49
+PASS: gdb.base/sigall.exp: handle SIG49 stop print
+PASS: gdb.base/sigall.exp: b handle_49
+PASS: gdb.base/sigall.exp: b gen_50
+PASS: gdb.base/sigall.exp: send signal 49
+PASS: gdb.base/sigall.exp: advance to 50
+PASS: gdb.base/sigall.exp: handle SIG50 stop print
+PASS: gdb.base/sigall.exp: b handle_50
+PASS: gdb.base/sigall.exp: b gen_51
+PASS: gdb.base/sigall.exp: send signal 50
+PASS: gdb.base/sigall.exp: advance to 51
+PASS: gdb.base/sigall.exp: handle SIG51 stop print
+PASS: gdb.base/sigall.exp: b handle_51
+PASS: gdb.base/sigall.exp: b gen_52
+PASS: gdb.base/sigall.exp: send signal 51
+PASS: gdb.base/sigall.exp: advance to 52
+PASS: gdb.base/sigall.exp: handle SIG52 stop print
+PASS: gdb.base/sigall.exp: b handle_52
+PASS: gdb.base/sigall.exp: b gen_53
+PASS: gdb.base/sigall.exp: send signal 52
+PASS: gdb.base/sigall.exp: advance to 53
+PASS: gdb.base/sigall.exp: handle SIG53 stop print
+PASS: gdb.base/sigall.exp: b handle_53
+PASS: gdb.base/sigall.exp: b gen_54
+PASS: gdb.base/sigall.exp: send signal 53
+PASS: gdb.base/sigall.exp: advance to 54
+PASS: gdb.base/sigall.exp: handle SIG54 stop print
+PASS: gdb.base/sigall.exp: b handle_54
+PASS: gdb.base/sigall.exp: b gen_55
+PASS: gdb.base/sigall.exp: send signal 54
+PASS: gdb.base/sigall.exp: advance to 55
+PASS: gdb.base/sigall.exp: handle SIG55 stop print
+PASS: gdb.base/sigall.exp: b handle_55
+PASS: gdb.base/sigall.exp: b gen_56
+PASS: gdb.base/sigall.exp: send signal 55
+PASS: gdb.base/sigall.exp: advance to 56
+PASS: gdb.base/sigall.exp: handle SIG56 stop print
+PASS: gdb.base/sigall.exp: b handle_56
+PASS: gdb.base/sigall.exp: b gen_57
+PASS: gdb.base/sigall.exp: send signal 56
+PASS: gdb.base/sigall.exp: advance to 57
+PASS: gdb.base/sigall.exp: handle SIG57 stop print
+PASS: gdb.base/sigall.exp: b handle_57
+PASS: gdb.base/sigall.exp: b gen_58
+PASS: gdb.base/sigall.exp: send signal 57
+PASS: gdb.base/sigall.exp: advance to 58
+PASS: gdb.base/sigall.exp: handle SIG58 stop print
+PASS: gdb.base/sigall.exp: b handle_58
+PASS: gdb.base/sigall.exp: b gen_59
+PASS: gdb.base/sigall.exp: send signal 58
+PASS: gdb.base/sigall.exp: advance to 59
+PASS: gdb.base/sigall.exp: handle SIG59 stop print
+PASS: gdb.base/sigall.exp: b handle_59
+PASS: gdb.base/sigall.exp: b gen_60
+PASS: gdb.base/sigall.exp: send signal 59
+PASS: gdb.base/sigall.exp: advance to 60
+PASS: gdb.base/sigall.exp: handle SIG60 stop print
+PASS: gdb.base/sigall.exp: b handle_60
+PASS: gdb.base/sigall.exp: b gen_61
+PASS: gdb.base/sigall.exp: send signal 60
+PASS: gdb.base/sigall.exp: advance to 61
+PASS: gdb.base/sigall.exp: handle SIG61 stop print
+PASS: gdb.base/sigall.exp: b handle_61
+PASS: gdb.base/sigall.exp: b gen_62
+PASS: gdb.base/sigall.exp: send signal 61
+PASS: gdb.base/sigall.exp: advance to 62
+PASS: gdb.base/sigall.exp: handle SIG62 stop print
+PASS: gdb.base/sigall.exp: b handle_62
+PASS: gdb.base/sigall.exp: b gen_63
+PASS: gdb.base/sigall.exp: send signal 62
+PASS: gdb.base/sigall.exp: advance to 63
+PASS: gdb.base/sigall.exp: handle SIG63 stop print
+PASS: gdb.base/sigall.exp: b handle_63
+PASS: gdb.base/sigall.exp: b gen_TERM
+PASS: gdb.base/sigall.exp: send signal 63
+PASS: gdb.base/sigall.exp: advance to TERM
+PASS: gdb.base/sigall.exp: handle SIGTERM stop print
+PASS: gdb.base/sigall.exp: b handle_TERM
+PASS: gdb.base/sigall.exp: get signal TERM
+PASS: gdb.base/sigall.exp: send signal TERM
+PASS: gdb.base/sigall.exp: continue until exit at continue to sigall exit
+Running ./gdb.base/sigaltstack.exp ...
+PASS: gdb.base/sigaltstack.exp: handle SIGALRM print pass nostop
+PASS: gdb.base/sigaltstack.exp: handle SIGVTALRM print pass nostop
+PASS: gdb.base/sigaltstack.exp: handle SIGPROF print pass nostop
+PASS: gdb.base/sigaltstack.exp: break catcher if level == INNER
+PASS: gdb.base/sigaltstack.exp: continue to catch
+PASS: gdb.base/sigaltstack.exp: next
+PASS: gdb.base/sigaltstack.exp: backtrace
+PASS: gdb.base/sigaltstack.exp: finish from catch LEAF
+PASS: gdb.base/sigaltstack.exp: finish to throw INNER
+PASS: gdb.base/sigaltstack.exp: finish to catch INNER
+PASS: gdb.base/sigaltstack.exp: finish from catch INNER
+PASS: gdb.base/sigaltstack.exp: finish to OUTER
+PASS: gdb.base/sigaltstack.exp: finish to catch MAIN
+PASS: gdb.base/sigaltstack.exp: finish to MAIN
+Running ./gdb.base/sigbpt.exp ...
+PASS: gdb.base/sigbpt.exp: break keeper
+PASS: gdb.base/sigbpt.exp: display/i $pc
+PASS: gdb.base/sigbpt.exp: advance to the bowler
+FAIL: gdb.base/sigbpt.exp: stepping to fault
+FAIL: gdb.base/sigbpt.exp: get insn after fault
+FAIL: gdb.base/sigbpt.exp: Verify that SIGSEGV occurs at the last STEPI insn (none 0x55555626)
+PASS: gdb.base/sigbpt.exp: rerun to main
+PASS: gdb.base/sigbpt.exp: stepi; pass SIGSEGV
+PASS: gdb.base/sigbpt.exp: stepi; continue to keeper
+PASS: gdb.base/sigbpt.exp: stepi; nopass SIGSEGV
+KFAIL: gdb.base/sigbpt.exp: stepi; stepi out of handler (corrupt pc) (PRMS: gdb/1702)
+PASS: gdb.base/sigbpt.exp: rerun to main
+PASS: gdb.base/sigbpt.exp: stepi bp before segv; pass SIGSEGV
+PASS: gdb.base/sigbpt.exp: stepi bp before segv; continue to keeper
+PASS: gdb.base/sigbpt.exp: stepi bp before segv; nopass SIGSEGV
+PASS: gdb.base/sigbpt.exp: stepi bp before segv; set breakpoint 0 of 1
+KFAIL: gdb.base/sigbpt.exp: stepi bp before segv; stepi out of handler (corrupt pc) (PRMS: gdb/1702)
+PASS: gdb.base/sigbpt.exp: stepi bp before segv; clear breakpoint 0 of 1
+PASS: gdb.base/sigbpt.exp: rerun to main
+PASS: gdb.base/sigbpt.exp: stepi bp at segv; pass SIGSEGV
+PASS: gdb.base/sigbpt.exp: stepi bp at segv; continue to keeper
+PASS: gdb.base/sigbpt.exp: stepi bp at segv; nopass SIGSEGV
+PASS: gdb.base/sigbpt.exp: stepi bp at segv; set breakpoint 0 of 1
+KFAIL: gdb.base/sigbpt.exp: stepi bp at segv; stepi out of handler (corrupt pc) (PRMS: gdb/1702)
+PASS: gdb.base/sigbpt.exp: stepi bp at segv; clear breakpoint 0 of 1
+PASS: gdb.base/sigbpt.exp: rerun to main
+PASS: gdb.base/sigbpt.exp: stepi bp before and at segv; pass SIGSEGV
+PASS: gdb.base/sigbpt.exp: stepi bp before and at segv; continue to keeper
+PASS: gdb.base/sigbpt.exp: stepi bp before and at segv; nopass SIGSEGV
+PASS: gdb.base/sigbpt.exp: stepi bp before and at segv; set breakpoint 0 of 2
+PASS: gdb.base/sigbpt.exp: stepi bp before and at segv; set breakpoint 1 of 2
+KFAIL: gdb.base/sigbpt.exp: stepi bp before and at segv; stepi out of handler (corrupt pc) (PRMS: gdb/1702)
+PASS: gdb.base/sigbpt.exp: stepi bp before and at segv; clear breakpoint 0 of 2
+PASS: gdb.base/sigbpt.exp: stepi bp before and at segv; clear breakpoint 1 of 2
+PASS: gdb.base/sigbpt.exp: rerun to main
+PASS: gdb.base/sigbpt.exp: cont; pass SIGSEGV
+PASS: gdb.base/sigbpt.exp: cont; continue to keeper
+PASS: gdb.base/sigbpt.exp: cont; nopass SIGSEGV
+PASS: gdb.base/sigbpt.exp: cont; set breakpoint 0 of 1
+FAIL: gdb.base/sigbpt.exp: cont; continue to breakpoint at fault
+FAIL: gdb.base/sigbpt.exp: cont; stepi fault
+PASS: gdb.base/sigbpt.exp: cont; clear breakpoint 0 of 1
+PASS: gdb.base/sigbpt.exp: rerun to main
+PASS: gdb.base/sigbpt.exp: cont bp after segv; pass SIGSEGV
+PASS: gdb.base/sigbpt.exp: cont bp after segv; continue to keeper
+PASS: gdb.base/sigbpt.exp: cont bp after segv; nopass SIGSEGV
+PASS: gdb.base/sigbpt.exp: cont bp after segv; set breakpoint 0 of 2
+PASS: gdb.base/sigbpt.exp: cont bp after segv; set breakpoint 1 of 2
+FAIL: gdb.base/sigbpt.exp: cont bp after segv; continue to breakpoint at fault
+FAIL: gdb.base/sigbpt.exp: cont bp after segv; stepi fault
+PASS: gdb.base/sigbpt.exp: cont bp after segv; clear breakpoint 0 of 2
+PASS: gdb.base/sigbpt.exp: cont bp after segv; clear breakpoint 1 of 2
+PASS: gdb.base/sigbpt.exp: rerun to main
+PASS: gdb.base/sigbpt.exp: cont bp before and after segv; pass SIGSEGV
+PASS: gdb.base/sigbpt.exp: cont bp before and after segv; continue to keeper
+PASS: gdb.base/sigbpt.exp: cont bp before and after segv; nopass SIGSEGV
+PASS: gdb.base/sigbpt.exp: cont bp before and after segv; set breakpoint 0 of 3
+PASS: gdb.base/sigbpt.exp: cont bp before and after segv; set breakpoint 1 of 3
+PASS: gdb.base/sigbpt.exp: cont bp before and after segv; set breakpoint 2 of 3
+FAIL: gdb.base/sigbpt.exp: cont bp before and after segv; continue to breakpoint at fault
+FAIL: gdb.base/sigbpt.exp: cont bp before and after segv; stepi fault
+PASS: gdb.base/sigbpt.exp: cont bp before and after segv; clear breakpoint 0 of 3
+PASS: gdb.base/sigbpt.exp: cont bp before and after segv; clear breakpoint 1 of 3
+PASS: gdb.base/sigbpt.exp: cont bp before and after segv; clear breakpoint 2 of 3
+Running ./gdb.base/sigchld.exp ...
+PASS: gdb.base/sigchld.exp: set breakpoint at success exit
+PASS: gdb.base/sigchld.exp: set breakpoint at failure exit
+PASS: gdb.base/sigchld.exp: SIGCHLD blocked in inferior
+Running ./gdb.base/siginfo-addr.exp ...
+Running ./gdb.base/siginfo.exp ...
+PASS: gdb.base/siginfo.exp: display/i $pc
+PASS: gdb.base/siginfo.exp: break handler
+PASS: gdb.base/siginfo.exp: continue to stepi handler
+PASS: gdb.base/siginfo.exp: backtrace for nexti
+PASS: gdb.base/siginfo.exp: step out of handler
+Running ./gdb.base/siginfo-infcall.exp ...
+PASS: gdb.base/siginfo-infcall.exp: continue to SIGUSR1
+PASS: gdb.base/siginfo-infcall.exp: p callme ()
+PASS: gdb.base/siginfo-infcall.exp: continue to the handler
+Running ./gdb.base/siginfo-obj.exp ...
+PASS: gdb.base/siginfo-obj.exp: continue to signal
+PASS: gdb.base/siginfo-obj.exp: save a core file
+PASS: gdb.base/siginfo-obj.exp: Extract si_addr
+PASS: gdb.base/siginfo-obj.exp: Extract si_errno
+PASS: gdb.base/siginfo-obj.exp: Extract si_code
+PASS: gdb.base/siginfo-obj.exp: Extract si_signo
+PASS: gdb.base/siginfo-obj.exp: break 38
+PASS: gdb.base/siginfo-obj.exp: continue to handler
+PASS: gdb.base/siginfo-obj.exp: p ssi_addr
+PASS: gdb.base/siginfo-obj.exp: p ssi_errno
+PASS: gdb.base/siginfo-obj.exp: p ssi_code
+PASS: gdb.base/siginfo-obj.exp: p ssi_signo
+PASS: gdb.base/siginfo-obj.exp: continue to signal
+PASS: gdb.base/siginfo-obj.exp: p $_siginfo._sifields._sigfault.si_addr = 0x666
+PASS: gdb.base/siginfo-obj.exp: p $_siginfo.si_errno = 666
+PASS: gdb.base/siginfo-obj.exp: p $_siginfo.si_code = 999
+PASS: gdb.base/siginfo-obj.exp: p $_siginfo.si_signo = 11
+PASS: gdb.base/siginfo-obj.exp: break 38
+PASS: gdb.base/siginfo-obj.exp: continue to handler
+PASS: gdb.base/siginfo-obj.exp: p ssi_addr
+PASS: gdb.base/siginfo-obj.exp: p ssi_errno
+PASS: gdb.base/siginfo-obj.exp: p ssi_code
+PASS: gdb.base/siginfo-obj.exp: p ssi_signo
+FAIL: gdb.base/siginfo-obj.exp: core siginfo-obj.gcore
+FAIL: gdb.base/siginfo-obj.exp: p $_siginfo.si_signo from core file
+FAIL: gdb.base/siginfo-obj.exp: p $_siginfo.si_errno from core file
+FAIL: gdb.base/siginfo-obj.exp: p $_siginfo.si_code from core file
+FAIL: gdb.base/siginfo-obj.exp: p $_siginfo._sifields._sigfault.si_addr from core file
+Running ./gdb.base/siginfo-thread.exp ...
+PASS: gdb.base/siginfo-thread.exp: successfully compiled posix threads test case
+PASS: gdb.base/siginfo-thread.exp: continue to signal
+PASS: gdb.base/siginfo-thread.exp: save a core file
+PASS: gdb.base/siginfo-thread.exp: Extract si_addr
+PASS: gdb.base/siginfo-thread.exp: Extract si_errno
+PASS: gdb.base/siginfo-thread.exp: Extract si_code
+PASS: gdb.base/siginfo-thread.exp: Extract si_signo
+PASS: gdb.base/siginfo-thread.exp: break 39
+PASS: gdb.base/siginfo-thread.exp: continue to handler
+PASS: gdb.base/siginfo-thread.exp: p ssi_addr
+PASS: gdb.base/siginfo-thread.exp: p ssi_errno
+PASS: gdb.base/siginfo-thread.exp: p ssi_code
+PASS: gdb.base/siginfo-thread.exp: p ssi_signo
+PASS: gdb.base/siginfo-thread.exp: thread 1
+PASS: gdb.base/siginfo-thread.exp: test signal in main thread
+FAIL: gdb.base/siginfo-thread.exp: core siginfo-thread.gcore
+FAIL: gdb.base/siginfo-thread.exp: p $_siginfo.si_signo from core file
+FAIL: gdb.base/siginfo-thread.exp: p $_siginfo.si_errno from core file
+FAIL: gdb.base/siginfo-thread.exp: p $_siginfo.si_code from core file
+FAIL: gdb.base/siginfo-thread.exp: p $_siginfo._sifields._sigfault.si_addr from core file
+PASS: gdb.base/siginfo-thread.exp: set variable $count = 0
+PASS: gdb.base/siginfo-thread.exp: select thread 1 with core file
+FAIL: gdb.base/siginfo-thread.exp: update counter in thread 1
+PASS: gdb.base/siginfo-thread.exp: select thread 2 with core file
+FAIL: gdb.base/siginfo-thread.exp: update counter in thread 2
+FAIL: gdb.base/siginfo-thread.exp: print $count
+Running ./gdb.base/signals.exp ...
+PASS: gdb.base/signals.exp: handle all print
+PASS: gdb.base/signals.exp: set variable count = 0
+PASS: gdb.base/signals.exp: break handler if 0
+PASS: gdb.base/signals.exp: set $handler_breakpoint_number = $bpnum
+PASS: gdb.base/signals.exp: next to signal
+PASS: gdb.base/signals.exp: next to alarm #1
+PASS: gdb.base/signals.exp: next to ++count #1
+PASS: gdb.base/signals.exp: p func1 () #1
+PASS: gdb.base/signals.exp: p count #1
+PASS: gdb.base/signals.exp: condition $handler_breakpoint_number
+PASS: gdb.base/signals.exp: next to alarm #2
+PASS: gdb.base/signals.exp: next to ++count #2
+PASS: gdb.base/signals.exp: p func1 () #2
+PASS: gdb.base/signals.exp: backtrace from handler when calling func1
+PASS: gdb.base/signals.exp: continue
+PASS: gdb.base/signals.exp: p count #2
+PASS: gdb.base/signals.exp: info signals
+PASS: gdb.base/signals.exp: info signal SIGTRAP
+PASS: gdb.base/signals.exp: info signal 5
+PASS: gdb.base/signals.exp: handle without arguments
+PASS: gdb.base/signals.exp: handle with bogus SIG
+PASS: gdb.base/signals.exp: handle SIG with bogus action
+PASS: gdb.base/signals.exp: handle SIG with multiple conflicting actions
+PASS: gdb.base/signals.exp: handle SIG parses all legal actions
+PASS: gdb.base/signals.exp: handle multiple SIGs
+PASS: gdb.base/signals.exp: override SIGTRAP
+PASS: gdb.base/signals.exp: invalid signal number rejected
+PASS: gdb.base/signals.exp: handle multiple SIGs via integer range
+PASS: gdb.base/signals.exp: handle multiple SIGs via reverse integer range
+PASS: gdb.base/signals.exp: override SIGINT
+PASS: gdb.base/signals.exp: signal without arguments disallowed
+PASS: gdb.base/signals.exp: signal SIGUSR1
+PASS: gdb.base/signals.exp: backtrace for SIGUSR1
+Running ./gdb.base/signest.exp ...
+PASS: gdb.base/signest.exp: continue to fault
+PASS: gdb.base/signest.exp: set conditional breakpoint
+PASS: gdb.base/signest.exp: pass SIGSEGV
+PASS: gdb.base/signest.exp: pass SIGBUS
+PASS: gdb.base/signest.exp: run through nested faults
+Running ./gdb.base/signull.exp ...
+PASS: gdb.base/signull.exp: set for function pointer probe
+PASS: gdb.base/signull.exp: probe function pointer (function entry-point)
+PASS: gdb.base/signull.exp: rerun to main
+PASS: gdb.base/signull.exp: break bowler
+PASS: gdb.base/signull.exp: break keeper
+PASS: gdb.base/signull.exp: handle SIGSEGV
+PASS: gdb.base/signull.exp: handle SIGBUS
+PASS: gdb.base/signull.exp: data read; start with the bowler
+PASS: gdb.base/signull.exp: data read; select the pointer type
+PASS: gdb.base/signull.exp: data read; take the SIGSEGV
+PASS: gdb.base/signull.exp: data read; backtrace from SIGSEGV
+PASS: gdb.base/signull.exp: data read; continue to the keeper
+PASS: gdb.base/signull.exp: data read; backtrace from keeper through SIGSEGV
+PASS: gdb.base/signull.exp: data write; start with the bowler
+PASS: gdb.base/signull.exp: data write; select the pointer type
+PASS: gdb.base/signull.exp: data write; take the SIGSEGV
+PASS: gdb.base/signull.exp: data write; backtrace from SIGSEGV
+PASS: gdb.base/signull.exp: data write; continue to the keeper
+PASS: gdb.base/signull.exp: data write; backtrace from keeper through SIGSEGV
+PASS: gdb.base/signull.exp: code; start with the bowler
+PASS: gdb.base/signull.exp: code; select the pointer type
+PASS: gdb.base/signull.exp: code; take the SIGSEGV
+PASS: gdb.base/signull.exp: code; backtrace from SIGSEGV
+PASS: gdb.base/signull.exp: code; continue to the keeper
+PASS: gdb.base/signull.exp: code; backtrace from keeper through SIGSEGV
+Running ./gdb.base/sigrepeat.exp ...
+PASS: gdb.base/sigrepeat.exp: advance to infinite loop
+PASS: gdb.base/sigrepeat.exp: next
+Running ./gdb.base/sigstep.exp ...
+PASS: gdb.base/sigstep.exp: display/i $pc
+PASS: gdb.base/sigstep.exp: break handler
+PASS: gdb.base/sigstep.exp: continue to stepi handler
+PASS: gdb.base/sigstep.exp: backtrace for nexti
+PASS: gdb.base/sigstep.exp: step from handler; continue to handler
+PASS: gdb.base/sigstep.exp: step from handler; leave handler
+PASS: gdb.base/sigstep.exp: stepi from handleri; continue to handler
+PASS: gdb.base/sigstep.exp: stepi from handleri; leave handler
+PASS: gdb.base/sigstep.exp: stepi from handleri; leave signal trampoline (in main)
+PASS: gdb.base/sigstep.exp: next from handler; continue to handler
+PASS: gdb.base/sigstep.exp: next from handler; leave handler
+PASS: gdb.base/sigstep.exp: nexti from handleri; continue to handler
+PASS: gdb.base/sigstep.exp: nexti from handleri; leave handler
+PASS: gdb.base/sigstep.exp: nexti from handleri; leave signal trampoline (in main)
+PASS: gdb.base/sigstep.exp: finish from handleri; continue to handler
+PASS: gdb.base/sigstep.exp: finish from handleri; leave handler
+PASS: gdb.base/sigstep.exp: finish from handleri; leave signal trampoline (in main)
+PASS: gdb.base/sigstep.exp: return from handleri; continue to handler
+PASS: gdb.base/sigstep.exp: return from handleri; leave handler
+PASS: gdb.base/sigstep.exp: return from handleri; leave signal trampoline (in main)
+PASS: gdb.base/sigstep.exp: Set done as return will have skipped it
+PASS: gdb.base/sigstep.exp: set itimer = itimer_real
+PASS: gdb.base/sigstep.exp: break 79
+PASS: gdb.base/sigstep.exp: step to handler; resync
+PASS: gdb.base/sigstep.exp: step to handler; advance to infinite loop
+PASS: gdb.base/sigstep.exp: step to handler; break handler
+PASS: gdb.base/sigstep.exp: step to handler; performing step
+PASS: gdb.base/sigstep.exp: step to handler; clear handler
+PASS: gdb.base/sigstep.exp: next to handler; resync
+PASS: gdb.base/sigstep.exp: next to handler; advance to infinite loop
+PASS: gdb.base/sigstep.exp: next to handler; break handler
+PASS: gdb.base/sigstep.exp: next to handler; performing next
+PASS: gdb.base/sigstep.exp: next to handler; clear handler
+PASS: gdb.base/sigstep.exp: continue to handler; resync
+PASS: gdb.base/sigstep.exp: continue to handler; advance to infinite loop
+PASS: gdb.base/sigstep.exp: continue to handler; break handler
+PASS: gdb.base/sigstep.exp: continue to handler; performing continue
+PASS: gdb.base/sigstep.exp: continue to handler; clear handler
+PASS: gdb.base/sigstep.exp: step to handler entry; resync
+PASS: gdb.base/sigstep.exp: step to handler entry; advance to infinite loop
+PASS: gdb.base/sigstep.exp: step to handler entry; break handler
+PASS: gdb.base/sigstep.exp: step to handler entry; performing step
+PASS: gdb.base/sigstep.exp: step to handler entry; clear handler
+PASS: gdb.base/sigstep.exp: next to handler entry; resync
+PASS: gdb.base/sigstep.exp: next to handler entry; advance to infinite loop
+PASS: gdb.base/sigstep.exp: next to handler entry; break handler
+PASS: gdb.base/sigstep.exp: next to handler entry; performing next
+PASS: gdb.base/sigstep.exp: next to handler entry; clear handler
+PASS: gdb.base/sigstep.exp: continue to handler entry; resync
+PASS: gdb.base/sigstep.exp: continue to handler entry; advance to infinite loop
+PASS: gdb.base/sigstep.exp: continue to handler entry; break handler
+PASS: gdb.base/sigstep.exp: continue to handler entry; performing continue
+PASS: gdb.base/sigstep.exp: continue to handler entry; clear handler
+PASS: gdb.base/sigstep.exp: step over handler; resync
+PASS: gdb.base/sigstep.exp: step over handler; advance to infinite loop
+PASS: gdb.base/sigstep.exp: step over handler; performing step
+PASS: gdb.base/sigstep.exp: next over handler; resync
+PASS: gdb.base/sigstep.exp: next over handler; advance to infinite loop
+PASS: gdb.base/sigstep.exp: next over handler; performing next
+PASS: gdb.base/sigstep.exp: continue over handler; resync
+PASS: gdb.base/sigstep.exp: continue over handler; advance to infinite loop
+PASS: gdb.base/sigstep.exp: continue over handler; performing continue
+PASS: gdb.base/sigstep.exp: step on breakpoint, to handler; resync
+PASS: gdb.base/sigstep.exp: step on breakpoint, to handler; break infinite loop
+PASS: gdb.base/sigstep.exp: step on breakpoint, to handler; break handler
+PASS: gdb.base/sigstep.exp: step on breakpoint, to handler; continue to infinite loop
+PASS: gdb.base/sigstep.exp: step on breakpoint, to handler; performing step
+PASS: gdb.base/sigstep.exp: step on breakpoint, to handler; clear infinite loop
+PASS: gdb.base/sigstep.exp: step on breakpoint, to handler; clear handler
+PASS: gdb.base/sigstep.exp: next on breakpoint, to handler; resync
+PASS: gdb.base/sigstep.exp: next on breakpoint, to handler; break infinite loop
+PASS: gdb.base/sigstep.exp: next on breakpoint, to handler; break handler
+PASS: gdb.base/sigstep.exp: next on breakpoint, to handler; continue to infinite loop
+PASS: gdb.base/sigstep.exp: next on breakpoint, to handler; performing next
+PASS: gdb.base/sigstep.exp: next on breakpoint, to handler; clear infinite loop
+PASS: gdb.base/sigstep.exp: next on breakpoint, to handler; clear handler
+PASS: gdb.base/sigstep.exp: continue on breakpoint, to handler; resync
+PASS: gdb.base/sigstep.exp: continue on breakpoint, to handler; break infinite loop
+PASS: gdb.base/sigstep.exp: continue on breakpoint, to handler; break handler
+PASS: gdb.base/sigstep.exp: continue on breakpoint, to handler; continue to infinite loop
+PASS: gdb.base/sigstep.exp: continue on breakpoint, to handler; performing continue
+PASS: gdb.base/sigstep.exp: continue on breakpoint, to handler; clear infinite loop
+PASS: gdb.base/sigstep.exp: continue on breakpoint, to handler; clear handler
+PASS: gdb.base/sigstep.exp: step on breakpoint, to handler entry; resync
+PASS: gdb.base/sigstep.exp: step on breakpoint, to handler entry; break infinite loop
+PASS: gdb.base/sigstep.exp: step on breakpoint, to handler entry; break handler
+PASS: gdb.base/sigstep.exp: step on breakpoint, to handler entry; continue to infinite loop
+PASS: gdb.base/sigstep.exp: step on breakpoint, to handler entry; performing step
+PASS: gdb.base/sigstep.exp: step on breakpoint, to handler entry; clear infinite loop
+PASS: gdb.base/sigstep.exp: step on breakpoint, to handler entry; clear handler
+PASS: gdb.base/sigstep.exp: next on breakpoint, to handler entry; resync
+PASS: gdb.base/sigstep.exp: next on breakpoint, to handler entry; break infinite loop
+PASS: gdb.base/sigstep.exp: next on breakpoint, to handler entry; break handler
+PASS: gdb.base/sigstep.exp: next on breakpoint, to handler entry; continue to infinite loop
+PASS: gdb.base/sigstep.exp: next on breakpoint, to handler entry; performing next
+PASS: gdb.base/sigstep.exp: next on breakpoint, to handler entry; clear infinite loop
+PASS: gdb.base/sigstep.exp: next on breakpoint, to handler entry; clear handler
+PASS: gdb.base/sigstep.exp: continue on breakpoint, to handler entry; resync
+PASS: gdb.base/sigstep.exp: continue on breakpoint, to handler entry; break infinite loop
+PASS: gdb.base/sigstep.exp: continue on breakpoint, to handler entry; break handler
+PASS: gdb.base/sigstep.exp: continue on breakpoint, to handler entry; continue to infinite loop
+PASS: gdb.base/sigstep.exp: continue on breakpoint, to handler entry; performing continue
+PASS: gdb.base/sigstep.exp: continue on breakpoint, to handler entry; clear infinite loop
+PASS: gdb.base/sigstep.exp: continue on breakpoint, to handler entry; clear handler
+PASS: gdb.base/sigstep.exp: step on breakpoint, skip handler; resync
+PASS: gdb.base/sigstep.exp: step on breakpoint, skip handler; break infinite loop
+PASS: gdb.base/sigstep.exp: step on breakpoint, skip handler; continue to infinite loop
+PASS: gdb.base/sigstep.exp: step on breakpoint, skip handler; performing step
+PASS: gdb.base/sigstep.exp: step on breakpoint, skip handler; clear infinite loop
+PASS: gdb.base/sigstep.exp: next on breakpoint, skip handler; resync
+PASS: gdb.base/sigstep.exp: next on breakpoint, skip handler; break infinite loop
+PASS: gdb.base/sigstep.exp: next on breakpoint, skip handler; continue to infinite loop
+PASS: gdb.base/sigstep.exp: next on breakpoint, skip handler; performing next
+PASS: gdb.base/sigstep.exp: next on breakpoint, skip handler; clear infinite loop
+PASS: gdb.base/sigstep.exp: continue on breakpoint, skip handler; resync
+PASS: gdb.base/sigstep.exp: continue on breakpoint, skip handler; break infinite loop
+PASS: gdb.base/sigstep.exp: continue on breakpoint, skip handler; continue to infinite loop
+PASS: gdb.base/sigstep.exp: continue on breakpoint, skip handler; performing continue
+PASS: gdb.base/sigstep.exp: continue on breakpoint, skip handler; clear infinite loop
+Running ./gdb.base/sizeof.exp ...
+Running ./gdb.base/skip.exp ...
+PASS: gdb.base/skip.exp: skip file (no default file)
+PASS: gdb.base/skip.exp: skip function
+PASS: gdb.base/skip.exp: skip (no default function)
+PASS: gdb.base/skip.exp: info skip empty
+PASS: gdb.base/skip.exp: skip file (skip.c)
+PASS: gdb.base/skip.exp: skip (main)
+PASS: gdb.base/skip.exp: skip file skip1.c
+PASS: gdb.base/skip.exp: skip function baz
+PASS: gdb.base/skip.exp: skip enable 999
+PASS: gdb.base/skip.exp: skip disable 999
+PASS: gdb.base/skip.exp: skip delete 999
+PASS: gdb.base/skip.exp: skip enable a
+PASS: gdb.base/skip.exp: skip disable a
+PASS: gdb.base/skip.exp: skip delete a
+PASS: gdb.base/skip.exp: info skip 999
+PASS: gdb.base/skip.exp: info skip
+PASS: gdb.base/skip.exp: step in the main
+PASS: gdb.base/skip.exp: step after all ignored
+PASS: gdb.base/skip.exp: skip delete 1
+PASS: gdb.base/skip.exp: info skip (delete 1)
+PASS: gdb.base/skip.exp: step after deleting 1 (1)
+PASS: gdb.base/skip.exp: step after deleting 1 (2)
+PASS: gdb.base/skip.exp: step after deleting 1 (3)
+PASS: gdb.base/skip.exp: skip disable 3
+PASS: gdb.base/skip.exp: info skip shows entry as disabled
+PASS: gdb.base/skip.exp: step after disabling 3 (1)
+PASS: gdb.base/skip.exp: step after disabling 3 (2)
+PASS: gdb.base/skip.exp: step after disabling 3 (3)
+PASS: gdb.base/skip.exp: step after disabling 3 (4)
+PASS: gdb.base/skip.exp: step after disabling 3 (5)
+PASS: gdb.base/skip.exp: skip enable 3
+PASS: gdb.base/skip.exp: info skip shows entry as enabled
+PASS: gdb.base/skip.exp: step after enable 3 (1)
+PASS: gdb.base/skip.exp: step after enable 3 (2)
+PASS: gdb.base/skip.exp: step after enable 3 (3)
+PASS: gdb.base/skip.exp: skip disable
+PASS: gdb.base/skip.exp: info skip after disabling all
+PASS: gdb.base/skip.exp: skip enable
+PASS: gdb.base/skip.exp: info skip after enabling all
+PASS: gdb.base/skip.exp: skip disable 4 2-3
+PASS: gdb.base/skip.exp: info skip after disabling 4 2-3
+PASS: gdb.base/skip.exp: skip enable 2-3
+PASS: gdb.base/skip.exp: info skip after enabling 2-3
+PASS: gdb.base/skip.exp: info skip 2-3
+PASS: gdb.base/skip.exp: skip delete 2 3
+PASS: gdb.base/skip.exp: info skip after deleting 2 3
+PASS: gdb.base/skip.exp: skip delete
+PASS: gdb.base/skip.exp: info skip after deleting all
+Running ./gdb.base/skip-solib.exp ...
+Running ./gdb.base/so-impl-ld.exp ...
+PASS: gdb.base/so-impl-ld.exp: step over solib call
+PASS: gdb.base/so-impl-ld.exp: step into solib call
+PASS: gdb.base/so-impl-ld.exp: step in solib call
+PASS: gdb.base/so-impl-ld.exp: step out of solib call
+Running ./gdb.base/so-indr-cl.exp ...
+Running ./gdb.base/solib-corrupted.exp ...
+Running ./gdb.base/solib-disc.exp ...
+PASS: gdb.base/solib-disc.exp: set stop-on-solib-events 1
+PASS: gdb.base/solib-disc.exp: continue to load
+PASS: gdb.base/solib-disc.exp: save $pc after load
+PASS: gdb.base/solib-disc.exp: disconnect after load
+PASS: gdb.base/solib-disc.exp: reconnect after load
+PASS: gdb.base/solib-disc.exp: check $pc after load
+PASS: gdb.base/solib-disc.exp: continue to unload
+PASS: gdb.base/solib-disc.exp: save $pc after unload
+PASS: gdb.base/solib-disc.exp: disconnect after unload
+PASS: gdb.base/solib-disc.exp: reconnect after unload
+PASS: gdb.base/solib-disc.exp: check $pc after unload
+Running ./gdb.base/solib-display.exp ...
+Running ./gdb.base/solib.exp ...
+Running ./gdb.base/solib-nodir.exp ...
+Running ./gdb.base/solib-overlap.exp ...
+Running ./gdb.base/solib-symbol.exp ...
+PASS: gdb.base/solib-symbol.exp: foo2 in main
+PASS: gdb.base/solib-symbol.exp: foo in libmd
+PASS: gdb.base/solib-symbol.exp: continue
+PASS: gdb.base/solib-symbol.exp: foo2 in mdlib
+Running ./gdb.base/solib-weak.exp ...
+PASS: gdb.base/solib-weak.exp: run to breakpoint - lib1 nodebug, lib2 nodebug, lib1 first
+PASS: gdb.base/solib-weak.exp: run to breakpoint - lib1 nodebug, lib2 nodebug, lib2 first
+PASS: gdb.base/solib-weak.exp: run to breakpoint - lib1 nodebug, lib2 debug, lib1 first
+PASS: gdb.base/solib-weak.exp: run to breakpoint - lib1 nodebug, lib2 debug, lib2 first
+PASS: gdb.base/solib-weak.exp: run to breakpoint - lib1 debug, lib2 nodebug, lib1 first
+PASS: gdb.base/solib-weak.exp: run to breakpoint - lib1 debug, lib2 nodebug, lib2 first
+PASS: gdb.base/solib-weak.exp: run to breakpoint - lib1 debug, lib2 debug, lib1 first
+PASS: gdb.base/solib-weak.exp: run to breakpoint - lib1 debug, lib2 debug, lib2 first
+Running ./gdb.base/source.exp ...
+PASS: gdb.base/source.exp: script contains error
+PASS: gdb.base/source.exp: source -v
+PASS: gdb.base/source.exp: source after -v
+PASS: gdb.base/source.exp: set search directories
+PASS: gdb.base/source.exp: source -s
+PASS: gdb.base/source.exp: source -s -v
+PASS: gdb.base/source.exp: source -v -s
+Running ./gdb.base/stack-checking.exp ...
+PASS: gdb.base/stack-checking.exp: continue to breakpoint: breakpoint for small frame
+PASS: gdb.base/stack-checking.exp: bt
+PASS: gdb.base/stack-checking.exp: continue to breakpoint: breakpoint for medium frame
+PASS: gdb.base/stack-checking.exp: bt
+PASS: gdb.base/stack-checking.exp: continue to breakpoint: breakpoint for big frame
+PASS: gdb.base/stack-checking.exp: bt
+Running ./gdb.base/stale-infcall.exp ...
+PASS: gdb.base/stale-infcall.exp: continue to breakpoint: test-next
+PASS: gdb.base/stale-infcall.exp: set $test_fail_bpnum=$bpnum
+XFAIL: gdb.base/stale-infcall.exp: test system longjmp tracking support
+UNTESTED: gdb.base/stale-infcall.exp: System lacks support for tracking longjmps
+Running ./gdb.base/stap-probe.exp ...
+gdb compile failed, ./gdb.base/stap-probe.c:39:21: fatal error: sys/sdt.h: No such file or directory
+ #include <sys/sdt.h>
+ ^
+compilation terminated.
+UNTESTED: gdb.base/stap-probe.exp: without semaphore, not optimized: stap-probe.exp
+UNTESTED: gdb.base/stap-probe.exp: without semaphore, not optimized: stap-probe.exp
+Running ./gdb.base/start.exp ...
+UNTESTED: gdb.base/start.exp: start
+Running ./gdb.base/step-break.exp ...
+PASS: gdb.base/step-break.exp: breakpoint line number
+PASS: gdb.base/step-break.exp: run until breakpoint set at a line number
+PASS: gdb.base/step-break.exp: next 2 (1)
+PASS: gdb.base/step-break.exp: next 2 (2)
+PASS: gdb.base/step-break.exp: next 2 (3)
+PASS: gdb.base/step-break.exp: next 2 (4)
+PASS: gdb.base/step-break.exp: next 2 (5)
+PASS: gdb.base/step-break.exp: next 2 (6)
+Running ./gdb.base/step-bt.exp ...
+PASS: gdb.base/step-bt.exp: breakpoint at first instruction of hello()
+PASS: gdb.base/step-bt.exp: run to hello()
+PASS: gdb.base/step-bt.exp: step first instruction
+PASS: gdb.base/step-bt.exp: backtrace after first instruction step
+PASS: gdb.base/step-bt.exp: step second instruction
+PASS: gdb.base/step-bt.exp: backtrace after second instruction step
+Running ./gdb.base/step-line.exp ...
+PASS: gdb.base/step-line.exp: break f1
+PASS: gdb.base/step-line.exp: continue to f1
+PASS: gdb.base/step-line.exp: next over dummy 1
+PASS: gdb.base/step-line.exp: next to dummy 2
+PASS: gdb.base/step-line.exp: next over dummy 2
+PASS: gdb.base/step-line.exp: step into f2
+PASS: gdb.base/step-line.exp: next over dummy 4
+PASS: gdb.base/step-line.exp: next to dummy 5
+PASS: gdb.base/step-line.exp: next to dummy 6
+PASS: gdb.base/step-line.exp: next over dummy 6
+PASS: gdb.base/step-line.exp: next to dummy 7
+PASS: gdb.base/step-line.exp: next to dummy 8
+PASS: gdb.base/step-line.exp: next over dummy 8
+PASS: gdb.base/step-line.exp: next to dummy 9
+PASS: gdb.base/step-line.exp: next to dummy 10
+PASS: gdb.base/step-line.exp: next over dummy 10
+Running ./gdb.base/step-resume-infcall.exp ...
+PASS: gdb.base/step-resume-infcall.exp: step
+PASS: gdb.base/step-resume-infcall.exp: up
+PASS: gdb.base/step-resume-infcall.exp: set $b=$pc
+PASS: gdb.base/step-resume-infcall.exp: print $bpnum
+PASS: gdb.base/step-resume-infcall.exp: disass/m
+PASS: gdb.base/step-resume-infcall.exp: info breakpoints
+PASS: gdb.base/step-resume-infcall.exp: next
+PASS: gdb.base/step-resume-infcall.exp: p cond_hit
+Running ./gdb.base/step-symless.exp ...
+PASS: gdb.base/step-symless.exp: strip stub symbols
+PASS: gdb.base/step-symless.exp: step
+Running ./gdb.base/step-test.exp ...
+PASS: gdb.base/step-test.exp: next 1
+PASS: gdb.base/step-test.exp: step 1
+PASS: gdb.base/step-test.exp: next 2
+PASS: gdb.base/step-test.exp: step 3
+PASS: gdb.base/step-test.exp: next 3
+PASS: gdb.base/step-test.exp: next over
+PASS: gdb.base/step-test.exp: step into
+PASS: gdb.base/step-test.exp: step out
+PASS: gdb.base/step-test.exp: stepi to next line
+PASS: gdb.base/step-test.exp: stepi into function
+FAIL: gdb.base/step-test.exp: stepi into function's first source line
+FAIL: gdb.base/step-test.exp: stepi: finish call
+FAIL: gdb.base/step-test.exp: nexti over function
+PASS: gdb.base/step-test.exp: set breakpoint at call to large_struct_by_value
+PASS: gdb.base/step-test.exp: run to pass large struct
+PASS: gdb.base/step-test.exp: large struct by value
+PASS: gdb.base/step-test.exp: continue until exit at step-test.exp
+Running ./gdb.base/store.exp ...
+PASS: gdb.base/store.exp: tbreak wack_charest
+PASS: gdb.base/store.exp: continue to wack_charest
+PASS: gdb.base/store.exp: var charest l; print old l, expecting -1 .*
+PASS: gdb.base/store.exp: var charest l; print old r, expecting -2 .*
+PASS: gdb.base/store.exp: var charest l; setting l to 4
+PASS: gdb.base/store.exp: var charest l; print new l, expecting 4 ..004.
+PASS: gdb.base/store.exp: var charest l; next over add call
+PASS: gdb.base/store.exp: var charest l; print incremented l, expecting 2 ..002.
+PASS: gdb.base/store.exp: tbreak wack_short
+PASS: gdb.base/store.exp: continue to wack_short
+PASS: gdb.base/store.exp: var short l; print old l, expecting -1
+PASS: gdb.base/store.exp: var short l; print old r, expecting -2
+PASS: gdb.base/store.exp: var short l; setting l to 4
+PASS: gdb.base/store.exp: var short l; print new l, expecting 4
+PASS: gdb.base/store.exp: var short l; next over add call
+PASS: gdb.base/store.exp: var short l; print incremented l, expecting 2
+PASS: gdb.base/store.exp: tbreak wack_int
+PASS: gdb.base/store.exp: continue to wack_int
+PASS: gdb.base/store.exp: var int l; print old l, expecting -1
+PASS: gdb.base/store.exp: var int l; print old r, expecting -2
+PASS: gdb.base/store.exp: var int l; setting l to 4
+PASS: gdb.base/store.exp: var int l; print new l, expecting 4
+PASS: gdb.base/store.exp: var int l; next over add call
+PASS: gdb.base/store.exp: var int l; print incremented l, expecting 2
+PASS: gdb.base/store.exp: tbreak wack_long
+PASS: gdb.base/store.exp: continue to wack_long
+PASS: gdb.base/store.exp: var long l; print old l, expecting -1
+PASS: gdb.base/store.exp: var long l; print old r, expecting -2
+PASS: gdb.base/store.exp: var long l; setting l to 4
+PASS: gdb.base/store.exp: var long l; print new l, expecting 4
+PASS: gdb.base/store.exp: var long l; next over add call
+PASS: gdb.base/store.exp: var long l; print incremented l, expecting 2
+PASS: gdb.base/store.exp: tbreak wack_longest
+PASS: gdb.base/store.exp: continue to wack_longest
+PASS: gdb.base/store.exp: var longest l; print old l, expecting -1
+FAIL: gdb.base/store.exp: var longest l; print old r, expecting -2
+PASS: gdb.base/store.exp: var longest l; setting l to 4
+PASS: gdb.base/store.exp: var longest l; print new l, expecting 4
+PASS: gdb.base/store.exp: var longest l; next over add call
+PASS: gdb.base/store.exp: var longest l; print incremented l, expecting 2
+PASS: gdb.base/store.exp: tbreak wack_float
+PASS: gdb.base/store.exp: continue to wack_float
+FAIL: gdb.base/store.exp: var float l; print old l, expecting -1
+PASS: gdb.base/store.exp: var float l; print old r, expecting -2
+PASS: gdb.base/store.exp: var float l; setting l to 4
+FAIL: gdb.base/store.exp: var float l; print new l, expecting 4
+PASS: gdb.base/store.exp: var float l; next over add call
+FAIL: gdb.base/store.exp: var float l; print incremented l, expecting 2
+PASS: gdb.base/store.exp: tbreak wack_double
+PASS: gdb.base/store.exp: continue to wack_double
+FAIL: gdb.base/store.exp: var double l; print old l, expecting -1
+FAIL: gdb.base/store.exp: var double l; print old r, expecting -2
+PASS: gdb.base/store.exp: var double l; setting l to 4
+FAIL: gdb.base/store.exp: var double l; print new l, expecting 4
+PASS: gdb.base/store.exp: var double l; next over add call
+FAIL: gdb.base/store.exp: var double l; print incremented l, expecting 2
+PASS: gdb.base/store.exp: tbreak wack_doublest
+PASS: gdb.base/store.exp: continue to wack_doublest
+FAIL: gdb.base/store.exp: var doublest l; print old l, expecting -1
+FAIL: gdb.base/store.exp: var doublest l; print old r, expecting -2
+FAIL: gdb.base/store.exp: var doublest l; setting l to 4
+FAIL: gdb.base/store.exp: var doublest l; print new l, expecting 4
+PASS: gdb.base/store.exp: var doublest l; next over add call
+FAIL: gdb.base/store.exp: var doublest l; print incremented l, expecting 2
+PASS: gdb.base/store.exp: tbreak add_charest
+PASS: gdb.base/store.exp: continue to add_charest
+PASS: gdb.base/store.exp: upvar charest l; up
+PASS: gdb.base/store.exp: upvar charest l; print old l, expecting -1 .*
+PASS: gdb.base/store.exp: upvar charest l; print old r, expecting -2 .*
+PASS: gdb.base/store.exp: upvar charest l; set l to 4
+PASS: gdb.base/store.exp: upvar charest l; print new l, expecting 4 ..004.
+PASS: gdb.base/store.exp: tbreak add_short
+PASS: gdb.base/store.exp: continue to add_short
+PASS: gdb.base/store.exp: upvar short l; up
+PASS: gdb.base/store.exp: upvar short l; print old l, expecting -1
+PASS: gdb.base/store.exp: upvar short l; print old r, expecting -2
+PASS: gdb.base/store.exp: upvar short l; set l to 4
+PASS: gdb.base/store.exp: upvar short l; print new l, expecting 4
+PASS: gdb.base/store.exp: tbreak add_int
+PASS: gdb.base/store.exp: continue to add_int
+PASS: gdb.base/store.exp: upvar int l; up
+PASS: gdb.base/store.exp: upvar int l; print old l, expecting -1
+PASS: gdb.base/store.exp: upvar int l; print old r, expecting -2
+PASS: gdb.base/store.exp: upvar int l; set l to 4
+PASS: gdb.base/store.exp: upvar int l; print new l, expecting 4
+PASS: gdb.base/store.exp: tbreak add_long
+PASS: gdb.base/store.exp: continue to add_long
+PASS: gdb.base/store.exp: upvar long l; up
+PASS: gdb.base/store.exp: upvar long l; print old l, expecting -1
+PASS: gdb.base/store.exp: upvar long l; print old r, expecting -2
+PASS: gdb.base/store.exp: upvar long l; set l to 4
+PASS: gdb.base/store.exp: upvar long l; print new l, expecting 4
+PASS: gdb.base/store.exp: tbreak add_longest
+PASS: gdb.base/store.exp: continue to add_longest
+PASS: gdb.base/store.exp: upvar longest l; up
+PASS: gdb.base/store.exp: upvar longest l; print old l, expecting -1
+FAIL: gdb.base/store.exp: upvar longest l; print old r, expecting -2
+PASS: gdb.base/store.exp: upvar longest l; set l to 4
+PASS: gdb.base/store.exp: upvar longest l; print new l, expecting 4
+PASS: gdb.base/store.exp: tbreak add_float
+PASS: gdb.base/store.exp: continue to add_float
+PASS: gdb.base/store.exp: upvar float l; up
+FAIL: gdb.base/store.exp: upvar float l; print old l, expecting -1
+PASS: gdb.base/store.exp: upvar float l; print old r, expecting -2
+PASS: gdb.base/store.exp: upvar float l; set l to 4
+FAIL: gdb.base/store.exp: upvar float l; print new l, expecting 4
+PASS: gdb.base/store.exp: tbreak add_double
+PASS: gdb.base/store.exp: continue to add_double
+PASS: gdb.base/store.exp: upvar double l; up
+FAIL: gdb.base/store.exp: upvar double l; print old l, expecting -1
+FAIL: gdb.base/store.exp: upvar double l; print old r, expecting -2
+PASS: gdb.base/store.exp: upvar double l; set l to 4
+FAIL: gdb.base/store.exp: upvar double l; print new l, expecting 4
+PASS: gdb.base/store.exp: tbreak add_doublest
+PASS: gdb.base/store.exp: continue to add_doublest
+PASS: gdb.base/store.exp: upvar doublest l; up
+FAIL: gdb.base/store.exp: upvar doublest l; print old l, expecting -1
+FAIL: gdb.base/store.exp: upvar doublest l; print old r, expecting -2
+FAIL: gdb.base/store.exp: upvar doublest l; set l to 4
+FAIL: gdb.base/store.exp: upvar doublest l; print new l, expecting 4
+PASS: gdb.base/store.exp: tbreak wack_struct_1
+PASS: gdb.base/store.exp: continue to wack_struct_1
+PASS: gdb.base/store.exp: var struct 1 u; next to add_struct_1 call
+PASS: gdb.base/store.exp: var struct 1 u; print old u, expecting {s = \{0}}
+PASS: gdb.base/store.exp: var struct 1 u; set u to s_1
+PASS: gdb.base/store.exp: var struct 1 u; print new u, expecting {s = \{1}}
+PASS: gdb.base/store.exp: tbreak wack_struct_2
+PASS: gdb.base/store.exp: continue to wack_struct_2
+PASS: gdb.base/store.exp: var struct 2 u; next to add_struct_2 call
+PASS: gdb.base/store.exp: var struct 2 u; print old u, expecting {s = \{0, 0}}
+PASS: gdb.base/store.exp: var struct 2 u; set u to s_2
+PASS: gdb.base/store.exp: var struct 2 u; print new u, expecting {s = \{1, 2}}
+PASS: gdb.base/store.exp: tbreak wack_struct_3
+PASS: gdb.base/store.exp: continue to wack_struct_3
+PASS: gdb.base/store.exp: var struct 3 u; next to add_struct_3 call
+PASS: gdb.base/store.exp: var struct 3 u; print old u, expecting {s = \{0, 0, 0}}
+PASS: gdb.base/store.exp: var struct 3 u; set u to s_3
+PASS: gdb.base/store.exp: var struct 3 u; print new u, expecting {s = \{1, 2, 3}}
+PASS: gdb.base/store.exp: tbreak wack_struct_4
+PASS: gdb.base/store.exp: continue to wack_struct_4
+PASS: gdb.base/store.exp: var struct 4 u; next to add_struct_4 call
+PASS: gdb.base/store.exp: var struct 4 u; print old u, expecting {s = \{0, 0, 0, 0}}
+PASS: gdb.base/store.exp: var struct 4 u; set u to s_4
+PASS: gdb.base/store.exp: var struct 4 u; print new u, expecting {s = \{1, 2, 3, 4}}
+PASS: gdb.base/store.exp: tbreak add_struct_1
+PASS: gdb.base/store.exp: continue to add_struct_1
+PASS: gdb.base/store.exp: up struct 1 u; up
+PASS: gdb.base/store.exp: up struct 1 u; print old u, expecting {s = \{0}}
+PASS: gdb.base/store.exp: up struct 1 u; set u to s_1
+PASS: gdb.base/store.exp: up struct 1 u; print new u, expecting {s = \{1}}
+PASS: gdb.base/store.exp: tbreak add_struct_2
+PASS: gdb.base/store.exp: continue to add_struct_2
+PASS: gdb.base/store.exp: up struct 2 u; up
+PASS: gdb.base/store.exp: up struct 2 u; print old u, expecting {s = \{0, 0}}
+PASS: gdb.base/store.exp: up struct 2 u; set u to s_2
+PASS: gdb.base/store.exp: up struct 2 u; print new u, expecting {s = \{1, 2}}
+PASS: gdb.base/store.exp: tbreak add_struct_3
+PASS: gdb.base/store.exp: continue to add_struct_3
+PASS: gdb.base/store.exp: up struct 3 u; up
+PASS: gdb.base/store.exp: up struct 3 u; print old u, expecting {s = \{0, 0, 0}}
+PASS: gdb.base/store.exp: up struct 3 u; set u to s_3
+PASS: gdb.base/store.exp: up struct 3 u; print new u, expecting {s = \{1, 2, 3}}
+PASS: gdb.base/store.exp: tbreak add_struct_4
+PASS: gdb.base/store.exp: continue to add_struct_4
+PASS: gdb.base/store.exp: up struct 4 u; up
+PASS: gdb.base/store.exp: up struct 4 u; print old u, expecting {s = \{0, 0, 0, 0}}
+PASS: gdb.base/store.exp: up struct 4 u; set u to s_4
+PASS: gdb.base/store.exp: up struct 4 u; print new u, expecting {s = \{1, 2, 3, 4}}
+PASS: gdb.base/store.exp: tbreak wack_field_1
+PASS: gdb.base/store.exp: continue field 1
+PASS: gdb.base/store.exp: next field 1
+PASS: gdb.base/store.exp: old field 1
+PASS: gdb.base/store.exp: set variable u = F_1
+PASS: gdb.base/store.exp: new field 1
+PASS: gdb.base/store.exp: set variable u = F_1, u.i = f_1.i
+PASS: gdb.base/store.exp: f_1.i
+PASS: gdb.base/store.exp: set variable u = F_1, u.j = f_1.j
+PASS: gdb.base/store.exp: f_1.j
+PASS: gdb.base/store.exp: set variable u = F_1, u.k = f_1.k
+PASS: gdb.base/store.exp: f_1.k
+PASS: gdb.base/store.exp: set variable u = f_1, u.i = F_1.i
+PASS: gdb.base/store.exp: F_1.i
+PASS: gdb.base/store.exp: set variable u = f_1, u.j = F_1.j
+PASS: gdb.base/store.exp: F_1.j
+PASS: gdb.base/store.exp: set variable u = f_1, u.k = F_1.k
+PASS: gdb.base/store.exp: F_1.k
+PASS: gdb.base/store.exp: tbreak wack_field_2
+PASS: gdb.base/store.exp: continue field 2
+PASS: gdb.base/store.exp: next field 2
+PASS: gdb.base/store.exp: old field 2
+PASS: gdb.base/store.exp: set variable u = F_2
+PASS: gdb.base/store.exp: new field 2
+PASS: gdb.base/store.exp: set variable u = F_2, u.i = f_2.i
+PASS: gdb.base/store.exp: f_2.i
+PASS: gdb.base/store.exp: set variable u = F_2, u.j = f_2.j
+PASS: gdb.base/store.exp: f_2.j
+PASS: gdb.base/store.exp: set variable u = F_2, u.k = f_2.k
+PASS: gdb.base/store.exp: f_2.k
+PASS: gdb.base/store.exp: set variable u = f_2, u.i = F_2.i
+PASS: gdb.base/store.exp: F_2.i
+PASS: gdb.base/store.exp: set variable u = f_2, u.j = F_2.j
+PASS: gdb.base/store.exp: F_2.j
+PASS: gdb.base/store.exp: set variable u = f_2, u.k = F_2.k
+PASS: gdb.base/store.exp: F_2.k
+PASS: gdb.base/store.exp: tbreak wack_field_3
+PASS: gdb.base/store.exp: continue field 3
+PASS: gdb.base/store.exp: next field 3
+PASS: gdb.base/store.exp: old field 3
+PASS: gdb.base/store.exp: set variable u = F_3
+PASS: gdb.base/store.exp: new field 3
+PASS: gdb.base/store.exp: set variable u = F_3, u.i = f_3.i
+PASS: gdb.base/store.exp: f_3.i
+PASS: gdb.base/store.exp: set variable u = F_3, u.j = f_3.j
+PASS: gdb.base/store.exp: f_3.j
+PASS: gdb.base/store.exp: set variable u = F_3, u.k = f_3.k
+PASS: gdb.base/store.exp: f_3.k
+PASS: gdb.base/store.exp: set variable u = f_3, u.i = F_3.i
+PASS: gdb.base/store.exp: F_3.i
+PASS: gdb.base/store.exp: set variable u = f_3, u.j = F_3.j
+PASS: gdb.base/store.exp: F_3.j
+PASS: gdb.base/store.exp: set variable u = f_3, u.k = F_3.k
+PASS: gdb.base/store.exp: F_3.k
+PASS: gdb.base/store.exp: tbreak wack_field_4
+PASS: gdb.base/store.exp: continue field 4
+PASS: gdb.base/store.exp: next field 4
+PASS: gdb.base/store.exp: old field 4
+PASS: gdb.base/store.exp: set variable u = F_4
+PASS: gdb.base/store.exp: new field 4
+PASS: gdb.base/store.exp: set variable u = F_4, u.i = f_4.i
+PASS: gdb.base/store.exp: f_4.i
+PASS: gdb.base/store.exp: set variable u = F_4, u.j = f_4.j
+PASS: gdb.base/store.exp: f_4.j
+PASS: gdb.base/store.exp: set variable u = F_4, u.k = f_4.k
+PASS: gdb.base/store.exp: f_4.k
+PASS: gdb.base/store.exp: set variable u = f_4, u.i = F_4.i
+PASS: gdb.base/store.exp: F_4.i
+PASS: gdb.base/store.exp: set variable u = f_4, u.j = F_4.j
+PASS: gdb.base/store.exp: F_4.j
+PASS: gdb.base/store.exp: set variable u = f_4, u.k = F_4.k
+PASS: gdb.base/store.exp: F_4.k
+Running ./gdb.base/structs2.exp ...
+PASS: gdb.base/structs2.exp: set width 0
+PASS: gdb.base/structs2.exp: structs2 sanity check
+PASS: gdb.base/structs2.exp: structs2 breakpoint set
+PASS: gdb.base/structs2.exp: structs2 continue1
+PASS: gdb.base/structs2.exp: structs2 continue2
+Running ./gdb.base/structs3.exp ...
+PASS: gdb.base/structs3.exp: print two
+PASS: gdb.base/structs3.exp: print *twop
+PASS: gdb.base/structs3.exp: print *(struct Two *)onep
+PASS: gdb.base/structs3.exp: print *(tTwo *)onep
+Running ./gdb.base/structs.exp ...
+PASS: gdb.base/structs.exp: set print sevenbit-strings
+PASS: gdb.base/structs.exp: set print address off
+PASS: gdb.base/structs.exp: set width 0
+PASS: gdb.base/structs.exp: set print elements 300
+PASS: gdb.base/structs.exp: continue to breakpoint: chartest-done
+PASS: gdb.base/structs.exp: p chartest
+PASS: gdb.base/structs.exp: ptype foo1; structs-tc
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 1 structs-tc
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 1 structs-tc
+PASS: gdb.base/structs.exp: p/c L<n>; call 1 structs-tc
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 2 structs-tc
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 2 structs-tc
+PASS: gdb.base/structs.exp: p/c L<n>; call 2 structs-tc
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 3 structs-tc
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 3 structs-tc
+PASS: gdb.base/structs.exp: p/c L<n>; call 3 structs-tc
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 4 structs-tc
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 4 structs-tc
+PASS: gdb.base/structs.exp: p/c L<n>; call 4 structs-tc
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 5 structs-tc
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 5 structs-tc
+PASS: gdb.base/structs.exp: p/c L<n>; call 5 structs-tc
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 6 structs-tc
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 6 structs-tc
+PASS: gdb.base/structs.exp: p/c L<n>; call 6 structs-tc
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 7 structs-tc
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 7 structs-tc
+PASS: gdb.base/structs.exp: p/c L<n>; call 7 structs-tc
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 8 structs-tc
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 8 structs-tc
+PASS: gdb.base/structs.exp: p/c L<n>; call 8 structs-tc
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 9 structs-tc
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 9 structs-tc
+PASS: gdb.base/structs.exp: p/c L<n>; call 9 structs-tc
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 10 structs-tc
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 10 structs-tc
+PASS: gdb.base/structs.exp: p/c L<n>; call 10 structs-tc
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 11 structs-tc
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 11 structs-tc
+PASS: gdb.base/structs.exp: p/c L<n>; call 11 structs-tc
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 12 structs-tc
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 12 structs-tc
+PASS: gdb.base/structs.exp: p/c L<n>; call 12 structs-tc
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 13 structs-tc
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 13 structs-tc
+PASS: gdb.base/structs.exp: p/c L<n>; call 13 structs-tc
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 14 structs-tc
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 14 structs-tc
+PASS: gdb.base/structs.exp: p/c L<n>; call 14 structs-tc
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 15 structs-tc
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 15 structs-tc
+PASS: gdb.base/structs.exp: p/c L<n>; call 15 structs-tc
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 16 structs-tc
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 16 structs-tc
+PASS: gdb.base/structs.exp: p/c L<n>; call 16 structs-tc
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 17 structs-tc
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 17 structs-tc
+PASS: gdb.base/structs.exp: p/c L<n>; call 17 structs-tc
+PASS: gdb.base/structs.exp: advance to fun<n> for return; return 1 structs-tc
+PASS: gdb.base/structs.exp: zed L<n> for return; return 1 structs-tc
+PASS: gdb.base/structs.exp: return foo<n>; return 1 structs-tc
+PASS: gdb.base/structs.exp: value foo<n> returned; return 1 structs-tc
+PASS: gdb.base/structs.exp: advance to fun<n> for finish; return 1 structs-tc
+PASS: gdb.base/structs.exp: zed L<n> for finish; return 1 structs-tc
+PASS: gdb.base/structs.exp: finish foo<n>; return 1 structs-tc
+PASS: gdb.base/structs.exp: value foo<n> finished; return 1 structs-tc
+PASS: gdb.base/structs.exp: return value known implies finish value known; return 1 structs-tc
+PASS: gdb.base/structs.exp: advance to fun<n> for return; return 2 structs-tc
+PASS: gdb.base/structs.exp: zed L<n> for return; return 2 structs-tc
+PASS: gdb.base/structs.exp: return foo<n>; return 2 structs-tc
+PASS: gdb.base/structs.exp: value foo<n> returned; return 2 structs-tc
+PASS: gdb.base/structs.exp: advance to fun<n> for finish; return 2 structs-tc
+PASS: gdb.base/structs.exp: zed L<n> for finish; return 2 structs-tc
+PASS: gdb.base/structs.exp: finish foo<n>; return 2 structs-tc
+PASS: gdb.base/structs.exp: value foo<n> finished; return 2 structs-tc
+PASS: gdb.base/structs.exp: return value known implies finish value known; return 2 structs-tc
+PASS: gdb.base/structs.exp: advance to fun<n> for return; return 3 structs-tc
+PASS: gdb.base/structs.exp: zed L<n> for return; return 3 structs-tc
+PASS: gdb.base/structs.exp: return foo<n>; return 3 structs-tc
+PASS: gdb.base/structs.exp: value foo<n> returned; return 3 structs-tc
+PASS: gdb.base/structs.exp: advance to fun<n> for finish; return 3 structs-tc
+PASS: gdb.base/structs.exp: zed L<n> for finish; return 3 structs-tc
+PASS: gdb.base/structs.exp: finish foo<n>; return 3 structs-tc
+PASS: gdb.base/structs.exp: value foo<n> finished; return 3 structs-tc
+PASS: gdb.base/structs.exp: return value known implies finish value known; return 3 structs-tc
+PASS: gdb.base/structs.exp: advance to fun<n> for return; return 4 structs-tc
+PASS: gdb.base/structs.exp: zed L<n> for return; return 4 structs-tc
+PASS: gdb.base/structs.exp: return foo<n>; return 4 structs-tc
+PASS: gdb.base/structs.exp: value foo<n> returned; return 4 structs-tc
+PASS: gdb.base/structs.exp: advance to fun<n> for finish; return 4 structs-tc
+PASS: gdb.base/structs.exp: zed L<n> for finish; return 4 structs-tc
+PASS: gdb.base/structs.exp: finish foo<n>; return 4 structs-tc
+PASS: gdb.base/structs.exp: value foo<n> finished; return 4 structs-tc
+PASS: gdb.base/structs.exp: return value known implies finish value known; return 4 structs-tc
+PASS: gdb.base/structs.exp: advance to fun<n> for return; return 5 structs-tc
+PASS: gdb.base/structs.exp: zed L<n> for return; return 5 structs-tc
+PASS: gdb.base/structs.exp: return foo<n>; return 5 structs-tc
+PASS: gdb.base/structs.exp: value foo<n> returned; return 5 structs-tc
+PASS: gdb.base/structs.exp: advance to fun<n> for finish; return 5 structs-tc
+PASS: gdb.base/structs.exp: zed L<n> for finish; return 5 structs-tc
+PASS: gdb.base/structs.exp: finish foo<n>; return 5 structs-tc
+PASS: gdb.base/structs.exp: value foo<n> finished; return 5 structs-tc
+PASS: gdb.base/structs.exp: return value known implies finish value known; return 5 structs-tc
+PASS: gdb.base/structs.exp: advance to fun<n> for return; return 6 structs-tc
+PASS: gdb.base/structs.exp: zed L<n> for return; return 6 structs-tc
+PASS: gdb.base/structs.exp: return foo<n>; return 6 structs-tc
+PASS: gdb.base/structs.exp: value foo<n> returned; return 6 structs-tc
+PASS: gdb.base/structs.exp: advance to fun<n> for finish; return 6 structs-tc
+PASS: gdb.base/structs.exp: zed L<n> for finish; return 6 structs-tc
+PASS: gdb.base/structs.exp: finish foo<n>; return 6 structs-tc
+PASS: gdb.base/structs.exp: value foo<n> finished; return 6 structs-tc
+PASS: gdb.base/structs.exp: return value known implies finish value known; return 6 structs-tc
+PASS: gdb.base/structs.exp: advance to fun<n> for return; return 7 structs-tc
+PASS: gdb.base/structs.exp: zed L<n> for return; return 7 structs-tc
+PASS: gdb.base/structs.exp: return foo<n>; return 7 structs-tc
+PASS: gdb.base/structs.exp: value foo<n> returned; return 7 structs-tc
+PASS: gdb.base/structs.exp: advance to fun<n> for finish; return 7 structs-tc
+PASS: gdb.base/structs.exp: zed L<n> for finish; return 7 structs-tc
+PASS: gdb.base/structs.exp: finish foo<n>; return 7 structs-tc
+PASS: gdb.base/structs.exp: value foo<n> finished; return 7 structs-tc
+PASS: gdb.base/structs.exp: return value known implies finish value known; return 7 structs-tc
+PASS: gdb.base/structs.exp: advance to fun<n> for return; return 8 structs-tc
+PASS: gdb.base/structs.exp: zed L<n> for return; return 8 structs-tc
+PASS: gdb.base/structs.exp: return foo<n>; return 8 structs-tc
+PASS: gdb.base/structs.exp: value foo<n> returned; return 8 structs-tc
+PASS: gdb.base/structs.exp: advance to fun<n> for finish; return 8 structs-tc
+PASS: gdb.base/structs.exp: zed L<n> for finish; return 8 structs-tc
+PASS: gdb.base/structs.exp: finish foo<n>; return 8 structs-tc
+PASS: gdb.base/structs.exp: value foo<n> finished; return 8 structs-tc
+PASS: gdb.base/structs.exp: return value known implies finish value known; return 8 structs-tc
+PASS: gdb.base/structs.exp: set print sevenbit-strings
+PASS: gdb.base/structs.exp: set print address off
+PASS: gdb.base/structs.exp: set width 0
+PASS: gdb.base/structs.exp: set print elements 300
+PASS: gdb.base/structs.exp: ptype foo1; structs-ts
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 1 structs-ts
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 1 structs-ts
+PASS: gdb.base/structs.exp: p/c L<n>; call 1 structs-ts
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 2 structs-ts
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 2 structs-ts
+PASS: gdb.base/structs.exp: p/c L<n>; call 2 structs-ts
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 3 structs-ts
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 3 structs-ts
+PASS: gdb.base/structs.exp: p/c L<n>; call 3 structs-ts
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 4 structs-ts
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 4 structs-ts
+PASS: gdb.base/structs.exp: p/c L<n>; call 4 structs-ts
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 5 structs-ts
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 5 structs-ts
+PASS: gdb.base/structs.exp: p/c L<n>; call 5 structs-ts
+PASS: gdb.base/structs.exp: advance to fun<n> for return; return 1 structs-ts
+PASS: gdb.base/structs.exp: zed L<n> for return; return 1 structs-ts
+PASS: gdb.base/structs.exp: return foo<n>; return 1 structs-ts
+PASS: gdb.base/structs.exp: value foo<n> returned; return 1 structs-ts
+PASS: gdb.base/structs.exp: advance to fun<n> for finish; return 1 structs-ts
+PASS: gdb.base/structs.exp: zed L<n> for finish; return 1 structs-ts
+PASS: gdb.base/structs.exp: finish foo<n>; return 1 structs-ts
+PASS: gdb.base/structs.exp: value foo<n> finished; return 1 structs-ts
+PASS: gdb.base/structs.exp: return value known implies finish value known; return 1 structs-ts
+PASS: gdb.base/structs.exp: advance to fun<n> for return; return 2 structs-ts
+PASS: gdb.base/structs.exp: zed L<n> for return; return 2 structs-ts
+PASS: gdb.base/structs.exp: return foo<n>; return 2 structs-ts
+PASS: gdb.base/structs.exp: value foo<n> returned; return 2 structs-ts
+PASS: gdb.base/structs.exp: advance to fun<n> for finish; return 2 structs-ts
+PASS: gdb.base/structs.exp: zed L<n> for finish; return 2 structs-ts
+PASS: gdb.base/structs.exp: finish foo<n>; return 2 structs-ts
+PASS: gdb.base/structs.exp: value foo<n> finished; return 2 structs-ts
+PASS: gdb.base/structs.exp: return value known implies finish value known; return 2 structs-ts
+PASS: gdb.base/structs.exp: advance to fun<n> for return; return 3 structs-ts
+PASS: gdb.base/structs.exp: zed L<n> for return; return 3 structs-ts
+PASS: gdb.base/structs.exp: return foo<n>; return 3 structs-ts
+PASS: gdb.base/structs.exp: value foo<n> returned; return 3 structs-ts
+PASS: gdb.base/structs.exp: advance to fun<n> for finish; return 3 structs-ts
+PASS: gdb.base/structs.exp: zed L<n> for finish; return 3 structs-ts
+PASS: gdb.base/structs.exp: finish foo<n>; return 3 structs-ts
+PASS: gdb.base/structs.exp: value foo<n> finished; return 3 structs-ts
+PASS: gdb.base/structs.exp: return value known implies finish value known; return 3 structs-ts
+PASS: gdb.base/structs.exp: advance to fun<n> for return; return 4 structs-ts
+PASS: gdb.base/structs.exp: zed L<n> for return; return 4 structs-ts
+PASS: gdb.base/structs.exp: return foo<n>; return 4 structs-ts
+PASS: gdb.base/structs.exp: value foo<n> returned; return 4 structs-ts
+PASS: gdb.base/structs.exp: advance to fun<n> for finish; return 4 structs-ts
+PASS: gdb.base/structs.exp: zed L<n> for finish; return 4 structs-ts
+PASS: gdb.base/structs.exp: finish foo<n>; return 4 structs-ts
+PASS: gdb.base/structs.exp: value foo<n> finished; return 4 structs-ts
+PASS: gdb.base/structs.exp: return value known implies finish value known; return 4 structs-ts
+PASS: gdb.base/structs.exp: set print sevenbit-strings
+PASS: gdb.base/structs.exp: set print address off
+PASS: gdb.base/structs.exp: set width 0
+PASS: gdb.base/structs.exp: set print elements 300
+PASS: gdb.base/structs.exp: ptype foo1; structs-ti
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 1 structs-ti
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 1 structs-ti
+PASS: gdb.base/structs.exp: p/c L<n>; call 1 structs-ti
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 2 structs-ti
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 2 structs-ti
+PASS: gdb.base/structs.exp: p/c L<n>; call 2 structs-ti
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 3 structs-ti
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 3 structs-ti
+PASS: gdb.base/structs.exp: p/c L<n>; call 3 structs-ti
+PASS: gdb.base/structs.exp: advance to fun<n> for return; return 1 structs-ti
+PASS: gdb.base/structs.exp: zed L<n> for return; return 1 structs-ti
+PASS: gdb.base/structs.exp: return foo<n>; return 1 structs-ti
+PASS: gdb.base/structs.exp: value foo<n> returned; return 1 structs-ti
+PASS: gdb.base/structs.exp: advance to fun<n> for finish; return 1 structs-ti
+PASS: gdb.base/structs.exp: zed L<n> for finish; return 1 structs-ti
+PASS: gdb.base/structs.exp: finish foo<n>; return 1 structs-ti
+PASS: gdb.base/structs.exp: value foo<n> finished; return 1 structs-ti
+PASS: gdb.base/structs.exp: return value known implies finish value known; return 1 structs-ti
+PASS: gdb.base/structs.exp: advance to fun<n> for return; return 2 structs-ti
+PASS: gdb.base/structs.exp: zed L<n> for return; return 2 structs-ti
+PASS: gdb.base/structs.exp: return foo<n>; return 2 structs-ti
+PASS: gdb.base/structs.exp: value foo<n> returned; return 2 structs-ti
+PASS: gdb.base/structs.exp: advance to fun<n> for finish; return 2 structs-ti
+PASS: gdb.base/structs.exp: zed L<n> for finish; return 2 structs-ti
+PASS: gdb.base/structs.exp: finish foo<n>; return 2 structs-ti
+PASS: gdb.base/structs.exp: value foo<n> finished; return 2 structs-ti
+PASS: gdb.base/structs.exp: return value known implies finish value known; return 2 structs-ti
+PASS: gdb.base/structs.exp: set print sevenbit-strings
+PASS: gdb.base/structs.exp: set print address off
+PASS: gdb.base/structs.exp: set width 0
+PASS: gdb.base/structs.exp: set print elements 300
+PASS: gdb.base/structs.exp: ptype foo1; structs-tl
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 1 structs-tl
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 1 structs-tl
+PASS: gdb.base/structs.exp: p/c L<n>; call 1 structs-tl
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 2 structs-tl
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 2 structs-tl
+PASS: gdb.base/structs.exp: p/c L<n>; call 2 structs-tl
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 3 structs-tl
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 3 structs-tl
+PASS: gdb.base/structs.exp: p/c L<n>; call 3 structs-tl
+PASS: gdb.base/structs.exp: advance to fun<n> for return; return 1 structs-tl
+PASS: gdb.base/structs.exp: zed L<n> for return; return 1 structs-tl
+PASS: gdb.base/structs.exp: return foo<n>; return 1 structs-tl
+PASS: gdb.base/structs.exp: value foo<n> returned; return 1 structs-tl
+PASS: gdb.base/structs.exp: advance to fun<n> for finish; return 1 structs-tl
+PASS: gdb.base/structs.exp: zed L<n> for finish; return 1 structs-tl
+PASS: gdb.base/structs.exp: finish foo<n>; return 1 structs-tl
+PASS: gdb.base/structs.exp: value foo<n> finished; return 1 structs-tl
+PASS: gdb.base/structs.exp: return value known implies finish value known; return 1 structs-tl
+PASS: gdb.base/structs.exp: advance to fun<n> for return; return 2 structs-tl
+PASS: gdb.base/structs.exp: zed L<n> for return; return 2 structs-tl
+PASS: gdb.base/structs.exp: return foo<n>; return 2 structs-tl
+PASS: gdb.base/structs.exp: value foo<n> returned; return 2 structs-tl
+PASS: gdb.base/structs.exp: advance to fun<n> for finish; return 2 structs-tl
+PASS: gdb.base/structs.exp: zed L<n> for finish; return 2 structs-tl
+PASS: gdb.base/structs.exp: finish foo<n>; return 2 structs-tl
+PASS: gdb.base/structs.exp: value foo<n> finished; return 2 structs-tl
+PASS: gdb.base/structs.exp: return value known implies finish value known; return 2 structs-tl
+PASS: gdb.base/structs.exp: set print sevenbit-strings
+PASS: gdb.base/structs.exp: set print address off
+PASS: gdb.base/structs.exp: set width 0
+PASS: gdb.base/structs.exp: set print elements 300
+PASS: gdb.base/structs.exp: ptype foo1; structs-tll
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 1 structs-tll
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 1 structs-tll
+PASS: gdb.base/structs.exp: p/c L<n>; call 1 structs-tll
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 2 structs-tll
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 2 structs-tll
+PASS: gdb.base/structs.exp: p/c L<n>; call 2 structs-tll
+PASS: gdb.base/structs.exp: advance to fun<n> for return; return 1 structs-tll
+PASS: gdb.base/structs.exp: zed L<n> for return; return 1 structs-tll
+PASS: gdb.base/structs.exp: return foo<n>; return 1 structs-tll
+PASS: gdb.base/structs.exp: value foo<n> returned; return 1 structs-tll
+PASS: gdb.base/structs.exp: advance to fun<n> for finish; return 1 structs-tll
+PASS: gdb.base/structs.exp: zed L<n> for finish; return 1 structs-tll
+PASS: gdb.base/structs.exp: finish foo<n>; return 1 structs-tll
+PASS: gdb.base/structs.exp: value foo<n> finished; return 1 structs-tll
+PASS: gdb.base/structs.exp: return value known implies finish value known; return 1 structs-tll
+PASS: gdb.base/structs.exp: set print sevenbit-strings
+PASS: gdb.base/structs.exp: set print address off
+PASS: gdb.base/structs.exp: set width 0
+PASS: gdb.base/structs.exp: set print elements 300
+PASS: gdb.base/structs.exp: ptype foo1; structs-tf
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 1 structs-tf
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 1 structs-tf
+PASS: gdb.base/structs.exp: p/c L<n>; call 1 structs-tf
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 2 structs-tf
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 2 structs-tf
+PASS: gdb.base/structs.exp: p/c L<n>; call 2 structs-tf
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 3 structs-tf
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 3 structs-tf
+PASS: gdb.base/structs.exp: p/c L<n>; call 3 structs-tf
+PASS: gdb.base/structs.exp: advance to fun<n> for return; return 1 structs-tf
+PASS: gdb.base/structs.exp: zed L<n> for return; return 1 structs-tf
+PASS: gdb.base/structs.exp: return foo<n>; return 1 structs-tf
+PASS: gdb.base/structs.exp: value foo<n> returned; return 1 structs-tf
+PASS: gdb.base/structs.exp: advance to fun<n> for finish; return 1 structs-tf
+PASS: gdb.base/structs.exp: zed L<n> for finish; return 1 structs-tf
+PASS: gdb.base/structs.exp: finish foo<n>; return 1 structs-tf
+PASS: gdb.base/structs.exp: value foo<n> finished; return 1 structs-tf
+PASS: gdb.base/structs.exp: return value known implies finish value known; return 1 structs-tf
+PASS: gdb.base/structs.exp: advance to fun<n> for return; return 2 structs-tf
+PASS: gdb.base/structs.exp: zed L<n> for return; return 2 structs-tf
+PASS: gdb.base/structs.exp: return foo<n>; return 2 structs-tf
+PASS: gdb.base/structs.exp: value foo<n> returned; return 2 structs-tf
+PASS: gdb.base/structs.exp: advance to fun<n> for finish; return 2 structs-tf
+PASS: gdb.base/structs.exp: zed L<n> for finish; return 2 structs-tf
+PASS: gdb.base/structs.exp: finish foo<n>; return 2 structs-tf
+PASS: gdb.base/structs.exp: value foo<n> finished; return 2 structs-tf
+PASS: gdb.base/structs.exp: return value known implies finish value known; return 2 structs-tf
+PASS: gdb.base/structs.exp: set print sevenbit-strings
+PASS: gdb.base/structs.exp: set print address off
+PASS: gdb.base/structs.exp: set width 0
+PASS: gdb.base/structs.exp: set print elements 300
+PASS: gdb.base/structs.exp: ptype foo1; structs-td
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 1 structs-td
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 1 structs-td
+PASS: gdb.base/structs.exp: p/c L<n>; call 1 structs-td
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 2 structs-td
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 2 structs-td
+PASS: gdb.base/structs.exp: p/c L<n>; call 2 structs-td
+PASS: gdb.base/structs.exp: advance to fun<n> for return; return 1 structs-td
+PASS: gdb.base/structs.exp: zed L<n> for return; return 1 structs-td
+PASS: gdb.base/structs.exp: return foo<n>; return 1 structs-td
+PASS: gdb.base/structs.exp: value foo<n> returned; return 1 structs-td
+PASS: gdb.base/structs.exp: advance to fun<n> for finish; return 1 structs-td
+PASS: gdb.base/structs.exp: zed L<n> for finish; return 1 structs-td
+PASS: gdb.base/structs.exp: finish foo<n>; return 1 structs-td
+PASS: gdb.base/structs.exp: value foo<n> finished; return 1 structs-td
+PASS: gdb.base/structs.exp: return value known implies finish value known; return 1 structs-td
+PASS: gdb.base/structs.exp: set print sevenbit-strings
+PASS: gdb.base/structs.exp: set print address off
+PASS: gdb.base/structs.exp: set width 0
+PASS: gdb.base/structs.exp: set print elements 300
+PASS: gdb.base/structs.exp: ptype foo1; structs-tld
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 1 structs-tld
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 1 structs-tld
+PASS: gdb.base/structs.exp: p/c L<n>; call 1 structs-tld
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 2 structs-tld
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 2 structs-tld
+PASS: gdb.base/structs.exp: p/c L<n>; call 2 structs-tld
+PASS: gdb.base/structs.exp: advance to fun<n> for return; return 1 structs-tld
+PASS: gdb.base/structs.exp: zed L<n> for return; return 1 structs-tld
+PASS: gdb.base/structs.exp: return foo<n>; return 1 structs-tld
+PASS: gdb.base/structs.exp: value foo<n> returned; return 1 structs-tld
+PASS: gdb.base/structs.exp: advance to fun<n> for finish; return 1 structs-tld
+PASS: gdb.base/structs.exp: zed L<n> for finish; return 1 structs-tld
+PASS: gdb.base/structs.exp: finish foo<n>; return 1 structs-tld
+PASS: gdb.base/structs.exp: value foo<n> finished; return 1 structs-tld
+PASS: gdb.base/structs.exp: return value known implies finish value known; return 1 structs-tld
+PASS: gdb.base/structs.exp: set print sevenbit-strings
+PASS: gdb.base/structs.exp: set print address off
+PASS: gdb.base/structs.exp: set width 0
+PASS: gdb.base/structs.exp: set print elements 300
+PASS: gdb.base/structs.exp: ptype foo2; structs-ts-tc
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 2 structs-ts-tc
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 2 structs-ts-tc
+PASS: gdb.base/structs.exp: p/c L<n>; call 2 structs-ts-tc
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 3 structs-ts-tc
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 3 structs-ts-tc
+PASS: gdb.base/structs.exp: p/c L<n>; call 3 structs-ts-tc
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 4 structs-ts-tc
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 4 structs-ts-tc
+PASS: gdb.base/structs.exp: p/c L<n>; call 4 structs-ts-tc
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 5 structs-ts-tc
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 5 structs-ts-tc
+PASS: gdb.base/structs.exp: p/c L<n>; call 5 structs-ts-tc
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 6 structs-ts-tc
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 6 structs-ts-tc
+PASS: gdb.base/structs.exp: p/c L<n>; call 6 structs-ts-tc
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 7 structs-ts-tc
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 7 structs-ts-tc
+PASS: gdb.base/structs.exp: p/c L<n>; call 7 structs-ts-tc
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 8 structs-ts-tc
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 8 structs-ts-tc
+PASS: gdb.base/structs.exp: p/c L<n>; call 8 structs-ts-tc
+PASS: gdb.base/structs.exp: advance to fun<n> for return; return 2 structs-ts-tc
+PASS: gdb.base/structs.exp: zed L<n> for return; return 2 structs-ts-tc
+PASS: gdb.base/structs.exp: return foo<n>; return 2 structs-ts-tc
+PASS: gdb.base/structs.exp: value foo<n> returned; return 2 structs-ts-tc
+PASS: gdb.base/structs.exp: advance to fun<n> for finish; return 2 structs-ts-tc
+PASS: gdb.base/structs.exp: zed L<n> for finish; return 2 structs-ts-tc
+PASS: gdb.base/structs.exp: finish foo<n>; return 2 structs-ts-tc
+PASS: gdb.base/structs.exp: value foo<n> finished; return 2 structs-ts-tc
+PASS: gdb.base/structs.exp: return value known implies finish value known; return 2 structs-ts-tc
+PASS: gdb.base/structs.exp: set print sevenbit-strings
+PASS: gdb.base/structs.exp: set print address off
+PASS: gdb.base/structs.exp: set width 0
+PASS: gdb.base/structs.exp: set print elements 300
+PASS: gdb.base/structs.exp: ptype foo2; structs-ti-tc
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 2 structs-ti-tc
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 2 structs-ti-tc
+PASS: gdb.base/structs.exp: p/c L<n>; call 2 structs-ti-tc
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 3 structs-ti-tc
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 3 structs-ti-tc
+PASS: gdb.base/structs.exp: p/c L<n>; call 3 structs-ti-tc
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 4 structs-ti-tc
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 4 structs-ti-tc
+PASS: gdb.base/structs.exp: p/c L<n>; call 4 structs-ti-tc
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 5 structs-ti-tc
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 5 structs-ti-tc
+PASS: gdb.base/structs.exp: p/c L<n>; call 5 structs-ti-tc
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 6 structs-ti-tc
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 6 structs-ti-tc
+PASS: gdb.base/structs.exp: p/c L<n>; call 6 structs-ti-tc
+PASS: gdb.base/structs.exp: advance to fun<n> for return; return 2 structs-ti-tc
+PASS: gdb.base/structs.exp: zed L<n> for return; return 2 structs-ti-tc
+PASS: gdb.base/structs.exp: return foo<n>; return 2 structs-ti-tc
+PASS: gdb.base/structs.exp: value foo<n> returned; return 2 structs-ti-tc
+PASS: gdb.base/structs.exp: advance to fun<n> for finish; return 2 structs-ti-tc
+PASS: gdb.base/structs.exp: zed L<n> for finish; return 2 structs-ti-tc
+PASS: gdb.base/structs.exp: finish foo<n>; return 2 structs-ti-tc
+PASS: gdb.base/structs.exp: value foo<n> finished; return 2 structs-ti-tc
+PASS: gdb.base/structs.exp: return value known implies finish value known; return 2 structs-ti-tc
+PASS: gdb.base/structs.exp: set print sevenbit-strings
+PASS: gdb.base/structs.exp: set print address off
+PASS: gdb.base/structs.exp: set width 0
+PASS: gdb.base/structs.exp: set print elements 300
+PASS: gdb.base/structs.exp: ptype foo2; structs-tl-tc
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 2 structs-tl-tc
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 2 structs-tl-tc
+PASS: gdb.base/structs.exp: p/c L<n>; call 2 structs-tl-tc
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 3 structs-tl-tc
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 3 structs-tl-tc
+PASS: gdb.base/structs.exp: p/c L<n>; call 3 structs-tl-tc
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 4 structs-tl-tc
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 4 structs-tl-tc
+PASS: gdb.base/structs.exp: p/c L<n>; call 4 structs-tl-tc
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 5 structs-tl-tc
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 5 structs-tl-tc
+PASS: gdb.base/structs.exp: p/c L<n>; call 5 structs-tl-tc
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 6 structs-tl-tc
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 6 structs-tl-tc
+PASS: gdb.base/structs.exp: p/c L<n>; call 6 structs-tl-tc
+PASS: gdb.base/structs.exp: advance to fun<n> for return; return 2 structs-tl-tc
+PASS: gdb.base/structs.exp: zed L<n> for return; return 2 structs-tl-tc
+PASS: gdb.base/structs.exp: return foo<n>; return 2 structs-tl-tc
+PASS: gdb.base/structs.exp: value foo<n> returned; return 2 structs-tl-tc
+PASS: gdb.base/structs.exp: advance to fun<n> for finish; return 2 structs-tl-tc
+PASS: gdb.base/structs.exp: zed L<n> for finish; return 2 structs-tl-tc
+PASS: gdb.base/structs.exp: finish foo<n>; return 2 structs-tl-tc
+PASS: gdb.base/structs.exp: value foo<n> finished; return 2 structs-tl-tc
+PASS: gdb.base/structs.exp: return value known implies finish value known; return 2 structs-tl-tc
+PASS: gdb.base/structs.exp: set print sevenbit-strings
+PASS: gdb.base/structs.exp: set print address off
+PASS: gdb.base/structs.exp: set width 0
+PASS: gdb.base/structs.exp: set print elements 300
+PASS: gdb.base/structs.exp: ptype foo2; structs-tll-tc
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 2 structs-tll-tc
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 2 structs-tll-tc
+PASS: gdb.base/structs.exp: p/c L<n>; call 2 structs-tll-tc
+PASS: gdb.base/structs.exp: set print sevenbit-strings
+PASS: gdb.base/structs.exp: set print address off
+PASS: gdb.base/structs.exp: set width 0
+PASS: gdb.base/structs.exp: set print elements 300
+PASS: gdb.base/structs.exp: ptype foo2; structs-tf-tc
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 2 structs-tf-tc
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 2 structs-tf-tc
+PASS: gdb.base/structs.exp: p/c L<n>; call 2 structs-tf-tc
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 3 structs-tf-tc
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 3 structs-tf-tc
+PASS: gdb.base/structs.exp: p/c L<n>; call 3 structs-tf-tc
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 4 structs-tf-tc
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 4 structs-tf-tc
+PASS: gdb.base/structs.exp: p/c L<n>; call 4 structs-tf-tc
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 5 structs-tf-tc
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 5 structs-tf-tc
+PASS: gdb.base/structs.exp: p/c L<n>; call 5 structs-tf-tc
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 6 structs-tf-tc
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 6 structs-tf-tc
+PASS: gdb.base/structs.exp: p/c L<n>; call 6 structs-tf-tc
+PASS: gdb.base/structs.exp: advance to fun<n> for return; return 2 structs-tf-tc
+PASS: gdb.base/structs.exp: zed L<n> for return; return 2 structs-tf-tc
+PASS: gdb.base/structs.exp: return foo<n>; return 2 structs-tf-tc
+PASS: gdb.base/structs.exp: value foo<n> returned; return 2 structs-tf-tc
+PASS: gdb.base/structs.exp: advance to fun<n> for finish; return 2 structs-tf-tc
+PASS: gdb.base/structs.exp: zed L<n> for finish; return 2 structs-tf-tc
+PASS: gdb.base/structs.exp: finish foo<n>; return 2 structs-tf-tc
+PASS: gdb.base/structs.exp: value foo<n> finished; return 2 structs-tf-tc
+PASS: gdb.base/structs.exp: return value known implies finish value known; return 2 structs-tf-tc
+PASS: gdb.base/structs.exp: set print sevenbit-strings
+PASS: gdb.base/structs.exp: set print address off
+PASS: gdb.base/structs.exp: set width 0
+PASS: gdb.base/structs.exp: set print elements 300
+PASS: gdb.base/structs.exp: ptype foo2; structs-td-tc
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 2 structs-td-tc
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 2 structs-td-tc
+PASS: gdb.base/structs.exp: p/c L<n>; call 2 structs-td-tc
+PASS: gdb.base/structs.exp: set print sevenbit-strings
+PASS: gdb.base/structs.exp: set print address off
+PASS: gdb.base/structs.exp: set width 0
+PASS: gdb.base/structs.exp: set print elements 300
+PASS: gdb.base/structs.exp: ptype foo2; structs-tld-tc
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 2 structs-tld-tc
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 2 structs-tld-tc
+PASS: gdb.base/structs.exp: p/c L<n>; call 2 structs-tld-tc
+PASS: gdb.base/structs.exp: set print sevenbit-strings
+PASS: gdb.base/structs.exp: set print address off
+PASS: gdb.base/structs.exp: set width 0
+PASS: gdb.base/structs.exp: set print elements 300
+PASS: gdb.base/structs.exp: ptype foo2; structs-tc-ts
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 2 structs-tc-ts
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 2 structs-tc-ts
+PASS: gdb.base/structs.exp: p/c L<n>; call 2 structs-tc-ts
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 3 structs-tc-ts
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 3 structs-tc-ts
+PASS: gdb.base/structs.exp: p/c L<n>; call 3 structs-tc-ts
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 4 structs-tc-ts
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 4 structs-tc-ts
+PASS: gdb.base/structs.exp: p/c L<n>; call 4 structs-tc-ts
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 5 structs-tc-ts
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 5 structs-tc-ts
+PASS: gdb.base/structs.exp: p/c L<n>; call 5 structs-tc-ts
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 6 structs-tc-ts
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 6 structs-tc-ts
+PASS: gdb.base/structs.exp: p/c L<n>; call 6 structs-tc-ts
+PASS: gdb.base/structs.exp: advance to fun<n> for return; return 2 structs-tc-ts
+PASS: gdb.base/structs.exp: zed L<n> for return; return 2 structs-tc-ts
+PASS: gdb.base/structs.exp: return foo<n>; return 2 structs-tc-ts
+PASS: gdb.base/structs.exp: value foo<n> returned; return 2 structs-tc-ts
+PASS: gdb.base/structs.exp: advance to fun<n> for finish; return 2 structs-tc-ts
+PASS: gdb.base/structs.exp: zed L<n> for finish; return 2 structs-tc-ts
+PASS: gdb.base/structs.exp: finish foo<n>; return 2 structs-tc-ts
+PASS: gdb.base/structs.exp: value foo<n> finished; return 2 structs-tc-ts
+PASS: gdb.base/structs.exp: return value known implies finish value known; return 2 structs-tc-ts
+PASS: gdb.base/structs.exp: set print sevenbit-strings
+PASS: gdb.base/structs.exp: set print address off
+PASS: gdb.base/structs.exp: set width 0
+PASS: gdb.base/structs.exp: set print elements 300
+PASS: gdb.base/structs.exp: ptype foo2; structs-tc-ti
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 2 structs-tc-ti
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 2 structs-tc-ti
+PASS: gdb.base/structs.exp: p/c L<n>; call 2 structs-tc-ti
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 3 structs-tc-ti
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 3 structs-tc-ti
+PASS: gdb.base/structs.exp: p/c L<n>; call 3 structs-tc-ti
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 4 structs-tc-ti
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 4 structs-tc-ti
+PASS: gdb.base/structs.exp: p/c L<n>; call 4 structs-tc-ti
+PASS: gdb.base/structs.exp: advance to fun<n> for return; return 2 structs-tc-ti
+PASS: gdb.base/structs.exp: zed L<n> for return; return 2 structs-tc-ti
+PASS: gdb.base/structs.exp: return foo<n>; return 2 structs-tc-ti
+PASS: gdb.base/structs.exp: value foo<n> returned; return 2 structs-tc-ti
+PASS: gdb.base/structs.exp: advance to fun<n> for finish; return 2 structs-tc-ti
+PASS: gdb.base/structs.exp: zed L<n> for finish; return 2 structs-tc-ti
+PASS: gdb.base/structs.exp: finish foo<n>; return 2 structs-tc-ti
+PASS: gdb.base/structs.exp: value foo<n> finished; return 2 structs-tc-ti
+PASS: gdb.base/structs.exp: return value known implies finish value known; return 2 structs-tc-ti
+PASS: gdb.base/structs.exp: set print sevenbit-strings
+PASS: gdb.base/structs.exp: set print address off
+PASS: gdb.base/structs.exp: set width 0
+PASS: gdb.base/structs.exp: set print elements 300
+PASS: gdb.base/structs.exp: ptype foo2; structs-tc-tl
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 2 structs-tc-tl
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 2 structs-tc-tl
+PASS: gdb.base/structs.exp: p/c L<n>; call 2 structs-tc-tl
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 3 structs-tc-tl
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 3 structs-tc-tl
+PASS: gdb.base/structs.exp: p/c L<n>; call 3 structs-tc-tl
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 4 structs-tc-tl
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 4 structs-tc-tl
+PASS: gdb.base/structs.exp: p/c L<n>; call 4 structs-tc-tl
+PASS: gdb.base/structs.exp: advance to fun<n> for return; return 2 structs-tc-tl
+PASS: gdb.base/structs.exp: zed L<n> for return; return 2 structs-tc-tl
+PASS: gdb.base/structs.exp: return foo<n>; return 2 structs-tc-tl
+PASS: gdb.base/structs.exp: value foo<n> returned; return 2 structs-tc-tl
+PASS: gdb.base/structs.exp: advance to fun<n> for finish; return 2 structs-tc-tl
+PASS: gdb.base/structs.exp: zed L<n> for finish; return 2 structs-tc-tl
+PASS: gdb.base/structs.exp: finish foo<n>; return 2 structs-tc-tl
+PASS: gdb.base/structs.exp: value foo<n> finished; return 2 structs-tc-tl
+PASS: gdb.base/structs.exp: return value known implies finish value known; return 2 structs-tc-tl
+PASS: gdb.base/structs.exp: set print sevenbit-strings
+PASS: gdb.base/structs.exp: set print address off
+PASS: gdb.base/structs.exp: set width 0
+PASS: gdb.base/structs.exp: set print elements 300
+PASS: gdb.base/structs.exp: ptype foo2; structs-tc-tll
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 2 structs-tc-tll
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 2 structs-tc-tll
+PASS: gdb.base/structs.exp: p/c L<n>; call 2 structs-tc-tll
+PASS: gdb.base/structs.exp: set print sevenbit-strings
+PASS: gdb.base/structs.exp: set print address off
+PASS: gdb.base/structs.exp: set width 0
+PASS: gdb.base/structs.exp: set print elements 300
+PASS: gdb.base/structs.exp: ptype foo2; structs-tc-tf
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 2 structs-tc-tf
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 2 structs-tc-tf
+PASS: gdb.base/structs.exp: p/c L<n>; call 2 structs-tc-tf
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 3 structs-tc-tf
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 3 structs-tc-tf
+PASS: gdb.base/structs.exp: p/c L<n>; call 3 structs-tc-tf
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 4 structs-tc-tf
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 4 structs-tc-tf
+PASS: gdb.base/structs.exp: p/c L<n>; call 4 structs-tc-tf
+PASS: gdb.base/structs.exp: set print sevenbit-strings
+PASS: gdb.base/structs.exp: set print address off
+PASS: gdb.base/structs.exp: set width 0
+PASS: gdb.base/structs.exp: set print elements 300
+PASS: gdb.base/structs.exp: ptype foo2; structs-tc-td
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 2 structs-tc-td
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 2 structs-tc-td
+PASS: gdb.base/structs.exp: p/c L<n>; call 2 structs-tc-td
+PASS: gdb.base/structs.exp: set print sevenbit-strings
+PASS: gdb.base/structs.exp: set print address off
+PASS: gdb.base/structs.exp: set width 0
+PASS: gdb.base/structs.exp: set print elements 300
+PASS: gdb.base/structs.exp: ptype foo2; structs-tc-tld
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 2 structs-tc-tld
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 2 structs-tc-tld
+PASS: gdb.base/structs.exp: p/c L<n>; call 2 structs-tc-tld
+PASS: gdb.base/structs.exp: set print sevenbit-strings
+PASS: gdb.base/structs.exp: set print address off
+PASS: gdb.base/structs.exp: set width 0
+PASS: gdb.base/structs.exp: set print elements 300
+PASS: gdb.base/structs.exp: ptype foo2; structs-td-tf
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 2 structs-td-tf
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 2 structs-td-tf
+PASS: gdb.base/structs.exp: p/c L<n>; call 2 structs-td-tf
+PASS: gdb.base/structs.exp: advance to fun<n> for return; return 2 structs-td-tf
+PASS: gdb.base/structs.exp: zed L<n> for return; return 2 structs-td-tf
+PASS: gdb.base/structs.exp: return foo<n>; return 2 structs-td-tf
+PASS: gdb.base/structs.exp: value foo<n> returned; return 2 structs-td-tf
+PASS: gdb.base/structs.exp: advance to fun<n> for finish; return 2 structs-td-tf
+PASS: gdb.base/structs.exp: zed L<n> for finish; return 2 structs-td-tf
+PASS: gdb.base/structs.exp: finish foo<n>; return 2 structs-td-tf
+PASS: gdb.base/structs.exp: value foo<n> finished; return 2 structs-td-tf
+PASS: gdb.base/structs.exp: return value known implies finish value known; return 2 structs-td-tf
+PASS: gdb.base/structs.exp: set print sevenbit-strings
+PASS: gdb.base/structs.exp: set print address off
+PASS: gdb.base/structs.exp: set width 0
+PASS: gdb.base/structs.exp: set print elements 300
+PASS: gdb.base/structs.exp: ptype foo2; structs-tf-td
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 2 structs-tf-td
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 2 structs-tf-td
+PASS: gdb.base/structs.exp: p/c L<n>; call 2 structs-tf-td
+PASS: gdb.base/structs.exp: advance to fun<n> for return; return 2 structs-tf-td
+PASS: gdb.base/structs.exp: zed L<n> for return; return 2 structs-tf-td
+PASS: gdb.base/structs.exp: return foo<n>; return 2 structs-tf-td
+PASS: gdb.base/structs.exp: value foo<n> returned; return 2 structs-tf-td
+PASS: gdb.base/structs.exp: advance to fun<n> for finish; return 2 structs-tf-td
+PASS: gdb.base/structs.exp: zed L<n> for finish; return 2 structs-tf-td
+PASS: gdb.base/structs.exp: finish foo<n>; return 2 structs-tf-td
+PASS: gdb.base/structs.exp: value foo<n> finished; return 2 structs-tf-td
+PASS: gdb.base/structs.exp: return value known implies finish value known; return 2 structs-tf-td
+Running ./gdb.base/subst.exp ...
+PASS: gdb.base/subst.exp: deactivate GDB's confirmation interface
+PASS: gdb.base/subst.exp: show substitute-path, no rule entered yet
+PASS: gdb.base/subst.exp: show substitute-path from, no rule entered yet
+PASS: gdb.base/subst.exp: show substitute-path, too many arguments
+PASS: gdb.base/subst.exp: unset substitute-path from, no rule entered yet
+PASS: gdb.base/subst.exp: unset substitute-path, no rule entered yet
+PASS: gdb.base/subst.exp: unset substitute-path from, no rule entered yet
+PASS: gdb.base/subst.exp: unset substitute-path, too many arguments
+PASS: gdb.base/subst.exp: set substitute-path, too many arguments
+PASS: gdb.base/subst.exp: set substitute-path, too few arguments
+PASS: gdb.base/subst.exp: set substitute-path, first argument is empty string
+PASS: gdb.base/subst.exp: add from -> to substitution rule
+PASS: gdb.base/subst.exp: add from1 -> to1 substitution rule
+PASS: gdb.base/subst.exp: add source -> destination substitution rule
+PASS: gdb.base/subst.exp: add depuis -> vers substitution rule
+PASS: gdb.base/subst.exp: add substitution rule to empty string
+PASS: gdb.base/subst.exp: show substitute-path after all paths added
+PASS: gdb.base/subst.exp: show substitute-path from, after all paths added
+PASS: gdb.base/subst.exp: show substitute-path depuis, after all paths added
+PASS: gdb.base/subst.exp: show substitute-path garbage, after all paths added
+PASS: gdb.base/subst.exp: unset substitute-path from
+PASS: gdb.base/subst.exp: show substitute-path from, after unsetting it
+PASS: gdb.base/subst.exp: show substitute-path after from rule removed
+PASS: gdb.base/subst.exp: unset substitute-path from after the rule was removed
+PASS: gdb.base/subst.exp: unset substitute-path depuis (middle of list)
+PASS: gdb.base/subst.exp: show substitute-path after depuis rule removed
+PASS: gdb.base/subst.exp: unset substitute-path empty (end of list)
+PASS: gdb.base/subst.exp: show substitute-path after empty rule removed
+PASS: gdb.base/subst.exp: remove all remaining substitution rules
+PASS: gdb.base/subst.exp: show substitute-path after all remaining rules removed
+Running ./gdb.base/symbol-without-target_section.exp ...
+PASS: gdb.base/symbol-without-target_section.exp: add-symbol-file
+PASS: gdb.base/symbol-without-target_section.exp: list main
+PASS: gdb.base/symbol-without-target_section.exp: print symbol_without_target_section
+Running ./gdb.base/term.exp ...
+Running ./gdb.base/testenv.exp ...
+Running ./gdb.base/trace-commands.exp ...
+PASS: gdb.base/trace-commands.exp: show trace-commands says off
+PASS: gdb.base/trace-commands.exp: source -v
+PASS: gdb.base/trace-commands.exp: set trace-commands
+PASS: gdb.base/trace-commands.exp: show trace-commands says on
+PASS: gdb.base/trace-commands.exp: simple trace-commands test
+PASS: gdb.base/trace-commands.exp: nested trace-commands test
+PASS: gdb.base/trace-commands.exp: define user command
+PASS: gdb.base/trace-commands.exp: nested trace-commands test with source
+PASS: gdb.base/trace-commands.exp: depth resets on error part 1
+PASS: gdb.base/trace-commands.exp: depth resets on error part 2
+Running ./gdb.base/tui-layout.exp ...
+PASS: gdb.base/tui-layout.exp: layout asm
+Running ./gdb.base/twice.exp ...
+PASS: gdb.base/twice.exp: step
+Running ./gdb.base/type-opaque.exp ...
+PASS: gdb.base/type-opaque.exp: opaque struct type resolving
+PASS: gdb.base/type-opaque.exp: empty struct type resolving
+PASS: gdb.base/type-opaque.exp: filled struct type resolving
+PASS: gdb.base/type-opaque.exp: opaque union type resolving
+PASS: gdb.base/type-opaque.exp: empty union type resolving
+PASS: gdb.base/type-opaque.exp: filled union type resolving
+Running ./gdb.base/ui-redirect.exp ...
+PASS: gdb.base/ui-redirect.exp: commands
+PASS: gdb.base/ui-redirect.exp: print 1
+PASS: gdb.base/ui-redirect.exp: end
+PASS: gdb.base/ui-redirect.exp: set logging file /dev/null
+PASS: gdb.base/ui-redirect.exp: set logging on
+PASS: gdb.base/ui-redirect.exp: save breakpoints /dev/null
+PASS: gdb.base/ui-redirect.exp: set logging off
+PASS: gdb.base/ui-redirect.exp: help
+Running ./gdb.base/unload.exp ...
+PASS: gdb.base/unload.exp: pending breakpoint info before run
+PASS: gdb.base/unload.exp: running program
+PASS: gdb.base/unload.exp: pending breakpoint info on first run at shrfunc1
+PASS: gdb.base/unload.exp: continuing to unloaded libfile
+PASS: gdb.base/unload.exp: print y from libfile
+PASS: gdb.base/unload.exp: rerun to shared library breakpoint
+PASS: gdb.base/unload.exp: pending breakpoint info on second run at shrfunc1
+PASS: gdb.base/unload.exp: continuing to unloaded libfile
+PASS: gdb.base/unload.exp: continue to shrfunc2
+PASS: gdb.base/unload.exp: pending breakpoint info on second run at shrfunc2
+PASS: gdb.base/unload.exp: continuing to unloaded libfile2
+PASS: gdb.base/unload.exp: print y from libfile2
+Running ./gdb.base/until.exp ...
+PASS: gdb.base/until.exp: until line number
+PASS: gdb.base/until.exp: malformed until
+PASS: gdb.base/until.exp: until factorial, recursive function
+PASS: gdb.base/until.exp: until func, not called by current frame
+Running ./gdb.base/unwindonsignal.exp ...
+Running ./gdb.base/valgrind-db-attach.exp ...
+Running ./gdb.base/valgrind-infcall.exp ...
+Running ./gdb.base/value-double-free.exp ...
+PASS: gdb.base/value-double-free.exp: watch var
+PASS: gdb.base/value-double-free.exp: continue
+PASS: gdb.base/value-double-free.exp: print empty()
+PASS: gdb.base/value-double-free.exp: help help
+Running ./gdb.base/varargs.exp ...
+PASS: gdb.base/varargs.exp: set print sevenbit-strings
+PASS: gdb.base/varargs.exp: set print address off
+PASS: gdb.base/varargs.exp: set width 0
+Running ./gdb.base/volatile.exp ...
+PASS: gdb.base/volatile.exp: continue to marker1
+PASS: gdb.base/volatile.exp: up from marker1
+PASS: gdb.base/volatile.exp: ptype vox
+PASS: gdb.base/volatile.exp: ptype victuals
+PASS: gdb.base/volatile.exp: ptype vixen
+PASS: gdb.base/volatile.exp: ptype vitriol
+PASS: gdb.base/volatile.exp: ptype vellum
+PASS: gdb.base/volatile.exp: ptype valve
+PASS: gdb.base/volatile.exp: ptype vacuity
+PASS: gdb.base/volatile.exp: ptype vertigo
+PASS: gdb.base/volatile.exp: ptype vampire
+PASS: gdb.base/volatile.exp: ptype viper
+PASS: gdb.base/volatile.exp: ptype vigour
+PASS: gdb.base/volatile.exp: ptype vapour
+PASS: gdb.base/volatile.exp: ptype ventricle
+PASS: gdb.base/volatile.exp: ptype vigintillion
+PASS: gdb.base/volatile.exp: ptype vocation
+PASS: gdb.base/volatile.exp: ptype veracity
+PASS: gdb.base/volatile.exp: ptype vapidity
+PASS: gdb.base/volatile.exp: ptype velocity
+PASS: gdb.base/volatile.exp: ptype veneer
+PASS: gdb.base/volatile.exp: ptype video
+PASS: gdb.base/volatile.exp: ptype vacuum
+PASS: gdb.base/volatile.exp: ptype veniality
+PASS: gdb.base/volatile.exp: ptype vitality
+PASS: gdb.base/volatile.exp: ptype voracity
+PASS: gdb.base/volatile.exp: ptype victor
+PASS: gdb.base/volatile.exp: ptype vicar
+PASS: gdb.base/volatile.exp: ptype victory
+PASS: gdb.base/volatile.exp: ptype vicarage
+PASS: gdb.base/volatile.exp: ptype vein
+PASS: gdb.base/volatile.exp: ptype vogue
+PASS: gdb.base/volatile.exp: ptype cavern
+PASS: gdb.base/volatile.exp: ptype coverlet
+PASS: gdb.base/volatile.exp: ptype caveat
+PASS: gdb.base/volatile.exp: ptype covenant
+PASS: gdb.base/volatile.exp: ptype vizier
+PASS: gdb.base/volatile.exp: ptype vanadium
+PASS: gdb.base/volatile.exp: ptype vane
+PASS: gdb.base/volatile.exp: ptype veldt
+PASS: gdb.base/volatile.exp: ptype cove
+PASS: gdb.base/volatile.exp: ptype cavity
+PASS: gdb.base/volatile.exp: ptype vagus
+PASS: gdb.base/volatile.exp: ptype vagrancy
+PASS: gdb.base/volatile.exp: ptype vagary
+PASS: gdb.base/volatile.exp: ptype vendor
+PASS: gdb.base/volatile.exp: ptype qux2
+Running ./gdb.base/watch-cond.exp ...
+PASS: gdb.base/watch-cond.exp: set write watchpoint on global variable, local condition
+PASS: gdb.base/watch-cond.exp: watchpoint with global expression, local condition evaluates in correct frame
+PASS: gdb.base/watch-cond.exp: set write watchpoint on local variable, local condition
+PASS: gdb.base/watch-cond.exp: watchpoint with local expression, local condition evaluates in correct frame
+PASS: gdb.base/watch-cond.exp: set write watchpoint on global2 variable
+PASS: gdb.base/watch-cond.exp: watchpoint on global2 variable triggers
+PASS: gdb.base/watch-cond.exp: condition of watchpoint 2 changes
+PASS: gdb.base/watch-cond.exp: watchpoint stops with untestable local expression
+Running ./gdb.base/watch-cond-infcall.exp ...
+PASS: gdb.base/watch-cond-infcall.exp: sw: watch var if return_1 ()
+PASS: gdb.base/watch-cond-infcall.exp: sw: continue
+Running ./gdb.base/watch-non-mem.exp ...
+PASS: gdb.base/watch-non-mem.exp: set write watchpoint on $pc
+PASS: gdb.base/watch-non-mem.exp: watchpoint on $pc works
+Running ./gdb.base/watchpoint-cond-gone.exp ...
+PASS: gdb.base/watchpoint-cond-gone.exp: set can-use-hw-watchpoints 0
+PASS: gdb.base/watchpoint-cond-gone.exp: continue to breakpoint: Place to set the watchpoint
+PASS: gdb.base/watchpoint-cond-gone.exp: Place the watchpoint
+PASS: gdb.base/watchpoint-cond-gone.exp: Catch the no longer valid watchpoint
+Running ./gdb.base/watchpoint-delete.exp ...
+PASS: gdb.base/watchpoint-delete.exp: set can-use-hw-watchpoints 0
+PASS: gdb.base/watchpoint-delete.exp: continue to breakpoint: break-here
+PASS: gdb.base/watchpoint-delete.exp: watch x
+PASS: gdb.base/watchpoint-delete.exp: delete $bpnum
+Running ./gdb.base/watchpoint.exp ...
+PASS: gdb.base/watchpoint.exp: disable fast watches
+PASS: gdb.base/watchpoint.exp: show disable fast watches
+PASS: gdb.base/watchpoint.exp: set slow conditional watch
+PASS: gdb.base/watchpoint.exp: trigger slow conditional watch
+PASS: gdb.base/watchpoint.exp: delete watch ival3
+PASS: gdb.base/watchpoint.exp: set slow condition watch w/thread
+PASS: gdb.base/watchpoint.exp: delete watch w/condition and thread
+PASS: gdb.base/watchpoint.exp: rwatch disallowed when can-set-hw-watchpoints cleared
+PASS: gdb.base/watchpoint.exp: set breakpoint at marker1
+PASS: gdb.base/watchpoint.exp: set breakpoint at marker2
+PASS: gdb.base/watchpoint.exp: info break in watchpoint.exp
+PASS: gdb.base/watchpoint.exp: set watchpoint on ival3
+PASS: gdb.base/watchpoint.exp: watchpoint found in watchpoint/breakpoint table
+PASS: gdb.base/watchpoint.exp: disable watchpoint
+PASS: gdb.base/watchpoint.exp: disable watchpoint in test_simple_watchpoint
+PASS: gdb.base/watchpoint.exp: run to marker1 in test_simple_watchpoint
+PASS: gdb.base/watchpoint.exp: enable watchpoint
+PASS: gdb.base/watchpoint.exp: break func1
+PASS: gdb.base/watchpoint.exp: set $func1_breakpoint_number = $bpnum
+PASS: gdb.base/watchpoint.exp: continue to breakpoint at func1
+PASS: gdb.base/watchpoint.exp: watchpoint hit, first time
+PASS: gdb.base/watchpoint.exp: Watchpoint hit count is 1
+PASS: gdb.base/watchpoint.exp: delete $func1_breakpoint_number
+PASS: gdb.base/watchpoint.exp: watchpoint hit, second time
+PASS: gdb.base/watchpoint.exp: Watchpoint hit count is 2
+PASS: gdb.base/watchpoint.exp: watchpoint hit, third time
+PASS: gdb.base/watchpoint.exp: Watchpoint hit count is 3
+PASS: gdb.base/watchpoint.exp: watchpoint hit, fourth time
+PASS: gdb.base/watchpoint.exp: Watchpoint hit count is 4
+PASS: gdb.base/watchpoint.exp: watchpoint hit, fifth time
+PASS: gdb.base/watchpoint.exp: Watchpoint hit count is 5
+PASS: gdb.base/watchpoint.exp: continue to marker2
+PASS: gdb.base/watchpoint.exp: watchpoint disabled
+PASS: gdb.base/watchpoint.exp: continue until exit at continue to exit in test_simple_watchpoint
+PASS: gdb.base/watchpoint.exp: watchpoints found in watchpoint/breakpoint table
+PASS: gdb.base/watchpoint.exp: disable watchpoint in test_disabling_watchpoints
+PASS: gdb.base/watchpoint.exp: run to marker1 in test_disabling_watchpoints
+PASS: gdb.base/watchpoint.exp: watchpoint enabled
+PASS: gdb.base/watchpoint.exp: watchpoint hit in test_disabling_watchpoints, first time
+PASS: gdb.base/watchpoint.exp: watchpoint hit in test_disabling_watchpoints, second time
+PASS: gdb.base/watchpoint.exp: disable watchpoint #2 in test_disabling_watchpoints
+PASS: gdb.base/watchpoint.exp: watchpoint disabled in table
+PASS: gdb.base/watchpoint.exp: disabled watchpoint skipped
+PASS: gdb.base/watchpoint.exp: continue until exit at continue to exit in test_disabling_watchpoints
+PASS: gdb.base/watchpoint.exp: watch ival2
+PASS: gdb.base/watchpoint.exp: break func2 if 0
+PASS: gdb.base/watchpoint.exp: p $func2_breakpoint_number = $bpnum
+PASS: gdb.base/watchpoint.exp: calling function with watchpoint enabled
+PASS: gdb.base/watchpoint.exp: finish from marker1
+PASS: gdb.base/watchpoint.exp: back at main from marker1
+PASS: gdb.base/watchpoint.exp: next to `for' in watchpoint.exp
+PASS: gdb.base/watchpoint.exp: until to ival1 assignment
+PASS: gdb.base/watchpoint.exp: until to ival3 assignment
+PASS: gdb.base/watchpoint.exp: until out of loop
+PASS: gdb.base/watchpoint.exp: step to ival2 assignment
+PASS: gdb.base/watchpoint.exp: watch ptr1->val
+PASS: gdb.base/watchpoint.exp: break marker5
+PASS: gdb.base/watchpoint.exp: Test complex watchpoint
+PASS: gdb.base/watchpoint.exp: did not trigger wrong watchpoint
+PASS: gdb.base/watchpoint.exp: disable in test_complex_watchpoint
+PASS: gdb.base/watchpoint.exp: break marker6
+PASS: gdb.base/watchpoint.exp: continue to marker6
+PASS: gdb.base/watchpoint.exp: continue to breakpoint: func2 breakpoint here
+PASS: gdb.base/watchpoint.exp: set local watch
+PASS: gdb.base/watchpoint.exp: trigger local watch
+PASS: gdb.base/watchpoint.exp: self-delete local watch
+PASS: gdb.base/watchpoint.exp: continue to breakpoint: func2 breakpoint here
+PASS: gdb.base/watchpoint.exp: set partially local watch
+PASS: gdb.base/watchpoint.exp: trigger1 partially local watch
+PASS: gdb.base/watchpoint.exp: trigger2 partially local watch
+PASS: gdb.base/watchpoint.exp: self-delete partially local watch
+PASS: gdb.base/watchpoint.exp: continue to breakpoint: func2 breakpoint here
+PASS: gdb.base/watchpoint.exp: set static local watch
+PASS: gdb.base/watchpoint.exp: trigger static local watch
+PASS: gdb.base/watchpoint.exp: continue after trigger static local watch
+PASS: gdb.base/watchpoint.exp: static local watch did not self-delete
+PASS: gdb.base/watchpoint.exp: tbreak recurser
+PASS: gdb.base/watchpoint.exp: cont
+PASS: gdb.base/watchpoint.exp: next past local_x initialization
+PASS: gdb.base/watchpoint.exp: set local watch in recursive call
+PASS: gdb.base/watchpoint.exp: trigger local watch in recursive call
+PASS: gdb.base/watchpoint.exp: self-delete local watch in recursive call
+PASS: gdb.base/watchpoint.exp: cont
+PASS: gdb.base/watchpoint.exp: tbreak recurser
+PASS: gdb.base/watchpoint.exp: cont
+PASS: gdb.base/watchpoint.exp: next past local_x initialization
+PASS: gdb.base/watchpoint.exp: set local watch in recursive call with explicit scope
+PASS: gdb.base/watchpoint.exp: trigger local watch with explicit scope in recursive call
+PASS: gdb.base/watchpoint.exp: self-delete local watch with explicit scope in recursive call (2)
+PASS: gdb.base/watchpoint.exp: disable in test_complex_watchpoint
+PASS: gdb.base/watchpoint.exp: continue until exit at continue to exit in test_complex_watchpoint
+PASS: gdb.base/watchpoint.exp: watchpoint refused to insert on nonexistent struct member
+PASS: gdb.base/watchpoint.exp: watch global_ptr
+PASS: gdb.base/watchpoint.exp: watch *(int *) 0
+PASS: gdb.base/watchpoint.exp: watch -location *global_ptr
+PASS: gdb.base/watchpoint.exp: watch *global_ptr
+PASS: gdb.base/watchpoint.exp: set $global_ptr_breakpoint_number = $bpnum
+PASS: gdb.base/watchpoint.exp: global_ptr next
+PASS: gdb.base/watchpoint.exp: next over ptr init
+PASS: gdb.base/watchpoint.exp: next over buffer set
+PASS: gdb.base/watchpoint.exp: delete $global_ptr_breakpoint_number
+PASS: gdb.base/watchpoint.exp: watch **global_ptr_ptr
+PASS: gdb.base/watchpoint.exp: set $global_ptr_ptr_breakpoint_number = $bpnum
+PASS: gdb.base/watchpoint.exp: global_ptr_ptr next
+PASS: gdb.base/watchpoint.exp: next over global_ptr_ptr init
+PASS: gdb.base/watchpoint.exp: next over global_ptr_ptr buffer set
+PASS: gdb.base/watchpoint.exp: next over global_ptr_ptr pointer advance
+PASS: gdb.base/watchpoint.exp: delete $global_ptr_ptr_breakpoint_number
+PASS: gdb.base/watchpoint.exp: continue to breakpoint: second x assignment
+PASS: gdb.base/watchpoint.exp: watch x
+PASS: gdb.base/watchpoint.exp: next after watch x
+PASS: gdb.base/watchpoint.exp: delete watch x
+PASS: gdb.base/watchpoint.exp: watch buf
+PASS: gdb.base/watchpoint.exp: watchpoint on buf hit
+PASS: gdb.base/watchpoint.exp: delete watch buf
+PASS: gdb.base/watchpoint.exp: number is constant
+PASS: gdb.base/watchpoint.exp: number with cast is constant
+PASS: gdb.base/watchpoint.exp: marker1 is constant
+PASS: gdb.base/watchpoint.exp: watch count + 6
+PASS: gdb.base/watchpoint.exp: delete watchpoint `count + 6'
+PASS: gdb.base/watchpoint.exp: watch 7 + count
+PASS: gdb.base/watchpoint.exp: delete watchpoint `7 + count'
+PASS: gdb.base/watchpoint.exp: watch $pc
+PASS: gdb.base/watchpoint.exp: disable watchpoint `$pc'
+PASS: gdb.base/watchpoint.exp: reenable watchpoint `$pc'
+PASS: gdb.base/watchpoint.exp: watchpoint `$pc' is enabled
+PASS: gdb.base/watchpoint.exp: delete watchpoint `$pc'
+PASS: gdb.base/watchpoint.exp: continue to breakpoint: func5 breakpoint here
+PASS: gdb.base/watchpoint.exp: watch -location .x
+PASS: gdb.base/watchpoint.exp: continue with watch -location
+PASS: gdb.base/watchpoint.exp: delete watch -location
+PASS: gdb.base/watchpoint.exp: continue to breakpoint: func6 breakpoint here
+PASS: gdb.base/watchpoint.exp: watch foo2
+PASS: gdb.base/watchpoint.exp: continue with watch foo2
+PASS: gdb.base/watchpoint.exp: delete watch foo2
+PASS: gdb.base/watchpoint.exp: continue to breakpoint: func7 breakpoint here
+PASS: gdb.base/watchpoint.exp: watch foo4
+PASS: gdb.base/watchpoint.exp: continue with watch foo4
+PASS: gdb.base/watchpoint.exp: delete watch foo4
+Running ./gdb.base/watchpoint-hw.exp ...
+Running ./gdb.base/watchpoint-hw-hit-once.exp ...
+Running ./gdb.base/watchpoints.exp ...
+PASS: gdb.base/watchpoints.exp: watchpoint hit, first time
+PASS: gdb.base/watchpoints.exp: watchpoint hit, first time
+PASS: gdb.base/watchpoints.exp: Watchpoint hit count is 1
+PASS: gdb.base/watchpoints.exp: watchpoint ival1 hit, second time
+PASS: gdb.base/watchpoints.exp: Watchpoint ival1 hit count is 2
+PASS: gdb.base/watchpoints.exp: watchpoint hit, second time
+PASS: gdb.base/watchpoints.exp: Watchpoint hit count is 2
+PASS: gdb.base/watchpoints.exp: watchpoint ival1 hit, third time
+PASS: gdb.base/watchpoints.exp: Watchpoint ival1 hit count is 3
+PASS: gdb.base/watchpoints.exp: watchpoint hit, third time
+PASS: gdb.base/watchpoints.exp: Watchpoint hit count is 3
+PASS: gdb.base/watchpoints.exp: watchpoint hit, fourth time
+PASS: gdb.base/watchpoints.exp: Watchpoint hit count is 4
+PASS: gdb.base/watchpoints.exp: watchpoint hit, fifth time
+PASS: gdb.base/watchpoints.exp: Watchpoint hit count is 5
+Running ./gdb.base/watchpoint-solib.exp ...
+PASS: gdb.base/watchpoint-solib.exp: set pending breakpoint
+PASS: gdb.base/watchpoint-solib.exp: continue to foo
+PASS: gdb.base/watchpoint-solib.exp: set watchpoint on g
+PASS: gdb.base/watchpoint-solib.exp: continue to watchpoint hit
+PASS: gdb.base/watchpoint-solib.exp: rerun to main
+PASS: gdb.base/watchpoint-solib.exp: continue to foo again
+PASS: gdb.base/watchpoint-solib.exp: continue to watchpoint hit again
+Running ./gdb.base/watch-read.exp ...
+Running ./gdb.base/watch_thread_num.exp ...
+Running ./gdb.base/watch-vfork.exp ...
+Running ./gdb.base/wchar.exp ...
+PASS: gdb.base/wchar.exp: print narrow
+PASS: gdb.base/wchar.exp: print single
+PASS: gdb.base/wchar.exp: print simple
+PASS: gdb.base/wchar.exp: print difficile
+PASS: gdb.base/wchar.exp: print simple[2]
+PASS: gdb.base/wchar.exp: print difficile[2]
+PASS: gdb.base/wchar.exp: print repeat
+PASS: gdb.base/wchar.exp: print repeat_p
+PASS: gdb.base/wchar.exp: set print null on
+PASS: gdb.base/wchar.exp: print repeat (print null on)
+PASS: gdb.base/wchar.exp: set print elements 3
+PASS: gdb.base/wchar.exp: print repeat (print elements 3)
+PASS: gdb.base/wchar.exp: print repeat_p (print elements 3)
+Running ./gdb.base/whatis.exp ...
+PASS: gdb.base/whatis.exp: whatis char
+PASS: gdb.base/whatis.exp: whatis signed char
+PASS: gdb.base/whatis.exp: whatis unsigned char
+PASS: gdb.base/whatis.exp: whatis short
+PASS: gdb.base/whatis.exp: whatis signed short
+PASS: gdb.base/whatis.exp: whatis unsigned short
+PASS: gdb.base/whatis.exp: whatis int
+PASS: gdb.base/whatis.exp: whatis signed int
+PASS: gdb.base/whatis.exp: whatis unsigned int
+PASS: gdb.base/whatis.exp: whatis long
+PASS: gdb.base/whatis.exp: whatis signed long
+PASS: gdb.base/whatis.exp: whatis unsigned long
+PASS: gdb.base/whatis.exp: whatis unsigned long long
+PASS: gdb.base/whatis.exp: whatis float
+PASS: gdb.base/whatis.exp: whatis double
+PASS: gdb.base/whatis.exp: whatis char array
+PASS: gdb.base/whatis.exp: whatis signed char array
+PASS: gdb.base/whatis.exp: whatis unsigned char array
+PASS: gdb.base/whatis.exp: whatis short array
+PASS: gdb.base/whatis.exp: whatis signed short array
+PASS: gdb.base/whatis.exp: whatis unsigned short array
+PASS: gdb.base/whatis.exp: whatis int array
+PASS: gdb.base/whatis.exp: whatis signed int array
+PASS: gdb.base/whatis.exp: whatis unsigned int array
+PASS: gdb.base/whatis.exp: whatis long array
+PASS: gdb.base/whatis.exp: whatis signed long array
+PASS: gdb.base/whatis.exp: whatis unsigned long array
+PASS: gdb.base/whatis.exp: whatis unsigned long array
+PASS: gdb.base/whatis.exp: whatis float array
+PASS: gdb.base/whatis.exp: whatis double array
+PASS: gdb.base/whatis.exp: whatis char pointer
+PASS: gdb.base/whatis.exp: whatis signed char pointer
+PASS: gdb.base/whatis.exp: whatis unsigned char pointer
+PASS: gdb.base/whatis.exp: whatis short pointer
+PASS: gdb.base/whatis.exp: whatis signed short pointer
+PASS: gdb.base/whatis.exp: whatis unsigned short pointer
+PASS: gdb.base/whatis.exp: whatis int pointer
+PASS: gdb.base/whatis.exp: whatis signed int pointer
+PASS: gdb.base/whatis.exp: whatis unsigned int pointer
+PASS: gdb.base/whatis.exp: whatis long pointer
+PASS: gdb.base/whatis.exp: whatis signed long pointer
+PASS: gdb.base/whatis.exp: whatis unsigned long pointer
+PASS: gdb.base/whatis.exp: whatis long long pointer
+PASS: gdb.base/whatis.exp: whatis signed long long pointer
+PASS: gdb.base/whatis.exp: whatis unsigned long long pointer
+PASS: gdb.base/whatis.exp: whatis float pointer
+PASS: gdb.base/whatis.exp: whatis double pointer
+PASS: gdb.base/whatis.exp: whatis named structure
+PASS: gdb.base/whatis.exp: whatis named structure using type name
+PASS: gdb.base/whatis.exp: whatis unnamed structure
+PASS: gdb.base/whatis.exp: whatis named union
+PASS: gdb.base/whatis.exp: whatis named union using type name
+PASS: gdb.base/whatis.exp: whatis unnamed union
+PASS: gdb.base/whatis.exp: whatis char function
+PASS: gdb.base/whatis.exp: whatis signed char function
+PASS: gdb.base/whatis.exp: whatis unsigned char function
+PASS: gdb.base/whatis.exp: whatis short function
+PASS: gdb.base/whatis.exp: whatis signed short function
+PASS: gdb.base/whatis.exp: whatis unsigned short function
+PASS: gdb.base/whatis.exp: whatis int function
+PASS: gdb.base/whatis.exp: whatis signed int function
+PASS: gdb.base/whatis.exp: whatis unsigned int function
+PASS: gdb.base/whatis.exp: whatis long function
+PASS: gdb.base/whatis.exp: whatis signed long function
+PASS: gdb.base/whatis.exp: whatis unsigned long function
+PASS: gdb.base/whatis.exp: whatis long long function
+PASS: gdb.base/whatis.exp: whatis signed long long function
+PASS: gdb.base/whatis.exp: whatis unsigned long long function
+PASS: gdb.base/whatis.exp: whatis float function
+PASS: gdb.base/whatis.exp: whatis double function
+PASS: gdb.base/whatis.exp: whatis complicated structure
+PASS: gdb.base/whatis.exp: whatis complicated union
+PASS: gdb.base/whatis.exp: whatis enumeration
+PASS: gdb.base/whatis.exp: whatis enumeration using type name
+PASS: gdb.base/whatis.exp: whatis outer structure
+PASS: gdb.base/whatis.exp: whatis outer structure member
+PASS: gdb.base/whatis.exp: whatis inner structure
+PASS: gdb.base/whatis.exp: whatis inner structure member
+PASS: gdb.base/whatis.exp: whatis inner union
+PASS: gdb.base/whatis.exp: whatis inner union member
+PASS: gdb.base/whatis.exp: whatis using typedef type name
+PASS: gdb.base/whatis.exp: whatis applied to variable defined by typedef
+PASS: gdb.base/whatis.exp: whatis applied to pointer to pointer to function
+PASS: gdb.base/whatis.exp: whatis applied to const pointer to pointer to function
+PASS: gdb.base/whatis.exp: whatis applied to pointer to const pointer to function
+PASS: gdb.base/whatis.exp: whatis applied to pointer to function returning pointer to int
+PASS: gdb.base/whatis.exp: whatis applied to pointer to pointer to function returning pointer to int
+PASS: gdb.base/whatis.exp: whatis applied to pointer to function returning pointer to array
+PASS: gdb.base/whatis.exp: whatis applied to pointer to function taking int,int and returning int
+PASS: gdb.base/whatis.exp: whatis applied to pointer to function taking const int ptr and varargs and returning int
+PASS: gdb.base/whatis.exp: whatis applied to function with types trailing 'void'
+PASS: gdb.base/whatis.exp: whatis applied to function with 'void' parameter type
+Running ./gdb.base/whatis-exp.exp ...
+PASS: gdb.base/whatis-exp.exp: set variable x=14
+PASS: gdb.base/whatis-exp.exp: set variable y=2
+PASS: gdb.base/whatis-exp.exp: set variable z=2
+PASS: gdb.base/whatis-exp.exp: set variable w=3
+PASS: gdb.base/whatis-exp.exp: print value of x
+PASS: gdb.base/whatis-exp.exp: print value of y
+PASS: gdb.base/whatis-exp.exp: print value of z
+PASS: gdb.base/whatis-exp.exp: print value of w
+PASS: gdb.base/whatis-exp.exp: whatis value of x+y
+PASS: gdb.base/whatis-exp.exp: whatis value of x-y
+PASS: gdb.base/whatis-exp.exp: whatis value of x*y
+PASS: gdb.base/whatis-exp.exp: whatis value of x/y
+PASS: gdb.base/whatis-exp.exp: whatis value of x%y
+PASS: gdb.base/whatis-exp.exp: whatis value of x=y
+PASS: gdb.base/whatis-exp.exp: whatis value of x+=2
+PASS: gdb.base/whatis-exp.exp: whatis value of ++x
+PASS: gdb.base/whatis-exp.exp: whatis value of --x
+PASS: gdb.base/whatis-exp.exp: whatis value of x++
+PASS: gdb.base/whatis-exp.exp: whatis value of x--
+Running ./gdb.btrace/enable.exp ...
+Running ./gdb.btrace/function_call_history.exp ...
+Running ./gdb.btrace/instruction_history.exp ...
+Running ./gdb.cell/arch.exp ...
+Running ./gdb.cell/break.exp ...
+Running ./gdb.cell/bt.exp ...
+Running ./gdb.cell/core.exp ...
+Running ./gdb.cell/data.exp ...
+Running ./gdb.cell/dwarfaddr.exp ...
+Running ./gdb.cell/ea-cache.exp ...
+Running ./gdb.cell/ea-standalone.exp ...
+Running ./gdb.cell/ea-test.exp ...
+Running ./gdb.cell/fork.exp ...
+Running ./gdb.cell/f-regs.exp ...
+Running ./gdb.cell/gcore.exp ...
+Running ./gdb.cell/mem-access.exp ...
+Running ./gdb.cell/ptype.exp ...
+Running ./gdb.cell/registers.exp ...
+Running ./gdb.cell/sizeof.exp ...
+Running ./gdb.cell/solib.exp ...
+Running ./gdb.cell/solib-symbol.exp ...
+Running ./gdb.cp/abstract-origin.exp ...
+PASS: gdb.cp/abstract-origin.exp: continue to breakpoint: break-here
+PASS: gdb.cp/abstract-origin.exp: p problem
+Running ./gdb.cp/ambiguous.exp ...
+Running ./gdb.cp/annota2.exp ...
+Running ./gdb.cp/annota3.exp ...
+Running ./gdb.cp/anon-ns.exp ...
+PASS: gdb.cp/anon-ns.exp: list (anonymous namespace)::doit1(void)
+PASS: gdb.cp/anon-ns.exp: list '(anonymous namespace)::doit1(void)'
+PASS: gdb.cp/anon-ns.exp: break (anonymous namespace)::doit1(void)
+PASS: gdb.cp/anon-ns.exp: break '(anonymous namespace)::doit1(void)'
+PASS: gdb.cp/anon-ns.exp: list (anonymous namespace)::one::one(void)
+PASS: gdb.cp/anon-ns.exp: list '(anonymous namespace)::one::one(void)'
+PASS: gdb.cp/anon-ns.exp: break (anonymous namespace)::one::one(void)
+PASS: gdb.cp/anon-ns.exp: break '(anonymous namespace)::one::one(void)'
+PASS: gdb.cp/anon-ns.exp: list (anonymous namespace)::A::doit2(void)
+PASS: gdb.cp/anon-ns.exp: list '(anonymous namespace)::A::doit2(void)'
+PASS: gdb.cp/anon-ns.exp: break (anonymous namespace)::A::doit2(void)
+PASS: gdb.cp/anon-ns.exp: break '(anonymous namespace)::A::doit2(void)'
+PASS: gdb.cp/anon-ns.exp: list (anonymous namespace)::A::two::two(void)
+PASS: gdb.cp/anon-ns.exp: list '(anonymous namespace)::A::two::two(void)'
+PASS: gdb.cp/anon-ns.exp: break (anonymous namespace)::A::two::two(void)
+PASS: gdb.cp/anon-ns.exp: break '(anonymous namespace)::A::two::two(void)'
+PASS: gdb.cp/anon-ns.exp: list (anonymous namespace)::A::(anonymous namespace)::(anonymous namespace)::doit3(void)
+PASS: gdb.cp/anon-ns.exp: list '(anonymous namespace)::A::(anonymous namespace)::(anonymous namespace)::doit3(void)'
+PASS: gdb.cp/anon-ns.exp: break (anonymous namespace)::A::(anonymous namespace)::(anonymous namespace)::doit3(void)
+PASS: gdb.cp/anon-ns.exp: break '(anonymous namespace)::A::(anonymous namespace)::(anonymous namespace)::doit3(void)'
+PASS: gdb.cp/anon-ns.exp: list (anonymous namespace)::A::(anonymous namespace)::(anonymous namespace)::three::three(void)
+PASS: gdb.cp/anon-ns.exp: list '(anonymous namespace)::A::(anonymous namespace)::(anonymous namespace)::three::three(void)'
+PASS: gdb.cp/anon-ns.exp: break (anonymous namespace)::A::(anonymous namespace)::(anonymous namespace)::three::three(void)
+PASS: gdb.cp/anon-ns.exp: break '(anonymous namespace)::A::(anonymous namespace)::(anonymous namespace)::three::three(void)'
+PASS: gdb.cp/anon-ns.exp: list (anonymous namespace)::doit1(int)
+PASS: gdb.cp/anon-ns.exp: list '(anonymous namespace)::doit1(int)'
+PASS: gdb.cp/anon-ns.exp: break (anonymous namespace)::doit1(int)
+PASS: gdb.cp/anon-ns.exp: break '(anonymous namespace)::doit1(int)'
+PASS: gdb.cp/anon-ns.exp: list (anonymous namespace)::one::one(int)
+PASS: gdb.cp/anon-ns.exp: list '(anonymous namespace)::one::one(int)'
+PASS: gdb.cp/anon-ns.exp: break (anonymous namespace)::one::one(int)
+PASS: gdb.cp/anon-ns.exp: break '(anonymous namespace)::one::one(int)'
+PASS: gdb.cp/anon-ns.exp: list (anonymous namespace)::A::doit2(int)
+PASS: gdb.cp/anon-ns.exp: list '(anonymous namespace)::A::doit2(int)'
+PASS: gdb.cp/anon-ns.exp: break (anonymous namespace)::A::doit2(int)
+PASS: gdb.cp/anon-ns.exp: break '(anonymous namespace)::A::doit2(int)'
+PASS: gdb.cp/anon-ns.exp: list (anonymous namespace)::A::two::two(int)
+PASS: gdb.cp/anon-ns.exp: list '(anonymous namespace)::A::two::two(int)'
+PASS: gdb.cp/anon-ns.exp: break (anonymous namespace)::A::two::two(int)
+PASS: gdb.cp/anon-ns.exp: break '(anonymous namespace)::A::two::two(int)'
+PASS: gdb.cp/anon-ns.exp: list (anonymous namespace)::A::(anonymous namespace)::(anonymous namespace)::doit3(int)
+PASS: gdb.cp/anon-ns.exp: list '(anonymous namespace)::A::(anonymous namespace)::(anonymous namespace)::doit3(int)'
+PASS: gdb.cp/anon-ns.exp: break (anonymous namespace)::A::(anonymous namespace)::(anonymous namespace)::doit3(int)
+PASS: gdb.cp/anon-ns.exp: break '(anonymous namespace)::A::(anonymous namespace)::(anonymous namespace)::doit3(int)'
+PASS: gdb.cp/anon-ns.exp: list (anonymous namespace)::A::(anonymous namespace)::(anonymous namespace)::three::three(int)
+PASS: gdb.cp/anon-ns.exp: list '(anonymous namespace)::A::(anonymous namespace)::(anonymous namespace)::three::three(int)'
+PASS: gdb.cp/anon-ns.exp: break (anonymous namespace)::A::(anonymous namespace)::(anonymous namespace)::three::three(int)
+PASS: gdb.cp/anon-ns.exp: break '(anonymous namespace)::A::(anonymous namespace)::(anonymous namespace)::three::three(int)'
+PASS: gdb.cp/anon-ns.exp: list (anonymous namespace)::doit1(char *)
+PASS: gdb.cp/anon-ns.exp: list '(anonymous namespace)::doit1(char *)'
+PASS: gdb.cp/anon-ns.exp: break (anonymous namespace)::doit1(char *)
+PASS: gdb.cp/anon-ns.exp: break '(anonymous namespace)::doit1(char *)'
+PASS: gdb.cp/anon-ns.exp: list (anonymous namespace)::one::one(char *)
+PASS: gdb.cp/anon-ns.exp: list '(anonymous namespace)::one::one(char *)'
+PASS: gdb.cp/anon-ns.exp: break (anonymous namespace)::one::one(char *)
+PASS: gdb.cp/anon-ns.exp: break '(anonymous namespace)::one::one(char *)'
+PASS: gdb.cp/anon-ns.exp: list (anonymous namespace)::A::doit2(char *)
+PASS: gdb.cp/anon-ns.exp: list '(anonymous namespace)::A::doit2(char *)'
+PASS: gdb.cp/anon-ns.exp: break (anonymous namespace)::A::doit2(char *)
+PASS: gdb.cp/anon-ns.exp: break '(anonymous namespace)::A::doit2(char *)'
+PASS: gdb.cp/anon-ns.exp: list (anonymous namespace)::A::two::two(char *)
+PASS: gdb.cp/anon-ns.exp: list '(anonymous namespace)::A::two::two(char *)'
+PASS: gdb.cp/anon-ns.exp: break (anonymous namespace)::A::two::two(char *)
+PASS: gdb.cp/anon-ns.exp: break '(anonymous namespace)::A::two::two(char *)'
+PASS: gdb.cp/anon-ns.exp: list (anonymous namespace)::A::(anonymous namespace)::(anonymous namespace)::doit3(char *)
+PASS: gdb.cp/anon-ns.exp: list '(anonymous namespace)::A::(anonymous namespace)::(anonymous namespace)::doit3(char *)'
+PASS: gdb.cp/anon-ns.exp: break (anonymous namespace)::A::(anonymous namespace)::(anonymous namespace)::doit3(char *)
+PASS: gdb.cp/anon-ns.exp: break '(anonymous namespace)::A::(anonymous namespace)::(anonymous namespace)::doit3(char *)'
+PASS: gdb.cp/anon-ns.exp: list (anonymous namespace)::A::(anonymous namespace)::(anonymous namespace)::three::three(char *)
+PASS: gdb.cp/anon-ns.exp: list '(anonymous namespace)::A::(anonymous namespace)::(anonymous namespace)::three::three(char *)'
+PASS: gdb.cp/anon-ns.exp: break (anonymous namespace)::A::(anonymous namespace)::(anonymous namespace)::three::three(char *)
+PASS: gdb.cp/anon-ns.exp: break '(anonymous namespace)::A::(anonymous namespace)::(anonymous namespace)::three::three(char *)'
+PASS: gdb.cp/anon-ns.exp: list (anonymous namespace)::one::doit(void)
+PASS: gdb.cp/anon-ns.exp: list '(anonymous namespace)::one::doit(void)'
+PASS: gdb.cp/anon-ns.exp: break (anonymous namespace)::one::doit(void)
+PASS: gdb.cp/anon-ns.exp: break '(anonymous namespace)::one::doit(void)'
+PASS: gdb.cp/anon-ns.exp: list (anonymous namespace)::A::two::doit(void)
+PASS: gdb.cp/anon-ns.exp: list '(anonymous namespace)::A::two::doit(void)'
+PASS: gdb.cp/anon-ns.exp: break (anonymous namespace)::A::two::doit(void)
+PASS: gdb.cp/anon-ns.exp: break '(anonymous namespace)::A::two::doit(void)'
+PASS: gdb.cp/anon-ns.exp: list (anonymous namespace)::A::(anonymous namespace)::(anonymous namespace)::three::doit(void)
+PASS: gdb.cp/anon-ns.exp: list '(anonymous namespace)::A::(anonymous namespace)::(anonymous namespace)::three::doit(void)'
+PASS: gdb.cp/anon-ns.exp: break (anonymous namespace)::A::(anonymous namespace)::(anonymous namespace)::three::doit(void)
+PASS: gdb.cp/anon-ns.exp: break '(anonymous namespace)::A::(anonymous namespace)::(anonymous namespace)::three::doit(void)'
+Running ./gdb.cp/anon-struct.exp ...
+FAIL: gdb.cp/anon-struct.exp: print type of t::t
+PASS: gdb.cp/anon-struct.exp: print type of X::t2
+FAIL: gdb.cp/anon-struct.exp: print type of X::t2::t2
+FAIL: gdb.cp/anon-struct.exp: print type of t3::~t3
+Running ./gdb.cp/anon-union.exp ...
+PASS: gdb.cp/anon-union.exp: set width 0
+PASS: gdb.cp/anon-union.exp: next 1
+PASS: gdb.cp/anon-union.exp: print foo 1
+PASS: gdb.cp/anon-union.exp: next 2
+PASS: gdb.cp/anon-union.exp: print foo 2
+PASS: gdb.cp/anon-union.exp: set var foo.cloth
+PASS: gdb.cp/anon-union.exp: print foo 3
+PASS: gdb.cp/anon-union.exp: next 3
+PASS: gdb.cp/anon-union.exp: print foo 4
+PASS: gdb.cp/anon-union.exp: set var foo.pebble
+PASS: gdb.cp/anon-union.exp: print foo 5
+PASS: gdb.cp/anon-union.exp: set var foo.qux
+PASS: gdb.cp/anon-union.exp: print foo 6
+PASS: gdb.cp/anon-union.exp: set var foo.mux
+PASS: gdb.cp/anon-union.exp: print foo 7
+PASS: gdb.cp/anon-union.exp: set var foo.x.rock
+PASS: gdb.cp/anon-union.exp: print foo 8
+PASS: gdb.cp/anon-union.exp: set var foo.x.rock2
+PASS: gdb.cp/anon-union.exp: print foo 9
+PASS: gdb.cp/anon-union.exp: next 4
+PASS: gdb.cp/anon-union.exp: print w 1
+PASS: gdb.cp/anon-union.exp: print z 1
+PASS: gdb.cp/anon-union.exp: next 5
+PASS: gdb.cp/anon-union.exp: print w 2
+PASS: gdb.cp/anon-union.exp: print z 2
+PASS: gdb.cp/anon-union.exp: set var z
+PASS: gdb.cp/anon-union.exp: print w 3
+PASS: gdb.cp/anon-union.exp: print z 3
+Running ./gdb.cp/arg-reference.exp ...
+PASS: gdb.cp/arg-reference.exp: No false reference
+Running ./gdb.cp/baseenum.exp ...
+PASS: gdb.cp/baseenum.exp: continue to breakpoint: breakpoint 1
+PASS: gdb.cp/baseenum.exp: Print enum constant X of class A
+PASS: gdb.cp/baseenum.exp: continue to breakpoint: breakpoint 2
+PASS: gdb.cp/baseenum.exp: Print enum constant X of class A in namespace N
+Running ./gdb.cp/bool.exp ...
+PASS: gdb.cp/bool.exp: print return_true()
+PASS: gdb.cp/bool.exp: print return_false()
+Running ./gdb.cp/breakpoint.exp ...
+PASS: gdb.cp/breakpoint.exp: continue to C1::Nested::foo
+PASS: gdb.cp/breakpoint.exp: conditional breakpoint in method
+PASS: gdb.cp/breakpoint.exp: conditional breakpoint in method 2
+PASS: gdb.cp/breakpoint.exp: continue to breakpoint
+PASS: gdb.cp/breakpoint.exp: check the member variable
+PASS: gdb.cp/breakpoint.exp: continue to breakpoint
+PASS: gdb.cp/breakpoint.exp: check the member variable
+Running ./gdb.cp/bs15503.exp ...
+PASS: gdb.cp/bs15503.exp: break StringTest<wchar_t>::testFunction
+PASS: gdb.cp/bs15503.exp: continue to StringTest<wchar_t>
+PASS: gdb.cp/bs15503.exp: continue to breakpoint: find position where blank needs to be inserted
+FAIL: gdb.cp/bs15503.exp: print s.length()
+FAIL: gdb.cp/bs15503.exp: print s[0]
+FAIL: gdb.cp/bs15503.exp: print s[s.length()-1]
+PASS: gdb.cp/bs15503.exp: print (const char *) s
+FAIL: gdb.cp/bs15503.exp: print (const char *) s.substr(0,4)
+FAIL: gdb.cp/bs15503.exp: print (const char *) (s=s.substr(0,4))
+Running ./gdb.cp/call-c.exp ...
+PASS: gdb.cp/call-c.exp: b 43
+PASS: gdb.cp/call-c.exp: print foo(1)
+PASS: gdb.cp/call-c.exp: continue to bp
+PASS: gdb.cp/call-c.exp: print rf->func()
+PASS: gdb.cp/call-c.exp: print handle->func()
+Running ./gdb.cp/casts.exp ...
+PASS: gdb.cp/casts.exp: cast base class pointer to derived class pointer
+PASS: gdb.cp/casts.exp: let compiler cast base class pointer to derived class pointer
+PASS: gdb.cp/casts.exp: cast derived class pointer to base class pointer
+PASS: gdb.cp/casts.exp: cast derived class reference to base class reference
+PASS: gdb.cp/casts.exp: cast base class reference to derived class reference
+PASS: gdb.cp/casts.exp: let compiler cast base class reference to derived class reference
+PASS: gdb.cp/casts.exp: basic test of const_cast
+PASS: gdb.cp/casts.exp: const_cast of 0
+PASS: gdb.cp/casts.exp: basic test of static_cast
+PASS: gdb.cp/casts.exp: static_cast to reference type
+PASS: gdb.cp/casts.exp: basic test of reinterpret_cast
+PASS: gdb.cp/casts.exp: test invalid reinterpret_cast
+PASS: gdb.cp/casts.exp: reinterpret_cast to reference type
+PASS: gdb.cp/casts.exp: whatis decltype(5)
+PASS: gdb.cp/casts.exp: old-style cast using __typeof__
+PASS: gdb.cp/casts.exp: static_cast using __typeof__
+PASS: gdb.cp/casts.exp: reinterpret_cast using __typeof__
+PASS: gdb.cp/casts.exp: old-style cast using __typeof
+PASS: gdb.cp/casts.exp: static_cast using __typeof
+PASS: gdb.cp/casts.exp: reinterpret_cast using __typeof
+PASS: gdb.cp/casts.exp: old-style cast using __decltype
+PASS: gdb.cp/casts.exp: static_cast using __decltype
+PASS: gdb.cp/casts.exp: reinterpret_cast using __decltype
+PASS: gdb.cp/casts.exp: whatis __decltype(*a)
+PASS: gdb.cp/casts.exp: invalid dynamic_cast
+PASS: gdb.cp/casts.exp: dynamic_cast of 0 to void*
+PASS: gdb.cp/casts.exp: dynamic_cast simple upcast
+PASS: gdb.cp/casts.exp: dynamic_cast upcast to unique base
+PASS: gdb.cp/casts.exp: dynamic_cast simple upcast to reference
+PASS: gdb.cp/casts.exp: dynamic_cast simple downcast
+PASS: gdb.cp/casts.exp: dynamic_cast simple downcast to intermediate class
+PASS: gdb.cp/casts.exp: dynamic_cast to non-existing base
+PASS: gdb.cp/casts.exp: dynamic_cast to reference to non-existing base
+PASS: gdb.cp/casts.exp: dynamic_cast unique downcast
+PASS: gdb.cp/casts.exp: dynamic_cast to sibling
+Running ./gdb.cp/class2.exp ...
+PASS: gdb.cp/class2.exp: set print object off
+PASS: gdb.cp/class2.exp: print alpha at marker return 0
+PASS: gdb.cp/class2.exp: print beta at marker return 0
+PASS: gdb.cp/class2.exp: print * aap at marker return 0
+PASS: gdb.cp/class2.exp: print * bbp at marker return 0
+PASS: gdb.cp/class2.exp: print * abp at marker return 0, s-p-o off
+PASS: gdb.cp/class2.exp: print * (B *) abp at marker return 0
+PASS: gdb.cp/class2.exp: print object with no data fields
+PASS: gdb.cp/class2.exp: set print object on
+PASS: gdb.cp/class2.exp: p acp
+PASS: gdb.cp/class2.exp: p acp->c1
+PASS: gdb.cp/class2.exp: p acp->c2
+Running ./gdb.cp/classes.exp ...
+PASS: gdb.cp/classes.exp: ptype struct default_public_struct
+PASS: gdb.cp/classes.exp: ptype struct explicit_public_struct
+PASS: gdb.cp/classes.exp: ptype struct protected_struct
+PASS: gdb.cp/classes.exp: ptype struct private_struct
+PASS: gdb.cp/classes.exp: ptype struct mixed_protection_struct
+PASS: gdb.cp/classes.exp: ptype class public_class
+PASS: gdb.cp/classes.exp: ptype class protected_class
+PASS: gdb.cp/classes.exp: ptype class default_private_class
+PASS: gdb.cp/classes.exp: ptype class explicit_private_class
+PASS: gdb.cp/classes.exp: ptype class mixed_protection_class
+PASS: gdb.cp/classes.exp: ptype class A
+PASS: gdb.cp/classes.exp: ptype class B
+PASS: gdb.cp/classes.exp: ptype class C
+PASS: gdb.cp/classes.exp: ptype class D
+PASS: gdb.cp/classes.exp: ptype class E
+PASS: gdb.cp/classes.exp: ptype class Static
+PASS: gdb.cp/classes.exp: ptype class vA
+PASS: gdb.cp/classes.exp: ptype class vB
+PASS: gdb.cp/classes.exp: ptype class vC
+PASS: gdb.cp/classes.exp: ptype class vD
+PASS: gdb.cp/classes.exp: ptype class vE
+PASS: gdb.cp/classes.exp: ptype class Base1
+PASS: gdb.cp/classes.exp: ptype class Foo
+PASS: gdb.cp/classes.exp: ptype class Bar
+PASS: gdb.cp/classes.exp: print g_A.a
+PASS: gdb.cp/classes.exp: print g_A.x
+PASS: gdb.cp/classes.exp: print g_B.b
+PASS: gdb.cp/classes.exp: print g_B.x
+PASS: gdb.cp/classes.exp: print g_C.c
+PASS: gdb.cp/classes.exp: print g_C.x
+PASS: gdb.cp/classes.exp: print g_D.d
+PASS: gdb.cp/classes.exp: print g_D.x
+PASS: gdb.cp/classes.exp: print g_E.e
+PASS: gdb.cp/classes.exp: print g_E.x
+PASS: gdb.cp/classes.exp: print g_A.b
+PASS: gdb.cp/classes.exp: print g_B.c
+PASS: gdb.cp/classes.exp: print g_B.d
+PASS: gdb.cp/classes.exp: print g_C.b
+PASS: gdb.cp/classes.exp: print g_C.d
+PASS: gdb.cp/classes.exp: print g_D.e
+PASS: gdb.cp/classes.exp: print g_A.y
+PASS: gdb.cp/classes.exp: print g_B.z
+PASS: gdb.cp/classes.exp: print g_C.q
+PASS: gdb.cp/classes.exp: print g_D.p
+PASS: gdb.cp/classes.exp: call class_param.Aptr_a (&g_A)
+PASS: gdb.cp/classes.exp: call class_param.Aptr_x (&g_A)
+PASS: gdb.cp/classes.exp: call class_param.Aptr_a (&g_B)
+PASS: gdb.cp/classes.exp: call class_param.Aptr_x (&g_B)
+PASS: gdb.cp/classes.exp: call class_param.Aref_a (g_A)
+PASS: gdb.cp/classes.exp: call class_param.Aref_x (g_A)
+PASS: gdb.cp/classes.exp: call class_param.Aref_a (g_B)
+PASS: gdb.cp/classes.exp: call class_param.Aref_x (g_B)
+PASS: gdb.cp/classes.exp: call class_param.Aval_a (g_A)
+PASS: gdb.cp/classes.exp: call class_param.Aval_x (g_A)
+PASS: gdb.cp/classes.exp: call class_param.Aval_a (g_B)
+PASS: gdb.cp/classes.exp: call class_param.Aval_x (g_B)
+PASS: gdb.cp/classes.exp: unrelated class *param
+PASS: gdb.cp/classes.exp: unrelated class &param
+PASS: gdb.cp/classes.exp: unrelated class param
+PASS: gdb.cp/classes.exp: continue to enums2(\(\)|)
+PASS: gdb.cp/classes.exp: print obj_with_enum (1)
+PASS: gdb.cp/classes.exp: next
+PASS: gdb.cp/classes.exp: print obj_with_enum (2)
+PASS: gdb.cp/classes.exp: print obj_with_enum.priv_enum
+PASS: gdb.cp/classes.exp: ptype obj_with_enum.priv_enum
+PASS: gdb.cp/classes.exp: ptype obj_with_enum
+PASS: gdb.cp/classes.exp: print (ClassWithEnum::PrivEnum) 42
+PASS: gdb.cp/classes.exp: print ('ClassWithEnum::PrivEnum') 42
+PASS: gdb.cp/classes.exp: print Bar::z
+PASS: gdb.cp/classes.exp: print &Foo::x
+PASS: gdb.cp/classes.exp: print (int)&Foo::x
+PASS: gdb.cp/classes.exp: print (int)&Bar::y == 2*sizeof(int)
+PASS: gdb.cp/classes.exp: ptype Bar::z
+PASS: gdb.cp/classes.exp: ptype &Bar::z
+PASS: gdb.cp/classes.exp: print (int)pmi == sizeof(int)
+PASS: gdb.cp/classes.exp: print Foo::st
+PASS: gdb.cp/classes.exp: print bar.st
+PASS: gdb.cp/classes.exp: print &foo.st
+PASS: gdb.cp/classes.exp: print &Bar::st
+PASS: gdb.cp/classes.exp: print *$
+PASS: gdb.cp/classes.exp: set print static-members off
+PASS: gdb.cp/classes.exp: print csi without static members
+PASS: gdb.cp/classes.exp: print cnsi without static members
+PASS: gdb.cp/classes.exp: set print static-members on
+PASS: gdb.cp/classes.exp: print csi with static members
+PASS: gdb.cp/classes.exp: print cnsi with static members
+PASS: gdb.cp/classes.exp: finish from marker_reg1
+PASS: gdb.cp/classes.exp: calling method for small class
+FAIL: gdb.cp/classes.exp: print ctor of typedef class
+FAIL: gdb.cp/classes.exp: print dtor of typedef class
+PASS: gdb.cp/classes.exp: list ByAnyOtherName::times
+Running ./gdb.cp/cmpd-minsyms.exp ...
+PASS: gdb.cp/cmpd-minsyms.exp: setting breakpoint at 'GDB<int>::a() const'
+PASS: gdb.cp/cmpd-minsyms.exp: setting breakpoint at 'GDB<int>::b() volatile'
+PASS: gdb.cp/cmpd-minsyms.exp: setting breakpoint at 'GDB<int>::c() const volatile'
+PASS: gdb.cp/cmpd-minsyms.exp: set language c++
+PASS: gdb.cp/cmpd-minsyms.exp: setting breakpoint at GDB<int>::operator ==
+PASS: gdb.cp/cmpd-minsyms.exp: setting breakpoint at GDB<int>::operator==(GDB<int> const&)
+PASS: gdb.cp/cmpd-minsyms.exp: setting breakpoint at GDB<char>::harder(char)
+PASS: gdb.cp/cmpd-minsyms.exp: setting breakpoint at GDB<int>::harder(int)
+PASS: gdb.cp/cmpd-minsyms.exp: setting breakpoint at "int GDB<char>::even_harder<int>(char)"
+PASS: gdb.cp/cmpd-minsyms.exp: setting breakpoint at GDB<int>::simple()
+Running ./gdb.cp/converts.exp ...
+PASS: gdb.cp/converts.exp: continue to breakpoint: end of main
+PASS: gdb.cp/converts.exp: typedef to another typedef
+PASS: gdb.cp/converts.exp: typedef to typedef of a typedef
+PASS: gdb.cp/converts.exp: Pointer-to-pointer-to-pointer derived to Pointer-to-pointer-to-pointer base.
+PASS: gdb.cp/converts.exp: pointer to pointer
+PASS: gdb.cp/converts.exp: pointer to array
+PASS: gdb.cp/converts.exp: pointer to pointer of wrong type
+PASS: gdb.cp/converts.exp: pointer to pointer of wrong type
+PASS: gdb.cp/converts.exp: pointer to ancestor pointer
+PASS: gdb.cp/converts.exp: pointer to void pointer
+PASS: gdb.cp/converts.exp: pointer to void pointer pointer
+PASS: gdb.cp/converts.exp: pointer to boolean
+PASS: gdb.cp/converts.exp: pointer to long int
+PASS: gdb.cp/converts.exp: pointer pointer to void pointer
+PASS: gdb.cp/converts.exp: pointer pointer to pointer pointer
+PASS: gdb.cp/converts.exp: pointer pointer to array of arrays
+PASS: gdb.cp/converts.exp: pointer pointer to array of pointers
+PASS: gdb.cp/converts.exp: pointer pointer to array of wrong pointers
+PASS: gdb.cp/converts.exp: check all parameters for badness
+PASS: gdb.cp/converts.exp: null pointer conversion
+PASS: gdb.cp/converts.exp: p foo3_1 (0, 1)
+PASS: gdb.cp/converts.exp: p foo3_1 (0, (const char**) 1)
+PASS: gdb.cp/converts.exp: p foo3_2 (0, 0)
+PASS: gdb.cp/converts.exp: p foo3_2 (0, (char const**) 0)
+PASS: gdb.cp/converts.exp: p foo1_7(0)
+PASS: gdb.cp/converts.exp: p foo1_7(integer)
+PASS: gdb.cp/converts.exp: p foo1_7(long_int)
+PASS: gdb.cp/converts.exp: p foo1_7(*a)
+PASS: gdb.cp/converts.exp: p foo1_7(MY_A)
+PASS: gdb.cp/converts.exp: p foo1_7(&foo1_7)
+PASS: gdb.cp/converts.exp: p foo1_7(&A::member_)
+PASS: gdb.cp/converts.exp: p foo1_7(a)
+PASS: gdb.cp/converts.exp: p foo1_7(fp)
+PASS: gdb.cp/converts.exp: p foo1_7(dp)
+PASS: gdb.cp/converts.exp: p foo1_7(-1.23)
+PASS: gdb.cp/converts.exp: p foo1_7(ta)
+PASS: gdb.cp/converts.exp: show check type
+PASS: gdb.cp/converts.exp: p foo1_type_check (123)
+PASS: gdb.cp/converts.exp: p foo2_type_check (0, 1)
+PASS: gdb.cp/converts.exp: p foo2_type_check (1, 0)
+PASS: gdb.cp/converts.exp: p foo2_type_check (1, 1)
+PASS: gdb.cp/converts.exp: p foo3_type_check (0, 0, 1)
+PASS: gdb.cp/converts.exp: p foo3_type_check (0, 1, 0)
+PASS: gdb.cp/converts.exp: p foo3_type_check (1, 0, 0)
+PASS: gdb.cp/converts.exp: p foo3_type_check (0, 1, 1)
+PASS: gdb.cp/converts.exp: p foo3_type_check (1, 1, 0)
+PASS: gdb.cp/converts.exp: p foo3_type_check (1, 1, 1)
+PASS: gdb.cp/converts.exp: set check type off
+PASS: gdb.cp/converts.exp: show check type
+PASS: gdb.cp/converts.exp: p foo1_type_check (123)
+PASS: gdb.cp/converts.exp: p foo2_type_check (0, 1)
+PASS: gdb.cp/converts.exp: p foo2_type_check (1, 0)
+PASS: gdb.cp/converts.exp: p foo2_type_check (1, 1)
+PASS: gdb.cp/converts.exp: p foo3_type_check (0, 0, 1)
+PASS: gdb.cp/converts.exp: p foo3_type_check (0, 1, 0)
+PASS: gdb.cp/converts.exp: p foo3_type_check (1, 0, 0)
+PASS: gdb.cp/converts.exp: p foo3_type_check (0, 1, 1)
+PASS: gdb.cp/converts.exp: p foo3_type_check (1, 1, 0)
+PASS: gdb.cp/converts.exp: p foo3_type_check (1, 1, 1)
+PASS: gdb.cp/converts.exp: p foo3_2 (1,1)
+Running ./gdb.cp/cpcompletion.exp ...
+PASS: gdb.cp/cpcompletion.exp: complete class methods
+PASS: gdb.cp/cpcompletion.exp: complete class methods beginning with F
+PASS: gdb.cp/cpcompletion.exp: complete p foo1.g
+PASS: gdb.cp/cpcompletion.exp: complete p foo1.base
+PASS: gdb.cp/cpcompletion.exp: complete p foo1.Fo
+PASS: gdb.cp/cpcompletion.exp: complete p a.g
+Running ./gdb.cp/cpexprs.exp ...
+PASS: gdb.cp/cpexprs.exp: set listsize 1
+PASS: gdb.cp/cpexprs.exp: print base1::a_function
+FAIL: gdb.cp/cpexprs.exp: print base1::base1(int)
+FAIL: gdb.cp/cpexprs.exp: print base1::base1(void)
+PASS: gdb.cp/cpexprs.exp: print base2::a_function
+FAIL: gdb.cp/cpexprs.exp: print base2::base2
+FAIL: gdb.cp/cpexprs.exp: print base::base(int)
+FAIL: gdb.cp/cpexprs.exp: print base::base(void)
+PASS: gdb.cp/cpexprs.exp: print base::operator char*
+PASS: gdb.cp/cpexprs.exp: print base::operator delete
+PASS: gdb.cp/cpexprs.exp: print base::operator delete[]
+PASS: gdb.cp/cpexprs.exp: print base::operator fluff*
+PASS: gdb.cp/cpexprs.exp: print base::operator fluff**
+PASS: gdb.cp/cpexprs.exp: print base::operator int
+PASS: gdb.cp/cpexprs.exp: print base::operator new
+PASS: gdb.cp/cpexprs.exp: print base::operator new[]
+PASS: gdb.cp/cpexprs.exp: print base::operator!
+PASS: gdb.cp/cpexprs.exp: print base::operator!=
+PASS: gdb.cp/cpexprs.exp: print base::operator%
+PASS: gdb.cp/cpexprs.exp: print base::operator%=
+PASS: gdb.cp/cpexprs.exp: print base::operator&
+PASS: gdb.cp/cpexprs.exp: print base::operator&&
+PASS: gdb.cp/cpexprs.exp: print base::operator&=
+PASS: gdb.cp/cpexprs.exp: print base::operator()
+PASS: gdb.cp/cpexprs.exp: print base::operator*
+PASS: gdb.cp/cpexprs.exp: print base::operator*=
+PASS: gdb.cp/cpexprs.exp: print base::operator+
+PASS: gdb.cp/cpexprs.exp: print base::operator++
+PASS: gdb.cp/cpexprs.exp: print base::operator+=
+PASS: gdb.cp/cpexprs.exp: print base::operator-
+PASS: gdb.cp/cpexprs.exp: print base::operator--
+PASS: gdb.cp/cpexprs.exp: print base::operator-=
+PASS: gdb.cp/cpexprs.exp: print base::operator/
+PASS: gdb.cp/cpexprs.exp: print base::operator/=
+PASS: gdb.cp/cpexprs.exp: print base::operator<
+PASS: gdb.cp/cpexprs.exp: print base::operator<<
+PASS: gdb.cp/cpexprs.exp: print base::operator<<=
+PASS: gdb.cp/cpexprs.exp: print base::operator<=
+PASS: gdb.cp/cpexprs.exp: print base::operator=
+PASS: gdb.cp/cpexprs.exp: print base::operator==
+PASS: gdb.cp/cpexprs.exp: print base::operator>
+PASS: gdb.cp/cpexprs.exp: print base::operator>=
+PASS: gdb.cp/cpexprs.exp: print base::operator>>
+PASS: gdb.cp/cpexprs.exp: print base::operator>>=
+PASS: gdb.cp/cpexprs.exp: print base::operator[]
+PASS: gdb.cp/cpexprs.exp: print base::operator^
+PASS: gdb.cp/cpexprs.exp: print base::operator^=
+PASS: gdb.cp/cpexprs.exp: print base::operator|
+PASS: gdb.cp/cpexprs.exp: print base::operator|=
+PASS: gdb.cp/cpexprs.exp: print base::operator||
+PASS: gdb.cp/cpexprs.exp: print base::operator~
+PASS: gdb.cp/cpexprs.exp: print base::overload(base&) const
+PASS: gdb.cp/cpexprs.exp: print base::overload(char*) const
+PASS: gdb.cp/cpexprs.exp: print base::overload(int) const
+PASS: gdb.cp/cpexprs.exp: print base::overload(long) const
+PASS: gdb.cp/cpexprs.exp: print base::overload(short) const
+PASS: gdb.cp/cpexprs.exp: print base::overload(void) const
+FAIL: gdb.cp/cpexprs.exp: print base::~base
+PASS: gdb.cp/cpexprs.exp: print derived::a_function
+FAIL: gdb.cp/cpexprs.exp: print derived::derived
+PASS: gdb.cp/cpexprs.exp: print flubber<int, int, int, char, char>
+PASS: gdb.cp/cpexprs.exp: print flubber<int, int, int, char, int>
+PASS: gdb.cp/cpexprs.exp: print flubber<int, int, int, char, long>
+PASS: gdb.cp/cpexprs.exp: print flubber<int, int, int, char, short>
+PASS: gdb.cp/cpexprs.exp: print flubber<int, int, int, int, char>
+PASS: gdb.cp/cpexprs.exp: print flubber<int, int, int, int, int>
+PASS: gdb.cp/cpexprs.exp: print flubber<int, int, int, int, long>
+PASS: gdb.cp/cpexprs.exp: print flubber<int, int, int, int, short>
+PASS: gdb.cp/cpexprs.exp: print flubber<int, int, int, long, char>
+PASS: gdb.cp/cpexprs.exp: print flubber<int, int, int, long, int>
+PASS: gdb.cp/cpexprs.exp: print flubber<int, int, int, long, long>
+PASS: gdb.cp/cpexprs.exp: print flubber<int, int, int, long, short>
+PASS: gdb.cp/cpexprs.exp: print flubber<int, int, int, short, char>
+PASS: gdb.cp/cpexprs.exp: print flubber<int, int, int, short, int>
+PASS: gdb.cp/cpexprs.exp: print flubber<int, int, int, short, long>
+PASS: gdb.cp/cpexprs.exp: print flubber<int, int, int, short, short>
+PASS: gdb.cp/cpexprs.exp: print flubber<int, int, short, int, char>
+PASS: gdb.cp/cpexprs.exp: print flubber<int, int, short, int, int>
+PASS: gdb.cp/cpexprs.exp: print flubber<int, int, short, int, long>
+PASS: gdb.cp/cpexprs.exp: print flubber<int, int, short, int, short>
+PASS: gdb.cp/cpexprs.exp: print flubber<int, int, short, short, int>
+PASS: gdb.cp/cpexprs.exp: print flubber<long, short, long, short, long>
+PASS: gdb.cp/cpexprs.exp: print flubber<short, int, short, int, short>
+PASS: gdb.cp/cpexprs.exp: print policy1::function
+FAIL: gdb.cp/cpexprs.exp: print policy1::policy
+PASS: gdb.cp/cpexprs.exp: print policy2::function
+FAIL: gdb.cp/cpexprs.exp: print policy2::policy
+PASS: gdb.cp/cpexprs.exp: print policy3::function
+FAIL: gdb.cp/cpexprs.exp: print policy3::policy
+PASS: gdb.cp/cpexprs.exp: print policy4::function
+FAIL: gdb.cp/cpexprs.exp: print policy4::policy
+PASS: gdb.cp/cpexprs.exp: print policyd1::function
+FAIL: gdb.cp/cpexprs.exp: print policyd1::policyd
+FAIL: gdb.cp/cpexprs.exp: print policyd1::~policyd
+PASS: gdb.cp/cpexprs.exp: print policyd2::function
+FAIL: gdb.cp/cpexprs.exp: print policyd2::policyd
+FAIL: gdb.cp/cpexprs.exp: print policyd2::~policyd
+PASS: gdb.cp/cpexprs.exp: print policyd3::function
+FAIL: gdb.cp/cpexprs.exp: print policyd3::policyd
+FAIL: gdb.cp/cpexprs.exp: print policyd3::~policyd
+PASS: gdb.cp/cpexprs.exp: print policyd4::function
+FAIL: gdb.cp/cpexprs.exp: print policyd4::policyd
+FAIL: gdb.cp/cpexprs.exp: print policyd4::~policyd
+PASS: gdb.cp/cpexprs.exp: print policyd5::function
+FAIL: gdb.cp/cpexprs.exp: print policyd5::policyd
+FAIL: gdb.cp/cpexprs.exp: print policyd5::~policyd
+PASS: gdb.cp/cpexprs.exp: print policyd<base, operation_1<base> >::function
+FAIL: gdb.cp/cpexprs.exp: print policyd<base, operation_1<base> >::policyd
+FAIL: gdb.cp/cpexprs.exp: print policyd<base, operation_1<base> >::~policyd
+PASS: gdb.cp/cpexprs.exp: print policyd<char, operation_1<char> >::function
+FAIL: gdb.cp/cpexprs.exp: print policyd<char, operation_1<char> >::policyd
+FAIL: gdb.cp/cpexprs.exp: print policyd<char, operation_1<char> >::~policyd
+PASS: gdb.cp/cpexprs.exp: print policyd<int, operation_1<int> >::function
+FAIL: gdb.cp/cpexprs.exp: print policyd<int, operation_1<int> >::policyd
+FAIL: gdb.cp/cpexprs.exp: print policyd<int, operation_1<int> >::~policyd
+FAIL: gdb.cp/cpexprs.exp: print policyd<long, operation_1<long> >::policyd
+FAIL: gdb.cp/cpexprs.exp: print policyd<long, operation_1<long> >::~policyd
+PASS: gdb.cp/cpexprs.exp: print policyd<tclass<int>, operation_1<tclass<int> > >::function
+FAIL: gdb.cp/cpexprs.exp: print policyd<tclass<int>, operation_1<tclass<int> > >::policyd
+FAIL: gdb.cp/cpexprs.exp: print policyd<tclass<int>, operation_1<tclass<int> > >::~policyd
+PASS: gdb.cp/cpexprs.exp: print tclass<base>::do_something
+PASS: gdb.cp/cpexprs.exp: print tclass<char>::do_something
+PASS: gdb.cp/cpexprs.exp: print tclass<int>::do_something
+PASS: gdb.cp/cpexprs.exp: print tclass<long>::do_something
+PASS: gdb.cp/cpexprs.exp: print tclass<short>::do_something
+PASS: gdb.cp/cpexprs.exp: print test_function
+PASS: gdb.cp/cpexprs.exp: list base1::a_function
+PASS: gdb.cp/cpexprs.exp: list base1::base1(int)
+PASS: gdb.cp/cpexprs.exp: list base1::base1(void)
+PASS: gdb.cp/cpexprs.exp: list base2::a_function
+PASS: gdb.cp/cpexprs.exp: list base2::base2
+PASS: gdb.cp/cpexprs.exp: list base::base(int)
+PASS: gdb.cp/cpexprs.exp: list base::base(void)
+PASS: gdb.cp/cpexprs.exp: list base::operator char*
+PASS: gdb.cp/cpexprs.exp: list base::operator delete
+PASS: gdb.cp/cpexprs.exp: list base::operator delete[]
+PASS: gdb.cp/cpexprs.exp: list base::operator fluff*
+PASS: gdb.cp/cpexprs.exp: list base::operator fluff**
+PASS: gdb.cp/cpexprs.exp: list base::operator int
+PASS: gdb.cp/cpexprs.exp: list base::operator new
+PASS: gdb.cp/cpexprs.exp: list base::operator new[]
+PASS: gdb.cp/cpexprs.exp: list base::operator!
+PASS: gdb.cp/cpexprs.exp: list base::operator!=
+PASS: gdb.cp/cpexprs.exp: list base::operator%
+PASS: gdb.cp/cpexprs.exp: list base::operator%=
+PASS: gdb.cp/cpexprs.exp: list base::operator&
+PASS: gdb.cp/cpexprs.exp: list base::operator&&
+PASS: gdb.cp/cpexprs.exp: list base::operator&=
+PASS: gdb.cp/cpexprs.exp: list base::operator()
+PASS: gdb.cp/cpexprs.exp: list base::operator*
+PASS: gdb.cp/cpexprs.exp: list base::operator*=
+PASS: gdb.cp/cpexprs.exp: list base::operator+
+PASS: gdb.cp/cpexprs.exp: list base::operator++
+PASS: gdb.cp/cpexprs.exp: list base::operator+=
+PASS: gdb.cp/cpexprs.exp: list base::operator-
+PASS: gdb.cp/cpexprs.exp: list base::operator--
+PASS: gdb.cp/cpexprs.exp: list base::operator-=
+PASS: gdb.cp/cpexprs.exp: list base::operator/
+PASS: gdb.cp/cpexprs.exp: list base::operator/=
+PASS: gdb.cp/cpexprs.exp: list base::operator<
+PASS: gdb.cp/cpexprs.exp: list base::operator<<
+PASS: gdb.cp/cpexprs.exp: list base::operator<<=
+PASS: gdb.cp/cpexprs.exp: list base::operator<=
+PASS: gdb.cp/cpexprs.exp: list base::operator=
+PASS: gdb.cp/cpexprs.exp: list base::operator==
+PASS: gdb.cp/cpexprs.exp: list base::operator>
+PASS: gdb.cp/cpexprs.exp: list base::operator>=
+PASS: gdb.cp/cpexprs.exp: list base::operator>>
+PASS: gdb.cp/cpexprs.exp: list base::operator>>=
+PASS: gdb.cp/cpexprs.exp: list base::operator[]
+PASS: gdb.cp/cpexprs.exp: list base::operator^
+PASS: gdb.cp/cpexprs.exp: list base::operator^=
+PASS: gdb.cp/cpexprs.exp: list base::operator|
+PASS: gdb.cp/cpexprs.exp: list base::operator|=
+PASS: gdb.cp/cpexprs.exp: list base::operator||
+PASS: gdb.cp/cpexprs.exp: list base::operator~
+PASS: gdb.cp/cpexprs.exp: list base::overload(base&) const
+PASS: gdb.cp/cpexprs.exp: list base::overload(char*) const
+PASS: gdb.cp/cpexprs.exp: list base::overload(int) const
+PASS: gdb.cp/cpexprs.exp: list base::overload(long) const
+PASS: gdb.cp/cpexprs.exp: list base::overload(short) const
+PASS: gdb.cp/cpexprs.exp: list base::overload(void) const
+PASS: gdb.cp/cpexprs.exp: list base::~base
+PASS: gdb.cp/cpexprs.exp: list derived::a_function
+PASS: gdb.cp/cpexprs.exp: list derived::derived
+PASS: gdb.cp/cpexprs.exp: list flubber<int, int, int, char, char>
+PASS: gdb.cp/cpexprs.exp: list flubber<int, int, int, char, int>
+PASS: gdb.cp/cpexprs.exp: list flubber<int, int, int, char, long>
+PASS: gdb.cp/cpexprs.exp: list flubber<int, int, int, char, short>
+PASS: gdb.cp/cpexprs.exp: list flubber<int, int, int, int, char>
+PASS: gdb.cp/cpexprs.exp: list flubber<int, int, int, int, int>
+PASS: gdb.cp/cpexprs.exp: list flubber<int, int, int, int, long>
+PASS: gdb.cp/cpexprs.exp: list flubber<int, int, int, int, short>
+PASS: gdb.cp/cpexprs.exp: list flubber<int, int, int, long, char>
+PASS: gdb.cp/cpexprs.exp: list flubber<int, int, int, long, int>
+PASS: gdb.cp/cpexprs.exp: list flubber<int, int, int, long, long>
+PASS: gdb.cp/cpexprs.exp: list flubber<int, int, int, long, short>
+PASS: gdb.cp/cpexprs.exp: list flubber<int, int, int, short, char>
+PASS: gdb.cp/cpexprs.exp: list flubber<int, int, int, short, int>
+PASS: gdb.cp/cpexprs.exp: list flubber<int, int, int, short, long>
+PASS: gdb.cp/cpexprs.exp: list flubber<int, int, int, short, short>
+PASS: gdb.cp/cpexprs.exp: list flubber<int, int, short, int, char>
+PASS: gdb.cp/cpexprs.exp: list flubber<int, int, short, int, int>
+PASS: gdb.cp/cpexprs.exp: list flubber<int, int, short, int, long>
+PASS: gdb.cp/cpexprs.exp: list flubber<int, int, short, int, short>
+PASS: gdb.cp/cpexprs.exp: list flubber<int, int, short, short, int>
+PASS: gdb.cp/cpexprs.exp: list flubber<long, short, long, short, long>
+PASS: gdb.cp/cpexprs.exp: list flubber<short, int, short, int, short>
+PASS: gdb.cp/cpexprs.exp: list policy1::function
+PASS: gdb.cp/cpexprs.exp: list policy1::policy
+PASS: gdb.cp/cpexprs.exp: list policy2::function
+PASS: gdb.cp/cpexprs.exp: list policy2::policy
+PASS: gdb.cp/cpexprs.exp: list policy3::function
+PASS: gdb.cp/cpexprs.exp: list policy3::policy
+PASS: gdb.cp/cpexprs.exp: list policy4::function
+PASS: gdb.cp/cpexprs.exp: list policy4::policy
+PASS: gdb.cp/cpexprs.exp: list policyd1::function
+PASS: gdb.cp/cpexprs.exp: list policyd1::policyd
+FAIL: gdb.cp/cpexprs.exp: list policyd1::~policyd
+PASS: gdb.cp/cpexprs.exp: list policyd2::function
+PASS: gdb.cp/cpexprs.exp: list policyd2::policyd
+FAIL: gdb.cp/cpexprs.exp: list policyd2::~policyd
+PASS: gdb.cp/cpexprs.exp: list policyd3::function
+PASS: gdb.cp/cpexprs.exp: list policyd3::policyd
+FAIL: gdb.cp/cpexprs.exp: list policyd3::~policyd
+PASS: gdb.cp/cpexprs.exp: list policyd4::function
+PASS: gdb.cp/cpexprs.exp: list policyd4::policyd
+FAIL: gdb.cp/cpexprs.exp: list policyd4::~policyd
+PASS: gdb.cp/cpexprs.exp: list policyd5::function
+PASS: gdb.cp/cpexprs.exp: list policyd5::policyd
+FAIL: gdb.cp/cpexprs.exp: list policyd5::~policyd
+PASS: gdb.cp/cpexprs.exp: list policyd<base, operation_1<base> >::function
+PASS: gdb.cp/cpexprs.exp: list policyd<base, operation_1<base> >::policyd
+PASS: gdb.cp/cpexprs.exp: list policyd<base, operation_1<base> >::~policyd
+PASS: gdb.cp/cpexprs.exp: list policyd<char, operation_1<char> >::function
+PASS: gdb.cp/cpexprs.exp: list policyd<char, operation_1<char> >::policyd
+PASS: gdb.cp/cpexprs.exp: list policyd<char, operation_1<char> >::~policyd
+PASS: gdb.cp/cpexprs.exp: list policyd<int, operation_1<int> >::function
+PASS: gdb.cp/cpexprs.exp: list policyd<int, operation_1<int> >::policyd
+PASS: gdb.cp/cpexprs.exp: list policyd<int, operation_1<int> >::~policyd
+PASS: gdb.cp/cpexprs.exp: list policyd<long, operation_1<long> >::policyd
+PASS: gdb.cp/cpexprs.exp: list policyd<long, operation_1<long> >::~policyd
+PASS: gdb.cp/cpexprs.exp: list policyd<tclass<int>, operation_1<tclass<int> > >::function
+PASS: gdb.cp/cpexprs.exp: list policyd<tclass<int>, operation_1<tclass<int> > >::policyd
+PASS: gdb.cp/cpexprs.exp: list policyd<tclass<int>, operation_1<tclass<int> > >::~policyd
+PASS: gdb.cp/cpexprs.exp: list tclass<base>::do_something
+PASS: gdb.cp/cpexprs.exp: list tclass<char>::do_something
+PASS: gdb.cp/cpexprs.exp: list tclass<int>::do_something
+PASS: gdb.cp/cpexprs.exp: list tclass<long>::do_something
+PASS: gdb.cp/cpexprs.exp: list tclass<short>::do_something
+PASS: gdb.cp/cpexprs.exp: list test_function
+PASS: gdb.cp/cpexprs.exp: continue to base1::a_function
+PASS: gdb.cp/cpexprs.exp: continue to base1::base1(int)
+PASS: gdb.cp/cpexprs.exp: continue to base1::base1(void)
+PASS: gdb.cp/cpexprs.exp: continue to base2::a_function
+PASS: gdb.cp/cpexprs.exp: continue to base2::base2
+PASS: gdb.cp/cpexprs.exp: continue to base::base(int)
+PASS: gdb.cp/cpexprs.exp: continue to base::base(void)
+PASS: gdb.cp/cpexprs.exp: continue to base::operator char*
+PASS: gdb.cp/cpexprs.exp: continue to base::operator delete
+PASS: gdb.cp/cpexprs.exp: continue to base::operator delete[]
+PASS: gdb.cp/cpexprs.exp: continue to base::operator fluff*
+PASS: gdb.cp/cpexprs.exp: continue to base::operator fluff**
+PASS: gdb.cp/cpexprs.exp: continue to base::operator int
+PASS: gdb.cp/cpexprs.exp: continue to base::operator new
+PASS: gdb.cp/cpexprs.exp: continue to base::operator new[]
+PASS: gdb.cp/cpexprs.exp: continue to base::operator!
+PASS: gdb.cp/cpexprs.exp: continue to base::operator!=
+PASS: gdb.cp/cpexprs.exp: continue to base::operator%
+PASS: gdb.cp/cpexprs.exp: continue to base::operator%=
+PASS: gdb.cp/cpexprs.exp: continue to base::operator&
+PASS: gdb.cp/cpexprs.exp: continue to base::operator&&
+PASS: gdb.cp/cpexprs.exp: continue to base::operator&=
+PASS: gdb.cp/cpexprs.exp: continue to base::operator()
+PASS: gdb.cp/cpexprs.exp: continue to base::operator*
+PASS: gdb.cp/cpexprs.exp: continue to base::operator*=
+PASS: gdb.cp/cpexprs.exp: continue to base::operator+
+PASS: gdb.cp/cpexprs.exp: continue to base::operator++
+PASS: gdb.cp/cpexprs.exp: continue to base::operator+=
+PASS: gdb.cp/cpexprs.exp: continue to base::operator-
+PASS: gdb.cp/cpexprs.exp: continue to base::operator--
+PASS: gdb.cp/cpexprs.exp: continue to base::operator-=
+PASS: gdb.cp/cpexprs.exp: continue to base::operator/
+PASS: gdb.cp/cpexprs.exp: continue to base::operator/=
+PASS: gdb.cp/cpexprs.exp: continue to base::operator<
+PASS: gdb.cp/cpexprs.exp: continue to base::operator<<
+PASS: gdb.cp/cpexprs.exp: continue to base::operator<<=
+PASS: gdb.cp/cpexprs.exp: continue to base::operator<=
+PASS: gdb.cp/cpexprs.exp: continue to base::operator=
+PASS: gdb.cp/cpexprs.exp: continue to base::operator==
+PASS: gdb.cp/cpexprs.exp: continue to base::operator>
+PASS: gdb.cp/cpexprs.exp: continue to base::operator>=
+PASS: gdb.cp/cpexprs.exp: continue to base::operator>>
+PASS: gdb.cp/cpexprs.exp: continue to base::operator>>=
+PASS: gdb.cp/cpexprs.exp: continue to base::operator[]
+PASS: gdb.cp/cpexprs.exp: continue to base::operator^
+PASS: gdb.cp/cpexprs.exp: continue to base::operator^=
+PASS: gdb.cp/cpexprs.exp: continue to base::operator|
+PASS: gdb.cp/cpexprs.exp: continue to base::operator|=
+PASS: gdb.cp/cpexprs.exp: continue to base::operator||
+PASS: gdb.cp/cpexprs.exp: continue to base::operator~
+PASS: gdb.cp/cpexprs.exp: continue to base::overload(base&) const
+PASS: gdb.cp/cpexprs.exp: continue to base::overload(char*) const
+PASS: gdb.cp/cpexprs.exp: continue to base::overload(int) const
+PASS: gdb.cp/cpexprs.exp: continue to base::overload(long) const
+PASS: gdb.cp/cpexprs.exp: continue to base::overload(short) const
+PASS: gdb.cp/cpexprs.exp: continue to base::overload(void) const
+PASS: gdb.cp/cpexprs.exp: continue to base::~base
+PASS: gdb.cp/cpexprs.exp: continue to derived::a_function
+PASS: gdb.cp/cpexprs.exp: continue to derived::derived
+PASS: gdb.cp/cpexprs.exp: continue to flubber<int, int, int, char, char>
+PASS: gdb.cp/cpexprs.exp: continue to flubber<int, int, int, char, int>
+PASS: gdb.cp/cpexprs.exp: continue to flubber<int, int, int, char, long>
+PASS: gdb.cp/cpexprs.exp: continue to flubber<int, int, int, char, short>
+PASS: gdb.cp/cpexprs.exp: continue to flubber<int, int, int, int, char>
+PASS: gdb.cp/cpexprs.exp: continue to flubber<int, int, int, int, int>
+PASS: gdb.cp/cpexprs.exp: continue to flubber<int, int, int, int, long>
+PASS: gdb.cp/cpexprs.exp: continue to flubber<int, int, int, int, short>
+PASS: gdb.cp/cpexprs.exp: continue to flubber<int, int, int, long, char>
+PASS: gdb.cp/cpexprs.exp: continue to flubber<int, int, int, long, int>
+PASS: gdb.cp/cpexprs.exp: continue to flubber<int, int, int, long, long>
+PASS: gdb.cp/cpexprs.exp: continue to flubber<int, int, int, long, short>
+PASS: gdb.cp/cpexprs.exp: continue to flubber<int, int, int, short, char>
+PASS: gdb.cp/cpexprs.exp: continue to flubber<int, int, int, short, int>
+PASS: gdb.cp/cpexprs.exp: continue to flubber<int, int, int, short, long>
+PASS: gdb.cp/cpexprs.exp: continue to flubber<int, int, int, short, short>
+PASS: gdb.cp/cpexprs.exp: continue to flubber<int, int, short, int, char>
+PASS: gdb.cp/cpexprs.exp: continue to flubber<int, int, short, int, int>
+PASS: gdb.cp/cpexprs.exp: continue to flubber<int, int, short, int, long>
+PASS: gdb.cp/cpexprs.exp: continue to flubber<int, int, short, int, short>
+PASS: gdb.cp/cpexprs.exp: continue to flubber<int, int, short, short, int>
+PASS: gdb.cp/cpexprs.exp: continue to flubber<long, short, long, short, long>
+PASS: gdb.cp/cpexprs.exp: continue to flubber<short, int, short, int, short>
+PASS: gdb.cp/cpexprs.exp: continue to policy1::function
+PASS: gdb.cp/cpexprs.exp: continue to policy1::policy
+PASS: gdb.cp/cpexprs.exp: continue to policy2::function
+PASS: gdb.cp/cpexprs.exp: continue to policy2::policy
+PASS: gdb.cp/cpexprs.exp: continue to policy3::function
+PASS: gdb.cp/cpexprs.exp: continue to policy3::policy
+PASS: gdb.cp/cpexprs.exp: continue to policy4::function
+PASS: gdb.cp/cpexprs.exp: continue to policy4::policy
+PASS: gdb.cp/cpexprs.exp: continue to policyd1::function
+PASS: gdb.cp/cpexprs.exp: continue to policyd1::policyd
+FAIL: gdb.cp/cpexprs.exp: setting breakpoint at policyd1::~policyd
+FAIL: gdb.cp/cpexprs.exp: continue to policyd1::~policyd
+PASS: gdb.cp/cpexprs.exp: continue to policyd2::function
+PASS: gdb.cp/cpexprs.exp: continue to policyd2::policyd
+FAIL: gdb.cp/cpexprs.exp: setting breakpoint at policyd2::~policyd
+FAIL: gdb.cp/cpexprs.exp: continue to policyd2::~policyd
+PASS: gdb.cp/cpexprs.exp: continue to policyd3::function
+PASS: gdb.cp/cpexprs.exp: continue to policyd3::policyd
+FAIL: gdb.cp/cpexprs.exp: setting breakpoint at policyd3::~policyd
+FAIL: gdb.cp/cpexprs.exp: continue to policyd3::~policyd
+PASS: gdb.cp/cpexprs.exp: continue to policyd4::function
+PASS: gdb.cp/cpexprs.exp: continue to policyd4::policyd
+FAIL: gdb.cp/cpexprs.exp: setting breakpoint at policyd4::~policyd
+FAIL: gdb.cp/cpexprs.exp: continue to policyd4::~policyd
+PASS: gdb.cp/cpexprs.exp: continue to policyd5::function
+PASS: gdb.cp/cpexprs.exp: continue to policyd5::policyd
+FAIL: gdb.cp/cpexprs.exp: setting breakpoint at policyd5::~policyd
+FAIL: gdb.cp/cpexprs.exp: continue to policyd5::~policyd
+PASS: gdb.cp/cpexprs.exp: continue to policyd<base, operation_1<base> >::function
+PASS: gdb.cp/cpexprs.exp: continue to policyd<base, operation_1<base> >::policyd
+PASS: gdb.cp/cpexprs.exp: continue to policyd<base, operation_1<base> >::~policyd
+PASS: gdb.cp/cpexprs.exp: continue to policyd<char, operation_1<char> >::function
+PASS: gdb.cp/cpexprs.exp: continue to policyd<char, operation_1<char> >::policyd
+PASS: gdb.cp/cpexprs.exp: continue to policyd<char, operation_1<char> >::~policyd
+PASS: gdb.cp/cpexprs.exp: continue to policyd<int, operation_1<int> >::function
+PASS: gdb.cp/cpexprs.exp: continue to policyd<int, operation_1<int> >::policyd
+PASS: gdb.cp/cpexprs.exp: continue to policyd<int, operation_1<int> >::~policyd
+PASS: gdb.cp/cpexprs.exp: continue to policyd<long, operation_1<long> >::policyd
+PASS: gdb.cp/cpexprs.exp: continue to policyd<long, operation_1<long> >::~policyd
+PASS: gdb.cp/cpexprs.exp: continue to policyd<tclass<int>, operation_1<tclass<int> > >::function
+PASS: gdb.cp/cpexprs.exp: continue to policyd<tclass<int>, operation_1<tclass<int> > >::policyd
+PASS: gdb.cp/cpexprs.exp: continue to policyd<tclass<int>, operation_1<tclass<int> > >::~policyd
+PASS: gdb.cp/cpexprs.exp: continue to tclass<base>::do_something
+PASS: gdb.cp/cpexprs.exp: continue to tclass<char>::do_something
+PASS: gdb.cp/cpexprs.exp: continue to tclass<int>::do_something
+PASS: gdb.cp/cpexprs.exp: continue to tclass<long>::do_something
+PASS: gdb.cp/cpexprs.exp: continue to tclass<short>::do_something
+PASS: gdb.cp/cpexprs.exp: p 'CV::m(int)'
+PASS: gdb.cp/cpexprs.exp: p CV::m(int)
+PASS: gdb.cp/cpexprs.exp: p 'CV::m(int) const'
+KFAIL: gdb.cp/cpexprs.exp: p CV::m(int) const (PRMS: c++/14186)
+PASS: gdb.cp/cpexprs.exp: p 'CV::m(int) volatile'
+KFAIL: gdb.cp/cpexprs.exp: p CV::m(int) volatile (PRMS: c++/14186)
+PASS: gdb.cp/cpexprs.exp: p 'CV::m(int) const volatile'
+KFAIL: gdb.cp/cpexprs.exp: p CV::m(int) const volatile (PRMS: c++/14186)
+PASS: gdb.cp/cpexprs.exp: p CV_f(int)
+PASS: gdb.cp/cpexprs.exp: p CV_f(CV::t)
+PASS: gdb.cp/cpexprs.exp: p CV_f(CV::i)
+Running ./gdb.cp/cplabel.exp ...
+PASS: gdb.cp/cplabel.exp: break foo::bar:to_the_top
+PASS: gdb.cp/cplabel.exp: break foo::bar:get_out_of_here
+PASS: gdb.cp/cplabel.exp: break foo::baz:to_the_top
+PASS: gdb.cp/cplabel.exp: break foo::baz:get_out_of_here
+Running ./gdb.cp/cplusfuncs.exp ...
+PASS: gdb.cp/cplusfuncs.exp: set width 0
+PASS: gdb.cp/cplusfuncs.exp: set language c++
+PASS: gdb.cp/cplusfuncs.exp: detect dm_operator_comma
+PASS: gdb.cp/cplusfuncs.exp: detect dm_operator_char_star
+PASS: gdb.cp/cplusfuncs.exp: detect dm_type_char_star
+PASS: gdb.cp/cplusfuncs.exp: detect dm_type_foo_ref
+PASS: gdb.cp/cplusfuncs.exp: detect dm_type_int_star
+PASS: gdb.cp/cplusfuncs.exp: detect dm_type_long_star
+PASS: gdb.cp/cplusfuncs.exp: detect dm_type_unsigned_int
+PASS: gdb.cp/cplusfuncs.exp: detect dm_type_void
+PASS: gdb.cp/cplusfuncs.exp: detect dm_type_void_star
+PASS: gdb.cp/cplusfuncs.exp: detect dm_type_short
+PASS: gdb.cp/cplusfuncs.exp: detect dm_type_unsigned_short
+PASS: gdb.cp/cplusfuncs.exp: detect dm_type_long
+PASS: gdb.cp/cplusfuncs.exp: detect dm_type_unsigned_long
+PASS: gdb.cp/cplusfuncs.exp: detect dm_type_typedef
+PASS: gdb.cp/cplusfuncs.exp: print &'overload1arg(void)'
+PASS: gdb.cp/cplusfuncs.exp: print &'overload1arg(char)'
+PASS: gdb.cp/cplusfuncs.exp: print &'overload1arg(signed char)'
+PASS: gdb.cp/cplusfuncs.exp: print &'overload1arg(unsigned char)'
+PASS: gdb.cp/cplusfuncs.exp: print &'overload1arg(short)'
+PASS: gdb.cp/cplusfuncs.exp: print &'overload1arg(unsigned short)'
+PASS: gdb.cp/cplusfuncs.exp: print &'overload1arg(int)'
+PASS: gdb.cp/cplusfuncs.exp: print &'overload1arg(unsigned int)'
+PASS: gdb.cp/cplusfuncs.exp: print &'overload1arg(long)'
+PASS: gdb.cp/cplusfuncs.exp: print &'overload1arg(unsigned long)'
+PASS: gdb.cp/cplusfuncs.exp: print &'overload1arg(float)'
+PASS: gdb.cp/cplusfuncs.exp: print &'overload1arg(double)'
+PASS: gdb.cp/cplusfuncs.exp: print &'overloadargs(int)'
+PASS: gdb.cp/cplusfuncs.exp: print &'overloadargs(int, int)'
+PASS: gdb.cp/cplusfuncs.exp: print &'overloadargs(int, int, int)'
+PASS: gdb.cp/cplusfuncs.exp: print &'overloadargs(int, int, int, int)'
+PASS: gdb.cp/cplusfuncs.exp: print &'overloadargs(int, int, int, int, int)'
+PASS: gdb.cp/cplusfuncs.exp: print &'overloadargs(int, int, int, int, int, int)'
+PASS: gdb.cp/cplusfuncs.exp: print &'overloadargs(int, int, int, int, int, int, int)'
+PASS: gdb.cp/cplusfuncs.exp: print &'overloadargs(int, int, int, int, int, int, int, int)'
+PASS: gdb.cp/cplusfuncs.exp: print &'overloadargs(int, int, int, int, int, int, int, int, int)'
+PASS: gdb.cp/cplusfuncs.exp: print &'overloadargs(int, int, int, int, int, int, int, int, int, int)'
+PASS: gdb.cp/cplusfuncs.exp: print &'overloadargs(int, int, int, int, int, int, int, int, int, int, int)'
+PASS: gdb.cp/cplusfuncs.exp: print &foo::operator*(foo&)
+PASS: gdb.cp/cplusfuncs.exp: print &foo::operator%(foo&)
+PASS: gdb.cp/cplusfuncs.exp: print &foo::operator-(foo&)
+PASS: gdb.cp/cplusfuncs.exp: print &foo::operator>>(foo&)
+PASS: gdb.cp/cplusfuncs.exp: print &foo::operator!=(foo&)
+PASS: gdb.cp/cplusfuncs.exp: print &foo::operator>(foo&)
+PASS: gdb.cp/cplusfuncs.exp: print &foo::operator>=(foo&)
+PASS: gdb.cp/cplusfuncs.exp: print &foo::operator|(foo&)
+PASS: gdb.cp/cplusfuncs.exp: print &foo::operator&&(foo&)
+PASS: gdb.cp/cplusfuncs.exp: print &foo::operator!(void)
+PASS: gdb.cp/cplusfuncs.exp: print &foo::operator++(int)
+PASS: gdb.cp/cplusfuncs.exp: print &foo::operator=(foo&)
+PASS: gdb.cp/cplusfuncs.exp: print &foo::operator+=(foo&)
+PASS: gdb.cp/cplusfuncs.exp: print &foo::operator*=(foo&)
+PASS: gdb.cp/cplusfuncs.exp: print &foo::operator%=(foo&)
+PASS: gdb.cp/cplusfuncs.exp: print &foo::operator>>=(foo&)
+PASS: gdb.cp/cplusfuncs.exp: print &foo::operator|=(foo&)
+PASS: gdb.cp/cplusfuncs.exp: print &foo::operator,(foo&)
+PASS: gdb.cp/cplusfuncs.exp: print &foo::operator/(foo&)
+PASS: gdb.cp/cplusfuncs.exp: print &foo::operator+(foo&)
+PASS: gdb.cp/cplusfuncs.exp: print &foo::operator<<(foo&)
+PASS: gdb.cp/cplusfuncs.exp: print &foo::operator==(foo&)
+PASS: gdb.cp/cplusfuncs.exp: print &foo::operator<(foo&)
+PASS: gdb.cp/cplusfuncs.exp: print &foo::operator<=(foo&)
+PASS: gdb.cp/cplusfuncs.exp: print &foo::operator&(foo&)
+PASS: gdb.cp/cplusfuncs.exp: print &foo::operator^(foo&)
+PASS: gdb.cp/cplusfuncs.exp: print &foo::operator||(foo&)
+PASS: gdb.cp/cplusfuncs.exp: print &foo::operator~(void)
+PASS: gdb.cp/cplusfuncs.exp: print &foo::operator--(int)
+PASS: gdb.cp/cplusfuncs.exp: print &foo::operator->(void)
+PASS: gdb.cp/cplusfuncs.exp: print &foo::operator-=(foo&)
+PASS: gdb.cp/cplusfuncs.exp: print &foo::operator/=(foo&)
+PASS: gdb.cp/cplusfuncs.exp: print &foo::operator<<=(foo&)
+PASS: gdb.cp/cplusfuncs.exp: print &foo::operator&=(foo&)
+PASS: gdb.cp/cplusfuncs.exp: print &foo::operator^=(foo&)
+PASS: gdb.cp/cplusfuncs.exp: print &foo::operator->*(foo&)
+PASS: gdb.cp/cplusfuncs.exp: print &foo::operator[](foo&)
+PASS: gdb.cp/cplusfuncs.exp: print &foo::operator()(foo&)
+PASS: gdb.cp/cplusfuncs.exp: print &foo::operator new
+PASS: gdb.cp/cplusfuncs.exp: print &foo::operator new[]
+PASS: gdb.cp/cplusfuncs.exp: print &foo::operator delete(void*)
+PASS: gdb.cp/cplusfuncs.exp: print &foo::operator delete(void*)
+PASS: gdb.cp/cplusfuncs.exp: print &foo::operator int(void)
+PASS: gdb.cp/cplusfuncs.exp: print &foo::operator char*(void)
+PASS: gdb.cp/cplusfuncs.exp: print &hairyfunc1
+PASS: gdb.cp/cplusfuncs.exp: print &hairyfunc2
+PASS: gdb.cp/cplusfuncs.exp: print &hairyfunc3
+PASS: gdb.cp/cplusfuncs.exp: print &hairyfunc4
+PASS: gdb.cp/cplusfuncs.exp: print &hairyfunc5
+PASS: gdb.cp/cplusfuncs.exp: print &hairyfunc6
+PASS: gdb.cp/cplusfuncs.exp: print &hairyfunc7
+PASS: gdb.cp/cplusfuncs.exp: info function for "operator\*("
+PASS: gdb.cp/cplusfuncs.exp: info function for "operator%("
+PASS: gdb.cp/cplusfuncs.exp: info function for "operator-("
+PASS: gdb.cp/cplusfuncs.exp: info function for "operator>>("
+PASS: gdb.cp/cplusfuncs.exp: info function for "operator!=("
+PASS: gdb.cp/cplusfuncs.exp: info function for "operator>("
+PASS: gdb.cp/cplusfuncs.exp: info function for "operator>=("
+PASS: gdb.cp/cplusfuncs.exp: info function for "operator|("
+PASS: gdb.cp/cplusfuncs.exp: info function for "operator&&("
+PASS: gdb.cp/cplusfuncs.exp: info function for "operator!("
+PASS: gdb.cp/cplusfuncs.exp: info function for "operator++("
+PASS: gdb.cp/cplusfuncs.exp: info function for "operator=("
+PASS: gdb.cp/cplusfuncs.exp: info function for "operator+=("
+PASS: gdb.cp/cplusfuncs.exp: info function for "operator\*=("
+PASS: gdb.cp/cplusfuncs.exp: info function for "operator%=("
+PASS: gdb.cp/cplusfuncs.exp: info function for "operator>>=("
+PASS: gdb.cp/cplusfuncs.exp: info function for "operator|=("
+PASS: gdb.cp/cplusfuncs.exp: info function for "operator,("
+PASS: gdb.cp/cplusfuncs.exp: info function for "operator/("
+PASS: gdb.cp/cplusfuncs.exp: info function for "operator+("
+PASS: gdb.cp/cplusfuncs.exp: info function for "operator<<("
+PASS: gdb.cp/cplusfuncs.exp: info function for "operator==("
+PASS: gdb.cp/cplusfuncs.exp: info function for "operator<("
+PASS: gdb.cp/cplusfuncs.exp: info function for "operator<=("
+PASS: gdb.cp/cplusfuncs.exp: info function for "operator&("
+PASS: gdb.cp/cplusfuncs.exp: info function for "operator^("
+PASS: gdb.cp/cplusfuncs.exp: info function for "operator||("
+PASS: gdb.cp/cplusfuncs.exp: info function for "operator~("
+PASS: gdb.cp/cplusfuncs.exp: info function for "operator--("
+PASS: gdb.cp/cplusfuncs.exp: info function for "operator->("
+PASS: gdb.cp/cplusfuncs.exp: info function for "operator-=("
+PASS: gdb.cp/cplusfuncs.exp: info function for "operator/=("
+PASS: gdb.cp/cplusfuncs.exp: info function for "operator<<=("
+PASS: gdb.cp/cplusfuncs.exp: info function for "operator&=("
+PASS: gdb.cp/cplusfuncs.exp: info function for "operator^=("
+PASS: gdb.cp/cplusfuncs.exp: info function for "operator->\*("
+PASS: gdb.cp/cplusfuncs.exp: info function for "operator\[\]("
+PASS: gdb.cp/cplusfuncs.exp: info function for "operator new("
+PASS: gdb.cp/cplusfuncs.exp: info function for "operator delete("
+PASS: gdb.cp/cplusfuncs.exp: info function for "operator int("
+PASS: gdb.cp/cplusfuncs.exp: info function for "operator()("
+PASS: gdb.cp/cplusfuncs.exp: info function for "operator char\*("
+PASS: gdb.cp/cplusfuncs.exp: list foo::operator int*
+Running ./gdb.cp/cp-relocate.exp ...
+PASS: gdb.cp/cp-relocate.exp: info functions
+PASS: gdb.cp/cp-relocate.exp: get address of func<1>(int)
+PASS: gdb.cp/cp-relocate.exp: get address of func<2>(int)
+PASS: gdb.cp/cp-relocate.exp: get address of caller
+PASS: gdb.cp/cp-relocate.exp: C++ functions have different addresses
+PASS: gdb.cp/cp-relocate.exp: info file
+PASS: gdb.cp/cp-relocate.exp: add-symbol-file cp-relocate.o
+PASS: gdb.cp/cp-relocate.exp: break *func<1>(int)
+PASS: gdb.cp/cp-relocate.exp: break *func<2>(int)
+Running ./gdb.cp/ctti.exp ...
+PASS: gdb.cp/ctti.exp: continue to breakpoint: marker add1
+PASS: gdb.cp/ctti.exp: print c
+PASS: gdb.cp/ctti.exp: print f
+PASS: gdb.cp/ctti.exp: print i
+Running ./gdb.cp/debug-expr.exp ...
+PASS: gdb.cp/debug-expr.exp: set language c++
+PASS: gdb.cp/debug-expr.exp: set debug expression 1
+PASS: gdb.cp/debug-expr.exp: print static_cast<void*>(0)
+PASS: gdb.cp/debug-expr.exp: print reinterpret_cast<void*>(0)
+PASS: gdb.cp/debug-expr.exp: print dynamic_cast<void*>(0)
+Running ./gdb.cp/demangle.exp ...
+PASS: gdb.cp/demangle.exp: set language c++
+PASS: gdb.cp/demangle.exp: set width 0
+PASS: gdb.cp/demangle.exp: lucid: set demangle-style
+PASS: gdb.cp/demangle.exp: lucid: check demangling style
+PASS: gdb.cp/demangle.exp: lucid: WS__FR7istream
+PASS: gdb.cp/demangle.exp: lucid: __aa__3fooFR3foo
+PASS: gdb.cp/demangle.exp: lucid: __aad__3fooFR3foo
+PASS: gdb.cp/demangle.exp: lucid: __ad__3fooFR3foo
+PASS: gdb.cp/demangle.exp: lucid: __adv__3fooFR3foo
+PASS: gdb.cp/demangle.exp: lucid: __adv__7complexF7complex
+PASS: gdb.cp/demangle.exp: lucid: __aer__3fooFR3foo
+PASS: gdb.cp/demangle.exp: lucid: __als__3fooFR3foo
+PASS: gdb.cp/demangle.exp: lucid: __amd__3fooFR3foo
+PASS: gdb.cp/demangle.exp: lucid: __ami__3fooFR3foo
+PASS: gdb.cp/demangle.exp: lucid: __amu__3fooFR3foo
+PASS: gdb.cp/demangle.exp: lucid: __amu__7complexF7complex
+PASS: gdb.cp/demangle.exp: lucid: __aor__3fooFR3foo
+PASS: gdb.cp/demangle.exp: lucid: __apl__3fooFR3foo
+PASS: gdb.cp/demangle.exp: lucid: __ars__3fooFR3foo
+PASS: gdb.cp/demangle.exp: lucid: __as__18istream_withassignFP9streambuf
+PASS: gdb.cp/demangle.exp: lucid: __as__18istream_withassignFR7istream
+PASS: gdb.cp/demangle.exp: lucid: __as__3fooFR3foo
+PASS: gdb.cp/demangle.exp: lucid: __as__3iosFR3ios
+PASS: gdb.cp/demangle.exp: lucid: __cl__3fooFR3foo
+PASS: gdb.cp/demangle.exp: lucid: __cm__3fooFR3foo
+PASS: gdb.cp/demangle.exp: lucid: __co__3fooFv
+PASS: gdb.cp/demangle.exp: lucid: __ct__10istrstreamFPc
+PASS: gdb.cp/demangle.exp: lucid: __ct__10istrstreamFPci
+PASS: gdb.cp/demangle.exp: lucid: __ct__10ostrstreamFPciT2
+PASS: gdb.cp/demangle.exp: lucid: __ct__10ostrstreamFv
+PASS: gdb.cp/demangle.exp: lucid: __ct__10smanip_intFPFR3iosi_R3iosi
+PASS: gdb.cp/demangle.exp: lucid: __ct__11c_exceptionFPcRC7complexT2
+PASS: gdb.cp/demangle.exp: lucid: __ct__11fstreambaseFPCciT2
+PASS: gdb.cp/demangle.exp: lucid: __ct__11fstreambaseFi
+PASS: gdb.cp/demangle.exp: lucid: __ct__11fstreambaseFiPcT1
+PASS: gdb.cp/demangle.exp: lucid: __ct__11fstreambaseFv
+PASS: gdb.cp/demangle.exp: lucid: __ct__11smanip_longFPFR3iosl_R3iosl
+PASS: gdb.cp/demangle.exp: lucid: __ct__11stdiostreamFP4FILE
+PASS: gdb.cp/demangle.exp: lucid: __ct__12strstreambufFPFl_PvPFPv_v
+PASS: gdb.cp/demangle.exp: lucid: __ct__12strstreambufFPUciT1
+PASS: gdb.cp/demangle.exp: lucid: __ct__12strstreambufFPciT1
+PASS: gdb.cp/demangle.exp: lucid: __ct__12strstreambufFi
+PASS: gdb.cp/demangle.exp: lucid: __ct__12strstreambufFv
+PASS: gdb.cp/demangle.exp: lucid: __ct__13strstreambaseFPciT1
+PASS: gdb.cp/demangle.exp: lucid: __ct__3fooFR3foo
+PASS: gdb.cp/demangle.exp: lucid: __ct__3fooFi
+PASS: gdb.cp/demangle.exp: lucid: __ct__3fooFiN31
+PASS: gdb.cp/demangle.exp: lucid: __ct__3fooFiPCc
+PASS: gdb.cp/demangle.exp: lucid: __ct__3fooFiR3fooT1T2T1T2
+PASS: gdb.cp/demangle.exp: lucid: __ct__3iosFP9streambuf
+PASS: gdb.cp/demangle.exp: lucid: __ct__7filebufFiPcT1
+PASS: gdb.cp/demangle.exp: lucid: __ct__7fstreamFPCciT2
+PASS: gdb.cp/demangle.exp: lucid: __ct__7fstreamFiPcT1
+PASS: gdb.cp/demangle.exp: lucid: __ct__7istreamFP9streambuf
+PASS: gdb.cp/demangle.exp: lucid: __ct__7istreamFP9streambufiP7ostream
+PASS: gdb.cp/demangle.exp: lucid: __ct__7istreamFiPcT1
+PASS: gdb.cp/demangle.exp: lucid: __ct__7istreamFiT1P7ostream
+PASS: gdb.cp/demangle.exp: lucid: __ct__7ostreamFP9streambuf
+PASS: gdb.cp/demangle.exp: lucid: __ct__7ostreamFiPc
+PASS: gdb.cp/demangle.exp: lucid: __ct__8ifstreamFPCciT2
+PASS: gdb.cp/demangle.exp: lucid: __ct__8ifstreamFiPcT1
+PASS: gdb.cp/demangle.exp: lucid: __ct__Q23foo3barFv
+PASS: gdb.cp/demangle.exp: lucid: __ct__Q33foo3bar4bellFv
+PASS: gdb.cp/demangle.exp: lucid: __dl__3fooSFPv
+PASS: gdb.cp/demangle.exp: lucid: __dl__FPv
+PASS: gdb.cp/demangle.exp: lucid: __dt__10istrstreamFv
+PASS: gdb.cp/demangle.exp: lucid: __dt__Q23foo3barFv
+PASS: gdb.cp/demangle.exp: lucid: __dt__Q33foo3bar4bellFv
+PASS: gdb.cp/demangle.exp: lucid: __dv__3fooFR3foo
+PASS: gdb.cp/demangle.exp: lucid: __dv__F7complexT1
+PASS: gdb.cp/demangle.exp: lucid: __eq__3fooFR3foo
+PASS: gdb.cp/demangle.exp: lucid: __er__3fooFR3foo
+PASS: gdb.cp/demangle.exp: lucid: __ge__3fooFR3foo
+PASS: gdb.cp/demangle.exp: lucid: __gt__3fooFR3foo
+PASS: gdb.cp/demangle.exp: lucid: __le__3fooFR3foo
+PASS: gdb.cp/demangle.exp: lucid: __ls__3fooFR3foo
+PASS: gdb.cp/demangle.exp: lucid: __ls__7ostreamFP9streambuf
+PASS: gdb.cp/demangle.exp: lucid: __ls__7ostreamFPCc
+PASS: gdb.cp/demangle.exp: lucid: __ls__7ostreamFPFR3ios_R3ios
+PASS: gdb.cp/demangle.exp: lucid: __ls__7ostreamFPv
+PASS: gdb.cp/demangle.exp: lucid: __ls__7ostreamFUi
+PASS: gdb.cp/demangle.exp: lucid: __ls__7ostreamFUl
+PASS: gdb.cp/demangle.exp: lucid: __ls__7ostreamFd
+PASS: gdb.cp/demangle.exp: lucid: __ls__7ostreamFf
+PASS: gdb.cp/demangle.exp: lucid: __ls__7ostreamFi
+PASS: gdb.cp/demangle.exp: lucid: __ls__7ostreamFl
+PASS: gdb.cp/demangle.exp: lucid: __ls__FR7ostream7complex
+PASS: gdb.cp/demangle.exp: lucid: __lt__3fooFR3foo
+PASS: gdb.cp/demangle.exp: lucid: __md__3fooFR3foo
+PASS: gdb.cp/demangle.exp: lucid: __mi__3fooFR3foo
+PASS: gdb.cp/demangle.exp: lucid: __ml__3fooFR3foo
+PASS: gdb.cp/demangle.exp: lucid: __ml__F7complexT1
+PASS: gdb.cp/demangle.exp: lucid: __mm__3fooFi
+PASS: gdb.cp/demangle.exp: lucid: __ne__3fooFR3foo
+PASS: gdb.cp/demangle.exp: lucid: __nt__3fooFv
+PASS: gdb.cp/demangle.exp: lucid: __nw__3fooSFi
+PASS: gdb.cp/demangle.exp: lucid: __nw__FUi
+PASS: gdb.cp/demangle.exp: lucid: __nw__FUiPv
+PASS: gdb.cp/demangle.exp: lucid: __oo__3fooFR3foo
+PASS: gdb.cp/demangle.exp: lucid: __opPc__3fooFv
+PASS: gdb.cp/demangle.exp: lucid: __opi__3fooFv
+PASS: gdb.cp/demangle.exp: lucid: __or__3fooFR3foo
+PASS: gdb.cp/demangle.exp: lucid: __pl__3fooFR3foo
+PASS: gdb.cp/demangle.exp: lucid: __pp__3fooFi
+PASS: gdb.cp/demangle.exp: lucid: __pt__3fooFv
+PASS: gdb.cp/demangle.exp: lucid: __rm__3fooFR3foo
+PASS: gdb.cp/demangle.exp: lucid: __rs__3fooFR3foo
+PASS: gdb.cp/demangle.exp: lucid: __rs__7istreamFP9streambuf
+PASS: gdb.cp/demangle.exp: lucid: __rs__7istreamFPFR3ios_R3ios
+PASS: gdb.cp/demangle.exp: lucid: __rs__7istreamFPFR7istream_R7istream
+PASS: gdb.cp/demangle.exp: lucid: __rs__7istreamFPUc
+PASS: gdb.cp/demangle.exp: lucid: __rs__7istreamFPc
+PASS: gdb.cp/demangle.exp: lucid: __rs__7istreamFRUi
+PASS: gdb.cp/demangle.exp: lucid: __rs__7istreamFRUl
+PASS: gdb.cp/demangle.exp: lucid: __rs__7istreamFRUs
+PASS: gdb.cp/demangle.exp: lucid: __rs__7istreamFRd
+PASS: gdb.cp/demangle.exp: lucid: __rs__7istreamFRf
+PASS: gdb.cp/demangle.exp: lucid: __rs__7istreamFRi
+PASS: gdb.cp/demangle.exp: lucid: __rs__7istreamFRl
+PASS: gdb.cp/demangle.exp: lucid: __rs__7istreamFRs
+PASS: gdb.cp/demangle.exp: lucid: __rs__FR7istreamR7complex
+PASS: gdb.cp/demangle.exp: lucid: __vc__3fooFR3foo
+PASS: gdb.cp/demangle.exp: lucid: __vtbl__10istrstream
+PASS: gdb.cp/demangle.exp: lucid: __vtbl__17ostream__iostream__19iostream_withassign
+PASS: gdb.cp/demangle.exp: lucid: __vtbl__3ios
+PASS: gdb.cp/demangle.exp: lucid: __vtbl__3ios__13strstreambase
+KFAIL: gdb.cp/demangle.exp: lucid: __vtbl__3foo__vt_cc_main_ (PRMS: gdb/945)
+PASS: gdb.cp/demangle.exp: lucid: abs__F7complex
+PASS: gdb.cp/demangle.exp: lucid: allocate__9streambufFv
+PASS: gdb.cp/demangle.exp: lucid: attach__11fstreambaseFi
+PASS: gdb.cp/demangle.exp: lucid: bitalloc__3iosSFv
+PASS: gdb.cp/demangle.exp: lucid: chr__FiT1
+PASS: gdb.cp/demangle.exp: lucid: complex_error__FR11c_exception
+PASS: gdb.cp/demangle.exp: lucid: complexfunc2__FPFPc_i
+PASS: gdb.cp/demangle.exp: lucid: complexfunc3__FPFPFPl_s_i
+PASS: gdb.cp/demangle.exp: lucid: complexfunc4__FPFPFPc_s_i
+PASS: gdb.cp/demangle.exp: lucid: complexfunc5__FPFPc_PFl_i
+PASS: gdb.cp/demangle.exp: lucid: complexfunc6__FPFPi_PFl_i
+PASS: gdb.cp/demangle.exp: lucid: complexfunc7__FPFPFPc_i_PFl_i
+PASS: gdb.cp/demangle.exp: lucid: complicated_put__7ostreamFc
+PASS: gdb.cp/demangle.exp: lucid: conv10__FlPc
+PASS: gdb.cp/demangle.exp: lucid: conv16__FUlPc
+PASS: gdb.cp/demangle.exp: lucid: dec__FR3ios
+PASS: gdb.cp/demangle.exp: lucid: dec__Fli
+PASS: gdb.cp/demangle.exp: lucid: dofield__FP7ostreamPciT2T3
+PASS: gdb.cp/demangle.exp: lucid: flags__3iosFl
+PASS: gdb.cp/demangle.exp: lucid: flags__3iosFv
+PASS: gdb.cp/demangle.exp: lucid: foo__FiN31
+PASS: gdb.cp/demangle.exp: lucid: foo__FiR3fooT1T2T1T2
+PASS: gdb.cp/demangle.exp: lucid: foo___3barFl
+PASS: gdb.cp/demangle.exp: lucid: form__FPCce
+PASS: gdb.cp/demangle.exp: lucid: get__7istreamFPcic
+PASS: gdb.cp/demangle.exp: lucid: get__7istreamFR9streambufc
+PASS: gdb.cp/demangle.exp: lucid: get_complicated__7istreamFRUc
+PASS: gdb.cp/demangle.exp: lucid: get_complicated__7istreamFRc
+PASS: gdb.cp/demangle.exp: lucid: getline__7istreamFPUcic
+PASS: gdb.cp/demangle.exp: lucid: getline__7istreamFPcic
+PASS: gdb.cp/demangle.exp: lucid: ignore__7istreamFiT1
+PASS: gdb.cp/demangle.exp: lucid: init__12strstreambufFPciT1
+PASS: gdb.cp/demangle.exp: lucid: init__3iosFP9streambuf
+PASS: gdb.cp/demangle.exp: lucid: initcount__13Iostream_init
+PASS: gdb.cp/demangle.exp: lucid: ipfx__7istreamFi
+PASS: gdb.cp/demangle.exp: lucid: ls_complicated__7ostreamFUc
+PASS: gdb.cp/demangle.exp: lucid: ls_complicated__7ostreamFc
+PASS: gdb.cp/demangle.exp: lucid: open__11fstreambaseFPCciT2
+PASS: gdb.cp/demangle.exp: lucid: open__7filebufFPCciT2
+PASS: gdb.cp/demangle.exp: lucid: overload1arg__FSc
+PASS: gdb.cp/demangle.exp: lucid: overload1arg__FUc
+PASS: gdb.cp/demangle.exp: lucid: overload1arg__FUi
+PASS: gdb.cp/demangle.exp: lucid: overload1arg__FUl
+PASS: gdb.cp/demangle.exp: lucid: overload1arg__FUs
+PASS: gdb.cp/demangle.exp: lucid: overload1arg__Fc
+PASS: gdb.cp/demangle.exp: lucid: overload1arg__Fd
+PASS: gdb.cp/demangle.exp: lucid: overload1arg__Ff
+PASS: gdb.cp/demangle.exp: lucid: overload1arg__Fi
+PASS: gdb.cp/demangle.exp: lucid: overload1arg__Fl
+PASS: gdb.cp/demangle.exp: lucid: overload1arg__Fs
+PASS: gdb.cp/demangle.exp: lucid: overload1arg__Fv
+PASS: gdb.cp/demangle.exp: lucid: overloadargs__FiN21
+PASS: gdb.cp/demangle.exp: lucid: overloadargs__FiN31
+PASS: gdb.cp/demangle.exp: lucid: overloadargs__FiN41
+PASS: gdb.cp/demangle.exp: lucid: overloadargs__FiN51
+PASS: gdb.cp/demangle.exp: lucid: overloadargs__FiN61
+PASS: gdb.cp/demangle.exp: lucid: overloadargs__FiN71
+PASS: gdb.cp/demangle.exp: lucid: overloadargs__FiN81
+PASS: gdb.cp/demangle.exp: lucid: overloadargs__FiN91
+PASS: gdb.cp/demangle.exp: lucid: overloadargs__FiN91N11
+PASS: gdb.cp/demangle.exp: lucid: overloadargs__FiT1
+PASS: gdb.cp/demangle.exp: lucid: polar__FdT1
+PASS: gdb.cp/demangle.exp: lucid: pow__F7complexT1
+PASS: gdb.cp/demangle.exp: lucid: pow__F7complexd
+PASS: gdb.cp/demangle.exp: lucid: pow__F7complexi
+PASS: gdb.cp/demangle.exp: lucid: pow__Fd7complex
+PASS: gdb.cp/demangle.exp: lucid: pstart__FPciT2
+PASS: gdb.cp/demangle.exp: lucid: put__7ostreamFc
+PASS: gdb.cp/demangle.exp: lucid: read__7istreamFPci
+PASS: gdb.cp/demangle.exp: lucid: resetiosflags__FR3iosl
+PASS: gdb.cp/demangle.exp: lucid: restore_errno__FRi
+PASS: gdb.cp/demangle.exp: lucid: rs_complicated__7istreamFRUc
+PASS: gdb.cp/demangle.exp: lucid: rs_complicated__7istreamFRc
+PASS: gdb.cp/demangle.exp: lucid: seekg__7istreamFl8seek_dir
+PASS: gdb.cp/demangle.exp: lucid: seekoff__12strstreambufFl8seek_diri
+PASS: gdb.cp/demangle.exp: lucid: seekoff__9streambufFlQ2_3ios12ios_seek_diri
+PASS: gdb.cp/demangle.exp: lucid: seekpos__9streambufFli
+PASS: gdb.cp/demangle.exp: lucid: set_new_handler__FPFv_v
+PASS: gdb.cp/demangle.exp: lucid: setb__9streambufFPcT1i
+PASS: gdb.cp/demangle.exp: lucid: setb__FR3iosi
+PASS: gdb.cp/demangle.exp: lucid: setbuf__11fstreambaseFPci
+PASS: gdb.cp/demangle.exp: lucid: setbuf__9streambufFPUci
+PASS: gdb.cp/demangle.exp: lucid: setbuf__9streambufFPciT2
+PASS: gdb.cp/demangle.exp: lucid: setf__3iosFlT1
+PASS: gdb.cp/demangle.exp: lucid: setfill__FR3iosi
+PASS: gdb.cp/demangle.exp: lucid: setg__9streambufFPcN21
+PASS: gdb.cp/demangle.exp: lucid: setp__9streambufFPcT1
+PASS: gdb.cp/demangle.exp: lucid: sputn__9streambufFPCci
+PASS: gdb.cp/demangle.exp: lucid: str__FPCci
+PASS: gdb.cp/demangle.exp: lucid: tie__3iosFP7ostream
+PASS: gdb.cp/demangle.exp: lucid: uconv10__FUlPc
+PASS: gdb.cp/demangle.exp: lucid: write__7ostreamFPCci
+PASS: gdb.cp/demangle.exp: lucid: xget__7istreamFPc
+PASS: gdb.cp/demangle.exp: lucid: xsgetn__9streambufFPci
+PASS: gdb.cp/demangle.exp: lucid: xsputn__9streambufFPCci
+PASS: gdb.cp/demangle.exp: lucid: _Utf390_1__1_9223372036854775807__9223372036854775
+PASS: gdb.cp/demangle.exp: gnu: set demangle-style
+PASS: gdb.cp/demangle.exp: gnu: check demangling style
+PASS: gdb.cp/demangle.exp: gnu: Abort__FP6EditoriPCc
+PASS: gdb.cp/demangle.exp: gnu: AddAlignment__9ivTSolverUiP12ivInteractorP7ivTGlue
+PASS: gdb.cp/demangle.exp: gnu: Append__15NameChooserViewPCc
+PASS: gdb.cp/demangle.exp: gnu: ArrowheadIntersects__9ArrowLineP9ArrowheadR6BoxObjP7Graphic
+PASS: gdb.cp/demangle.exp: gnu: AtEnd__13ivRubberGroup
+PASS: gdb.cp/demangle.exp: gnu: BgFilter__9ivTSolverP12ivInteractor
+PASS: gdb.cp/demangle.exp: gnu: BitPatterntoa__FRC10BitPatternccc
+PASS: gdb.cp/demangle.exp: gnu: Check__6UArrayi
+PASS: gdb.cp/demangle.exp: gnu: CoreConstDecls__8TextCodeR7ostream
+PASS: gdb.cp/demangle.exp: gnu: Detach__8StateVarP12StateVarView
+PASS: gdb.cp/demangle.exp: gnu: Done__9ComponentG8Iterator
+PASS: gdb.cp/demangle.exp: gnu: DrawDestinationTransformedImage__FP7_XImageiiT0iiUlUiiiUiUlUlP4_XGCRC13ivTransformeriiii
+PASS: gdb.cp/demangle.exp: gnu: Edit__12StringEditorPCcii
+PASS: gdb.cp/demangle.exp: gnu: Effect__11RelateManipR7ivEvent
+PASS: gdb.cp/demangle.exp: gnu: FilterName__FPCc
+PASS: gdb.cp/demangle.exp: gnu: Filter__6PSTextPCci
+PASS: gdb.cp/demangle.exp: gnu: FindColor__7CatalogPCciii
+PASS: gdb.cp/demangle.exp: gnu: FindFixed__FRP4CNetP4CNet
+PASS: gdb.cp/demangle.exp: gnu: FindFont__7CatalogPCcN21
+PASS: gdb.cp/demangle.exp: gnu: Fix48_abort__FR8twolongs
+PASS: gdb.cp/demangle.exp: gnu: GetBarInfo__15iv2_6_VScrollerP13ivPerspectiveRiT2
+PASS: gdb.cp/demangle.exp: gnu: GetBgColor__C9ivPainter
+PASS: gdb.cp/demangle.exp: gnu: Iisdouble__FPC6IntRep
+PASS: gdb.cp/demangle.exp: gnu: InsertBody__15H_PullrightMenuii
+PASS: gdb.cp/demangle.exp: gnu: InsertCharacter__9TextManipc
+PASS: gdb.cp/demangle.exp: gnu: InsertToplevel__7ivWorldP12ivInteractorT1
+PASS: gdb.cp/demangle.exp: gnu: InsertToplevel__7ivWorldP12ivInteractorT1iiUi
+PASS: gdb.cp/demangle.exp: gnu: IsADirectory__FPCcR4stat
+PASS: gdb.cp/demangle.exp: gnu: IsAGroup__FP11GraphicViewP11GraphicComp
+PASS: gdb.cp/demangle.exp: gnu: IsA__10ButtonCodeUl
+PASS: gdb.cp/demangle.exp: gnu: ReadName__FR7istreamPc
+PASS: gdb.cp/demangle.exp: gnu: Redraw__13StringBrowseriiii
+PASS: gdb.cp/demangle.exp: gnu: Rotate__13ivTransformerf
+PASS: gdb.cp/demangle.exp: gnu: Rotated__C13ivTransformerf
+PASS: gdb.cp/demangle.exp: gnu: Round__Ff
+PASS: gdb.cp/demangle.exp: gnu: SetExport__16MemberSharedNameUi
+PASS: gdb.cp/demangle.exp: gnu: Set__14ivControlState13ControlStatusUi
+PASS: gdb.cp/demangle.exp: gnu: Set__5DFacePcii
+PASS: gdb.cp/demangle.exp: gnu: VConvert__9ivTSolverP12ivInteractorRP8TElementT2
+PASS: gdb.cp/demangle.exp: gnu: VConvert__9ivTSolverP7ivTGlueRP8TElement
+PASS: gdb.cp/demangle.exp: gnu: VOrder__9ivTSolverUiRP12ivInteractorT2
+PASS: gdb.cp/demangle.exp: gnu: Valid__7CatalogPCcRP4Tool
+PASS: gdb.cp/demangle.exp: gnu: _10PageButton$__both
+PASS: gdb.cp/demangle.exp: gnu: _3RNG$singleMantissa
+PASS: gdb.cp/demangle.exp: gnu: _5IComp$_release
+PASS: gdb.cp/demangle.exp: gnu: _$_10BitmapComp
+PASS: gdb.cp/demangle.exp: gnu: _$_9__io_defs
+PASS: gdb.cp/demangle.exp: gnu: _$_Q23foo3bar
+PASS: gdb.cp/demangle.exp: gnu: _$_Q33foo3bar4bell
+PASS: gdb.cp/demangle.exp: gnu: __10ivTelltaleiP7ivGlyph
+PASS: gdb.cp/demangle.exp: gnu: __10ivViewportiP12ivInteractorUi
+PASS: gdb.cp/demangle.exp: gnu: __10ostrstream
+PASS: gdb.cp/demangle.exp: gnu: __10ostrstreamPcii
+PASS: gdb.cp/demangle.exp: gnu: __11BasicDialogiPCcP13ivButtonStateN22Ui
+PASS: gdb.cp/demangle.exp: gnu: __11BitmapTablei
+PASS: gdb.cp/demangle.exp: gnu: __12ViewportCodeP12ViewportComp
+PASS: gdb.cp/demangle.exp: gnu: __12iv2_6_BorderiPCci
+PASS: gdb.cp/demangle.exp: gnu: __12iv2_6_Borderii
+PASS: gdb.cp/demangle.exp: gnu: __12ivBackgroundiP7ivGlyphPC7ivColor
+PASS: gdb.cp/demangle.exp: gnu: __12ivBreak_Listl
+PASS: gdb.cp/demangle.exp: gnu: __14TextInteractoriPCcUi
+PASS: gdb.cp/demangle.exp: gnu: __14iv2_6_MenuItemiP12ivInteractor
+PASS: gdb.cp/demangle.exp: gnu: __14iv2_6_MenuItemiPCcP12ivInteractor
+PASS: gdb.cp/demangle.exp: gnu: __20DisplayList_IteratorR11DisplayList
+PASS: gdb.cp/demangle.exp: gnu: __3fooRT0
+PASS: gdb.cp/demangle.exp: gnu: __3fooiN31
+PASS: gdb.cp/demangle.exp: gnu: __3fooiPCc
+PASS: gdb.cp/demangle.exp: gnu: __3fooiRT0iT2iT2
+PASS: gdb.cp/demangle.exp: gnu: __6GetOptiPPcPCc
+PASS: gdb.cp/demangle.exp: gnu: __6KeyMapPT0
+PASS: gdb.cp/demangle.exp: gnu: __7ivWorldPCcRiPPcPC12ivOptionDescPC14ivPropertyData
+PASS: gdb.cp/demangle.exp: gnu: __7procbufPCci
+PASS: gdb.cp/demangle.exp: gnu: __8ArrowCmdP6EditorUiUi
+PASS: gdb.cp/demangle.exp: gnu: __9F_EllipseiiiiP7Graphic
+PASS: gdb.cp/demangle.exp: gnu: __9FrameDataP9FrameCompi
+PASS: gdb.cp/demangle.exp: gnu: __9HVGraphicP9CanvasVarP7Graphic
+PASS: gdb.cp/demangle.exp: gnu: __Q23foo3bar
+PASS: gdb.cp/demangle.exp: gnu: __Q33foo3bar4bell
+PASS: gdb.cp/demangle.exp: gnu: __aa__3fooRT0
+PASS: gdb.cp/demangle.exp: gnu: __aad__3fooRT0
+PASS: gdb.cp/demangle.exp: gnu: __ad__3fooRT0
+PASS: gdb.cp/demangle.exp: gnu: __adv__3fooRT0
+PASS: gdb.cp/demangle.exp: gnu: __aer__3fooRT0
+PASS: gdb.cp/demangle.exp: gnu: __als__3fooRT0
+PASS: gdb.cp/demangle.exp: gnu: __amd__3fooRT0
+PASS: gdb.cp/demangle.exp: gnu: __ami__3fooRT0
+PASS: gdb.cp/demangle.exp: gnu: __aml__3FixRT0
+PASS: gdb.cp/demangle.exp: gnu: __aml__5Fix16i
+PASS: gdb.cp/demangle.exp: gnu: __aml__5Fix32RT0
+PASS: gdb.cp/demangle.exp: gnu: __aor__3fooRT0
+PASS: gdb.cp/demangle.exp: gnu: __apl__3fooRT0
+PASS: gdb.cp/demangle.exp: gnu: __ars__3fooRT0
+PASS: gdb.cp/demangle.exp: gnu: __as__3fooRT0
+PASS: gdb.cp/demangle.exp: gnu: __cl__3fooRT0
+PASS: gdb.cp/demangle.exp: gnu: __cl__6Normal
+PASS: gdb.cp/demangle.exp: gnu: __cl__6Stringii
+PASS: gdb.cp/demangle.exp: gnu: __cm__3fooRT0
+PASS: gdb.cp/demangle.exp: gnu: __co__3foo
+PASS: gdb.cp/demangle.exp: gnu: __dl__3fooPv
+PASS: gdb.cp/demangle.exp: gnu: __dv__3fooRT0
+PASS: gdb.cp/demangle.exp: gnu: __eq__3fooRT0
+PASS: gdb.cp/demangle.exp: gnu: __er__3fooRT0
+PASS: gdb.cp/demangle.exp: gnu: __ge__3fooRT0
+PASS: gdb.cp/demangle.exp: gnu: __gt__3fooRT0
+PASS: gdb.cp/demangle.exp: gnu: __le__3fooRT0
+PASS: gdb.cp/demangle.exp: gnu: __ls__3fooRT0
+PASS: gdb.cp/demangle.exp: gnu: __ls__FR7ostreamPFR3ios_R3ios
+PASS: gdb.cp/demangle.exp: gnu: __ls__FR7ostreamR3Fix
+PASS: gdb.cp/demangle.exp: gnu: __lt__3fooRT0
+PASS: gdb.cp/demangle.exp: gnu: __md__3fooRT0
+PASS: gdb.cp/demangle.exp: gnu: __mi__3fooRT0
+PASS: gdb.cp/demangle.exp: gnu: __ml__3fooRT0
+PASS: gdb.cp/demangle.exp: gnu: __mm__3fooi
+PASS: gdb.cp/demangle.exp: gnu: __ne__3fooRT0
+PASS: gdb.cp/demangle.exp: gnu: __ne__FRC7ComplexT0
+PASS: gdb.cp/demangle.exp: gnu: __ne__FRC7Complexd
+PASS: gdb.cp/demangle.exp: gnu: __ne__FRC9SubStringRC6String
+PASS: gdb.cp/demangle.exp: gnu: __nt__3foo
+PASS: gdb.cp/demangle.exp: gnu: __nw__3fooi
+PASS: gdb.cp/demangle.exp: gnu: __oo__3fooRT0
+PASS: gdb.cp/demangle.exp: gnu: __opPc__3foo
+PASS: gdb.cp/demangle.exp: gnu: __opi__3foo
+PASS: gdb.cp/demangle.exp: gnu: __or__3fooRT0
+PASS: gdb.cp/demangle.exp: gnu: __pl__3fooRT0
+PASS: gdb.cp/demangle.exp: gnu: __pp__3fooi
+PASS: gdb.cp/demangle.exp: gnu: __rf__3foo
+PASS: gdb.cp/demangle.exp: gnu: __rm__3fooRT0
+PASS: gdb.cp/demangle.exp: gnu: __rs__3fooRT0
+PASS: gdb.cp/demangle.exp: gnu: __vc__3fooRT0
+PASS: gdb.cp/demangle.exp: gnu: _gsub__6StringRC5RegexPCci
+PASS: gdb.cp/demangle.exp: gnu: _new_Fix__FUs
+PASS: gdb.cp/demangle.exp: gnu: _vt.foo
+PASS: gdb.cp/demangle.exp: gnu: _vt.foo.bar
+PASS: gdb.cp/demangle.exp: gnu: _vt$foo
+PASS: gdb.cp/demangle.exp: gnu: _vt$foo$bar
+PASS: gdb.cp/demangle.exp: gnu: append__7ivGlyphPT0
+PASS: gdb.cp/demangle.exp: gnu: arg__FRC7Complex
+PASS: gdb.cp/demangle.exp: gnu: clearok__FP7_win_sti
+PASS: gdb.cp/demangle.exp: gnu: complexfunc2__FPFPc_i
+PASS: gdb.cp/demangle.exp: gnu: complexfunc3__FPFPFPl_s_i
+PASS: gdb.cp/demangle.exp: gnu: complexfunc4__FPFPFPc_s_i
+PASS: gdb.cp/demangle.exp: gnu: complexfunc5__FPFPc_PFl_i
+PASS: gdb.cp/demangle.exp: gnu: complexfunc6__FPFPi_PFl_i
+PASS: gdb.cp/demangle.exp: gnu: complexfunc7__FPFPFPc_i_PFl_i
+PASS: gdb.cp/demangle.exp: gnu: contains__C9BitStringRC10BitPattern
+PASS: gdb.cp/demangle.exp: gnu: contains__C9BitStringRC12BitSubStringi
+PASS: gdb.cp/demangle.exp: gnu: contains__C9BitStringRT0
+PASS: gdb.cp/demangle.exp: gnu: div__FPC6IntRepT0P6IntRep
+PASS: gdb.cp/demangle.exp: gnu: div__FPC6IntReplP6IntRep
+PASS: gdb.cp/demangle.exp: gnu: div__FRC8RationalT0R8Rational
+PASS: gdb.cp/demangle.exp: gnu: divide__FRC7IntegerT0R7IntegerT2
+PASS: gdb.cp/demangle.exp: gnu: divide__FRC7IntegerlR7IntegerRl
+PASS: gdb.cp/demangle.exp: gnu: enable__14DocumentViewerPCcUi
+PASS: gdb.cp/demangle.exp: gnu: foo__FiN30
+PASS: gdb.cp/demangle.exp: gnu: foo__FiR3fooiT1iT1
+PASS: gdb.cp/demangle.exp: gnu: foo___3barl
+PASS: gdb.cp/demangle.exp: gnu: insert__15ivClippingStacklRP8_XRegion
+PASS: gdb.cp/demangle.exp: gnu: insert__16ChooserInfo_ListlR11ChooserInfo
+PASS: gdb.cp/demangle.exp: gnu: insert__17FontFamilyRepListlRP15ivFontFamilyRep
+PASS: gdb.cp/demangle.exp: gnu: leaveok__FP7_win_stc
+PASS: gdb.cp/demangle.exp: gnu: left_mover__C7ivMFKitP12ivAdjustableP7ivStyle
+PASS: gdb.cp/demangle.exp: gnu: matches__C9BitStringRC10BitPatterni
+PASS: gdb.cp/demangle.exp: gnu: matches__C9SubStringRC5Regex
+PASS: gdb.cp/demangle.exp: gnu: overload1arg__FSc
+PASS: gdb.cp/demangle.exp: gnu: overload1arg__FUc
+PASS: gdb.cp/demangle.exp: gnu: overload1arg__FUi
+PASS: gdb.cp/demangle.exp: gnu: overload1arg__FUl
+PASS: gdb.cp/demangle.exp: gnu: overload1arg__FUs
+PASS: gdb.cp/demangle.exp: gnu: overload1arg__Fc
+PASS: gdb.cp/demangle.exp: gnu: overload1arg__Fd
+PASS: gdb.cp/demangle.exp: gnu: overload1arg__Ff
+PASS: gdb.cp/demangle.exp: gnu: overload1arg__Fi
+PASS: gdb.cp/demangle.exp: gnu: overload1arg__Fl
+PASS: gdb.cp/demangle.exp: gnu: overload1arg__Fs
+PASS: gdb.cp/demangle.exp: gnu: overload1arg__Fv
+PASS: gdb.cp/demangle.exp: gnu: overloadargs__Fi
+PASS: gdb.cp/demangle.exp: gnu: overloadargs__Fii
+PASS: gdb.cp/demangle.exp: gnu: overloadargs__Fiii
+PASS: gdb.cp/demangle.exp: gnu: overloadargs__Fiiii
+PASS: gdb.cp/demangle.exp: gnu: overloadargs__Fiiiii
+PASS: gdb.cp/demangle.exp: gnu: overloadargs__Fiiiiii
+PASS: gdb.cp/demangle.exp: gnu: overloadargs__Fiiiiiii
+PASS: gdb.cp/demangle.exp: gnu: overloadargs__Fiiiiiiii
+PASS: gdb.cp/demangle.exp: gnu: overloadargs__Fiiiiiiiii
+PASS: gdb.cp/demangle.exp: gnu: overloadargs__Fiiiiiiiiii
+PASS: gdb.cp/demangle.exp: gnu: overloadargs__Fiiiiiiiiiii
+PASS: gdb.cp/demangle.exp: gnu: pick__13ivCompositionP8ivCanvasRC12ivAllocationiR5ivHit
+PASS: gdb.cp/demangle.exp: gnu: pointer__C11ivHScrollerRC7ivEventRC12ivAllocation
+PASS: gdb.cp/demangle.exp: gnu: poke__8ivRasterUlUlffff
+PASS: gdb.cp/demangle.exp: gnu: polar__Fdd
+PASS: gdb.cp/demangle.exp: gnu: read__10osStdInputRPCc
+PASS: gdb.cp/demangle.exp: gnu: scale__13ivTransformerff
+PASS: gdb.cp/demangle.exp: gnu: scanw__12CursesWindowPCce
+PASS: gdb.cp/demangle.exp: gnu: scmp__FPCcT0
+PASS: gdb.cp/demangle.exp: gnu: sgetn__7filebufPci
+PASS: gdb.cp/demangle.exp: gnu: shift__FP5_FrepiT0
+PASS: gdb.cp/demangle.exp: gnu: test__C6BitSeti
+PASS: gdb.cp/demangle.exp: gnu: test__C6BitSetii
+PASS: gdb.cp/demangle.exp: gnu: testbit__FRC7Integerl
+PASS: gdb.cp/demangle.exp: gnu: text_source__8Documentl
+PASS: gdb.cp/demangle.exp: gnu: variance__6Erlangd
+PASS: gdb.cp/demangle.exp: gnu: vform__8iostreamPCcPc
+PASS: gdb.cp/demangle.exp: gnu: view__14DocumentViewerP8ItemViewP11TabularItem
+PASS: gdb.cp/demangle.exp: gnu: xy_extents__11ivExtensionffff
+PASS: gdb.cp/demangle.exp: gnu: zero__8osMemoryPvUi
+PASS: gdb.cp/demangle.exp: gnu: _2T4$N
+PASS: gdb.cp/demangle.exp: gnu: _Q22T42t1$N
+PASS: gdb.cp/demangle.exp: gnu: get__2T1
+PASS: gdb.cp/demangle.exp: gnu: get__Q22T11a
+PASS: gdb.cp/demangle.exp: gnu: get__Q32T11a1b
+PASS: gdb.cp/demangle.exp: gnu: get__Q42T11a1b1c
+PASS: gdb.cp/demangle.exp: gnu: get__Q52T11a1b1c1d
+PASS: gdb.cp/demangle.exp: gnu: put__2T1i
+PASS: gdb.cp/demangle.exp: gnu: put__Q22T11ai
+PASS: gdb.cp/demangle.exp: gnu: put__Q32T11a1bi
+PASS: gdb.cp/demangle.exp: gnu: put__Q42T11a1b1ci
+PASS: gdb.cp/demangle.exp: gnu: put__Q52T11a1b1c1di
+PASS: gdb.cp/demangle.exp: gnu: bar__3fooPv
+PASS: gdb.cp/demangle.exp: gnu: bar__3fooPCv
+PASS: gdb.cp/demangle.exp: gnu: bar__C3fooPv
+PASS: gdb.cp/demangle.exp: gnu: bar__C3fooPCv
+PASS: gdb.cp/demangle.exp: gnu: __eq__3fooRT0
+PASS: gdb.cp/demangle.exp: gnu: __eq__3fooRC3foo
+PASS: gdb.cp/demangle.exp: gnu: __eq__C3fooR3foo
+PASS: gdb.cp/demangle.exp: gnu: __eq__C3fooRT0
+PASS: gdb.cp/demangle.exp: gnu: elem__t6vector1Zdi
+PASS: gdb.cp/demangle.exp: gnu: elem__t6vector1Zii
+PASS: gdb.cp/demangle.exp: gnu: __t6vector1Zdi
+PASS: gdb.cp/demangle.exp: gnu: __t6vector1Zii
+PASS: gdb.cp/demangle.exp: gnu: _$_t6vector1Zdi
+PASS: gdb.cp/demangle.exp: gnu: _$_t6vector1Zii
+PASS: gdb.cp/demangle.exp: gnu: __nw__t2T11ZcUi
+PASS: gdb.cp/demangle.exp: gnu: __nw__t2T11Z1tUi
+PASS: gdb.cp/demangle.exp: gnu: __dl__t2T11ZcPv
+PASS: gdb.cp/demangle.exp: gnu: __dl__t2T11Z1tPv
+PASS: gdb.cp/demangle.exp: gnu: __t2T11Zci
+PASS: gdb.cp/demangle.exp: gnu: __t2T11Zc
+PASS: gdb.cp/demangle.exp: gnu: __t2T11Z1ti
+PASS: gdb.cp/demangle.exp: gnu: __t2T11Z1t
+PASS: gdb.cp/demangle.exp: gnu: __Q2t4List1Z10VHDLEntity3Pix
+PASS: gdb.cp/demangle.exp: gnu: __Q2t4List1Z10VHDLEntity3PixPQ2t4List1Z10VHDLEntity7element
+PASS: gdb.cp/demangle.exp: gnu: __Q2t4List1Z10VHDLEntity3PixRCQ2t4List1Z10VHDLEntity3Pix
+PASS: gdb.cp/demangle.exp: gnu: __Q2t4List1Z10VHDLEntity7elementRC10VHDLEntityPT0
+PASS: gdb.cp/demangle.exp: gnu: __Q2t4List1Z10VHDLEntity7elementRCQ2t4List1Z10VHDLEntity7element
+PASS: gdb.cp/demangle.exp: gnu: __cl__C11VHDLLibraryGt4PixX3Z11VHDLLibraryZ14VHDLLibraryRepZt4List1Z10VHDLEntity
+PASS: gdb.cp/demangle.exp: gnu: __cl__Ct4List1Z10VHDLEntityRCQ2t4List1Z10VHDLEntity3Pix
+PASS: gdb.cp/demangle.exp: gnu: __ne__FPvRCQ2t4List1Z10VHDLEntity3Pix
+PASS: gdb.cp/demangle.exp: gnu: __ne__FPvRCt4PixX3Z11VHDLLibraryZ14VHDLLibraryRepZt4List1Z10VHDLEntity
+PASS: gdb.cp/demangle.exp: gnu: __t4List1Z10VHDLEntityRCt4List1Z10VHDLEntity
+PASS: gdb.cp/demangle.exp: gnu: __t4PixX3Z11VHDLLibraryZ14VHDLLibraryRepZt4List1Z10VHDLEntity
+PASS: gdb.cp/demangle.exp: gnu: __t4PixX3Z11VHDLLibraryZ14VHDLLibraryRepZt4List1Z10VHDLEntityP14VHDLLibraryRepGQ2t4List1Z10VHDLEntity3Pix
+PASS: gdb.cp/demangle.exp: gnu: __t4PixX3Z11VHDLLibraryZ14VHDLLibraryRepZt4List1Z10VHDLEntityRCt4PixX3Z11VHDLLibraryZ14VHDLLibraryRepZt4List1Z10VHDLEntity
+PASS: gdb.cp/demangle.exp: gnu: nextE__C11VHDLLibraryRt4PixX3Z11VHDLLibraryZ14VHDLLibraryRepZt4List1Z10VHDLEntity
+PASS: gdb.cp/demangle.exp: gnu: next__Ct4List1Z10VHDLEntityRQ2t4List1Z10VHDLEntity3Pix
+PASS: gdb.cp/demangle.exp: gnu: _GLOBAL_$D$set
+PASS: gdb.cp/demangle.exp: gnu: _GLOBAL_$I$set
+PASS: gdb.cp/demangle.exp: gnu: __as__t5ListS1ZUiRCt5ListS1ZUi
+PASS: gdb.cp/demangle.exp: gnu: __cl__Ct5ListS1ZUiRCQ2t5ListS1ZUi3Vix
+PASS: gdb.cp/demangle.exp: gnu: __cl__Ct5SetLS1ZUiRCQ2t5SetLS1ZUi3Vix
+PASS: gdb.cp/demangle.exp: gnu: __t10ListS_link1ZUiRCUiPT0
+PASS: gdb.cp/demangle.exp: gnu: __t10ListS_link1ZUiRCt10ListS_link1ZUi
+PASS: gdb.cp/demangle.exp: gnu: __t5ListS1ZUiRCt5ListS1ZUi
+PASS: gdb.cp/demangle.exp: gnu: next__Ct5ListS1ZUiRQ2t5ListS1ZUi3Vix
+PASS: gdb.cp/demangle.exp: gnu: __ne__FPvRCQ2t5SetLS1ZUi3Vix
+PASS: gdb.cp/demangle.exp: gnu: __t8ListElem1Z5LabelRt4List1Z5Label
+PASS: gdb.cp/demangle.exp: gnu: __t8BDDHookV1ZPcRCPc
+PASS: gdb.cp/demangle.exp: gnu: _vt$t8BDDHookV1ZPc
+PASS: gdb.cp/demangle.exp: gnu: __ne__FPvRCQ211BDDFunction4VixB
+PASS: gdb.cp/demangle.exp: gnu: __eq__FPvRCQ211BDDFunction4VixB
+PASS: gdb.cp/demangle.exp: gnu: relativeId__CQ36T_phi210T_preserve8FPC_nextRCQ26T_phi210T_preserveRC10Parameters
+PASS: gdb.cp/demangle.exp: gnu: _Utf390_1__1_9223372036854775807__9223372036854775
+PASS: gdb.cp/demangle.exp: gnu: foo__I40
+PASS: gdb.cp/demangle.exp: gnu: foo__I_200_
+PASS: gdb.cp/demangle.exp: gnu: foo__I_200
+PASS: gdb.cp/demangle.exp: gnu: foo__I_4000000000000000000000000000000000000000000000000000000000000000000000000
+PASS: gdb.cp/demangle.exp: gnu: __thunk_64__0RL__list__Q29CosNaming20_proxy_NamingContextUlRPt25_CORBA_Unbounded_Sequence1ZQ29CosNaming7BindingRPQ29CosNaming15BindingIterator
+PASS: gdb.cp/demangle.exp: arm: set demangle-style
+PASS: gdb.cp/demangle.exp: arm: check demangling style
+PASS: gdb.cp/demangle.exp: arm: __dt__21T5__pt__11_PFiPPdPv_iFv
+PASS: gdb.cp/demangle.exp: arm: __ct__1cFi
+PASS: gdb.cp/demangle.exp: arm: __dt__11T5__pt__2_iFv
+PASS: gdb.cp/demangle.exp: arm: __dt__11T5__pt__2_cFv
+PASS: gdb.cp/demangle.exp: arm: __ct__2T2Fi
+PASS: gdb.cp/demangle.exp: arm: __dt__2T1Fv
+PASS: gdb.cp/demangle.exp: arm: __dt__12T5__pt__3_1xFv
+PASS: gdb.cp/demangle.exp: arm: __dt__17T5__pt__8_PFcPv_iFv
+PASS: gdb.cp/demangle.exp: arm: g__FP1cPC1cT1
+PASS: gdb.cp/demangle.exp: arm: g__FPUlPCUlT1
+PASS: gdb.cp/demangle.exp: arm: g__FPUiPCUiT1
+PASS: gdb.cp/demangle.exp: arm: g__FPUsPCUsT1
+PASS: gdb.cp/demangle.exp: arm: g__FPUcPCUcT1
+PASS: gdb.cp/demangle.exp: arm: g__F1TPlPClT2
+PASS: gdb.cp/demangle.exp: arm: g__F1RRlRClT2
+PASS: gdb.cp/demangle.exp: arm: g__F1TPiPCiT2
+PASS: gdb.cp/demangle.exp: arm: g__F1RRiRCiT2
+PASS: gdb.cp/demangle.exp: arm: g__F1TPsPCsT2
+PASS: gdb.cp/demangle.exp: arm: g__F1RRsRCsT2
+PASS: gdb.cp/demangle.exp: arm: g__F1TPcPCcT2
+PASS: gdb.cp/demangle.exp: arm: g__F1RRcRCcT2
+PASS: gdb.cp/demangle.exp: arm: __ct__21T5__pt__11_PFiPPdPv_iFi
+PASS: gdb.cp/demangle.exp: arm: __gt__FRC2T2c
+PASS: gdb.cp/demangle.exp: arm: __ge__FRC2T2c
+PASS: gdb.cp/demangle.exp: arm: __lt__FRC2T2c
+PASS: gdb.cp/demangle.exp: arm: __le__FRC2T2c
+PASS: gdb.cp/demangle.exp: arm: __ne__FRC2T2c
+PASS: gdb.cp/demangle.exp: arm: __eq__FRC2T2c
+PASS: gdb.cp/demangle.exp: arm: __amd__FR2T2i
+PASS: gdb.cp/demangle.exp: arm: __adv__FR2T2i
+PASS: gdb.cp/demangle.exp: arm: __amu__FR2T2i
+PASS: gdb.cp/demangle.exp: arm: __ami__FR2T2i
+PASS: gdb.cp/demangle.exp: arm: __apl__FR2T2i
+PASS: gdb.cp/demangle.exp: arm: __nw__2T1SFUi
+PASS: gdb.cp/demangle.exp: arm: __dl__2T1SFPv
+PASS: gdb.cp/demangle.exp: arm: put__2T7SFi
+PASS: gdb.cp/demangle.exp: arm: __dl__12T5__pt__3_1xSFPv
+PASS: gdb.cp/demangle.exp: arm: h__FUc
+PASS: gdb.cp/demangle.exp: arm: f__Fic
+PASS: gdb.cp/demangle.exp: arm: h__FUi
+PASS: gdb.cp/demangle.exp: arm: h__Fci
+PASS: gdb.cp/demangle.exp: arm: h__FUl
+PASS: gdb.cp/demangle.exp: arm: h__Fcl
+PASS: gdb.cp/demangle.exp: arm: h__FUs
+PASS: gdb.cp/demangle.exp: arm: h__Fcs
+PASS: gdb.cp/demangle.exp: arm: __amd__FR2T2RC2T2
+PASS: gdb.cp/demangle.exp: arm: __adv__FR2T2RC2T2
+PASS: gdb.cp/demangle.exp: arm: __amu__FR2T2RC2T2
+PASS: gdb.cp/demangle.exp: arm: __ami__FR2T2RC2T2
+PASS: gdb.cp/demangle.exp: arm: __apl__FR2T2RC2T2
+PASS: gdb.cp/demangle.exp: arm: g__F1SRPUlRPCUlT2
+PASS: gdb.cp/demangle.exp: arm: g__F1SRPUiRPCUiT2
+PASS: gdb.cp/demangle.exp: arm: g__F1SRPUsRPCUsT2
+PASS: gdb.cp/demangle.exp: arm: g__F1SRPUcRPCUcT2
+PASS: gdb.cp/demangle.exp: arm: g__F1T1SRPlRPClT3
+PASS: gdb.cp/demangle.exp: arm: g__F1T1SRPiRPCiT3
+PASS: gdb.cp/demangle.exp: arm: g__F1T1SRPcRPCcT3
+PASS: gdb.cp/demangle.exp: arm: X__12T5__pt__3_1x
+PASS: gdb.cp/demangle.exp: arm: __ct__11T5__pt__2_iFi
+PASS: gdb.cp/demangle.exp: arm: __ct__11T5__pt__2_cFi
+PASS: gdb.cp/demangle.exp: arm: __gt__FRC2T2T1
+PASS: gdb.cp/demangle.exp: arm: __ge__FRC2T2T1
+PASS: gdb.cp/demangle.exp: arm: __lt__FRC2T2T1
+PASS: gdb.cp/demangle.exp: arm: __le__FRC2T2T1
+PASS: gdb.cp/demangle.exp: arm: __ne__FRC2T2T1
+PASS: gdb.cp/demangle.exp: arm: __eq__FRC2T2T1
+PASS: gdb.cp/demangle.exp: arm: g__FcR1cRC1cT2
+PASS: gdb.cp/demangle.exp: arm: g__FcRPdRPCdT2
+PASS: gdb.cp/demangle.exp: arm: g__FcRPfRPCfT2
+PASS: gdb.cp/demangle.exp: arm: h__FcT1
+PASS: gdb.cp/demangle.exp: arm: f__Ficd
+PASS: gdb.cp/demangle.exp: arm: g__F1T1SdRPsRPCsT4
+PASS: gdb.cp/demangle.exp: arm: g__F1cC1cT1
+PASS: gdb.cp/demangle.exp: arm: g__FPdPCdT1
+PASS: gdb.cp/demangle.exp: arm: g__FPfPCfT1
+PASS: gdb.cp/demangle.exp: arm: g__FUlCUlT1
+PASS: gdb.cp/demangle.exp: arm: g__FPlPClT1
+PASS: gdb.cp/demangle.exp: arm: g__FUiCUiT1
+PASS: gdb.cp/demangle.exp: arm: g__FPiPCiT1
+PASS: gdb.cp/demangle.exp: arm: g__FUsCUsT1
+PASS: gdb.cp/demangle.exp: arm: g__FPsPCsT1
+PASS: gdb.cp/demangle.exp: arm: g__FUcCUcT1
+PASS: gdb.cp/demangle.exp: arm: g__FPcPCcT1
+PASS: gdb.cp/demangle.exp: arm: g__F1TlClT2
+PASS: gdb.cp/demangle.exp: arm: g__F1TiCiT2
+PASS: gdb.cp/demangle.exp: arm: g__F1TsCsT2
+PASS: gdb.cp/demangle.exp: arm: g__F1TcCcT2
+PASS: gdb.cp/demangle.exp: arm: __dl__17T5__pt__8_PFcPv_iSFPv
+PASS: gdb.cp/demangle.exp: arm: printf__FPCce
+PASS: gdb.cp/demangle.exp: arm: X__17T5__pt__8_PFcPv_i
+PASS: gdb.cp/demangle.exp: arm: __ct__12T5__pt__3_1xFi
+PASS: gdb.cp/demangle.exp: arm: g__F1SRUlRCUlT2
+PASS: gdb.cp/demangle.exp: arm: g__F1SRPlRPClT2
+PASS: gdb.cp/demangle.exp: arm: g__F1RRUiRCUiT2
+PASS: gdb.cp/demangle.exp: arm: g__F1SRPiRPCiT2
+PASS: gdb.cp/demangle.exp: arm: g__F1RRUsRCUsT2
+PASS: gdb.cp/demangle.exp: arm: g__F1SRPsRPCsT2
+PASS: gdb.cp/demangle.exp: arm: g__F1RRUcRCUcT2
+PASS: gdb.cp/demangle.exp: arm: g__F1SRPcRPCcT2
+PASS: gdb.cp/demangle.exp: arm: g__F1T1RRlRClT3
+PASS: gdb.cp/demangle.exp: arm: g__F1T1RRiRCiT3
+PASS: gdb.cp/demangle.exp: arm: g__F1T1RRsRCsT3
+PASS: gdb.cp/demangle.exp: arm: g__F1T1RRcRCcT3
+PASS: gdb.cp/demangle.exp: arm: __dl__21T5__pt__11_PFiPPdPv_iSFPv
+PASS: gdb.cp/demangle.exp: arm: __std__foo
+PASS: gdb.cp/demangle.exp: arm: __sti__bar
+PASS: gdb.cp/demangle.exp: arm: f__FicdPcPFci_v
+PASS: gdb.cp/demangle.exp: arm: f__FicdPcPFic_v
+PASS: gdb.cp/demangle.exp: arm: get__2T7SFv
+PASS: gdb.cp/demangle.exp: arm: X__21T5__pt__11_PFiPPdPv_i
+PASS: gdb.cp/demangle.exp: arm: g__FcRdRCdT2
+PASS: gdb.cp/demangle.exp: arm: g__FcRfRCfT2
+PASS: gdb.cp/demangle.exp: arm: __md__FC2T2i
+PASS: gdb.cp/demangle.exp: arm: __dv__FC2T2i
+PASS: gdb.cp/demangle.exp: arm: __ml__FC2T2i
+PASS: gdb.cp/demangle.exp: arm: __mi__FC2T2i
+PASS: gdb.cp/demangle.exp: arm: __pl__FC2T2i
+PASS: gdb.cp/demangle.exp: arm: __dl__11T5__pt__2_iSFPv
+PASS: gdb.cp/demangle.exp: arm: __dl__11T5__pt__2_cSFPv
+PASS: gdb.cp/demangle.exp: arm: h__Fc
+PASS: gdb.cp/demangle.exp: arm: h__Fd
+PASS: gdb.cp/demangle.exp: arm: h__Ff
+PASS: gdb.cp/demangle.exp: arm: h__Fi
+PASS: gdb.cp/demangle.exp: arm: f__Fi
+PASS: gdb.cp/demangle.exp: arm: h__Fl
+PASS: gdb.cp/demangle.exp: arm: h__Fs
+PASS: gdb.cp/demangle.exp: arm: __md__FC2T2RC2T2
+PASS: gdb.cp/demangle.exp: arm: __dv__FC2T2RC2T2
+PASS: gdb.cp/demangle.exp: arm: __ml__FC2T2RC2T2
+PASS: gdb.cp/demangle.exp: arm: __mi__FC2T2RC2T2
+PASS: gdb.cp/demangle.exp: arm: __pl__FC2T2RC2T2
+PASS: gdb.cp/demangle.exp: arm: g__FcRP1cRPC1cT2
+PASS: gdb.cp/demangle.exp: arm: X__11T5__pt__2_c
+PASS: gdb.cp/demangle.exp: arm: X__11T5__pt__2_i
+PASS: gdb.cp/demangle.exp: arm: g__FdCdT1
+PASS: gdb.cp/demangle.exp: arm: g__FfCfT1
+PASS: gdb.cp/demangle.exp: arm: g__FlClT1
+PASS: gdb.cp/demangle.exp: arm: g__FiCiT1
+PASS: gdb.cp/demangle.exp: arm: g__FsCsT1
+PASS: gdb.cp/demangle.exp: arm: g__FcCcT1
+PASS: gdb.cp/demangle.exp: arm: __ct__17T5__pt__8_PFcPv_iFi
+PASS: gdb.cp/demangle.exp: arm: f__FicdPc
+PASS: gdb.cp/demangle.exp: arm: __nw__FUi
+PASS: gdb.cp/demangle.exp: arm: __ct__Q3_2T11a1bSFi
+PASS: gdb.cp/demangle.exp: arm: __dt__Q3_2T11a1bSFi
+PASS: gdb.cp/demangle.exp: arm: put__Q3_2T11a1bSFi
+PASS: gdb.cp/demangle.exp: arm: get__Q2_2T11aSFv
+PASS: gdb.cp/demangle.exp: arm: put__2T1SFi
+PASS: gdb.cp/demangle.exp: arm: put__Q5_2T11a1b1c1dSFi
+PASS: gdb.cp/demangle.exp: arm: get__Q4_2T11a1b1cSFv
+PASS: gdb.cp/demangle.exp: arm: put__Q2_2T11aSFi
+PASS: gdb.cp/demangle.exp: arm: put__Q4_2T11a1b1cSFi
+PASS: gdb.cp/demangle.exp: arm: get__Q3_2T11a1bSFv
+PASS: gdb.cp/demangle.exp: arm: get__2T1SFv
+PASS: gdb.cp/demangle.exp: arm: get__Q5_2T11a1b1c1dSFv
+PASS: gdb.cp/demangle.exp: arm: __dt__11T1__pt__2_cFv
+PASS: gdb.cp/demangle.exp: arm: __dt__12T1__pt__3_1tFv
+PASS: gdb.cp/demangle.exp: arm: __dl__12T1__pt__3_1tSFPv
+PASS: gdb.cp/demangle.exp: arm: __ct__11T1__pt__2_cFi
+PASS: gdb.cp/demangle.exp: arm: __ct__11T1__pt__2_cFv
+PASS: gdb.cp/demangle.exp: arm: __ct__12T1__pt__3_1tFi
+PASS: gdb.cp/demangle.exp: arm: __ct__12T1__pt__3_1tFv
+PASS: gdb.cp/demangle.exp: arm: __dl__11T1__pt__2_cSFPv
+PASS: gdb.cp/demangle.exp: arm: bar__3fooFPv
+PASS: gdb.cp/demangle.exp: arm: bar__3fooFPCv
+PASS: gdb.cp/demangle.exp: arm: bar__3fooCFPv
+PASS: gdb.cp/demangle.exp: arm: bar__3fooCFPCv
+PASS: gdb.cp/demangle.exp: arm: __eq__3fooFR3foo
+PASS: gdb.cp/demangle.exp: arm: __eq__3fooFRC3foo
+PASS: gdb.cp/demangle.exp: arm: __eq__3fooCFR3foo
+PASS: gdb.cp/demangle.exp: arm: __eq__3fooCFRC3foo
+PASS: gdb.cp/demangle.exp: arm: elem__15vector__pt__2_dFi
+PASS: gdb.cp/demangle.exp: arm: elem__15vector__pt__2_iFi
+PASS: gdb.cp/demangle.exp: arm: __ct__15vector__pt__2_dFi
+PASS: gdb.cp/demangle.exp: arm: __ct__15vector__pt__2_iFi
+PASS: gdb.cp/demangle.exp: arm: __ct__25DListNode__pt__9_R6RLabelFR6RLabelP25DListNode__pt__9_R6RLabelT2
+PASS: gdb.cp/demangle.exp: arm: bar__3fooFiT16FooBar
+PASS: gdb.cp/demangle.exp: arm: bar__3fooFPiN51PdN37PcN211T1iN215
+PASS: gdb.cp/demangle.exp: arm: _Utf390_1__1_9223372036854775807__9223372036854775
+PASS: gdb.cp/demangle.exp: hp: set demangle-style
+PASS: gdb.cp/demangle.exp: hp: check demangling style
+PASS: gdb.cp/demangle.exp: hp: g__FP1cPC1cT1
+PASS: gdb.cp/demangle.exp: hp: g__FPUlPCUlT1
+PASS: gdb.cp/demangle.exp: hp: g__FPUiPCUiT1
+PASS: gdb.cp/demangle.exp: hp: g__FPUsPCUsT1
+PASS: gdb.cp/demangle.exp: hp: g__FPUcPCUcT1
+PASS: gdb.cp/demangle.exp: hp: g__F1TPlPClT2
+PASS: gdb.cp/demangle.exp: hp: g__F1RRlRClT2
+PASS: gdb.cp/demangle.exp: hp: g__F1TPiPCiT2
+PASS: gdb.cp/demangle.exp: hp: g__F1RRiRCiT2
+PASS: gdb.cp/demangle.exp: hp: g__F1TPsPCsT2
+PASS: gdb.cp/demangle.exp: hp: g__F1RRsRCsT2
+PASS: gdb.cp/demangle.exp: hp: g__F1TPcPCcT2
+PASS: gdb.cp/demangle.exp: hp: g__F1RRcRCcT2
+PASS: gdb.cp/demangle.exp: hp: __gt__FRC2T2c
+PASS: gdb.cp/demangle.exp: hp: __ge__FRC2T2c
+PASS: gdb.cp/demangle.exp: hp: __lt__FRC2T2c
+PASS: gdb.cp/demangle.exp: hp: __le__FRC2T2c
+PASS: gdb.cp/demangle.exp: hp: __ne__FRC2T2c
+PASS: gdb.cp/demangle.exp: hp: __eq__FRC2T2c
+PASS: gdb.cp/demangle.exp: hp: __amd__FR2T2i
+PASS: gdb.cp/demangle.exp: hp: __adv__FR2T2i
+PASS: gdb.cp/demangle.exp: hp: __amu__FR2T2i
+PASS: gdb.cp/demangle.exp: hp: __ami__FR2T2i
+PASS: gdb.cp/demangle.exp: hp: __apl__FR2T2i
+PASS: gdb.cp/demangle.exp: hp: __nw__2T1SFUi
+PASS: gdb.cp/demangle.exp: hp: __dl__2T1SFPv
+PASS: gdb.cp/demangle.exp: hp: put__2T7SFi
+PASS: gdb.cp/demangle.exp: hp: h__FUc
+PASS: gdb.cp/demangle.exp: hp: f__Fic
+PASS: gdb.cp/demangle.exp: hp: h__FUi
+PASS: gdb.cp/demangle.exp: hp: h__Fci
+PASS: gdb.cp/demangle.exp: hp: h__FUl
+PASS: gdb.cp/demangle.exp: hp: h__Fcl
+PASS: gdb.cp/demangle.exp: hp: h__FUs
+PASS: gdb.cp/demangle.exp: hp: h__Fcs
+PASS: gdb.cp/demangle.exp: hp: __amd__FR2T2RC2T2
+PASS: gdb.cp/demangle.exp: hp: __adv__FR2T2RC2T2
+PASS: gdb.cp/demangle.exp: hp: __amu__FR2T2RC2T2
+PASS: gdb.cp/demangle.exp: hp: __ami__FR2T2RC2T2
+PASS: gdb.cp/demangle.exp: hp: __apl__FR2T2RC2T2
+PASS: gdb.cp/demangle.exp: hp: g__F1SRPUlRPCUlT2
+PASS: gdb.cp/demangle.exp: hp: g__F1SRPUiRPCUiT2
+PASS: gdb.cp/demangle.exp: hp: g__F1SRPUsRPCUsT2
+PASS: gdb.cp/demangle.exp: hp: g__F1SRPUcRPCUcT2
+PASS: gdb.cp/demangle.exp: hp: g__F1T1SRPlRPClT3
+PASS: gdb.cp/demangle.exp: hp: g__F1T1SRPiRPCiT3
+PASS: gdb.cp/demangle.exp: hp: g__F1T1SRPcRPCcT3
+PASS: gdb.cp/demangle.exp: hp: __gt__FRC2T2T1
+PASS: gdb.cp/demangle.exp: hp: __ge__FRC2T2T1
+PASS: gdb.cp/demangle.exp: hp: __lt__FRC2T2T1
+PASS: gdb.cp/demangle.exp: hp: __le__FRC2T2T1
+PASS: gdb.cp/demangle.exp: hp: __ne__FRC2T2T1
+PASS: gdb.cp/demangle.exp: hp: __eq__FRC2T2T1
+PASS: gdb.cp/demangle.exp: hp: g__FcR1cRC1cT2
+PASS: gdb.cp/demangle.exp: hp: g__FcRPdRPCdT2
+PASS: gdb.cp/demangle.exp: hp: g__FcRPfRPCfT2
+PASS: gdb.cp/demangle.exp: hp: h__FcT1
+PASS: gdb.cp/demangle.exp: hp: f__Ficd
+PASS: gdb.cp/demangle.exp: hp: g__F1T1SdRPsRPCsT4
+PASS: gdb.cp/demangle.exp: hp: g__F1cC1cT1
+PASS: gdb.cp/demangle.exp: hp: g__FPdPCdT1
+PASS: gdb.cp/demangle.exp: hp: g__FPfPCfT1
+PASS: gdb.cp/demangle.exp: hp: g__FUlCUlT1
+PASS: gdb.cp/demangle.exp: hp: g__FPlPClT1
+PASS: gdb.cp/demangle.exp: hp: g__FUiCUiT1
+PASS: gdb.cp/demangle.exp: hp: g__FPiPCiT1
+PASS: gdb.cp/demangle.exp: hp: g__FUsCUsT1
+PASS: gdb.cp/demangle.exp: hp: g__FPsPCsT1
+PASS: gdb.cp/demangle.exp: hp: g__FUcCUcT1
+PASS: gdb.cp/demangle.exp: hp: g__FPcPCcT1
+PASS: gdb.cp/demangle.exp: hp: g__F1TlClT2
+PASS: gdb.cp/demangle.exp: hp: g__F1TiCiT2
+PASS: gdb.cp/demangle.exp: hp: g__F1TsCsT2
+PASS: gdb.cp/demangle.exp: hp: g__F1TcCcT2
+PASS: gdb.cp/demangle.exp: hp: printf__FPCce
+PASS: gdb.cp/demangle.exp: hp: g__F1SRUlRCUlT2
+PASS: gdb.cp/demangle.exp: hp: g__F1SRPlRPClT2
+PASS: gdb.cp/demangle.exp: hp: g__F1RRUiRCUiT2
+PASS: gdb.cp/demangle.exp: hp: g__F1SRPiRPCiT2
+PASS: gdb.cp/demangle.exp: hp: g__F1RRUsRCUsT2
+PASS: gdb.cp/demangle.exp: hp: g__F1SRPsRPCsT2
+PASS: gdb.cp/demangle.exp: hp: g__F1RRUcRCUcT2
+PASS: gdb.cp/demangle.exp: hp: g__F1SRPcRPCcT2
+PASS: gdb.cp/demangle.exp: hp: g__F1T1RRlRClT3
+PASS: gdb.cp/demangle.exp: hp: g__F1T1RRiRCiT3
+PASS: gdb.cp/demangle.exp: hp: g__F1T1RRsRCsT3
+PASS: gdb.cp/demangle.exp: hp: g__F1T1RRcRCcT3
+PASS: gdb.cp/demangle.exp: hp: f__FicdPcPFci_v
+PASS: gdb.cp/demangle.exp: hp: f__FicdPcPFic_v
+PASS: gdb.cp/demangle.exp: hp: get__2T7SFv
+PASS: gdb.cp/demangle.exp: hp: g__FcRdRCdT2
+PASS: gdb.cp/demangle.exp: hp: g__FcRfRCfT2
+PASS: gdb.cp/demangle.exp: hp: __md__FC2T2i
+PASS: gdb.cp/demangle.exp: hp: __dv__FC2T2i
+PASS: gdb.cp/demangle.exp: hp: __ml__FC2T2i
+PASS: gdb.cp/demangle.exp: hp: __mi__FC2T2i
+PASS: gdb.cp/demangle.exp: hp: __pl__FC2T2i
+PASS: gdb.cp/demangle.exp: hp: h__Fc
+PASS: gdb.cp/demangle.exp: hp: h__Fd
+PASS: gdb.cp/demangle.exp: hp: h__Ff
+PASS: gdb.cp/demangle.exp: hp: h__Fi
+PASS: gdb.cp/demangle.exp: hp: f__Fi
+PASS: gdb.cp/demangle.exp: hp: h__Fl
+PASS: gdb.cp/demangle.exp: hp: h__Fs
+PASS: gdb.cp/demangle.exp: hp: __md__FC2T2RC2T2
+PASS: gdb.cp/demangle.exp: hp: __dv__FC2T2RC2T2
+PASS: gdb.cp/demangle.exp: hp: __ml__FC2T2RC2T2
+PASS: gdb.cp/demangle.exp: hp: __mi__FC2T2RC2T2
+PASS: gdb.cp/demangle.exp: hp: __pl__FC2T2RC2T2
+PASS: gdb.cp/demangle.exp: hp: g__FcRP1cRPC1cT2
+PASS: gdb.cp/demangle.exp: hp: g__FdCdT1
+PASS: gdb.cp/demangle.exp: hp: g__FfCfT1
+PASS: gdb.cp/demangle.exp: hp: g__FlClT1
+PASS: gdb.cp/demangle.exp: hp: g__FiCiT1
+PASS: gdb.cp/demangle.exp: hp: g__FsCsT1
+PASS: gdb.cp/demangle.exp: hp: g__FcCcT1
+PASS: gdb.cp/demangle.exp: hp: f__FicdPc
+PASS: gdb.cp/demangle.exp: hp: __nw__FUi
+PASS: gdb.cp/demangle.exp: hp: __ct__Q3_2T11a1bSFi
+PASS: gdb.cp/demangle.exp: hp: __dt__Q3_2T11a1bSFi
+PASS: gdb.cp/demangle.exp: hp: put__Q3_2T11a1bSFi
+PASS: gdb.cp/demangle.exp: hp: get__Q2_2T11aSFv
+PASS: gdb.cp/demangle.exp: hp: put__2T1SFi
+PASS: gdb.cp/demangle.exp: hp: put__Q5_2T11a1b1c1dSFi
+PASS: gdb.cp/demangle.exp: hp: get__Q4_2T11a1b1cSFv
+PASS: gdb.cp/demangle.exp: hp: put__Q2_2T11aSFi
+PASS: gdb.cp/demangle.exp: hp: put__Q4_2T11a1b1cSFi
+PASS: gdb.cp/demangle.exp: hp: get__Q3_2T11a1bSFv
+PASS: gdb.cp/demangle.exp: hp: get__2T1SFv
+PASS: gdb.cp/demangle.exp: hp: get__Q5_2T11a1b1c1dSFv
+PASS: gdb.cp/demangle.exp: hp: bar__3fooFPv
+PASS: gdb.cp/demangle.exp: hp: bar__3fooFPCv
+PASS: gdb.cp/demangle.exp: hp: bar__3fooCFPv
+PASS: gdb.cp/demangle.exp: hp: bar__3fooCFPCv
+PASS: gdb.cp/demangle.exp: hp: __eq__3fooFR3foo
+PASS: gdb.cp/demangle.exp: hp: __eq__3fooFRC3foo
+PASS: gdb.cp/demangle.exp: hp: __eq__3fooCFR3foo
+PASS: gdb.cp/demangle.exp: hp: __eq__3fooCFRC3foo
+PASS: gdb.cp/demangle.exp: hp: bar__3fooFiT16FooBar
+PASS: gdb.cp/demangle.exp: hp: bar__3fooFPiN51PdN37PcN211T1iN215
+PASS: gdb.cp/demangle.exp: hp: __dt__2T5XTPFiPPdPv_i__Fv
+PASS: gdb.cp/demangle.exp: hp: __ct__1cFi
+PASS: gdb.cp/demangle.exp: hp: __dt__2T5XTi__Fv
+PASS: gdb.cp/demangle.exp: hp: __dt__2T5XTc__Fv
+PASS: gdb.cp/demangle.exp: hp: __ct__2T2Fi
+PASS: gdb.cp/demangle.exp: hp: __dt__2T1Fv
+PASS: gdb.cp/demangle.exp: hp: __dt__2T5XT1x__Fv
+PASS: gdb.cp/demangle.exp: hp: __dt__2T5XTPFcPv_i__Fv
+PASS: gdb.cp/demangle.exp: hp: __ct__2T5XTPFiPPdPv_i__Fi
+PASS: gdb.cp/demangle.exp: hp: __dl__2T5XT1x__SFPv
+PASS: gdb.cp/demangle.exp: hp: X__2T5XT1x
+PASS: gdb.cp/demangle.exp: hp: __ct__2T5XTi__Fi
+PASS: gdb.cp/demangle.exp: hp: __ct__2T5XTc__Fi
+PASS: gdb.cp/demangle.exp: hp: __dl__2T5XTPFcPv_i__SFPv
+PASS: gdb.cp/demangle.exp: hp: X__2T5XTPFcPv_i
+PASS: gdb.cp/demangle.exp: hp: __ct__2T5XT1x__Fi
+PASS: gdb.cp/demangle.exp: hp: __dl__2T5XTPFiPPdPv_i__SFPv
+PASS: gdb.cp/demangle.exp: hp: X__2T5XTPFiPPdPv_i
+PASS: gdb.cp/demangle.exp: hp: __dl__2T5XTi__SFPv
+PASS: gdb.cp/demangle.exp: hp: __dl__2T5XTc__SFPv
+PASS: gdb.cp/demangle.exp: hp: X__2T5XTc
+PASS: gdb.cp/demangle.exp: hp: X__2T5XTi
+PASS: gdb.cp/demangle.exp: hp: __ct__2T5XTPFcPv_i__Fi
+PASS: gdb.cp/demangle.exp: hp: __dt__2T1XTc__Fv
+PASS: gdb.cp/demangle.exp: hp: __dt__2T1XT1t__Fv
+PASS: gdb.cp/demangle.exp: hp: __dl__2T1XT1t__SFPv
+PASS: gdb.cp/demangle.exp: hp: __ct__2T1XTc__Fi
+PASS: gdb.cp/demangle.exp: hp: __ct__2T1XTc__Fv
+PASS: gdb.cp/demangle.exp: hp: __ct__2T1XT1t__Fi
+PASS: gdb.cp/demangle.exp: hp: __ct__2T1XT1t__Fv
+PASS: gdb.cp/demangle.exp: hp: __dl__2T1XTc__SFPv
+PASS: gdb.cp/demangle.exp: hp: elem__6vectorXTd__Fi
+PASS: gdb.cp/demangle.exp: hp: elem__6vectorXTi__Fi
+PASS: gdb.cp/demangle.exp: hp: __ct__6vectorXTd__Fi
+PASS: gdb.cp/demangle.exp: hp: __ct__6vectorXTi__Fi
+PASS: gdb.cp/demangle.exp: hp: __ct__9DListNodeXTR6RLabel__FR6RLabelP9DListNodeXTR6RLabel_T2
+PASS: gdb.cp/demangle.exp: hp: elem__6vectorXTiUP34__Fi
+PASS: gdb.cp/demangle.exp: hp: elem__6vectorXUP2701Td__Fi
+PASS: gdb.cp/demangle.exp: hp: elem__6vectorXTiSP334__Fi
+PASS: gdb.cp/demangle.exp: hp: elem__6vectorXTiSN67__Fi
+PASS: gdb.cp/demangle.exp: hp: elem__6vectorXTiSM__SCFPPd
+PASS: gdb.cp/demangle.exp: hp: elem__6vectorXTiSN67UP4000TRs__Fi
+PASS: gdb.cp/demangle.exp: hp: elem__6vectorXTiSN67TRdTFPv_i__Fi
+PASS: gdb.cp/demangle.exp: hp: X__6vectorXTiSN67TdTPvUP5TRs
+PASS: gdb.cp/demangle.exp: hp: elem__6vectorXTiA3foo__Fi
+PASS: gdb.cp/demangle.exp: hp: elem__6vectorXTiA3fooTPvA5Label__FiPPvT2
+PASS: gdb.cp/demangle.exp: hp: elem__6vectorXTiSN42A3foo__Fi
+PASS: gdb.cp/demangle.exp: hp: __ct__2T5XTPFcPv_i__Fi_2
+PASS: gdb.cp/demangle.exp: hp: __ct__2T5XTPFcPv_i__Fi_19
+PASS: gdb.cp/demangle.exp: hp: f__FicdPcPFci_v_34
+PASS: gdb.cp/demangle.exp: hp: spec__13Spec<%1,%1.*>XTiTPi_FPi
+PASS: gdb.cp/demangle.exp: hp: spec__16Spec<%1,%1.&,%1>XTiTRiTi_FPi
+PASS: gdb.cp/demangle.exp: hp: add__XTc_FcT1
+PASS: gdb.cp/demangle.exp: hp: add__XTcSP9A5label_FcPPlT1
+PASS: gdb.cp/demangle.exp: hp: add__XTPfTFPd_f_FcT1
+PASS: gdb.cp/demangle.exp: hp: unLink__12basic_stringXTcT18string_char_traitsXTc_T9allocator_Fv
+PASS: gdb.cp/demangle.exp: hp: _Utf390_1__1_9223372036854775807__9223372036854775
+Running ./gdb.cp/derivation.exp ...
+PASS: gdb.cp/derivation.exp: before run: ptype A::value_type
+PASS: gdb.cp/derivation.exp: before run: whatis A::value_type
+PASS: gdb.cp/derivation.exp: before run: p (A::value_type) 0
+PASS: gdb.cp/derivation.exp: before run: ptype D::value_type
+PASS: gdb.cp/derivation.exp: before run: whatis D::value_type
+PASS: gdb.cp/derivation.exp: before run: p (D::value_type) 0
+PASS: gdb.cp/derivation.exp: before run: ptype E::value_type
+PASS: gdb.cp/derivation.exp: before run: whatis E::value_type
+PASS: gdb.cp/derivation.exp: before run: p (E::value_type) 0
+PASS: gdb.cp/derivation.exp: before run: ptype F::value_type
+PASS: gdb.cp/derivation.exp: before run: whatis F::value_type
+PASS: gdb.cp/derivation.exp: before run: p (F::value_type) 0
+PASS: gdb.cp/derivation.exp: before run: ptype A2::value_type
+PASS: gdb.cp/derivation.exp: before run: whatis A2::value_type
+PASS: gdb.cp/derivation.exp: before run: p (A2::value_type) 0
+PASS: gdb.cp/derivation.exp: before run: ptype D2::value_type
+PASS: gdb.cp/derivation.exp: before run: whatis D2::value_type
+PASS: gdb.cp/derivation.exp: before run: p (D2::value_type) 0
+PASS: gdb.cp/derivation.exp: before run: ptype Z::value_type
+PASS: gdb.cp/derivation.exp: before run: whatis Z::value_type
+PASS: gdb.cp/derivation.exp: before run: p (Z::value_type) 0
+PASS: gdb.cp/derivation.exp: before run: ptype ZZ::value_type
+PASS: gdb.cp/derivation.exp: before run: whatis ZZ::value_type
+PASS: gdb.cp/derivation.exp: before run: p (ZZ::value_type) 0
+PASS: gdb.cp/derivation.exp: at marker1: ptype A::value_type
+PASS: gdb.cp/derivation.exp: at marker1: whatis A::value_type
+PASS: gdb.cp/derivation.exp: at marker1: p (A::value_type) 0
+PASS: gdb.cp/derivation.exp: at marker1: ptype D::value_type
+PASS: gdb.cp/derivation.exp: at marker1: whatis D::value_type
+PASS: gdb.cp/derivation.exp: at marker1: p (D::value_type) 0
+PASS: gdb.cp/derivation.exp: at marker1: ptype A2::value_type
+PASS: gdb.cp/derivation.exp: at marker1: whatis A2::value_type
+PASS: gdb.cp/derivation.exp: at marker1: p (A2::value_type) 0
+PASS: gdb.cp/derivation.exp: at marker1: ptype D2::value_type
+PASS: gdb.cp/derivation.exp: at marker1: whatis D2::value_type
+PASS: gdb.cp/derivation.exp: at marker1: p (D2::value_type) 0
+PASS: gdb.cp/derivation.exp: up from marker1
+PASS: gdb.cp/derivation.exp: print value of a_instance
+PASS: gdb.cp/derivation.exp: ptype a_instance
+PASS: gdb.cp/derivation.exp: print value of d_instance
+PASS: gdb.cp/derivation.exp: ptype d_instance
+PASS: gdb.cp/derivation.exp: print value of e_instance
+PASS: gdb.cp/derivation.exp: ptype e_instance
+PASS: gdb.cp/derivation.exp: print value of f_instance
+PASS: gdb.cp/derivation.exp: ptype f_instance
+PASS: gdb.cp/derivation.exp: ptype g_instance
+PASS: gdb.cp/derivation.exp: print value of d_instance.a
+PASS: gdb.cp/derivation.exp: print value of d_instance.aa
+PASS: gdb.cp/derivation.exp: print value of d_instance.b
+PASS: gdb.cp/derivation.exp: print value of d_instance.bb
+PASS: gdb.cp/derivation.exp: print value of d_instance.c
+PASS: gdb.cp/derivation.exp: print value of d_instance.cc
+PASS: gdb.cp/derivation.exp: print value of d_instance.d
+PASS: gdb.cp/derivation.exp: print value of d_instance.dd
+PASS: gdb.cp/derivation.exp: print value of g_instance.a
+PASS: gdb.cp/derivation.exp: print value of g_instance.b
+PASS: gdb.cp/derivation.exp: print value of g_instance.c
+PASS: gdb.cp/derivation.exp: print value of g_instance.afoo()
+PASS: gdb.cp/derivation.exp: re-selected 'main' frame after inferior call
+PASS: gdb.cp/derivation.exp: print value of g_instance.bfoo()
+PASS: gdb.cp/derivation.exp: print value of g_instance.cfoo()
+PASS: gdb.cp/derivation.exp: whatis c_instance.c
+PASS: gdb.cp/derivation.exp: ptype c_instance.c
+PASS: gdb.cp/derivation.exp: whatis g_instance.g
+PASS: gdb.cp/derivation.exp: ptype g_instance.g
+PASS: gdb.cp/derivation.exp: whatis a_instance.a
+PASS: gdb.cp/derivation.exp: ptype a_instance.a
+PASS: gdb.cp/derivation.exp: p (A::value_type) 0
+PASS: gdb.cp/derivation.exp: whatis b_instance.b
+PASS: gdb.cp/derivation.exp: ptype b_instance.b
+PASS: gdb.cp/derivation.exp: whatis d_instance.d
+PASS: gdb.cp/derivation.exp: ptype d_instance.d
+PASS: gdb.cp/derivation.exp: p (D::value_type) 0
+PASS: gdb.cp/derivation.exp: whatis e_instance.e
+PASS: gdb.cp/derivation.exp: ptype e_instance.e
+PASS: gdb.cp/derivation.exp: p (E::value_type) 0
+PASS: gdb.cp/derivation.exp: whatis f_instance.f
+PASS: gdb.cp/derivation.exp: ptype f_instance.f
+PASS: gdb.cp/derivation.exp: p (F::value_type) 0
+PASS: gdb.cp/derivation.exp: whatis z_instance.z
+PASS: gdb.cp/derivation.exp: ptype z_instance.z
+PASS: gdb.cp/derivation.exp: p (Z::value_type) 0
+PASS: gdb.cp/derivation.exp: whatis zz_instance.zz
+PASS: gdb.cp/derivation.exp: ptype zz_instance.zz
+PASS: gdb.cp/derivation.exp: p (ZZ::value_type) 0
+PASS: gdb.cp/derivation.exp: ptype vderived
+PASS: gdb.cp/derivation.exp: print vderived
+PASS: gdb.cp/derivation.exp: ptype N::value_type
+PASS: gdb.cp/derivation.exp: ptype N::Derived::value_type
+PASS: gdb.cp/derivation.exp: ptype value_type
+Running ./gdb.cp/destrprint.exp ...
+PASS: gdb.cp/destrprint.exp: continue to breakpoint: Break here
+PASS: gdb.cp/destrprint.exp: go up to ~Derived
+PASS: gdb.cp/destrprint.exp: set print object on
+PASS: gdb.cp/destrprint.exp: print *this with print object = on
+PASS: gdb.cp/destrprint.exp: set print object off
+PASS: gdb.cp/destrprint.exp: print *this with print object = off
+Running ./gdb.cp/dispcxx.exp ...
+PASS: gdb.cp/dispcxx.exp: continue to breakpoint: here
+PASS: gdb.cp/dispcxx.exp: display k
+Running ./gdb.cp/exception.exp ...
+PASS: gdb.cp/exception.exp: catch catch (before inferior run)
+PASS: gdb.cp/exception.exp: catch throw (before inferior run)
+PASS: gdb.cp/exception.exp: info breakpoints (before inferior run)
+PASS: gdb.cp/exception.exp: Set temporary breakpoint at main
+PASS: gdb.cp/exception.exp: Run to main
+PASS: gdb.cp/exception.exp: info breakpoints (after inferior run)
+PASS: gdb.cp/exception.exp: break catcher
+PASS: gdb.cp/exception.exp: continue to first throw
+PASS: gdb.cp/exception.exp: backtrace after first throw
+PASS: gdb.cp/exception.exp: continue to first catch
+PASS: gdb.cp/exception.exp: backtrace after first catch
+PASS: gdb.cp/exception.exp: continue to catcher for the first time
+PASS: gdb.cp/exception.exp: continue to second throw
+PASS: gdb.cp/exception.exp: backtrace after second throw
+PASS: gdb.cp/exception.exp: continue to second catch
+PASS: gdb.cp/exception.exp: backtrace after second catch
+PASS: gdb.cp/exception.exp: continue to catcher for the second time
+Running ./gdb.cp/expand-psymtabs-cxx.exp ...
+PASS: gdb.cp/expand-psymtabs-cxx.exp: set language c++
+PASS: gdb.cp/expand-psymtabs-cxx.exp: before expand
+PASS: gdb.cp/expand-psymtabs-cxx.exp: force expand
+PASS: gdb.cp/expand-psymtabs-cxx.exp: after expand
+Running ./gdb.cp/expand-sals.exp ...
+PASS: gdb.cp/expand-sals.exp: continue to breakpoint: func
+PASS: gdb.cp/expand-sals.exp: up
+PASS: gdb.cp/expand-sals.exp: break
+PASS: gdb.cp/expand-sals.exp: continue to breakpoint: caller
+PASS: gdb.cp/expand-sals.exp: bt from A
+PASS: gdb.cp/expand-sals.exp: continue to breakpoint: next caller func
+Running ./gdb.cp/extern-c.exp ...
+PASS: gdb.cp/extern-c.exp: setting breakpoint at c_func
+PASS: gdb.cp/extern-c.exp: continue to breakpoint: c_func
+PASS: gdb.cp/extern-c.exp: initialize counter
+PASS: gdb.cp/extern-c.exp: rbreak c_funcs
+PASS: gdb.cp/extern-c.exp: command details for multiple breakpoints
+PASS: gdb.cp/extern-c.exp: set commands on multiple breakpoints
+PASS: gdb.cp/extern-c.exp: continue to breakpoint: c_funcs_1
+PASS: gdb.cp/extern-c.exp: verify counter at first breakpoint
+PASS: gdb.cp/extern-c.exp: continue to breakpoint: c_funcs_2
+PASS: gdb.cp/extern-c.exp: verify counter at second breakpoint
+Running ./gdb.cp/formatted-ref.exp ...
+PASS: gdb.cp/formatted-ref.exp: print/x s
+PASS: gdb.cp/formatted-ref.exp: print/x e
+PASS: gdb.cp/formatted-ref.exp: print/x i
+PASS: gdb.cp/formatted-ref.exp: print/x &s
+PASS: gdb.cp/formatted-ref.exp: print/x &e
+PASS: gdb.cp/formatted-ref.exp: print/x &i
+PASS: gdb.cp/formatted-ref.exp: print/x *(&(&s))
+PASS: gdb.cp/formatted-ref.exp: print/x *(&(&i))
+PASS: gdb.cp/formatted-ref.exp: print/x *(&(&e))
+PASS: gdb.cp/formatted-ref.exp: print s.x == 13
+Running ./gdb.cp/fpointer.exp ...
+PASS: gdb.cp/fpointer.exp: p p1()
+PASS: gdb.cp/fpointer.exp: p p2()
+PASS: gdb.cp/fpointer.exp: p p[0]()
+PASS: gdb.cp/fpointer.exp: p p[1]()
+PASS: gdb.cp/fpointer.exp: p p3('a')
+PASS: gdb.cp/fpointer.exp: p p4(1)
+Running ./gdb.cp/gdb1355.exp ...
+PASS: gdb.cp/gdb1355.exp: ptype s1
+PASS: gdb.cp/gdb1355.exp: print s1
+Running ./gdb.cp/gdb2384.exp ...
+PASS: gdb.cp/gdb2384.exp: continue to breakpoint: set breakpoint here
+PASS: gdb.cp/gdb2384.exp: print d1.meth ()
+PASS: gdb.cp/gdb2384.exp: continue to breakpoint: set breakpoint here
+PASS: gdb.cp/gdb2384.exp: gdb2384
+PASS: gdb.cp/gdb2384.exp: continue to breakpoint: set breakpoint here (second)
+PASS: gdb.cp/gdb2384.exp: print d2.meth()
+PASS: gdb.cp/gdb2384.exp: continue to breakpoint: set breakpoint here (second)
+PASS: gdb.cp/gdb2384.exp: gdb2384 (second)
+Running ./gdb.cp/gdb2495.exp ...
+PASS: gdb.cp/gdb2495.exp: p exceptions.no_throw_function()
+PASS: gdb.cp/gdb2495.exp: p exceptions.throw_function_with_handler()
+FAIL: gdb.cp/gdb2495.exp: Call a function that raises an exception without a handler.
+FAIL: gdb.cp/gdb2495.exp: bt after returning from a popped frame
+PASS: gdb.cp/gdb2495.exp: info breakpoints
+PASS: gdb.cp/gdb2495.exp: set unwinn-on-terminating-exception off
+PASS: gdb.cp/gdb2495.exp: Turn off unwind on terminating exception flag
+PASS: gdb.cp/gdb2495.exp: Call a function that raises an exception with unwinding off..
+PASS: gdb.cp/gdb2495.exp: set unwindonsignal on
+PASS: gdb.cp/gdb2495.exp: Turn on unwind on signal
+PASS: gdb.cp/gdb2495.exp: p exceptions.raise_signal(1)
+PASS: gdb.cp/gdb2495.exp: set unwindonsignal off
+PASS: gdb.cp/gdb2495.exp: Turn off unwind on signal
+PASS: gdb.cp/gdb2495.exp: p exceptions.raise_signal(1)
+Running ./gdb.cp/hang.exp ...
+PASS: gdb.cp/hang.exp: doesn't overwrite struct type
+PASS: gdb.cp/hang.exp: doesn't corrupt cv_type chain
+Running ./gdb.cp/infcall-dlopen.exp ...
+PASS: gdb.cp/infcall-dlopen.exp: test 0
+PASS: gdb.cp/infcall-dlopen.exp: test 0 stub 1
+PASS: gdb.cp/infcall-dlopen.exp: test 0 stub 2
+PASS: gdb.cp/infcall-dlopen.exp: test 1
+PASS: gdb.cp/infcall-dlopen.exp: test 1 stub 1
+PASS: gdb.cp/infcall-dlopen.exp: test 1 stub 2
+PASS: gdb.cp/infcall-dlopen.exp: test 2
+PASS: gdb.cp/infcall-dlopen.exp: test 2 stub 1
+PASS: gdb.cp/infcall-dlopen.exp: test 2 stub 2
+PASS: gdb.cp/infcall-dlopen.exp: test 3
+PASS: gdb.cp/infcall-dlopen.exp: test 3 stub 1
+PASS: gdb.cp/infcall-dlopen.exp: test 3 stub 2
+PASS: gdb.cp/infcall-dlopen.exp: test 4
+PASS: gdb.cp/infcall-dlopen.exp: test 4 stub 1
+PASS: gdb.cp/infcall-dlopen.exp: test 4 stub 2
+PASS: gdb.cp/infcall-dlopen.exp: test 5
+PASS: gdb.cp/infcall-dlopen.exp: test 5 stub 1
+PASS: gdb.cp/infcall-dlopen.exp: test 5 stub 2
+PASS: gdb.cp/infcall-dlopen.exp: test 6
+PASS: gdb.cp/infcall-dlopen.exp: test 6 stub 1
+PASS: gdb.cp/infcall-dlopen.exp: test 6 stub 2
+PASS: gdb.cp/infcall-dlopen.exp: test 7
+PASS: gdb.cp/infcall-dlopen.exp: test 7 stub 1
+PASS: gdb.cp/infcall-dlopen.exp: test 7 stub 2
+PASS: gdb.cp/infcall-dlopen.exp: test 8
+PASS: gdb.cp/infcall-dlopen.exp: test 8 stub 1
+PASS: gdb.cp/infcall-dlopen.exp: test 8 stub 2
+PASS: gdb.cp/infcall-dlopen.exp: test 9
+PASS: gdb.cp/infcall-dlopen.exp: test 9 stub 1
+PASS: gdb.cp/infcall-dlopen.exp: test 9 stub 2
+Running ./gdb.cp/inherit.exp ...
+PASS: gdb.cp/inherit.exp: set width 0
+PASS: gdb.cp/inherit.exp: set language c++
+PASS: gdb.cp/inherit.exp: ptype A (FIXME)
+PASS: gdb.cp/inherit.exp: ptype class A (FIXME)
+PASS: gdb.cp/inherit.exp: ptype g_A (FIXME)
+PASS: gdb.cp/inherit.exp: ptype B
+PASS: gdb.cp/inherit.exp: ptype class B
+PASS: gdb.cp/inherit.exp: ptype g_B
+PASS: gdb.cp/inherit.exp: ptype C
+PASS: gdb.cp/inherit.exp: ptype class C
+PASS: gdb.cp/inherit.exp: ptype g_C
+PASS: gdb.cp/inherit.exp: ptype tagless struct
+PASS: gdb.cp/inherit.exp: ptype variable of type tagless struct
+PASS: gdb.cp/inherit.exp: ptype D
+PASS: gdb.cp/inherit.exp: ptype class D
+PASS: gdb.cp/inherit.exp: ptype g_D
+PASS: gdb.cp/inherit.exp: ptype E
+PASS: gdb.cp/inherit.exp: ptype class E
+PASS: gdb.cp/inherit.exp: ptype g_E
+PASS: gdb.cp/inherit.exp: ptype vA
+PASS: gdb.cp/inherit.exp: ptype class vA
+PASS: gdb.cp/inherit.exp: ptype g_vA
+PASS: gdb.cp/inherit.exp: ptype vB
+PASS: gdb.cp/inherit.exp: ptype class vB
+PASS: gdb.cp/inherit.exp: ptype g_vB
+PASS: gdb.cp/inherit.exp: ptype vC
+PASS: gdb.cp/inherit.exp: ptype class vC
+PASS: gdb.cp/inherit.exp: ptype g_vC
+PASS: gdb.cp/inherit.exp: ptype vD
+PASS: gdb.cp/inherit.exp: ptype class vD
+PASS: gdb.cp/inherit.exp: ptype g_vD
+PASS: gdb.cp/inherit.exp: ptype vE
+PASS: gdb.cp/inherit.exp: ptype class vE
+PASS: gdb.cp/inherit.exp: ptype g_vE
+PASS: gdb.cp/inherit.exp: print g_A.A::a
+PASS: gdb.cp/inherit.exp: print g_A.A::x
+PASS: gdb.cp/inherit.exp: print g_A.a
+PASS: gdb.cp/inherit.exp: print g_A.x
+PASS: gdb.cp/inherit.exp: print g_B.A::a
+PASS: gdb.cp/inherit.exp: print g_B.A::x
+PASS: gdb.cp/inherit.exp: print g_B.B::b
+PASS: gdb.cp/inherit.exp: print g_B.B::x
+PASS: gdb.cp/inherit.exp: print g_B.a
+PASS: gdb.cp/inherit.exp: print g_B.b
+PASS: gdb.cp/inherit.exp: print g_B.x
+PASS: gdb.cp/inherit.exp: print g_C.A::a
+PASS: gdb.cp/inherit.exp: print g_C.A::x
+PASS: gdb.cp/inherit.exp: print g_C.C::c
+PASS: gdb.cp/inherit.exp: print g_C.C::x
+PASS: gdb.cp/inherit.exp: print g_C.a
+PASS: gdb.cp/inherit.exp: print g_C.c
+PASS: gdb.cp/inherit.exp: print g_C.x
+PASS: gdb.cp/inherit.exp: print g_A
+PASS: gdb.cp/inherit.exp: print g_B
+PASS: gdb.cp/inherit.exp: print g_C
+PASS: gdb.cp/inherit.exp: print g_A.A::a
+PASS: gdb.cp/inherit.exp: print g_A.A::x
+PASS: gdb.cp/inherit.exp: print g_B.A::a
+PASS: gdb.cp/inherit.exp: print g_B.A::x
+PASS: gdb.cp/inherit.exp: print g_B.B::b
+PASS: gdb.cp/inherit.exp: print g_B.B::x
+PASS: gdb.cp/inherit.exp: print g_C.A::a
+PASS: gdb.cp/inherit.exp: print g_C.A::x
+PASS: gdb.cp/inherit.exp: print g_C.C::c
+PASS: gdb.cp/inherit.exp: print g_C.C::x
+PASS: gdb.cp/inherit.exp: print g_D.A::a
+PASS: gdb.cp/inherit.exp: print g_D.C::a
+PASS: gdb.cp/inherit.exp: print g_D.B::a
+PASS: gdb.cp/inherit.exp: print g_D.A::x
+PASS: gdb.cp/inherit.exp: print g_D.B::b
+PASS: gdb.cp/inherit.exp: print g_D.B::x
+PASS: gdb.cp/inherit.exp: print g_D.C::c
+PASS: gdb.cp/inherit.exp: print g_D.C::x
+PASS: gdb.cp/inherit.exp: print g_D.D::d
+PASS: gdb.cp/inherit.exp: print g_D.D::x
+PASS: gdb.cp/inherit.exp: print g_E.A::a
+PASS: gdb.cp/inherit.exp: print g_E.A::x
+PASS: gdb.cp/inherit.exp: print g_E.B::b
+PASS: gdb.cp/inherit.exp: print g_E.B::x
+PASS: gdb.cp/inherit.exp: print g_E.C::c
+PASS: gdb.cp/inherit.exp: print g_E.C::x
+PASS: gdb.cp/inherit.exp: print g_E.D::d
+PASS: gdb.cp/inherit.exp: print g_E.D::x
+PASS: gdb.cp/inherit.exp: print g_E.E::e
+PASS: gdb.cp/inherit.exp: print g_E.E::x
+PASS: gdb.cp/inherit.exp: ptype g_D.b
+PASS: gdb.cp/inherit.exp: ptype g_D.c
+PASS: gdb.cp/inherit.exp: ptype g_D.d
+PASS: gdb.cp/inherit.exp: ptype g_A.A::a
+PASS: gdb.cp/inherit.exp: ptype g_A.A::x
+PASS: gdb.cp/inherit.exp: ptype g_B.A::a
+PASS: gdb.cp/inherit.exp: ptype g_B.A::x
+PASS: gdb.cp/inherit.exp: ptype g_B.B::b
+PASS: gdb.cp/inherit.exp: ptype g_B.B::x
+PASS: gdb.cp/inherit.exp: ptype g_C.A::a
+PASS: gdb.cp/inherit.exp: ptype g_C.A::x
+PASS: gdb.cp/inherit.exp: ptype g_C.C::c
+PASS: gdb.cp/inherit.exp: ptype g_C.C::x
+PASS: gdb.cp/inherit.exp: ptype g_D.A::a
+PASS: gdb.cp/inherit.exp: ptype g_D.A::x
+PASS: gdb.cp/inherit.exp: ptype g_D.B::b
+PASS: gdb.cp/inherit.exp: ptype g_D.B::x
+PASS: gdb.cp/inherit.exp: ptype g_D.C::c
+PASS: gdb.cp/inherit.exp: ptype g_D.C::x
+PASS: gdb.cp/inherit.exp: ptype g_D.D::d
+PASS: gdb.cp/inherit.exp: ptype g_D.D::x
+PASS: gdb.cp/inherit.exp: ptype g_E.A::a
+PASS: gdb.cp/inherit.exp: ptype g_E.A::x
+PASS: gdb.cp/inherit.exp: ptype g_E.B::b
+PASS: gdb.cp/inherit.exp: ptype g_E.B::x
+PASS: gdb.cp/inherit.exp: ptype g_E.C::c
+PASS: gdb.cp/inherit.exp: ptype g_E.C::x
+PASS: gdb.cp/inherit.exp: ptype g_E.D::d
+PASS: gdb.cp/inherit.exp: ptype g_E.D::x
+PASS: gdb.cp/inherit.exp: ptype g_E.E::e
+PASS: gdb.cp/inherit.exp: ptype g_E.E::x
+PASS: gdb.cp/inherit.exp: print g_D
+PASS: gdb.cp/inherit.exp: print g_E
+PASS: gdb.cp/inherit.exp: print anonymous union member
+PASS: gdb.cp/inherit.exp: print variable of type anonymous union
+PASS: gdb.cp/inherit.exp: print type of anonymous union
+PASS: gdb.cp/inherit.exp: print g_vA.vA::va
+PASS: gdb.cp/inherit.exp: print g_vA.vA::vx
+PASS: gdb.cp/inherit.exp: print g_vA.va
+PASS: gdb.cp/inherit.exp: print g_vA.vx
+PASS: gdb.cp/inherit.exp: print g_vB.vA::va
+PASS: gdb.cp/inherit.exp: print g_vB.vA::vx
+PASS: gdb.cp/inherit.exp: print g_vB.vB::vb
+PASS: gdb.cp/inherit.exp: print g_vB.vB::vx
+PASS: gdb.cp/inherit.exp: print g_vB.va
+PASS: gdb.cp/inherit.exp: print g_vB.vb
+PASS: gdb.cp/inherit.exp: print g_vB.vx
+PASS: gdb.cp/inherit.exp: print g_vC.vA::va
+PASS: gdb.cp/inherit.exp: print g_vC.vA::vx
+PASS: gdb.cp/inherit.exp: print g_vC.vC::vc
+PASS: gdb.cp/inherit.exp: print g_vC.vC::vx
+PASS: gdb.cp/inherit.exp: print g_vC.va
+PASS: gdb.cp/inherit.exp: print g_vC.vc
+PASS: gdb.cp/inherit.exp: print g_vC.vx
+PASS: gdb.cp/inherit.exp: print g_vA
+PASS: gdb.cp/inherit.exp: print g_vB (FIXME v3 vtbl ptr)
+PASS: gdb.cp/inherit.exp: print g_vC (FIXME v3 vtbl ptr)
+PASS: gdb.cp/inherit.exp: print g_vD.vA::va
+PASS: gdb.cp/inherit.exp: print g_vD.vA::vx
+PASS: gdb.cp/inherit.exp: print g_vD.vB::vb
+PASS: gdb.cp/inherit.exp: print g_vD.vB::vx
+PASS: gdb.cp/inherit.exp: print g_vD.vC::vc
+PASS: gdb.cp/inherit.exp: print g_vD.vC::vx
+PASS: gdb.cp/inherit.exp: print g_vD.vD::vd
+PASS: gdb.cp/inherit.exp: print g_vD.vD::vx
+PASS: gdb.cp/inherit.exp: print g_vE.vA::va
+PASS: gdb.cp/inherit.exp: print g_vE.vA::vx
+PASS: gdb.cp/inherit.exp: print g_vE.vB::vb
+PASS: gdb.cp/inherit.exp: print g_vE.vB::vx
+PASS: gdb.cp/inherit.exp: print g_vE.vC::vc
+PASS: gdb.cp/inherit.exp: print g_vE.vC::vx
+PASS: gdb.cp/inherit.exp: print g_vE.vD::vd
+PASS: gdb.cp/inherit.exp: print g_vE.vD::vx
+PASS: gdb.cp/inherit.exp: print g_vE.vE::ve
+PASS: gdb.cp/inherit.exp: print g_vE.vE::vx
+PASS: gdb.cp/inherit.exp: print g_vD (FIXME v3 vtbl ptr)
+PASS: gdb.cp/inherit.exp: print g_vE (FIXME v3 vtbl ptr)
+Running ./gdb.cp/koenig.exp ...
+PASS: gdb.cp/koenig.exp: p first(c)
+PASS: gdb.cp/koenig.exp: p second(0,0,c,0,0)
+PASS: gdb.cp/koenig.exp: p entry (c)
+PASS: gdb.cp/koenig.exp: p first(0,c)
+PASS: gdb.cp/koenig.exp: p first(b.c)
+PASS: gdb.cp/koenig.exp: p foo(eo)
+PASS: gdb.cp/koenig.exp: p foo(eo, eo)
+PASS: gdb.cp/koenig.exp: p foo(eo, eo, 1)
+PASS: gdb.cp/koenig.exp: p foo(fo, eo)
+PASS: gdb.cp/koenig.exp: p foo(1 ,fo, eo)
+PASS: gdb.cp/koenig.exp: p foo(go, fo, eo)
+PASS: gdb.cp/koenig.exp: p fake(eo)
+PASS: gdb.cp/koenig.exp: p foo (fake)
+PASS: gdb.cp/koenig.exp: p foo(io)
+PASS: gdb.cp/koenig.exp: p foo(ix)
+PASS: gdb.cp/koenig.exp: p foo(ju)
+PASS: gdb.cp/koenig.exp: p foo(js)
+PASS: gdb.cp/koenig.exp: p foo(je)
+XFAIL: gdb.cp/koenig.exp: p foo(jab)
+PASS: gdb.cp/koenig.exp: p foo(jap)
+PASS: gdb.cp/koenig.exp: p foo(japp)
+PASS: gdb.cp/koenig.exp: p foo(jca)
+PASS: gdb.cp/koenig.exp: p foo(ko,1)
+PASS: gdb.cp/koenig.exp: p foo(ko,1.0f)
+XFAIL: gdb.cp/koenig.exp: p bar(ko,1)
+PASS: gdb.cp/koenig.exp: p foo(labo)
+PASS: gdb.cp/koenig.exp: p ma.foo('a')
+PASS: gdb.cp/koenig.exp: p foo(ma,'a')
+PASS: gdb.cp/koenig.exp: p M::N::foo(ma,'a')
+PASS: gdb.cp/koenig.exp: p M::FAKE::foo(ma,'a')
+PASS: gdb.cp/koenig.exp: p M::N::fake(ma,'a')
+PASS: gdb.cp/koenig.exp: p M::bar('a')
+PASS: gdb.cp/koenig.exp: p M::N::bar('a')
+PASS: gdb.cp/koenig.exp: p foo(ttoa, 'a')
+PASS: gdb.cp/koenig.exp: p foo (p_union)
+PASS: gdb.cp/koenig.exp: p q == 5
+PASS: gdb.cp/koenig.exp: p q == 5.0f
+PASS: gdb.cp/koenig.exp: p q != 5
+PASS: gdb.cp/koenig.exp: p q != 5.0f
+PASS: gdb.cp/koenig.exp: p q + 5.0f
+PASS: gdb.cp/koenig.exp: p q + 5
+PASS: gdb.cp/koenig.exp: p ++q
+PASS: gdb.cp/koenig.exp: p r.rfoo()
+PASS: gdb.cp/koenig.exp: continue to breakpoint: marker1
+PASS: gdb.cp/koenig.exp: p rfoo()
+PASS: gdb.cp/koenig.exp: p this->rfoo()
+Running ./gdb.cp/local.exp ...
+PASS: gdb.cp/local.exp: up from marker1
+PASS: gdb.cp/local.exp: ptype l
+PASS: gdb.cp/local.exp: ptype Local
+PASS: gdb.cp/local.exp: break marker2
+PASS: gdb.cp/local.exp: continuing to marker2
+PASS: gdb.cp/local.exp: up from marker2
+PASS: gdb.cp/local.exp: Local out of scope
+PASS: gdb.cp/local.exp: ptype InnerLocal (pattern 1)
+PASS: gdb.cp/local.exp: ptype NestedInnerLocal
+KFAIL: gdb.cp/local.exp: ptype InnerLocal::NestedInnerLocal (PRMS: gdb/482)
+Running ./gdb.cp/maint.exp ...
+PASS: gdb.cp/maint.exp: help maintenance cplus
+PASS: gdb.cp/maint.exp: help maint cp
+PASS: gdb.cp/maint.exp: maint cp
+PASS: gdb.cp/maint.exp: help maint cp first_component
+PASS: gdb.cp/maint.exp: help maint cp namespace
+PASS: gdb.cp/maint.exp: set complaints 1000
+PASS: gdb.cp/maint.exp: maint cp first_component foo
+PASS: gdb.cp/maint.exp: maint cp first_component operator<<
+PASS: gdb.cp/maint.exp: maint cp first_component operator>>
+PASS: gdb.cp/maint.exp: maint cp first_component operator ->
+PASS: gdb.cp/maint.exp: maint cp first_component operator()
+PASS: gdb.cp/maint.exp: maint cp first_component operator>
+PASS: gdb.cp/maint.exp: maint cp first_component operator<
+PASS: gdb.cp/maint.exp: maint cp first_component operator ->
+PASS: gdb.cp/maint.exp: maint cp first_component operator ->
+PASS: gdb.cp/maint.exp: maint cp first_component foo()
+PASS: gdb.cp/maint.exp: maint cp first_component foo(int)
+PASS: gdb.cp/maint.exp: maint cp first_component foo(X::Y)
+PASS: gdb.cp/maint.exp: maint cp first_component foo(X::Y, A::B)
+PASS: gdb.cp/maint.exp: maint cp first_component foo(std::basic_streambuf<wchar_t,std::char_traits<wchar_t> >)
+PASS: gdb.cp/maint.exp: maint cp first_component operator>(X::Y)
+PASS: gdb.cp/maint.exp: maint cp first_component int operator<< <char>()
+PASS: gdb.cp/maint.exp: maint cp first_component T<Cooperator>
+PASS: gdb.cp/maint.exp: maint cp first_component int foo<&(operator<<(C, C))>()
+PASS: gdb.cp/maint.exp: maint cp first_component int foo<&operator<<(C, C)>()
+PASS: gdb.cp/maint.exp: maint cp first_component int foo<operator<<(C, C)>()
+PASS: gdb.cp/maint.exp: maint cp first_component foo::bar
+PASS: gdb.cp/maint.exp: maint cp first_component foo::bar::baz
+PASS: gdb.cp/maint.exp: maint cp first_component C<A>::bar
+PASS: gdb.cp/maint.exp: maint cp first_component C<std::basic_streambuf<wchar_t,std::char_traits<wchar_t> > >::bar
+PASS: gdb.cp/maint.exp: maint cp first_component foo<
+PASS: gdb.cp/maint.exp: maint cp first_component foo(
+PASS: gdb.cp/maint.exp: maint cp first_component bool operator<<char>
+PASS: gdb.cp/maint.exp: maint cp namespace
+Running ./gdb.cp/mb-ctor.exp ...
+PASS: gdb.cp/mb-ctor.exp: set-breakpoint at ctor
+PASS: gdb.cp/mb-ctor.exp: set-breakpoint at dtor
+PASS: gdb.cp/mb-ctor.exp: run to breakpoint 1 v1
+PASS: gdb.cp/mb-ctor.exp: continue to breakpoint: set breakpoint here
+PASS: gdb.cp/mb-ctor.exp: run to breakpoint 1 v2
+PASS: gdb.cp/mb-ctor.exp: continue to breakpoint: set breakpoint here
+PASS: gdb.cp/mb-ctor.exp: run to breakpoint 3 v1
+PASS: gdb.cp/mb-ctor.exp: run to breakpoint 3 v2
+PASS: gdb.cp/mb-ctor.exp: run to exit
+Running ./gdb.cp/mb-inline.exp ...
+PASS: gdb.cp/mb-inline.exp: set breakpoint
+PASS: gdb.cp/mb-inline.exp: info break
+PASS: gdb.cp/mb-inline.exp: run to breakpoint
+PASS: gdb.cp/mb-inline.exp: run to breakpoint 2
+PASS: gdb.cp/mb-inline.exp: disabling location: disable
+PASS: gdb.cp/mb-inline.exp: disabling location: run to breakpoint
+PASS: gdb.cp/mb-inline.exp: disabled breakpoint 1.2
+PASS: gdb.cp/mb-inline.exp: set multi_line_foo breakpoint
+PASS: gdb.cp/mb-inline.exp: run to multi_line_foo breakpoint 4 afn
+PASS: gdb.cp/mb-inline.exp: run to multi_line_foo breakpoint 4 bfn
+Running ./gdb.cp/mb-templates.exp ...
+PASS: gdb.cp/mb-templates.exp: initial condition: set breakpoint
+PASS: gdb.cp/mb-templates.exp: initial condition: run to breakpoint
+PASS: gdb.cp/mb-templates.exp: initial condition: run to breakpoint 2
+PASS: gdb.cp/mb-templates.exp: kill
+PASS: gdb.cp/mb-templates.exp: separate condition: set breakpoint
+PASS: gdb.cp/mb-templates.exp: separate condition: set condition
+PASS: gdb.cp/mb-templates.exp: separate condition: run to breakpoint
+PASS: gdb.cp/mb-templates.exp: separate condition: run to breakpoint 2
+PASS: gdb.cp/mb-templates.exp: disabling location: disable
+PASS: gdb.cp/mb-templates.exp: disabling location: run to breakpoint
+PASS: gdb.cp/mb-templates.exp: disabling location: enable
+PASS: gdb.cp/mb-templates.exp: disable breakpoint: disable
+PASS: gdb.cp/mb-templates.exp: disable breakpoint: run to breakpoint
+PASS: gdb.cp/mb-templates.exp: instantiation: set breakpoint
+PASS: gdb.cp/mb-templates.exp: instantiation: run to breakpoint
+PASS: gdb.cp/mb-templates.exp: instantiation: run to breakpoint 2
+PASS: gdb.cp/mb-templates.exp: set multi_line_foo breakpoint
+PASS: gdb.cp/mb-templates.exp: run to multi_line_foo breakpoint 2 <int>
+PASS: gdb.cp/mb-templates.exp: run to multi_line_foo breakpoint 2 <double>
+Running ./gdb.cp/m-data.exp ...
+PASS: gdb.cp/m-data.exp: continue to breakpoint: end of first constructors
+PASS: gdb.cp/m-data.exp: simple object, const bool
+PASS: gdb.cp/m-data.exp: simple object, const int
+PASS: gdb.cp/m-data.exp: simple object, long
+PASS: gdb.cp/m-data.exp: simple object, enum
+PASS: gdb.cp/m-data.exp: derived template object, base const bool
+PASS: gdb.cp/m-data.exp: derived template object, base const int
+PASS: gdb.cp/m-data.exp: derived template object, base long
+PASS: gdb.cp/m-data.exp: derived template object, base enum
+PASS: gdb.cp/m-data.exp: derived template object, derived enum
+PASS: gdb.cp/m-data.exp: template object, const bool
+PASS: gdb.cp/m-data.exp: template object, const int
+PASS: gdb.cp/m-data.exp: template object, long
+PASS: gdb.cp/m-data.exp: template object, base enum
+PASS: gdb.cp/m-data.exp: template object, derived enum
+PASS: gdb.cp/m-data.exp: continue to breakpoint: continue to shadow breakpoint
+PASS: gdb.cp/m-data.exp: shadowing member
+PASS: gdb.cp/m-data.exp: shadowed global variable
+Running ./gdb.cp/member-name.exp ...
+PASS: gdb.cp/member-name.exp: continue to breakpoint: continue to first breakpoint
+PASS: gdb.cp/member-name.exp: print C::x from first breakpoint
+PASS: gdb.cp/member-name.exp: print B::b from first breakpoint
+PASS: gdb.cp/member-name.exp: print inner::z from first breakpoint
+PASS: gdb.cp/member-name.exp: continue to breakpoint: continue to second breakpoint
+PASS: gdb.cp/member-name.exp: print C::x from second breakpoint
+PASS: gdb.cp/member-name.exp: print B::b from second breakpoint
+PASS: gdb.cp/member-name.exp: print inner::z from second breakpoint
+PASS: gdb.cp/member-name.exp: continue to breakpoint: continue to third breakpoint
+PASS: gdb.cp/member-name.exp: print Templ::y from third breakpoint
+Running ./gdb.cp/member-ptr.exp ...
+PASS: gdb.cp/member-ptr.exp: continue to breakpoint: continue to pmi = NULL
+PASS: gdb.cp/member-ptr.exp: ptype pmi (A::j)
+PASS: gdb.cp/member-ptr.exp: print pmi (A::j)
+PASS: gdb.cp/member-ptr.exp: print a.*pmi (A::j)
+PASS: gdb.cp/member-ptr.exp: print a_p->*pmi (A::j)
+PASS: gdb.cp/member-ptr.exp: set var pmi = &A::jj
+PASS: gdb.cp/member-ptr.exp: print pmi (A::jj)
+PASS: gdb.cp/member-ptr.exp: print a.*pmi (A::jj)
+PASS: gdb.cp/member-ptr.exp: set var pmi = &A::j
+PASS: gdb.cp/member-ptr.exp: print a.*pmi (A::j) (again)
+PASS: gdb.cp/member-ptr.exp: print a.*pmi = 33
+PASS: gdb.cp/member-ptr.exp: print a.*pmi (A::j) (33)
+PASS: gdb.cp/member-ptr.exp: print a (j = 33)
+PASS: gdb.cp/member-ptr.exp: print a_p->*pmi = 44
+PASS: gdb.cp/member-ptr.exp: print a_p->*pmi (44)
+PASS: gdb.cp/member-ptr.exp: print a (j = 44)
+PASS: gdb.cp/member-ptr.exp: ptype a.*pmi
+PASS: gdb.cp/member-ptr.exp: print *pmi
+PASS: gdb.cp/member-ptr.exp: ptype *pmi
+PASS: gdb.cp/member-ptr.exp: print (int) pmi
+PASS: gdb.cp/member-ptr.exp: print ((int) pmi) == ((char *) &a.j - (char *) &a)
+PASS: gdb.cp/member-ptr.exp: ptype diamond_pfunc_ptr
+PASS: gdb.cp/member-ptr.exp: ptype diamond.*diamond_pfunc_ptr
+PASS: gdb.cp/member-ptr.exp: print diamond.*diamond_pfunc_ptr (20)
+PASS: gdb.cp/member-ptr.exp: print (diamond.*diamond_pfunc_ptr) (20)
+PASS: gdb.cp/member-ptr.exp: print diamond.func_ptr (20)
+PASS: gdb.cp/member-ptr.exp: ptype pmf
+PASS: gdb.cp/member-ptr.exp: print pmf
+PASS: gdb.cp/member-ptr.exp: ptype pmf_p
+PASS: gdb.cp/member-ptr.exp: gdb/NNNN
+PASS: gdb.cp/member-ptr.exp: print a.*pmf
+PASS: gdb.cp/member-ptr.exp: print a_p->*pmf
+PASS: gdb.cp/member-ptr.exp: set var pmf = &A::foo
+PASS: gdb.cp/member-ptr.exp: print *pmf
+PASS: gdb.cp/member-ptr.exp: ptype *pmf
+PASS: gdb.cp/member-ptr.exp: print (a.*pmf)(3)
+PASS: gdb.cp/member-ptr.exp: ptype a.*pmf
+PASS: gdb.cp/member-ptr.exp: ptype (a.*pmf)(3)
+PASS: gdb.cp/member-ptr.exp: print diamond_pmi
+PASS: gdb.cp/member-ptr.exp: print diamond.*diamond_pmi
+PASS: gdb.cp/member-ptr.exp: print diamond.*left_pmf
+PASS: gdb.cp/member-ptr.exp: print diamond.*right_pmf
+PASS: gdb.cp/member-ptr.exp: print (diamond.*left_pmf) ()
+PASS: gdb.cp/member-ptr.exp: print (diamond.*right_pmf) ()
+PASS: gdb.cp/member-ptr.exp: print diamond.*left_vpmf
+PASS: gdb.cp/member-ptr.exp: print diamond.*right_vpmf
+PASS: gdb.cp/member-ptr.exp: print (diamond.*left_vpmf) ()
+PASS: gdb.cp/member-ptr.exp: print (diamond.*left_base_vpmf) ()
+PASS: gdb.cp/member-ptr.exp: print (diamond.*right_vpmf) ()
+PASS: gdb.cp/member-ptr.exp: print left_vpmf
+PASS: gdb.cp/member-ptr.exp: print right_vpmf
+PASS: gdb.cp/member-ptr.exp: print base_vpmf
+PASS: gdb.cp/member-ptr.exp: print diamond.*left_vpmf ()
+PASS: gdb.cp/member-ptr.exp: print null_pmi
+PASS: gdb.cp/member-ptr.exp: print null_pmi = &A::j
+PASS: gdb.cp/member-ptr.exp: print null_pmi = 0
+PASS: gdb.cp/member-ptr.exp: print null_pmf
+PASS: gdb.cp/member-ptr.exp: print null_pmf = &A::foo
+PASS: gdb.cp/member-ptr.exp: print null_pmf = 0
+Running ./gdb.cp/method2.exp ...
+PASS: gdb.cp/method2.exp: set multiple-symbols ask
+PASS: gdb.cp/method2.exp: setting language c
+PASS: gdb.cp/method2.exp: breaking in method (c)
+PASS: gdb.cp/method2.exp: setting language c++
+PASS: gdb.cp/method2.exp: breaking in method (c++)
+PASS: gdb.cp/method2.exp: continue until exit at continue to end
+Running ./gdb.cp/method.exp ...
+PASS: gdb.cp/method.exp: break A::foo
+PASS: gdb.cp/method.exp: continue to A::foo
+PASS: gdb.cp/method.exp: print x in A::foo
+PASS: gdb.cp/method.exp: print this in A::foo
+PASS: gdb.cp/method.exp: break A::bar
+PASS: gdb.cp/method.exp: continue to A::bar
+PASS: gdb.cp/method.exp: print x in A::bar
+PASS: gdb.cp/method.exp: print this in A::bar
+PASS: gdb.cp/method.exp: break 21
+PASS: gdb.cp/method.exp: continue to 21
+PASS: gdb.cp/method.exp: print data_ in funk::getFunky
+PASS: gdb.cp/method.exp: print this in funk::getFunky
+PASS: gdb.cp/method.exp: print res in funk::getFunky
+PASS: gdb.cp/method.exp: ptype A
+PASS: gdb.cp/method.exp: finish program
+Running ./gdb.cp/meth-typedefs.exp ...
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(my_other_type)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(my_other_type)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(my_other_type)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(my_other_type)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(my_type)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(my_type)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(my_type)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(my_type)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(const char* const*)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(const char* const*)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(const char* const*)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(const char* const*)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(my_other_type_2)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(my_other_type_2)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(my_other_type_2)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(my_other_type_2)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(my_type_2)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(my_type_2)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(my_type_2)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(my_type_2)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(int)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(int)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(int)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(int)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(my_other_type)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(my_other_type)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(my_other_type)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(my_other_type)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(my_type)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(my_type)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(my_type)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(my_type)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(const char* const*)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(const char* const*)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(const char* const*)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(const char* const*)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(my_other_type_2)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(my_other_type_2)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(my_other_type_2)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(my_other_type_2)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(my_type_2)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(my_type_2)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(my_type_2)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(my_type_2)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(int)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(int)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(int)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(int)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(my_other_type_2, const my_other_type)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(my_other_type_2, const my_other_type)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(my_other_type_2, const my_other_type)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(my_other_type_2, const my_other_type)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(my_other_type_2, my_other_type)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(my_other_type_2, my_other_type)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(my_other_type_2, my_other_type)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(my_other_type_2, my_other_type)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(my_other_type_2, const my_type)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(my_other_type_2, const my_type)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(my_other_type_2, const my_type)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(my_other_type_2, const my_type)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(my_other_type_2, my_type)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(my_other_type_2, my_type)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(my_other_type_2, my_type)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(my_other_type_2, my_type)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(my_other_type_2, const const char* const*)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(my_other_type_2, const const char* const*)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(my_other_type_2, const const char* const*)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(my_other_type_2, const const char* const*)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(my_other_type_2, const char* const*)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(my_other_type_2, const char* const*)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(my_other_type_2, const char* const*)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(my_other_type_2, const char* const*)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(my_type_2, const my_other_type)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(my_type_2, const my_other_type)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(my_type_2, const my_other_type)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(my_type_2, const my_other_type)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(my_type_2, my_other_type)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(my_type_2, my_other_type)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(my_type_2, my_other_type)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(my_type_2, my_other_type)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(my_type_2, const my_type)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(my_type_2, const my_type)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(my_type_2, const my_type)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(my_type_2, const my_type)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(my_type_2, my_type)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(my_type_2, my_type)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(my_type_2, my_type)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(my_type_2, my_type)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(my_type_2, const const char* const*)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(my_type_2, const const char* const*)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(my_type_2, const const char* const*)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(my_type_2, const const char* const*)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(my_type_2, const char* const*)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(my_type_2, const char* const*)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(my_type_2, const char* const*)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(my_type_2, const char* const*)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(int, const my_other_type)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(int, const my_other_type)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(int, const my_other_type)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(int, const my_other_type)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(int, my_other_type)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(int, my_other_type)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(int, my_other_type)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(int, my_other_type)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(int, const my_type)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(int, const my_type)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(int, const my_type)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(int, const my_type)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(int, my_type)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(int, my_type)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(int, my_type)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(int, my_type)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(int, const const char* const*)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(int, const const char* const*)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(int, const const char* const*)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(int, const const char* const*)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(int, const char* const*)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(int, const char* const*)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(int, const char* const*)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(int, const char* const*)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(my_other_type_2, const my_other_type)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(my_other_type_2, const my_other_type)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(my_other_type_2, const my_other_type)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(my_other_type_2, const my_other_type)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(my_other_type_2, my_other_type)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(my_other_type_2, my_other_type)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(my_other_type_2, my_other_type)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(my_other_type_2, my_other_type)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(my_other_type_2, const my_type)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(my_other_type_2, const my_type)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(my_other_type_2, const my_type)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(my_other_type_2, const my_type)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(my_other_type_2, my_type)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(my_other_type_2, my_type)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(my_other_type_2, my_type)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(my_other_type_2, my_type)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(my_other_type_2, const const char* const*)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(my_other_type_2, const const char* const*)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(my_other_type_2, const const char* const*)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(my_other_type_2, const const char* const*)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(my_other_type_2, const char* const*)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(my_other_type_2, const char* const*)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(my_other_type_2, const char* const*)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(my_other_type_2, const char* const*)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(my_type_2, const my_other_type)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(my_type_2, const my_other_type)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(my_type_2, const my_other_type)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(my_type_2, const my_other_type)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(my_type_2, my_other_type)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(my_type_2, my_other_type)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(my_type_2, my_other_type)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(my_type_2, my_other_type)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(my_type_2, const my_type)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(my_type_2, const my_type)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(my_type_2, const my_type)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(my_type_2, const my_type)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(my_type_2, my_type)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(my_type_2, my_type)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(my_type_2, my_type)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(my_type_2, my_type)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(my_type_2, const const char* const*)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(my_type_2, const const char* const*)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(my_type_2, const const char* const*)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(my_type_2, const const char* const*)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(my_type_2, const char* const*)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(my_type_2, const char* const*)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(my_type_2, const char* const*)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(my_type_2, const char* const*)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(int, const my_other_type)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(int, const my_other_type)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(int, const my_other_type)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(int, const my_other_type)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(int, my_other_type)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(int, my_other_type)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(int, my_other_type)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(int, my_other_type)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(int, const my_type)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(int, const my_type)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(int, const my_type)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(int, const my_type)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(int, my_type)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(int, my_type)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(int, my_type)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(int, my_type)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(int, const const char* const*)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(int, const const char* const*)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(int, const const char* const*)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(int, const const char* const*)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(int, const char* const*)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(int, const char* const*)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(int, const char* const*)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(int, const char* const*)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(aenum, astruct const&, aunion const***)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(aenum, astruct const&, aunion const***)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(aenum, astruct const&, aunion const***)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(aenum, astruct const&, aunion const***)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(aenum, astruct const&, anon_union const***)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(aenum, astruct const&, anon_union const***)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(aenum, astruct const&, anon_union const***)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(aenum, astruct const&, anon_union const***)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(aenum, anon_struct const&, aunion const***)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(aenum, anon_struct const&, aunion const***)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(aenum, anon_struct const&, aunion const***)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(aenum, anon_struct const&, aunion const***)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(aenum, anon_struct const&, anon_union const***)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(aenum, anon_struct const&, anon_union const***)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(aenum, anon_struct const&, anon_union const***)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(aenum, anon_struct const&, anon_union const***)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(anon_enum, astruct const&, aunion const***)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(anon_enum, astruct const&, aunion const***)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(anon_enum, astruct const&, aunion const***)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(anon_enum, astruct const&, aunion const***)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(anon_enum, astruct const&, anon_union const***)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(anon_enum, astruct const&, anon_union const***)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(anon_enum, astruct const&, anon_union const***)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(anon_enum, astruct const&, anon_union const***)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(anon_enum, anon_struct const&, aunion const***)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(anon_enum, anon_struct const&, aunion const***)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(anon_enum, anon_struct const&, aunion const***)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(anon_enum, anon_struct const&, aunion const***)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(anon_enum, anon_struct const&, anon_union const***)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(anon_enum, anon_struct const&, anon_union const***)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(anon_enum, anon_struct const&, anon_union const***)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(anon_enum, anon_struct const&, anon_union const***)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(aenum, astruct const&, aunion const***)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(aenum, astruct const&, aunion const***)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(aenum, astruct const&, aunion const***)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(aenum, astruct const&, aunion const***)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(aenum, astruct const&, anon_union const***)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(aenum, astruct const&, anon_union const***)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(aenum, astruct const&, anon_union const***)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(aenum, astruct const&, anon_union const***)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(aenum, anon_struct const&, aunion const***)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(aenum, anon_struct const&, aunion const***)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(aenum, anon_struct const&, aunion const***)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(aenum, anon_struct const&, aunion const***)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(aenum, anon_struct const&, anon_union const***)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(aenum, anon_struct const&, anon_union const***)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(aenum, anon_struct const&, anon_union const***)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(aenum, anon_struct const&, anon_union const***)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(anon_enum, astruct const&, aunion const***)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(anon_enum, astruct const&, aunion const***)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(anon_enum, astruct const&, aunion const***)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(anon_enum, astruct const&, aunion const***)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(anon_enum, astruct const&, anon_union const***)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(anon_enum, astruct const&, anon_union const***)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(anon_enum, astruct const&, anon_union const***)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(anon_enum, astruct const&, anon_union const***)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(anon_enum, anon_struct const&, aunion const***)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(anon_enum, anon_struct const&, aunion const***)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(anon_enum, anon_struct const&, aunion const***)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(anon_enum, anon_struct const&, aunion const***)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(anon_enum, anon_struct const&, anon_union const***)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(anon_enum, anon_struct const&, anon_union const***)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(anon_enum, anon_struct const&, anon_union const***)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(anon_enum, anon_struct const&, anon_union const***)'
+PASS: gdb.cp/meth-typedefs.exp: list B::test(aenum, astruct const&, aunion const***)
+PASS: gdb.cp/meth-typedefs.exp: list 'B::test(aenum, astruct const&, aunion const***)'
+PASS: gdb.cp/meth-typedefs.exp: break B::test(aenum, astruct const&, aunion const***)
+PASS: gdb.cp/meth-typedefs.exp: break 'B::test(aenum, astruct const&, aunion const***)'
+PASS: gdb.cp/meth-typedefs.exp: list B::test(aenum, astruct const&, anon_union const***)
+PASS: gdb.cp/meth-typedefs.exp: list 'B::test(aenum, astruct const&, anon_union const***)'
+PASS: gdb.cp/meth-typedefs.exp: break B::test(aenum, astruct const&, anon_union const***)
+PASS: gdb.cp/meth-typedefs.exp: break 'B::test(aenum, astruct const&, anon_union const***)'
+PASS: gdb.cp/meth-typedefs.exp: list B::test(aenum, anon_struct const&, aunion const***)
+PASS: gdb.cp/meth-typedefs.exp: list 'B::test(aenum, anon_struct const&, aunion const***)'
+PASS: gdb.cp/meth-typedefs.exp: break B::test(aenum, anon_struct const&, aunion const***)
+PASS: gdb.cp/meth-typedefs.exp: break 'B::test(aenum, anon_struct const&, aunion const***)'
+PASS: gdb.cp/meth-typedefs.exp: list B::test(aenum, anon_struct const&, anon_union const***)
+PASS: gdb.cp/meth-typedefs.exp: list 'B::test(aenum, anon_struct const&, anon_union const***)'
+PASS: gdb.cp/meth-typedefs.exp: break B::test(aenum, anon_struct const&, anon_union const***)
+PASS: gdb.cp/meth-typedefs.exp: break 'B::test(aenum, anon_struct const&, anon_union const***)'
+PASS: gdb.cp/meth-typedefs.exp: list B::test(anon_enum, astruct const&, aunion const***)
+PASS: gdb.cp/meth-typedefs.exp: list 'B::test(anon_enum, astruct const&, aunion const***)'
+PASS: gdb.cp/meth-typedefs.exp: break B::test(anon_enum, astruct const&, aunion const***)
+PASS: gdb.cp/meth-typedefs.exp: break 'B::test(anon_enum, astruct const&, aunion const***)'
+PASS: gdb.cp/meth-typedefs.exp: list B::test(anon_enum, astruct const&, anon_union const***)
+PASS: gdb.cp/meth-typedefs.exp: list 'B::test(anon_enum, astruct const&, anon_union const***)'
+PASS: gdb.cp/meth-typedefs.exp: break B::test(anon_enum, astruct const&, anon_union const***)
+PASS: gdb.cp/meth-typedefs.exp: break 'B::test(anon_enum, astruct const&, anon_union const***)'
+PASS: gdb.cp/meth-typedefs.exp: list B::test(anon_enum, anon_struct const&, aunion const***)
+PASS: gdb.cp/meth-typedefs.exp: list 'B::test(anon_enum, anon_struct const&, aunion const***)'
+PASS: gdb.cp/meth-typedefs.exp: break B::test(anon_enum, anon_struct const&, aunion const***)
+PASS: gdb.cp/meth-typedefs.exp: break 'B::test(anon_enum, anon_struct const&, aunion const***)'
+PASS: gdb.cp/meth-typedefs.exp: list B::test(anon_enum, anon_struct const&, anon_union const***)
+PASS: gdb.cp/meth-typedefs.exp: list 'B::test(anon_enum, anon_struct const&, anon_union const***)'
+PASS: gdb.cp/meth-typedefs.exp: break B::test(anon_enum, anon_struct const&, anon_union const***)
+PASS: gdb.cp/meth-typedefs.exp: break 'B::test(anon_enum, anon_struct const&, anon_union const***)'
+PASS: gdb.cp/meth-typedefs.exp: list test(aenum, astruct const&, aunion const***)
+PASS: gdb.cp/meth-typedefs.exp: list 'test(aenum, astruct const&, aunion const***)'
+PASS: gdb.cp/meth-typedefs.exp: break test(aenum, astruct const&, aunion const***)
+PASS: gdb.cp/meth-typedefs.exp: break 'test(aenum, astruct const&, aunion const***)'
+PASS: gdb.cp/meth-typedefs.exp: list test(aenum, astruct const&, anon_union const***)
+PASS: gdb.cp/meth-typedefs.exp: list 'test(aenum, astruct const&, anon_union const***)'
+PASS: gdb.cp/meth-typedefs.exp: break test(aenum, astruct const&, anon_union const***)
+PASS: gdb.cp/meth-typedefs.exp: break 'test(aenum, astruct const&, anon_union const***)'
+PASS: gdb.cp/meth-typedefs.exp: list test(aenum, anon_struct const&, aunion const***)
+PASS: gdb.cp/meth-typedefs.exp: list 'test(aenum, anon_struct const&, aunion const***)'
+PASS: gdb.cp/meth-typedefs.exp: break test(aenum, anon_struct const&, aunion const***)
+PASS: gdb.cp/meth-typedefs.exp: break 'test(aenum, anon_struct const&, aunion const***)'
+PASS: gdb.cp/meth-typedefs.exp: list test(aenum, anon_struct const&, anon_union const***)
+PASS: gdb.cp/meth-typedefs.exp: list 'test(aenum, anon_struct const&, anon_union const***)'
+PASS: gdb.cp/meth-typedefs.exp: break test(aenum, anon_struct const&, anon_union const***)
+PASS: gdb.cp/meth-typedefs.exp: break 'test(aenum, anon_struct const&, anon_union const***)'
+PASS: gdb.cp/meth-typedefs.exp: list test(anon_enum, astruct const&, aunion const***)
+PASS: gdb.cp/meth-typedefs.exp: list 'test(anon_enum, astruct const&, aunion const***)'
+PASS: gdb.cp/meth-typedefs.exp: break test(anon_enum, astruct const&, aunion const***)
+PASS: gdb.cp/meth-typedefs.exp: break 'test(anon_enum, astruct const&, aunion const***)'
+PASS: gdb.cp/meth-typedefs.exp: list test(anon_enum, astruct const&, anon_union const***)
+PASS: gdb.cp/meth-typedefs.exp: list 'test(anon_enum, astruct const&, anon_union const***)'
+PASS: gdb.cp/meth-typedefs.exp: break test(anon_enum, astruct const&, anon_union const***)
+PASS: gdb.cp/meth-typedefs.exp: break 'test(anon_enum, astruct const&, anon_union const***)'
+PASS: gdb.cp/meth-typedefs.exp: list test(anon_enum, anon_struct const&, aunion const***)
+PASS: gdb.cp/meth-typedefs.exp: list 'test(anon_enum, anon_struct const&, aunion const***)'
+PASS: gdb.cp/meth-typedefs.exp: break test(anon_enum, anon_struct const&, aunion const***)
+PASS: gdb.cp/meth-typedefs.exp: break 'test(anon_enum, anon_struct const&, aunion const***)'
+PASS: gdb.cp/meth-typedefs.exp: list test(anon_enum, anon_struct const&, anon_union const***)
+PASS: gdb.cp/meth-typedefs.exp: list 'test(anon_enum, anon_struct const&, anon_union const***)'
+PASS: gdb.cp/meth-typedefs.exp: break test(anon_enum, anon_struct const&, anon_union const***)
+PASS: gdb.cp/meth-typedefs.exp: break 'test(anon_enum, anon_struct const&, anon_union const***)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(fptr1*)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(fptr1*)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(fptr1*)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(fptr1*)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(void (**) (my_other_type))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(void (**) (my_other_type))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(void (**) (my_other_type))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(void (**) (my_other_type))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(void (**) (my_type))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(void (**) (my_type))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(void (**) (my_type))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(void (**) (my_type))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(void (**) (const char* const*))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(void (**) (const char* const*))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(void (**) (const char* const*))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(void (**) (const char* const*))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(fptr1*)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(fptr1*)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(fptr1*)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(fptr1*)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(void (**) (my_other_type))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(void (**) (my_other_type))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(void (**) (my_other_type))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(void (**) (my_other_type))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(void (**) (my_type))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(void (**) (my_type))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(void (**) (my_type))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(void (**) (my_type))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(void (**) (const char* const*))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(void (**) (const char* const*))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(void (**) (const char* const*))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(void (**) (const char* const*))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(fptr3)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(fptr3)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(fptr3)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(fptr3)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(void (*)(fptr2, my_other_type))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(void (*)(fptr2, my_other_type))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(void (*)(fptr2, my_other_type))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(void (*)(fptr2, my_other_type))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(void (*)(void (*)(fptr1, my_other_type_2), my_other_type))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(void (*)(void (*)(fptr1, my_other_type_2), my_other_type))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(void (*)(void (*)(fptr1, my_other_type_2), my_other_type))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(void (*)(void (*)(fptr1, my_other_type_2), my_other_type))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(void (*)(void (*)(void (*) (my_other_type), my_other_type_2), my_other_type))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(void (*)(void (*)(void (*) (my_other_type), my_other_type_2), my_other_type))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(void (*)(void (*)(void (*) (my_other_type), my_other_type_2), my_other_type))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(void (*)(void (*)(void (*) (my_other_type), my_other_type_2), my_other_type))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(void (*)(void (*)(void (*) (my_type), my_other_type_2), my_other_type))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(void (*)(void (*)(void (*) (my_type), my_other_type_2), my_other_type))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(void (*)(void (*)(void (*) (my_type), my_other_type_2), my_other_type))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(void (*)(void (*)(void (*) (my_type), my_other_type_2), my_other_type))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(void (*)(void (*)(void (*) (const char* const*), my_other_type_2), my_other_type))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(void (*)(void (*)(void (*) (const char* const*), my_other_type_2), my_other_type))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(void (*)(void (*)(void (*) (const char* const*), my_other_type_2), my_other_type))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(void (*)(void (*)(void (*) (const char* const*), my_other_type_2), my_other_type))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(void (*)(void (*)(fptr1, my_type_2), my_other_type))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(void (*)(void (*)(fptr1, my_type_2), my_other_type))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(void (*)(void (*)(fptr1, my_type_2), my_other_type))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(void (*)(void (*)(fptr1, my_type_2), my_other_type))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(void (*)(void (*)(void (*) (my_other_type), my_type_2), my_other_type))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(void (*)(void (*)(void (*) (my_other_type), my_type_2), my_other_type))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(void (*)(void (*)(void (*) (my_other_type), my_type_2), my_other_type))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(void (*)(void (*)(void (*) (my_other_type), my_type_2), my_other_type))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(void (*)(void (*)(void (*) (my_type), my_type_2), my_other_type))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(void (*)(void (*)(void (*) (my_type), my_type_2), my_other_type))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(void (*)(void (*)(void (*) (my_type), my_type_2), my_other_type))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(void (*)(void (*)(void (*) (my_type), my_type_2), my_other_type))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(void (*)(void (*)(void (*) (const char* const*), my_type_2), my_other_type))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(void (*)(void (*)(void (*) (const char* const*), my_type_2), my_other_type))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(void (*)(void (*)(void (*) (const char* const*), my_type_2), my_other_type))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(void (*)(void (*)(void (*) (const char* const*), my_type_2), my_other_type))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(void (*)(void (*)(fptr1, int), my_other_type))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(void (*)(void (*)(fptr1, int), my_other_type))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(void (*)(void (*)(fptr1, int), my_other_type))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(void (*)(void (*)(fptr1, int), my_other_type))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(void (*)(void (*)(void (*) (my_other_type), int), my_other_type))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(void (*)(void (*)(void (*) (my_other_type), int), my_other_type))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(void (*)(void (*)(void (*) (my_other_type), int), my_other_type))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(void (*)(void (*)(void (*) (my_other_type), int), my_other_type))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(void (*)(void (*)(void (*) (my_type), int), my_other_type))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(void (*)(void (*)(void (*) (my_type), int), my_other_type))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(void (*)(void (*)(void (*) (my_type), int), my_other_type))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(void (*)(void (*)(void (*) (my_type), int), my_other_type))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(void (*)(void (*)(void (*) (const char* const*), int), my_other_type))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(void (*)(void (*)(void (*) (const char* const*), int), my_other_type))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(void (*)(void (*)(void (*) (const char* const*), int), my_other_type))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(void (*)(void (*)(void (*) (const char* const*), int), my_other_type))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(void (*)(fptr2, my_type))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(void (*)(fptr2, my_type))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(void (*)(fptr2, my_type))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(void (*)(fptr2, my_type))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(void (*)(void (*)(fptr1, my_other_type_2), my_type))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(void (*)(void (*)(fptr1, my_other_type_2), my_type))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(void (*)(void (*)(fptr1, my_other_type_2), my_type))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(void (*)(void (*)(fptr1, my_other_type_2), my_type))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(void (*)(void (*)(void (*) (my_other_type), my_other_type_2), my_type))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(void (*)(void (*)(void (*) (my_other_type), my_other_type_2), my_type))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(void (*)(void (*)(void (*) (my_other_type), my_other_type_2), my_type))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(void (*)(void (*)(void (*) (my_other_type), my_other_type_2), my_type))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(void (*)(void (*)(void (*) (my_type), my_other_type_2), my_type))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(void (*)(void (*)(void (*) (my_type), my_other_type_2), my_type))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(void (*)(void (*)(void (*) (my_type), my_other_type_2), my_type))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(void (*)(void (*)(void (*) (my_type), my_other_type_2), my_type))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(void (*)(void (*)(void (*) (const char* const*), my_other_type_2), my_type))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(void (*)(void (*)(void (*) (const char* const*), my_other_type_2), my_type))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(void (*)(void (*)(void (*) (const char* const*), my_other_type_2), my_type))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(void (*)(void (*)(void (*) (const char* const*), my_other_type_2), my_type))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(void (*)(void (*)(fptr1, my_type_2), my_type))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(void (*)(void (*)(fptr1, my_type_2), my_type))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(void (*)(void (*)(fptr1, my_type_2), my_type))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(void (*)(void (*)(fptr1, my_type_2), my_type))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(void (*)(void (*)(void (*) (my_other_type), my_type_2), my_type))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(void (*)(void (*)(void (*) (my_other_type), my_type_2), my_type))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(void (*)(void (*)(void (*) (my_other_type), my_type_2), my_type))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(void (*)(void (*)(void (*) (my_other_type), my_type_2), my_type))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(void (*)(void (*)(void (*) (my_type), my_type_2), my_type))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(void (*)(void (*)(void (*) (my_type), my_type_2), my_type))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(void (*)(void (*)(void (*) (my_type), my_type_2), my_type))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(void (*)(void (*)(void (*) (my_type), my_type_2), my_type))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(void (*)(void (*)(void (*) (const char* const*), my_type_2), my_type))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(void (*)(void (*)(void (*) (const char* const*), my_type_2), my_type))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(void (*)(void (*)(void (*) (const char* const*), my_type_2), my_type))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(void (*)(void (*)(void (*) (const char* const*), my_type_2), my_type))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(void (*)(void (*)(fptr1, int), my_type))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(void (*)(void (*)(fptr1, int), my_type))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(void (*)(void (*)(fptr1, int), my_type))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(void (*)(void (*)(fptr1, int), my_type))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(void (*)(void (*)(void (*) (my_other_type), int), my_type))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(void (*)(void (*)(void (*) (my_other_type), int), my_type))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(void (*)(void (*)(void (*) (my_other_type), int), my_type))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(void (*)(void (*)(void (*) (my_other_type), int), my_type))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(void (*)(void (*)(void (*) (my_type), int), my_type))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(void (*)(void (*)(void (*) (my_type), int), my_type))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(void (*)(void (*)(void (*) (my_type), int), my_type))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(void (*)(void (*)(void (*) (my_type), int), my_type))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(void (*)(void (*)(void (*) (const char* const*), int), my_type))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(void (*)(void (*)(void (*) (const char* const*), int), my_type))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(void (*)(void (*)(void (*) (const char* const*), int), my_type))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(void (*)(void (*)(void (*) (const char* const*), int), my_type))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(void (*)(fptr2, const char* const*))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(void (*)(fptr2, const char* const*))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(void (*)(fptr2, const char* const*))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(void (*)(fptr2, const char* const*))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(void (*)(void (*)(fptr1, my_other_type_2), const char* const*))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(void (*)(void (*)(fptr1, my_other_type_2), const char* const*))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(void (*)(void (*)(fptr1, my_other_type_2), const char* const*))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(void (*)(void (*)(fptr1, my_other_type_2), const char* const*))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(void (*)(void (*)(void (*) (my_other_type), my_other_type_2), const char* const*))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(void (*)(void (*)(void (*) (my_other_type), my_other_type_2), const char* const*))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(void (*)(void (*)(void (*) (my_other_type), my_other_type_2), const char* const*))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(void (*)(void (*)(void (*) (my_other_type), my_other_type_2), const char* const*))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(void (*)(void (*)(void (*) (my_type), my_other_type_2), const char* const*))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(void (*)(void (*)(void (*) (my_type), my_other_type_2), const char* const*))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(void (*)(void (*)(void (*) (my_type), my_other_type_2), const char* const*))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(void (*)(void (*)(void (*) (my_type), my_other_type_2), const char* const*))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(void (*)(void (*)(void (*) (const char* const*), my_other_type_2), const char* const*))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(void (*)(void (*)(void (*) (const char* const*), my_other_type_2), const char* const*))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(void (*)(void (*)(void (*) (const char* const*), my_other_type_2), const char* const*))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(void (*)(void (*)(void (*) (const char* const*), my_other_type_2), const char* const*))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(void (*)(void (*)(fptr1, my_type_2), const char* const*))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(void (*)(void (*)(fptr1, my_type_2), const char* const*))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(void (*)(void (*)(fptr1, my_type_2), const char* const*))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(void (*)(void (*)(fptr1, my_type_2), const char* const*))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(void (*)(void (*)(void (*) (my_other_type), my_type_2), const char* const*))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(void (*)(void (*)(void (*) (my_other_type), my_type_2), const char* const*))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(void (*)(void (*)(void (*) (my_other_type), my_type_2), const char* const*))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(void (*)(void (*)(void (*) (my_other_type), my_type_2), const char* const*))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(void (*)(void (*)(void (*) (my_type), my_type_2), const char* const*))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(void (*)(void (*)(void (*) (my_type), my_type_2), const char* const*))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(void (*)(void (*)(void (*) (my_type), my_type_2), const char* const*))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(void (*)(void (*)(void (*) (my_type), my_type_2), const char* const*))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(void (*)(void (*)(void (*) (const char* const*), my_type_2), const char* const*))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(void (*)(void (*)(void (*) (const char* const*), my_type_2), const char* const*))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(void (*)(void (*)(void (*) (const char* const*), my_type_2), const char* const*))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(void (*)(void (*)(void (*) (const char* const*), my_type_2), const char* const*))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(void (*)(void (*)(fptr1, int), const char* const*))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(void (*)(void (*)(fptr1, int), const char* const*))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(void (*)(void (*)(fptr1, int), const char* const*))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(void (*)(void (*)(fptr1, int), const char* const*))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(void (*)(void (*)(void (*) (my_other_type), int), const char* const*))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(void (*)(void (*)(void (*) (my_other_type), int), const char* const*))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(void (*)(void (*)(void (*) (my_other_type), int), const char* const*))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(void (*)(void (*)(void (*) (my_other_type), int), const char* const*))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(void (*)(void (*)(void (*) (my_type), int), const char* const*))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(void (*)(void (*)(void (*) (my_type), int), const char* const*))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(void (*)(void (*)(void (*) (my_type), int), const char* const*))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(void (*)(void (*)(void (*) (my_type), int), const char* const*))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(void (*)(void (*)(void (*) (const char* const*), int), const char* const*))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(void (*)(void (*)(void (*) (const char* const*), int), const char* const*))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(void (*)(void (*)(void (*) (const char* const*), int), const char* const*))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(void (*)(void (*)(void (*) (const char* const*), int), const char* const*))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(fptr3)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(fptr3)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(fptr3)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(fptr3)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(void (*)(fptr2, my_other_type))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(void (*)(fptr2, my_other_type))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(void (*)(fptr2, my_other_type))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(void (*)(fptr2, my_other_type))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(void (*)(void (*)(fptr1, my_other_type_2), my_other_type))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(void (*)(void (*)(fptr1, my_other_type_2), my_other_type))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(void (*)(void (*)(fptr1, my_other_type_2), my_other_type))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(void (*)(void (*)(fptr1, my_other_type_2), my_other_type))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(void (*)(void (*)(void (*) (my_other_type), my_other_type_2), my_other_type))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(void (*)(void (*)(void (*) (my_other_type), my_other_type_2), my_other_type))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(void (*)(void (*)(void (*) (my_other_type), my_other_type_2), my_other_type))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(void (*)(void (*)(void (*) (my_other_type), my_other_type_2), my_other_type))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(void (*)(void (*)(void (*) (my_type), my_other_type_2), my_other_type))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(void (*)(void (*)(void (*) (my_type), my_other_type_2), my_other_type))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(void (*)(void (*)(void (*) (my_type), my_other_type_2), my_other_type))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(void (*)(void (*)(void (*) (my_type), my_other_type_2), my_other_type))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(void (*)(void (*)(void (*) (const char* const*), my_other_type_2), my_other_type))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(void (*)(void (*)(void (*) (const char* const*), my_other_type_2), my_other_type))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(void (*)(void (*)(void (*) (const char* const*), my_other_type_2), my_other_type))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(void (*)(void (*)(void (*) (const char* const*), my_other_type_2), my_other_type))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(void (*)(void (*)(fptr1, my_type_2), my_other_type))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(void (*)(void (*)(fptr1, my_type_2), my_other_type))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(void (*)(void (*)(fptr1, my_type_2), my_other_type))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(void (*)(void (*)(fptr1, my_type_2), my_other_type))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(void (*)(void (*)(void (*) (my_other_type), my_type_2), my_other_type))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(void (*)(void (*)(void (*) (my_other_type), my_type_2), my_other_type))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(void (*)(void (*)(void (*) (my_other_type), my_type_2), my_other_type))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(void (*)(void (*)(void (*) (my_other_type), my_type_2), my_other_type))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(void (*)(void (*)(void (*) (my_type), my_type_2), my_other_type))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(void (*)(void (*)(void (*) (my_type), my_type_2), my_other_type))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(void (*)(void (*)(void (*) (my_type), my_type_2), my_other_type))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(void (*)(void (*)(void (*) (my_type), my_type_2), my_other_type))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(void (*)(void (*)(void (*) (const char* const*), my_type_2), my_other_type))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(void (*)(void (*)(void (*) (const char* const*), my_type_2), my_other_type))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(void (*)(void (*)(void (*) (const char* const*), my_type_2), my_other_type))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(void (*)(void (*)(void (*) (const char* const*), my_type_2), my_other_type))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(void (*)(void (*)(fptr1, int), my_other_type))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(void (*)(void (*)(fptr1, int), my_other_type))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(void (*)(void (*)(fptr1, int), my_other_type))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(void (*)(void (*)(fptr1, int), my_other_type))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(void (*)(void (*)(void (*) (my_other_type), int), my_other_type))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(void (*)(void (*)(void (*) (my_other_type), int), my_other_type))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(void (*)(void (*)(void (*) (my_other_type), int), my_other_type))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(void (*)(void (*)(void (*) (my_other_type), int), my_other_type))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(void (*)(void (*)(void (*) (my_type), int), my_other_type))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(void (*)(void (*)(void (*) (my_type), int), my_other_type))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(void (*)(void (*)(void (*) (my_type), int), my_other_type))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(void (*)(void (*)(void (*) (my_type), int), my_other_type))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(void (*)(void (*)(void (*) (const char* const*), int), my_other_type))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(void (*)(void (*)(void (*) (const char* const*), int), my_other_type))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(void (*)(void (*)(void (*) (const char* const*), int), my_other_type))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(void (*)(void (*)(void (*) (const char* const*), int), my_other_type))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(void (*)(fptr2, my_type))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(void (*)(fptr2, my_type))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(void (*)(fptr2, my_type))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(void (*)(fptr2, my_type))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(void (*)(void (*)(fptr1, my_other_type_2), my_type))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(void (*)(void (*)(fptr1, my_other_type_2), my_type))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(void (*)(void (*)(fptr1, my_other_type_2), my_type))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(void (*)(void (*)(fptr1, my_other_type_2), my_type))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(void (*)(void (*)(void (*) (my_other_type), my_other_type_2), my_type))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(void (*)(void (*)(void (*) (my_other_type), my_other_type_2), my_type))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(void (*)(void (*)(void (*) (my_other_type), my_other_type_2), my_type))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(void (*)(void (*)(void (*) (my_other_type), my_other_type_2), my_type))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(void (*)(void (*)(void (*) (my_type), my_other_type_2), my_type))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(void (*)(void (*)(void (*) (my_type), my_other_type_2), my_type))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(void (*)(void (*)(void (*) (my_type), my_other_type_2), my_type))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(void (*)(void (*)(void (*) (my_type), my_other_type_2), my_type))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(void (*)(void (*)(void (*) (const char* const*), my_other_type_2), my_type))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(void (*)(void (*)(void (*) (const char* const*), my_other_type_2), my_type))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(void (*)(void (*)(void (*) (const char* const*), my_other_type_2), my_type))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(void (*)(void (*)(void (*) (const char* const*), my_other_type_2), my_type))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(void (*)(void (*)(fptr1, my_type_2), my_type))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(void (*)(void (*)(fptr1, my_type_2), my_type))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(void (*)(void (*)(fptr1, my_type_2), my_type))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(void (*)(void (*)(fptr1, my_type_2), my_type))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(void (*)(void (*)(void (*) (my_other_type), my_type_2), my_type))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(void (*)(void (*)(void (*) (my_other_type), my_type_2), my_type))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(void (*)(void (*)(void (*) (my_other_type), my_type_2), my_type))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(void (*)(void (*)(void (*) (my_other_type), my_type_2), my_type))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(void (*)(void (*)(void (*) (my_type), my_type_2), my_type))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(void (*)(void (*)(void (*) (my_type), my_type_2), my_type))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(void (*)(void (*)(void (*) (my_type), my_type_2), my_type))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(void (*)(void (*)(void (*) (my_type), my_type_2), my_type))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(void (*)(void (*)(void (*) (const char* const*), my_type_2), my_type))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(void (*)(void (*)(void (*) (const char* const*), my_type_2), my_type))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(void (*)(void (*)(void (*) (const char* const*), my_type_2), my_type))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(void (*)(void (*)(void (*) (const char* const*), my_type_2), my_type))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(void (*)(void (*)(fptr1, int), my_type))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(void (*)(void (*)(fptr1, int), my_type))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(void (*)(void (*)(fptr1, int), my_type))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(void (*)(void (*)(fptr1, int), my_type))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(void (*)(void (*)(void (*) (my_other_type), int), my_type))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(void (*)(void (*)(void (*) (my_other_type), int), my_type))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(void (*)(void (*)(void (*) (my_other_type), int), my_type))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(void (*)(void (*)(void (*) (my_other_type), int), my_type))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(void (*)(void (*)(void (*) (my_type), int), my_type))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(void (*)(void (*)(void (*) (my_type), int), my_type))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(void (*)(void (*)(void (*) (my_type), int), my_type))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(void (*)(void (*)(void (*) (my_type), int), my_type))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(void (*)(void (*)(void (*) (const char* const*), int), my_type))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(void (*)(void (*)(void (*) (const char* const*), int), my_type))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(void (*)(void (*)(void (*) (const char* const*), int), my_type))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(void (*)(void (*)(void (*) (const char* const*), int), my_type))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(void (*)(fptr2, const char* const*))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(void (*)(fptr2, const char* const*))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(void (*)(fptr2, const char* const*))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(void (*)(fptr2, const char* const*))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(void (*)(void (*)(fptr1, my_other_type_2), const char* const*))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(void (*)(void (*)(fptr1, my_other_type_2), const char* const*))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(void (*)(void (*)(fptr1, my_other_type_2), const char* const*))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(void (*)(void (*)(fptr1, my_other_type_2), const char* const*))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(void (*)(void (*)(void (*) (my_other_type), my_other_type_2), const char* const*))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(void (*)(void (*)(void (*) (my_other_type), my_other_type_2), const char* const*))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(void (*)(void (*)(void (*) (my_other_type), my_other_type_2), const char* const*))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(void (*)(void (*)(void (*) (my_other_type), my_other_type_2), const char* const*))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(void (*)(void (*)(void (*) (my_type), my_other_type_2), const char* const*))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(void (*)(void (*)(void (*) (my_type), my_other_type_2), const char* const*))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(void (*)(void (*)(void (*) (my_type), my_other_type_2), const char* const*))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(void (*)(void (*)(void (*) (my_type), my_other_type_2), const char* const*))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(void (*)(void (*)(void (*) (const char* const*), my_other_type_2), const char* const*))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(void (*)(void (*)(void (*) (const char* const*), my_other_type_2), const char* const*))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(void (*)(void (*)(void (*) (const char* const*), my_other_type_2), const char* const*))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(void (*)(void (*)(void (*) (const char* const*), my_other_type_2), const char* const*))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(void (*)(void (*)(fptr1, my_type_2), const char* const*))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(void (*)(void (*)(fptr1, my_type_2), const char* const*))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(void (*)(void (*)(fptr1, my_type_2), const char* const*))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(void (*)(void (*)(fptr1, my_type_2), const char* const*))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(void (*)(void (*)(void (*) (my_other_type), my_type_2), const char* const*))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(void (*)(void (*)(void (*) (my_other_type), my_type_2), const char* const*))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(void (*)(void (*)(void (*) (my_other_type), my_type_2), const char* const*))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(void (*)(void (*)(void (*) (my_other_type), my_type_2), const char* const*))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(void (*)(void (*)(void (*) (my_type), my_type_2), const char* const*))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(void (*)(void (*)(void (*) (my_type), my_type_2), const char* const*))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(void (*)(void (*)(void (*) (my_type), my_type_2), const char* const*))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(void (*)(void (*)(void (*) (my_type), my_type_2), const char* const*))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(void (*)(void (*)(void (*) (const char* const*), my_type_2), const char* const*))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(void (*)(void (*)(void (*) (const char* const*), my_type_2), const char* const*))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(void (*)(void (*)(void (*) (const char* const*), my_type_2), const char* const*))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(void (*)(void (*)(void (*) (const char* const*), my_type_2), const char* const*))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(void (*)(void (*)(fptr1, int), const char* const*))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(void (*)(void (*)(fptr1, int), const char* const*))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(void (*)(void (*)(fptr1, int), const char* const*))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(void (*)(void (*)(fptr1, int), const char* const*))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(void (*)(void (*)(void (*) (my_other_type), int), const char* const*))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(void (*)(void (*)(void (*) (my_other_type), int), const char* const*))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(void (*)(void (*)(void (*) (my_other_type), int), const char* const*))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(void (*)(void (*)(void (*) (my_other_type), int), const char* const*))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(void (*)(void (*)(void (*) (my_type), int), const char* const*))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(void (*)(void (*)(void (*) (my_type), int), const char* const*))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(void (*)(void (*)(void (*) (my_type), int), const char* const*))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(void (*)(void (*)(void (*) (my_type), int), const char* const*))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(void (*)(void (*)(void (*) (const char* const*), int), const char* const*))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(void (*)(void (*)(void (*) (const char* const*), int), const char* const*))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(void (*)(void (*)(void (*) (const char* const*), int), const char* const*))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(void (*)(void (*)(void (*) (const char* const*), int), const char* const*))'
+PASS: gdb.cp/meth-typedefs.exp: list test(my_other_type)
+PASS: gdb.cp/meth-typedefs.exp: list 'test(my_other_type)'
+PASS: gdb.cp/meth-typedefs.exp: break test(my_other_type)
+PASS: gdb.cp/meth-typedefs.exp: break 'test(my_other_type)'
+PASS: gdb.cp/meth-typedefs.exp: list test<my_other_type, my_other_type_2>(my_other_type, my_other_type_2)
+PASS: gdb.cp/meth-typedefs.exp: list 'test<my_other_type, my_other_type_2>(my_other_type, my_other_type_2)'
+PASS: gdb.cp/meth-typedefs.exp: break test<my_other_type, my_other_type_2>(my_other_type, my_other_type_2)
+PASS: gdb.cp/meth-typedefs.exp: break 'test<my_other_type, my_other_type_2>(my_other_type, my_other_type_2)'
+PASS: gdb.cp/meth-typedefs.exp: list test<my_other_type, my_other_type_2>(my_other_type, my_type_2)
+PASS: gdb.cp/meth-typedefs.exp: list 'test<my_other_type, my_other_type_2>(my_other_type, my_type_2)'
+PASS: gdb.cp/meth-typedefs.exp: break test<my_other_type, my_other_type_2>(my_other_type, my_type_2)
+PASS: gdb.cp/meth-typedefs.exp: break 'test<my_other_type, my_other_type_2>(my_other_type, my_type_2)'
+PASS: gdb.cp/meth-typedefs.exp: list test<my_other_type, my_other_type_2>(my_other_type, int)
+PASS: gdb.cp/meth-typedefs.exp: list 'test<my_other_type, my_other_type_2>(my_other_type, int)'
+PASS: gdb.cp/meth-typedefs.exp: break test<my_other_type, my_other_type_2>(my_other_type, int)
+PASS: gdb.cp/meth-typedefs.exp: break 'test<my_other_type, my_other_type_2>(my_other_type, int)'
+PASS: gdb.cp/meth-typedefs.exp: list test(my_type)
+PASS: gdb.cp/meth-typedefs.exp: list 'test(my_type)'
+PASS: gdb.cp/meth-typedefs.exp: break test(my_type)
+PASS: gdb.cp/meth-typedefs.exp: break 'test(my_type)'
+PASS: gdb.cp/meth-typedefs.exp: list test<my_other_type, my_other_type_2>(my_type, my_other_type_2)
+PASS: gdb.cp/meth-typedefs.exp: list 'test<my_other_type, my_other_type_2>(my_type, my_other_type_2)'
+PASS: gdb.cp/meth-typedefs.exp: break test<my_other_type, my_other_type_2>(my_type, my_other_type_2)
+PASS: gdb.cp/meth-typedefs.exp: break 'test<my_other_type, my_other_type_2>(my_type, my_other_type_2)'
+PASS: gdb.cp/meth-typedefs.exp: list test<my_other_type, my_other_type_2>(my_type, my_type_2)
+PASS: gdb.cp/meth-typedefs.exp: list 'test<my_other_type, my_other_type_2>(my_type, my_type_2)'
+PASS: gdb.cp/meth-typedefs.exp: break test<my_other_type, my_other_type_2>(my_type, my_type_2)
+PASS: gdb.cp/meth-typedefs.exp: break 'test<my_other_type, my_other_type_2>(my_type, my_type_2)'
+PASS: gdb.cp/meth-typedefs.exp: list test<my_other_type, my_other_type_2>(my_type, int)
+PASS: gdb.cp/meth-typedefs.exp: list 'test<my_other_type, my_other_type_2>(my_type, int)'
+PASS: gdb.cp/meth-typedefs.exp: break test<my_other_type, my_other_type_2>(my_type, int)
+PASS: gdb.cp/meth-typedefs.exp: break 'test<my_other_type, my_other_type_2>(my_type, int)'
+PASS: gdb.cp/meth-typedefs.exp: list test(const char* const*)
+PASS: gdb.cp/meth-typedefs.exp: list 'test(const char* const*)'
+PASS: gdb.cp/meth-typedefs.exp: break test(const char* const*)
+PASS: gdb.cp/meth-typedefs.exp: break 'test(const char* const*)'
+PASS: gdb.cp/meth-typedefs.exp: list test<my_other_type, my_other_type_2>(const char* const*, my_other_type_2)
+PASS: gdb.cp/meth-typedefs.exp: list 'test<my_other_type, my_other_type_2>(const char* const*, my_other_type_2)'
+PASS: gdb.cp/meth-typedefs.exp: break test<my_other_type, my_other_type_2>(const char* const*, my_other_type_2)
+PASS: gdb.cp/meth-typedefs.exp: break 'test<my_other_type, my_other_type_2>(const char* const*, my_other_type_2)'
+PASS: gdb.cp/meth-typedefs.exp: list test<my_other_type, my_other_type_2>(const char* const*, my_type_2)
+PASS: gdb.cp/meth-typedefs.exp: list 'test<my_other_type, my_other_type_2>(const char* const*, my_type_2)'
+PASS: gdb.cp/meth-typedefs.exp: break test<my_other_type, my_other_type_2>(const char* const*, my_type_2)
+PASS: gdb.cp/meth-typedefs.exp: break 'test<my_other_type, my_other_type_2>(const char* const*, my_type_2)'
+PASS: gdb.cp/meth-typedefs.exp: list test<my_other_type, my_other_type_2>(const char* const*, int)
+PASS: gdb.cp/meth-typedefs.exp: list 'test<my_other_type, my_other_type_2>(const char* const*, int)'
+PASS: gdb.cp/meth-typedefs.exp: break test<my_other_type, my_other_type_2>(const char* const*, int)
+PASS: gdb.cp/meth-typedefs.exp: break 'test<my_other_type, my_other_type_2>(const char* const*, int)'
+PASS: gdb.cp/meth-typedefs.exp: list B::test(my_other_type)
+PASS: gdb.cp/meth-typedefs.exp: list 'B::test(my_other_type)'
+PASS: gdb.cp/meth-typedefs.exp: break B::test(my_other_type)
+PASS: gdb.cp/meth-typedefs.exp: break 'B::test(my_other_type)'
+PASS: gdb.cp/meth-typedefs.exp: list B::test<my_other_type, my_other_type_2>(my_other_type, my_other_type_2)
+PASS: gdb.cp/meth-typedefs.exp: list 'B::test<my_other_type, my_other_type_2>(my_other_type, my_other_type_2)'
+PASS: gdb.cp/meth-typedefs.exp: break B::test<my_other_type, my_other_type_2>(my_other_type, my_other_type_2)
+PASS: gdb.cp/meth-typedefs.exp: break 'B::test<my_other_type, my_other_type_2>(my_other_type, my_other_type_2)'
+PASS: gdb.cp/meth-typedefs.exp: list B::test<my_other_type, my_other_type_2>(my_other_type, my_type_2)
+PASS: gdb.cp/meth-typedefs.exp: list 'B::test<my_other_type, my_other_type_2>(my_other_type, my_type_2)'
+PASS: gdb.cp/meth-typedefs.exp: break B::test<my_other_type, my_other_type_2>(my_other_type, my_type_2)
+PASS: gdb.cp/meth-typedefs.exp: break 'B::test<my_other_type, my_other_type_2>(my_other_type, my_type_2)'
+PASS: gdb.cp/meth-typedefs.exp: list B::test<my_other_type, my_other_type_2>(my_other_type, int)
+PASS: gdb.cp/meth-typedefs.exp: list 'B::test<my_other_type, my_other_type_2>(my_other_type, int)'
+PASS: gdb.cp/meth-typedefs.exp: break B::test<my_other_type, my_other_type_2>(my_other_type, int)
+PASS: gdb.cp/meth-typedefs.exp: break 'B::test<my_other_type, my_other_type_2>(my_other_type, int)'
+PASS: gdb.cp/meth-typedefs.exp: list B::test(my_type)
+PASS: gdb.cp/meth-typedefs.exp: list 'B::test(my_type)'
+PASS: gdb.cp/meth-typedefs.exp: break B::test(my_type)
+PASS: gdb.cp/meth-typedefs.exp: break 'B::test(my_type)'
+PASS: gdb.cp/meth-typedefs.exp: list B::test<my_other_type, my_other_type_2>(my_type, my_other_type_2)
+PASS: gdb.cp/meth-typedefs.exp: list 'B::test<my_other_type, my_other_type_2>(my_type, my_other_type_2)'
+PASS: gdb.cp/meth-typedefs.exp: break B::test<my_other_type, my_other_type_2>(my_type, my_other_type_2)
+PASS: gdb.cp/meth-typedefs.exp: break 'B::test<my_other_type, my_other_type_2>(my_type, my_other_type_2)'
+PASS: gdb.cp/meth-typedefs.exp: list B::test<my_other_type, my_other_type_2>(my_type, my_type_2)
+PASS: gdb.cp/meth-typedefs.exp: list 'B::test<my_other_type, my_other_type_2>(my_type, my_type_2)'
+PASS: gdb.cp/meth-typedefs.exp: break B::test<my_other_type, my_other_type_2>(my_type, my_type_2)
+PASS: gdb.cp/meth-typedefs.exp: break 'B::test<my_other_type, my_other_type_2>(my_type, my_type_2)'
+PASS: gdb.cp/meth-typedefs.exp: list B::test<my_other_type, my_other_type_2>(my_type, int)
+PASS: gdb.cp/meth-typedefs.exp: list 'B::test<my_other_type, my_other_type_2>(my_type, int)'
+PASS: gdb.cp/meth-typedefs.exp: break B::test<my_other_type, my_other_type_2>(my_type, int)
+PASS: gdb.cp/meth-typedefs.exp: break 'B::test<my_other_type, my_other_type_2>(my_type, int)'
+PASS: gdb.cp/meth-typedefs.exp: list B::test(const char* const*)
+PASS: gdb.cp/meth-typedefs.exp: list 'B::test(const char* const*)'
+PASS: gdb.cp/meth-typedefs.exp: break B::test(const char* const*)
+PASS: gdb.cp/meth-typedefs.exp: break 'B::test(const char* const*)'
+PASS: gdb.cp/meth-typedefs.exp: list B::test<my_other_type, my_other_type_2>(const char* const*, my_other_type_2)
+PASS: gdb.cp/meth-typedefs.exp: list 'B::test<my_other_type, my_other_type_2>(const char* const*, my_other_type_2)'
+PASS: gdb.cp/meth-typedefs.exp: break B::test<my_other_type, my_other_type_2>(const char* const*, my_other_type_2)
+PASS: gdb.cp/meth-typedefs.exp: break 'B::test<my_other_type, my_other_type_2>(const char* const*, my_other_type_2)'
+PASS: gdb.cp/meth-typedefs.exp: list B::test<my_other_type, my_other_type_2>(const char* const*, my_type_2)
+PASS: gdb.cp/meth-typedefs.exp: list 'B::test<my_other_type, my_other_type_2>(const char* const*, my_type_2)'
+PASS: gdb.cp/meth-typedefs.exp: break B::test<my_other_type, my_other_type_2>(const char* const*, my_type_2)
+PASS: gdb.cp/meth-typedefs.exp: break 'B::test<my_other_type, my_other_type_2>(const char* const*, my_type_2)'
+PASS: gdb.cp/meth-typedefs.exp: list B::test<my_other_type, my_other_type_2>(const char* const*, int)
+PASS: gdb.cp/meth-typedefs.exp: list 'B::test<my_other_type, my_other_type_2>(const char* const*, int)'
+PASS: gdb.cp/meth-typedefs.exp: break B::test<my_other_type, my_other_type_2>(const char* const*, int)
+PASS: gdb.cp/meth-typedefs.exp: break 'B::test<my_other_type, my_other_type_2>(const char* const*, int)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(CORE_ADDR (*) [10])
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(CORE_ADDR (*) [10])'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(CORE_ADDR (*) [10])
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(CORE_ADDR (*) [10])'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(unsigned long (*) [10])
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(unsigned long (*) [10])'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(unsigned long (*) [10])
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(unsigned long (*) [10])'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(CORE_ADDR (*) [10])
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(CORE_ADDR (*) [10])'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(CORE_ADDR (*) [10])
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(CORE_ADDR (*) [10])'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(unsigned long (*) [10])
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(unsigned long (*) [10])'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(unsigned long (*) [10])
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(unsigned long (*) [10])'
+PASS: gdb.cp/meth-typedefs.exp: list test(_BAR_&)
+PASS: gdb.cp/meth-typedefs.exp: list 'test(_BAR_&)'
+PASS: gdb.cp/meth-typedefs.exp: break test(_BAR_&)
+PASS: gdb.cp/meth-typedefs.exp: break 'test(_BAR_&)'
+PASS: gdb.cp/meth-typedefs.exp: list test(a::b::BAR&)
+PASS: gdb.cp/meth-typedefs.exp: list 'test(a::b::BAR&)'
+PASS: gdb.cp/meth-typedefs.exp: break test(a::b::BAR&)
+PASS: gdb.cp/meth-typedefs.exp: break 'test(a::b::BAR&)'
+PASS: gdb.cp/meth-typedefs.exp: list test(a::b::c::d::bar&)
+PASS: gdb.cp/meth-typedefs.exp: list 'test(a::b::c::d::bar&)'
+PASS: gdb.cp/meth-typedefs.exp: break test(a::b::c::d::bar&)
+PASS: gdb.cp/meth-typedefs.exp: break 'test(a::b::c::d::bar&)'
+Running ./gdb.cp/minsym-fallback.exp ...
+PASS: gdb.cp/minsym-fallback.exp: set breakpoint pending off
+PASS: gdb.cp/minsym-fallback.exp: break C::f()
+PASS: gdb.cp/minsym-fallback.exp: break C::operator()()
+Running ./gdb.cp/misc.exp ...
+PASS: gdb.cp/misc.exp: deduced language is C++, before full symbols
+PASS: gdb.cp/misc.exp: deduced language is C++, after full symbols
+PASS: gdb.cp/misc.exp: print s.a for foo struct (known gcc 2.7.2 and earlier bug)
+PASS: gdb.cp/misc.exp: print as bool (setup)
+PASS: gdb.cp/misc.exp: print as bool (print 1 == 1)
+PASS: gdb.cp/misc.exp: print as bool (print 1 == 2)
+PASS: gdb.cp/misc.exp: print a bool var
+PASS: gdb.cp/misc.exp: set a bool var (setup)
+PASS: gdb.cp/misc.exp: set a bool var (print v_bool)
+PASS: gdb.cp/misc.exp: print a bool array
+PASS: gdb.cp/misc.exp: set a bool array elem (setup)
+PASS: gdb.cp/misc.exp: set a bool array elem (print v_bool_array)
+PASS: gdb.cp/misc.exp: print true
+PASS: gdb.cp/misc.exp: print false
+PASS: gdb.cp/misc.exp: 1 + true
+PASS: gdb.cp/misc.exp: 3 + false
+PASS: gdb.cp/misc.exp: 1 < 2 < 3
+PASS: gdb.cp/misc.exp: 2 < 1 > 4
+PASS: gdb.cp/misc.exp: (bool)43
+PASS: gdb.cp/misc.exp: (bool)0
+PASS: gdb.cp/misc.exp: (bool)17.93
+PASS: gdb.cp/misc.exp: (bool)0.0
+PASS: gdb.cp/misc.exp: (int)true
+PASS: gdb.cp/misc.exp: (int)false
+Running ./gdb.cp/m-static.exp ...
+PASS: gdb.cp/m-static.exp: continue to breakpoint: end of constructors
+PASS: gdb.cp/m-static.exp: simple object, static const int, accessing via 'class::method::variable
+PASS: gdb.cp/m-static.exp: simple object, static const bool
+PASS: gdb.cp/m-static.exp: simple object, static const int
+PASS: gdb.cp/m-static.exp: simple object, static long
+PASS: gdb.cp/m-static.exp: simple object, static enum
+FAIL: gdb.cp/m-static.exp: simple object instance, print quoted destructor
+FAIL: gdb.cp/m-static.exp: simple object class, ptype quoted destructor
+PASS: gdb.cp/m-static.exp: derived template object, base static const bool
+PASS: gdb.cp/m-static.exp: derived template object, base static const int
+PASS: gdb.cp/m-static.exp: derived template object, base static long
+PASS: gdb.cp/m-static.exp: derived template object, base static enum
+PASS: gdb.cp/m-static.exp: derived template object, static enum
+PASS: gdb.cp/m-static.exp: template object, static const bool
+PASS: gdb.cp/m-static.exp: template object, static const int
+PASS: gdb.cp/m-static.exp: template object, static long
+PASS: gdb.cp/m-static.exp: template object, static enum
+PASS: gdb.cp/m-static.exp: template object, static derived enum
+PASS: gdb.cp/m-static.exp: static const int initialized elsewhere
+PASS: gdb.cp/m-static.exp: static const int initialized nowhere
+PASS: gdb.cp/m-static.exp: static const int initialized in class definition
+PASS: gdb.cp/m-static.exp: static const float initialized in class definition
+PASS: gdb.cp/m-static.exp: info variable everywhere
+PASS: gdb.cp/m-static.exp: step
+PASS: gdb.cp/m-static.exp: print svar
+Running ./gdb.cp/namespace-enum.exp ...
+PASS: gdb.cp/namespace-enum.exp: print foo::B::B_B
+PASS: gdb.cp/namespace-enum.exp: print foo::B_B
+PASS: gdb.cp/namespace-enum.exp: print A_A
+Running ./gdb.cp/namespace.exp ...
+PASS: gdb.cp/namespace.exp: show lang
+PASS: gdb.cp/namespace.exp: up from marker1
+PASS: gdb.cp/namespace.exp: print 'AAA::c'
+PASS: gdb.cp/namespace.exp: print AAA::c
+PASS: gdb.cp/namespace.exp: print ina
+PASS: gdb.cp/namespace.exp: ptype ina
+PASS: gdb.cp/namespace.exp: info func xyzq
+PASS: gdb.cp/namespace.exp: print 'AAA::xyzq'('x')
+PASS: gdb.cp/namespace.exp: print AAA::xyzq('x')
+PASS: gdb.cp/namespace.exp: break AAA::xyzq
+PASS: gdb.cp/namespace.exp: break ::ensureOtherRefs
+PASS: gdb.cp/namespace.exp: print 'BBB::CCC::xyzq'('x')
+PASS: gdb.cp/namespace.exp: print BBB::CCC::xyzq('x')
+PASS: gdb.cp/namespace.exp: break BBB::CCC::xyzq
+PASS: gdb.cp/namespace.exp: break ::BBB::CCC::xyzq
+PASS: gdb.cp/namespace.exp: print 'BBB::Class::xyzq'
+PASS: gdb.cp/namespace.exp: print BBB::Class::xyzq
+PASS: gdb.cp/namespace.exp: break BBB::Class::xyzq
+PASS: gdb.cp/namespace.exp: whatis C::cOtherFileType
+PASS: gdb.cp/namespace.exp: whatis ::C::cOtherFileType
+PASS: gdb.cp/namespace.exp: whatis C::cOtherFileVar
+PASS: gdb.cp/namespace.exp: whatis ::C::cOtherFileVar
+PASS: gdb.cp/namespace.exp: print C::cOtherFileVar
+PASS: gdb.cp/namespace.exp: print ::C::cOtherFileVar
+PASS: gdb.cp/namespace.exp: whatis C::OtherFileClass::cOtherFileClassType
+PASS: gdb.cp/namespace.exp: whatis ::C::OtherFileClass::cOtherFileClassType
+PASS: gdb.cp/namespace.exp: print C::OtherFileClass::cOtherFileClassVar
+PASS: gdb.cp/namespace.exp: print ::cOtherFileClassVar
+PASS: gdb.cp/namespace.exp: print ::C::OtherFileClass::cOtherFileClassVar
+PASS: gdb.cp/namespace.exp: print c
+PASS: gdb.cp/namespace.exp: print cc
+PASS: gdb.cp/namespace.exp: print 'C::cc'
+PASS: gdb.cp/namespace.exp: print C::cc
+PASS: gdb.cp/namespace.exp: print cd
+PASS: gdb.cp/namespace.exp: print C::D::cd
+PASS: gdb.cp/namespace.exp: print 'E::cde'
+PASS: gdb.cp/namespace.exp: print E::cde
+PASS: gdb.cp/namespace.exp: print shadow
+PASS: gdb.cp/namespace.exp: print E::ce
+PASS: gdb.cp/namespace.exp: ptype C
+PASS: gdb.cp/namespace.exp: ptype E
+PASS: gdb.cp/namespace.exp: ptype CClass
+PASS: gdb.cp/namespace.exp: ptype CClass::NestedClass
+PASS: gdb.cp/namespace.exp: ptype NestedClass
+PASS: gdb.cp/namespace.exp: ptype ::C::CClass
+PASS: gdb.cp/namespace.exp: ptype ::C::CClass::NestedClass
+PASS: gdb.cp/namespace.exp: ptype ::C::NestedClass
+PASS: gdb.cp/namespace.exp: ptype C::CClass
+PASS: gdb.cp/namespace.exp: ptype C::CClass::NestedClass
+PASS: gdb.cp/namespace.exp: ptype C::NestedClass
+PASS: gdb.cp/namespace.exp: print cOtherFile
+PASS: gdb.cp/namespace.exp: ptype OtherFileClass
+PASS: gdb.cp/namespace.exp: ptype ::C::OtherFileClass
+PASS: gdb.cp/namespace.exp: ptype C::OtherFileClass
+PASS: gdb.cp/namespace.exp: ptype OtherFileClass typedefs
+PASS: gdb.cp/namespace.exp: ptype ::C::OtherFileClass typedefs
+PASS: gdb.cp/namespace.exp: print cX
+PASS: gdb.cp/namespace.exp: print 'F::cXf'
+PASS: gdb.cp/namespace.exp: print F::cXf
+PASS: gdb.cp/namespace.exp: print F::cXfX
+PASS: gdb.cp/namespace.exp: print X
+PASS: gdb.cp/namespace.exp: print 'G::Xg'
+PASS: gdb.cp/namespace.exp: print G::Xg
+PASS: gdb.cp/namespace.exp: print G::XgX
+PASS: gdb.cp/namespace.exp: print cXOtherFile
+PASS: gdb.cp/namespace.exp: print XOtherFile
+PASS: gdb.cp/namespace.exp: print AAA::ALPHA
+PASS: gdb.cp/namespace.exp: whatis ::C::CClass::NestedClass
+PASS: gdb.cp/namespace.exp: whatis ::C::CClass::NestedClass *
+Running ./gdb.cp/namespace-nested-import.exp ...
+PASS: gdb.cp/namespace-nested-import.exp: print C::x
+Running ./gdb.cp/nextoverthrow.exp ...
+UNSUPPORTED: gdb.cp/nextoverthrow.exp: nextoverthrow.exp could not find _Unwind_DebugHook
+Running ./gdb.cp/no-dmgl-verbose.exp ...
+PASS: gdb.cp/no-dmgl-verbose.exp: set breakpoint pending off
+PASS: gdb.cp/no-dmgl-verbose.exp: DMGL_VERBOSE-demangled f(std::string) is not defined
+Running ./gdb.cp/noparam.exp ...
+PASS: gdb.cp/noparam.exp: p C::m (int)
+Running ./gdb.cp/nsdecl.exp ...
+PASS: gdb.cp/nsdecl.exp: print fakex
+Running ./gdb.cp/nsimport.exp ...
+PASS: gdb.cp/nsimport.exp: print x
+PASS: gdb.cp/nsimport.exp: print xx
+PASS: gdb.cp/nsimport.exp: print xxx
+Running ./gdb.cp/nsnested.exp ...
+PASS: gdb.cp/nsnested.exp: print ab
+PASS: gdb.cp/nsnested.exp: continue to breakpoint: C::first
+PASS: gdb.cp/nsnested.exp: print ab
+PASS: gdb.cp/nsnested.exp: print C::D::ab
+PASS: gdb.cp/nsnested.exp: continue to breakpoint: C::D::second
+PASS: gdb.cp/nsnested.exp: print ab
+Running ./gdb.cp/nsnoimports.exp ...
+PASS: gdb.cp/nsnoimports.exp: print A::_a
+PASS: gdb.cp/nsnoimports.exp: print A::B::ab
+PASS: gdb.cp/nsnoimports.exp: print A::B::C::abc
+PASS: gdb.cp/nsnoimports.exp: print _a
+PASS: gdb.cp/nsnoimports.exp: print ab
+PASS: gdb.cp/nsnoimports.exp: print abc
+PASS: gdb.cp/nsnoimports.exp: continue to breakpoint: A::B::first
+PASS: gdb.cp/nsnoimports.exp: print A::_a
+PASS: gdb.cp/nsnoimports.exp: print A::B::ab
+PASS: gdb.cp/nsnoimports.exp: print A::B::C::abc
+PASS: gdb.cp/nsnoimports.exp: print _a
+PASS: gdb.cp/nsnoimports.exp: print ab
+PASS: gdb.cp/nsnoimports.exp: print C::abc
+PASS: gdb.cp/nsnoimports.exp: print abc
+PASS: gdb.cp/nsnoimports.exp: continue to breakpoint: A::B::C::second
+PASS: gdb.cp/nsnoimports.exp: print A::_a
+PASS: gdb.cp/nsnoimports.exp: print A::B::ab
+PASS: gdb.cp/nsnoimports.exp: print A::B::C::abc
+PASS: gdb.cp/nsnoimports.exp: print _a
+PASS: gdb.cp/nsnoimports.exp: print ab
+PASS: gdb.cp/nsnoimports.exp: print abc
+Running ./gdb.cp/nsrecurs.exp ...
+PASS: gdb.cp/nsrecurs.exp: print ax
+PASS: gdb.cp/nsrecurs.exp: print dx
+PASS: gdb.cp/nsrecurs.exp: print xx
+KFAIL: gdb.cp/nsrecurs.exp: ptype G::GF (PRMS: gdb/10541)
+KFAIL: gdb.cp/nsrecurs.exp: print G::GF::FE::ex (PRMS: gdb/10541)
+Running ./gdb.cp/nsstress.exp ...
+PASS: gdb.cp/nsstress.exp: print y
+Running ./gdb.cp/nsusing.exp ...
+PASS: gdb.cp/nsusing.exp: print _a
+PASS: gdb.cp/nsusing.exp: continue to breakpoint: marker3
+PASS: gdb.cp/nsusing.exp: Print _a without import
+PASS: gdb.cp/nsusing.exp: continue to breakpoint: marker1 stop
+PASS: gdb.cp/nsusing.exp: print _a in a nested scope
+PASS: gdb.cp/nsusing.exp: print cc
+PASS: gdb.cp/nsusing.exp: print B::_a
+PASS: gdb.cp/nsusing.exp: print _a in namespace alias scope
+PASS: gdb.cp/nsusing.exp: print x in namespace alias scope
+PASS: gdb.cp/nsusing.exp: Print _a without import
+PASS: gdb.cp/nsusing.exp: print dx
+PASS: gdb.cp/nsusing.exp: print efx
+PASS: gdb.cp/nsusing.exp: print ghx
+PASS: gdb.cp/nsusing.exp: print jx
+PASS: gdb.cp/nsusing.exp: continue to breakpoint: K::marker9
+PASS: gdb.cp/nsusing.exp: print jx
+PASS: gdb.cp/nsusing.exp: continue to breakpoint: marker10 stop
+PASS: gdb.cp/nsusing.exp: print x (from M::x)
+Running ./gdb.cp/operator.exp ...
+PASS: gdb.cp/operator.exp: global operator
+PASS: gdb.cp/operator.exp: global operator overload
+PASS: gdb.cp/operator.exp: ADL operator
+PASS: gdb.cp/operator.exp: ADL operator overload
+PASS: gdb.cp/operator.exp: Fully qualified explicit operator call
+PASS: gdb.cp/operator.exp: anonymous namespace operator
+PASS: gdb.cp/operator.exp: anonymous namespace operator overload
+PASS: gdb.cp/operator.exp: anonymous namespace operator overload float
+PASS: gdb.cp/operator.exp: imported operator
+PASS: gdb.cp/operator.exp: imported operator overload
+PASS: gdb.cp/operator.exp: imported operator overload float
+PASS: gdb.cp/operator.exp: member operator
+PASS: gdb.cp/operator.exp: member operator overload
+PASS: gdb.cp/operator.exp: namespace alias
+PASS: gdb.cp/operator.exp: imported declaration
+PASS: gdb.cp/operator.exp: p l == 1
+PASS: gdb.cp/operator.exp: p x[0]
+Running ./gdb.cp/oranking.exp ...
+PASS: gdb.cp/oranking.exp: continue to breakpoint: end of main
+KFAIL: gdb.cp/oranking.exp: p foo0(b) (PRMS: gdb/12096)
+PASS: gdb.cp/oranking.exp: p test1()
+PASS: gdb.cp/oranking.exp: p foo1(b)
+PASS: gdb.cp/oranking.exp: p test2()
+KFAIL: gdb.cp/oranking.exp: p foo2(b) (PRMS: gdb/12098)
+PASS: gdb.cp/oranking.exp: p test3()
+PASS: gdb.cp/oranking.exp: p foo3(1.0f)
+PASS: gdb.cp/oranking.exp: p test4()
+KFAIL: gdb.cp/oranking.exp: p foo4(&a) (PRMS: gdb/12098)
+PASS: gdb.cp/oranking.exp: p test5()
+PASS: gdb.cp/oranking.exp: p foo5(c)
+PASS: gdb.cp/oranking.exp: p test6()
+PASS: gdb.cp/oranking.exp: p foo6(bp)
+PASS: gdb.cp/oranking.exp: p test7()
+PASS: gdb.cp/oranking.exp: p foo7(cp)
+PASS: gdb.cp/oranking.exp: p test8()
+PASS: gdb.cp/oranking.exp: p foo8(co)
+PASS: gdb.cp/oranking.exp: p test9()
+PASS: gdb.cp/oranking.exp: p foo9(co)
+PASS: gdb.cp/oranking.exp: p test10()
+KFAIL: gdb.cp/oranking.exp: p foo10(amp) (PRMS: gdb/12098)
+PASS: gdb.cp/oranking.exp: p test101()
+KFAIL: gdb.cp/oranking.exp: p foo101("abc") (PRMS: gdb/12098)
+PASS: gdb.cp/oranking.exp: p test11()
+KFAIL: gdb.cp/oranking.exp: p foo11(d) (PRMS: gdb/12096)
+PASS: gdb.cp/oranking.exp: p test12()
+PASS: gdb.cp/oranking.exp: p foo12(1)
+PASS: gdb.cp/oranking.exp: p test13()
+KFAIL: gdb.cp/oranking.exp: p foo13(c) (PRMS: gdb/12098)
+PASS: gdb.cp/oranking.exp: p test14()
+KFAIL: gdb.cp/oranking.exp: p foo14(e) (PRMS: gdb/12096)
+Running ./gdb.cp/overload-const.exp ...
+PASS: gdb.cp/overload-const.exp: set language c++
+PASS: gdb.cp/overload-const.exp: setting breakpoint at myclass::func
+Running ./gdb.cp/overload.exp ...
+PASS: gdb.cp/overload.exp: up from marker1
+PASS: gdb.cp/overload.exp: print foo_instance1
+PASS: gdb.cp/overload.exp: ptype foo_instance1 (shorter match)
+PASS: gdb.cp/overload.exp: print foo_instance2
+PASS: gdb.cp/overload.exp: print foo_instance3
+PASS: gdb.cp/overload.exp: print call overloaded func 1 arg
+PASS: gdb.cp/overload.exp: re-selected 'main' frame after inferior call
+PASS: gdb.cp/overload.exp: print call overloaded func 2 args
+PASS: gdb.cp/overload.exp: print call overloaded func 3 args
+PASS: gdb.cp/overload.exp: print call overloaded func 4 args
+PASS: gdb.cp/overload.exp: print call overloaded func 5 args
+PASS: gdb.cp/overload.exp: print call overloaded func 6 args
+PASS: gdb.cp/overload.exp: print call overloaded func 7 args
+PASS: gdb.cp/overload.exp: print call overloaded func 8 args
+PASS: gdb.cp/overload.exp: print call overloaded func 9 args
+PASS: gdb.cp/overload.exp: print call overloaded func 10 args
+PASS: gdb.cp/overload.exp: print call overloaded func 11 args
+PASS: gdb.cp/overload.exp: print call overloaded func void arg
+PASS: gdb.cp/overload.exp: print call overloaded func char arg
+PASS: gdb.cp/overload.exp: print call overloaded func signed char arg
+PASS: gdb.cp/overload.exp: print call overloaded func unsigned char arg
+PASS: gdb.cp/overload.exp: print call overloaded func short arg
+PASS: gdb.cp/overload.exp: print call overloaded func unsigned short arg
+PASS: gdb.cp/overload.exp: print call overloaded func int arg
+PASS: gdb.cp/overload.exp: print call overloaded func unsigned int arg
+PASS: gdb.cp/overload.exp: print call overloaded func long arg
+PASS: gdb.cp/overload.exp: print call overloaded func unsigned long arg
+PASS: gdb.cp/overload.exp: print call overloaded func float arg
+PASS: gdb.cp/overload.exp: print call overloaded func double arg
+PASS: gdb.cp/overload.exp: print call overloaded func int\* arg
+PASS: gdb.cp/overload.exp: print call overloaded func char\* arg
+PASS: gdb.cp/overload.exp: print bar(a)
+PASS: gdb.cp/overload.exp: print bar(b)
+PASS: gdb.cp/overload.exp: print bar(c)
+PASS: gdb.cp/overload.exp: print bar(d)
+PASS: gdb.cp/overload.exp: list overloaded function with no args
+PASS: gdb.cp/overload.exp: list overloaded function with int arg
+PASS: gdb.cp/overload.exp: list overloaded function with function ptr args
+PASS: gdb.cp/overload.exp: list overloaded function with function ptr args - quotes around argument
+PASS: gdb.cp/overload.exp: list overload.cc:intToChar
+PASS: gdb.cp/overload.exp: list overload.cc:intToChar(char)
+PASS: gdb.cp/overload.exp: list overload.cc:'intToChar(char)'
+PASS: gdb.cp/overload.exp: list 'overload.cc:intToChar(char)'
+PASS: gdb.cp/overload.exp: list 'overload.cc':intToChar(char)
+PASS: gdb.cp/overload.exp: list 'overload.cc':'intToChar(char)'
+PASS: gdb.cp/overload.exp: list overload.cc:foo::overloadfnarg(int)
+PASS: gdb.cp/overload.exp: list overload.cc:'foo::overloadfnarg(int)'
+PASS: gdb.cp/overload.exp: print overloadNamespace(1)
+PASS: gdb.cp/overload.exp: print overloadNamespace('a')
+PASS: gdb.cp/overload.exp: print overloadNamespace(dummyInstance)
+PASS: gdb.cp/overload.exp: print K::staticoverload ()
+PASS: gdb.cp/overload.exp: print K::staticoverload (2)
+PASS: gdb.cp/overload.exp: print K::staticoverload (2, 3)
+PASS: gdb.cp/overload.exp: print N::nsoverload ()
+PASS: gdb.cp/overload.exp: print N::nsoverload (2)
+PASS: gdb.cp/overload.exp: print N::nsoverload (2, 3)
+PASS: gdb.cp/overload.exp: print overloadNamespace(1) in XXX
+PASS: gdb.cp/overload.exp: print overloadNamespace('a') in XXX
+PASS: gdb.cp/overload.exp: print overloadNamespace(dummyInstance) in XXX
+PASS: gdb.cp/overload.exp: print intToChar(1)
+PASS: gdb.cp/overload.exp: print foo::overload1arg
+PASS: gdb.cp/overload.exp: print foo::overload1arg(char***)
+PASS: gdb.cp/overload.exp: print foo::overload1arg(void)
+PASS: gdb.cp/overload.exp: print foo::overload1arg(char)
+PASS: gdb.cp/overload.exp: print foo::overload1arg(signed char)
+PASS: gdb.cp/overload.exp: print foo::overload1arg(unsigned char)
+PASS: gdb.cp/overload.exp: print foo::overload1arg(short)
+PASS: gdb.cp/overload.exp: print foo::overload1arg(unsigned short)
+PASS: gdb.cp/overload.exp: print foo::overload1arg(int)
+PASS: gdb.cp/overload.exp: print foo::overload1arg(unsigned int)
+PASS: gdb.cp/overload.exp: print foo::overload1arg(long)
+PASS: gdb.cp/overload.exp: print foo::overload1arg(unsigned long)
+PASS: gdb.cp/overload.exp: print foo::overload1arg(float)
+PASS: gdb.cp/overload.exp: print foo::overload1arg(double)
+Running ./gdb.cp/ovldbreak.exp ...
+PASS: gdb.cp/ovldbreak.exp: detect void
+PASS: gdb.cp/ovldbreak.exp: detect char
+PASS: gdb.cp/ovldbreak.exp: detect signed_char
+PASS: gdb.cp/ovldbreak.exp: detect unsigned_char
+PASS: gdb.cp/ovldbreak.exp: detect short_int
+PASS: gdb.cp/ovldbreak.exp: detect unsigned_short_int
+PASS: gdb.cp/ovldbreak.exp: detect int
+PASS: gdb.cp/ovldbreak.exp: detect unsigned_int
+PASS: gdb.cp/ovldbreak.exp: detect long_int
+PASS: gdb.cp/ovldbreak.exp: detect unsigned_long_int
+PASS: gdb.cp/ovldbreak.exp: detect float
+PASS: gdb.cp/ovldbreak.exp: detect double
+PASS: gdb.cp/ovldbreak.exp: set multiple-symbols ask
+PASS: gdb.cp/ovldbreak.exp: bp menu for foo::overload1arg choice 2
+PASS: gdb.cp/ovldbreak.exp: set bp 2 on foo::overload1arg 2 line 107
+PASS: gdb.cp/ovldbreak.exp: bp menu for foo::overload1arg choice 3
+PASS: gdb.cp/ovldbreak.exp: set bp 3 on foo::overload1arg 3 line 110
+PASS: gdb.cp/ovldbreak.exp: bp menu for foo::overload1arg choice 4
+PASS: gdb.cp/ovldbreak.exp: set bp 4 on foo::overload1arg 4 line 140
+PASS: gdb.cp/ovldbreak.exp: bp menu for foo::overload1arg choice 5
+PASS: gdb.cp/ovldbreak.exp: set bp 5 on foo::overload1arg 5 line 137
+PASS: gdb.cp/ovldbreak.exp: bp menu for foo::overload1arg choice 6
+PASS: gdb.cp/ovldbreak.exp: set bp 6 on foo::overload1arg 6 line 125
+PASS: gdb.cp/ovldbreak.exp: bp menu for foo::overload1arg choice 7
+PASS: gdb.cp/ovldbreak.exp: set bp 7 on foo::overload1arg 7 line 131
+PASS: gdb.cp/ovldbreak.exp: bp menu for foo::overload1arg choice 8
+PASS: gdb.cp/ovldbreak.exp: set bp 8 on foo::overload1arg 8 line 119
+PASS: gdb.cp/ovldbreak.exp: bp menu for foo::overload1arg choice 9
+PASS: gdb.cp/ovldbreak.exp: set bp 9 on foo::overload1arg 9 line 113
+PASS: gdb.cp/ovldbreak.exp: bp menu for foo::overload1arg choice 10
+PASS: gdb.cp/ovldbreak.exp: set bp 10 on foo::overload1arg 10 line 116
+PASS: gdb.cp/ovldbreak.exp: bp menu for foo::overload1arg choice 11
+PASS: gdb.cp/ovldbreak.exp: set bp 11 on foo::overload1arg 11 line 128
+PASS: gdb.cp/ovldbreak.exp: bp menu for foo::overload1arg choice 12
+PASS: gdb.cp/ovldbreak.exp: set bp 12 on foo::overload1arg 12 line 134
+PASS: gdb.cp/ovldbreak.exp: bp menu for foo::overload1arg choice 13
+PASS: gdb.cp/ovldbreak.exp: set bp 13 on foo::overload1arg 13 line 122
+PASS: gdb.cp/ovldbreak.exp: breakpoint info (after setting one-by-one)
+PASS: gdb.cp/ovldbreak.exp: bp menu for foo::overload1arg choice cancel
+PASS: gdb.cp/ovldbreak.exp: set bp on overload1arg canceled
+PASS: gdb.cp/ovldbreak.exp: breakpoint info (after cancel)
+PASS: gdb.cp/ovldbreak.exp: delete all breakpoints
+PASS: gdb.cp/ovldbreak.exp: breakpoint info (after delete)
+PASS: gdb.cp/ovldbreak.exp: bp menu for foo::overload1arg choice all
+PASS: gdb.cp/ovldbreak.exp: set bp on overload1arg all
+PASS: gdb.cp/ovldbreak.exp: breakpoint info (after setting on all)
+PASS: gdb.cp/ovldbreak.exp: continue to bp overloaded : void
+PASS: gdb.cp/ovldbreak.exp: continue to bp overloaded : char
+PASS: gdb.cp/ovldbreak.exp: continue to bp overloaded : signed_char
+PASS: gdb.cp/ovldbreak.exp: continue to bp overloaded : unsigned_char
+PASS: gdb.cp/ovldbreak.exp: continue to bp overloaded : short_int
+PASS: gdb.cp/ovldbreak.exp: continue to bp overloaded : unsigned_short_int
+PASS: gdb.cp/ovldbreak.exp: continue to bp overloaded : int
+PASS: gdb.cp/ovldbreak.exp: continue to bp overloaded : unsigned_int
+PASS: gdb.cp/ovldbreak.exp: continue to bp overloaded : long_int
+PASS: gdb.cp/ovldbreak.exp: continue to bp overloaded : unsigned_long_int
+PASS: gdb.cp/ovldbreak.exp: continue to bp overloaded : float
+PASS: gdb.cp/ovldbreak.exp: continue to bp overloaded : double
+PASS: gdb.cp/ovldbreak.exp: set multiple-symbols cancel
+PASS: gdb.cp/ovldbreak.exp: break foo::foofunc
+PASS: gdb.cp/ovldbreak.exp: set multiple-symbols all
+PASS: gdb.cp/ovldbreak.exp: break foo::foofunc
+PASS: gdb.cp/ovldbreak.exp: continue until exit at finish program
+Running ./gdb.cp/ovsrch.exp ...
+PASS: gdb.cp/ovsrch.exp: break A::stop_here
+PASS: gdb.cp/ovsrch.exp: break 'A::stop_here'
+PASS: gdb.cp/ovsrch.exp: continue to breakpoint: stop_here
+PASS: gdb.cp/ovsrch.exp: break A::outer::foo (char*) const
+PASS: gdb.cp/ovsrch.exp: break 'A::outer::foo (char*) const'
+PASS: gdb.cp/ovsrch.exp: break A::outer::foo (char*) const if (a_param == 3)
+PASS: gdb.cp/ovsrch.exp: break 'A::outer::foo (char*) const' if (a_param == 3)
+PASS: gdb.cp/ovsrch.exp: break A::outer::foo (char*) const if (A::outer::func ())
+PASS: gdb.cp/ovsrch.exp: break 'A::outer::foo (char*) const' if (A::outer::func ())
+PASS: gdb.cp/ovsrch.exp: break A::outer::foo (void) const
+PASS: gdb.cp/ovsrch.exp: break 'A::outer::foo (void) const'
+PASS: gdb.cp/ovsrch.exp: break A::outer::foo (int) const
+PASS: gdb.cp/ovsrch.exp: break 'A::outer::foo (int) const'
+PASS: gdb.cp/ovsrch.exp: break A::outer::foo (int) const if (a_param == 3)
+PASS: gdb.cp/ovsrch.exp: break 'A::outer::foo (int) const' if (a_param == 3)
+PASS: gdb.cp/ovsrch.exp: break A::outer::foo (int) const if (A::outer::func ())
+PASS: gdb.cp/ovsrch.exp: break 'A::outer::foo (int) const' if (A::outer::func ())
+PASS: gdb.cp/ovsrch.exp: break A::outer::hibob if (a_param == 3)
+PASS: gdb.cp/ovsrch.exp: break A::B::stop_here_too
+PASS: gdb.cp/ovsrch.exp: break 'A::B::stop_here_too'
+PASS: gdb.cp/ovsrch.exp: continue to breakpoint: stop_here_too
+PASS: gdb.cp/ovsrch.exp: break A::B::inner::foo (char*) const
+PASS: gdb.cp/ovsrch.exp: break 'A::B::inner::foo (char*) const'
+PASS: gdb.cp/ovsrch.exp: break A::B::inner::foo (char*) const if (a_param == 3)
+PASS: gdb.cp/ovsrch.exp: break 'A::B::inner::foo (char*) const' if (a_param == 3)
+PASS: gdb.cp/ovsrch.exp: break A::B::inner::foo (char*) const if (A::outer::func ())
+PASS: gdb.cp/ovsrch.exp: break 'A::B::inner::foo (char*) const' if (A::outer::func ())
+PASS: gdb.cp/ovsrch.exp: break A::B::inner::foo (void) const
+PASS: gdb.cp/ovsrch.exp: break 'A::B::inner::foo (void) const'
+PASS: gdb.cp/ovsrch.exp: break A::B::inner::foo (int) const
+PASS: gdb.cp/ovsrch.exp: break 'A::B::inner::foo (int) const'
+PASS: gdb.cp/ovsrch.exp: break A::B::inner::foo (int) const if (a_param == 3)
+PASS: gdb.cp/ovsrch.exp: break 'A::B::inner::foo (int) const' if (a_param == 3)
+PASS: gdb.cp/ovsrch.exp: break A::B::inner::foo (int) const if (A::outer::func ())
+PASS: gdb.cp/ovsrch.exp: break 'A::B::inner::foo (int) const' if (A::outer::func ())
+PASS: gdb.cp/ovsrch.exp: break A::B::inner::hibob if (a_param == 3)
+Running ./gdb.cp/paren-type.exp ...
+PASS: gdb.cp/paren-type.exp: set breakpoint pending off
+PASS: gdb.cp/paren-type.exp: break C::f(long)
+PASS: gdb.cp/paren-type.exp: break C::f(short)
+Running ./gdb.cp/parse-lang.exp ...
+PASS: gdb.cp/parse-lang.exp: breakpoint hit
+Running ./gdb.cp/pass-by-ref.exp ...
+PASS: gdb.cp/pass-by-ref.exp: call function in obj
+PASS: gdb.cp/pass-by-ref.exp: call function in derived
+PASS: gdb.cp/pass-by-ref.exp: call function in container
+Running ./gdb.cp/pr-1023.exp ...
+PASS: gdb.cp/pr-1023.exp: break myClass::performBlocking
+PASS: gdb.cp/pr-1023.exp: break myClass::performUnblocking
+Running ./gdb.cp/pr10687.exp ...
+PASS: gdb.cp/pr10687.exp: continue to breakpoint: marker
+PASS: gdb.cp/pr10687.exp: p a
+Running ./gdb.cp/pr10728.exp ...
+PASS: gdb.cp/pr10728.exp: continue to breakpoint: marker 1
+PASS: gdb.cp/pr10728.exp: print x->y2 - x->y1
+Running ./gdb.cp/pr12028.exp ...
+PASS: gdb.cp/pr12028.exp: p D::foo(b)
+Running ./gdb.cp/pr-1210.exp ...
+PASS: gdb.cp/pr-1210.exp: step past initialization
+PASS: gdb.cp/pr-1210.exp: print *obj
+PASS: gdb.cp/pr-1210.exp: print obj->myB
+Running ./gdb.cp/pr-574.exp ...
+PASS: gdb.cp/pr-574.exp: continue to breakpoint: end of constructors
+PASS: gdb.cp/pr-574.exp: PR gdb/574
+Running ./gdb.cp/pr9067.exp ...
+PASS: gdb.cp/pr9067.exp: print b
+Running ./gdb.cp/pr9167.exp ...
+PASS: gdb.cp/pr9167.exp: continue to breakpoint: marker
+PASS: gdb.cp/pr9167.exp: p b
+Running ./gdb.cp/pr9631.exp ...
+PASS: gdb.cp/pr9631.exp: continue to breakpoint: after bar tender is initialized
+PASS: gdb.cp/pr9631.exp: print tender
+Running ./gdb.cp/printmethod.exp ...
+PASS: gdb.cp/printmethod.exp: continue to breakpoint: end of constructors
+PASS: gdb.cp/printmethod.exp: print virtual method.
+PASS: gdb.cp/printmethod.exp: print nonvirtual method.
+Running ./gdb.cp/psmang.exp ...
+PASS: gdb.cp/psmang.exp: break s::method1
+PASS: gdb.cp/psmang.exp: break s::method2
+Running ./gdb.cp/psymtab-parameter.exp ...
+PASS: gdb.cp/psymtab-parameter.exp: set language c++
+PASS: gdb.cp/psymtab-parameter.exp: maintenance info symtabs
+PASS: gdb.cp/psymtab-parameter.exp: complete p 'func<short>(
+Running ./gdb.cp/ptype-cv-cp.exp ...
+PASS: gdb.cp/ptype-cv-cp.exp: whatis v_my_int
+PASS: gdb.cp/ptype-cv-cp.exp: ptype v_my_int
+PASS: gdb.cp/ptype-cv-cp.exp: whatis v_const_my_int
+PASS: gdb.cp/ptype-cv-cp.exp: ptype v_const_my_int
+PASS: gdb.cp/ptype-cv-cp.exp: whatis v_volatile_my_int
+PASS: gdb.cp/ptype-cv-cp.exp: ptype v_volatile_my_int
+PASS: gdb.cp/ptype-cv-cp.exp: whatis v_const_volatile_my_int
+PASS: gdb.cp/ptype-cv-cp.exp: ptype v_const_volatile_my_int
+PASS: gdb.cp/ptype-cv-cp.exp: whatis v_volatile_const_my_int
+PASS: gdb.cp/ptype-cv-cp.exp: ptype v_volatile_const_my_int
+Running ./gdb.cp/ptype-flags.exp ...
+PASS: gdb.cp/ptype-flags.exp: basic test
+PASS: gdb.cp/ptype-flags.exp: no methods
+PASS: gdb.cp/ptype-flags.exp: no typedefs
+PASS: gdb.cp/ptype-flags.exp: no methods or typedefs
+PASS: gdb.cp/ptype-flags.exp: raw
+PASS: gdb.cp/ptype-flags.exp: raw no methods
+PASS: gdb.cp/ptype-flags.exp: raw no typedefs
+PASS: gdb.cp/ptype-flags.exp: raw no methods or typedefs
+PASS: gdb.cp/ptype-flags.exp: set print type methods off
+PASS: gdb.cp/ptype-flags.exp: basic test, default methods off
+PASS: gdb.cp/ptype-flags.exp: methods, default methods off
+PASS: gdb.cp/ptype-flags.exp: no typedefs, default methods off
+PASS: gdb.cp/ptype-flags.exp: methods, no typedefs, default methods off
+PASS: gdb.cp/ptype-flags.exp: set print type typedefs off
+PASS: gdb.cp/ptype-flags.exp: basic test, default methods+typedefs off
+PASS: gdb.cp/ptype-flags.exp: methods, default methods+typedefs off
+PASS: gdb.cp/ptype-flags.exp: typedefs, default methods+typedefs off
+PASS: gdb.cp/ptype-flags.exp: methods typedefs, default methods+typedefs off
+Running ./gdb.cp/punctuator.exp ...
+PASS: gdb.cp/punctuator.exp: set lang c++
+PASS: gdb.cp/punctuator.exp: print (0x5a5a bitand 0xaaaa) == (0x5a5a & 0xaaaa)
+PASS: gdb.cp/punctuator.exp: print (0x5a5a bitor 0xaaaa) == (0x5a5a | 0xaaaa)
+PASS: gdb.cp/punctuator.exp: print (0x5a5a xor 0xaaaa) == (0x5a5a ^ 0xaaaa)
+PASS: gdb.cp/punctuator.exp: print (0x5a5a and 0xaaaa) == (0x5a5a && 0xaaaa)
+PASS: gdb.cp/punctuator.exp: print (0x5a5a or 0xaaaa) == (0x5a5a || 0xaaaa)
+PASS: gdb.cp/punctuator.exp: print (not not 0xaaaa) == (!!0xaaaa)
+PASS: gdb.cp/punctuator.exp: print (compl 0xaaaa) == (~0xaaaa)
+PASS: gdb.cp/punctuator.exp: set $u 1
+PASS: gdb.cp/punctuator.exp: set $v 1
+PASS: gdb.cp/punctuator.exp: print ($u not_eq 0xaaaa) == ($v != 0xaaaa)
+PASS: gdb.cp/punctuator.exp: print ($u and_eq 0xaaaa) == ($v &= 0xaaaa)
+PASS: gdb.cp/punctuator.exp: set $u 2
+PASS: gdb.cp/punctuator.exp: set $v 2
+PASS: gdb.cp/punctuator.exp: print ($u or_eq 0xaaaa) == ($v |= 0xaaaa)
+PASS: gdb.cp/punctuator.exp: set $u 3
+PASS: gdb.cp/punctuator.exp: set $v 3
+PASS: gdb.cp/punctuator.exp: print ($u xor_eq 0xaaaa) == ($v ^= 0xaaaa)
+Running ./gdb.cp/readnow-language.exp ...
+PASS: gdb.cp/readnow-language.exp: show language
+Running ./gdb.cp/ref-params.exp ...
+PASS: gdb.cp/ref-params.exp: print value of a Child in main
+PASS: gdb.cp/ref-params.exp: print value of f1 on Child in main
+PASS: gdb.cp/ref-params.exp: print value of f2 on Child in main
+PASS: gdb.cp/ref-params.exp: print value of f1 on (Child&) in main
+PASS: gdb.cp/ref-params.exp: print value of f2 on (Child&) in main
+PASS: gdb.cp/ref-params.exp: print value of Child& in f2
+PASS: gdb.cp/ref-params.exp: print value of f1 on Child& in f2
+PASS: gdb.cp/ref-params.exp: print value of Parent& in f1
+PASS: gdb.cp/ref-params.exp: print f1(MQ)
+PASS: gdb.cp/ref-params.exp: print mf1(MQ)
+PASS: gdb.cp/ref-params.exp: print mf2(MQ)
+PASS: gdb.cp/ref-params.exp: print f1(MQR)
+PASS: gdb.cp/ref-params.exp: print mf1(MQR)
+PASS: gdb.cp/ref-params.exp: print mf2(MQR)
+Running ./gdb.cp/ref-types.exp ...
+PASS: gdb.cp/ref-types.exp: up from marker1 1
+PASS: gdb.cp/ref-types.exp: print value of s
+PASS: gdb.cp/ref-types.exp: ptype s
+PASS: gdb.cp/ref-types.exp: print value of ps
+PASS: gdb.cp/ref-types.exp: ptype ps
+PASS: gdb.cp/ref-types.exp: print value of as[0]
+PASS: gdb.cp/ref-types.exp: ptype as
+PASS: gdb.cp/ref-types.exp: print value of as[1]
+PASS: gdb.cp/ref-types.exp: print value of as[2]
+PASS: gdb.cp/ref-types.exp: print value of as[3]
+PASS: gdb.cp/ref-types.exp: print value of rs
+PASS: gdb.cp/ref-types.exp: ptype rs
+PASS: gdb.cp/ref-types.exp: print value of *rps
+PASS: gdb.cp/ref-types.exp: examine value at rps
+PASS: gdb.cp/ref-types.exp: ptype rps
+PASS: gdb.cp/ref-types.exp: print value of ras[0]
+PASS: gdb.cp/ref-types.exp: ptype ras
+PASS: gdb.cp/ref-types.exp: print value of ras[1]
+PASS: gdb.cp/ref-types.exp: print value of ras[2]
+PASS: gdb.cp/ref-types.exp: print value of ras[3]
+PASS: gdb.cp/ref-types.exp: up from f
+PASS: gdb.cp/ref-types.exp: print value of C
+PASS: gdb.cp/ref-types.exp: ptype C
+PASS: gdb.cp/ref-types.exp: print value of UC
+PASS: gdb.cp/ref-types.exp: ptype UC
+PASS: gdb.cp/ref-types.exp: print value of S
+PASS: gdb.cp/ref-types.exp: ptype S
+PASS: gdb.cp/ref-types.exp: print value of US
+PASS: gdb.cp/ref-types.exp: ptype US
+PASS: gdb.cp/ref-types.exp: print value of I
+PASS: gdb.cp/ref-types.exp: ptype I
+PASS: gdb.cp/ref-types.exp: print value of UI
+PASS: gdb.cp/ref-types.exp: ptype UI
+PASS: gdb.cp/ref-types.exp: print value of L
+PASS: gdb.cp/ref-types.exp: ptype L
+PASS: gdb.cp/ref-types.exp: print value of UL
+PASS: gdb.cp/ref-types.exp: ptype UL
+PASS: gdb.cp/ref-types.exp: print value of F
+PASS: gdb.cp/ref-types.exp: ptype F
+PASS: gdb.cp/ref-types.exp: print value of D
+PASS: gdb.cp/ref-types.exp: ptype D
+PASS: gdb.cp/ref-types.exp: ptype rC
+PASS: gdb.cp/ref-types.exp: ptype rUC
+PASS: gdb.cp/ref-types.exp: ptype rS
+PASS: gdb.cp/ref-types.exp: ptype rUS
+PASS: gdb.cp/ref-types.exp: ptype rI
+PASS: gdb.cp/ref-types.exp: ptype rUI
+PASS: gdb.cp/ref-types.exp: ptype rL
+PASS: gdb.cp/ref-types.exp: ptype rUL
+PASS: gdb.cp/ref-types.exp: ptype rF
+PASS: gdb.cp/ref-types.exp: ptype rD
+PASS: gdb.cp/ref-types.exp: print value of rC
+PASS: gdb.cp/ref-types.exp: print value of rUC
+PASS: gdb.cp/ref-types.exp: print value of rS
+PASS: gdb.cp/ref-types.exp: print value of rUS
+PASS: gdb.cp/ref-types.exp: print value of rI
+PASS: gdb.cp/ref-types.exp: print value of UI
+PASS: gdb.cp/ref-types.exp: print value of rL
+PASS: gdb.cp/ref-types.exp: print value of rUL
+PASS: gdb.cp/ref-types.exp: print value of rF
+PASS: gdb.cp/ref-types.exp: print value of rD
+Running ./gdb.cp/re-set-overloaded.exp ...
+PASS: gdb.cp/re-set-overloaded.exp: set breakpoint pending yes
+PASS: gdb.cp/re-set-overloaded.exp: break C::C
+PASS: gdb.cp/re-set-overloaded.exp: set variable $brk = $bpnum
+PASS: gdb.cp/re-set-overloaded.exp: start
+PASS: gdb.cp/re-set-overloaded.exp: breakpoint resolved
+Running ./gdb.cp/rtti.exp ...
+PASS: gdb.cp/rtti.exp: continue to breakpoint: end of constructors in main
+PASS: gdb.cp/rtti.exp: print *e1
+PASS: gdb.cp/rtti.exp: print *e2
+PASS: gdb.cp/rtti.exp: continue to breakpoint: end of constructors in func
+PASS: gdb.cp/rtti.exp: print *obj
+PASS: gdb.cp/rtti.exp: continue to breakpoint: end of constructors in func3
+PASS: gdb.cp/rtti.exp: print *obj3
+Running ./gdb.cp/shadow.exp ...
+PASS: gdb.cp/shadow.exp: continue to breakpoint: marker1
+PASS: gdb.cp/shadow.exp: Print class x shadowing global x
+PASS: gdb.cp/shadow.exp: continue to breakpoint: marker2
+PASS: gdb.cp/shadow.exp: Print local x shadowing class x
+PASS: gdb.cp/shadow.exp: continue to breakpoint: marker3
+PASS: gdb.cp/shadow.exp: Print inner scope x
+PASS: gdb.cp/shadow.exp: continue to breakpoint: marker4
+PASS: gdb.cp/shadow.exp: Print local x not namespace x
+PASS: gdb.cp/shadow.exp: continue to breakpoint: marker5
+PASS: gdb.cp/shadow.exp: Print imported namespace x
+Running ./gdb.cp/smartp.exp ...
+PASS: gdb.cp/smartp.exp: continue to breakpoint: end of main
+PASS: gdb.cp/smartp.exp: p mp->foo()
+PASS: gdb.cp/smartp.exp: p mtp->foo()
+PASS: gdb.cp/smartp.exp: p mt1.foo()
+PASS: gdb.cp/smartp.exp: p mt4p.a
+PASS: gdb.cp/smartp.exp: p mt4->a
+PASS: gdb.cp/smartp.exp: p sp1->foo()
+PASS: gdb.cp/smartp.exp: p sp2->foo()
+PASS: gdb.cp/smartp.exp: p sp3->foo(1)
+PASS: gdb.cp/smartp.exp: p sp3->foo('a')
+PASS: gdb.cp/smartp.exp: p sp4->a
+PASS: gdb.cp/smartp.exp: p sp4->b
+PASS: gdb.cp/smartp.exp: p mt4p->a
+PASS: gdb.cp/smartp.exp: p mt4p->b
+PASS: gdb.cp/smartp.exp: p mt4->fake
+PASS: gdb.cp/smartp.exp: p mt4->fake()
+PASS: gdb.cp/smartp.exp: p b->foo()
+PASS: gdb.cp/smartp.exp: p c->foo()
+PASS: gdb.cp/smartp.exp: p c->inta
+KFAIL: gdb.cp/smartp.exp: p c2->inta (PRMS: gdb/11606)
+Running ./gdb.cp/static-method.exp ...
+PASS: gdb.cp/static-method.exp: info addr A::func()
+PASS: gdb.cp/static-method.exp: list static-method.cc:xxx::(anonymous namespace)::func
+PASS: gdb.cp/static-method.exp: list 'static-method.cc:xxx::(anonymous namespace)::func'
+PASS: gdb.cp/static-method.exp: list 'static-method.cc':'xxx::(anonymous namespace)::func'
+PASS: gdb.cp/static-method.exp: list static-method.cc:'xxx::(anonymous namespace)::func'
+PASS: gdb.cp/static-method.exp: continue to xxx::(anonymous namespace)::func
+PASS: gdb.cp/static-method.exp: continue to 'xxx::(anonymous namespace)::func'
+PASS: gdb.cp/static-method.exp: list static-method.cc:xxx::(anonymous namespace)::A::func
+PASS: gdb.cp/static-method.exp: list 'static-method.cc:xxx::(anonymous namespace)::A::func'
+PASS: gdb.cp/static-method.exp: list 'static-method.cc':'xxx::(anonymous namespace)::A::func'
+PASS: gdb.cp/static-method.exp: list static-method.cc:'xxx::(anonymous namespace)::A::func'
+PASS: gdb.cp/static-method.exp: continue to xxx::(anonymous namespace)::A::func
+PASS: gdb.cp/static-method.exp: continue to 'xxx::(anonymous namespace)::A::func'
+Running ./gdb.cp/static-print-quit.exp ...
+PASS: gdb.cp/static-print-quit.exp: set width 80
+PASS: gdb.cp/static-print-quit.exp: set height 2
+PASS: gdb.cp/static-print-quit.exp: print c - <return>
+PASS: gdb.cp/static-print-quit.exp: print c - q <return>
+PASS: gdb.cp/static-print-quit.exp: print c - to quit
+PASS: gdb.cp/static-print-quit.exp: q
+PASS: gdb.cp/static-print-quit.exp: set pagination off
+PASS: gdb.cp/static-print-quit.exp: first print
+PASS: gdb.cp/static-print-quit.exp: second print
+Running ./gdb.cp/temargs.exp ...
+PASS: gdb.cp/temargs.exp: set first breakpoint for temargs
+PASS: gdb.cp/temargs.exp: set second breakpoint for temargs
+PASS: gdb.cp/temargs.exp: set third breakpoint for temargs
+PASS: gdb.cp/temargs.exp: set fourth breakpoint for temargs
+PASS: gdb.cp/temargs.exp: set fifth breakpoint for temargs
+PASS: gdb.cp/temargs.exp: set sixth breakpoint for temargs
+PASS: gdb.cp/temargs.exp: continue to breakpoint: continue to first breakpoint for temargs
+PASS: gdb.cp/temargs.exp: test type of T in base_m
+PASS: gdb.cp/temargs.exp: test value of I in base_m
+PASS: gdb.cp/temargs.exp: test value of P in base_m
+PASS: gdb.cp/temargs.exp: test value of MP in base_m
+PASS: gdb.cp/temargs.exp: continue to breakpoint: continue to second breakpoint for temargs
+PASS: gdb.cp/temargs.exp: test type of T in inner_m
+PASS: gdb.cp/temargs.exp: test value of I in inner_m
+PASS: gdb.cp/temargs.exp: test value of P in inner_m
+PASS: gdb.cp/temargs.exp: test value of MP in inner_m
+PASS: gdb.cp/temargs.exp: test type of Z in inner_m
+PASS: gdb.cp/temargs.exp: continue to breakpoint: continue to third breakpoint for temargs
+PASS: gdb.cp/temargs.exp: test type of T in func
+PASS: gdb.cp/temargs.exp: test value of I in func
+PASS: gdb.cp/temargs.exp: test value of P in func
+PASS: gdb.cp/temargs.exp: test value of MP in func
+PASS: gdb.cp/temargs.exp: continue to breakpoint: continue to fourth breakpoint for temargs
+PASS: gdb.cp/temargs.exp: test type of T in templ_m
+PASS: gdb.cp/temargs.exp: test value of I in templ_m
+PASS: gdb.cp/temargs.exp: test value of P in templ_m
+PASS: gdb.cp/temargs.exp: test value of MP in templ_m
+PASS: gdb.cp/temargs.exp: test type of Q in templ_m
+PASS: gdb.cp/temargs.exp: continue to breakpoint: continue to fifth breakpoint for temargs
+PASS: gdb.cp/temargs.exp: test type of F in k2_m
+XFAIL: gdb.cp/temargs.exp: test value of F in k2_m (PRMS gcc/49366)
+PASS: gdb.cp/temargs.exp: continue to breakpoint: continue to sixth breakpoint for temargs
+XFAIL: gdb.cp/temargs.exp: test type of F in k3_m (PRMS gcc/49546)
+XFAIL: gdb.cp/temargs.exp: test value of F in k3_m (PRMS gcc/49546)
+Running ./gdb.cp/templates.exp ...
+PASS: gdb.cp/templates.exp: set multiple-symbols ask
+KFAIL: gdb.cp/templates.exp: ptype T5<int> (PRMS: gdb/8218)
+KFAIL: gdb.cp/templates.exp: ptype T5<int> (PRMS: gdb/8218)
+PASS: gdb.cp/templates.exp: constructor breakpoint
+PASS: gdb.cp/templates.exp: destructor breakpoint
+PASS: gdb.cp/templates.exp: value method breakpoint
+PASS: gdb.cp/templates.exp: breakpoint on a line with no real code
+PASS: gdb.cp/templates.exp: print method of template typedef
+XFAIL: gdb.cp/templates.exp: print destructor of template typedef (PRMS gcc/51668)
+PASS: gdb.cp/templates.exp: verify GCC PR debug/51668
+PASS: gdb.cp/templates.exp: ptype empty
+PASS: gdb.cp/templates.exp: ptype arg
+PASS: gdb.cp/templates.exp: print t5i.value()
+PASS: gdb.cp/templates.exp: b 770
+PASS: gdb.cp/templates.exp: continue to line 770
+PASS: gdb.cp/templates.exp: print fint
+PASS: gdb.cp/templates.exp: print fvpchar
+PASS: gdb.cp/templates.exp: ptype Foo
+PASS: gdb.cp/templates.exp: ptype fint
+PASS: gdb.cp/templates.exp: ptype fchar
+KFAIL: gdb.cp/templates.exp: ptype fvpchar (PRMS: gdb/1512)
+PASS: gdb.cp/templates.exp: print Foo<volatile char *>::foo
+PASS: gdb.cp/templates.exp: print Foo<volatile char*>::foo
+PASS: gdb.cp/templates.exp: ptype Bar
+PASS: gdb.cp/templates.exp: ptype bint
+PASS: gdb.cp/templates.exp: ptype bint2
+PASS: gdb.cp/templates.exp: ptype Baz
+PASS: gdb.cp/templates.exp: ptype bazint
+PASS: gdb.cp/templates.exp: ptype bazint2
+PASS: gdb.cp/templates.exp: ptype Qux
+PASS: gdb.cp/templates.exp: ptype quxint
+PASS: gdb.cp/templates.exp: ptype Spec
+PASS: gdb.cp/templates.exp: ptype siip
+PASS: gdb.cp/templates.exp: ptype Garply<int>
+PASS: gdb.cp/templates.exp: ptype Garply<Garply<char> >
+PASS: gdb.cp/templates.exp: print Garply<Garply<char> >::garply
+PASS: gdb.cp/templates.exp: break Garply<Garply<char> >::garply
+Running ./gdb.cp/try_catch.exp ...
+PASS: gdb.cp/try_catch.exp: continue to breakpoint: marker 1-throw
+PASS: gdb.cp/try_catch.exp: continue to breakpoint: marker 1-catch
+PASS: gdb.cp/try_catch.exp: continue to breakpoint: marker 2-start
+PASS: gdb.cp/try_catch.exp: continue to breakpoint: marker 2-next
+PASS: gdb.cp/try_catch.exp: continue to breakpoint: marker 2-throw
+PASS: gdb.cp/try_catch.exp: continue to breakpoint: marker 2-catch
+PASS: gdb.cp/try_catch.exp: continue to breakpoint: marker 3-throw
+PASS: gdb.cp/try_catch.exp: continue to breakpoint: marker 3-catch
+Running ./gdb.cp/typedef-operator.exp ...
+PASS: gdb.cp/typedef-operator.exp: set language c++
+PASS: gdb.cp/typedef-operator.exp: test crash
+PASS: gdb.cp/typedef-operator.exp: test typedef
+Running ./gdb.cp/userdef.exp ...
+PASS: gdb.cp/userdef.exp: break marker1
+PASS: gdb.cp/userdef.exp: continue to marker1
+PASS: gdb.cp/userdef.exp: up from marker1
+PASS: gdb.cp/userdef.exp: print one + two
+PASS: gdb.cp/userdef.exp: re-selected 'main' frame after inferior call
+PASS: gdb.cp/userdef.exp: print one - two
+PASS: gdb.cp/userdef.exp: print one * two
+PASS: gdb.cp/userdef.exp: print one / two
+PASS: gdb.cp/userdef.exp: print one % two
+PASS: gdb.cp/userdef.exp: print one && two
+PASS: gdb.cp/userdef.exp: print one || two
+PASS: gdb.cp/userdef.exp: print one & two
+PASS: gdb.cp/userdef.exp: print one | two
+PASS: gdb.cp/userdef.exp: print one ^ two
+PASS: gdb.cp/userdef.exp: print one < two
+PASS: gdb.cp/userdef.exp: print one <= two
+PASS: gdb.cp/userdef.exp: print one > two
+PASS: gdb.cp/userdef.exp: print one >= two
+PASS: gdb.cp/userdef.exp: print one == two
+PASS: gdb.cp/userdef.exp: print one.operator== (two)
+PASS: gdb.cp/userdef.exp: print one != two
+PASS: gdb.cp/userdef.exp: print one << 31
+PASS: gdb.cp/userdef.exp: print one >> 31
+PASS: gdb.cp/userdef.exp: print !one
+PASS: gdb.cp/userdef.exp: print +one
+PASS: gdb.cp/userdef.exp: print ~one
+PASS: gdb.cp/userdef.exp: print -one
+PASS: gdb.cp/userdef.exp: print one++
+PASS: gdb.cp/userdef.exp: print ++one
+PASS: gdb.cp/userdef.exp: print one--
+PASS: gdb.cp/userdef.exp: print --one
+PASS: gdb.cp/userdef.exp: print one += 7
+PASS: gdb.cp/userdef.exp: print two = one
+PASS: gdb.cp/userdef.exp: break A2::operator+
+PASS: gdb.cp/userdef.exp: break A2::operator +
+PASS: gdb.cp/userdef.exp: print c
+PASS: gdb.cp/userdef.exp: print *c
+PASS: gdb.cp/userdef.exp: print &*c
+PASS: gdb.cp/userdef.exp: ptype &*c
+PASS: gdb.cp/userdef.exp: print operator== (mem1, mem2)
+PASS: gdb.cp/userdef.exp: print operator== (mem1, mem1)
+Running ./gdb.cp/using-crash.exp ...
+PASS: gdb.cp/using-crash.exp: reload file
+Running ./gdb.cp/virtbase.exp ...
+PASS: gdb.cp/virtbase.exp: continue to breakpoint: first breakpoint
+PASS: gdb.cp/virtbase.exp: print *this
+PASS: gdb.cp/virtbase.exp: print x in get_y
+PASS: gdb.cp/virtbase.exp: continue to breakpoint: second breakpoint
+PASS: gdb.cp/virtbase.exp: print x in get_z
+PASS: gdb.cp/virtbase.exp: continue to breakpoint: third breakpoint
+PASS: gdb.cp/virtbase.exp: print *(D *) e
+PASS: gdb.cp/virtbase.exp: set print object on
+PASS: gdb.cp/virtbase.exp: print/x b->mA
+PASS: gdb.cp/virtbase.exp: print rtti_data
+PASS: gdb.cp/virtbase.exp: print pointer to virtual base at non-zero offset of larger object
+PASS: gdb.cp/virtbase.exp: print same pointer from history value
+PASS: gdb.cp/virtbase.exp: print whole pointed-to object, starting from the virtual base pointer
+Running ./gdb.cp/virtfunc2.exp ...
+PASS: gdb.cp/virtfunc2.exp: continue to breakpoint: marker 1
+PASS: gdb.cp/virtfunc2.exp: print o.do_print()
+PASS: gdb.cp/virtfunc2.exp: print o.do_print3()
+PASS: gdb.cp/virtfunc2.exp: print o2.do_print()
+PASS: gdb.cp/virtfunc2.exp: print o2.do_print2()
+PASS: gdb.cp/virtfunc2.exp: print o2.do_print3()
+PASS: gdb.cp/virtfunc2.exp: print o
+Running ./gdb.cp/virtfunc.exp ...
+PASS: gdb.cp/virtfunc.exp: ptype VA
+PASS: gdb.cp/virtfunc.exp: ptype VB
+PASS: gdb.cp/virtfunc.exp: ptype V
+PASS: gdb.cp/virtfunc.exp: ptype A
+PASS: gdb.cp/virtfunc.exp: ptype B
+PASS: gdb.cp/virtfunc.exp: ptype C
+PASS: gdb.cp/virtfunc.exp: ptype AD
+PASS: gdb.cp/virtfunc.exp: ptype D
+PASS: gdb.cp/virtfunc.exp: ptype E
+PASS: gdb.cp/virtfunc.exp: ptype dd
+PASS: gdb.cp/virtfunc.exp: ptype ppd
+PASS: gdb.cp/virtfunc.exp: ptype pAd
+PASS: gdb.cp/virtfunc.exp: ptype a
+PASS: gdb.cp/virtfunc.exp: ptype b
+PASS: gdb.cp/virtfunc.exp: ptype c
+PASS: gdb.cp/virtfunc.exp: ptype d
+PASS: gdb.cp/virtfunc.exp: ptype e
+PASS: gdb.cp/virtfunc.exp: ptype v
+PASS: gdb.cp/virtfunc.exp: ptype vb
+PASS: gdb.cp/virtfunc.exp: ptype pAa
+PASS: gdb.cp/virtfunc.exp: ptype pAe
+PASS: gdb.cp/virtfunc.exp: ptype pBe
+PASS: gdb.cp/virtfunc.exp: ptype pDd
+PASS: gdb.cp/virtfunc.exp: ptype pDe
+PASS: gdb.cp/virtfunc.exp: ptype pVa
+PASS: gdb.cp/virtfunc.exp: ptype pVv
+PASS: gdb.cp/virtfunc.exp: ptype pVe
+PASS: gdb.cp/virtfunc.exp: ptype pVd
+PASS: gdb.cp/virtfunc.exp: ptype pADe
+PASS: gdb.cp/virtfunc.exp: ptype pEe
+PASS: gdb.cp/virtfunc.exp: ptype pVB
+PASS: gdb.cp/virtfunc.exp: info vtbl a
+PASS: gdb.cp/virtfunc.exp: info vtbl b
+PASS: gdb.cp/virtfunc.exp: info vtbl c
+PASS: gdb.cp/virtfunc.exp: info vtbl d
+PASS: gdb.cp/virtfunc.exp: info vtbl e
+PASS: gdb.cp/virtfunc.exp: info vtbl pEe
+PASS: gdb.cp/virtfunc.exp: info vtbl
+PASS: gdb.cp/virtfunc.exp: info vtbl va
+PASS: gdb.cp/virtfunc.exp: info vtbl all_count
+PASS: gdb.cp/virtfunc.exp: print pAe->f()
+PASS: gdb.cp/virtfunc.exp: print pAa->f()
+PASS: gdb.cp/virtfunc.exp: print pDe->vg()
+PASS: gdb.cp/virtfunc.exp: print pADe->vg()
+PASS: gdb.cp/virtfunc.exp: print pDd->vg()
+PASS: gdb.cp/virtfunc.exp: print pEe->vvb()
+PASS: gdb.cp/virtfunc.exp: print pVB->vvb()
+PASS: gdb.cp/virtfunc.exp: print pBe->vvb()
+PASS: gdb.cp/virtfunc.exp: print pDe->vvb()
+PASS: gdb.cp/virtfunc.exp: print pEe->vd()
+PASS: gdb.cp/virtfunc.exp: print pEe->fvb()
+KFAIL: gdb.cp/virtfunc.exp: print pEe->D::vg() (PRMS: gdb/1064)
+PASS: gdb.cp/virtfunc.exp: next to pAa->f call
+PASS: gdb.cp/virtfunc.exp: next to pDe->vg call
+PASS: gdb.cp/virtfunc.exp: step through thunk into E::vg
+Running ./gdb.disasm/am33.exp ...
+Running ./gdb.disasm/h8300s.exp ...
+Running ./gdb.disasm/hppa.exp ...
+Running ./gdb.disasm/mn10300.exp ...
+Running ./gdb.disasm/sh3.exp ...
+Running ./gdb.disasm/t01_mov.exp ...
+Running ./gdb.disasm/t02_mova.exp ...
+Running ./gdb.disasm/t03_add.exp ...
+Running ./gdb.disasm/t04_sub.exp ...
+Running ./gdb.disasm/t05_cmp.exp ...
+Running ./gdb.disasm/t06_ari2.exp ...
+Running ./gdb.disasm/t07_ari3.exp ...
+Running ./gdb.disasm/t08_or.exp ...
+Running ./gdb.disasm/t09_xor.exp ...
+Running ./gdb.disasm/t10_and.exp ...
+Running ./gdb.disasm/t11_logs.exp ...
+Running ./gdb.disasm/t12_bit.exp ...
+Running ./gdb.disasm/t13_otr.exp ...
+Running ./gdb.dwarf2/callframecfa.exp ...
+PASS: gdb.dwarf2/callframecfa.exp: set breakpoint for call-frame-cfa
+PASS: gdb.dwarf2/callframecfa.exp: continue to breakpoint: continue to breakpoint for call-frame-cfa
+PASS: gdb.dwarf2/callframecfa.exp: set display for call-frame-cfa
+PASS: gdb.dwarf2/callframecfa.exp: step 1 for call-frame-cfa
+PASS: gdb.dwarf2/callframecfa.exp: step 2 for call-frame-cfa
+PASS: gdb.dwarf2/callframecfa.exp: step 3 for call-frame-cfa
+PASS: gdb.dwarf2/callframecfa.exp: step 4 for call-frame-cfa
+Running ./gdb.dwarf2/clztest.exp ...
+Running ./gdb.dwarf2/dup-psym.exp ...
+PASS: gdb.dwarf2/dup-psym.exp: info sources should contain only one reference to file1.txt
+Running ./gdb.dwarf2/dw2-ada-ffffffff.exp ...
+PASS: gdb.dwarf2/dw2-ada-ffffffff.exp: p sizeof (t)
+PASS: gdb.dwarf2/dw2-ada-ffffffff.exp: ptype t
+Running ./gdb.dwarf2/dw2-anon-mptr.exp ...
+PASS: gdb.dwarf2/dw2-anon-mptr.exp: set cp-abi gnu-v3
+PASS: gdb.dwarf2/dw2-anon-mptr.exp: show cp-abi
+PASS: gdb.dwarf2/dw2-anon-mptr.exp: ptype crash
+Running ./gdb.dwarf2/dw2-anonymous-func.exp ...
+PASS: gdb.dwarf2/dw2-anonymous-func.exp: list file1.txt
+Running ./gdb.dwarf2/dw2-bad-parameter-type.exp ...
+PASS: gdb.dwarf2/dw2-bad-parameter-type.exp: ptype f
+PASS: gdb.dwarf2/dw2-bad-parameter-type.exp: ptype f
+PASS: gdb.dwarf2/dw2-bad-parameter-type.exp: is alive
+Running ./gdb.dwarf2/dw2-basic.exp ...
+PASS: gdb.dwarf2/dw2-basic.exp: set listsize 1
+PASS: gdb.dwarf2/dw2-basic.exp: list func_cu1
+PASS: gdb.dwarf2/dw2-basic.exp: ptype func_cu1
+Running ./gdb.dwarf2/dw2-canonicalize-type.exp ...
+PASS: gdb.dwarf2/dw2-canonicalize-type.exp: ptype f
+Running ./gdb.dwarf2/dw2-case-insensitive.exp ...
+PASS: gdb.dwarf2/dw2-case-insensitive.exp: show case-sensitive
+PASS: gdb.dwarf2/dw2-case-insensitive.exp: regexp case-sensitive on
+PASS: gdb.dwarf2/dw2-case-insensitive.exp: set case-sensitive off
+PASS: gdb.dwarf2/dw2-case-insensitive.exp: regexp case-sensitive off
+PASS: gdb.dwarf2/dw2-case-insensitive.exp: p fuNC_lang
+PASS: gdb.dwarf2/dw2-case-insensitive.exp: p fuNC_symtab
+PASS: gdb.dwarf2/dw2-case-insensitive.exp: setting breakpoint at fuNC_lang
+PASS: gdb.dwarf2/dw2-case-insensitive.exp: setting breakpoint at fuNC_symtab
+Running ./gdb.dwarf2/dw2-common-block.exp ...
+Running ./gdb.dwarf2/dw2-compdir-oldgcc.exp ...
+PASS: gdb.dwarf2/dw2-compdir-oldgcc.exp: list gcc42
+PASS: gdb.dwarf2/dw2-compdir-oldgcc.exp: info source gcc42
+PASS: gdb.dwarf2/dw2-compdir-oldgcc.exp: list gcc43
+PASS: gdb.dwarf2/dw2-compdir-oldgcc.exp: info source gcc43
+Running ./gdb.dwarf2/dw2-compressed.exp ...
+PASS: gdb.dwarf2/dw2-compressed.exp: set listsize 1
+PASS: gdb.dwarf2/dw2-compressed.exp: list func_cu1
+PASS: gdb.dwarf2/dw2-compressed.exp: ptype func_cu1
+Running ./gdb.dwarf2/dw2-const.exp ...
+PASS: gdb.dwarf2/dw2-const.exp: print twelve
+PASS: gdb.dwarf2/dw2-const.exp: print/x val8
+Running ./gdb.dwarf2/dw2-cp-infcall-ref-static.exp ...
+gdb compile failed, /usr/x86_64-pc-linux-gnu/i686-pc-linux-gnu/binutils-bin/2.22/ld.gold.real: internal error in output_address, at /var/tmp/portage/cross-i686-pc-linux-gnu/binutils-2.22-r20/work/binutils-2.22/gold/output.cc:3019
+collect2: error: ld returned 1 exit status
+UNTESTED: gdb.dwarf2/dw2-cp-infcall-ref-static.exp: dw2-cp-infcall-ref-static.exp
+Running ./gdb.dwarf2/dw2-cu-size.exp ...
+PASS: gdb.dwarf2/dw2-cu-size.exp: ptype noloc
+Running ./gdb.dwarf2/dw2-dir-file-name.exp ...
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: cd .../rdir
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_missing__file_basename: continue to breakpoint: compdir_missing__ldir_missing__file_basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_missing__file_basename: set filename-display absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_missing__file_basename: absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_missing__file_basename: set filename-display basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_missing__file_basename: basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_missing__file_basename: set filename-display relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_missing__file_basename: relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_missing__file_relative: continue to breakpoint: compdir_missing__ldir_missing__file_relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_missing__file_relative: set filename-display absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_missing__file_relative: absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_missing__file_relative: set filename-display basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_missing__file_relative: basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_missing__file_relative: set filename-display relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_missing__file_relative: relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_missing__file_absolute: continue to breakpoint: compdir_missing__ldir_missing__file_absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_missing__file_absolute: set filename-display absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_missing__file_absolute: absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_missing__file_absolute: set filename-display basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_missing__file_absolute: basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_missing__file_absolute: set filename-display relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_missing__file_absolute: relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_relative_file_basename: continue to breakpoint: compdir_missing__ldir_relative_file_basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_relative_file_basename: set filename-display absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_relative_file_basename: absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_relative_file_basename: set filename-display basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_relative_file_basename: basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_relative_file_basename: set filename-display relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_relative_file_basename: relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_relative_file_relative: continue to breakpoint: compdir_missing__ldir_relative_file_relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_relative_file_relative: set filename-display absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_relative_file_relative: absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_relative_file_relative: set filename-display basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_relative_file_relative: basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_relative_file_relative: set filename-display relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_relative_file_relative: relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_relative_file_absolute: continue to breakpoint: compdir_missing__ldir_relative_file_absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_relative_file_absolute: set filename-display absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_relative_file_absolute: absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_relative_file_absolute: set filename-display basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_relative_file_absolute: basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_relative_file_absolute: set filename-display relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_relative_file_absolute: relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_absolute_file_basename: continue to breakpoint: compdir_missing__ldir_absolute_file_basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_absolute_file_basename: set filename-display absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_absolute_file_basename: absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_absolute_file_basename: set filename-display basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_absolute_file_basename: basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_absolute_file_basename: set filename-display relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_absolute_file_basename: relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_absolute_file_relative: continue to breakpoint: compdir_missing__ldir_absolute_file_relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_absolute_file_relative: set filename-display absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_absolute_file_relative: absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_absolute_file_relative: set filename-display basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_absolute_file_relative: basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_absolute_file_relative: set filename-display relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_absolute_file_relative: relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_absolute_file_absolute_same: continue to breakpoint: compdir_missing__ldir_absolute_file_absolute_same
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_absolute_file_absolute_same: set filename-display absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_absolute_file_absolute_same: absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_absolute_file_absolute_same: set filename-display basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_absolute_file_absolute_same: basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_absolute_file_absolute_same: set filename-display relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_absolute_file_absolute_same: relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_absolute_file_absolute_different: continue to breakpoint: compdir_missing__ldir_absolute_file_absolute_different
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_absolute_file_absolute_different: set filename-display absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_absolute_file_absolute_different: absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_absolute_file_absolute_different: set filename-display basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_absolute_file_absolute_different: basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_absolute_file_absolute_different: set filename-display relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_absolute_file_absolute_different: relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_missing__file_basename: continue to breakpoint: compdir_relative_ldir_missing__file_basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_missing__file_basename: set filename-display absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_missing__file_basename: absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_missing__file_basename: set filename-display basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_missing__file_basename: basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_missing__file_basename: set filename-display relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_missing__file_basename: relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_missing__file_relative: continue to breakpoint: compdir_relative_ldir_missing__file_relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_missing__file_relative: set filename-display absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_missing__file_relative: absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_missing__file_relative: set filename-display basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_missing__file_relative: basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_missing__file_relative: set filename-display relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_missing__file_relative: relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_missing__file_absolute: continue to breakpoint: compdir_relative_ldir_missing__file_absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_missing__file_absolute: set filename-display absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_missing__file_absolute: absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_missing__file_absolute: set filename-display basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_missing__file_absolute: basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_missing__file_absolute: set filename-display relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_missing__file_absolute: relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_relative_file_basename: continue to breakpoint: compdir_relative_ldir_relative_file_basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_relative_file_basename: set filename-display absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_relative_file_basename: absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_relative_file_basename: set filename-display basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_relative_file_basename: basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_relative_file_basename: set filename-display relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_relative_file_basename: relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_relative_file_relative: continue to breakpoint: compdir_relative_ldir_relative_file_relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_relative_file_relative: set filename-display absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_relative_file_relative: absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_relative_file_relative: set filename-display basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_relative_file_relative: basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_relative_file_relative: set filename-display relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_relative_file_relative: relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_relative_file_absolute: continue to breakpoint: compdir_relative_ldir_relative_file_absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_relative_file_absolute: set filename-display absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_relative_file_absolute: absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_relative_file_absolute: set filename-display basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_relative_file_absolute: basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_relative_file_absolute: set filename-display relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_relative_file_absolute: relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_absolute_file_basename: continue to breakpoint: compdir_relative_ldir_absolute_file_basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_absolute_file_basename: set filename-display absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_absolute_file_basename: absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_absolute_file_basename: set filename-display basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_absolute_file_basename: basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_absolute_file_basename: set filename-display relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_absolute_file_basename: relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_absolute_file_relative: continue to breakpoint: compdir_relative_ldir_absolute_file_relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_absolute_file_relative: set filename-display absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_absolute_file_relative: absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_absolute_file_relative: set filename-display basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_absolute_file_relative: basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_absolute_file_relative: set filename-display relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_absolute_file_relative: relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_absolute_file_absolute_same: continue to breakpoint: compdir_relative_ldir_absolute_file_absolute_same
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_absolute_file_absolute_same: set filename-display absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_absolute_file_absolute_same: absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_absolute_file_absolute_same: set filename-display basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_absolute_file_absolute_same: basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_absolute_file_absolute_same: set filename-display relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_absolute_file_absolute_same: relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_absolute_file_absolute_different: continue to breakpoint: compdir_relative_ldir_absolute_file_absolute_different
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_absolute_file_absolute_different: set filename-display absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_absolute_file_absolute_different: absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_absolute_file_absolute_different: set filename-display basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_absolute_file_absolute_different: basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_absolute_file_absolute_different: set filename-display relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_absolute_file_absolute_different: relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_missing__file_basename: continue to breakpoint: compdir_absolute_ldir_missing__file_basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_missing__file_basename: set filename-display absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_missing__file_basename: absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_missing__file_basename: set filename-display basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_missing__file_basename: basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_missing__file_basename: set filename-display relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_missing__file_basename: relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_missing__file_relative: continue to breakpoint: compdir_absolute_ldir_missing__file_relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_missing__file_relative: set filename-display absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_missing__file_relative: absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_missing__file_relative: set filename-display basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_missing__file_relative: basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_missing__file_relative: set filename-display relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_missing__file_relative: relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_missing__file_absolute_same: continue to breakpoint: compdir_absolute_ldir_missing__file_absolute_same
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_missing__file_absolute_same: set filename-display absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_missing__file_absolute_same: absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_missing__file_absolute_same: set filename-display basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_missing__file_absolute_same: basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_missing__file_absolute_same: set filename-display relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_missing__file_absolute_same: relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_missing__file_absolute_different: continue to breakpoint: compdir_absolute_ldir_missing__file_absolute_different
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_missing__file_absolute_different: set filename-display absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_missing__file_absolute_different: absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_missing__file_absolute_different: set filename-display basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_missing__file_absolute_different: basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_missing__file_absolute_different: set filename-display relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_missing__file_absolute_different: relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_relative_file_basename: continue to breakpoint: compdir_absolute_ldir_relative_file_basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_relative_file_basename: set filename-display absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_relative_file_basename: absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_relative_file_basename: set filename-display basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_relative_file_basename: basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_relative_file_basename: set filename-display relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_relative_file_basename: relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_relative_file_relative: continue to breakpoint: compdir_absolute_ldir_relative_file_relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_relative_file_relative: set filename-display absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_relative_file_relative: absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_relative_file_relative: set filename-display basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_relative_file_relative: basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_relative_file_relative: set filename-display relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_relative_file_relative: relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_relative_file_absolute_same: continue to breakpoint: compdir_absolute_ldir_relative_file_absolute_same
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_relative_file_absolute_same: set filename-display absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_relative_file_absolute_same: absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_relative_file_absolute_same: set filename-display basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_relative_file_absolute_same: basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_relative_file_absolute_same: set filename-display relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_relative_file_absolute_same: relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_relative_file_absolute_different: continue to breakpoint: compdir_absolute_ldir_relative_file_absolute_different
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_relative_file_absolute_different: set filename-display absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_relative_file_absolute_different: absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_relative_file_absolute_different: set filename-display basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_relative_file_absolute_different: basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_relative_file_absolute_different: set filename-display relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_relative_file_absolute_different: relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_absolute_file_basename_same: continue to breakpoint: compdir_absolute_ldir_absolute_file_basename_same
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_absolute_file_basename_same: set filename-display absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_absolute_file_basename_same: absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_absolute_file_basename_same: set filename-display basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_absolute_file_basename_same: basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_absolute_file_basename_same: set filename-display relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_absolute_file_basename_same: relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_absolute_file_relative_different: continue to breakpoint: compdir_absolute_ldir_absolute_file_relative_different
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_absolute_file_relative_different: set filename-display absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_absolute_file_relative_different: absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_absolute_file_relative_different: set filename-display basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_absolute_file_relative_different: basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_absolute_file_relative_different: set filename-display relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_absolute_file_relative_different: relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_absolute_file_absolute_same: continue to breakpoint: compdir_absolute_ldir_absolute_file_absolute_same
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_absolute_file_absolute_same: set filename-display absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_absolute_file_absolute_same: absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_absolute_file_absolute_same: set filename-display basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_absolute_file_absolute_same: basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_absolute_file_absolute_same: set filename-display relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_absolute_file_absolute_same: relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_absolute_file_absolute_different: continue to breakpoint: compdir_absolute_ldir_absolute_file_absolute_different
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_absolute_file_absolute_different: set filename-display absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_absolute_file_absolute_different: absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_absolute_file_absolute_different: set filename-display basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_absolute_file_absolute_different: basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_absolute_file_absolute_different: set filename-display relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_absolute_file_absolute_different: relative
+Running ./gdb.dwarf2/dw2-dos-drive.exp ...
+PASS: gdb.dwarf2/dw2-dos-drive.exp: set breakpoint pending off
+PASS: gdb.dwarf2/dw2-dos-drive.exp: break 'z:file.c':func
+UNSUPPORTED: gdb.dwarf2/dw2-dos-drive.exp: break file.c:func
+Running ./gdb.dwarf2/dw2-double-set-die-type.exp ...
+PASS: gdb.dwarf2/dw2-double-set-die-type.exp: ptype a
+Running ./gdb.dwarf2/dw2-empty-namespace.exp ...
+PASS: gdb.dwarf2/dw2-empty-namespace.exp: ptype var
+PASS: gdb.dwarf2/dw2-empty-namespace.exp: p var
+Running ./gdb.dwarf2/dw2-empty-pc-range.exp ...
+PASS: gdb.dwarf2/dw2-empty-pc-range.exp: empty range before CU load
+PASS: gdb.dwarf2/dw2-empty-pc-range.exp: valid range after CU load
+PASS: gdb.dwarf2/dw2-empty-pc-range.exp: empty range after CU load
+Running ./gdb.dwarf2/dw2-entry-value.exp ...
+gdb compile failed, /usr/x86_64-pc-linux-gnu/i686-pc-linux-gnu/binutils-bin/2.22/ld.gold.real: internal error in output_address, at /var/tmp/portage/cross-i686-pc-linux-gnu/binutils-2.22-r20/work/binutils-2.22/gold/output.cc:3019
+collect2: error: ld returned 1 exit status
+UNTESTED: gdb.dwarf2/dw2-entry-value.exp: dw2-entry-value.exp
+Running ./gdb.dwarf2/dw2-error.exp ...
+gdb compile failed, dw2-error.c: Assembler messages:
+dw2-error.c:33: Error: bad register name `%rbp'
+dw2-error.c:36: Error: bad register name `%rsp'
+dw2-error.c:43: Error: bad register name `%rbp'
+UNTESTED: gdb.dwarf2/dw2-error.exp: dw2-error.exp
+Running ./gdb.dwarf2/dw2-filename.exp ...
+PASS: gdb.dwarf2/dw2-filename.exp: interpreter-exec mi -file-list-exec-source-files
+PASS: gdb.dwarf2/dw2-filename.exp: info sources
+Running ./gdb.dwarf2/dw2-icc-opaque.exp ...
+PASS: gdb.dwarf2/dw2-icc-opaque.exp: ptype p_struct
+Running ./gdb.dwarf2/dw2-ifort-parameter.exp ...
+PASS: gdb.dwarf2/dw2-ifort-parameter.exp: p/x param
+Running ./gdb.dwarf2/dw2-inheritance.exp ...
+PASS: gdb.dwarf2/dw2-inheritance.exp: ptype inherited
+Running ./gdb.dwarf2/dw2-inline-break.exp ...
+Running ./gdb.dwarf2/dw2-inline-param.exp ...
+gdb compile failed, /usr/x86_64-pc-linux-gnu/i686-pc-linux-gnu/binutils-bin/2.22/ld.gold.real: internal error in output_address, at /var/tmp/portage/cross-i686-pc-linux-gnu/binutils-2.22-r20/work/binutils-2.22/gold/output.cc:3019
+collect2: error: ld returned 1 exit status
+UNTESTED: gdb.dwarf2/dw2-inline-param.exp: dw2-inline-param.exp
+Running ./gdb.dwarf2/dw2-intercu.exp ...
+PASS: gdb.dwarf2/dw2-intercu.exp: ptype int2
+PASS: gdb.dwarf2/dw2-intercu.exp: set listsize 1
+PASS: gdb.dwarf2/dw2-intercu.exp: list func_cu1
+PASS: gdb.dwarf2/dw2-intercu.exp: ptype func_cu1
+Running ./gdb.dwarf2/dw2-intermix.exp ...
+PASS: gdb.dwarf2/dw2-intermix.exp: set listsize 1
+PASS: gdb.dwarf2/dw2-intermix.exp: list func_cu1
+PASS: gdb.dwarf2/dw2-intermix.exp: ptype func_cu1
+Running ./gdb.dwarf2/dw2-linkage-name-trust.exp ...
+PASS: gdb.dwarf2/dw2-linkage-name-trust.exp: set language c++
+PASS: gdb.dwarf2/dw2-linkage-name-trust.exp: set cp-abi gnu-v3
+PASS: gdb.dwarf2/dw2-linkage-name-trust.exp: p c.membername
+PASS: gdb.dwarf2/dw2-linkage-name-trust.exp: p c.membername ()
+Running ./gdb.dwarf2/dw2-minsym-in-cu.exp ...
+PASS: gdb.dwarf2/dw2-minsym-in-cu.exp: info fun func2
+Running ./gdb.dwarf2/dw2-modula2-self-type.exp ...
+PASS: gdb.dwarf2/dw2-modula2-self-type.exp: set language modula-2
+PASS: gdb.dwarf2/dw2-modula2-self-type.exp: ptype v
+PASS: gdb.dwarf2/dw2-modula2-self-type.exp: alive
+Running ./gdb.dwarf2/dw2-namespaceless-anonymous.exp ...
+PASS: gdb.dwarf2/dw2-namespaceless-anonymous.exp: ptype '(anonymous namespace)::v'
+PASS: gdb.dwarf2/dw2-namespaceless-anonymous.exp: p '(anonymous namespace)::v'
+Running ./gdb.dwarf2/dw2-noloc.exp ...
+gdb compile failed, /usr/x86_64-pc-linux-gnu/i686-pc-linux-gnu/binutils-bin/2.22/ld.gold.real: internal error in output_address, at /var/tmp/portage/cross-i686-pc-linux-gnu/binutils-2.22-r20/work/binutils-2.22/gold/output.cc:3019
+collect2: error: ld returned 1 exit status
+UNTESTED: gdb.dwarf2/dw2-noloc.exp: dw2-noloc.exp
+Running ./gdb.dwarf2/dw2-objfile-overlap.exp ...
+PASS: gdb.dwarf2/dw2-objfile-overlap.exp: add-symbol-file
+PASS: gdb.dwarf2/dw2-objfile-overlap.exp: info line inner
+Running ./gdb.dwarf2/dw2-op-call.exp ...
+PASS: gdb.dwarf2/dw2-op-call.exp: maintenance set dwarf2 max-cache-age 0
+PASS: gdb.dwarf2/dw2-op-call.exp: p array1
+PASS: gdb.dwarf2/dw2-op-call.exp: array2 using DW_OP_call2
+PASS: gdb.dwarf2/dw2-op-call.exp: array3 using DW_OP_call4
+PASS: gdb.dwarf2/dw2-op-call.exp: p arraynoloc
+PASS: gdb.dwarf2/dw2-op-call.exp: p arraycallnoloc
+Running ./gdb.dwarf2/dw2-op-out-param.exp ...
+Running ./gdb.dwarf2/dw2-op-stack-value.exp ...
+PASS: gdb.dwarf2/dw2-op-stack-value.exp: p/x stack2
+PASS: gdb.dwarf2/dw2-op-stack-value.exp: p/x stack8
+PASS: gdb.dwarf2/dw2-op-stack-value.exp: x/wx &aa551234
+PASS: gdb.dwarf2/dw2-op-stack-value.exp: p/x implicit4to2
+PASS: gdb.dwarf2/dw2-op-stack-value.exp: p/x implicit4to4
+Running ./gdb.dwarf2/dw2-param-error.exp ...
+gdb compile failed, /usr/x86_64-pc-linux-gnu/i686-pc-linux-gnu/binutils-bin/2.22/ld.gold.real: internal error in output_address, at /var/tmp/portage/cross-i686-pc-linux-gnu/binutils-2.22-r20/work/binutils-2.22/gold/output.cc:3019
+collect2: error: ld returned 1 exit status
+UNTESTED: gdb.dwarf2/dw2-param-error.exp: dw2-param-error.exp
+Running ./gdb.dwarf2/dw2-producer.exp ...
+PASS: gdb.dwarf2/dw2-producer.exp: set listsize 1
+PASS: gdb.dwarf2/dw2-producer.exp: list func_cu1
+PASS: gdb.dwarf2/dw2-producer.exp: ptype func_cu1
+Running ./gdb.dwarf2/dw2-ranges.exp ...
+PASS: gdb.dwarf2/dw2-ranges.exp: info line main
+PASS: gdb.dwarf2/dw2-ranges.exp: info line func
+PASS: gdb.dwarf2/dw2-ranges.exp: info line main2
+PASS: gdb.dwarf2/dw2-ranges.exp: info line func2
+KFAIL: gdb.dwarf2/dw2-ranges.exp: info line main3 (PRMS: symtab/12497)
+Running ./gdb.dwarf2/dw2-ref-missing-frame.exp ...
+PASS: gdb.dwarf2/dw2-ref-missing-frame.exp: func_nofb print
+PASS: gdb.dwarf2/dw2-ref-missing-frame.exp: func_nofb backtrace
+PASS: gdb.dwarf2/dw2-ref-missing-frame.exp: func_loopfb print
+PASS: gdb.dwarf2/dw2-ref-missing-frame.exp: func_loopfb backtrace
+Running ./gdb.dwarf2/dw2-restore.exp ...
+Running ./gdb.dwarf2/dw2-restrict.exp ...
+Running ./gdb.dwarf2/dw2-simple-locdesc.exp ...
+KFAIL: gdb.dwarf2/dw2-simple-locdesc.exp: p &s.shl (PRMS: symtab/13307)
+PASS: gdb.dwarf2/dw2-simple-locdesc.exp: p &s.data4
+Running ./gdb.dwarf2/dw2-skip-prologue.exp ...
+gdb compile failed, /usr/x86_64-pc-linux-gnu/i686-pc-linux-gnu/binutils-bin/2.22/ld.gold.real: internal error in output_address, at /var/tmp/portage/cross-i686-pc-linux-gnu/binutils-2.22-r20/work/binutils-2.22/gold/output.cc:3019
+collect2: error: ld returned 1 exit status
+UNTESTED: gdb.dwarf2/dw2-skip-prologue.exp: dw2-skip-prologue.exp
+Running ./gdb.dwarf2/dw2-stack-boundary.exp ...
+PASS: gdb.dwarf2/dw2-stack-boundary.exp: set complaints 100
+PASS: gdb.dwarf2/dw2-stack-boundary.exp: check partial symtab errors
+PASS: gdb.dwarf2/dw2-stack-boundary.exp: p underflow
+PASS: gdb.dwarf2/dw2-stack-boundary.exp: p overflow
+Running ./gdb.dwarf2/dw2-strp.exp ...
+PASS: gdb.dwarf2/dw2-strp.exp: p a_string
+PASS: gdb.dwarf2/dw2-strp.exp: ptype a_string
+PASS: gdb.dwarf2/dw2-strp.exp: p a_string2
+PASS: gdb.dwarf2/dw2-strp.exp: ptype a_string2
+Running ./gdb.dwarf2/dw2-unresolved.exp ...
+gdb compile failed, /usr/x86_64-pc-linux-gnu/i686-pc-linux-gnu/binutils-bin/2.22/ld.gold.real: internal error in output_address, at /var/tmp/portage/cross-i686-pc-linux-gnu/binutils-2.22-r20/work/binutils-2.22/gold/output.cc:3019
+collect2: error: ld returned 1 exit status
+UNTESTED: gdb.dwarf2/dw2-unresolved.exp: dw2-unresolved.exp
+Running ./gdb.dwarf2/dw2-var-zero-addr.exp ...
+PASS: gdb.dwarf2/dw2-var-zero-addr.exp: print &var
+Running ./gdb.dwarf2/dw4-sig-types.exp ...
+PASS: gdb.dwarf2/dw4-sig-types.exp: maint set dwarf2 max-cache-age 0
+PASS: gdb.dwarf2/dw4-sig-types.exp: p myset
+PASS: gdb.dwarf2/dw4-sig-types.exp: continue to foo
+Running ./gdb.dwarf2/dw4-sig-type-unused.exp ...
+PASS: gdb.dwarf2/dw4-sig-type-unused.exp: alive
+Running ./gdb.dwarf2/fission-base.exp ...
+Running ./gdb.dwarf2/fission-loclists.exp ...
+Running ./gdb.dwarf2/fission-reread.exp ...
+PASS: gdb.dwarf2/fission-reread.exp: break main
+PASS: gdb.dwarf2/fission-reread.exp: fission-reread
+PASS: gdb.dwarf2/fission-reread.exp: fission-reread - unload
+Running ./gdb.dwarf2/implptr-64bit.exp ...
+UNTESTED: gdb.dwarf2/implptr-64bit.exp: implptr-64bit.exp
+UNTESTED: gdb.dwarf2/implptr-64bit.exp: implptr-64bit.exp
+UNTESTED: gdb.dwarf2/implptr-64bit.exp: implptr-64bit.exp
+UNTESTED: gdb.dwarf2/implptr-64bit.exp: implptr-64bit.exp
+UNTESTED: gdb.dwarf2/implptr-64bit.exp: implptr-64bit.exp
+UNTESTED: gdb.dwarf2/implptr-64bit.exp: implptr-64bit.exp
+UNTESTED: gdb.dwarf2/implptr-64bit.exp: implptr-64bit.exp
+UNTESTED: gdb.dwarf2/implptr-64bit.exp: implptr-64bit.exp
+Running ./gdb.dwarf2/implptr.exp ...
+PASS: gdb.dwarf2/implptr.exp: maintenance set dwarf2 max-cache-age 0
+PASS: gdb.dwarf2/implptr.exp: set bar breakpoint for implptr
+PASS: gdb.dwarf2/implptr.exp: continue to breakpoint: continue to bar breakpoint for implptr
+PASS: gdb.dwarf2/implptr.exp: print j in implptr:bar
+PASS: gdb.dwarf2/implptr.exp: print sizeof (j[0]) in implptr:bar
+PASS: gdb.dwarf2/implptr.exp: print *j in implptr:bar
+PASS: gdb.dwarf2/implptr.exp: print **k in implptr:bar
+PASS: gdb.dwarf2/implptr.exp: print ***l in implptr:bar
+PASS: gdb.dwarf2/implptr.exp: set baz breakpoint for implptr
+PASS: gdb.dwarf2/implptr.exp: continue to breakpoint: continue to baz breakpoint for implptr
+PASS: gdb.dwarf2/implptr.exp: sanity check element 0
+PASS: gdb.dwarf2/implptr.exp: sanity check element 1
+PASS: gdb.dwarf2/implptr.exp: enter the inlined function
+PASS: gdb.dwarf2/implptr.exp: check element 0 for the offset
+PASS: gdb.dwarf2/implptr.exp: check element 1 for the offset
+PASS: gdb.dwarf2/implptr.exp: continue to breakpoint: ignore the second baz breakpoint
+PASS: gdb.dwarf2/implptr.exp: set foo breakpoint for implptr
+PASS: gdb.dwarf2/implptr.exp: continue to breakpoint: continue to foo breakpoint for implptr
+PASS: gdb.dwarf2/implptr.exp: print p[0].x in implptr:foo
+PASS: gdb.dwarf2/implptr.exp: print *p[0].x in implptr:foo
+PASS: gdb.dwarf2/implptr.exp: print byte inside *p[0].x in implptr:foo
+PASS: gdb.dwarf2/implptr.exp: print invalid offset from *p[0].x in implptr:foo
+PASS: gdb.dwarf2/implptr.exp: print j in implptr:foo
+Running ./gdb.dwarf2/implptr-optimized-out.exp ...
+PASS: gdb.dwarf2/implptr-optimized-out.exp: p p->f
+Running ./gdb.dwarf2/mac-fileno.exp ...
+PASS: gdb.dwarf2/mac-fileno.exp: set listsize 1
+PASS: gdb.dwarf2/mac-fileno.exp: list func_cu1
+PASS: gdb.dwarf2/mac-fileno.exp: ptype func_cu1
+Running ./gdb.dwarf2/member-ptr-forwardref.exp ...
+PASS: gdb.dwarf2/member-ptr-forwardref.exp: set cp-abi gnu-v3
+PASS: gdb.dwarf2/member-ptr-forwardref.exp: show cp-abi
+PASS: gdb.dwarf2/member-ptr-forwardref.exp: ptype c
+Running ./gdb.dwarf2/method-ptr.exp ...
+PASS: gdb.dwarf2/method-ptr.exp: ptype the_typedef
+Running ./gdb.dwarf2/pieces.exp ...
+PASS: gdb.dwarf2/pieces.exp: set f1 breakpoint for pieces
+PASS: gdb.dwarf2/pieces.exp: continue to breakpoint: continue to f1 breakpoint for pieces
+PASS: gdb.dwarf2/pieces.exp: print a in pieces:f1
+PASS: gdb.dwarf2/pieces.exp: print a.j in pieces:f1
+PASS: gdb.dwarf2/pieces.exp: set f2 breakpoint for pieces
+PASS: gdb.dwarf2/pieces.exp: continue to breakpoint: continue to f2 breakpoint for pieces
+PASS: gdb.dwarf2/pieces.exp: print a in pieces:f2
+PASS: gdb.dwarf2/pieces.exp: print a[0] in pieces:f2
+PASS: gdb.dwarf2/pieces.exp: print a[1] in pieces:f2
+PASS: gdb.dwarf2/pieces.exp: set f3 breakpoint for pieces
+PASS: gdb.dwarf2/pieces.exp: continue to breakpoint: continue to f3 breakpoint for pieces
+PASS: gdb.dwarf2/pieces.exp: print a.i in pieces:f3
+PASS: gdb.dwarf2/pieces.exp: print a.j in pieces:f3
+PASS: gdb.dwarf2/pieces.exp: set a.i in pieces:f3
+PASS: gdb.dwarf2/pieces.exp: print new a.i in pieces:f3
+PASS: gdb.dwarf2/pieces.exp: set f6 breakpoint for pieces
+PASS: gdb.dwarf2/pieces.exp: continue to breakpoint: continue to f6 breakpoint for pieces
+PASS: gdb.dwarf2/pieces.exp: print a with optimized out piece
+PASS: gdb.dwarf2/pieces.exp: print a.i with optimized out piece
+Running ./gdb.dwarf2/pr10770.exp ...
+PASS: gdb.dwarf2/pr10770.exp: set breakpoint for pr10770
+PASS: gdb.dwarf2/pr10770.exp: cont
+PASS: gdb.dwarf2/pr10770.exp: frame 2
+Running ./gdb.dwarf2/pr11465.exp ...
+PASS: gdb.dwarf2/pr11465.exp: p N::c.C
+Running ./gdb.dwarf2/pr13961.exp ...
+PASS: gdb.dwarf2/pr13961.exp: break main
+PASS: gdb.dwarf2/pr13961.exp: pr13961
+Running ./gdb.dwarf2/subrange.exp ...
+PASS: gdb.dwarf2/subrange.exp: set language pascal
+PASS: gdb.dwarf2/subrange.exp: ptype TByteArray
+Running ./gdb.dwarf2/trace-crash.exp ...
+Running ./gdb.dwarf2/typeddwarf.exp ...
+PASS: gdb.dwarf2/typeddwarf.exp: set breakpoint at typeddwarf.c:29
+PASS: gdb.dwarf2/typeddwarf.exp: continue to breakpoint: continue to typeddwarf.c:29
+PASS: gdb.dwarf2/typeddwarf.exp: check value of j at typeddwarf.c:29
+PASS: gdb.dwarf2/typeddwarf.exp: check value of l at typeddwarf.c:29
+PASS: gdb.dwarf2/typeddwarf.exp: check value of m at typeddwarf.c:29
+PASS: gdb.dwarf2/typeddwarf.exp: check value of n at typeddwarf.c:29
+PASS: gdb.dwarf2/typeddwarf.exp: check value of o at typeddwarf.c:29
+PASS: gdb.dwarf2/typeddwarf.exp: check value of p at typeddwarf.c:29
+PASS: gdb.dwarf2/typeddwarf.exp: check value of q at typeddwarf.c:29
+PASS: gdb.dwarf2/typeddwarf.exp: check value of r at typeddwarf.c:29
+PASS: gdb.dwarf2/typeddwarf.exp: check value of s at typeddwarf.c:29
+PASS: gdb.dwarf2/typeddwarf.exp: check value of t at typeddwarf.c:29
+PASS: gdb.dwarf2/typeddwarf.exp: check value of u at typeddwarf.c:29
+PASS: gdb.dwarf2/typeddwarf.exp: check value of v at typeddwarf.c:29
+PASS: gdb.dwarf2/typeddwarf.exp: check value of w at typeddwarf.c:29
+PASS: gdb.dwarf2/typeddwarf.exp: check value of x at typeddwarf.c:29
+PASS: gdb.dwarf2/typeddwarf.exp: check value of y at typeddwarf.c:29
+PASS: gdb.dwarf2/typeddwarf.exp: set breakpoint at typeddwarf.c:53
+PASS: gdb.dwarf2/typeddwarf.exp: continue to breakpoint: continue to typeddwarf.c:53
+PASS: gdb.dwarf2/typeddwarf.exp: check value of j at typeddwarf.c:53
+PASS: gdb.dwarf2/typeddwarf.exp: check value of l at typeddwarf.c:53
+PASS: gdb.dwarf2/typeddwarf.exp: check value of m at typeddwarf.c:53
+PASS: gdb.dwarf2/typeddwarf.exp: check value of p at typeddwarf.c:53
+PASS: gdb.dwarf2/typeddwarf.exp: check value of q at typeddwarf.c:53
+PASS: gdb.dwarf2/typeddwarf.exp: check value of r at typeddwarf.c:53
+PASS: gdb.dwarf2/typeddwarf.exp: check value of s at typeddwarf.c:53
+PASS: gdb.dwarf2/typeddwarf.exp: check value of t at typeddwarf.c:53
+PASS: gdb.dwarf2/typeddwarf.exp: check value of u at typeddwarf.c:53
+PASS: gdb.dwarf2/typeddwarf.exp: check value of v at typeddwarf.c:53
+PASS: gdb.dwarf2/typeddwarf.exp: check value of w at typeddwarf.c:53
+PASS: gdb.dwarf2/typeddwarf.exp: check value of x at typeddwarf.c:53
+PASS: gdb.dwarf2/typeddwarf.exp: check value of y at typeddwarf.c:53
+PASS: gdb.dwarf2/typeddwarf.exp: check value of z at typeddwarf.c:53
+PASS: gdb.dwarf2/typeddwarf.exp: set breakpoint at typeddwarf.c:73
+PASS: gdb.dwarf2/typeddwarf.exp: continue to breakpoint: continue to typeddwarf.c:73
+PASS: gdb.dwarf2/typeddwarf.exp: check value of w at typeddwarf.c:73
+PASS: gdb.dwarf2/typeddwarf.exp: check value of x at typeddwarf.c:73
+PASS: gdb.dwarf2/typeddwarf.exp: check value of y at typeddwarf.c:73
+PASS: gdb.dwarf2/typeddwarf.exp: check value of z at typeddwarf.c:73
+Running ./gdb.dwarf2/valop.exp ...
+PASS: gdb.dwarf2/valop.exp: set breakpoint for valop
+PASS: gdb.dwarf2/valop.exp: continue to breakpoint: continue to breakpoint for valop
+PASS: gdb.dwarf2/valop.exp: print uses_stack_op
+PASS: gdb.dwarf2/valop.exp: print uses_lit_op
+Running ./gdb.dwarf2/watch-notconst.exp ...
+PASS: gdb.dwarf2/watch-notconst.exp: watch x
+Running ./gdb.fortran/array-element.exp ...
+gdb compile failed, default_target_compile: Can't find i686-pc-linux-gnu-gfortran.
+UNTESTED: gdb.fortran/array-element.exp: array-element.exp
+Running ./gdb.fortran/charset.exp ...
+gdb compile failed, default_target_compile: Can't find i686-pc-linux-gnu-gfortran.
+UNTESTED: gdb.fortran/charset.exp: charset.exp
+Running ./gdb.fortran/common-block.exp ...
+UNTESTED: gdb.fortran/common-block.exp: common-block.exp
+Running ./gdb.fortran/complex.exp ...
+UNTESTED: gdb.fortran/complex.exp: complex.exp
+UNTESTED: gdb.fortran/complex.exp: Couldn't compile complex.f
+Running ./gdb.fortran/derived-type.exp ...
+gdb compile failed, default_target_compile: Can't find i686-pc-linux-gnu-gfortran.
+UNTESTED: gdb.fortran/derived-type.exp: derived-type.exp
+Running ./gdb.fortran/exprs.exp ...
+PASS: gdb.fortran/exprs.exp: set print sevenbit-strings
+PASS: gdb.fortran/exprs.exp: set language fortran
+PASS: gdb.fortran/exprs.exp: set language to "fortran"
+PASS: gdb.fortran/exprs.exp: Set value-history[1] using $1
+PASS: gdb.fortran/exprs.exp: Set value-history[2] using $2
+PASS: gdb.fortran/exprs.exp: Set value-history[3] using $3
+PASS: gdb.fortran/exprs.exp: Print value-history[MAX-1] using inplicit index $$
+PASS: gdb.fortran/exprs.exp: Print value-history[MAX-1] again using implicit index $$
+PASS: gdb.fortran/exprs.exp: Print value-history[MAX] using implicit index $
+PASS: gdb.fortran/exprs.exp: Print value-history[MAX-2] using explicit index $$2
+PASS: gdb.fortran/exprs.exp: Print value-history[MAX] using explicit index $0
+PASS: gdb.fortran/exprs.exp: Print value-history[MAX] using explicit index $$0
+PASS: gdb.fortran/exprs.exp: Print value-history[1] using explicit index $1
+PASS: gdb.fortran/exprs.exp: Print value-history[2] using explicit index $2
+PASS: gdb.fortran/exprs.exp: Print value-history[3] using explicit index $3
+PASS: gdb.fortran/exprs.exp: Print (value-history[MAX] - 3) using implicit index $
+PASS: gdb.fortran/exprs.exp: Use value-history element in arithmetic expression
+PASS: gdb.fortran/exprs.exp: Set a new convenience variable
+PASS: gdb.fortran/exprs.exp: Print contents of new convenience variable
+PASS: gdb.fortran/exprs.exp: Set convenience variable to a new value
+PASS: gdb.fortran/exprs.exp: Print new contents of convenience variable
+PASS: gdb.fortran/exprs.exp: Set convenience variable $_
+PASS: gdb.fortran/exprs.exp: Print contents of convenience variable $_
+PASS: gdb.fortran/exprs.exp: Use convenience variable in arithmetic expression
+PASS: gdb.fortran/exprs.exp: Use convenience variable assignment in arithmetic expression
+PASS: gdb.fortran/exprs.exp: Print contents of uninitialized convenience variable
+PASS: gdb.fortran/exprs.exp: p 123
+PASS: gdb.fortran/exprs.exp: p -123
+PASS: gdb.fortran/exprs.exp: reject p _
+PASS: gdb.fortran/exprs.exp: p .TRUE.
+PASS: gdb.fortran/exprs.exp: p .FALSE.
+PASS: gdb.fortran/exprs.exp: p 'a'
+PASS: gdb.fortran/exprs.exp: p 'abcdefg'(2:4)
+PASS: gdb.fortran/exprs.exp: p 'abcdefg'(:3)
+PASS: gdb.fortran/exprs.exp: p 'abcdefg'(5:)
+PASS: gdb.fortran/exprs.exp: p 'abcdefg'(:)
+PASS: gdb.fortran/exprs.exp: p .44 .LT. .45
+PASS: gdb.fortran/exprs.exp: p .44 .GT. .45
+PASS: gdb.fortran/exprs.exp: p 0.44 .LT. 0.45
+PASS: gdb.fortran/exprs.exp: p 0.44 .GT. 0.45
+PASS: gdb.fortran/exprs.exp: p 44. .LT. 45.
+PASS: gdb.fortran/exprs.exp: p 44. .GT. 45.
+PASS: gdb.fortran/exprs.exp: p 44.0 .LT. 45.0
+PASS: gdb.fortran/exprs.exp: p 44.0 .GT. 45.0
+PASS: gdb.fortran/exprs.exp: p 10D20 .LT. 10D21
+PASS: gdb.fortran/exprs.exp: p 10D20 .GT. 10D21
+PASS: gdb.fortran/exprs.exp: p 10d20 .LT. 10d21
+PASS: gdb.fortran/exprs.exp: p 10d20 .GT. 10d21
+PASS: gdb.fortran/exprs.exp: p 10E20 .LT. 10E21
+PASS: gdb.fortran/exprs.exp: p 10E20 .GT. 10E21
+PASS: gdb.fortran/exprs.exp: p 10e20 .LT. 10e21
+PASS: gdb.fortran/exprs.exp: p 10e20 .GT. 10e21
+PASS: gdb.fortran/exprs.exp: p 10.D20 .LT. 10.D21
+PASS: gdb.fortran/exprs.exp: p 10.D20 .GT. 10.D21
+PASS: gdb.fortran/exprs.exp: p 10.d20 .LT. 10.d21
+PASS: gdb.fortran/exprs.exp: p 10.d20 .GT. 10.d21
+PASS: gdb.fortran/exprs.exp: p 10.E20 .LT. 10.E21
+PASS: gdb.fortran/exprs.exp: p 10.E20 .GT. 10.E21
+PASS: gdb.fortran/exprs.exp: p 10.e20 .LT. 10.e21
+PASS: gdb.fortran/exprs.exp: p 10.e20 .GT. 10.e21
+PASS: gdb.fortran/exprs.exp: p 10.0D20 .LT. 10.0D21
+PASS: gdb.fortran/exprs.exp: p 10.0D20 .GT. 10.0D21
+PASS: gdb.fortran/exprs.exp: p 10.0d20 .LT. 10.0d21
+PASS: gdb.fortran/exprs.exp: p 10.0d20 .GT. 10.0d21
+PASS: gdb.fortran/exprs.exp: p 10.0E20 .LT. 10.0E21
+PASS: gdb.fortran/exprs.exp: p 10.0E20 .GT. 10.0E21
+PASS: gdb.fortran/exprs.exp: p 10.0e20 .LT. 10.0e21
+PASS: gdb.fortran/exprs.exp: p 10.0e20 .GT. 10.0e21
+PASS: gdb.fortran/exprs.exp: p 10.0D+20 .LT. 10.0D+21
+PASS: gdb.fortran/exprs.exp: p 10.0D+20 .GT. 10.0D+21
+PASS: gdb.fortran/exprs.exp: p 10.0d+20 .LT. 10.0d+21
+PASS: gdb.fortran/exprs.exp: p 10.0d+20 .GT. 10.0d+21
+PASS: gdb.fortran/exprs.exp: p 10.0E+20 .LT. 10.0E+21
+PASS: gdb.fortran/exprs.exp: p 10.0E+20 .GT. 10.0E+21
+PASS: gdb.fortran/exprs.exp: p 10.0e+20 .LT. 10.0e+21
+PASS: gdb.fortran/exprs.exp: p 10.0e+20 .GT. 10.0e+21
+PASS: gdb.fortran/exprs.exp: p 10.0D-11 .LT. 10.0D-10
+PASS: gdb.fortran/exprs.exp: p 10.0D-11 .GT. 10.0D-10
+PASS: gdb.fortran/exprs.exp: p 10.0d-11 .LT. 10.0d-10
+PASS: gdb.fortran/exprs.exp: p 10.0d-11 .GT. 10.0d-10
+PASS: gdb.fortran/exprs.exp: p 10.0E-11 .LT. 10.0E-10
+PASS: gdb.fortran/exprs.exp: p 10.0E-11 .GT. 10.0E-10
+PASS: gdb.fortran/exprs.exp: p 10.0e-11 .LT. 10.0e-10
+PASS: gdb.fortran/exprs.exp: p 10.0e-11 .GT. 10.0e-10
+PASS: gdb.fortran/exprs.exp: unary minus applied to int
+PASS: gdb.fortran/exprs.exp: unary minus applied to real
+PASS: gdb.fortran/exprs.exp: bool plus int
+PASS: gdb.fortran/exprs.exp: int plus int
+PASS: gdb.fortran/exprs.exp: real plus int
+PASS: gdb.fortran/exprs.exp: real plus real
+PASS: gdb.fortran/exprs.exp: bool minus int
+PASS: gdb.fortran/exprs.exp: int minus int
+PASS: gdb.fortran/exprs.exp: real minus int
+PASS: gdb.fortran/exprs.exp: real minus real
+PASS: gdb.fortran/exprs.exp: bool times int
+PASS: gdb.fortran/exprs.exp: int times int
+PASS: gdb.fortran/exprs.exp: real times int
+PASS: gdb.fortran/exprs.exp: real times real
+PASS: gdb.fortran/exprs.exp: bool divided by int
+PASS: gdb.fortran/exprs.exp: int divided by int
+PASS: gdb.fortran/exprs.exp: real divided by int
+PASS: gdb.fortran/exprs.exp: real divided by real
+PASS: gdb.fortran/exprs.exp: int powered by int
+PASS: gdb.fortran/exprs.exp: combined exponentiation expression
+PASS: gdb.fortran/exprs.exp: combined exponentiation expression in specified order
+PASS: gdb.fortran/exprs.exp: int powered by real
+PASS: gdb.fortran/exprs.exp: real powered by real
+Running ./gdb.fortran/library-module.exp ...
+gdb compile failed, default_target_compile: Can't find i686-pc-linux-gnu-gfortran.
+UNTESTED: gdb.fortran/library-module.exp: Couldn't compile library-module-lib.f90
+Running ./gdb.fortran/logical.exp ...
+UNTESTED: gdb.fortran/logical.exp: logical.exp
+Running ./gdb.fortran/module.exp ...
+gdb compile failed, default_target_compile: Can't find i686-pc-linux-gnu-gfortran.
+UNTESTED: gdb.fortran/module.exp: module.exp
+Running ./gdb.fortran/multi-dim.exp ...
+gdb compile failed, default_target_compile: Can't find i686-pc-linux-gnu-gfortran.
+UNTESTED: gdb.fortran/multi-dim.exp: multi-dim.exp
+Running ./gdb.fortran/subarray.exp ...
+gdb compile failed, default_target_compile: Can't find i686-pc-linux-gnu-gfortran.
+UNTESTED: gdb.fortran/subarray.exp: subarray.exp
+Running ./gdb.fortran/types.exp ...
+PASS: gdb.fortran/types.exp: set print sevenbit-strings
+PASS: gdb.fortran/types.exp: set language fortran
+PASS: gdb.fortran/types.exp: set language to "fortran"
+PASS: gdb.fortran/types.exp: pt 123
+PASS: gdb.fortran/types.exp: reject pt _
+PASS: gdb.fortran/types.exp: pt .TRUE.
+PASS: gdb.fortran/types.exp: pt .FALSE.
+PASS: gdb.fortran/types.exp: pt 'a'
+PASS: gdb.fortran/types.exp: pt .44
+PASS: gdb.fortran/types.exp: pt 44.0
+PASS: gdb.fortran/types.exp: pt 10D20
+PASS: gdb.fortran/types.exp: pt 10D20
+PASS: gdb.fortran/types.exp: pt 10d20
+PASS: gdb.fortran/types.exp: pt 10d20
+PASS: gdb.fortran/types.exp: pt 10E20
+PASS: gdb.fortran/types.exp: pt 10E20
+PASS: gdb.fortran/types.exp: pt 10e20
+PASS: gdb.fortran/types.exp: pt 10e20
+Running ./gdb.gdb/complaints.exp ...
+Running ./gdb.gdb/observer.exp ...
+Running ./gdb.gdb/selftest.exp ...
+Running ./gdb.gdb/xfullpath.exp ...
+Running ./gdb.go/basic-types.exp ...
+PASS: gdb.go/basic-types.exp: set language go
+PASS: gdb.go/basic-types.exp: set language to "go"
+PASS: gdb.go/basic-types.exp: pt 123
+PASS: gdb.go/basic-types.exp: pt void(42)
+PASS: gdb.go/basic-types.exp: pt byte(42)
+PASS: gdb.go/basic-types.exp: pt int(42)
+PASS: gdb.go/basic-types.exp: pt uint(42)
+PASS: gdb.go/basic-types.exp: pt uintptr(42)
+PASS: gdb.go/basic-types.exp: pt int8(42)
+PASS: gdb.go/basic-types.exp: pt int16(42)
+PASS: gdb.go/basic-types.exp: pt int32(42)
+PASS: gdb.go/basic-types.exp: pt int64(42)
+PASS: gdb.go/basic-types.exp: pt uint8(42)
+PASS: gdb.go/basic-types.exp: pt uint16(42)
+PASS: gdb.go/basic-types.exp: pt uint32(42)
+PASS: gdb.go/basic-types.exp: pt uint64(42)
+PASS: gdb.go/basic-types.exp: pt true
+PASS: gdb.go/basic-types.exp: pt false
+PASS: gdb.go/basic-types.exp: pt bool(0)
+PASS: gdb.go/basic-types.exp: pt bool(1)
+PASS: gdb.go/basic-types.exp: pt 'a'
+PASS: gdb.go/basic-types.exp: pt "a simple string"
+PASS: gdb.go/basic-types.exp: pt `a simple raw string`
+PASS: gdb.go/basic-types.exp: pt .44
+PASS: gdb.go/basic-types.exp: pt 44.0
+PASS: gdb.go/basic-types.exp: pt 10e20
+PASS: gdb.go/basic-types.exp: pt 10E20
+PASS: gdb.go/basic-types.exp: pt float32(.42)
+PASS: gdb.go/basic-types.exp: pt float64(.42)
+PASS: gdb.go/basic-types.exp: pt complex64(.42)
+XFAIL: gdb.go/basic-types.exp: pt complex64(.42i1.0)
+XFAIL: gdb.go/basic-types.exp: pt complex64(i1.0)
+PASS: gdb.go/basic-types.exp: pt complex128(.42)
+XFAIL: gdb.go/basic-types.exp: pt complex128(.42i1.0)
+XFAIL: gdb.go/basic-types.exp: pt complex128(i1.0)
+Running ./gdb.go/chan.exp ...
+gdb compile failed, default_target_compile: Can't find i686-pc-linux-gnu-gccgo.
+UNTESTED: gdb.go/chan.exp: chan.exp
+Running ./gdb.go/handcall.exp ...
+gdb compile failed, default_target_compile: Can't find i686-pc-linux-gnu-gccgo.
+UNTESTED: gdb.go/handcall.exp: handcall.exp
+Running ./gdb.go/hello.exp ...
+gdb compile failed, default_target_compile: Can't find i686-pc-linux-gnu-gccgo.
+UNTESTED: gdb.go/hello.exp: hello.exp
+Running ./gdb.go/integers.exp ...
+gdb compile failed, default_target_compile: Can't find i686-pc-linux-gnu-gccgo.
+UNTESTED: gdb.go/integers.exp: integers.exp
+Running ./gdb.go/methods.exp ...
+gdb compile failed, default_target_compile: Can't find i686-pc-linux-gnu-gccgo.
+UNTESTED: gdb.go/methods.exp: methods.exp
+Running ./gdb.go/package.exp ...
+gdb compile failed, default_target_compile: Can't find i686-pc-linux-gnu-gccgo.
+UNTESTED: gdb.go/package.exp: package
+Running ./gdb.go/print.exp ...
+PASS: gdb.go/print.exp: set language go
+PASS: gdb.go/print.exp: set language to "go"
+PASS: gdb.go/print.exp: check fp + text
+PASS: gdb.go/print.exp: p 1.
+PASS: gdb.go/print.exp: p 1.5
+PASS: gdb.go/print.exp: p 1.f
+PASS: gdb.go/print.exp: p 1.5f
+PASS: gdb.go/print.exp: p 1.l
+PASS: gdb.go/print.exp: p 1.5l
+PASS: gdb.go/print.exp: p 0x1.1
+PASS: gdb.go/print.exp: reject p 1.1x
+PASS: gdb.go/print.exp: reject p 1.1ff
+PASS: gdb.go/print.exp: reject p 1.1ll
+Running ./gdb.go/strings.exp ...
+gdb compile failed, default_target_compile: Can't find i686-pc-linux-gnu-gccgo.
+UNTESTED: gdb.go/strings.exp: strings.exp
+Running ./gdb.go/types.exp ...
+gdb compile failed, default_target_compile: Can't find i686-pc-linux-gnu-gccgo.
+UNTESTED: gdb.go/types.exp: types.exp
+Running ./gdb.go/unsafe.exp ...
+gdb compile failed, default_target_compile: Can't find i686-pc-linux-gnu-gccgo.
+UNTESTED: gdb.go/unsafe.exp: unsafe.exp
+Running ./gdb.java/jmain.exp ...
+UNSUPPORTED: gdb.java/jmain.exp: compilation jmain.java
+Running ./gdb.java/jmisc.exp ...
+UNSUPPORTED: gdb.java/jmisc.exp: compilation jmisc.java
+Running ./gdb.java/jnpe.exp ...
+UNSUPPORTED: gdb.java/jnpe.exp: compilation jnpe.java
+UNTESTED: gdb.java/jnpe.exp: Couldn't compile ./gdb.java/jnpe.java
+Running ./gdb.java/jprint.exp ...
+UNSUPPORTED: gdb.java/jprint.exp: compilation jprint.java
+Running ./gdb.java/jv-exp.exp ...
+PASS: gdb.java/jv-exp.exp: set print sevenbit-strings
+PASS: gdb.java/jv-exp.exp: set width 0
+PASS: gdb.java/jv-exp.exp: set language java
+PASS: gdb.java/jv-exp.exp: set language to "java"
+PASS: gdb.java/jv-exp.exp: p 1 > 2
+PASS: gdb.java/jv-exp.exp: p 1 < 2
+Running ./gdb.java/jv-print.exp ...
+PASS: gdb.java/jv-print.exp: print $pc
+PASS: gdb.java/jv-print.exp: set print sevenbit-strings
+PASS: gdb.java/jv-print.exp: set width 0
+PASS: gdb.java/jv-print.exp: set language java
+PASS: gdb.java/jv-print.exp: set language to "java"
+PASS: gdb.java/jv-print.exp: p 123
+PASS: gdb.java/jv-print.exp: p -123
+PASS: gdb.java/jv-print.exp: p/d 123
+PASS: gdb.java/jv-print.exp: p 0123
+PASS: gdb.java/jv-print.exp: p 00123
+PASS: gdb.java/jv-print.exp: p -0123
+PASS: gdb.java/jv-print.exp: p/o 0123
+PASS: gdb.java/jv-print.exp: p 0x123
+PASS: gdb.java/jv-print.exp: p -0x123
+PASS: gdb.java/jv-print.exp: p 0x0123
+PASS: gdb.java/jv-print.exp: p -0x0123
+PASS: gdb.java/jv-print.exp: p 0xABCDEF
+PASS: gdb.java/jv-print.exp: p 0xabcdef
+PASS: gdb.java/jv-print.exp: p 0xAbCdEf
+PASS: gdb.java/jv-print.exp: p/x 0x123
+PASS: gdb.java/jv-print.exp: p 'a'
+PASS: gdb.java/jv-print.exp: p/c 'a'
+PASS: gdb.java/jv-print.exp: p/c 70
+PASS: gdb.java/jv-print.exp: p/x 'a'
+PASS: gdb.java/jv-print.exp: p/d 'a'
+PASS: gdb.java/jv-print.exp: p/t 'a'
+PASS: gdb.java/jv-print.exp: p/x '\377'
+PASS: gdb.java/jv-print.exp: p '\''
+PASS: gdb.java/jv-print.exp: p '\\'
+PASS: gdb.java/jv-print.exp: reject p 0x
+PASS: gdb.java/jv-print.exp: p ''
+PASS: gdb.java/jv-print.exp: p '''
+PASS: gdb.java/jv-print.exp: reject p '\'
+PASS: gdb.java/jv-print.exp: reject p '\\\'
+PASS: gdb.java/jv-print.exp: reject p DEADBEEF
+PASS: gdb.java/jv-print.exp: reject p 123DEADBEEF
+PASS: gdb.java/jv-print.exp: reject p 123foobar.bazfoo3
+PASS: gdb.java/jv-print.exp: reject p 123EEEEEEEEEEEEEEEEE33333k333
+PASS: gdb.java/jv-print.exp: check for floating addition
+PASS: gdb.java/jv-print.exp: reject p 09
+PASS: gdb.java/jv-print.exp: reject p 079
+PASS: gdb.java/jv-print.exp: reject p 0xG
+PASS: gdb.java/jv-print.exp: reject p 0xAG
+PASS: gdb.java/jv-print.exp: check fp + text
+PASS: gdb.java/jv-print.exp: p 1.
+PASS: gdb.java/jv-print.exp: p 1.5
+PASS: gdb.java/jv-print.exp: p 1.f
+PASS: gdb.java/jv-print.exp: p 1.5f
+PASS: gdb.java/jv-print.exp: p 1.d
+PASS: gdb.java/jv-print.exp: p 1.5d
+PASS: gdb.java/jv-print.exp: p 0x1.1
+PASS: gdb.java/jv-print.exp: reject p 1.1x
+PASS: gdb.java/jv-print.exp: reject p 1.1ff
+PASS: gdb.java/jv-print.exp: reject p 1.1dd
+Running ./gdb.linespec/break-ask.exp ...
+PASS: gdb.linespec/break-ask.exp: set multiple-symbols ask
+PASS: gdb.linespec/break-ask.exp: set filename-display absolute
+PASS: gdb.linespec/break-ask.exp: break twodup absolute
+PASS: gdb.linespec/break-ask.exp: 0
+PASS: gdb.linespec/break-ask.exp: set filename-display relative
+PASS: gdb.linespec/break-ask.exp: break twodup relative
+PASS: gdb.linespec/break-ask.exp: 2
+PASS: gdb.linespec/break-ask.exp: expect breakpoint
+PASS: gdb.linespec/break-ask.exp: info source
+PASS: gdb.linespec/break-ask.exp: continue to breakpoint: body_elsewhere
+PASS: gdb.linespec/break-ask.exp: break twodup relative other
+PASS: gdb.linespec/break-ask.exp: 3
+PASS: gdb.linespec/break-ask.exp: expect breakpoint other
+PASS: gdb.linespec/break-ask.exp: info source other
+PASS: gdb.linespec/break-ask.exp: continue to breakpoint: body_elsewhere other
+Running ./gdb.linespec/linespec.exp ...
+PASS: gdb.linespec/linespec.exp: set multiple-symbols to all for linespec tests
+PASS: gdb.linespec/linespec.exp: single-location break using dir/file:line
+PASS: gdb.linespec/linespec.exp: clear breakpoint using dir/file:line
+PASS: gdb.linespec/linespec.exp: multi-location break using file:line
+PASS: gdb.linespec/linespec.exp: multi-location break using duplicate function name
+PASS: gdb.linespec/linespec.exp: multi-location break using duplicate function name and label
+PASS: gdb.linespec/linespec.exp: complete condition
+PASS: gdb.linespec/linespec.exp: disable pending breakpoints for linespec tests
+PASS: gdb.linespec/linespec.exp: set breakpoint on non-existent function
+PASS: gdb.linespec/linespec.exp: set breakpoint at all instances of NameSpace::overload
+PASS: gdb.linespec/linespec.exp: set breakpoint at lspec.cc instance of NameSpace::overload
+PASS: gdb.linespec/linespec.exp: set breakpoint at non-existent lspec.cc instance of NameSpace::overload
+PASS: gdb.linespec/linespec.exp: set breakpoint at specific instance of NameSpace::overload
+PASS: gdb.linespec/linespec.exp: set breakpoint in body.h
+PASS: gdb.linespec/linespec.exp: set breakpoint in f1
+PASS: gdb.linespec/linespec.exp: add inferior for linespec tests
+PASS: gdb.linespec/linespec.exp: switch to inferior 2 for linespec tests
+PASS: gdb.linespec/linespec.exp: set the new inferior file for linespec tests
+PASS: gdb.linespec/linespec.exp: set breakpoint at main in both inferiors
+Running ./gdb.linespec/ls-dollar.exp ...
+PASS: gdb.linespec/ls-dollar.exp: set listsize 1
+PASS: gdb.linespec/ls-dollar.exp: list $dollar_var
+PASS: gdb.linespec/ls-dollar.exp: break $dollar_func
+Running ./gdb.linespec/ls-errs.exp ...
+PASS: gdb.linespec/ls-errs.exp: set breakpoint pending off
+PASS: gdb.linespec/ls-errs.exp: break :
+PASS: gdb.linespec/ls-errs.exp: break :
+PASS: gdb.linespec/ls-errs.exp: break :
+PASS: gdb.linespec/ls-errs.exp: break :
+PASS: gdb.linespec/ls-errs.exp: break :
+PASS: gdb.linespec/ls-errs.exp: break :
+PASS: gdb.linespec/ls-errs.exp: break :
+PASS: gdb.linespec/ls-errs.exp: break :
+PASS: gdb.linespec/ls-errs.exp: break :
+PASS: gdb.linespec/ls-errs.exp: break -100
+PASS: gdb.linespec/ls-errs.exp: break +500
+PASS: gdb.linespec/ls-errs.exp: break 1000
+PASS: gdb.linespec/ls-errs.exp: break 3:
+PASS: gdb.linespec/ls-errs.exp: break +10:
+PASS: gdb.linespec/ls-errs.exp: break -10:
+PASS: gdb.linespec/ls-errs.exp: break 3:
+PASS: gdb.linespec/ls-errs.exp: break +10:
+PASS: gdb.linespec/ls-errs.exp: break -10:
+PASS: gdb.linespec/ls-errs.exp: break 3 :
+PASS: gdb.linespec/ls-errs.exp: break +10 :
+PASS: gdb.linespec/ls-errs.exp: break -10 :
+PASS: gdb.linespec/ls-errs.exp: break 3 :
+PASS: gdb.linespec/ls-errs.exp: break +10 :
+PASS: gdb.linespec/ls-errs.exp: break -10 :
+PASS: gdb.linespec/ls-errs.exp: break 3 :
+PASS: gdb.linespec/ls-errs.exp: break +10 :
+PASS: gdb.linespec/ls-errs.exp: break -10 :
+PASS: gdb.linespec/ls-errs.exp: break 3 :
+PASS: gdb.linespec/ls-errs.exp: break +10 :
+PASS: gdb.linespec/ls-errs.exp: break -10 :
+PASS: gdb.linespec/ls-errs.exp: break 3 :
+PASS: gdb.linespec/ls-errs.exp: break +10 :
+PASS: gdb.linespec/ls-errs.exp: break -10 :
+PASS: gdb.linespec/ls-errs.exp: break 3 :
+PASS: gdb.linespec/ls-errs.exp: break +10 :
+PASS: gdb.linespec/ls-errs.exp: break -10 :
+PASS: gdb.linespec/ls-errs.exp: break 3 :
+PASS: gdb.linespec/ls-errs.exp: break +10 :
+PASS: gdb.linespec/ls-errs.exp: break -10 :
+PASS: gdb.linespec/ls-errs.exp: break 3 1
+PASS: gdb.linespec/ls-errs.exp: break +10 1
+PASS: gdb.linespec/ls-errs.exp: break -10 1
+PASS: gdb.linespec/ls-errs.exp: break 3 +1
+PASS: gdb.linespec/ls-errs.exp: break +10 +1
+PASS: gdb.linespec/ls-errs.exp: break -10 +1
+PASS: gdb.linespec/ls-errs.exp: break 3 +100
+PASS: gdb.linespec/ls-errs.exp: break +10 +100
+PASS: gdb.linespec/ls-errs.exp: break -10 +100
+PASS: gdb.linespec/ls-errs.exp: break 3 -10
+PASS: gdb.linespec/ls-errs.exp: break +10 -10
+PASS: gdb.linespec/ls-errs.exp: break -10 -10
+PASS: gdb.linespec/ls-errs.exp: break 3 foo
+PASS: gdb.linespec/ls-errs.exp: break +10 foo
+PASS: gdb.linespec/ls-errs.exp: break -10 foo
+PASS: gdb.linespec/ls-errs.exp: break this_file_doesn't_exist.c:3
+PASS: gdb.linespec/ls-errs.exp: break this file has spaces.c:3
+PASS: gdb.linespec/ls-errs.exp: break "file::colons.c":3
+PASS: gdb.linespec/ls-errs.exp: break 'file::colons.c':3
+PASS: gdb.linespec/ls-errs.exp: break "this "file" has quotes.c":3
+PASS: gdb.linespec/ls-errs.exp: break 'this "file" has quotes.c':3
+PASS: gdb.linespec/ls-errs.exp: break 'this 'file' has quotes.c':3
+PASS: gdb.linespec/ls-errs.exp: break "this 'file' has quotes.c":3
+PASS: gdb.linespec/ls-errs.exp: break "spaces: and :colons.c":3
+PASS: gdb.linespec/ls-errs.exp: break 'more: :spaces: :and colons::.c':3
+PASS: gdb.linespec/ls-errs.exp: break "src-file.c':3
+PASS: gdb.linespec/ls-errs.exp: break 'src-file.c:3
+PASS: gdb.linespec/ls-errs.exp: break ls-errs.c
+PASS: gdb.linespec/ls-errs.exp: break ls-errs.c:foo
+PASS: gdb.linespec/ls-errs.exp: break ls-errs.c:main:foo
+PASS: gdb.linespec/ls-errs.exp: break ls-errs.c: foo
+PASS: gdb.linespec/ls-errs.exp: break ls-errs.c:main: foo
+PASS: gdb.linespec/ls-errs.exp: break ls-errs.c: foo
+PASS: gdb.linespec/ls-errs.exp: break ls-errs.c:main: foo
+PASS: gdb.linespec/ls-errs.exp: break ls-errs.c:
+PASS: gdb.linespec/ls-errs.exp: break ls-errs.c:main:
+PASS: gdb.linespec/ls-errs.exp: break ls-errs.c:
+PASS: gdb.linespec/ls-errs.exp: break ls-errs.c:main:
+PASS: gdb.linespec/ls-errs.exp: break ls-errs.c :
+PASS: gdb.linespec/ls-errs.exp: break ls-errs.c:main :
+PASS: gdb.linespec/ls-errs.exp: break ls-errs.c :
+PASS: gdb.linespec/ls-errs.exp: break ls-errs.c:main :
+PASS: gdb.linespec/ls-errs.exp: break ls-errs.c :
+PASS: gdb.linespec/ls-errs.exp: break ls-errs.c:main :
+PASS: gdb.linespec/ls-errs.exp: break ls-errs.c :
+PASS: gdb.linespec/ls-errs.exp: break ls-errs.c:main :
+PASS: gdb.linespec/ls-errs.exp: break ls-errs.c :
+PASS: gdb.linespec/ls-errs.exp: break ls-errs.c:main :
+PASS: gdb.linespec/ls-errs.exp: break ls-errs.c :
+PASS: gdb.linespec/ls-errs.exp: break ls-errs.c:main :
+PASS: gdb.linespec/ls-errs.exp: break ls-errs.c :
+PASS: gdb.linespec/ls-errs.exp: break ls-errs.c:main :
+PASS: gdb.linespec/ls-errs.exp: break ls-errs.c::
+PASS: gdb.linespec/ls-errs.exp: break ls-errs.c:3 1
+PASS: gdb.linespec/ls-errs.exp: break ls-errs.c:3 +100
+PASS: gdb.linespec/ls-errs.exp: break ls-errs.c:3 -100
+PASS: gdb.linespec/ls-errs.exp: break ls-errs.c:3 foo
+PASS: gdb.linespec/ls-errs.exp: break ls-errs.c:-100
+PASS: gdb.linespec/ls-errs.exp: break "ls-errs.c:-100"
+PASS: gdb.linespec/ls-errs.exp: break 'ls-errs.c:-100'
+PASS: gdb.linespec/ls-errs.exp: break ls-errs.c:+500
+PASS: gdb.linespec/ls-errs.exp: break "ls-errs.c:+500"
+PASS: gdb.linespec/ls-errs.exp: break 'ls-errs.c:+500'
+PASS: gdb.linespec/ls-errs.exp: break ls-errs.c:1000
+PASS: gdb.linespec/ls-errs.exp: break "ls-errs.c:1000"
+PASS: gdb.linespec/ls-errs.exp: break 'ls-errs.c:1000'
+PASS: gdb.linespec/ls-errs.exp: break foobar
+PASS: gdb.linespec/ls-errs.exp: break foo::bar
+PASS: gdb.linespec/ls-errs.exp: break foo.bar
+PASS: gdb.linespec/ls-errs.exp: break foo .
+PASS: gdb.linespec/ls-errs.exp: break foo bar
+PASS: gdb.linespec/ls-errs.exp: break foo 1
+PASS: gdb.linespec/ls-errs.exp: break foo 0
+PASS: gdb.linespec/ls-errs.exp: break foo +10
+PASS: gdb.linespec/ls-errs.exp: break foo -10
+PASS: gdb.linespec/ls-errs.exp: break foo +100
+PASS: gdb.linespec/ls-errs.exp: break foo -100
+PASS: gdb.linespec/ls-errs.exp: break main:there
+PASS: gdb.linespec/ls-errs.exp: break main:here:
+PASS: gdb.linespec/ls-errs.exp: break main: there
+PASS: gdb.linespec/ls-errs.exp: break main:here:
+PASS: gdb.linespec/ls-errs.exp: break main :there
+PASS: gdb.linespec/ls-errs.exp: break main:here :
+PASS: gdb.linespec/ls-errs.exp: break main : there
+PASS: gdb.linespec/ls-errs.exp: break main:here :
+PASS: gdb.linespec/ls-errs.exp: break main : there
+PASS: gdb.linespec/ls-errs.exp: break main:here :
+PASS: gdb.linespec/ls-errs.exp: break main : there
+PASS: gdb.linespec/ls-errs.exp: break main:here :
+PASS: gdb.linespec/ls-errs.exp: break main : there
+PASS: gdb.linespec/ls-errs.exp: break main:here :
+PASS: gdb.linespec/ls-errs.exp: break main : there
+PASS: gdb.linespec/ls-errs.exp: break main:here :
+PASS: gdb.linespec/ls-errs.exp: break main : there
+PASS: gdb.linespec/ls-errs.exp: break main:here :
+PASS: gdb.linespec/ls-errs.exp: break main 3
+PASS: gdb.linespec/ls-errs.exp: break main +100
+PASS: gdb.linespec/ls-errs.exp: break main -100
+PASS: gdb.linespec/ls-errs.exp: break main foo
+PASS: gdb.linespec/ls-errs.exp: break main:here 3
+PASS: gdb.linespec/ls-errs.exp: break main:here +100
+PASS: gdb.linespec/ls-errs.exp: break main:here -100
+PASS: gdb.linespec/ls-errs.exp: break main:here foo
+PASS: gdb.linespec/ls-errs.exp: break if
+PASS: gdb.linespec/ls-errs.exp: break task
+PASS: gdb.linespec/ls-errs.exp: break thread
+PASS: gdb.linespec/ls-errs.exp: break 'main.c'flubber
+PASS: gdb.linespec/ls-errs.exp: break 'main.c',21
+PASS: gdb.linespec/ls-errs.exp: break 'main.c'
+PASS: gdb.linespec/ls-errs.exp: break 'main.c'3
+PASS: gdb.linespec/ls-errs.exp: break 'main.c'+3
+PASS: gdb.linespec/ls-errs.exp: break $zippo
+PASS: gdb.linespec/ls-errs.exp: break ls-errs.c:$zippo
+Running ./gdb.linespec/macro-relative.exp ...
+FAIL: gdb.linespec/macro-relative.exp: info macro HEADER
+Running ./gdb.linespec/skip-two.exp ...
+PASS: gdb.linespec/skip-two.exp: skip function dupname
+PASS: gdb.linespec/skip-two.exp: dupname ignored from main
+PASS: gdb.linespec/skip-two.exp: continue to breakpoint: n
+PASS: gdb.linespec/skip-two.exp: dupname ignored from n
+PASS: gdb.linespec/skip-two.exp: skip delete 1
+PASS: gdb.linespec/skip-two.exp: skip file thefile.cc
+PASS: gdb.linespec/skip-two.exp: step into dupname
+PASS: gdb.linespec/skip-two.exp: finish from dupname
+PASS: gdb.linespec/skip-two.exp: dupname ignored for thefile.cc
+Running ./gdb.linespec/thread.exp ...
+PASS: gdb.linespec/thread.exp: breakpoint line number in file
+PASS: gdb.linespec/thread.exp: continue to breakpoint: 29
+PASS: gdb.linespec/thread.exp: setting breakpoint at thread
+PASS: gdb.linespec/thread.exp: continue to breakpoint: thread function
+Running ./gdb.mi/dw2-ref-missing-frame.exp ...
+gdb compile failed, /usr/x86_64-pc-linux-gnu/i686-pc-linux-gnu/binutils-bin/2.22/ld.gold.real: internal error in output_address, at /var/tmp/portage/cross-i686-pc-linux-gnu/binutils-2.22-r20/work/binutils-2.22/gold/output.cc:3019
+collect2: error: ld returned 1 exit status
+Running ./gdb.mi/gdb2549.exp ...
+PASS: gdb.mi/gdb2549.exp: wrong arguments
+PASS: gdb.mi/gdb2549.exp: no executable
+PASS: gdb.mi/gdb2549.exp: breakpoint at main
+PASS: gdb.mi/gdb2549.exp: mi runto main
+PASS: gdb.mi/gdb2549.exp: register values x
+PASS: gdb.mi/gdb2549.exp: register values f
+PASS: gdb.mi/gdb2549.exp: register values d
+PASS: gdb.mi/gdb2549.exp: register values o
+PASS: gdb.mi/gdb2549.exp: register values t
+Running ./gdb.mi/gdb669.exp ...
+PASS: gdb.mi/gdb669.exp: successfully compiled posix threads test case
+PASS: gdb.mi/gdb669.exp: breakpoint at main
+PASS: gdb.mi/gdb669.exp: mi runto main
+PASS: gdb.mi/gdb669.exp: -thread-list-ids (at main)
+PASS: gdb.mi/gdb669.exp: info threads (at main)
+PASS: gdb.mi/gdb669.exp: finding MI result string (at main)
+PASS: gdb.mi/gdb669.exp: finding number of threads in MI output (at main)
+PASS: gdb.mi/gdb669.exp: got number of threads from MI (at main)
+PASS: gdb.mi/gdb669.exp: console and MI have same number of threads (at main)
+PASS: gdb.mi/gdb669.exp: -thread_list_ids (at main)
+PASS: gdb.mi/gdb669.exp: finding threads in MI output (at main)
+PASS: gdb.mi/gdb669.exp: MI and console have same threads (at main)
+PASS: gdb.mi/gdb669.exp: next, try 0
+PASS: gdb.mi/gdb669.exp: -thread-list-ids (try 0)
+PASS: gdb.mi/gdb669.exp: info threads (try 0)
+PASS: gdb.mi/gdb669.exp: finding MI result string (try 0)
+PASS: gdb.mi/gdb669.exp: finding number of threads in MI output (try 0)
+PASS: gdb.mi/gdb669.exp: got number of threads from MI (try 0)
+PASS: gdb.mi/gdb669.exp: console and MI have same number of threads (try 0)
+PASS: gdb.mi/gdb669.exp: -thread_list_ids (try 0)
+PASS: gdb.mi/gdb669.exp: finding threads in MI output (try 0)
+PASS: gdb.mi/gdb669.exp: MI and console have same threads (try 0)
+PASS: gdb.mi/gdb669.exp: next, try 1
+PASS: gdb.mi/gdb669.exp: -thread-list-ids (try 1)
+PASS: gdb.mi/gdb669.exp: info threads (try 1)
+PASS: gdb.mi/gdb669.exp: finding MI result string (try 1)
+PASS: gdb.mi/gdb669.exp: finding number of threads in MI output (try 1)
+PASS: gdb.mi/gdb669.exp: got number of threads from MI (try 1)
+PASS: gdb.mi/gdb669.exp: console and MI have same number of threads (try 1)
+PASS: gdb.mi/gdb669.exp: -thread_list_ids (try 1)
+PASS: gdb.mi/gdb669.exp: finding threads in MI output (try 1)
+PASS: gdb.mi/gdb669.exp: MI and console have same threads (try 1)
+PASS: gdb.mi/gdb669.exp: next, try 2
+PASS: gdb.mi/gdb669.exp: -thread-list-ids (try 2)
+PASS: gdb.mi/gdb669.exp: info threads (try 2)
+PASS: gdb.mi/gdb669.exp: finding MI result string (try 2)
+PASS: gdb.mi/gdb669.exp: finding number of threads in MI output (try 2)
+PASS: gdb.mi/gdb669.exp: got number of threads from MI (try 2)
+PASS: gdb.mi/gdb669.exp: console and MI have same number of threads (try 2)
+PASS: gdb.mi/gdb669.exp: -thread_list_ids (try 2)
+PASS: gdb.mi/gdb669.exp: finding threads in MI output (try 2)
+PASS: gdb.mi/gdb669.exp: MI and console have same threads (try 2)
+PASS: gdb.mi/gdb669.exp: next, try 3
+PASS: gdb.mi/gdb669.exp: -thread-list-ids (try 3)
+PASS: gdb.mi/gdb669.exp: info threads (try 3)
+PASS: gdb.mi/gdb669.exp: finding MI result string (try 3)
+PASS: gdb.mi/gdb669.exp: finding number of threads in MI output (try 3)
+PASS: gdb.mi/gdb669.exp: got number of threads from MI (try 3)
+PASS: gdb.mi/gdb669.exp: console and MI have same number of threads (try 3)
+PASS: gdb.mi/gdb669.exp: -thread_list_ids (try 3)
+PASS: gdb.mi/gdb669.exp: finding threads in MI output (try 3)
+PASS: gdb.mi/gdb669.exp: MI and console have same threads (try 3)
+Running ./gdb.mi/gdb680.exp ...
+PASS: gdb.mi/gdb680.exp: -data-list-register-names -1, try 0
+PASS: gdb.mi/gdb680.exp: -data-list-register-names -1, try 1
+PASS: gdb.mi/gdb680.exp: -data-list-register-names -1, try 2
+PASS: gdb.mi/gdb680.exp: -data-list-register-names -1, try 3
+PASS: gdb.mi/gdb680.exp: -data-list-register-names -1, try 4
+Running ./gdb.mi/gdb701.exp ...
+PASS: gdb.mi/gdb701.exp: breakpoint at main
+PASS: gdb.mi/gdb701.exp: mi runto main
+PASS: gdb.mi/gdb701.exp: step over "foo = 0"
+PASS: gdb.mi/gdb701.exp: create fooPtr
+PASS: gdb.mi/gdb701.exp: list children of fooPtr
+PASS: gdb.mi/gdb701.exp: list children of fooPtr.x
+PASS: gdb.mi/gdb701.exp: list children of fooPtr.y
+PASS: gdb.mi/gdb701.exp: list children of fooPtr.z
+Running ./gdb.mi/gdb792.exp ...
+PASS: gdb.mi/gdb792.exp: breakpoint at main
+PASS: gdb.mi/gdb792.exp: mi runto main
+PASS: gdb.mi/gdb792.exp: create var for class A
+PASS: gdb.mi/gdb792.exp: list children of class A
+PASS: gdb.mi/gdb792.exp: list children of A.public
+PASS: gdb.mi/gdb792.exp: list children of A.private
+PASS: gdb.mi/gdb792.exp: list children of A.protected
+PASS: gdb.mi/gdb792.exp: list children of A.protected.b
+PASS: gdb.mi/gdb792.exp: list children of A.protected.b.public
+PASS: gdb.mi/gdb792.exp: list children of A.protected.b.private
+PASS: gdb.mi/gdb792.exp: create var for class C which has baseclass A
+PASS: gdb.mi/gdb792.exp: list children of class C
+Running ./gdb.mi/mi2-amd64-entry-value.exp ...
+Running ./gdb.mi/mi2-prompt.exp ...
+PASS: gdb.mi/mi2-prompt.exp: console set prompt
+PASS: gdb.mi/mi2-prompt.exp: -break-list
+PASS: gdb.mi/mi2-prompt.exp: set prompt (banana)
+PASS: gdb.mi/mi2-prompt.exp: interpreter-exec mi -break-list
+Running ./gdb.mi/mi2-var-child.exp ...
+PASS: gdb.mi/mi2-var-child.exp: breakpoint at do_children_tests
+PASS: gdb.mi/mi2-var-child.exp: mi runto do_children_tests
+PASS: gdb.mi/mi2-var-child.exp: run to 237 (set breakpoint)
+PASS: gdb.mi/mi2-var-child.exp: create local variable struct_declarations
+PASS: gdb.mi/mi2-var-child.exp: get children of struct_declarations
+PASS: gdb.mi/mi2-var-child.exp: get number of children of struct_declarations
+PASS: gdb.mi/mi2-var-child.exp: get children of struct_declarations.integer
+PASS: gdb.mi/mi2-var-child.exp: get number of children of struct_declarations.integer
+PASS: gdb.mi/mi2-var-child.exp: get children of struct_declarations.character
+PASS: gdb.mi/mi2-var-child.exp: get number of children of struct_declarations.character
+PASS: gdb.mi/mi2-var-child.exp: get children of struct_declarations.char_ptr
+PASS: gdb.mi/mi2-var-child.exp: get number of children of struct_declarations.char_ptr
+PASS: gdb.mi/mi2-var-child.exp: get children of struct_declarations.long_int
+PASS: gdb.mi/mi2-var-child.exp: get number of children of struct_declarations.long_int
+PASS: gdb.mi/mi2-var-child.exp: get children of struct_declarations.int_ptr_ptr
+PASS: gdb.mi/mi2-var-child.exp: get number of children of struct_declarations.int_ptr_ptr
+PASS: gdb.mi/mi2-var-child.exp: get children of struct_declarations.long_array
+PASS: gdb.mi/mi2-var-child.exp: get number of children of struct_declarations.long_array
+PASS: gdb.mi/mi2-var-child.exp: get children of struct_declarations.func_ptr
+PASS: gdb.mi/mi2-var-child.exp: get number of children of struct_declarations.func_ptr
+PASS: gdb.mi/mi2-var-child.exp: get children of struct_declarations.func_ptr_struct
+PASS: gdb.mi/mi2-var-child.exp: get number of children of struct_declarations.func_ptr_struct
+PASS: gdb.mi/mi2-var-child.exp: get children of struct_declarations.func_ptr_ptr
+PASS: gdb.mi/mi2-var-child.exp: get number of children of struct_declarations.func_ptr_ptr
+PASS: gdb.mi/mi2-var-child.exp: get children of struct_declarations.u1
+PASS: gdb.mi/mi2-var-child.exp: get number of children of struct_declarations.u1
+PASS: gdb.mi/mi2-var-child.exp: get children of struct_declarations.s2
+PASS: gdb.mi/mi2-var-child.exp: get number of children of struct_declarations.s2
+PASS: gdb.mi/mi2-var-child.exp: get children of struct_declarations.long_array.1
+PASS: gdb.mi/mi2-var-child.exp: get number of children of struct_declarations.long_array.1
+PASS: gdb.mi/mi2-var-child.exp: get children of struct_declarations.long_array.2
+PASS: gdb.mi/mi2-var-child.exp: get number of children of struct_declarations.long_array.2
+PASS: gdb.mi/mi2-var-child.exp: get children of struct_declarations.long_array.3
+PASS: gdb.mi/mi2-var-child.exp: get number of children of struct_declarations.long_array.3
+PASS: gdb.mi/mi2-var-child.exp: get children of struct_declarations.long_array.4
+PASS: gdb.mi/mi2-var-child.exp: get number of children of struct_declarations.long_array.4
+PASS: gdb.mi/mi2-var-child.exp: get children of struct_declarations.long_array.5
+PASS: gdb.mi/mi2-var-child.exp: get number of children of struct_declarations.long_array.5
+PASS: gdb.mi/mi2-var-child.exp: get children of struct_declarations.long_array.6
+PASS: gdb.mi/mi2-var-child.exp: get number of children of struct_declarations.long_array.6
+PASS: gdb.mi/mi2-var-child.exp: get children of struct_declarations.long_array.7
+PASS: gdb.mi/mi2-var-child.exp: get number of children of struct_declarations.long_array.7
+PASS: gdb.mi/mi2-var-child.exp: get children of struct_declarations.long_array.8
+PASS: gdb.mi/mi2-var-child.exp: get number of children of struct_declarations.long_array.8
+PASS: gdb.mi/mi2-var-child.exp: get children of struct_declarations.long_array.9
+PASS: gdb.mi/mi2-var-child.exp: get number of children of struct_declarations.long_array.9
+PASS: gdb.mi/mi2-var-child.exp: get children of struct_declarations.u1.a
+PASS: gdb.mi/mi2-var-child.exp: get number of children of struct_declarations.u1.a
+PASS: gdb.mi/mi2-var-child.exp: get children of struct_declarations.u1.b
+PASS: gdb.mi/mi2-var-child.exp: get number of children of struct_declarations.u1.b
+PASS: gdb.mi/mi2-var-child.exp: get children of struct_declarations.u1.c
+PASS: gdb.mi/mi2-var-child.exp: get number of children of struct_declarations.u1.c
+PASS: gdb.mi/mi2-var-child.exp: get children of struct_declarations.u1.d
+PASS: gdb.mi/mi2-var-child.exp: get number of children of struct_declarations.u1.d
+PASS: gdb.mi/mi2-var-child.exp: get children of struct_declarations.s2.u2
+PASS: gdb.mi/mi2-var-child.exp: get number of children of struct_declarations.s2.u2
+PASS: gdb.mi/mi2-var-child.exp: get children of struct_declarations.s2.g
+PASS: gdb.mi/mi2-var-child.exp: get number of children of struct_declarations.s2.g
+PASS: gdb.mi/mi2-var-child.exp: get children of struct_declarations.s2.h
+PASS: gdb.mi/mi2-var-child.exp: get number of children of struct_declarations.s2.h
+PASS: gdb.mi/mi2-var-child.exp: get children of struct_declarations.s2.i
+PASS: gdb.mi/mi2-var-child.exp: get number of children of struct_declarations.s2.i
+PASS: gdb.mi/mi2-var-child.exp: get children of struct_declarations.s2.u2.u1s1
+PASS: gdb.mi/mi2-var-child.exp: get number of children of struct_declarations.s2.u2.u1s1
+PASS: gdb.mi/mi2-var-child.exp: get children of struct_declarations.s2.u2.f
+PASS: gdb.mi/mi2-var-child.exp: get number of children of struct_declarations.s2.u2.f
+PASS: gdb.mi/mi2-var-child.exp: get children of struct_declarations.s2.u2.u1s2
+PASS: gdb.mi/mi2-var-child.exp: get number of children of struct_declarations.s2.u2.u1s2
+PASS: gdb.mi/mi2-var-child.exp: get children of struct_declarations.s2.u2.u1s1.d
+PASS: gdb.mi/mi2-var-child.exp: get number of children of struct_declarations.s2.u2.u1s1.d
+PASS: gdb.mi/mi2-var-child.exp: get children of struct_declarations.s2.u2.u1s1.e
+PASS: gdb.mi/mi2-var-child.exp: get number of children of struct_declarations.s2.u2.u1s1.e
+PASS: gdb.mi/mi2-var-child.exp: get children of struct_declarations.s2.u2.u1s1.func
+PASS: gdb.mi/mi2-var-child.exp: get number of children of struct_declarations.s2.u2.u1s1.func
+PASS: gdb.mi/mi2-var-child.exp: get children of struct_declarations.s2.u2.u1s1.foo
+PASS: gdb.mi/mi2-var-child.exp: get number of children of struct_declarations.s2.u2.u1s1.foo
+PASS: gdb.mi/mi2-var-child.exp: get children of struct_declarations.s2.u2.u1s2.array_ptr
+PASS: gdb.mi/mi2-var-child.exp: get number of children of struct_declarations.s2.u2.u1s2.array_ptr
+PASS: gdb.mi/mi2-var-child.exp: get children of struct_declarations.s2.u2.u1s2.func
+PASS: gdb.mi/mi2-var-child.exp: get number of children of struct_declarations.s2.u2.u1s2.func
+PASS: gdb.mi/mi2-var-child.exp: get children of struct_declarations.int_ptr_ptr.*int_ptr_ptr
+PASS: gdb.mi/mi2-var-child.exp: get number of children of struct_declarations.int_ptr_ptr.*int_ptr_ptr
+PASS: gdb.mi/mi2-var-child.exp: step to line $line_dct_123
+PASS: gdb.mi/mi2-var-child.exp: create local variable weird
+PASS: gdb.mi/mi2-var-child.exp: get children of weird
+PASS: gdb.mi/mi2-var-child.exp: get number of children of weird
+PASS: gdb.mi/mi2-var-child.exp: get children of weird.long_array
+PASS: gdb.mi/mi2-var-child.exp: get number of children of weird.long_array
+PASS: gdb.mi/mi2-var-child.exp: get children of weird.int_ptr_ptr
+PASS: gdb.mi/mi2-var-child.exp: get number of children of weird.int_ptr_ptr
+PASS: gdb.mi/mi2-var-child.exp: get children of weird.int_ptr_ptr.*int_ptr_ptr
+PASS: gdb.mi/mi2-var-child.exp: get number of children of weird.int_ptr_ptr.*int_ptr_ptr
+PASS: gdb.mi/mi2-var-child.exp: create local variable weird->int_ptr_ptr
+PASS: gdb.mi/mi2-var-child.exp: get children of weird->int_ptr_ptr
+PASS: gdb.mi/mi2-var-child.exp: get number of children of weird->int_ptr_ptr
+PASS: gdb.mi/mi2-var-child.exp: get children of weird->int_ptr_ptr.*weird->int_ptr_ptr
+PASS: gdb.mi/mi2-var-child.exp: get number of children of weird->int_ptr_ptr.*weird->int_ptr_ptr
+PASS: gdb.mi/mi2-var-child.exp: get children of weird->int_ptr_ptr.*weird->int_ptr_ptr.**weird->int_ptr_ptr
+PASS: gdb.mi/mi2-var-child.exp: get number of children of weird->int_ptr_ptr.*weird->int_ptr_ptr.**weird->int_ptr_ptr
+PASS: gdb.mi/mi2-var-child.exp: is weird editable
+PASS: gdb.mi/mi2-var-child.exp: is weird->int_ptr_ptr editable
+PASS: gdb.mi/mi2-var-child.exp: is weird.int_ptr_ptr.*int_ptr_ptr editable
+PASS: gdb.mi/mi2-var-child.exp: is weird.int_ptr_ptr.*int_ptr_ptr.**int_ptr_ptr editable
+PASS: gdb.mi/mi2-var-child.exp: is weird.u1 editable
+PASS: gdb.mi/mi2-var-child.exp: is weird.s2 editable
+PASS: gdb.mi/mi2-var-child.exp: is struct_declarations.u1.a editable
+PASS: gdb.mi/mi2-var-child.exp: is struct_declarations.u1.b editable
+PASS: gdb.mi/mi2-var-child.exp: is struct_declarations.u1.c editable
+PASS: gdb.mi/mi2-var-child.exp: is struct_declarations.long_array editable
+PASS: gdb.mi/mi2-var-child.exp: is struct_declarations.long_array.0 editable
+PASS: gdb.mi/mi2-var-child.exp: is struct_declarations editable
+PASS: gdb.mi/mi2-var-child.exp: delete var weird
+PASS: gdb.mi/mi2-var-child.exp: update all vars. None changed
+PASS: gdb.mi/mi2-var-child.exp: step $line_dct_123 + 1
+PASS: gdb.mi/mi2-var-child.exp: update all vars struct_declarations.integer
+PASS: gdb.mi/mi2-var-child.exp: step $line_dct_123 + 4
+PASS: gdb.mi/mi2-var-child.exp: update all vars struct_declarations.char_ptr
+PASS: gdb.mi/mi2-var-child.exp: step $line_dct_123 + 5
+PASS: gdb.mi/mi2-var-child.exp: update all vars int_ptr_ptr and children changed
+PASS: gdb.mi/mi2-var-child.exp: step $line_dct_123 + 6
+PASS: gdb.mi/mi2-var-child.exp: update all vars struct_declarations.long_array.0 changed
+PASS: gdb.mi/mi2-var-child.exp: step $line_dct_123 + 7
+PASS: gdb.mi/mi2-var-child.exp: update all vars struct_declarations.long_array.1 changed
+PASS: gdb.mi/mi2-var-child.exp: step $line_dct_123 + 8
+PASS: gdb.mi/mi2-var-child.exp: update all vars struct_declarations.long_array.2 changed
+PASS: gdb.mi/mi2-var-child.exp: step $line_dct_nothing
+PASS: gdb.mi/mi2-var-child.exp: update all vars struct_declarations.long_array.3-9 changed
+PASS: gdb.mi/mi2-var-child.exp: step $line_dct_a0_0
+PASS: gdb.mi/mi2-var-child.exp: update all vars struct_declarations.func_ptr changed
+PASS: gdb.mi/mi2-var-child.exp: delete var struct_declarations
+PASS: gdb.mi/mi2-var-child.exp: delete var weird->int_ptr_ptr
+PASS: gdb.mi/mi2-var-child.exp: step $line_dct_snp0 + 1
+PASS: gdb.mi/mi2-var-child.exp: create local variable psnp->char_ptr
+PASS: gdb.mi/mi2-var-child.exp: get children of psnp->char_ptr
+PASS: gdb.mi/mi2-var-child.exp: get number of children of psnp->char_ptr
+PASS: gdb.mi/mi2-var-child.exp: get children of psnp->char_ptr.*psnp->char_ptr
+PASS: gdb.mi/mi2-var-child.exp: get number of children of psnp->char_ptr.*psnp->char_ptr
+PASS: gdb.mi/mi2-var-child.exp: get children of psnp->char_ptr.*psnp->char_ptr.**psnp->char_ptr
+PASS: gdb.mi/mi2-var-child.exp: get children of psnp->char_ptr.*psnp->char_ptr.**psnp->char_ptr.***psnp->char_ptr
+PASS: gdb.mi/mi2-var-child.exp: get number of children of psnp->char_ptr.*psnp->char_ptr.**psnp->char_ptr
+PASS: gdb.mi/mi2-var-child.exp: get children of psnp->char_ptr.*psnp->char_ptr.**psnp->char_ptr.***psnp->char_ptr
+PASS: gdb.mi/mi2-var-child.exp: get number of children of psnp->char_ptr.*psnp->char_ptr.**psnp->char_ptr.***psnp->char_ptr
+PASS: gdb.mi/mi2-var-child.exp: get children of psnp->char_ptr.*psnp->char_ptr.**psnp->char_ptr.***psnp->char_ptr.****psnp->char_ptr
+PASS: gdb.mi/mi2-var-child.exp: get number of children of psnp->char_ptr.*psnp->char_ptr.**psnp->char_ptr.***psnp->char_ptr.****psnp->char_ptr
+PASS: gdb.mi/mi2-var-child.exp: create local variable psnp->long_ptr
+PASS: gdb.mi/mi2-var-child.exp: get children of psnp->long_ptr
+PASS: gdb.mi/mi2-var-child.exp: get number of children of psnp->long_ptr
+PASS: gdb.mi/mi2-var-child.exp: get children of psnp->long_ptr.*psnp->long_ptr
+PASS: gdb.mi/mi2-var-child.exp: get number of children of psnp->long_ptr.*psnp->long_ptr
+PASS: gdb.mi/mi2-var-child.exp: get children of psnp->long_ptr.*psnp->long_ptr.**psnp->long_ptr
+PASS: gdb.mi/mi2-var-child.exp: get number of children of psnp->long_ptr.*psnp->long_ptr.**psnp->long_ptr
+PASS: gdb.mi/mi2-var-child.exp: get children of psnp->long_ptr.*psnp->long_ptr.**psnp->long_ptr.***psnp->long_ptr
+PASS: gdb.mi/mi2-var-child.exp: get number of children of psnp->long_ptr.*psnp->long_ptr.**psnp->long_ptr.***psnp->long_ptr
+PASS: gdb.mi/mi2-var-child.exp: get children of psnp->long_ptr.*psnp->long_ptr.**psnp->long_ptr.***psnp->long_ptr.****psnp->long_ptr
+PASS: gdb.mi/mi2-var-child.exp: get number of children of psnp->long_ptr.*psnp->long_ptr.**psnp->long_ptr.***psnp->long_ptr.****psnp->long_ptr
+PASS: gdb.mi/mi2-var-child.exp: create local variable psnp->ptrs
+PASS: gdb.mi/mi2-var-child.exp: get children of psnp->ptrs
+PASS: gdb.mi/mi2-var-child.exp: get number of children of psnp->ptrs
+PASS: gdb.mi/mi2-var-child.exp: get children of psnp->ptrs.0
+PASS: gdb.mi/mi2-var-child.exp: get number of children of psnp->ptrs.0
+PASS: gdb.mi/mi2-var-child.exp: get children of psnp->ptrs.0.next
+PASS: gdb.mi/mi2-var-child.exp: get number of children of psnp->ptrs.0.next
+PASS: gdb.mi/mi2-var-child.exp: get children of psnp->ptrs.0.next.char_ptr
+PASS: gdb.mi/mi2-var-child.exp: get number of children of psnp->ptrs.0.next.char_ptr
+PASS: gdb.mi/mi2-var-child.exp: get children of psnp->ptrs.0.next.char_ptr.*char_ptr
+PASS: gdb.mi/mi2-var-child.exp: get number of children of psnp->ptrs.0.next.char_ptr.*char_ptr
+PASS: gdb.mi/mi2-var-child.exp: get children of psnp->ptrs.0.next.char_ptr.*char_ptr.**char_ptr
+PASS: gdb.mi/mi2-var-child.exp: get children of psnp->ptrs.0.next.char_ptr.*char_ptr.**char_ptr
+PASS: gdb.mi/mi2-var-child.exp: get number of children of psnp->ptrs.0.next.char_ptr.*char_ptr.**char_ptr
+PASS: gdb.mi/mi2-var-child.exp: get children of psnp->ptrs.0.next.char_ptr.*char_ptr.**char_ptr.***char_ptr
+PASS: gdb.mi/mi2-var-child.exp: get number of children of psnp->ptrs.0.next.char_ptr.*char_ptr.**char_ptr.***char_ptr
+PASS: gdb.mi/mi2-var-child.exp: get children of psnp->ptrs.0.next.char_ptr.*char_ptr.**char_ptr.***char_ptr
+PASS: gdb.mi/mi2-var-child.exp: get number of children of psnp->ptrs.0.next.char_ptr.*char_ptr.**char_ptr.***char_ptr
+PASS: gdb.mi/mi2-var-child.exp: get children of psnp->ptrs.0.next.next
+PASS: gdb.mi/mi2-var-child.exp: get children of psnp->ptrs.0.next.next.ptrs
+PASS: gdb.mi/mi2-var-child.exp: step $line_dct_snp0 + 2
+PASS: gdb.mi/mi2-var-child.exp: update all vars psnp->char_ptr (and 0.char_ptr) changed
+PASS: gdb.mi/mi2-var-child.exp: step $line_dct_snp0 + 3
+PASS: gdb.mi/mi2-var-child.exp: update all vars psnp->next->char_ptr (and 1.char_ptr) changed
+PASS: gdb.mi/mi2-var-child.exp: step $line_dct_snp0 + 4
+PASS: gdb.mi/mi2-var-child.exp: update all vars psnp->next->next->char_ptr (and 2.char_ptr) changed
+PASS: gdb.mi/mi2-var-child.exp: step $line_dct_snp0 + 5
+PASS: gdb.mi/mi2-var-child.exp: update all vars psnp->long_ptr (and 0.long_ptr) changed
+PASS: gdb.mi/mi2-var-child.exp: step $line_dct_snp0 + 6
+XFAIL: gdb.mi/mi2-var-child.exp: update all vars psnp->next->long_ptr (and 1.long_ptr) changed
+PASS: gdb.mi/mi2-var-child.exp: step $line_dct_snp0 + 7
+PASS: gdb.mi/mi2-var-child.exp: update all vars psnp->next->next->long_ptr (and 2.long_ptr) changed
+PASS: gdb.mi/mi2-var-child.exp: break in do_anonymous_type_tests
+PASS: gdb.mi/mi2-var-child.exp: continue to do_anonymous_type_tests breakpoint
+PASS: gdb.mi/mi2-var-child.exp: VT: create root varobj for ptr
+PASS: gdb.mi/mi2-var-child.exp: VT: list children of ptr2
+PASS: gdb.mi/mi2-var-child.exp: path expression for ptr2
+PASS: gdb.mi/mi2-var-child.exp: expression for ptr2
+PASS: gdb.mi/mi2-var-child.exp: VT: list children of ptr2.*ptr
+PASS: gdb.mi/mi2-var-child.exp: path expression for ptr2.*ptr
+PASS: gdb.mi/mi2-var-child.exp: expression for ptr2.*ptr
+PASS: gdb.mi/mi2-var-child.exp: path expression for ptr2.*ptr.a
+PASS: gdb.mi/mi2-var-child.exp: expression for ptr2.*ptr.a
+PASS: gdb.mi/mi2-var-child.exp: VT: list children of ptr2.*ptr.1_anonymous
+PASS: gdb.mi/mi2-var-child.exp: path expression for ptr2.*ptr.1_anonymous
+PASS: gdb.mi/mi2-var-child.exp: expression for ptr2.*ptr.1_anonymous
+PASS: gdb.mi/mi2-var-child.exp: path expression for ptr2.*ptr.1_anonymous.b
+PASS: gdb.mi/mi2-var-child.exp: expression for ptr2.*ptr.1_anonymous.b
+PASS: gdb.mi/mi2-var-child.exp: VT: list children of ptr2.*ptr.1_anonymous.c
+PASS: gdb.mi/mi2-var-child.exp: path expression for ptr2.*ptr.1_anonymous.c
+PASS: gdb.mi/mi2-var-child.exp: expression for ptr2.*ptr.1_anonymous.c
+PASS: gdb.mi/mi2-var-child.exp: VT: list children of ptr2.*ptr.1_anonymous.2_anonymous
+PASS: gdb.mi/mi2-var-child.exp: path expression for ptr2.*ptr.1_anonymous.2_anonymous
+PASS: gdb.mi/mi2-var-child.exp: expression for ptr2.*ptr.1_anonymous.2_anonymous
+PASS: gdb.mi/mi2-var-child.exp: path expression for ptr2.*ptr.1_anonymous.c.*c
+PASS: gdb.mi/mi2-var-child.exp: expression for ptr2.*ptr.1_anonymous.c.*c
+PASS: gdb.mi/mi2-var-child.exp: path expression for ptr2.*ptr.1_anonymous.2_anonymous.d
+PASS: gdb.mi/mi2-var-child.exp: expression for ptr2.*ptr.1_anonymous.2_anonymous.d
+PASS: gdb.mi/mi2-var-child.exp: path expression for ptr2.*ptr.1_anonymous.2_anonymous.e
+PASS: gdb.mi/mi2-var-child.exp: expression for ptr2.*ptr.1_anonymous.2_anonymous.e
+PASS: gdb.mi/mi2-var-child.exp: path expression for ptr2.*ptr.1_anonymous.2_anonymous.f
+PASS: gdb.mi/mi2-var-child.exp: expression for ptr2.*ptr.1_anonymous.2_anonymous.f
+PASS: gdb.mi/mi2-var-child.exp: VT: list children of ptr2.*ptr.1_anonymous.2_anonymous.3_anonymous
+PASS: gdb.mi/mi2-var-child.exp: path expression for ptr2.*ptr.1_anonymous.2_anonymous.3_anonymous
+PASS: gdb.mi/mi2-var-child.exp: expression for ptr2.*ptr.1_anonymous.2_anonymous.3_anonymous
+PASS: gdb.mi/mi2-var-child.exp: path expression for ptr2.*ptr.1_anonymous.2_anonymous.3_anonymous.g
+PASS: gdb.mi/mi2-var-child.exp: expression for ptr2.*ptr.1_anonymous.2_anonymous.3_anonymous.g
+PASS: gdb.mi/mi2-var-child.exp: VT: list children of ptr2.*ptr.1_anonymous.2_anonymous.3_anonymous.h
+PASS: gdb.mi/mi2-var-child.exp: path expression for ptr2.*ptr.1_anonymous.2_anonymous.3_anonymous.h
+PASS: gdb.mi/mi2-var-child.exp: expression for ptr2.*ptr.1_anonymous.2_anonymous.3_anonymous.h
+PASS: gdb.mi/mi2-var-child.exp: VT: list children of ptr2.*ptr.1_anonymous.2_anonymous.3_anonymous.simple
+PASS: gdb.mi/mi2-var-child.exp: path expression for ptr2.*ptr.1_anonymous.2_anonymous.3_anonymous.simple
+PASS: gdb.mi/mi2-var-child.exp: expression for ptr2.*ptr.1_anonymous.2_anonymous.3_anonymous.simple
+PASS: gdb.mi/mi2-var-child.exp: VT: list children of ptr2.*ptr.1_anonymous.2_anonymous.3_anonymous.h.*h
+PASS: gdb.mi/mi2-var-child.exp: path expression for ptr2.*ptr.1_anonymous.2_anonymous.3_anonymous.h.*h
+PASS: gdb.mi/mi2-var-child.exp: expression for ptr2.*ptr.1_anonymous.2_anonymous.3_anonymous.h.*h
+PASS: gdb.mi/mi2-var-child.exp: VT: list children of ptr2.*ptr.1_anonymous.2_anonymous.3_anonymous.simple.*simple
+PASS: gdb.mi/mi2-var-child.exp: path expression for ptr2.*ptr.1_anonymous.2_anonymous.3_anonymous.simple.*simple
+PASS: gdb.mi/mi2-var-child.exp: expression for ptr2.*ptr.1_anonymous.2_anonymous.3_anonymous.simple.*simple
+PASS: gdb.mi/mi2-var-child.exp: path expression for ptr2.*ptr.1_anonymous.2_anonymous.3_anonymous.h.*h.**h
+PASS: gdb.mi/mi2-var-child.exp: expression for ptr2.*ptr.1_anonymous.2_anonymous.3_anonymous.h.*h.**h
+PASS: gdb.mi/mi2-var-child.exp: VT: list children of ptr2.*ptr.1_anonymous.2_anonymous.3_anonymous.simple.*simple.**simple
+PASS: gdb.mi/mi2-var-child.exp: path expression for ptr2.*ptr.1_anonymous.2_anonymous.3_anonymous.simple.*simple.**simple
+PASS: gdb.mi/mi2-var-child.exp: expression for ptr2.*ptr.1_anonymous.2_anonymous.3_anonymous.simple.*simple.**simple
+PASS: gdb.mi/mi2-var-child.exp: path expression for ptr2.*ptr.1_anonymous.2_anonymous.3_anonymous.simple.*simple.**simple.integer
+PASS: gdb.mi/mi2-var-child.exp: expression for ptr2.*ptr.1_anonymous.2_anonymous.3_anonymous.simple.*simple.**simple.integer
+PASS: gdb.mi/mi2-var-child.exp: path expression for ptr2.*ptr.1_anonymous.2_anonymous.3_anonymous.simple.*simple.**simple.unsigned_integer
+PASS: gdb.mi/mi2-var-child.exp: expression for ptr2.*ptr.1_anonymous.2_anonymous.3_anonymous.simple.*simple.**simple.unsigned_integer
+PASS: gdb.mi/mi2-var-child.exp: path expression for ptr2.*ptr.1_anonymous.2_anonymous.3_anonymous.simple.*simple.**simple.character
+PASS: gdb.mi/mi2-var-child.exp: expression for ptr2.*ptr.1_anonymous.2_anonymous.3_anonymous.simple.*simple.**simple.character
+PASS: gdb.mi/mi2-var-child.exp: path expression for ptr2.*ptr.1_anonymous.2_anonymous.3_anonymous.simple.*simple.**simple.signed_character
+PASS: gdb.mi/mi2-var-child.exp: expression for ptr2.*ptr.1_anonymous.2_anonymous.3_anonymous.simple.*simple.**simple.signed_character
+PASS: gdb.mi/mi2-var-child.exp: VT: list children of ptr2.*ptr.1_anonymous.2_anonymous.3_anonymous.simple.*simple.**simple.char_ptr
+PASS: gdb.mi/mi2-var-child.exp: path expression for ptr2.*ptr.1_anonymous.2_anonymous.3_anonymous.simple.*simple.**simple.char_ptr
+PASS: gdb.mi/mi2-var-child.exp: expression for ptr2.*ptr.1_anonymous.2_anonymous.3_anonymous.simple.*simple.**simple.char_ptr
+PASS: gdb.mi/mi2-var-child.exp: VT: list children of ptr2.*ptr.1_anonymous.2_anonymous.3_anonymous.simple.*simple.**simple.array_of_10
+PASS: gdb.mi/mi2-var-child.exp: path expression for ptr2.*ptr.1_anonymous.2_anonymous.3_anonymous.simple.*simple.**simple.array_of_10
+PASS: gdb.mi/mi2-var-child.exp: expression for ptr2.*ptr.1_anonymous.2_anonymous.3_anonymous.simple.*simple.**simple.array_of_10
+PASS: gdb.mi/mi2-var-child.exp: path expression for ptr2.*ptr.1_anonymous.2_anonymous.3_anonymous.simple.*simple.**simple.char_ptr.*char_ptr
+PASS: gdb.mi/mi2-var-child.exp: expression for ptr2.*ptr.1_anonymous.2_anonymous.3_anonymous.simple.*simple.**simple.char_ptr.*char_ptr
+PASS: gdb.mi/mi2-var-child.exp: path expression for ptr2.*ptr.1_anonymous.2_anonymous.3_anonymous.simple.*simple.**simple.array_of_10.0
+PASS: gdb.mi/mi2-var-child.exp: expression for ptr2.*ptr.1_anonymous.2_anonymous.3_anonymous.simple.*simple.**simple.array_of_10.0
+PASS: gdb.mi/mi2-var-child.exp: path expression for ptr2.*ptr.1_anonymous.2_anonymous.3_anonymous.simple.*simple.**simple.array_of_10.1
+PASS: gdb.mi/mi2-var-child.exp: expression for ptr2.*ptr.1_anonymous.2_anonymous.3_anonymous.simple.*simple.**simple.array_of_10.1
+PASS: gdb.mi/mi2-var-child.exp: path expression for ptr2.*ptr.1_anonymous.2_anonymous.3_anonymous.simple.*simple.**simple.array_of_10.2
+PASS: gdb.mi/mi2-var-child.exp: expression for ptr2.*ptr.1_anonymous.2_anonymous.3_anonymous.simple.*simple.**simple.array_of_10.2
+PASS: gdb.mi/mi2-var-child.exp: path expression for ptr2.*ptr.1_anonymous.2_anonymous.3_anonymous.simple.*simple.**simple.array_of_10.3
+PASS: gdb.mi/mi2-var-child.exp: expression for ptr2.*ptr.1_anonymous.2_anonymous.3_anonymous.simple.*simple.**simple.array_of_10.3
+PASS: gdb.mi/mi2-var-child.exp: path expression for ptr2.*ptr.1_anonymous.2_anonymous.3_anonymous.simple.*simple.**simple.array_of_10.4
+PASS: gdb.mi/mi2-var-child.exp: expression for ptr2.*ptr.1_anonymous.2_anonymous.3_anonymous.simple.*simple.**simple.array_of_10.4
+PASS: gdb.mi/mi2-var-child.exp: path expression for ptr2.*ptr.1_anonymous.2_anonymous.3_anonymous.simple.*simple.**simple.array_of_10.5
+PASS: gdb.mi/mi2-var-child.exp: expression for ptr2.*ptr.1_anonymous.2_anonymous.3_anonymous.simple.*simple.**simple.array_of_10.5
+PASS: gdb.mi/mi2-var-child.exp: path expression for ptr2.*ptr.1_anonymous.2_anonymous.3_anonymous.simple.*simple.**simple.array_of_10.6
+PASS: gdb.mi/mi2-var-child.exp: expression for ptr2.*ptr.1_anonymous.2_anonymous.3_anonymous.simple.*simple.**simple.array_of_10.6
+PASS: gdb.mi/mi2-var-child.exp: path expression for ptr2.*ptr.1_anonymous.2_anonymous.3_anonymous.simple.*simple.**simple.array_of_10.7
+PASS: gdb.mi/mi2-var-child.exp: expression for ptr2.*ptr.1_anonymous.2_anonymous.3_anonymous.simple.*simple.**simple.array_of_10.7
+PASS: gdb.mi/mi2-var-child.exp: path expression for ptr2.*ptr.1_anonymous.2_anonymous.3_anonymous.simple.*simple.**simple.array_of_10.8
+PASS: gdb.mi/mi2-var-child.exp: expression for ptr2.*ptr.1_anonymous.2_anonymous.3_anonymous.simple.*simple.**simple.array_of_10.8
+PASS: gdb.mi/mi2-var-child.exp: path expression for ptr2.*ptr.1_anonymous.2_anonymous.3_anonymous.simple.*simple.**simple.array_of_10.9
+PASS: gdb.mi/mi2-var-child.exp: expression for ptr2.*ptr.1_anonymous.2_anonymous.3_anonymous.simple.*simple.**simple.array_of_10.9
+PASS: gdb.mi/mi2-var-child.exp: VT: create root varobj for v
+PASS: gdb.mi/mi2-var-child.exp: VT: list children of v3
+PASS: gdb.mi/mi2-var-child.exp: path expression for v3
+PASS: gdb.mi/mi2-var-child.exp: expression for v3
+PASS: gdb.mi/mi2-var-child.exp: path expression for v3.x
+PASS: gdb.mi/mi2-var-child.exp: expression for v3.x
+PASS: gdb.mi/mi2-var-child.exp: VT: list children of v3.1_anonymous
+PASS: gdb.mi/mi2-var-child.exp: path expression for v3.1_anonymous
+PASS: gdb.mi/mi2-var-child.exp: expression for v3.1_anonymous
+PASS: gdb.mi/mi2-var-child.exp: VT: list children of v3.2_anonymous
+PASS: gdb.mi/mi2-var-child.exp: path expression for v3.2_anonymous
+PASS: gdb.mi/mi2-var-child.exp: expression for v3.2_anonymous
+PASS: gdb.mi/mi2-var-child.exp: path expression for v3.1_anonymous.a
+PASS: gdb.mi/mi2-var-child.exp: expression for v3.1_anonymous.a
+PASS: gdb.mi/mi2-var-child.exp: path expression for v3.2_anonymous.b
+PASS: gdb.mi/mi2-var-child.exp: expression for v3.2_anonymous.b
+Running ./gdb.mi/mi-async.exp ...
+Running ./gdb.mi/mi-basics.exp ...
+PASS: gdb.mi/mi-basics.exp: acceptance of MI operations
+PASS: gdb.mi/mi-basics.exp: file-exec-and-symbols operation
+PASS: gdb.mi/mi-basics.exp: file-exec-file operation
+PASS: gdb.mi/mi-basics.exp: file-symbol-file operation
+PASS: gdb.mi/mi-basics.exp: break-delete (all) operation
+PASS: gdb.mi/mi-basics.exp: all breakpoints removed
+PASS: gdb.mi/mi-basics.exp: environment-directory arg operation
+PASS: gdb.mi/mi-basics.exp: environment-directory empty-string operation
+PASS: gdb.mi/mi-basics.exp: environment-directory operation
+PASS: gdb.mi/mi-basics.exp: environment-cd arg operation
+PASS: gdb.mi/mi-basics.exp: environment-pwd operation
+PASS: gdb.mi/mi-basics.exp: environment-path
+PASS: gdb.mi/mi-basics.exp: environment-path no-args operation
+PASS: gdb.mi/mi-basics.exp: environment-path dir1 dir2 operation
+PASS: gdb.mi/mi-basics.exp: environment-path -r dir operation
+PASS: gdb.mi/mi-basics.exp: environment-path -r operation
+PASS: gdb.mi/mi-basics.exp: initial tty is mi_inferior_tty_name
+PASS: gdb.mi/mi-basics.exp: set tty to /dev/pts/1
+PASS: gdb.mi/mi-basics.exp: tty was set correctly
+PASS: gdb.mi/mi-basics.exp: set tty to the empty string
+PASS: gdb.mi/mi-basics.exp: make sure tty is empty
+PASS: gdb.mi/mi-basics.exp: set tty to mi_inferior_tty_name (the way it was)
+PASS: gdb.mi/mi-basics.exp: verify tty is correct
+Running ./gdb.mi/mi-break.exp ...
+PASS: gdb.mi/mi-break.exp: break-insert -t operation
+PASS: gdb.mi/mi-break.exp: insert temp breakpoint at basics.c:callee2
+PASS: gdb.mi/mi-break.exp: insert temp breakpoint at basics.c:$line_callee3_head
+PASS: gdb.mi/mi-break.exp: insert temp breakpoint at "<fullfilename>":$line_callee4_head
+PASS: gdb.mi/mi-break.exp: list of breakpoints
+PASS: gdb.mi/mi-break.exp: delete temp breakpoints
+KFAIL: gdb.mi/mi-break.exp: break-insert -r operation (PRMS: mi/14270)
+KFAIL: gdb.mi/mi-break.exp: insert breakpoint with regexp callee2 (PRMS: mi/14270)
+KFAIL: gdb.mi/mi-break.exp: insert breakpoint with regexp callee (PRMS: mi/14270)
+KFAIL: gdb.mi/mi-break.exp: insert breakpoint with regexp .*llee (PRMS: mi/14270)
+KFAIL: gdb.mi/mi-break.exp: list of breakpoints (PRMS: mi/14270)
+PASS: gdb.mi/mi-break.exp: delete temp breakpoints
+PASS: gdb.mi/mi-break.exp: insert breakpoint with ignore count at callme
+PASS: gdb.mi/mi-break.exp: run to breakpoint with ignore count
+PASS: gdb.mi/mi-break.exp: breakpoint at nonexistent function
+PASS: gdb.mi/mi-break.exp: create varobj for function call
+PASS: gdb.mi/mi-break.exp: update varobj for function call
+PASS: gdb.mi/mi-break.exp: test disabled creation
+PASS: gdb.mi/mi-break.exp: test disabled creation: cleanup
+PASS: gdb.mi/mi-break.exp: breakpoint commands: insert breakpoint at basics.c:callee2
+PASS: gdb.mi/mi-break.exp: breakpoint commands: set commands
+PASS: gdb.mi/mi-break.exp: breakpoint commands: check that commands are set
+PASS: gdb.mi/mi-break.exp: breakpoint commands: clear commands
+PASS: gdb.mi/mi-break.exp: breakpoint commands: check that commands are cleared
+ERROR: couldn't load /var/tmp/portage/cross-i686-pc-linux-gnu/gdb-7.6.1/work/gdb-7.6.1/gdb/testsuite/gdb.mi/mi-break into /var/tmp/portage/cross-i686-pc-linux-gnu/gdb-7.6.1/work/gdb-7.6.1/gdb/testsuite/../../gdb/gdb (timed out).
+UNRESOLVED: gdb.mi/mi-break.exp: breakpoint at main
+PASS: gdb.mi/mi-break.exp: mi runto main
+PASS: gdb.mi/mi-break.exp: breakpoint commands: insert breakpoint at basics.c:callee2, again
+PASS: gdb.mi/mi-break.exp: breakpoint commands: set commands
+PASS: gdb.mi/mi-break.exp: intermediate stop and continue
+PASS: gdb.mi/mi-break.exp: test hitting breakpoint with commands
+PASS: gdb.mi/mi-break.exp: create local variable tpnum
+PASS: gdb.mi/mi-break.exp: eval tpnum before tracepoint
+PASS: gdb.mi/mi-break.exp: break-insert -a operation
+PASS: gdb.mi/mi-break.exp: update tpnum
+PASS: gdb.mi/mi-break.exp: eval tpnum after tracepoint
+Running ./gdb.mi/mi-breakpoint-changed.exp ...
+PASS: gdb.mi/mi-breakpoint-changed.exp: breakpoint at main
+FAIL: gdb.mi/mi-breakpoint-changed.exp: mi runto main (unknown output after running)
+PASS: gdb.mi/mi-breakpoint-changed.exp: change command
+PASS: gdb.mi/mi-breakpoint-changed.exp: watch watch
+PASS: gdb.mi/mi-breakpoint-changed.exp: trace marker
+PASS: gdb.mi/mi-breakpoint-changed.exp: catch syscall
+PASS: gdb.mi/mi-breakpoint-changed.exp: dprintf marker, "arg" "
+PASS: gdb.mi/mi-breakpoint-changed.exp: condition 2 main > 0x0
+PASS: gdb.mi/mi-breakpoint-changed.exp: disable 3
+PASS: gdb.mi/mi-breakpoint-changed.exp: enable 3
+PASS: gdb.mi/mi-breakpoint-changed.exp: ignore 5 1
+PASS: gdb.mi/mi-breakpoint-changed.exp: passcount 1 4
+PASS: gdb.mi/mi-breakpoint-changed.exp: delete 3
+PASS: gdb.mi/mi-breakpoint-changed.exp: delete 4
+PASS: gdb.mi/mi-breakpoint-changed.exp: delete 5
+PASS: gdb.mi/mi-breakpoint-changed.exp: delete 6
+PASS: gdb.mi/mi-breakpoint-changed.exp: pending resolved: insert breakpoint on pendfunc1
+PASS: gdb.mi/mi-breakpoint-changed.exp: pending resolved: breakpoint on pendfunc1 resolved
+PASS: gdb.mi/mi-breakpoint-changed.exp: pending resolved: breakpoint on pendfunc1 resolved: hit_count is updated
+PASS: gdb.mi/mi-breakpoint-changed.exp: pending resolved: continue to pendfunc1 breakpoint
+PASS: gdb.mi/mi-breakpoint-changed.exp: pending resolved: delete breakpoint on pendfunc1
+PASS: gdb.mi/mi-breakpoint-changed.exp: pending resolved: insert breakpoint on marker
+PASS: gdb.mi/mi-breakpoint-changed.exp: pending resolved: insert breakpoint on pendfunc3
+PASS: gdb.mi/mi-breakpoint-changed.exp: pending resolved: continue to marker 1
+PASS: gdb.mi/mi-breakpoint-changed.exp: pending resolved: breakpoint on pendfunc3 resolved
+PASS: gdb.mi/mi-breakpoint-changed.exp: pending resolved: continue to marker 2
+PASS: gdb.mi/mi-breakpoint-changed.exp: pending resolved: breakpoint on pendfunc3 pending again
+PASS: gdb.mi/mi-breakpoint-changed.exp: pending resolved:
+Running ./gdb.mi/mi-catch-load.exp ...
+PASS: gdb.mi/mi-catch-load.exp: breakpoint at main
+PASS: gdb.mi/mi-catch-load.exp: mi runto main
+PASS: gdb.mi/mi-catch-load.exp: catch-load: auto-solib-add on
+PASS: gdb.mi/mi-catch-load.exp: catch-load: catch load
+FAIL: gdb.mi/mi-catch-load.exp: catch-load: solib-event stop
+PASS: gdb.mi/mi-catch-load.exp: breakpoint at main
+PASS: gdb.mi/mi-catch-load.exp: mi runto main
+PASS: gdb.mi/mi-catch-load.exp: catch-unload: auto-solib-add on
+PASS: gdb.mi/mi-catch-load.exp: catch-unload: catch unload
+FAIL: gdb.mi/mi-catch-load.exp: catch-unload: solib-event stop
+Running ./gdb.mi/mi-cli.exp ...
+PASS: gdb.mi/mi-cli.exp: -interpreter-exec with no arguments
+PASS: gdb.mi/mi-cli.exp: -interpreter-exec with one argument
+PASS: gdb.mi/mi-cli.exp: -interpreter-exec with bogus interpreter
+PASS: gdb.mi/mi-cli.exp: -interpreter-exec console bogus
+PASS: gdb.mi/mi-cli.exp: -interpreter-exec console "file $binfile"
+PASS: gdb.mi/mi-cli.exp: breakpoint at main
+PASS: gdb.mi/mi-cli.exp: mi runto main
+PASS: gdb.mi/mi-cli.exp: -interpreter-exec console "set args foobar"
+PASS: gdb.mi/mi-cli.exp: -interpreter-exec console "show args"
+PASS: gdb.mi/mi-cli.exp: -interpreter-exec console "break callee4"
+PASS: gdb.mi/mi-cli.exp: -interpreter-exec console "info break"
+PASS: gdb.mi/mi-cli.exp: -interpreter-exec console "set listsize 1"
+PASS: gdb.mi/mi-cli.exp: -interpreter-exec console "list"
+PASS: gdb.mi/mi-cli.exp: continue to callee4
+PASS: gdb.mi/mi-cli.exp: -interpreter-exec console "delete 2"
+PASS: gdb.mi/mi-cli.exp: -interpreter-exec console "up"
+PASS: gdb.mi/mi-cli.exp: -interpreter-exec console "down"
+PASS: gdb.mi/mi-cli.exp: -interpreter-exec console "frame 2"
+PASS: gdb.mi/mi-cli.exp: -stack-select-frame 0
+PASS: gdb.mi/mi-cli.exp: check *stopped from CLI command
+PASS: gdb.mi/mi-cli.exp: -break-insert -t basics.c:$line_main_hello
+PASS: gdb.mi/mi-cli.exp: -exec-continue to line $line_main_hello
+PASS: gdb.mi/mi-cli.exp: 34 next: run
+PASS: gdb.mi/mi-cli.exp: 34 next: stop
+PASS: gdb.mi/mi-cli.exp: -interpreter-exec console "list" at basics.c:$line_main_return
+PASS: gdb.mi/mi-cli.exp: -interpreter-exec console "help set args"
+PASS: gdb.mi/mi-cli.exp: -interpreter-exec console "set $pc=0x0"
+Running ./gdb.mi/mi-cmd-param-changed.exp ...
+PASS: gdb.mi/mi-cmd-param-changed.exp: cmd param: breakpoint at main
+PASS: gdb.mi/mi-cmd-param-changed.exp: cmd param: mi runto main
+PASS: gdb.mi/mi-cmd-param-changed.exp: cmd param: "set scheduler-locking on"
+PASS: gdb.mi/mi-cmd-param-changed.exp: cmd param: "set scheduler-locking off"
+PASS: gdb.mi/mi-cmd-param-changed.exp: cmd param: "set scheduler-locking step"
+PASS: gdb.mi/mi-cmd-param-changed.exp: cmd param: interpreter-exec "set scheduler-locking on"
+PASS: gdb.mi/mi-cmd-param-changed.exp: cmd param: interpreter-exec "set scheduler-locking off"
+PASS: gdb.mi/mi-cmd-param-changed.exp: cmd param: interpreter-exec "set scheduler-locking step"
+PASS: gdb.mi/mi-cmd-param-changed.exp: cmd param: "set scheduler-locking on" no event (requested by MI)
+PASS: gdb.mi/mi-cmd-param-changed.exp: cmd param: "set scheduler-locking step" no event (requested by MI interp)
+PASS: gdb.mi/mi-cmd-param-changed.exp: cmd param: "set scheduler-locking stepr" no event
+PASS: gdb.mi/mi-cmd-param-changed.exp: cmd param: "set remotecache" warmup
+PASS: gdb.mi/mi-cmd-param-changed.exp: cmd param: "set remotecache on"
+PASS: gdb.mi/mi-cmd-param-changed.exp: cmd param: "set remotecache off"
+PASS: gdb.mi/mi-cmd-param-changed.exp: cmd param: "set remotecache" no event
+PASS: gdb.mi/mi-cmd-param-changed.exp: cmd param: "set check type" warmup
+PASS: gdb.mi/mi-cmd-param-changed.exp: cmd param: "set check type on"
+PASS: gdb.mi/mi-cmd-param-changed.exp: cmd param: "set check type off"
+PASS: gdb.mi/mi-cmd-param-changed.exp: cmd param: "set check type" no event
+PASS: gdb.mi/mi-cmd-param-changed.exp: cmd param: "set trace-notes foo"
+PASS: gdb.mi/mi-cmd-param-changed.exp: cmd param: "set trace-notes bar"
+PASS: gdb.mi/mi-cmd-param-changed.exp: cmd param: "set trace-notes bar" no event
+PASS: gdb.mi/mi-cmd-param-changed.exp: cmd param: "set remote exec-file foo"
+PASS: gdb.mi/mi-cmd-param-changed.exp: cmd param: "set remote exec-file bar"
+PASS: gdb.mi/mi-cmd-param-changed.exp: cmd param: "set remote exec-file bar" no event
+PASS: gdb.mi/mi-cmd-param-changed.exp: cmd param: "maint set profile on"
+PASS: gdb.mi/mi-cmd-param-changed.exp: cmd param: "maint set profile off"
+PASS: gdb.mi/mi-cmd-param-changed.exp: cmd param: "set ch type on"
+Running ./gdb.mi/mi-console.exp ...
+PASS: gdb.mi/mi-console.exp: breakpoint at main
+PASS: gdb.mi/mi-console.exp: mi runto main
+PASS: gdb.mi/mi-console.exp: Testing console output
+UNSUPPORTED: gdb.mi/mi-console.exp: Testing console output inferior output
+PASS: gdb.mi/mi-console.exp: finished step over hello
+Running ./gdb.mi/mi-disassemble.exp ...
+PASS: gdb.mi/mi-disassemble.exp: breakpoint at main
+PASS: gdb.mi/mi-disassemble.exp: mi runto main
+PASS: gdb.mi/mi-disassemble.exp: data-disassemble from pc to pc+12 assembly only
+PASS: gdb.mi/mi-disassemble.exp: data-disassemble file & line, assembly only
+PASS: gdb.mi/mi-disassemble.exp: data-disassemble from pc to pc+12 assembly with opcodes
+PASS: gdb.mi/mi-disassemble.exp: data-disassemble file & line, assembly with opcodes
+PASS: gdb.mi/mi-disassemble.exp: data-disassemble file, line assembly mixed
+PASS: gdb.mi/mi-disassemble.exp: data-disassemble range assembly mixed
+PASS: gdb.mi/mi-disassemble.exp: data-disassemble file, line assembly mixed with opcodes
+PASS: gdb.mi/mi-disassemble.exp: data-disassemble range assembly mixed with opcodes
+PASS: gdb.mi/mi-disassemble.exp: data-disassemble bogus filename
+PASS: gdb.mi/mi-disassemble.exp: data-disassemble bogus address
+PASS: gdb.mi/mi-disassemble.exp: data-disassemble mix different args
+PASS: gdb.mi/mi-disassemble.exp: data-disassemble wrong mode arg
+PASS: gdb.mi/mi-disassemble.exp: data-disassemble file, line, number assembly only
+PASS: gdb.mi/mi-disassemble.exp: data-disassemble file, line, number (zero lines) assembly only
+PASS: gdb.mi/mi-disassemble.exp: data-disassemble file, line, number (more than main lines) assembly only
+PASS: gdb.mi/mi-disassemble.exp: data-disassemble file, line, number assembly mixed
+PASS: gdb.mi/mi-disassemble.exp: data-disassemble file, line, number (zero lines) assembly mixed
+PASS: gdb.mi/mi-disassemble.exp: data-disassemble file, line, number (more than main lines) assembly mixed
+Running ./gdb.mi/mi-eval.exp ...
+PASS: gdb.mi/mi-eval.exp: breakpoint at callee4
+PASS: gdb.mi/mi-eval.exp: mi runto callee4
+PASS: gdb.mi/mi-eval.exp: next at callee4
+PASS: gdb.mi/mi-eval.exp: eval A
+PASS: gdb.mi/mi-eval.exp: eval &A
+PASS: gdb.mi/mi-eval.exp: eval A+3
+PASS: gdb.mi/mi-eval.exp: eval A + 3
+Running ./gdb.mi/mi-file.exp ...
+PASS: gdb.mi/mi-file.exp: request path info of current source file (basics.c)
+PASS: gdb.mi/mi-file.exp: Getting a list of source files.
+Running ./gdb.mi/mi-file-transfer.exp ...
+FAIL: gdb.mi/mi-file-transfer.exp: put binary file
+FAIL: gdb.mi/mi-file-transfer.exp: get binary file
+FAIL: gdb.mi/mi-file-transfer.exp: compare binary file
+FAIL: gdb.mi/mi-file-transfer.exp: deleted binary file
+Running ./gdb.mi/mi-fill-memory.exp ...
+PASS: gdb.mi/mi-fill-memory.exp: breakpoint at main
+PASS: gdb.mi/mi-fill-memory.exp: mi runto main
+PASS: gdb.mi/mi-fill-memory.exp: next at main
+PASS: gdb.mi/mi-fill-memory.exp: no arguments
+PASS: gdb.mi/mi-fill-memory.exp: one argument missing
+PASS: gdb.mi/mi-fill-memory.exp: memory successfully written
+PASS: gdb.mi/mi-fill-memory.exp: memory successfully filled (8 bytes)
+PASS: gdb.mi/mi-fill-memory.exp: pattern correctly read from memory
+Running ./gdb.mi/mi-fullname-deleted.exp ...
+PASS: gdb.mi/mi-fullname-deleted.exp: set substitute-path
+PASS: gdb.mi/mi-fullname-deleted.exp: fullname present
+PASS: gdb.mi/mi-fullname-deleted.exp: substituted fullname
+PASS: gdb.mi/mi-fullname-deleted.exp: compare_filenames_for_search does not match
+PASS: gdb.mi/mi-fullname-deleted.exp: compare_filenames_for_search does match
+Running ./gdb.mi/mi-hack-cli.exp ...
+PASS: gdb.mi/mi-hack-cli.exp: show architecture
+PASS: gdb.mi/mi-hack-cli.exp: 47show architecture
+Running ./gdb.mi/mi-info-os.exp ...
+FAIL: gdb.mi/mi-info-os.exp: -info-os
+Running ./gdb.mi/mi-inheritance-syntax-error.exp ...
+PASS: gdb.mi/mi-inheritance-syntax-error.exp: breakpoint at C::testLocation
+PASS: gdb.mi/mi-inheritance-syntax-error.exp: mi runto C::testLocation
+PASS: gdb.mi/mi-inheritance-syntax-error.exp: create var for THIS
+PASS: gdb.mi/mi-inheritance-syntax-error.exp: list children of THIS
+PASS: gdb.mi/mi-inheritance-syntax-error.exp: -var-info-path-expression var1.A
+PASS: gdb.mi/mi-inheritance-syntax-error.exp: -data-evaluate-expression (*(class A*) this)
+Running ./gdb.mi/mi-logging.exp ...
+PASS: gdb.mi/mi-logging.exp: breakpoint at main
+PASS: gdb.mi/mi-logging.exp: mi runto main
+PASS: gdb.mi/mi-logging.exp: logging on
+PASS: gdb.mi/mi-logging.exp: logged step
+PASS: gdb.mi/mi-logging.exp: logged next
+PASS: gdb.mi/mi-logging.exp: logging off
+PASS: gdb.mi/mi-logging.exp: Log file contents
+PASS: gdb.mi/mi-logging.exp: redirect logging on
+PASS: gdb.mi/mi-logging.exp: redirect logging off
+PASS: gdb.mi/mi-logging.exp: Redirect log file contents
+Running ./gdb.mi/mi-memory-changed.exp ...
+PASS: gdb.mi/mi-memory-changed.exp: insert breakpoint
+PASS: gdb.mi/mi-memory-changed.exp: continue to callee4
+PASS: gdb.mi/mi-memory-changed.exp: set var C = 4
+PASS: gdb.mi/mi-memory-changed.exp: create objvar for C
+PASS: gdb.mi/mi-memory-changed.exp: change C thru. varobj
+PASS: gdb.mi/mi-memory-changed.exp: change C thru. -data-write-memory-bytes
+PASS: gdb.mi/mi-memory-changed.exp: get address of main
+Running ./gdb.mi/mi-nonstop-exit.exp ...
+PASS: gdb.mi/mi-nonstop-exit.exp: successfully compiled posix threads test case
+PASS: gdb.mi/mi-nonstop-exit.exp: breakpoint at main
+PASS: gdb.mi/mi-nonstop-exit.exp: mi runto main
+PASS: gdb.mi/mi-nonstop-exit.exp: finished exec continue
+PASS: gdb.mi/mi-nonstop-exit.exp: breakpoint at main
+PASS: gdb.mi/mi-nonstop-exit.exp: mi runto main
+PASS: gdb.mi/mi-nonstop-exit.exp: finished exec continue (2)
+Running ./gdb.mi/mi-nonstop.exp ...
+PASS: gdb.mi/mi-nonstop.exp: successfully compiled posix threads test case
+PASS: gdb.mi/mi-nonstop.exp: breakpoint at main
+PASS: gdb.mi/mi-nonstop.exp: mi runto main
+PASS: gdb.mi/mi-nonstop.exp: breakpoint at marker
+PASS: gdb.mi/mi-nonstop.exp: w0,i0 stop
+PASS: gdb.mi/mi-nonstop.exp: w1,i0 stop
+PASS: gdb.mi/mi-nonstop.exp: thread state, stop 1
+PASS: gdb.mi/mi-nonstop.exp: select thread 2
+PASS: gdb.mi/mi-nonstop.exp: create varobj in first thread
+PASS: gdb.mi/mi-nonstop.exp: select thread 3
+PASS: gdb.mi/mi-nonstop.exp: create varobj in second thread
+PASS: gdb.mi/mi-nonstop.exp: thread state, resume 1
+PASS: gdb.mi/mi-nonstop.exp: w0,i1 stop
+PASS: gdb.mi/mi-nonstop.exp: thread state, stop 2
+PASS: gdb.mi/mi-nonstop.exp: thread state, resume 2
+PASS: gdb.mi/mi-nonstop.exp: w1,i1 stop
+PASS: gdb.mi/mi-nonstop.exp: thread state, stop 3
+PASS: gdb.mi/mi-nonstop.exp: update varobj, 1
+PASS: gdb.mi/mi-nonstop.exp: check varobj, w0, 1
+PASS: gdb.mi/mi-nonstop.exp: check varobj, w1, 1
+PASS: gdb.mi/mi-nonstop.exp: interrupted
+PASS: gdb.mi/mi-nonstop.exp: got interrupt
+PASS: gdb.mi/mi-nonstop.exp: thread state, stop 4
+PASS: gdb.mi/mi-nonstop.exp: resume all
+PASS: gdb.mi/mi-nonstop.exp: w0,i2 stop
+PASS: gdb.mi/mi-nonstop.exp: w1,i2 stop
+PASS: gdb.mi/mi-nonstop.exp: set condition, 1
+PASS: gdb.mi/mi-nonstop.exp: w0,i3 stop
+PASS: gdb.mi/mi-nonstop.exp: thread state, stop on cond breakpoint
+PASS: gdb.mi/mi-nonstop.exp: update varobj, 2
+PASS: gdb.mi/mi-nonstop.exp: check varobj, w1, 1
+PASS: gdb.mi/mi-nonstop.exp: stacktrace of running thread
+PASS: gdb.mi/mi-nonstop.exp: stacktrace of stopped thread
+PASS: gdb.mi/mi-nonstop.exp: select first worker thread
+PASS: gdb.mi/mi-nonstop.exp: ask the second thread to exit
+UNSUPPORTED: gdb.mi/mi-nonstop.exp: wait for thread exit
+PASS: gdb.mi/mi-nonstop.exp: stacktrace of stopped thread
+Running ./gdb.mi/mi-nsintrall.exp ...
+PASS: gdb.mi/mi-nsintrall.exp: successfully compiled posix threads test case
+PASS: gdb.mi/mi-nsintrall.exp: breakpoint at main
+PASS: gdb.mi/mi-nsintrall.exp: mi runto main
+PASS: gdb.mi/mi-nsintrall.exp: breakpoint at thread_function
+PASS: gdb.mi/mi-nsintrall.exp: stop 0
+PASS: gdb.mi/mi-nsintrall.exp: stop 1
+PASS: gdb.mi/mi-nsintrall.exp: stop 2
+PASS: gdb.mi/mi-nsintrall.exp: stop 3
+PASS: gdb.mi/mi-nsintrall.exp: stop 4
+PASS: gdb.mi/mi-nsintrall.exp: stop 5
+PASS: gdb.mi/mi-nsintrall.exp: thread state, all stopped
+PASS: gdb.mi/mi-nsintrall.exp: resume all, no breakpoint
+PASS: gdb.mi/mi-nsintrall.exp: thread state, resume all
+PASS: gdb.mi/mi-nsintrall.exp: interrupt all threads
+PASS: gdb.mi/mi-nsintrall.exp: interrupt 0
+PASS: gdb.mi/mi-nsintrall.exp: interrupt 1
+PASS: gdb.mi/mi-nsintrall.exp: interrupt 2
+PASS: gdb.mi/mi-nsintrall.exp: interrupt 3
+PASS: gdb.mi/mi-nsintrall.exp: interrupt 4
+PASS: gdb.mi/mi-nsintrall.exp: interrupt 5
+PASS: gdb.mi/mi-nsintrall.exp: thread state, all interrupted
+PASS: gdb.mi/mi-nsintrall.exp: resume all after interrupting
+PASS: gdb.mi/mi-nsintrall.exp: thread state, resume all after interrupting
+Running ./gdb.mi/mi-nsmoribund.exp ...
+PASS: gdb.mi/mi-nsmoribund.exp: successfully compiled posix threads test case
+PASS: gdb.mi/mi-nsmoribund.exp: breakpoint at main
+PASS: gdb.mi/mi-nsmoribund.exp: mi runto main
+PASS: gdb.mi/mi-nsmoribund.exp: breakpoint at thread_function
+PASS: gdb.mi/mi-nsmoribund.exp: stop 0
+PASS: gdb.mi/mi-nsmoribund.exp: stop 1
+PASS: gdb.mi/mi-nsmoribund.exp: stop 2
+PASS: gdb.mi/mi-nsmoribund.exp: stop 3
+PASS: gdb.mi/mi-nsmoribund.exp: stop 4
+PASS: gdb.mi/mi-nsmoribund.exp: stop 5
+PASS: gdb.mi/mi-nsmoribund.exp: stop 6
+PASS: gdb.mi/mi-nsmoribund.exp: stop 7
+PASS: gdb.mi/mi-nsmoribund.exp: stop 8
+PASS: gdb.mi/mi-nsmoribund.exp: stop 9
+PASS: gdb.mi/mi-nsmoribund.exp: thread state: all stopped except the main thread
+PASS: gdb.mi/mi-nsmoribund.exp: select thread 5
+PASS: gdb.mi/mi-nsmoribund.exp: thread specific breakpoint at thread_function
+PASS: gdb.mi/mi-nsmoribund.exp: resume all, thread specific breakpoint
+PASS: gdb.mi/mi-nsmoribund.exp: hit thread specific breakpoint
+PASS: gdb.mi/mi-nsmoribund.exp: thread state: all running except the breakpoint thread
+PASS: gdb.mi/mi-nsmoribund.exp: resume all, program exited normally
+Running ./gdb.mi/mi-ns-stale-regcache.exp ...
+PASS: gdb.mi/mi-ns-stale-regcache.exp: breakpoint at main
+PASS: gdb.mi/mi-ns-stale-regcache.exp: mi runto main
+PASS: gdb.mi/mi-ns-stale-regcache.exp: no stale register cache of resumed thread
+PASS: gdb.mi/mi-ns-stale-regcache.exp: no stale frame info of resumed thread
+PASS: gdb.mi/mi-ns-stale-regcache.exp: main thread still running
+Running ./gdb.mi/mi-nsthrexec.exp ...
+Running ./gdb.mi/mi-pending.exp ...
+PASS: gdb.mi/mi-pending.exp: MI pending breakpoint on pendfunc1
+PASS: gdb.mi/mi-pending.exp: MI pending breakpoint on mi-pendshr.c:pendfunc2 if x==4
+PASS: gdb.mi/mi-pending.exp: Run till MI pending breakpoint on pendfunc1
+PASS: gdb.mi/mi-pending.exp: Run till MI pending breakpoint on pendfunc1 a second time
+PASS: gdb.mi/mi-pending.exp: Run till MI pending breakpoint on pendfunc2 with x==4
+Running ./gdb.mi/mi-pthreads.exp ...
+PASS: gdb.mi/mi-pthreads.exp: successfully compiled posix threads test case
+PASS: gdb.mi/mi-pthreads.exp: breakpoint at done_making_threads
+PASS: gdb.mi/mi-pthreads.exp: mi runto done_making_threads
+PASS: gdb.mi/mi-pthreads.exp: -thread_list_ids (in check_mi_thread_command_set)
+PASS: gdb.mi/mi-pthreads.exp: finding threads in MI output (in check_mi_thread_command_set)
+PASS: gdb.mi/mi-pthreads.exp: check_mi_thread_command_set: -thread-select
+PASS: gdb.mi/mi-pthreads.exp: check_mi_thread_command_set: -thread-select 123456789
+PASS: gdb.mi/mi-pthreads.exp: check_mi_thread_command_set: -thread-select 6
+PASS: gdb.mi/mi-pthreads.exp: check_mi_thread_command_set: -thread-select 5
+PASS: gdb.mi/mi-pthreads.exp: check_mi_thread_command_set: -thread-select 4
+PASS: gdb.mi/mi-pthreads.exp: check_mi_thread_command_set: -thread-select 3
+PASS: gdb.mi/mi-pthreads.exp: check_mi_thread_command_set: -thread-select 2
+PASS: gdb.mi/mi-pthreads.exp: check_mi_thread_command_set: -thread-select 1
+PASS: gdb.mi/mi-pthreads.exp: check =thread-selected: thread 6
+PASS: gdb.mi/mi-pthreads.exp: check =thread-selected: thread 5
+PASS: gdb.mi/mi-pthreads.exp: check =thread-selected: thread 4
+PASS: gdb.mi/mi-pthreads.exp: check =thread-selected: thread 3
+PASS: gdb.mi/mi-pthreads.exp: check =thread-selected: thread 2
+PASS: gdb.mi/mi-pthreads.exp: check =thread-selected: thread 1
+Running ./gdb.mi/mi-read-memory.exp ...
+PASS: gdb.mi/mi-read-memory.exp: breakpoint at main
+PASS: gdb.mi/mi-read-memory.exp: mi runto main
+PASS: gdb.mi/mi-read-memory.exp: next at main
+PASS: gdb.mi/mi-read-memory.exp: no arguments
+PASS: gdb.mi/mi-read-memory.exp: 3x2, one byte
+PASS: gdb.mi/mi-read-memory.exp: 3x2, one byte offset by -6
+PASS: gdb.mi/mi-read-memory.exp: expression in quotes
+PASS: gdb.mi/mi-read-memory.exp: ascii and data
+PASS: gdb.mi/mi-read-memory.exp: decimal
+PASS: gdb.mi/mi-read-memory.exp: octal
+Running ./gdb.mi/mi-record-changed.exp ...
+Running ./gdb.mi/mi-regs.exp ...
+Running ./gdb.mi/mi-return.exp ...
+PASS: gdb.mi/mi-return.exp: breakpoint at callee4
+PASS: gdb.mi/mi-return.exp: mi runto callee4
+PASS: gdb.mi/mi-return.exp: delete all breakpoints
+PASS: gdb.mi/mi-return.exp: return from callee4 now
+Running ./gdb.mi/mi-reverse.exp ...
+Running ./gdb.mi/mi-simplerun.exp ...
+PASS: gdb.mi/mi-simplerun.exp: break-insert operation
+PASS: gdb.mi/mi-simplerun.exp: insert breakpoint at basics.c:callee2
+PASS: gdb.mi/mi-simplerun.exp: insert breakpoint at basics.c:$line_callee3_head
+PASS: gdb.mi/mi-simplerun.exp: insert breakpoint at "<fullfilename>":$line_callee4_head
+PASS: gdb.mi/mi-simplerun.exp: list of breakpoints
+PASS: gdb.mi/mi-simplerun.exp: disabling of breakpoints
+PASS: gdb.mi/mi-simplerun.exp: list of breakpoints, 16 disabled
+PASS: gdb.mi/mi-simplerun.exp: run to main
+PASS: gdb.mi/mi-simplerun.exp: next at main
+PASS: gdb.mi/mi-simplerun.exp: step at main
+PASS: gdb.mi/mi-simplerun.exp: step to callee4
+PASS: gdb.mi/mi-simplerun.exp: exec-finish
+PASS: gdb.mi/mi-simplerun.exp: continue to end
+Running ./gdb.mi/mi-solib.exp ...
+PASS: gdb.mi/mi-solib.exp: set stop-on-solib-events
+PASS: gdb.mi/mi-solib.exp: check for solib event
+Running ./gdb.mi/mi-stack.exp ...
+PASS: gdb.mi/mi-stack.exp: breakpoint at callee4
+PASS: gdb.mi/mi-stack.exp: mi runto callee4
+PASS: gdb.mi/mi-stack.exp: stack frame listing
+PASS: gdb.mi/mi-stack.exp: stack frame listing 1 1
+PASS: gdb.mi/mi-stack.exp: stack frame listing 1 3
+PASS: gdb.mi/mi-stack.exp: stack frame listing wrong
+PASS: gdb.mi/mi-stack.exp: selected frame listing
+PASS: gdb.mi/mi-stack.exp: stack frame listing 1 300
+PASS: gdb.mi/mi-stack.exp: stack args listing 0
+PASS: gdb.mi/mi-stack.exp: stack args listing 0 1 1
+PASS: gdb.mi/mi-stack.exp: stack args listing 0 1 3
+PASS: gdb.mi/mi-stack.exp: stack args listing 1
+PASS: gdb.mi/mi-stack.exp: stack args listing 1 1 1
+PASS: gdb.mi/mi-stack.exp: stack args listing 1 1 3
+PASS: gdb.mi/mi-stack.exp: stack args listing wrong
+PASS: gdb.mi/mi-stack.exp: stack args listing 1 1 300
+PASS: gdb.mi/mi-stack.exp: stack locals listing of names
+PASS: gdb.mi/mi-stack.exp: next's in callee4
+PASS: gdb.mi/mi-stack.exp: stack locals listing of names and values
+PASS: gdb.mi/mi-stack.exp: stack locals listing, simple types: names and values, complex type: names and types
+PASS: gdb.mi/mi-stack.exp: stack locals listing wrong
+PASS: gdb.mi/mi-stack.exp: stack select frame 1
+PASS: gdb.mi/mi-stack.exp: stack locals listing for new frame
+PASS: gdb.mi/mi-stack.exp: stack locals for same frame (level 1)
+PASS: gdb.mi/mi-stack.exp: stack info-depth
+PASS: gdb.mi/mi-stack.exp: stack info-depth 3
+PASS: gdb.mi/mi-stack.exp: stack info-depth 99
+PASS: gdb.mi/mi-stack.exp: stack info-depth wrong usage
+Running ./gdb.mi/mi-stepi.exp ...
+PASS: gdb.mi/mi-stepi.exp: breakpoint at main
+PASS: gdb.mi/mi-stepi.exp: mi runto main
+PASS: gdb.mi/mi-stepi.exp: step-instruction at main
+PASS: gdb.mi/mi-stepi.exp: step-instruction at main (line check)
+PASS: gdb.mi/mi-stepi.exp: next-instruction at main
+PASS: gdb.mi/mi-stepi.exp: next-instruction at main (line check)
+PASS: gdb.mi/mi-stepi.exp: next-instruction at main 2
+PASS: gdb.mi/mi-stepi.exp: next-instruction at main 2 (line check)
+Running ./gdb.mi/mi-stepn.exp ...
+PASS: gdb.mi/mi-stepn.exp: breakpoint at main
+PASS: gdb.mi/mi-stepn.exp: mi runto main
+PASS: gdb.mi/mi-stepn.exp: breakpoint at do_nothing
+PASS: gdb.mi/mi-stepn.exp: breakpoint-hit reported
+Running ./gdb.mi/mi-syn-frame.exp ...
+PASS: gdb.mi/mi-syn-frame.exp: breakpoint at main
+PASS: gdb.mi/mi-syn-frame.exp: mi runto main
+PASS: gdb.mi/mi-syn-frame.exp: insert breakpoint foo
+PASS: gdb.mi/mi-syn-frame.exp: call inferior's function with a breakpoint set in it
+PASS: gdb.mi/mi-syn-frame.exp: backtrace from inferior function stopped at bp, showing gdb dummy frame
+PASS: gdb.mi/mi-syn-frame.exp: finished exec continue
+PASS: gdb.mi/mi-syn-frame.exp: list stack frames
+PASS: gdb.mi/mi-syn-frame.exp: insert breakpoint subroutine
+PASS: gdb.mi/mi-syn-frame.exp: data evaluate expression
+PASS: gdb.mi/mi-syn-frame.exp: list stack frames
+PASS: gdb.mi/mi-syn-frame.exp: finished exec continue
+PASS: gdb.mi/mi-syn-frame.exp: list stack frames
+PASS: gdb.mi/mi-syn-frame.exp: call inferior function which raises exception
+PASS: gdb.mi/mi-syn-frame.exp: backtrace from inferior function at exception
+Running ./gdb.mi/mi-until.exp ...
+PASS: gdb.mi/mi-until.exp: break-insert operation
+PASS: gdb.mi/mi-until.exp: run to main
+PASS: gdb.mi/mi-until.exp: break-delete 1
+KFAIL: gdb.mi/mi-until.exp: until after while loop (stopped at wrong place) (PRMS: gdb/2104)
+PASS: gdb.mi/mi-until.exp: until line number
+PASS: gdb.mi/mi-until.exp: until line number:file
+PASS: gdb.mi/mi-until.exp: until after current function
+Running ./gdb.mi/mi-var-block.exp ...
+PASS: gdb.mi/mi-var-block.exp: breakpoint at do_block_tests
+PASS: gdb.mi/mi-var-block.exp: mi runto do_block_tests
+PASS: gdb.mi/mi-var-block.exp: create local variable cb
+PASS: gdb.mi/mi-var-block.exp: try to create local variable foo
+PASS: gdb.mi/mi-var-block.exp: step at do_block_test 1
+PASS: gdb.mi/mi-var-block.exp: delete var foo 1
+PASS: gdb.mi/mi-var-block.exp: create local variable foo
+PASS: gdb.mi/mi-var-block.exp: step at do_block_test 2
+PASS: gdb.mi/mi-var-block.exp: update all vars: cb foo changed
+PASS: gdb.mi/mi-var-block.exp: step at do_block_test 3
+PASS: gdb.mi/mi-var-block.exp: create local variable inner_foo
+PASS: gdb.mi/mi-var-block.exp: step at do_block_test 4
+PASS: gdb.mi/mi-var-block.exp: create local variable foo2
+XFAIL: gdb.mi/mi-var-block.exp: update inner_foo: should be out of scope: KNOWN PROBLEM
+XFAIL: gdb.mi/mi-var-block.exp: evaluate inner_foo: should be out of scope: KNOWN PROBLEM
+PASS: gdb.mi/mi-var-block.exp: update foo: did not change
+PASS: gdb.mi/mi-var-block.exp: delete var inner_foo
+PASS: gdb.mi/mi-var-block.exp: step at do_block_test 5
+XFAIL: gdb.mi/mi-var-block.exp: update foo2: should be out of scope: KNOWN PROBLEM
+PASS: gdb.mi/mi-var-block.exp: step at do_block_test 6
+XFAIL: gdb.mi/mi-var-block.exp: update foo2 should be out of scope: KNOWN PROBLEM
+XFAIL: gdb.mi/mi-var-block.exp: update foo should be out of scope: KNOWN PROBLEM
+PASS: gdb.mi/mi-var-block.exp: update cb
+PASS: gdb.mi/mi-var-block.exp: delete var foo 2
+PASS: gdb.mi/mi-var-block.exp: delete var foo2
+PASS: gdb.mi/mi-var-block.exp: delete var cb
+Running ./gdb.mi/mi-var-child.exp ...
+PASS: gdb.mi/mi-var-child.exp: breakpoint at do_children_tests
+PASS: gdb.mi/mi-var-child.exp: mi runto do_children_tests
+PASS: gdb.mi/mi-var-child.exp: run to 215 (set breakpoint)
+PASS: gdb.mi/mi-var-child.exp: create local variable struct_declarations
+PASS: gdb.mi/mi-var-child.exp: get children of struct_declarations
+PASS: gdb.mi/mi-var-child.exp: get number of children of struct_declarations
+PASS: gdb.mi/mi-var-child.exp: get children of struct_declarations.integer
+PASS: gdb.mi/mi-var-child.exp: get number of children of struct_declarations.integer
+PASS: gdb.mi/mi-var-child.exp: get children of struct_declarations.character
+PASS: gdb.mi/mi-var-child.exp: get number of children of struct_declarations.character
+PASS: gdb.mi/mi-var-child.exp: get children of struct_declarations.char_ptr
+PASS: gdb.mi/mi-var-child.exp: get number of children of struct_declarations.char_ptr
+PASS: gdb.mi/mi-var-child.exp: get children of struct_declarations.long_int
+PASS: gdb.mi/mi-var-child.exp: get number of children of struct_declarations.long_int
+PASS: gdb.mi/mi-var-child.exp: get children of struct_declarations.int_ptr_ptr
+PASS: gdb.mi/mi-var-child.exp: get number of children of struct_declarations.int_ptr_ptr
+PASS: gdb.mi/mi-var-child.exp: get children of struct_declarations.long_array
+PASS: gdb.mi/mi-var-child.exp: get number of children of struct_declarations.long_array
+PASS: gdb.mi/mi-var-child.exp: get children of struct_declarations.func_ptr
+PASS: gdb.mi/mi-var-child.exp: get number of children of struct_declarations.func_ptr
+PASS: gdb.mi/mi-var-child.exp: get children of struct_declarations.func_ptr_struct
+PASS: gdb.mi/mi-var-child.exp: get number of children of struct_declarations.func_ptr_struct
+PASS: gdb.mi/mi-var-child.exp: get children of struct_declarations.func_ptr_ptr
+PASS: gdb.mi/mi-var-child.exp: get number of children of struct_declarations.func_ptr_ptr
+PASS: gdb.mi/mi-var-child.exp: get children of struct_declarations.u1
+PASS: gdb.mi/mi-var-child.exp: get number of children of struct_declarations.u1
+PASS: gdb.mi/mi-var-child.exp: get children of struct_declarations.s2
+PASS: gdb.mi/mi-var-child.exp: get number of children of struct_declarations.s2
+PASS: gdb.mi/mi-var-child.exp: get children of struct_declarations.long_array.1
+PASS: gdb.mi/mi-var-child.exp: get number of children of struct_declarations.long_array.1
+PASS: gdb.mi/mi-var-child.exp: get children of struct_declarations.long_array.2
+PASS: gdb.mi/mi-var-child.exp: get number of children of struct_declarations.long_array.2
+PASS: gdb.mi/mi-var-child.exp: get children of struct_declarations.long_array.3
+PASS: gdb.mi/mi-var-child.exp: get number of children of struct_declarations.long_array.3
+PASS: gdb.mi/mi-var-child.exp: get children of struct_declarations.long_array.4
+PASS: gdb.mi/mi-var-child.exp: get number of children of struct_declarations.long_array.4
+PASS: gdb.mi/mi-var-child.exp: get children of struct_declarations.long_array.5
+PASS: gdb.mi/mi-var-child.exp: get number of children of struct_declarations.long_array.5
+PASS: gdb.mi/mi-var-child.exp: get children of struct_declarations.long_array.6
+PASS: gdb.mi/mi-var-child.exp: get number of children of struct_declarations.long_array.6
+PASS: gdb.mi/mi-var-child.exp: get children of struct_declarations.long_array.7
+PASS: gdb.mi/mi-var-child.exp: get number of children of struct_declarations.long_array.7
+PASS: gdb.mi/mi-var-child.exp: get children of struct_declarations.long_array.8
+PASS: gdb.mi/mi-var-child.exp: get number of children of struct_declarations.long_array.8
+PASS: gdb.mi/mi-var-child.exp: get children of struct_declarations.long_array.9
+PASS: gdb.mi/mi-var-child.exp: get number of children of struct_declarations.long_array.9
+PASS: gdb.mi/mi-var-child.exp: get children of struct_declarations.u1.a
+PASS: gdb.mi/mi-var-child.exp: get number of children of struct_declarations.u1.a
+PASS: gdb.mi/mi-var-child.exp: get children of struct_declarations.u1.b
+PASS: gdb.mi/mi-var-child.exp: get number of children of struct_declarations.u1.b
+PASS: gdb.mi/mi-var-child.exp: get children of struct_declarations.u1.c
+PASS: gdb.mi/mi-var-child.exp: get number of children of struct_declarations.u1.c
+PASS: gdb.mi/mi-var-child.exp: get children of struct_declarations.u1.d
+PASS: gdb.mi/mi-var-child.exp: get number of children of struct_declarations.u1.d
+PASS: gdb.mi/mi-var-child.exp: get children of struct_declarations.s2.u2
+PASS: gdb.mi/mi-var-child.exp: get number of children of struct_declarations.s2.u2
+PASS: gdb.mi/mi-var-child.exp: get children of struct_declarations.s2.g
+PASS: gdb.mi/mi-var-child.exp: get number of children of struct_declarations.s2.g
+PASS: gdb.mi/mi-var-child.exp: get children of struct_declarations.s2.h
+PASS: gdb.mi/mi-var-child.exp: get number of children of struct_declarations.s2.h
+PASS: gdb.mi/mi-var-child.exp: get children of struct_declarations.s2.i
+PASS: gdb.mi/mi-var-child.exp: get number of children of struct_declarations.s2.i
+PASS: gdb.mi/mi-var-child.exp: get children of struct_declarations.s2.u2.u1s1
+PASS: gdb.mi/mi-var-child.exp: get number of children of struct_declarations.s2.u2.u1s1
+PASS: gdb.mi/mi-var-child.exp: get children of struct_declarations.s2.u2.f
+PASS: gdb.mi/mi-var-child.exp: get number of children of struct_declarations.s2.u2.f
+PASS: gdb.mi/mi-var-child.exp: get children of struct_declarations.s2.u2.u1s2
+PASS: gdb.mi/mi-var-child.exp: get number of children of struct_declarations.s2.u2.u1s2
+PASS: gdb.mi/mi-var-child.exp: get children of struct_declarations.s2.u2.u1s1.d
+PASS: gdb.mi/mi-var-child.exp: get number of children of struct_declarations.s2.u2.u1s1.d
+PASS: gdb.mi/mi-var-child.exp: get children of struct_declarations.s2.u2.u1s1.e
+PASS: gdb.mi/mi-var-child.exp: get number of children of struct_declarations.s2.u2.u1s1.e
+PASS: gdb.mi/mi-var-child.exp: get children of struct_declarations.s2.u2.u1s1.func
+PASS: gdb.mi/mi-var-child.exp: get number of children of struct_declarations.s2.u2.u1s1.func
+PASS: gdb.mi/mi-var-child.exp: get children of struct_declarations.s2.u2.u1s1.foo
+PASS: gdb.mi/mi-var-child.exp: get number of children of struct_declarations.s2.u2.u1s1.foo
+PASS: gdb.mi/mi-var-child.exp: get children of struct_declarations.s2.u2.u1s2.array_ptr
+PASS: gdb.mi/mi-var-child.exp: get number of children of struct_declarations.s2.u2.u1s2.array_ptr
+PASS: gdb.mi/mi-var-child.exp: get children of struct_declarations.s2.u2.u1s2.func
+PASS: gdb.mi/mi-var-child.exp: get number of children of struct_declarations.s2.u2.u1s2.func
+PASS: gdb.mi/mi-var-child.exp: get children of struct_declarations.int_ptr_ptr.*int_ptr_ptr
+PASS: gdb.mi/mi-var-child.exp: get number of children of struct_declarations.int_ptr_ptr.*int_ptr_ptr
+PASS: gdb.mi/mi-var-child.exp: step to line $line_dct_123
+PASS: gdb.mi/mi-var-child.exp: create local variable weird
+PASS: gdb.mi/mi-var-child.exp: get children of weird
+PASS: gdb.mi/mi-var-child.exp: get number of children of weird
+PASS: gdb.mi/mi-var-child.exp: get children of weird.long_array
+PASS: gdb.mi/mi-var-child.exp: get number of children of weird.long_array
+PASS: gdb.mi/mi-var-child.exp: get children of weird.int_ptr_ptr
+PASS: gdb.mi/mi-var-child.exp: get number of children of weird.int_ptr_ptr
+PASS: gdb.mi/mi-var-child.exp: get children of weird.int_ptr_ptr.*int_ptr_ptr
+PASS: gdb.mi/mi-var-child.exp: get number of children of weird.int_ptr_ptr.*int_ptr_ptr
+PASS: gdb.mi/mi-var-child.exp: create local variable weird->int_ptr_ptr
+PASS: gdb.mi/mi-var-child.exp: get children of weird->int_ptr_ptr
+PASS: gdb.mi/mi-var-child.exp: get number of children of weird->int_ptr_ptr
+PASS: gdb.mi/mi-var-child.exp: get children of weird->int_ptr_ptr.*weird->int_ptr_ptr
+PASS: gdb.mi/mi-var-child.exp: get number of children of weird->int_ptr_ptr.*weird->int_ptr_ptr
+PASS: gdb.mi/mi-var-child.exp: get children of weird->int_ptr_ptr.*weird->int_ptr_ptr.**weird->int_ptr_ptr
+PASS: gdb.mi/mi-var-child.exp: get number of children of weird->int_ptr_ptr.*weird->int_ptr_ptr.**weird->int_ptr_ptr
+PASS: gdb.mi/mi-var-child.exp: is weird editable
+PASS: gdb.mi/mi-var-child.exp: is weird->int_ptr_ptr editable
+PASS: gdb.mi/mi-var-child.exp: is weird.int_ptr_ptr.*int_ptr_ptr editable
+PASS: gdb.mi/mi-var-child.exp: is weird.int_ptr_ptr.*int_ptr_ptr.**int_ptr_ptr editable
+PASS: gdb.mi/mi-var-child.exp: is weird.u1 editable
+PASS: gdb.mi/mi-var-child.exp: is weird.s2 editable
+PASS: gdb.mi/mi-var-child.exp: is struct_declarations.u1.a editable
+PASS: gdb.mi/mi-var-child.exp: is struct_declarations.u1.b editable
+PASS: gdb.mi/mi-var-child.exp: is struct_declarations.u1.c editable
+PASS: gdb.mi/mi-var-child.exp: is struct_declarations.long_array editable
+PASS: gdb.mi/mi-var-child.exp: is struct_declarations.long_array.0 editable
+PASS: gdb.mi/mi-var-child.exp: is struct_declarations editable
+PASS: gdb.mi/mi-var-child.exp: delete var weird
+PASS: gdb.mi/mi-var-child.exp: update all vars. None changed
+PASS: gdb.mi/mi-var-child.exp: step $line_dct_123 + 1
+PASS: gdb.mi/mi-var-child.exp: update all vars struct_declarations.integer
+PASS: gdb.mi/mi-var-child.exp: step $line_dct_123 + 4
+PASS: gdb.mi/mi-var-child.exp: update all vars struct_declarations.char_ptr
+PASS: gdb.mi/mi-var-child.exp: step $line_dct_123 + 5
+PASS: gdb.mi/mi-var-child.exp: update all vars int_ptr_ptr and children changed
+PASS: gdb.mi/mi-var-child.exp: step $line_dct_123 + 6
+PASS: gdb.mi/mi-var-child.exp: update all vars struct_declarations.long_array.0 changed
+PASS: gdb.mi/mi-var-child.exp: step $line_dct_123 + 7
+PASS: gdb.mi/mi-var-child.exp: update all vars struct_declarations.long_array.1 changed
+PASS: gdb.mi/mi-var-child.exp: step $line_dct_123 + 8
+PASS: gdb.mi/mi-var-child.exp: update all vars struct_declarations.long_array.2 changed
+PASS: gdb.mi/mi-var-child.exp: step $line_dct_nothing
+PASS: gdb.mi/mi-var-child.exp: update all vars struct_declarations.long_array.3-9 changed
+PASS: gdb.mi/mi-var-child.exp: step $line_dct_nothing + 1
+PASS: gdb.mi/mi-var-child.exp: update all vars struct_declarations.func_ptr changed
+PASS: gdb.mi/mi-var-child.exp: step $line_dct_nothing + 2
+PASS: gdb.mi/mi-var-child.exp: update all vars struct_declarations.long_array.10 changed, don't print values.
+PASS: gdb.mi/mi-var-child.exp: step $line_dct_a0_0
+PASS: gdb.mi/mi-var-child.exp: update all vars struct_declarations.long_array.11 changed, print values.
+PASS: gdb.mi/mi-var-child.exp: listing of names and values of children
+PASS: gdb.mi/mi-var-child.exp: listing of children, simple types: names, type and values, complex types: names and types
+PASS: gdb.mi/mi-var-child.exp: delete var struct_declarations
+PASS: gdb.mi/mi-var-child.exp: delete var weird->int_ptr_ptr
+PASS: gdb.mi/mi-var-child.exp: step $line_dct_snp0 + 1
+PASS: gdb.mi/mi-var-child.exp: create local variable psnp->char_ptr
+PASS: gdb.mi/mi-var-child.exp: get children of psnp->char_ptr
+PASS: gdb.mi/mi-var-child.exp: get number of children of psnp->char_ptr
+PASS: gdb.mi/mi-var-child.exp: get children of psnp->char_ptr.*psnp->char_ptr
+PASS: gdb.mi/mi-var-child.exp: get number of children of psnp->char_ptr.*psnp->char_ptr
+PASS: gdb.mi/mi-var-child.exp: get children of psnp->char_ptr.*psnp->char_ptr.**psnp->char_ptr
+PASS: gdb.mi/mi-var-child.exp: get children of psnp->char_ptr.*psnp->char_ptr.**psnp->char_ptr.***psnp->char_ptr
+PASS: gdb.mi/mi-var-child.exp: get number of children of psnp->char_ptr.*psnp->char_ptr.**psnp->char_ptr
+PASS: gdb.mi/mi-var-child.exp: get children of psnp->char_ptr.*psnp->char_ptr.**psnp->char_ptr.***psnp->char_ptr
+PASS: gdb.mi/mi-var-child.exp: get number of children of psnp->char_ptr.*psnp->char_ptr.**psnp->char_ptr.***psnp->char_ptr
+PASS: gdb.mi/mi-var-child.exp: get children of psnp->char_ptr.*psnp->char_ptr.**psnp->char_ptr.***psnp->char_ptr.****psnp->char_ptr
+PASS: gdb.mi/mi-var-child.exp: get number of children of psnp->char_ptr.*psnp->char_ptr.**psnp->char_ptr.***psnp->char_ptr.****psnp->char_ptr
+PASS: gdb.mi/mi-var-child.exp: create local variable psnp->long_ptr
+PASS: gdb.mi/mi-var-child.exp: get children of psnp->long_ptr
+PASS: gdb.mi/mi-var-child.exp: get number of children of psnp->long_ptr
+PASS: gdb.mi/mi-var-child.exp: get children of psnp->long_ptr.*psnp->long_ptr
+PASS: gdb.mi/mi-var-child.exp: get number of children of psnp->long_ptr.*psnp->long_ptr
+PASS: gdb.mi/mi-var-child.exp: get children of psnp->long_ptr.*psnp->long_ptr.**psnp->long_ptr
+PASS: gdb.mi/mi-var-child.exp: get number of children of psnp->long_ptr.*psnp->long_ptr.**psnp->long_ptr
+PASS: gdb.mi/mi-var-child.exp: get children of psnp->long_ptr.*psnp->long_ptr.**psnp->long_ptr.***psnp->long_ptr
+PASS: gdb.mi/mi-var-child.exp: get number of children of psnp->long_ptr.*psnp->long_ptr.**psnp->long_ptr.***psnp->long_ptr
+PASS: gdb.mi/mi-var-child.exp: get children of psnp->long_ptr.*psnp->long_ptr.**psnp->long_ptr.***psnp->long_ptr.****psnp->long_ptr
+PASS: gdb.mi/mi-var-child.exp: get number of children of psnp->long_ptr.*psnp->long_ptr.**psnp->long_ptr.***psnp->long_ptr.****psnp->long_ptr
+PASS: gdb.mi/mi-var-child.exp: create local variable psnp->ptrs
+PASS: gdb.mi/mi-var-child.exp: get children of psnp->ptrs
+PASS: gdb.mi/mi-var-child.exp: get number of children of psnp->ptrs
+PASS: gdb.mi/mi-var-child.exp: get children of psnp->ptrs.0
+PASS: gdb.mi/mi-var-child.exp: get number of children of psnp->ptrs.0
+PASS: gdb.mi/mi-var-child.exp: get children of psnp->ptrs.0.next
+PASS: gdb.mi/mi-var-child.exp: get number of children of psnp->ptrs.0.next
+PASS: gdb.mi/mi-var-child.exp: get children of psnp->ptrs.0.next.char_ptr
+PASS: gdb.mi/mi-var-child.exp: get number of children of psnp->ptrs.0.next.char_ptr
+PASS: gdb.mi/mi-var-child.exp: get children of psnp->ptrs.0.next.char_ptr.*char_ptr
+PASS: gdb.mi/mi-var-child.exp: get number of children of psnp->ptrs.0.next.char_ptr.*char_ptr
+PASS: gdb.mi/mi-var-child.exp: get children of psnp->ptrs.0.next.char_ptr.*char_ptr.**char_ptr
+PASS: gdb.mi/mi-var-child.exp: get children of psnp->ptrs.0.next.char_ptr.*char_ptr.**char_ptr
+PASS: gdb.mi/mi-var-child.exp: get number of children of psnp->ptrs.0.next.char_ptr.*char_ptr.**char_ptr
+PASS: gdb.mi/mi-var-child.exp: get children of psnp->ptrs.0.next.char_ptr.*char_ptr.**char_ptr.***char_ptr
+PASS: gdb.mi/mi-var-child.exp: get number of children of psnp->ptrs.0.next.char_ptr.*char_ptr.**char_ptr.***char_ptr
+PASS: gdb.mi/mi-var-child.exp: get children of psnp->ptrs.0.next.char_ptr.*char_ptr.**char_ptr.***char_ptr
+PASS: gdb.mi/mi-var-child.exp: get number of children of psnp->ptrs.0.next.char_ptr.*char_ptr.**char_ptr.***char_ptr
+PASS: gdb.mi/mi-var-child.exp: get children of psnp->ptrs.0.next.next
+PASS: gdb.mi/mi-var-child.exp: get children of psnp->ptrs.0.next.next.ptrs
+PASS: gdb.mi/mi-var-child.exp: step $line_dct_snp0 + 2
+PASS: gdb.mi/mi-var-child.exp: update all vars psnp->char_ptr (and 0.char_ptr) changed
+PASS: gdb.mi/mi-var-child.exp: step $line_dct_snp0 + 3
+PASS: gdb.mi/mi-var-child.exp: update all vars psnp->next->char_ptr (and 1.char_ptr) changed
+PASS: gdb.mi/mi-var-child.exp: step $line_dct_snp0 + 4
+PASS: gdb.mi/mi-var-child.exp: update all vars psnp->next->next->char_ptr (and 2.char_ptr) changed
+PASS: gdb.mi/mi-var-child.exp: step $line_dct_snp0 + 5
+PASS: gdb.mi/mi-var-child.exp: update all vars psnp->long_ptr (and 0.long_ptr) changed
+PASS: gdb.mi/mi-var-child.exp: step $line_dct_snp0 + 6
+XFAIL: gdb.mi/mi-var-child.exp: update all vars psnp->next->long_ptr (and 1.long_ptr) changed
+PASS: gdb.mi/mi-var-child.exp: step $line_dct_snp0 + 7
+PASS: gdb.mi/mi-var-child.exp: update all vars psnp->next->next->long_ptr (and 2.long_ptr) changed
+PASS: gdb.mi/mi-var-child.exp: run to mi-var-child.c:323 (set breakpoint)
+PASS: gdb.mi/mi-var-child.exp: create varobj for s
+PASS: gdb.mi/mi-var-child.exp: list children of S
+PASS: gdb.mi/mi-var-child.exp: delete S.a
+PASS: gdb.mi/mi-var-child.exp: delete S.b
+PASS: gdb.mi/mi-var-child.exp: delete S
+Running ./gdb.mi/mi-var-child-f.exp ...
+UNSUPPORTED: gdb.mi/mi-var-child-f.exp: compilation array.f
+Running ./gdb.mi/mi-var-cmd.exp ...
+PASS: gdb.mi/mi-var-cmd.exp: create global variable
+PASS: gdb.mi/mi-var-cmd.exp: create non-existent variable
+PASS: gdb.mi/mi-var-cmd.exp: create out of scope variable
+PASS: gdb.mi/mi-var-cmd.exp: breakpoint at do_locals_tests
+PASS: gdb.mi/mi-var-cmd.exp: mi runto do_locals_tests
+PASS: gdb.mi/mi-var-cmd.exp: run to 148 (set breakpoint)
+PASS: gdb.mi/mi-var-cmd.exp: create local variable linteger
+PASS: gdb.mi/mi-var-cmd.exp: create local variable lpinteger
+PASS: gdb.mi/mi-var-cmd.exp: create local variable lcharacter
+PASS: gdb.mi/mi-var-cmd.exp: create local variable lpcharacter
+PASS: gdb.mi/mi-var-cmd.exp: create local variable llong
+PASS: gdb.mi/mi-var-cmd.exp: create local variable lplong
+PASS: gdb.mi/mi-var-cmd.exp: create local variable lfloat
+PASS: gdb.mi/mi-var-cmd.exp: create local variable lpfloat
+PASS: gdb.mi/mi-var-cmd.exp: create local variable ldouble
+PASS: gdb.mi/mi-var-cmd.exp: create local variable lpdouble
+PASS: gdb.mi/mi-var-cmd.exp: create local variable lsimple
+PASS: gdb.mi/mi-var-cmd.exp: create local variable lpsimple
+PASS: gdb.mi/mi-var-cmd.exp: create local variable func
+PASS: gdb.mi/mi-var-cmd.exp: create lsimple.character
+PASS: gdb.mi/mi-var-cmd.exp: create lsimple->integer
+PASS: gdb.mi/mi-var-cmd.exp: create lsimple.integer
+PASS: gdb.mi/mi-var-cmd.exp: create int
+PASS: gdb.mi/mi-var-cmd.exp: update all vars
+PASS: gdb.mi/mi-var-cmd.exp: step at do_locals_test
+PASS: gdb.mi/mi-var-cmd.exp: update all vars: linteger changed
+PASS: gdb.mi/mi-var-cmd.exp: step at do_locals_tests (2)
+PASS: gdb.mi/mi-var-cmd.exp: update all vars: lpinteger changed
+PASS: gdb.mi/mi-var-cmd.exp: step at do_locals_tests (3)
+PASS: gdb.mi/mi-var-cmd.exp: update all vars: lcharacter changed
+PASS: gdb.mi/mi-var-cmd.exp: step at do_locals_tests (4)
+PASS: gdb.mi/mi-var-cmd.exp: update all vars: lpcharacter changed
+PASS: gdb.mi/mi-var-cmd.exp: step at do_locals_tests (5)
+PASS: gdb.mi/mi-var-cmd.exp: update all vars: many changed
+PASS: gdb.mi/mi-var-cmd.exp: step at do_locals_tests (6)
+PASS: gdb.mi/mi-var-cmd.exp: update all vars: func and lpsimple changed
+PASS: gdb.mi/mi-var-cmd.exp: step at do_locals_tests (7)
+PASS: gdb.mi/mi-var-cmd.exp: update all vars: lsimple and others changed
+PASS: gdb.mi/mi-var-cmd.exp: assign to global_simple
+PASS: gdb.mi/mi-var-cmd.exp: assign to linteger
+PASS: gdb.mi/mi-var-cmd.exp: update all vars: linteger changed after assign
+PASS: gdb.mi/mi-var-cmd.exp: assign to linteger again, same value
+PASS: gdb.mi/mi-var-cmd.exp: update all vars: linteger not changed after same assign
+PASS: gdb.mi/mi-var-cmd.exp: eval linteger
+PASS: gdb.mi/mi-var-cmd.exp: assign to lpinteger
+PASS: gdb.mi/mi-var-cmd.exp: update all vars: lpinteger changed after assign
+PASS: gdb.mi/mi-var-cmd.exp: update all vars: no changes on second update
+PASS: gdb.mi/mi-var-cmd.exp: eval lpinteger
+PASS: gdb.mi/mi-var-cmd.exp: assign to linteger
+PASS: gdb.mi/mi-var-cmd.exp: assign to lpinteger
+PASS: gdb.mi/mi-var-cmd.exp: assign to lcharacter
+PASS: gdb.mi/mi-var-cmd.exp: eval lcharacter
+PASS: gdb.mi/mi-var-cmd.exp: assign to llong
+PASS: gdb.mi/mi-var-cmd.exp: eval llong
+PASS: gdb.mi/mi-var-cmd.exp: assign to llong
+PASS: gdb.mi/mi-var-cmd.exp: assign to lplong
+PASS: gdb.mi/mi-var-cmd.exp: eval lplong
+PASS: gdb.mi/mi-var-cmd.exp: assign to lplong
+PASS: gdb.mi/mi-var-cmd.exp: assign to lfloat
+PASS: gdb.mi/mi-var-cmd.exp: eval lfloat
+PASS: gdb.mi/mi-var-cmd.exp: assign to lfloat
+PASS: gdb.mi/mi-var-cmd.exp: assign to lpfloat
+PASS: gdb.mi/mi-var-cmd.exp: assign to ldouble
+PASS: gdb.mi/mi-var-cmd.exp: assign to func
+PASS: gdb.mi/mi-var-cmd.exp: assign to lsimple.character
+PASS: gdb.mi/mi-var-cmd.exp: assign to lsimple->integer
+PASS: gdb.mi/mi-var-cmd.exp: assign to lsimple.integer
+PASS: gdb.mi/mi-var-cmd.exp: var update
+PASS: gdb.mi/mi-var-cmd.exp: assign same value to func
+PASS: gdb.mi/mi-var-cmd.exp: assign same value to func (update)
+PASS: gdb.mi/mi-var-cmd.exp: create global variable array_ptr
+PASS: gdb.mi/mi-var-cmd.exp: assign array to pointer
+PASS: gdb.mi/mi-var-cmd.exp: assign array to pointer (update)
+PASS: gdb.mi/mi-var-cmd.exp: assign same array to pointer
+PASS: gdb.mi/mi-var-cmd.exp: assign same array to pointer (update)
+PASS: gdb.mi/mi-var-cmd.exp: breakpoint at subroutine1
+PASS: gdb.mi/mi-var-cmd.exp: mi runto subroutine1
+PASS: gdb.mi/mi-var-cmd.exp: create i
+PASS: gdb.mi/mi-var-cmd.exp: create l
+PASS: gdb.mi/mi-var-cmd.exp: create linteger
+PASS: gdb.mi/mi-var-cmd.exp: step at subroutine1
+XFAIL: gdb.mi/mi-var-cmd.exp: update all vars: changed FIXME
+PASS: gdb.mi/mi-var-cmd.exp: step at subroutine1 (2)
+PASS: gdb.mi/mi-var-cmd.exp: update all vars: i changed
+PASS: gdb.mi/mi-var-cmd.exp: step at subroutine1 (3)
+PASS: gdb.mi/mi-var-cmd.exp: update all vars: llong changed
+PASS: gdb.mi/mi-var-cmd.exp: next out of subroutine1
+PASS: gdb.mi/mi-var-cmd.exp: update all vars: all now out of scope
+PASS: gdb.mi/mi-var-cmd.exp: delete var
+PASS: gdb.mi/mi-var-cmd.exp: delete var linteger
+PASS: gdb.mi/mi-var-cmd.exp: delete var lpinteger
+PASS: gdb.mi/mi-var-cmd.exp: delete var lcharacter
+PASS: gdb.mi/mi-var-cmd.exp: delete var lpcharacter
+PASS: gdb.mi/mi-var-cmd.exp: delete var llong
+PASS: gdb.mi/mi-var-cmd.exp: delete var lplong
+PASS: gdb.mi/mi-var-cmd.exp: delete var lfloat
+PASS: gdb.mi/mi-var-cmd.exp: delete var lpfloat
+PASS: gdb.mi/mi-var-cmd.exp: delete var ldouble
+PASS: gdb.mi/mi-var-cmd.exp: delete var lpdouble
+PASS: gdb.mi/mi-var-cmd.exp: delete var lsimple
+PASS: gdb.mi/mi-var-cmd.exp: delete var lpsimple
+PASS: gdb.mi/mi-var-cmd.exp: delete var func
+PASS: gdb.mi/mi-var-cmd.exp: delete var lsimple.character
+PASS: gdb.mi/mi-var-cmd.exp: delete var lsimple->integer
+PASS: gdb.mi/mi-var-cmd.exp: delete var lsimple.integer
+PASS: gdb.mi/mi-var-cmd.exp: delete var i
+PASS: gdb.mi/mi-var-cmd.exp: delete var l
+PASS: gdb.mi/mi-var-cmd.exp: breakpoint at do_special_tests
+PASS: gdb.mi/mi-var-cmd.exp: mi runto do_special_tests
+PASS: gdb.mi/mi-var-cmd.exp: create selected_a
+PASS: gdb.mi/mi-var-cmd.exp: breakpoint at incr_a
+PASS: gdb.mi/mi-var-cmd.exp: mi runto incr_a
+PASS: gdb.mi/mi-var-cmd.exp: update selected_a in incr_a
+PASS: gdb.mi/mi-var-cmd.exp: step a line in incr_a
+PASS: gdb.mi/mi-var-cmd.exp: return from incr_a to do_special_tests
+PASS: gdb.mi/mi-var-cmd.exp: update selected_a in do_special_tests
+PASS: gdb.mi/mi-var-cmd.exp: floating varobj invalidation
+PASS: gdb.mi/mi-var-cmd.exp: delete selected_a
+PASS: gdb.mi/mi-var-cmd.exp: delete array_ptr
+PASS: gdb.mi/mi-var-cmd.exp: run to var-cmd.c:351 (set breakpoint)
+PASS: gdb.mi/mi-var-cmd.exp: create varobj for v1
+PASS: gdb.mi/mi-var-cmd.exp: create varobj for v2
+PASS: gdb.mi/mi-var-cmd.exp: list children of v1
+PASS: gdb.mi/mi-var-cmd.exp: list children of v1.nested
+PASS: gdb.mi/mi-var-cmd.exp: check V1.i: 1
+PASS: gdb.mi/mi-var-cmd.exp: check V1.nested.j: 2
+PASS: gdb.mi/mi-var-cmd.exp: check V1.nested.k: 3
+PASS: gdb.mi/mi-var-cmd.exp: check V2: 4
+PASS: gdb.mi/mi-var-cmd.exp: update varobjs: V2 changed
+PASS: gdb.mi/mi-var-cmd.exp: -var-set-frozen V2 1
+PASS: gdb.mi/mi-var-cmd.exp: update varobjs: nothing changed
+PASS: gdb.mi/mi-var-cmd.exp: check V2: 5
+PASS: gdb.mi/mi-var-cmd.exp: update V2 explicitly
+PASS: gdb.mi/mi-var-cmd.exp: check V2: 6
+PASS: gdb.mi/mi-var-cmd.exp: run to var-cmd.c:385 (set breakpoint)
+PASS: gdb.mi/mi-var-cmd.exp: -var-set-frozen V1 1
+PASS: gdb.mi/mi-var-cmd.exp: update varobjs: nothing changed
+PASS: gdb.mi/mi-var-cmd.exp: check V1.i: 1
+PASS: gdb.mi/mi-var-cmd.exp: check V1.nested.j: 2
+PASS: gdb.mi/mi-var-cmd.exp: check V1.nested.k: 3
+PASS: gdb.mi/mi-var-cmd.exp: update V1.nested.j
+PASS: gdb.mi/mi-var-cmd.exp: check V1.i: 1
+PASS: gdb.mi/mi-var-cmd.exp: check V1.nested.j: 8
+PASS: gdb.mi/mi-var-cmd.exp: check V1.nested.k: 3
+PASS: gdb.mi/mi-var-cmd.exp: update V1.nested
+PASS: gdb.mi/mi-var-cmd.exp: check V1.i: 1
+PASS: gdb.mi/mi-var-cmd.exp: check V1.nested.j: 8
+PASS: gdb.mi/mi-var-cmd.exp: check V1.nested.k: 9
+PASS: gdb.mi/mi-var-cmd.exp: update V1.i
+PASS: gdb.mi/mi-var-cmd.exp: check V1.i: 7
+PASS: gdb.mi/mi-var-cmd.exp: run to var-cmd.c:410 (set breakpoint)
+PASS: gdb.mi/mi-var-cmd.exp: -var-set-frozen V1 0
+PASS: gdb.mi/mi-var-cmd.exp: check V1.i: 7
+PASS: gdb.mi/mi-var-cmd.exp: check V1.nested.j: 8
+PASS: gdb.mi/mi-var-cmd.exp: check V1.nested.k: 9
+PASS: gdb.mi/mi-var-cmd.exp: update V1
+PASS: gdb.mi/mi-var-cmd.exp: check V1.i: 10
+PASS: gdb.mi/mi-var-cmd.exp: check V1.nested.j: 11
+PASS: gdb.mi/mi-var-cmd.exp: check V1.nested.k: 12
+PASS: gdb.mi/mi-var-cmd.exp: run to var-cmd.c:510 (set breakpoint)
+PASS: gdb.mi/mi-var-cmd.exp: create varobj for Data
+PASS: gdb.mi/mi-var-cmd.exp: list children of Data
+PASS: gdb.mi/mi-var-cmd.exp: access bitfield
+PASS: gdb.mi/mi-var-cmd.exp: run to var-cmd.c:453 (set breakpoint)
+PASS: gdb.mi/mi-var-cmd.exp: create floating varobj
+PASS: gdb.mi/mi-var-cmd.exp: update F (1)
+PASS: gdb.mi/mi-var-cmd.exp: check F (1)
+PASS: gdb.mi/mi-var-cmd.exp: run to var-cmd.c:464 (set breakpoint)
+PASS: gdb.mi/mi-var-cmd.exp: update F (2)
+PASS: gdb.mi/mi-var-cmd.exp: check F (2)
+PASS: gdb.mi/mi-var-cmd.exp: run to var-cmd.c:472 (set breakpoint)
+PASS: gdb.mi/mi-var-cmd.exp: update F (--all-values)
+PASS: gdb.mi/mi-var-cmd.exp: run to var-cmd.c:478 (set breakpoint)
+PASS: gdb.mi/mi-var-cmd.exp: update F (3)
+PASS: gdb.mi/mi-var-cmd.exp: check F (3)
+PASS: gdb.mi/mi-var-cmd.exp: inside breakpoint inside callee
+PASS: gdb.mi/mi-var-cmd.exp: continue to where i is initialized
+PASS: gdb.mi/mi-var-cmd.exp: update F inside callee
+PASS: gdb.mi/mi-var-cmd.exp: check F inside callee
+PASS: gdb.mi/mi-var-cmd.exp: create null_ptr
+PASS: gdb.mi/mi-var-cmd.exp: update null_ptr
+PASS: gdb.mi/mi-var-cmd.exp: delete null_ptr
+PASS: gdb.mi/mi-var-cmd.exp: kill program before endvar
+PASS: gdb.mi/mi-var-cmd.exp: create endvar
+PASS: gdb.mi/mi-var-cmd.exp: update endvar
+PASS: gdb.mi/mi-var-cmd.exp: delete endvar
+PASS: gdb.mi/mi-var-cmd.exp: breakpoint at do_locals_tests
+PASS: gdb.mi/mi-var-cmd.exp: mi runto do_locals_tests
+PASS: gdb.mi/mi-var-cmd.exp: in-and-out-of-scope: create varobj
+PASS: gdb.mi/mi-var-cmd.exp: in-and-out-of-scope: check initial value
+PASS: gdb.mi/mi-var-cmd.exp: breakpoint at main
+PASS: gdb.mi/mi-var-cmd.exp: mi runto main
+PASS: gdb.mi/mi-var-cmd.exp: in-and-out-of-scope: out of scope now
+PASS: gdb.mi/mi-var-cmd.exp: in-and-out-of-scope: out of scope now, not changed
+PASS: gdb.mi/mi-var-cmd.exp: breakpoint at do_locals_tests
+PASS: gdb.mi/mi-var-cmd.exp: mi runto do_locals_tests
+PASS: gdb.mi/mi-var-cmd.exp: in-and-out-of-scope: in scope now
+PASS: gdb.mi/mi-var-cmd.exp: in-and-out-of-scope: in scope now, not changed
+Running ./gdb.mi/mi-var-cp.exp ...
+PASS: gdb.mi/mi-var-cp.exp: run to mi-var-cp.cc:20 (set breakpoint)
+PASS: gdb.mi/mi-var-cp.exp: create varobj for rx
+PASS: gdb.mi/mi-var-cp.exp: update RX (1)
+PASS: gdb.mi/mi-var-cp.exp: check RX: expect 167
+PASS: gdb.mi/mi-var-cp.exp: update RX (2)
+PASS: gdb.mi/mi-var-cp.exp: check RX: expect 567
+PASS: gdb.mi/mi-var-cp.exp: update RX (3)
+PASS: gdb.mi/mi-var-cp.exp: delete RX
+PASS: gdb.mi/mi-var-cp.exp: run to mi-var-cp.cc:46 (set breakpoint)
+PASS: gdb.mi/mi-var-cp.exp: create varobj for s2
+PASS: gdb.mi/mi-var-cp.exp: list children of s2
+PASS: gdb.mi/mi-var-cp.exp: list children of s2.s
+PASS: gdb.mi/mi-var-cp.exp: list children of s2.s.public
+PASS: gdb.mi/mi-var-cp.exp: check S2.S.public.i
+PASS: gdb.mi/mi-var-cp.exp: check S2.S.public.j
+PASS: gdb.mi/mi-var-cp.exp: delete S2
+PASS: gdb.mi/mi-var-cp.exp: run to mi-var-cp.cc:82 (set breakpoint)
+PASS: gdb.mi/mi-var-cp.exp: create varobj for rptr_s
+PASS: gdb.mi/mi-var-cp.exp: list public child of RPTR
+PASS: gdb.mi/mi-var-cp.exp: list children of reference to pointer
+PASS: gdb.mi/mi-var-cp.exp: check i member
+PASS: gdb.mi/mi-var-cp.exp: check j member
+PASS: gdb.mi/mi-var-cp.exp: delete RPTR
+PASS: gdb.mi/mi-var-cp.exp: run to mi-var-cp.cc:105 (set breakpoint)
+PASS: gdb.mi/mi-var-cp.exp: create varobj for s
+PASS: gdb.mi/mi-var-cp.exp: create varobj for s
+PASS: gdb.mi/mi-var-cp.exp: check attributes of S
+PASS: gdb.mi/mi-var-cp.exp: check attributes of R
+PASS: gdb.mi/mi-var-cp.exp: -var-update should not list structure varobjs
+PASS: gdb.mi/mi-var-cp.exp: run to mi-var-cp.cc:145 (set breakpoint)
+PASS: gdb.mi/mi-var-cp.exp: create varobj for ip
+PASS: gdb.mi/mi-var-cp.exp: list children of IP
+PASS: gdb.mi/mi-var-cp.exp: -var-info-path-expression IP.*ip
+PASS: gdb.mi/mi-var-cp.exp: create varobj for dp
+PASS: gdb.mi/mi-var-cp.exp: list children of DP
+PASS: gdb.mi/mi-var-cp.exp: -var-info-path-expression DP.Base1
+PASS: gdb.mi/mi-var-cp.exp: list children of DP.public
+PASS: gdb.mi/mi-var-cp.exp: -var-info-path-expression DP.public.i
+PASS: gdb.mi/mi-var-cp.exp: list children of DP.Base1
+PASS: gdb.mi/mi-var-cp.exp: list children of DP.Base1.public
+PASS: gdb.mi/mi-var-cp.exp: -var-info-path-expression DP.Base1.public.i
+PASS: gdb.mi/mi-var-cp.exp: -var-info-path-expression DP.public
+PASS: gdb.mi/mi-var-cp.exp: create varobj for d
+PASS: gdb.mi/mi-var-cp.exp: list children of D
+PASS: gdb.mi/mi-var-cp.exp: -var-info-path-expression D.Base1
+PASS: gdb.mi/mi-var-cp.exp: run to mi-var-cp.cc:192 (set breakpoint)
+PASS: gdb.mi/mi-var-cp.exp: create varobj for array
+PASS: gdb.mi/mi-var-cp.exp: list children of A
+PASS: gdb.mi/mi-var-cp.exp: -var-info-path-expression A.2
+PASS: gdb.mi/mi-var-cp.exp: break in anonymous_structs_and_unions
+PASS: gdb.mi/mi-var-cp.exp: continue to anonymous_structs breakpoint
+PASS: gdb.mi/mi-var-cp.exp: VT: create root varobj for a
+PASS: gdb.mi/mi-var-cp.exp: VT: list children of a1
+PASS: gdb.mi/mi-var-cp.exp: path expression for a1
+PASS: gdb.mi/mi-var-cp.exp: expression for a1
+PASS: gdb.mi/mi-var-cp.exp: VT: list children of a1.public
+PASS: gdb.mi/mi-var-cp.exp: path expression for a1.public
+PASS: gdb.mi/mi-var-cp.exp: expression for a1.public
+PASS: gdb.mi/mi-var-cp.exp: VT: list children of a1.public.0_anonymous
+PASS: gdb.mi/mi-var-cp.exp: path expression for a1.public.0_anonymous
+PASS: gdb.mi/mi-var-cp.exp: expression for a1.public.0_anonymous
+PASS: gdb.mi/mi-var-cp.exp: VT: list children of a1.public.1_anonymous
+PASS: gdb.mi/mi-var-cp.exp: path expression for a1.public.1_anonymous
+PASS: gdb.mi/mi-var-cp.exp: expression for a1.public.1_anonymous
+PASS: gdb.mi/mi-var-cp.exp: VT: list children of a1.public.2_anonymous
+PASS: gdb.mi/mi-var-cp.exp: path expression for a1.public.2_anonymous
+PASS: gdb.mi/mi-var-cp.exp: expression for a1.public.2_anonymous
+PASS: gdb.mi/mi-var-cp.exp: VT: list children of a1.public.0_anonymous.public
+PASS: gdb.mi/mi-var-cp.exp: path expression for a1.public.0_anonymous.public
+PASS: gdb.mi/mi-var-cp.exp: expression for a1.public.0_anonymous.public
+PASS: gdb.mi/mi-var-cp.exp: VT: list children of a1.public.1_anonymous.public
+PASS: gdb.mi/mi-var-cp.exp: path expression for a1.public.1_anonymous.public
+PASS: gdb.mi/mi-var-cp.exp: expression for a1.public.1_anonymous.public
+PASS: gdb.mi/mi-var-cp.exp: VT: list children of a1.public.2_anonymous.public
+PASS: gdb.mi/mi-var-cp.exp: path expression for a1.public.2_anonymous.public
+PASS: gdb.mi/mi-var-cp.exp: expression for a1.public.2_anonymous.public
+PASS: gdb.mi/mi-var-cp.exp: path expression for a1.public.0_anonymous.public.b
+PASS: gdb.mi/mi-var-cp.exp: expression for a1.public.0_anonymous.public.b
+PASS: gdb.mi/mi-var-cp.exp: path expression for a1.public.1_anonymous.public.c
+PASS: gdb.mi/mi-var-cp.exp: expression for a1.public.1_anonymous.public.c
+PASS: gdb.mi/mi-var-cp.exp: path expression for a1.public.2_anonymous.public.d
+PASS: gdb.mi/mi-var-cp.exp: expression for a1.public.2_anonymous.public.d
+PASS: gdb.mi/mi-var-cp.exp: VT: list children of a1.public.2_anonymous.public.1_anonymous
+PASS: gdb.mi/mi-var-cp.exp: path expression for a1.public.2_anonymous.public.1_anonymous
+PASS: gdb.mi/mi-var-cp.exp: expression for a1.public.2_anonymous.public.1_anonymous
+PASS: gdb.mi/mi-var-cp.exp: VT: list children of a1.public.2_anonymous.public.1_anonymous.public
+PASS: gdb.mi/mi-var-cp.exp: path expression for a1.public.2_anonymous.public.1_anonymous.public
+PASS: gdb.mi/mi-var-cp.exp: expression for a1.public.2_anonymous.public.1_anonymous.public
+PASS: gdb.mi/mi-var-cp.exp: path expression for a1.public.2_anonymous.public.1_anonymous.public.e
+PASS: gdb.mi/mi-var-cp.exp: expression for a1.public.2_anonymous.public.1_anonymous.public.e
+PASS: gdb.mi/mi-var-cp.exp: VT: list children of a1.public.2_anonymous.public.1_anonymous.public.1_anonymous
+PASS: gdb.mi/mi-var-cp.exp: path expression for a1.public.2_anonymous.public.1_anonymous.public.1_anonymous
+PASS: gdb.mi/mi-var-cp.exp: expression for a1.public.2_anonymous.public.1_anonymous.public.1_anonymous
+PASS: gdb.mi/mi-var-cp.exp: VT: list children of a1.public.2_anonymous.public.1_anonymous.public.2_anonymous
+PASS: gdb.mi/mi-var-cp.exp: path expression for a1.public.2_anonymous.public.1_anonymous.public.2_anonymous
+PASS: gdb.mi/mi-var-cp.exp: expression for a1.public.2_anonymous.public.1_anonymous.public.2_anonymous
+PASS: gdb.mi/mi-var-cp.exp: VT: list children of a1.public.2_anonymous.public.1_anonymous.public.1_anonymous.public
+PASS: gdb.mi/mi-var-cp.exp: path expression for a1.public.2_anonymous.public.1_anonymous.public.1_anonymous.public
+PASS: gdb.mi/mi-var-cp.exp: expression for a1.public.2_anonymous.public.1_anonymous.public.1_anonymous.public
+PASS: gdb.mi/mi-var-cp.exp: VT: list children of a1.public.2_anonymous.public.1_anonymous.public.2_anonymous.public
+PASS: gdb.mi/mi-var-cp.exp: path expression for a1.public.2_anonymous.public.1_anonymous.public.2_anonymous.public
+PASS: gdb.mi/mi-var-cp.exp: expression for a1.public.2_anonymous.public.1_anonymous.public.2_anonymous.public
+PASS: gdb.mi/mi-var-cp.exp: path expression for a1.public.2_anonymous.public.1_anonymous.public.1_anonymous.public.f
+PASS: gdb.mi/mi-var-cp.exp: expression for a1.public.2_anonymous.public.1_anonymous.public.1_anonymous.public.f
+PASS: gdb.mi/mi-var-cp.exp: VT: list children of a1.public.2_anonymous.public.1_anonymous.public.1_anonymous.public.1_anonymous
+PASS: gdb.mi/mi-var-cp.exp: path expression for a1.public.2_anonymous.public.1_anonymous.public.1_anonymous.public.1_anonymous
+PASS: gdb.mi/mi-var-cp.exp: expression for a1.public.2_anonymous.public.1_anonymous.public.1_anonymous.public.1_anonymous
+PASS: gdb.mi/mi-var-cp.exp: path expression for a1.public.2_anonymous.public.1_anonymous.public.2_anonymous.public.i
+PASS: gdb.mi/mi-var-cp.exp: expression for a1.public.2_anonymous.public.1_anonymous.public.2_anonymous.public.i
+PASS: gdb.mi/mi-var-cp.exp: path expression for a1.public.2_anonymous.public.1_anonymous.public.2_anonymous.public.j
+PASS: gdb.mi/mi-var-cp.exp: expression for a1.public.2_anonymous.public.1_anonymous.public.2_anonymous.public.j
+PASS: gdb.mi/mi-var-cp.exp: VT: list children of a1.public.2_anonymous.public.1_anonymous.public.1_anonymous.public.1_anonymous.public
+PASS: gdb.mi/mi-var-cp.exp: path expression for a1.public.2_anonymous.public.1_anonymous.public.1_anonymous.public.1_anonymous.public
+PASS: gdb.mi/mi-var-cp.exp: expression for a1.public.2_anonymous.public.1_anonymous.public.1_anonymous.public.1_anonymous.public
+PASS: gdb.mi/mi-var-cp.exp: path expression for a1.public.2_anonymous.public.1_anonymous.public.1_anonymous.public.1_anonymous.public.g
+PASS: gdb.mi/mi-var-cp.exp: expression for a1.public.2_anonymous.public.1_anonymous.public.1_anonymous.public.1_anonymous.public.g
+PASS: gdb.mi/mi-var-cp.exp: path expression for a1.public.2_anonymous.public.1_anonymous.public.1_anonymous.public.1_anonymous.public.h
+PASS: gdb.mi/mi-var-cp.exp: expression for a1.public.2_anonymous.public.1_anonymous.public.1_anonymous.public.1_anonymous.public.h
+Running ./gdb.mi/mi-var-create-rtti.exp ...
+PASS: gdb.mi/mi-var-create-rtti.exp: breakpoint at main
+PASS: gdb.mi/mi-var-create-rtti.exp: mi runto main
+PASS: gdb.mi/mi-var-create-rtti.exp: -var-create sp1 * $sp
+Running ./gdb.mi/mi-var-display.exp ...
+PASS: gdb.mi/mi-var-display.exp: break-insert operation
+PASS: gdb.mi/mi-var-display.exp: run to main
+PASS: gdb.mi/mi-var-display.exp: create local variable bar
+PASS: gdb.mi/mi-var-display.exp: info type variable bar
+PASS: gdb.mi/mi-var-display.exp: show format variable bar
+PASS: gdb.mi/mi-var-display.exp: eval variable bar
+PASS: gdb.mi/mi-var-display.exp: set format variable bar
+PASS: gdb.mi/mi-var-display.exp: eval variable bar with new format
+PASS: gdb.mi/mi-var-display.exp: assing to variable bar
+PASS: gdb.mi/mi-var-display.exp: set format variable bar
+PASS: gdb.mi/mi-var-display.exp: eval variable bar with new value
+PASS: gdb.mi/mi-var-display.exp: delete var bar
+PASS: gdb.mi/mi-var-display.exp: create local variable foo
+PASS: gdb.mi/mi-var-display.exp: info type variable foo
+PASS: gdb.mi/mi-var-display.exp: show format variable foo
+PASS: gdb.mi/mi-var-display.exp: eval variable foo
+PASS: gdb.mi/mi-var-display.exp: set format variable foo
+PASS: gdb.mi/mi-var-display.exp: show format variable foo
+PASS: gdb.mi/mi-var-display.exp: eval variable foo
+PASS: gdb.mi/mi-var-display.exp: assing to variable foo
+PASS: gdb.mi/mi-var-display.exp: set format variable foo
+PASS: gdb.mi/mi-var-display.exp: eval variable foo
+PASS: gdb.mi/mi-var-display.exp: eval variable foo in hex
+PASS: gdb.mi/mi-var-display.exp: show format variable foo after eval in hex
+PASS: gdb.mi/mi-var-display.exp: eval variable foo in octal
+PASS: gdb.mi/mi-var-display.exp: show format variable foo after eval in octal
+PASS: gdb.mi/mi-var-display.exp: eval variable foo in decimal
+PASS: gdb.mi/mi-var-display.exp: show format variable foo after eval in decimal
+PASS: gdb.mi/mi-var-display.exp: eval variable foo in natural
+PASS: gdb.mi/mi-var-display.exp: show format variable foo after eval in natural
+PASS: gdb.mi/mi-var-display.exp: eval variable foo in binary
+PASS: gdb.mi/mi-var-display.exp: show format variable foo after eval in binary
+PASS: gdb.mi/mi-var-display.exp: delete var foo
+PASS: gdb.mi/mi-var-display.exp: create local variable weird
+PASS: gdb.mi/mi-var-display.exp: get children local variable weird
+PASS: gdb.mi/mi-var-display.exp: set format variable weird.func_ptr
+PASS: gdb.mi/mi-var-display.exp: show format variable weird.func_ptr
+PASS: gdb.mi/mi-var-display.exp: set format variable weird.func_ptr_ptr
+PASS: gdb.mi/mi-var-display.exp: show format variable weird.func_ptr_ptr
+PASS: gdb.mi/mi-var-display.exp: set format variable weird
+PASS: gdb.mi/mi-var-display.exp: set format variable weird.integer
+PASS: gdb.mi/mi-var-display.exp: set format variable weird.character
+PASS: gdb.mi/mi-var-display.exp: set format variable weird.char_ptr
+PASS: gdb.mi/mi-var-display.exp: set format variable weird.long_int
+PASS: gdb.mi/mi-var-display.exp: set format variable weird.int_ptr_ptr
+PASS: gdb.mi/mi-var-display.exp: set format variable weird.long_array
+PASS: gdb.mi/mi-var-display.exp: set format variable weird.func_ptr
+PASS: gdb.mi/mi-var-display.exp: set format variable weird.func_ptr_struct
+PASS: gdb.mi/mi-var-display.exp: set format variable weird.func_ptr_ptr
+PASS: gdb.mi/mi-var-display.exp: set format variable weird.u1
+PASS: gdb.mi/mi-var-display.exp: set format variable weird.s2
+PASS: gdb.mi/mi-var-display.exp: delete var weird
+PASS: gdb.mi/mi-var-display.exp: break-insert operation 2
+PASS: gdb.mi/mi-var-display.exp: continue to do_special_tests
+PASS: gdb.mi/mi-var-display.exp: create local variable u
+PASS: gdb.mi/mi-var-display.exp: eval variable u
+PASS: gdb.mi/mi-var-display.exp: info type variable u
+PASS: gdb.mi/mi-var-display.exp: is u editable
+PASS: gdb.mi/mi-var-display.exp: get number of children of u
+PASS: gdb.mi/mi-var-display.exp: get children of u
+PASS: gdb.mi/mi-var-display.exp: create local variable anonu
+PASS: gdb.mi/mi-var-display.exp: eval variable anonu
+PASS: gdb.mi/mi-var-display.exp: info type variable anonu
+PASS: gdb.mi/mi-var-display.exp: is anonu editable
+PASS: gdb.mi/mi-var-display.exp: get number of children of anonu
+PASS: gdb.mi/mi-var-display.exp: get children of anonu
+PASS: gdb.mi/mi-var-display.exp: create local variable s
+PASS: gdb.mi/mi-var-display.exp: eval variable s
+PASS: gdb.mi/mi-var-display.exp: info type variable s
+PASS: gdb.mi/mi-var-display.exp: is s editable
+PASS: gdb.mi/mi-var-display.exp: get number of children of s
+PASS: gdb.mi/mi-var-display.exp: get children of s
+PASS: gdb.mi/mi-var-display.exp: create local variable anons
+PASS: gdb.mi/mi-var-display.exp: eval variable anons
+PASS: gdb.mi/mi-var-display.exp: info type variable anons
+PASS: gdb.mi/mi-var-display.exp: is anons editable
+PASS: gdb.mi/mi-var-display.exp: get number of children of anons
+PASS: gdb.mi/mi-var-display.exp: get children of anons
+PASS: gdb.mi/mi-var-display.exp: create local variable e
+PASS: gdb.mi/mi-var-display.exp: eval variable e
+PASS: gdb.mi/mi-var-display.exp: info type variable e
+PASS: gdb.mi/mi-var-display.exp: is e editable
+PASS: gdb.mi/mi-var-display.exp: get number of children of e
+PASS: gdb.mi/mi-var-display.exp: get children of e
+PASS: gdb.mi/mi-var-display.exp: create local variable anone
+PASS: gdb.mi/mi-var-display.exp: eval variable anone
+PASS: gdb.mi/mi-var-display.exp: create duplicate local variable anone
+PASS: gdb.mi/mi-var-display.exp: info type variable anone
+PASS: gdb.mi/mi-var-display.exp: is anone editable
+PASS: gdb.mi/mi-var-display.exp: get number of children of anone
+PASS: gdb.mi/mi-var-display.exp: get children of anone
+PASS: gdb.mi/mi-var-display.exp: print FP register
+PASS: gdb.mi/mi-var-display.exp: breakpoint at incr_a
+PASS: gdb.mi/mi-var-display.exp: mi runto incr_a
+PASS: gdb.mi/mi-var-display.exp: create local variable a1
+PASS: gdb.mi/mi-var-display.exp: create variable a2 in different scope
+Running ./gdb.mi/mi-var-invalidate.exp ...
+PASS: gdb.mi/mi-var-invalidate.exp: create global variable
+PASS: gdb.mi/mi-var-invalidate.exp: breakpoint at do_locals_tests
+PASS: gdb.mi/mi-var-invalidate.exp: mi runto do_locals_tests
+PASS: gdb.mi/mi-var-invalidate.exp: create local variable linteger
+PASS: gdb.mi/mi-var-invalidate.exp: create floating variable
+PASS: gdb.mi/mi-var-invalidate.exp: breakpoint at main
+PASS: gdb.mi/mi-var-invalidate.exp: mi runto main
+PASS: gdb.mi/mi-var-invalidate.exp: set format variable float_simple
+PASS: gdb.mi/mi-var-invalidate.exp: linteger not anymore in scope due to binary changes
+PASS: gdb.mi/mi-var-invalidate.exp: no type for invalid variable linteger (1)
+PASS: gdb.mi/mi-var-invalidate.exp: global_simple still alive
+PASS: gdb.mi/mi-var-invalidate.exp: type simpleton for valid variable global_simple
+PASS: gdb.mi/mi-var-invalidate.exp: linteger not valid anymore due to binary changes
+PASS: gdb.mi/mi-var-invalidate.exp: no type for invalid variable linteger (2)
+PASS: gdb.mi/mi-var-invalidate.exp: global_simple not anymore in scope due to binary changes
+PASS: gdb.mi/mi-var-invalidate.exp: no type for invalid variable global_simple
+Running ./gdb.mi/mi-var-rtti.exp ...
+PASS: gdb.mi/mi-var-rtti.exp: run to mi-var-rtti.cc:37 (set breakpoint)
+PASS: gdb.mi/mi-var-rtti.exp: -interpreter-exec console "set print object off" in use_rtti_for_ptr
+PASS: gdb.mi/mi-var-rtti.exp: create varobj for ptr (without RTTI) in use_rtti_for_ptr
+PASS: gdb.mi/mi-var-rtti.exp: list children of ptr (without RTTI) in use_rtti_for_ptr
+PASS: gdb.mi/mi-var-rtti.exp: list children of ptr.public (without RTTI) in use_rtti_for_ptr
+PASS: gdb.mi/mi-var-rtti.exp: check ptr->A (without RTTI) in use_rtti_for_ptr
+PASS: gdb.mi/mi-var-rtti.exp: delete varobj for ptr (without RTTI) in use_rtti_for_ptr
+PASS: gdb.mi/mi-var-rtti.exp: create varobj for constPtr (without RTTI) in use_rtti_for_ptr
+PASS: gdb.mi/mi-var-rtti.exp: list children of constPtr (without RTTI) in use_rtti_for_ptr
+PASS: gdb.mi/mi-var-rtti.exp: list children of constPtr.public (without RTTI) in use_rtti_for_ptr
+PASS: gdb.mi/mi-var-rtti.exp: check constPtr->A (without RTTI) in use_rtti_for_ptr
+PASS: gdb.mi/mi-var-rtti.exp: delete varobj for constPtr (without RTTI) in use_rtti_for_ptr
+PASS: gdb.mi/mi-var-rtti.exp: create varobj for ptrConst (without RTTI) in use_rtti_for_ptr
+PASS: gdb.mi/mi-var-rtti.exp: list children of ptrConst (without RTTI) in use_rtti_for_ptr
+PASS: gdb.mi/mi-var-rtti.exp: list children of ptrConst.public (without RTTI) in use_rtti_for_ptr
+PASS: gdb.mi/mi-var-rtti.exp: check ptrConst->A (without RTTI) in use_rtti_for_ptr
+PASS: gdb.mi/mi-var-rtti.exp: delete varobj for ptrConst (without RTTI) in use_rtti_for_ptr
+PASS: gdb.mi/mi-var-rtti.exp: create varobj for constPtrConst (without RTTI) in use_rtti_for_ptr
+PASS: gdb.mi/mi-var-rtti.exp: list children of constPtrConst (without RTTI) in use_rtti_for_ptr
+PASS: gdb.mi/mi-var-rtti.exp: list children of constPtrConst.public (without RTTI) in use_rtti_for_ptr
+PASS: gdb.mi/mi-var-rtti.exp: check constPtrConst->A (without RTTI) in use_rtti_for_ptr
+PASS: gdb.mi/mi-var-rtti.exp: delete varobj for constPtrConst (without RTTI) in use_rtti_for_ptr
+PASS: gdb.mi/mi-var-rtti.exp: -interpreter-exec console "set print object on" in use_rtti_for_ptr
+PASS: gdb.mi/mi-var-rtti.exp: create varobj for ptr (with RTTI) in use_rtti_for_ptr
+PASS: gdb.mi/mi-var-rtti.exp: list children of ptr (with RTTI) in use_rtti_for_ptr
+PASS: gdb.mi/mi-var-rtti.exp: list children of ptr.Base (with RTTI) in use_rtti_for_ptr
+PASS: gdb.mi/mi-var-rtti.exp: list children of ptr.Base.public (with RTTI) in use_rtti_for_ptr
+PASS: gdb.mi/mi-var-rtti.exp: list children of ptr.public (with RTTI) in use_rtti_for_ptr
+PASS: gdb.mi/mi-var-rtti.exp: check ptr->A (with RTTI) in use_rtti_for_ptr
+PASS: gdb.mi/mi-var-rtti.exp: check ptr->B (with RTTI) in use_rtti_for_ptr
+PASS: gdb.mi/mi-var-rtti.exp: check ptr->C (with RTTI) in use_rtti_for_ptr
+PASS: gdb.mi/mi-var-rtti.exp: delete varobj for ptr (with RTTI) in use_rtti_for_ptr
+PASS: gdb.mi/mi-var-rtti.exp: create varobj for constPtr (with RTTI) in use_rtti_for_ptr
+PASS: gdb.mi/mi-var-rtti.exp: list children of constPtr (with RTTI) in use_rtti_for_ptr
+PASS: gdb.mi/mi-var-rtti.exp: list children of constPtr.Base (with RTTI) in use_rtti_for_ptr
+PASS: gdb.mi/mi-var-rtti.exp: list children of constPtr.Base.public (with RTTI) in use_rtti_for_ptr
+PASS: gdb.mi/mi-var-rtti.exp: list children of constPtr.public (with RTTI) in use_rtti_for_ptr
+PASS: gdb.mi/mi-var-rtti.exp: check constPtr->A (with RTTI) in use_rtti_for_ptr
+PASS: gdb.mi/mi-var-rtti.exp: check constPtr->B (with RTTI) in use_rtti_for_ptr
+PASS: gdb.mi/mi-var-rtti.exp: check constPtr->C (with RTTI) in use_rtti_for_ptr
+PASS: gdb.mi/mi-var-rtti.exp: delete varobj for constPtr (with RTTI) in use_rtti_for_ptr
+PASS: gdb.mi/mi-var-rtti.exp: create varobj for ptrConst (with RTTI) in use_rtti_for_ptr
+PASS: gdb.mi/mi-var-rtti.exp: list children of ptrConst (with RTTI) in use_rtti_for_ptr
+PASS: gdb.mi/mi-var-rtti.exp: list children of ptrConst.Base (with RTTI) in use_rtti_for_ptr
+PASS: gdb.mi/mi-var-rtti.exp: list children of ptrConst.Base.public (with RTTI) in use_rtti_for_ptr
+PASS: gdb.mi/mi-var-rtti.exp: list children of ptrConst.public (with RTTI) in use_rtti_for_ptr
+PASS: gdb.mi/mi-var-rtti.exp: check ptrConst->A (with RTTI) in use_rtti_for_ptr
+PASS: gdb.mi/mi-var-rtti.exp: check ptrConst->B (with RTTI) in use_rtti_for_ptr
+PASS: gdb.mi/mi-var-rtti.exp: check ptrConst->C (with RTTI) in use_rtti_for_ptr
+PASS: gdb.mi/mi-var-rtti.exp: delete varobj for ptrConst (with RTTI) in use_rtti_for_ptr
+PASS: gdb.mi/mi-var-rtti.exp: create varobj for constPtrConst (with RTTI) in use_rtti_for_ptr
+PASS: gdb.mi/mi-var-rtti.exp: list children of constPtrConst (with RTTI) in use_rtti_for_ptr
+PASS: gdb.mi/mi-var-rtti.exp: list children of constPtrConst.Base (with RTTI) in use_rtti_for_ptr
+PASS: gdb.mi/mi-var-rtti.exp: list children of constPtrConst.Base.public (with RTTI) in use_rtti_for_ptr
+PASS: gdb.mi/mi-var-rtti.exp: list children of constPtrConst.public (with RTTI) in use_rtti_for_ptr
+PASS: gdb.mi/mi-var-rtti.exp: check constPtrConst->A (with RTTI) in use_rtti_for_ptr
+PASS: gdb.mi/mi-var-rtti.exp: check constPtrConst->B (with RTTI) in use_rtti_for_ptr
+PASS: gdb.mi/mi-var-rtti.exp: check constPtrConst->C (with RTTI) in use_rtti_for_ptr
+PASS: gdb.mi/mi-var-rtti.exp: delete varobj for constPtrConst (with RTTI) in use_rtti_for_ptr
+PASS: gdb.mi/mi-var-rtti.exp: run to mi-var-rtti.cc:64 (set breakpoint)
+PASS: gdb.mi/mi-var-rtti.exp: -interpreter-exec console "set print object off" in use_rtti_for_ref
+PASS: gdb.mi/mi-var-rtti.exp: create varobj for ref (without RTTI) in use_rtti_for_ref
+PASS: gdb.mi/mi-var-rtti.exp: list children of ref (without RTTI) in use_rtti_for_ref
+PASS: gdb.mi/mi-var-rtti.exp: list children of ref.public (without RTTI) in use_rtti_for_ref
+PASS: gdb.mi/mi-var-rtti.exp: check ref->A (without RTTI) in use_rtti_for_ref
+PASS: gdb.mi/mi-var-rtti.exp: delete varobj for ref (without RTTI) in use_rtti_for_ref
+PASS: gdb.mi/mi-var-rtti.exp: create varobj for constRef (without RTTI) in use_rtti_for_ref
+PASS: gdb.mi/mi-var-rtti.exp: list children of constRef (without RTTI) in use_rtti_for_ref
+PASS: gdb.mi/mi-var-rtti.exp: list children of constRef.public (without RTTI) in use_rtti_for_ref
+PASS: gdb.mi/mi-var-rtti.exp: check constRef->A (without RTTI) in use_rtti_for_ref
+PASS: gdb.mi/mi-var-rtti.exp: delete varobj for constRef (without RTTI) in use_rtti_for_ref
+PASS: gdb.mi/mi-var-rtti.exp: -interpreter-exec console "set print object on" in use_rtti_for_ref
+PASS: gdb.mi/mi-var-rtti.exp: create varobj for ref (with RTTI) in use_rtti_for_ref
+PASS: gdb.mi/mi-var-rtti.exp: list children of ref (with RTTI) in use_rtti_for_ref
+PASS: gdb.mi/mi-var-rtti.exp: list children of ref.Base (with RTTI) in use_rtti_for_ref
+PASS: gdb.mi/mi-var-rtti.exp: list children of ref.Base.public (with RTTI) in use_rtti_for_ref
+PASS: gdb.mi/mi-var-rtti.exp: list children of ref.public (with RTTI) in use_rtti_for_ref
+PASS: gdb.mi/mi-var-rtti.exp: check ref->A (with RTTI) in use_rtti_for_ref
+PASS: gdb.mi/mi-var-rtti.exp: check ref->B (with RTTI) in use_rtti_for_ref
+PASS: gdb.mi/mi-var-rtti.exp: check ref->C (with RTTI) in use_rtti_for_ref
+PASS: gdb.mi/mi-var-rtti.exp: delete varobj for ref (with RTTI) in use_rtti_for_ref
+PASS: gdb.mi/mi-var-rtti.exp: create varobj for constRef (with RTTI) in use_rtti_for_ref
+PASS: gdb.mi/mi-var-rtti.exp: list children of constRef (with RTTI) in use_rtti_for_ref
+PASS: gdb.mi/mi-var-rtti.exp: list children of constRef.Base (with RTTI) in use_rtti_for_ref
+PASS: gdb.mi/mi-var-rtti.exp: list children of constRef.Base.public (with RTTI) in use_rtti_for_ref
+PASS: gdb.mi/mi-var-rtti.exp: list children of constRef.public (with RTTI) in use_rtti_for_ref
+PASS: gdb.mi/mi-var-rtti.exp: check constRef->A (with RTTI) in use_rtti_for_ref
+PASS: gdb.mi/mi-var-rtti.exp: check constRef->B (with RTTI) in use_rtti_for_ref
+PASS: gdb.mi/mi-var-rtti.exp: check constRef->C (with RTTI) in use_rtti_for_ref
+PASS: gdb.mi/mi-var-rtti.exp: delete varobj for constRef (with RTTI) in use_rtti_for_ref
+PASS: gdb.mi/mi-var-rtti.exp: run to mi-var-rtti.cc:94 (set breakpoint)
+PASS: gdb.mi/mi-var-rtti.exp: -interpreter-exec console "set print object off" in use_rtti_for_ptr_child
+PASS: gdb.mi/mi-var-rtti.exp: create varobj for s (without RTTI) in use_rtti_for_ptr_child
+PASS: gdb.mi/mi-var-rtti.exp: list children of s (without RTTI) in use_rtti_for_ptr_child
+PASS: gdb.mi/mi-var-rtti.exp: list children of s.public (without RTTI) in use_rtti_for_ptr_child
+PASS: gdb.mi/mi-var-rtti.exp: list children of s.ptr (without RTTI) in use_rtti_for_ptr_child
+PASS: gdb.mi/mi-var-rtti.exp: list children of s.ptr.public (without RTTI) in use_rtti_for_ptr_child
+PASS: gdb.mi/mi-var-rtti.exp: check s.ptr->A (without RTTI) in use_rtti_for_ptr_child
+PASS: gdb.mi/mi-var-rtti.exp: list children of s.constPtr (without RTTI) in use_rtti_for_ptr_child
+PASS: gdb.mi/mi-var-rtti.exp: list children of s.constPtr.public (without RTTI) in use_rtti_for_ptr_child
+PASS: gdb.mi/mi-var-rtti.exp: check s.constPtr->A (without RTTI) in use_rtti_for_ptr_child
+PASS: gdb.mi/mi-var-rtti.exp: list children of s.ptrConst (without RTTI) in use_rtti_for_ptr_child
+PASS: gdb.mi/mi-var-rtti.exp: list children of s.ptrConst.public (without RTTI) in use_rtti_for_ptr_child
+PASS: gdb.mi/mi-var-rtti.exp: check s.ptrConst->A (without RTTI) in use_rtti_for_ptr_child
+PASS: gdb.mi/mi-var-rtti.exp: list children of s.constPtrConst (without RTTI) in use_rtti_for_ptr_child
+PASS: gdb.mi/mi-var-rtti.exp: list children of s.constPtrConst.public (without RTTI) in use_rtti_for_ptr_child
+PASS: gdb.mi/mi-var-rtti.exp: check s.constPtrConst->A (without RTTI) in use_rtti_for_ptr_child
+PASS: gdb.mi/mi-var-rtti.exp: delete varobj for s (without RTTI) in use_rtti_for_ptr_child
+PASS: gdb.mi/mi-var-rtti.exp: -interpreter-exec console "set print object on" in use_rtti_for_ptr_child
+PASS: gdb.mi/mi-var-rtti.exp: create varobj for s (with RTTI) in use_rtti_for_ptr_child
+PASS: gdb.mi/mi-var-rtti.exp: list children of s (with RTTI) in use_rtti_for_ptr_child
+PASS: gdb.mi/mi-var-rtti.exp: list children of s.public (with RTTI) in use_rtti_for_ptr_child
+PASS: gdb.mi/mi-var-rtti.exp: list children of s.ptr (with RTTI) in use_rtti_for_ptr_child
+PASS: gdb.mi/mi-var-rtti.exp: list children of s.ptr.Base (with RTTI) in use_rtti_for_ptr_child
+PASS: gdb.mi/mi-var-rtti.exp: list children of s.ptr.Base.public (with RTTI) in use_rtti_for_ptr_child
+PASS: gdb.mi/mi-var-rtti.exp: list children of s.ptr.public (with RTTI) in use_rtti_for_ptr_child
+PASS: gdb.mi/mi-var-rtti.exp: check s.ptr->A (with RTTI) in use_rtti_for_ptr_child
+PASS: gdb.mi/mi-var-rtti.exp: check s.ptr->B (with RTTI) in use_rtti_for_ptr_child
+PASS: gdb.mi/mi-var-rtti.exp: check s.ptr->C (with RTTI) in use_rtti_for_ptr_child
+PASS: gdb.mi/mi-var-rtti.exp: list children of s.constPtr (with RTTI) in use_rtti_for_ptr_child
+PASS: gdb.mi/mi-var-rtti.exp: list children of s.constPtr.Base (with RTTI) in use_rtti_for_ptr_child
+PASS: gdb.mi/mi-var-rtti.exp: list children of s.constPtr.Base.public (with RTTI) in use_rtti_for_ptr_child
+PASS: gdb.mi/mi-var-rtti.exp: list children of s.constPtr.public (with RTTI) in use_rtti_for_ptr_child
+PASS: gdb.mi/mi-var-rtti.exp: check s.constPtr->A (with RTTI) in use_rtti_for_ptr_child
+PASS: gdb.mi/mi-var-rtti.exp: check s.constPtr->B (with RTTI) in use_rtti_for_ptr_child
+PASS: gdb.mi/mi-var-rtti.exp: check s.constPtr->C (with RTTI) in use_rtti_for_ptr_child
+PASS: gdb.mi/mi-var-rtti.exp: list children of s.ptrConst (with RTTI) in use_rtti_for_ptr_child
+PASS: gdb.mi/mi-var-rtti.exp: list children of s.ptrConst.Base (with RTTI) in use_rtti_for_ptr_child
+PASS: gdb.mi/mi-var-rtti.exp: list children of s.ptrConst.Base.public (with RTTI) in use_rtti_for_ptr_child
+PASS: gdb.mi/mi-var-rtti.exp: list children of s.ptrConst.public (with RTTI) in use_rtti_for_ptr_child
+PASS: gdb.mi/mi-var-rtti.exp: check s.ptrConst->A (with RTTI) in use_rtti_for_ptr_child
+PASS: gdb.mi/mi-var-rtti.exp: check s.ptrConst->B (with RTTI) in use_rtti_for_ptr_child
+PASS: gdb.mi/mi-var-rtti.exp: check s.ptrConst->C (with RTTI) in use_rtti_for_ptr_child
+PASS: gdb.mi/mi-var-rtti.exp: list children of s.constPtrConst (with RTTI) in use_rtti_for_ptr_child
+PASS: gdb.mi/mi-var-rtti.exp: list children of s.constPtrConst.Base (with RTTI) in use_rtti_for_ptr_child
+PASS: gdb.mi/mi-var-rtti.exp: list children of s.constPtrConst.Base.public (with RTTI) in use_rtti_for_ptr_child
+PASS: gdb.mi/mi-var-rtti.exp: list children of s.constPtrConst.public (with RTTI) in use_rtti_for_ptr_child
+PASS: gdb.mi/mi-var-rtti.exp: check s.constPtrConst->A (with RTTI) in use_rtti_for_ptr_child
+PASS: gdb.mi/mi-var-rtti.exp: check s.constPtrConst->B (with RTTI) in use_rtti_for_ptr_child
+PASS: gdb.mi/mi-var-rtti.exp: check s.constPtrConst->C (with RTTI) in use_rtti_for_ptr_child
+PASS: gdb.mi/mi-var-rtti.exp: delete varobj for s (with RTTI) in use_rtti_for_ptr_child
+PASS: gdb.mi/mi-var-rtti.exp: run to mi-var-rtti.cc:149 (set breakpoint)
+PASS: gdb.mi/mi-var-rtti.exp: -interpreter-exec console "set print object off" in use_rtti_for_ref_child
+PASS: gdb.mi/mi-var-rtti.exp: create varobj for s (without RTTI) in use_rtti_for_ref_child
+PASS: gdb.mi/mi-var-rtti.exp: list children of s (without RTTI) in use_rtti_for_ref_child
+PASS: gdb.mi/mi-var-rtti.exp: list children of s.public (without RTTI) in use_rtti_for_ref_child
+PASS: gdb.mi/mi-var-rtti.exp: list children of s.ref (without RTTI) in use_rtti_for_ref_child
+PASS: gdb.mi/mi-var-rtti.exp: list children of s.ref.public (without RTTI) in use_rtti_for_ref_child
+PASS: gdb.mi/mi-var-rtti.exp: check s.ref->A (without RTTI) in use_rtti_for_ref_child
+PASS: gdb.mi/mi-var-rtti.exp: list children of s.constRef (without RTTI) in use_rtti_for_ref_child
+PASS: gdb.mi/mi-var-rtti.exp: list children of s.constRef.public (without RTTI) in use_rtti_for_ref_child
+PASS: gdb.mi/mi-var-rtti.exp: check s.constRef->A (without RTTI) in use_rtti_for_ref_child
+PASS: gdb.mi/mi-var-rtti.exp: delete varobj for s (without RTTI) in use_rtti_for_ref_child
+PASS: gdb.mi/mi-var-rtti.exp: -interpreter-exec console "set print object on" in use_rtti_for_ref_child
+PASS: gdb.mi/mi-var-rtti.exp: create varobj for s (with RTTI) in use_rtti_for_ref_child
+PASS: gdb.mi/mi-var-rtti.exp: list children of s (with RTTI) in use_rtti_for_ref_child
+PASS: gdb.mi/mi-var-rtti.exp: list children of s.public (with RTTI) in use_rtti_for_ref_child
+PASS: gdb.mi/mi-var-rtti.exp: list children of s.ref (with RTTI) in use_rtti_for_ref_child
+PASS: gdb.mi/mi-var-rtti.exp: list children of s.ref.Base (with RTTI) in use_rtti_for_ref_child
+PASS: gdb.mi/mi-var-rtti.exp: list children of s.ref.Base.public (with RTTI) in use_rtti_for_ref_child
+PASS: gdb.mi/mi-var-rtti.exp: list children of s.ref.public (with RTTI) in use_rtti_for_ref_child
+PASS: gdb.mi/mi-var-rtti.exp: check s.ref->A (with RTTI) in use_rtti_for_ref_child
+PASS: gdb.mi/mi-var-rtti.exp: check s.ref->B (with RTTI) in use_rtti_for_ref_child
+PASS: gdb.mi/mi-var-rtti.exp: check s.ref->C (with RTTI) in use_rtti_for_ref_child
+PASS: gdb.mi/mi-var-rtti.exp: list children of s.constRef (with RTTI) in use_rtti_for_ref_child
+PASS: gdb.mi/mi-var-rtti.exp: list children of s.constRef.Base (with RTTI) in use_rtti_for_ref_child
+PASS: gdb.mi/mi-var-rtti.exp: list children of s.constRef.Base.public (with RTTI) in use_rtti_for_ref_child
+PASS: gdb.mi/mi-var-rtti.exp: list children of s.constRef.public (with RTTI) in use_rtti_for_ref_child
+PASS: gdb.mi/mi-var-rtti.exp: check s.constRef->A (with RTTI) in use_rtti_for_ref_child
+PASS: gdb.mi/mi-var-rtti.exp: check s.constRef->B (with RTTI) in use_rtti_for_ref_child
+PASS: gdb.mi/mi-var-rtti.exp: check s.constRef->C (with RTTI) in use_rtti_for_ref_child
+PASS: gdb.mi/mi-var-rtti.exp: delete varobj for s (with RTTI) in use_rtti_for_ref_child
+PASS: gdb.mi/mi-var-rtti.exp: run to mi-var-rtti.cc:202 (set breakpoint)
+PASS: gdb.mi/mi-var-rtti.exp: -interpreter-exec console "set print object off" in use_rtti_with_multiple_inheritence
+PASS: gdb.mi/mi-var-rtti.exp: create varobj for ptr (without RTTI) in use_rtti_with_multiple_inheritence
+PASS: gdb.mi/mi-var-rtti.exp: list children of ptr (without RTTI) in use_rtti_with_multiple_inheritence
+PASS: gdb.mi/mi-var-rtti.exp: list children of ptr.public (without RTTI) in use_rtti_with_multiple_inheritence
+PASS: gdb.mi/mi-var-rtti.exp: check ptr->A (without RTTI) in use_rtti_with_multiple_inheritence
+PASS: gdb.mi/mi-var-rtti.exp: delete varobj for ptr (without RTTI) in use_rtti_with_multiple_inheritence
+PASS: gdb.mi/mi-var-rtti.exp: create varobj for ref (without RTTI) in use_rtti_with_multiple_inheritence
+PASS: gdb.mi/mi-var-rtti.exp: list children of ref (without RTTI) in use_rtti_with_multiple_inheritence
+PASS: gdb.mi/mi-var-rtti.exp: list children of ref.public (without RTTI) in use_rtti_with_multiple_inheritence
+PASS: gdb.mi/mi-var-rtti.exp: check ref->A (without RTTI) in use_rtti_with_multiple_inheritence
+PASS: gdb.mi/mi-var-rtti.exp: delete varobj for ref (without RTTI) in use_rtti_with_multiple_inheritence
+PASS: gdb.mi/mi-var-rtti.exp: -interpreter-exec console "set print object on" in use_rtti_with_multiple_inheritence
+PASS: gdb.mi/mi-var-rtti.exp: create varobj for ptr (with RTTI) in use_rtti_with_multiple_inheritence
+PASS: gdb.mi/mi-var-rtti.exp: list children of ptr (with RTTI) in use_rtti_with_multiple_inheritence
+PASS: gdb.mi/mi-var-rtti.exp: list children of ptr.First (with RTTI) in use_rtti_with_multiple_inheritence
+PASS: gdb.mi/mi-var-rtti.exp: list children of ptr.Base.public (with RTTI) in use_rtti_with_multiple_inheritence
+PASS: gdb.mi/mi-var-rtti.exp: list children of ptr.Base (with RTTI) in use_rtti_with_multiple_inheritence
+PASS: gdb.mi/mi-var-rtti.exp: list children of ptr.Base.public (with RTTI) in use_rtti_with_multiple_inheritence
+PASS: gdb.mi/mi-var-rtti.exp: list children of ptr.public (with RTTI) in use_rtti_with_multiple_inheritence
+PASS: gdb.mi/mi-var-rtti.exp: delete varobj for ptr (with RTTI) in use_rtti_with_multiple_inheritence
+PASS: gdb.mi/mi-var-rtti.exp: run to mi-var-rtti.cc:245 (set breakpoint)
+PASS: gdb.mi/mi-var-rtti.exp: -interpreter-exec console "set print object on" in type_update_when_use_rtti
+PASS: gdb.mi/mi-var-rtti.exp: create varobj for ptr in type_update_when_use_rtti
+PASS: gdb.mi/mi-var-rtti.exp: list children of ptr (without RTTI) in type_update_when_use_rtti
+PASS: gdb.mi/mi-var-rtti.exp: list children of ptr.public (without RTTI) in type_update_when_use_rtti
+PASS: gdb.mi/mi-var-rtti.exp: create varobj for S in type_update_when_use_rtti
+PASS: gdb.mi/mi-var-rtti.exp: list children of s in type_update_when_use_rtti
+PASS: gdb.mi/mi-var-rtti.exp: list children of s.public in type_update_when_use_rtti
+PASS: gdb.mi/mi-var-rtti.exp: list children of s.ptr (without RTTI) in type_update_when_use_rtti
+PASS: gdb.mi/mi-var-rtti.exp: list children of s.ptr.public (without RTTI) in type_update_when_use_rtti
+PASS: gdb.mi/mi-var-rtti.exp: run to mi-var-rtti.cc:269 (set breakpoint)
+PASS: gdb.mi/mi-var-rtti.exp: update ptr to derived in type_update_when_use_rtti
+PASS: gdb.mi/mi-var-rtti.exp: list children of ptr (with RTTI) in type_update_when_use_rtti
+PASS: gdb.mi/mi-var-rtti.exp: list children of ptr.Base (with RTTI) in type_update_when_use_rtti
+PASS: gdb.mi/mi-var-rtti.exp: list children of ptr.Base.public (with RTTI) in type_update_when_use_rtti
+PASS: gdb.mi/mi-var-rtti.exp: list children of ptr.public (with RTTI) in type_update_when_use_rtti
+PASS: gdb.mi/mi-var-rtti.exp: check ptr->A (with RTTI) in type_update_when_use_rtti
+PASS: gdb.mi/mi-var-rtti.exp: check ptr->B (with RTTI) in type_update_when_use_rtti
+PASS: gdb.mi/mi-var-rtti.exp: check ptr->C (with RTTI) in type_update_when_use_rtti
+PASS: gdb.mi/mi-var-rtti.exp: update s.ptr to derived in type_update_when_use_rtti
+PASS: gdb.mi/mi-var-rtti.exp: list children of s.ptr (with RTTI) in type_update_when_use_rtti
+PASS: gdb.mi/mi-var-rtti.exp: list children of s.ptr.Base (with RTTI) in type_update_when_use_rtti
+PASS: gdb.mi/mi-var-rtti.exp: list children of s.ptr.Base.public (with RTTI) in type_update_when_use_rtti
+PASS: gdb.mi/mi-var-rtti.exp: list children of s.ptr.public (with RTTI) in type_update_when_use_rtti
+PASS: gdb.mi/mi-var-rtti.exp: check s.ptr->A (with RTTI) in type_update_when_use_rtti
+PASS: gdb.mi/mi-var-rtti.exp: check s.ptr->B (with RTTI) in type_update_when_use_rtti
+PASS: gdb.mi/mi-var-rtti.exp: check s.ptr->C (with RTTI) in type_update_when_use_rtti
+PASS: gdb.mi/mi-var-rtti.exp: run to mi-var-rtti.cc:281 (set breakpoint)
+PASS: gdb.mi/mi-var-rtti.exp: update ptr back to base type in type_update_when_use_rtti
+PASS: gdb.mi/mi-var-rtti.exp: delete varobj for ptr in type_update_when_use_rtti
+PASS: gdb.mi/mi-var-rtti.exp: update s.ptr back to base type in type_update_when_use_rtti
+PASS: gdb.mi/mi-var-rtti.exp: delete varobj for s in type_update_when_use_rtti
+PASS: gdb.mi/mi-var-rtti.exp: run to mi-var-rtti.cc:299 (set breakpoint)
+PASS: gdb.mi/mi-var-rtti.exp: -interpreter-exec console "set print object off" in skip_type_update_when_not_use_rtti
+PASS: gdb.mi/mi-var-rtti.exp: create varobj for ptr in skip_type_update_when_not_use_rtti
+PASS: gdb.mi/mi-var-rtti.exp: list children of ptr (without RTTI) in skip_type_update_when_not_use_rtti
+PASS: gdb.mi/mi-var-rtti.exp: list children of ptr.public (without RTTI) in skip_type_update_when_not_use_rtti
+PASS: gdb.mi/mi-var-rtti.exp: create varobj for S in skip_type_update_when_not_use_rtti
+PASS: gdb.mi/mi-var-rtti.exp: list children of s in skip_type_update_when_not_use_rtti
+PASS: gdb.mi/mi-var-rtti.exp: list children of s.public in skip_type_update_when_not_use_rtti
+PASS: gdb.mi/mi-var-rtti.exp: list children of s.ptr (without RTTI) in skip_type_update_when_not_use_rtti
+PASS: gdb.mi/mi-var-rtti.exp: list children of s.ptr.public (without RTTI) in skip_type_update_when_not_use_rtti
+PASS: gdb.mi/mi-var-rtti.exp: run to mi-var-rtti.cc:323 (set breakpoint)
+PASS: gdb.mi/mi-var-rtti.exp: update ptr to derived type in skip_type_update_when_not_use_rtti
+PASS: gdb.mi/mi-var-rtti.exp: list children of ptr (without RTTI) in skip_type_update_when_not_use_rtti
+PASS: gdb.mi/mi-var-rtti.exp: list children of ptr.public (without RTTI) in skip_type_update_when_not_use_rtti
+PASS: gdb.mi/mi-var-rtti.exp: check ptr->A (without RTTI) in skip_type_update_when_not_use_rtti
+PASS: gdb.mi/mi-var-rtti.exp: update s to derived type in skip_type_update_when_not_use_rtti
+PASS: gdb.mi/mi-var-rtti.exp: list children of s.ptr (without RTTI) in skip_type_update_when_not_use_rtti
+PASS: gdb.mi/mi-var-rtti.exp: list children of s.ptr.public (without RTTI) in skip_type_update_when_not_use_rtti
+PASS: gdb.mi/mi-var-rtti.exp: check s.ptr->A (without RTTI) in skip_type_update_when_not_use_rtti
+PASS: gdb.mi/mi-var-rtti.exp: run to mi-var-rtti.cc:335 (set breakpoint)
+PASS: gdb.mi/mi-var-rtti.exp: update ptr back to base type in skip_type_update_when_not_use_rtti
+PASS: gdb.mi/mi-var-rtti.exp: delete varobj for ptr in skip_type_update_when_not_use_rtti
+PASS: gdb.mi/mi-var-rtti.exp: update s back to base type in skip_type_update_when_not_use_rtti
+PASS: gdb.mi/mi-var-rtti.exp: delete varobj for s in skip_type_update_when_not_use_rtti
+Running ./gdb.mi/mi-watch.exp ...
+PASS: gdb.mi/mi-watch.exp: hw watchpoints toggle (1)
+PASS: gdb.mi/mi-watch.exp: sw: breakpoint at callee4
+PASS: gdb.mi/mi-watch.exp: sw: mi runto callee4
+PASS: gdb.mi/mi-watch.exp: sw: break-watch operation
+PASS: gdb.mi/mi-watch.exp: sw: list of watchpoints
+PASS: gdb.mi/mi-watch.exp: sw: watchpoint trigger
+XPASS: gdb.mi/mi-watch.exp: sw: watchpoint trigger
+Running ./gdb.mi/mi-watch-nonstop.exp ...
+Running ./gdb.mi/pr11022.exp ...
+Running ./gdb.modula2/unbounded-array.exp ...
+PASS: gdb.modula2/unbounded-array.exp: switch to modula-2
+PASS: gdb.modula2/unbounded-array.exp: print the last legal element of array a
+PASS: gdb.modula2/unbounded-array.exp: print unbounded array contents
+PASS: gdb.modula2/unbounded-array.exp: print the 1st element of array a
+PASS: gdb.modula2/unbounded-array.exp: print the 2nd element of array a
+PASS: gdb.modula2/unbounded-array.exp: print the 3rd element of array a
+PASS: gdb.modula2/unbounded-array.exp: print the 4th element of array a
+PASS: gdb.modula2/unbounded-array.exp: print the 5th element of array a
+Running ./gdb.multi/base.exp ...
+PASS: gdb.multi/base.exp: add empty inferior 2
+PASS: gdb.multi/base.exp: switch to inferior 2
+PASS: gdb.multi/base.exp: load hangout file in inferior 2
+PASS: gdb.multi/base.exp: add inferior 3 with -exec goodbye
+PASS: gdb.multi/base.exp: info inferiors
+PASS: gdb.multi/base.exp: info inferior 2 3
+PASS: gdb.multi/base.exp: info inferior 1-2
+PASS: gdb.multi/base.exp: switch to inferior 1
+PASS: gdb.multi/base.exp: 'info functions commonfun' in inferior 1
+PASS: gdb.multi/base.exp: switch to inferior 3
+PASS: gdb.multi/base.exp: 'info functions commonfun' in inferior 3
+PASS: gdb.multi/base.exp: switch back to inferior 1
+PASS: gdb.multi/base.exp: set listsize 1
+PASS: gdb.multi/base.exp: list commonfun in hello
+PASS: gdb.multi/base.exp: print hglob
+PASS: gdb.multi/base.exp: print glob (hello)
+PASS: gdb.multi/base.exp: switch to inferior 3 to print globals
+PASS: gdb.multi/base.exp: print gglob
+PASS: gdb.multi/base.exp: print glob (goodbye)
+PASS: gdb.multi/base.exp: list commonfun in goodbye
+PASS: gdb.multi/base.exp: switch to inferior 1 to run it
+PASS: gdb.multi/base.exp: break hello
+PASS: gdb.multi/base.exp: continue
+PASS: gdb.multi/base.exp: remove-inferiors 2-3
+PASS: gdb.multi/base.exp: check remove-inferiors
+Running ./gdb.multi/bkpt-multi-exec.exp ...
+Running ./gdb.multi/multi-arch-exec.exp ...
+Running ./gdb.multi/multi-arch.exp ...
+Running ./gdb.multi/watchpoint-multi.exp ...
+UNTESTED: gdb.multi/watchpoint-multi.exp: watchpoint-multi.exp
+Running ./gdb.objc/basicclass.exp ...
+UNSUPPORTED: gdb.objc/basicclass.exp: Couldn't compile ./gdb.objc/basicclass.m: unrecognized error
+Running ./gdb.objc/nondebug.exp ...
+UNSUPPORTED: gdb.objc/nondebug.exp: Couldn't compile ./gdb.objc/nondebug.m: unrecognized error
+Running ./gdb.objc/objcdecode.exp ...
+UNSUPPORTED: gdb.objc/objcdecode.exp: Couldn't compile ./gdb.objc/objcdecode.m: unrecognized error
+Running ./gdb.objc/print.exp ...
+PASS: gdb.objc/print.exp: set language objective-c
+PASS: gdb.objc/print.exp: set language to "objective-c"
+PASS: gdb.objc/print.exp: check fp + text
+PASS: gdb.objc/print.exp: p 1.
+PASS: gdb.objc/print.exp: p 1.5
+PASS: gdb.objc/print.exp: p 1.f
+PASS: gdb.objc/print.exp: p 1.5f
+PASS: gdb.objc/print.exp: p 1.l
+PASS: gdb.objc/print.exp: p 1.5l
+PASS: gdb.objc/print.exp: p 0x1.1
+PASS: gdb.objc/print.exp: reject p 1.1x
+PASS: gdb.objc/print.exp: reject p 1.1ff
+PASS: gdb.objc/print.exp: reject p 1.1ll
+Running ./gdb.opencl/callfuncs.exp ...
+Running ./gdb.opencl/convs_casts.exp ...
+Running ./gdb.opencl/datatypes.exp ...
+Running ./gdb.opencl/operators.exp ...
+Running ./gdb.opencl/vec_comps.exp ...
+Running ./gdb.opt/clobbered-registers-O2.exp ...
+PASS: gdb.opt/clobbered-registers-O2.exp: Backtracing
+PASS: gdb.opt/clobbered-registers-O2.exp: print operand0
+PASS: gdb.opt/clobbered-registers-O2.exp: print operand1
+Running ./gdb.opt/inline-break.exp ...
+PASS: gdb.opt/inline-break.exp: break func1
+PASS: gdb.opt/inline-break.exp: break func2
+PASS: gdb.opt/inline-break.exp: break func3b
+PASS: gdb.opt/inline-break.exp: break func4b
+PASS: gdb.opt/inline-break.exp: break func5b
+PASS: gdb.opt/inline-break.exp: break func6b
+PASS: gdb.opt/inline-break.exp: break func7b
+PASS: gdb.opt/inline-break.exp: break func8b
+PASS: gdb.opt/inline-break.exp: print func1
+PASS: gdb.opt/inline-break.exp: print func2
+Running ./gdb.opt/inline-bt.exp ...
+PASS: gdb.opt/inline-bt.exp: continue to bar (1)
+PASS: gdb.opt/inline-bt.exp: backtrace from bar (1)
+PASS: gdb.opt/inline-bt.exp: bar not inlined
+PASS: gdb.opt/inline-bt.exp: continue to bar (2)
+PASS: gdb.opt/inline-bt.exp: backtrace from bar (2)
+PASS: gdb.opt/inline-bt.exp: up from bar (2)
+PASS: gdb.opt/inline-bt.exp: func1 inlined (2)
+PASS: gdb.opt/inline-bt.exp: continue to bar (3)
+PASS: gdb.opt/inline-bt.exp: backtrace from bar (3)
+PASS: gdb.opt/inline-bt.exp: up from bar (3)
+PASS: gdb.opt/inline-bt.exp: func1 inlined (3)
+PASS: gdb.opt/inline-bt.exp: up from func1 (3)
+PASS: gdb.opt/inline-bt.exp: func2 inlined (3)
+Running ./gdb.opt/inline-cmds.exp ...
+PASS: gdb.opt/inline-cmds.exp: set listsize 1
+PASS: gdb.opt/inline-cmds.exp: continue to bar (1)
+PASS: gdb.opt/inline-cmds.exp: backtrace from bar (1)
+PASS: gdb.opt/inline-cmds.exp: up from bar (1)
+PASS: gdb.opt/inline-cmds.exp: func1 inlined (1)
+PASS: gdb.opt/inline-cmds.exp: continue to bar (2)
+PASS: gdb.opt/inline-cmds.exp: backtrace from bar (2)
+PASS: gdb.opt/inline-cmds.exp: up from bar (2)
+PASS: gdb.opt/inline-cmds.exp: func1 inlined (2)
+PASS: gdb.opt/inline-cmds.exp: up from func1 (2)
+PASS: gdb.opt/inline-cmds.exp: func2 inlined (2)
+PASS: gdb.opt/inline-cmds.exp: continue to marker
+PASS: gdb.opt/inline-cmds.exp: backtrace from marker
+PASS: gdb.opt/inline-cmds.exp: marker not inlined
+PASS: gdb.opt/inline-cmds.exp: next over inlined functions
+PASS: gdb.opt/inline-cmds.exp: next past inlined func1
+PASS: gdb.opt/inline-cmds.exp: print x before func1
+PASS: gdb.opt/inline-cmds.exp: backtrace does not include func1
+PASS: gdb.opt/inline-cmds.exp: stepped over call to func1
+PASS: gdb.opt/inline-cmds.exp: step into func1
+PASS: gdb.opt/inline-cmds.exp: finish from func1
+PASS: gdb.opt/inline-cmds.exp: continue to breakpoint: consecutive func1
+PASS: gdb.opt/inline-cmds.exp: next to first func1
+KFAIL: gdb.opt/inline-cmds.exp: next to second func1 (PRMS: gdb/NNNN)
+PASS: gdb.opt/inline-cmds.exp: continue to breakpoint: func1 then func3
+PASS: gdb.opt/inline-cmds.exp: next to func1 before func3
+PASS: gdb.opt/inline-cmds.exp: next to func3
+PASS: gdb.opt/inline-cmds.exp: continue to breakpoint: finish into func1
+PASS: gdb.opt/inline-cmds.exp: next to finish marker
+PASS: gdb.opt/inline-cmds.exp: step into finish marker
+PASS: gdb.opt/inline-cmds.exp: finish from marker to func1
+PASS: gdb.opt/inline-cmds.exp: step into func1 for finish
+PASS: gdb.opt/inline-cmds.exp: finish from func1 to func3
+PASS: gdb.opt/inline-cmds.exp: continue to breakpoint: before the outer_inline call
+PASS: gdb.opt/inline-cmds.exp: reach 1 the outer_inline call
+PASS: gdb.opt/inline-cmds.exp: reach outer_inline2
+PASS: gdb.opt/inline-cmds.exp: backtrace at main of outer_inline
+PASS: gdb.opt/inline-cmds.exp: enter outer_inline2
+PASS: gdb.opt/inline-cmds.exp: backtrace at outer_inline2
+PASS: gdb.opt/inline-cmds.exp: enter outer_inline1 from outer_inline2
+PASS: gdb.opt/inline-cmds.exp: backtrace at outer_inline1
+PASS: gdb.opt/inline-cmds.exp: enter noinline from outer_inline1
+PASS: gdb.opt/inline-cmds.exp: backtrace at noinline from outer_inline1
+PASS: gdb.opt/inline-cmds.exp: enter inlined_fn from noinline
+PASS: gdb.opt/inline-cmds.exp: backtrace at inlined_fn from noinline
+PASS: gdb.opt/inline-cmds.exp: inlined_fn from noinline inlined
+PASS: gdb.opt/inline-cmds.exp: up to noinline
+PASS: gdb.opt/inline-cmds.exp: noinline from outer_inline1 not inlined
+PASS: gdb.opt/inline-cmds.exp: up to outer_inline1
+PASS: gdb.opt/inline-cmds.exp: outer_inline1 inlined
+PASS: gdb.opt/inline-cmds.exp: up to outer_inline2
+PASS: gdb.opt/inline-cmds.exp: outer_inline2 inlined
+PASS: gdb.opt/inline-cmds.exp: up from outer_inline2
+PASS: gdb.opt/inline-cmds.exp: main not inlined
+Running ./gdb.opt/inline-locals.exp ...
+PASS: gdb.opt/inline-locals.exp: continue to bar (1)
+PASS: gdb.opt/inline-locals.exp: continue to bar (2)
+PASS: gdb.opt/inline-locals.exp: backtrace from bar (2)
+PASS: gdb.opt/inline-locals.exp: up from bar (2)
+PASS: gdb.opt/inline-locals.exp: func1 inlined (2)
+PASS: gdb.opt/inline-locals.exp: info locals above bar (2)
+PASS: gdb.opt/inline-locals.exp: info args above bar (2)
+PASS: gdb.opt/inline-locals.exp: print local (2)
+PASS: gdb.opt/inline-locals.exp: print out of scope local
+PASS: gdb.opt/inline-locals.exp: continue to bar (3)
+PASS: gdb.opt/inline-locals.exp: backtrace from bar (3)
+PASS: gdb.opt/inline-locals.exp: up from bar (3)
+PASS: gdb.opt/inline-locals.exp: func1 inlined (3)
+PASS: gdb.opt/inline-locals.exp: info locals above bar (3)
+PASS: gdb.opt/inline-locals.exp: info args above bar (3)
+PASS: gdb.opt/inline-locals.exp: print local (3)
+Running ./gdb.pascal/floats.exp ...
+UNSUPPORTED: gdb.pascal/floats.exp: No pascal compiler found
+UNTESTED: gdb.pascal/floats.exp: floats.exp
+Running ./gdb.pascal/gdb11492.exp ...
+UNSUPPORTED: gdb.pascal/gdb11492.exp: No pascal compiler found
+UNTESTED: gdb.pascal/gdb11492.exp: gdb11492.exp
+Running ./gdb.pascal/hello.exp ...
+UNSUPPORTED: gdb.pascal/hello.exp: No pascal compiler found
+Running ./gdb.pascal/integers.exp ...
+UNSUPPORTED: gdb.pascal/integers.exp: No pascal compiler found
+Running ./gdb.pascal/print.exp ...
+PASS: gdb.pascal/print.exp: set language pascal
+PASS: gdb.pascal/print.exp: set language to "pascal"
+PASS: gdb.pascal/print.exp: check fp + text
+PASS: gdb.pascal/print.exp: p 1.
+PASS: gdb.pascal/print.exp: p 1.5
+PASS: gdb.pascal/print.exp: p 1.f
+PASS: gdb.pascal/print.exp: p 1.5f
+PASS: gdb.pascal/print.exp: p 1.l
+PASS: gdb.pascal/print.exp: p 1.5l
+PASS: gdb.pascal/print.exp: p 0x1.1
+PASS: gdb.pascal/print.exp: reject p 1.1x
+PASS: gdb.pascal/print.exp: reject p 1.1ff
+PASS: gdb.pascal/print.exp: reject p 1.1ll
+Running ./gdb.pascal/types.exp ...
+PASS: gdb.pascal/types.exp: set language pascal
+PASS: gdb.pascal/types.exp: set language to "pascal"
+PASS: gdb.pascal/types.exp: pt 123
+PASS: gdb.pascal/types.exp: pt TRUE
+PASS: gdb.pascal/types.exp: pt FALSE
+PASS: gdb.pascal/types.exp: pt 'a'
+KFAIL: gdb.pascal/types.exp: pt 'a simple string' (PRMS: gdb/2326)
+PASS: gdb.pascal/types.exp: pt .44
+PASS: gdb.pascal/types.exp: pt 44.0
+PASS: gdb.pascal/types.exp: pt 10e20
+PASS: gdb.pascal/types.exp: pt 10E20
+Running ./gdb.python/lib-types.exp ...
+PASS: gdb.python/lib-types.exp: python import gdb.types
+PASS: gdb.python/lib-types.exp: python const_class1_obj = gdb.parse_and_eval ('const_class1_obj')
+PASS: gdb.python/lib-types.exp: python basic_type_const_class1_obj = gdb.types.get_basic_type (const_class1_obj.type)
+PASS: gdb.python/lib-types.exp: python print (str (const_class1_obj.type))
+PASS: gdb.python/lib-types.exp: const stripping
+PASS: gdb.python/lib-types.exp: python volatile_class1_obj = gdb.parse_and_eval ('volatile_class1_obj')
+PASS: gdb.python/lib-types.exp: python basic_type_volatile_class1_obj = gdb.types.get_basic_type (volatile_class1_obj.type)
+PASS: gdb.python/lib-types.exp: python print (str (volatile_class1_obj.type))
+PASS: gdb.python/lib-types.exp: volatile stripping
+PASS: gdb.python/lib-types.exp: python const_volatile_class1_obj = gdb.parse_and_eval ('const_volatile_class1_obj')
+PASS: gdb.python/lib-types.exp: python basic_type_const_volatile_class1_obj = gdb.types.get_basic_type (const_volatile_class1_obj.type)
+PASS: gdb.python/lib-types.exp: python print (str (const_volatile_class1_obj.type))
+PASS: gdb.python/lib-types.exp: volatile+const stripping
+PASS: gdb.python/lib-types.exp: python typedef_class1_obj = gdb.parse_and_eval ('typedef_class1_obj')
+PASS: gdb.python/lib-types.exp: python basic_type_typedef_class1_obj = gdb.types.get_basic_type (typedef_class1_obj.type)
+PASS: gdb.python/lib-types.exp: python print (str (typedef_class1_obj.type))
+PASS: gdb.python/lib-types.exp: typedef stripping
+PASS: gdb.python/lib-types.exp: python class1_ref_obj = gdb.parse_and_eval ('class1_ref_obj')
+PASS: gdb.python/lib-types.exp: python basic_type_class1_ref_obj = gdb.types.get_basic_type (class1_ref_obj.type)
+PASS: gdb.python/lib-types.exp: python print (str (class1_ref_obj.type))
+PASS: gdb.python/lib-types.exp: reference stripping
+PASS: gdb.python/lib-types.exp: python typedef_const_typedef_class1_obj = gdb.parse_and_eval ('typedef_const_typedef_class1_obj')
+PASS: gdb.python/lib-types.exp: python basic_type_typedef_const_typedef_class1_obj = gdb.types.get_basic_type (typedef_const_typedef_class1_obj.type)
+PASS: gdb.python/lib-types.exp: python print (str (typedef_class1_obj.type))
+PASS: gdb.python/lib-types.exp: nested typedef stripping
+PASS: gdb.python/lib-types.exp: python typedef_const_typedef_class1_ref_obj = gdb.parse_and_eval ('typedef_const_typedef_class1_ref_obj')
+PASS: gdb.python/lib-types.exp: python basic_type_typedef_const_typedef_class1_ref_obj = gdb.types.get_basic_type (typedef_const_typedef_class1_ref_obj.type)
+PASS: gdb.python/lib-types.exp: python print (str (typedef_const_typedef_class1_ref_obj.type))
+PASS: gdb.python/lib-types.exp: nested typedef/ref stripping
+PASS: gdb.python/lib-types.exp: python class1_obj = gdb.parse_and_eval ('class1_obj')
+PASS: gdb.python/lib-types.exp: python print (gdb.types.has_field (class1_obj.type, 'x'))
+PASS: gdb.python/lib-types.exp: python print (gdb.types.has_field (class1_obj.type, 'nope'))
+PASS: gdb.python/lib-types.exp: python subclass1_obj = gdb.parse_and_eval ('subclass1_obj')
+PASS: gdb.python/lib-types.exp: python print (gdb.types.has_field (subclass1_obj.type, 'x'))
+PASS: gdb.python/lib-types.exp: python enum1_obj = gdb.parse_and_eval ('enum1_obj')
+PASS: gdb.python/lib-types.exp: python enum1_dict = gdb.types.make_enum_dict (enum1_obj.type)
+PASS: gdb.python/lib-types.exp: python enum1_list = sorted (enum1_dict.items ())
+PASS: gdb.python/lib-types.exp: python print (enum1_list)
+PASS: gdb.python/lib-types.exp: python struct_a = gdb.lookup_type ('struct A')
+PASS: gdb.python/lib-types.exp: python print (struct_a.keys ())
+PASS: gdb.python/lib-types.exp: python print ([k for k,v in gdb.types.deep_items(struct_a)])
+Running ./gdb.python/py-arch.exp ...
+PASS: gdb.python/py-arch.exp: test number of instructions 1
+PASS: gdb.python/py-arch.exp: test number of instructions 2
+PASS: gdb.python/py-arch.exp: test number of instructions 3
+PASS: gdb.python/py-arch.exp: test number of instructions 4
+PASS: gdb.python/py-arch.exp: test key addr
+PASS: gdb.python/py-arch.exp: test key asm
+PASS: gdb.python/py-arch.exp: test key length
+PASS: gdb.python/py-arch.exp: test exception
+Running ./gdb.python/py-block.exp ...
+PASS: gdb.python/py-block.exp: continue to breakpoint: Block break here.
+PASS: gdb.python/py-block.exp: Check block not None
+PASS: gdb.python/py-block.exp: First anonymous block
+PASS: gdb.python/py-block.exp: Check start not None
+PASS: gdb.python/py-block.exp: Check end not None
+PASS: gdb.python/py-block.exp: Not a global block
+PASS: gdb.python/py-block.exp: Not a static block
+PASS: gdb.python/py-block.exp: Get block
+PASS: gdb.python/py-block.exp: Get block
+PASS: gdb.python/py-block.exp: Is the global block
+PASS: gdb.python/py-block.exp: Is the static block
+PASS: gdb.python/py-block.exp: Get superblock
+PASS: gdb.python/py-block.exp: Second anonymous block
+PASS: gdb.python/py-block.exp: Get superblock 2
+PASS: gdb.python/py-block.exp: Print superblock 2 function
+PASS: gdb.python/py-block.exp: up
+PASS: gdb.python/py-block.exp: Check Frame 2's block not None
+PASS: gdb.python/py-block.exp: main block
+PASS: gdb.python/py-block.exp: Check block validity
+PASS: gdb.python/py-block.exp: Check block validity
+PASS: gdb.python/py-block.exp: Check block validity
+PASS: gdb.python/py-block.exp: Check block validity
+Running ./gdb.python/py-breakpoint.exp ...
+PASS: gdb.python/py-breakpoint.exp: Check obj exists
+PASS: gdb.python/py-breakpoint.exp: Check breakpoint location
+PASS: gdb.python/py-breakpoint.exp: continue to breakpoint: Break at multiply.
+PASS: gdb.python/py-breakpoint.exp: Check for two breakpoints
+PASS: gdb.python/py-breakpoint.exp: Check obj exists
+PASS: gdb.python/py-breakpoint.exp: Check breakpoint location
+PASS: gdb.python/py-breakpoint.exp: Check obj exists
+PASS: gdb.python/py-breakpoint.exp: Check breakpoint location
+PASS: gdb.python/py-breakpoint.exp: Check breakpoint hit count
+PASS: gdb.python/py-breakpoint.exp: continue to breakpoint: Break at multiply.
+PASS: gdb.python/py-breakpoint.exp: Check breakpoint hit count
+PASS: gdb.python/py-breakpoint.exp: Check expected variable result after 6 iterations
+PASS: gdb.python/py-breakpoint.exp: continue to breakpoint: Break at add.
+PASS: gdb.python/py-breakpoint.exp: Check breakpoint enabled.
+PASS: gdb.python/py-breakpoint.exp: continue to breakpoint: Break at add.
+PASS: gdb.python/py-breakpoint.exp: continue to breakpoint: Break at multiply.
+PASS: gdb.python/py-breakpoint.exp: Check breakpoint thread
+PASS: gdb.python/py-breakpoint.exp: Check breakpoint type
+PASS: gdb.python/py-breakpoint.exp: Check breakpoint number
+PASS: gdb.python/py-breakpoint.exp: Check breakpoint number
+PASS: gdb.python/py-breakpoint.exp: Check breakpoint number
+PASS: gdb.python/py-breakpoint.exp: Number of breakpoints before delete
+PASS: gdb.python/py-breakpoint.exp: continue to breakpoint: Break at multiply.
+PASS: gdb.python/py-breakpoint.exp: Check breakpoint invalidated
+PASS: gdb.python/py-breakpoint.exp: Number of breakpoints after delete
+PASS: gdb.python/py-breakpoint.exp: continue to breakpoint: Break at end.
+PASS: gdb.python/py-breakpoint.exp: continue to breakpoint: Break at multiply.
+PASS: gdb.python/py-breakpoint.exp: Test conditional has been set
+PASS: gdb.python/py-breakpoint.exp: continue to breakpoint: Break at multiply.
+PASS: gdb.python/py-breakpoint.exp: Test conditional breakpoint stopped after five iterations
+PASS: gdb.python/py-breakpoint.exp: Test conditional read
+PASS: gdb.python/py-breakpoint.exp: continue to breakpoint: Break at multiply.
+PASS: gdb.python/py-breakpoint.exp: Test breakpoint stopped after six iterations
+PASS: gdb.python/py-breakpoint.exp: commands $bpnum
+PASS: gdb.python/py-breakpoint.exp: print "Command for breakpoint has been executed."
+PASS: gdb.python/py-breakpoint.exp: print result
+PASS: gdb.python/py-breakpoint.exp: end
+PASS: gdb.python/py-breakpoint.exp: python print (blist[len(blist)-1].commands)
+PASS: gdb.python/py-breakpoint.exp: Check invisible bp obj exists
+PASS: gdb.python/py-breakpoint.exp: Check breakpoint location
+PASS: gdb.python/py-breakpoint.exp: Check breakpoint visibility
+PASS: gdb.python/py-breakpoint.exp: Check info breakpoints shows visible breakpoints
+PASS: gdb.python/py-breakpoint.exp: Check invisible bp obj exists
+PASS: gdb.python/py-breakpoint.exp: Check breakpoint location
+PASS: gdb.python/py-breakpoint.exp: Check breakpoint visibility
+PASS: gdb.python/py-breakpoint.exp: Check info breakpoints does not show invisible breakpoints
+PASS: gdb.python/py-breakpoint.exp: Check maint info breakpoints shows invisible breakpoints
+PASS: gdb.python/py-breakpoint.exp: Test watchpoint write
+PASS: gdb.python/py-breakpoint.exp: Check info breakpoints does not show invisible breakpoints
+PASS: gdb.python/py-breakpoint.exp: Check maint info breakpoints shows invisible breakpoints
+PASS: gdb.python/py-breakpoint.exp: Test watchpoint write
+PASS: gdb.python/py-breakpoint.exp: Sub-class a breakpoint - python
+PASS: gdb.python/py-breakpoint.exp: Sub-class a breakpoint - class bp_eval (gdb.Breakpoint):
+PASS: gdb.python/py-breakpoint.exp: Sub-class a breakpoint - inf_i = 0
+PASS: gdb.python/py-breakpoint.exp: Sub-class a breakpoint - count = 0
+PASS: gdb.python/py-breakpoint.exp: Sub-class a breakpoint - def stop (self):
+PASS: gdb.python/py-breakpoint.exp: Sub-class a breakpoint - self.count = self.count + 1
+PASS: gdb.python/py-breakpoint.exp: Sub-class a breakpoint - self.inf_i = gdb.parse_and_eval("i")
+PASS: gdb.python/py-breakpoint.exp: Sub-class a breakpoint - if self.inf_i == 3:
+PASS: gdb.python/py-breakpoint.exp: Sub-class a breakpoint - return True
+PASS: gdb.python/py-breakpoint.exp: Sub-class a breakpoint - return False
+PASS: gdb.python/py-breakpoint.exp: Sub-class a breakpoint - end
+PASS: gdb.python/py-breakpoint.exp: Sub-class a second breakpoint - python
+PASS: gdb.python/py-breakpoint.exp: Sub-class a second breakpoint - class bp_also_eval (gdb.Breakpoint):
+PASS: gdb.python/py-breakpoint.exp: Sub-class a second breakpoint - count = 0
+PASS: gdb.python/py-breakpoint.exp: Sub-class a second breakpoint - def stop (self):
+PASS: gdb.python/py-breakpoint.exp: Sub-class a second breakpoint - self.count = self.count + 1
+PASS: gdb.python/py-breakpoint.exp: Sub-class a second breakpoint - if self.count == 9:
+PASS: gdb.python/py-breakpoint.exp: Sub-class a second breakpoint - return True
+PASS: gdb.python/py-breakpoint.exp: Sub-class a second breakpoint - return False
+PASS: gdb.python/py-breakpoint.exp: Sub-class a second breakpoint - end
+PASS: gdb.python/py-breakpoint.exp: Sub-class a third breakpoint - python
+PASS: gdb.python/py-breakpoint.exp: Sub-class a third breakpoint - class basic (gdb.Breakpoint):
+PASS: gdb.python/py-breakpoint.exp: Sub-class a third breakpoint - count = 0
+PASS: gdb.python/py-breakpoint.exp: Sub-class a third breakpoint - end
+PASS: gdb.python/py-breakpoint.exp: continue to breakpoint: Break at multiply.
+PASS: gdb.python/py-breakpoint.exp: Check inferior value matches python accounting
+PASS: gdb.python/py-breakpoint.exp: Check python accounting matches inferior
+PASS: gdb.python/py-breakpoint.exp: Check non firing same-location breakpoint eval function was also called at each stop.
+PASS: gdb.python/py-breakpoint.exp: Check non firing same-location breakpoint eval function was also called at each stop.
+PASS: gdb.python/py-breakpoint.exp: Check you cannot add a CLI condition to a Python breakpoint that
+PASS: gdb.python/py-breakpoint.exp: Construct an eval function - python
+PASS: gdb.python/py-breakpoint.exp: Construct an eval function - def stop_func ():
+PASS: gdb.python/py-breakpoint.exp: Construct an eval function - return True
+PASS: gdb.python/py-breakpoint.exp: Construct an eval function - end
+PASS: gdb.python/py-breakpoint.exp: Assign stop function to a breakpoint that has a condition
+PASS: gdb.python/py-breakpoint.exp: Test that evaluate function has not been yet executed (ie count = 0)
+PASS: gdb.python/py-breakpoint.exp: continue to breakpoint: Break at multiply.
+PASS: gdb.python/py-breakpoint.exp: Test that evaluate function is run when location also has normal bp
+PASS: gdb.python/py-breakpoint.exp: Sub-class a watchpoint - python
+PASS: gdb.python/py-breakpoint.exp: Sub-class a watchpoint - class wp_eval (gdb.Breakpoint):
+PASS: gdb.python/py-breakpoint.exp: Sub-class a watchpoint - def stop (self):
+PASS: gdb.python/py-breakpoint.exp: Sub-class a watchpoint - self.result = gdb.parse_and_eval("result")
+PASS: gdb.python/py-breakpoint.exp: Sub-class a watchpoint - if self.result == 788:
+PASS: gdb.python/py-breakpoint.exp: Sub-class a watchpoint - return True
+PASS: gdb.python/py-breakpoint.exp: Sub-class a watchpoint - return False
+PASS: gdb.python/py-breakpoint.exp: Sub-class a watchpoint - end
+PASS: gdb.python/py-breakpoint.exp: Test watchpoint write
+PASS: gdb.python/py-breakpoint.exp: Check that this unrelated breakpoints eval function was never called.
+Running ./gdb.python/py-cmd.exp ...
+PASS: gdb.python/py-cmd.exp: input simple command - python
+PASS: gdb.python/py-cmd.exp: input simple command - class test_cmd (gdb.Command):
+PASS: gdb.python/py-cmd.exp: input simple command - def __init__ (self):
+PASS: gdb.python/py-cmd.exp: input simple command - super (test_cmd, self).__init__ ("test_cmd", gdb.COMMAND_OBSCURE)
+PASS: gdb.python/py-cmd.exp: input simple command - def invoke (self, arg, from_tty):
+PASS: gdb.python/py-cmd.exp: input simple command - print ("test_cmd output, arg = %s" % arg)
+PASS: gdb.python/py-cmd.exp: input simple command - test_cmd ()
+PASS: gdb.python/py-cmd.exp: input simple command - end
+PASS: gdb.python/py-cmd.exp: call simple command
+PASS: gdb.python/py-cmd.exp: input prefix command - python
+PASS: gdb.python/py-cmd.exp: input prefix command - class prefix_cmd (gdb.Command):
+PASS: gdb.python/py-cmd.exp: input prefix command - def __init__ (self):
+PASS: gdb.python/py-cmd.exp: input prefix command - super (prefix_cmd, self).__init__ ("prefix_cmd", gdb.COMMAND_OBSCURE, gdb.COMPLETE_NONE, True)
+PASS: gdb.python/py-cmd.exp: input prefix command - def invoke (self, arg, from_tty):
+PASS: gdb.python/py-cmd.exp: input prefix command - print ("prefix_cmd output, arg = %s" % arg)
+PASS: gdb.python/py-cmd.exp: input prefix command - prefix_cmd ()
+PASS: gdb.python/py-cmd.exp: input prefix command - end
+PASS: gdb.python/py-cmd.exp: call prefix command
+PASS: gdb.python/py-cmd.exp: input subcommand - python
+PASS: gdb.python/py-cmd.exp: input subcommand - class subcmd (gdb.Command):
+PASS: gdb.python/py-cmd.exp: input subcommand - def __init__ (self):
+PASS: gdb.python/py-cmd.exp: input subcommand - super (subcmd, self).__init__ ("prefix_cmd subcmd", gdb.COMMAND_OBSCURE)
+PASS: gdb.python/py-cmd.exp: input subcommand - def invoke (self, arg, from_tty):
+PASS: gdb.python/py-cmd.exp: input subcommand - print ("subcmd output, arg = %s" % arg)
+PASS: gdb.python/py-cmd.exp: input subcommand - subcmd ()
+PASS: gdb.python/py-cmd.exp: input subcommand - end
+PASS: gdb.python/py-cmd.exp: call subcmd
+PASS: gdb.python/py-cmd.exp: input prefix command, keyword arguments - python
+PASS: gdb.python/py-cmd.exp: input prefix command, keyword arguments - class prefix_cmd2 (gdb.Command):
+PASS: gdb.python/py-cmd.exp: input prefix command, keyword arguments - def __init__ (self):
+PASS: gdb.python/py-cmd.exp: input prefix command, keyword arguments - super (prefix_cmd2, self).__init__ ("prefix_cmd2", gdb.COMMAND_OBSCURE, prefix = True, completer_class = gdb.COMPLETE_FILENAME)
+PASS: gdb.python/py-cmd.exp: input prefix command, keyword arguments - def invoke (self, arg, from_tty):
+PASS: gdb.python/py-cmd.exp: input prefix command, keyword arguments - print ("prefix_cmd2 output, arg = %s" % arg)
+PASS: gdb.python/py-cmd.exp: input prefix command, keyword arguments - prefix_cmd2 ()
+PASS: gdb.python/py-cmd.exp: input prefix command, keyword arguments - end
+PASS: gdb.python/py-cmd.exp: call prefix command, keyword arguments
+PASS: gdb.python/py-cmd.exp: input subcommand under prefix_cmd2 - python
+PASS: gdb.python/py-cmd.exp: input subcommand under prefix_cmd2 - class subcmd (gdb.Command):
+PASS: gdb.python/py-cmd.exp: input subcommand under prefix_cmd2 - def __init__ (self):
+PASS: gdb.python/py-cmd.exp: input subcommand under prefix_cmd2 - super (subcmd, self).__init__ ("prefix_cmd2 subcmd", gdb.COMMAND_OBSCURE)
+PASS: gdb.python/py-cmd.exp: input subcommand under prefix_cmd2 - def invoke (self, arg, from_tty):
+PASS: gdb.python/py-cmd.exp: input subcommand under prefix_cmd2 - print ("subcmd output, arg = %s" % arg)
+PASS: gdb.python/py-cmd.exp: input subcommand under prefix_cmd2 - subcmd ()
+PASS: gdb.python/py-cmd.exp: input subcommand under prefix_cmd2 - end
+PASS: gdb.python/py-cmd.exp: call subcmd under prefix_cmd2
+PASS: gdb.python/py-cmd.exp: input new subcommand - python
+PASS: gdb.python/py-cmd.exp: input new subcommand - class newsubcmd (gdb.Command):
+PASS: gdb.python/py-cmd.exp: input new subcommand - def __init__ (self):
+PASS: gdb.python/py-cmd.exp: input new subcommand - super (newsubcmd, self).__init__ ("info newsubcmd", gdb.COMMAND_OBSCURE)
+PASS: gdb.python/py-cmd.exp: input new subcommand - def invoke (self, arg, from_tty):
+PASS: gdb.python/py-cmd.exp: input new subcommand - print ("newsubcmd output, arg = %s" % arg)
+PASS: gdb.python/py-cmd.exp: input new subcommand - newsubcmd ()
+PASS: gdb.python/py-cmd.exp: input new subcommand - end
+PASS: gdb.python/py-cmd.exp: call newsubcmd
+PASS: gdb.python/py-cmd.exp: input command to throw error - python
+PASS: gdb.python/py-cmd.exp: input command to throw error - class test_error_cmd (gdb.Command):
+PASS: gdb.python/py-cmd.exp: input command to throw error - def __init__ (self):
+PASS: gdb.python/py-cmd.exp: input command to throw error - super (test_error_cmd, self).__init__ ("test_error_cmd", gdb.COMMAND_OBSCURE)
+PASS: gdb.python/py-cmd.exp: input command to throw error - def invoke (self, arg, from_tty):
+PASS: gdb.python/py-cmd.exp: input command to throw error - raise gdb.GdbError ('you lose!')
+PASS: gdb.python/py-cmd.exp: input command to throw error - test_error_cmd ()
+PASS: gdb.python/py-cmd.exp: input command to throw error - end
+PASS: gdb.python/py-cmd.exp: call error command
+PASS: gdb.python/py-cmd.exp: string_to_argv ("1 2 3")
+PASS: gdb.python/py-cmd.exp: string_to_argv ("'1 2' 3")
+PASS: gdb.python/py-cmd.exp: string_to_argv ('"1 2" 3')
+PASS: gdb.python/py-cmd.exp: string_to_argv ('1\ 2 3')
+PASS: gdb.python/py-cmd.exp: input simple user-defined command - python
+PASS: gdb.python/py-cmd.exp: input simple user-defined command - class test_help (gdb.Command):
+PASS: gdb.python/py-cmd.exp: input simple user-defined command - """Docstring"""
+PASS: gdb.python/py-cmd.exp: input simple user-defined command - def __init__ (self):
+PASS: gdb.python/py-cmd.exp: input simple user-defined command - super (test_help, self).__init__ ("test_help", gdb.COMMAND_USER)
+PASS: gdb.python/py-cmd.exp: input simple user-defined command - def invoke (self, arg, from_tty):
+PASS: gdb.python/py-cmd.exp: input simple user-defined command - print ("test_cmd output, arg = %s" % arg)
+PASS: gdb.python/py-cmd.exp: input simple user-defined command - test_help ()
+PASS: gdb.python/py-cmd.exp: input simple user-defined command - end
+PASS: gdb.python/py-cmd.exp: call simple user-defined command
+PASS: gdb.python/py-cmd.exp: see user-defined command in `help user-defined`
+Running ./gdb.python/py-error.exp ...
+PASS: gdb.python/py-error.exp: set host-charset IBM1047
+PASS: gdb.python/py-error.exp: main reached
+PASS: gdb.python/py-error.exp: no delayed error
+Running ./gdb.python/py-events.exp ...
+Running ./gdb.python/py-evsignal.exp ...
+KFAIL: gdb.python/py-evsignal.exp: Signal Thread 3 (PRMS: python/12966)
+Running ./gdb.python/py-evthreads.exp ...
+KFAIL: gdb.python/py-evthreads.exp: Run to breakpoint 1 (PRMS: python/12966)
+Running ./gdb.python/py-explore-cc.exp ...
+PASS: gdb.python/py-explore-cc.exp: continue to breakpoint: Break here
+PASS: gdb.python/py-explore-cc.exp: explore A
+PASS: gdb.python/py-explore-cc.exp: explore a
+PASS: gdb.python/py-explore-cc.exp: explore int_ref
+PASS: gdb.python/py-explore-cc.exp: explore int_ptr_ref
+PASS: gdb.python/py-explore-cc.exp: explore_int_ptr_ref_as_single_value_pointer
+PASS: gdb.python/py-explore-cc.exp: explore b
+PASS: gdb.python/py-explore-cc.exp: explore_base_class_A
+PASS: gdb.python/py-explore-cc.exp: return_to_b_from_A
+PASS: gdb.python/py-explore-cc.exp: explore_field_i_of_b
+PASS: gdb.python/py-explore-cc.exp: return_to_b_from_i
+PASS: gdb.python/py-explore-cc.exp: explore_field_c_of_b
+PASS: gdb.python/py-explore-cc.exp: return_to_b_from_i
+PASS: gdb.python/py-explore-cc.exp: return_to_gdb_prompt_from_b
+PASS: gdb.python/py-explore-cc.exp: explore B
+PASS: gdb.python/py-explore-cc.exp: explore_base_class_A
+PASS: gdb.python/py-explore-cc.exp: return_to_B
+PASS: gdb.python/py-explore-cc.exp: explore_field_i_of_B
+PASS: gdb.python/py-explore-cc.exp: return_to_B_from_i
+PASS: gdb.python/py-explore-cc.exp: explore_field_c_of_B
+PASS: gdb.python/py-explore-cc.exp: return_to_B_from_c
+PASS: gdb.python/py-explore-cc.exp: return_to_gdb_prompt_from_B
+Running ./gdb.python/py-explore.exp ...
+PASS: gdb.python/py-explore.exp: continue to breakpoint: Break here
+PASS: gdb.python/py-explore.exp: explore i
+PASS: gdb.python/py-explore.exp: explore ss
+PASS: gdb.python/py-explore.exp: explore *ss_ptr
+PASS: gdb.python/py-explore.exp: explore ss_t
+PASS: gdb.python/py-explore.exp: explore ss_ptr
+PASS: gdb.python/py-explore.exp: explore ss_ptr as single value pointer
+PASS: gdb.python/py-explore.exp: explore darray_ref
+PASS: gdb.python/py-explore.exp: no_to_explore_as_pointer
+PASS: gdb.python/py-explore.exp: explore_as_array
+PASS: gdb.python/py-explore.exp: explore_as_array_index_2
+PASS: gdb.python/py-explore.exp: end explore_as_array_index_2
+PASS: gdb.python/py-explore.exp: end explore_as_array
+PASS: gdb.python/py-explore.exp: explore su
+PASS: gdb.python/py-explore.exp: explore su.d
+PASS: gdb.python/py-explore.exp: end su.d exploration
+PASS: gdb.python/py-explore.exp: end su exploration
+PASS: gdb.python/py-explore.exp: explore cs
+PASS: gdb.python/py-explore.exp: explore cs.s
+PASS: gdb.python/py-explore.exp: end cs.s exploration
+PASS: gdb.python/py-explore.exp: explore cs.u
+PASS: gdb.python/py-explore.exp: end cs.u exploration
+PASS: gdb.python/py-explore.exp: end cs exploration
+PASS: gdb.python/py-explore.exp: explore cu
+PASS: gdb.python/py-explore.exp: explore cu.sa
+PASS: gdb.python/py-explore.exp: explore cu.sa[0]
+PASS: gdb.python/py-explore.exp: end cu.sa[0] exploration
+PASS: gdb.python/py-explore.exp: end cu.sa exploration
+PASS: gdb.python/py-explore.exp: end cu exploration
+PASS: gdb.python/py-explore.exp: explore int
+PASS: gdb.python/py-explore.exp: explore struct SimpleStruct
+PASS: gdb.python/py-explore.exp: explore type struct SimpleStruct feild 0
+PASS: gdb.python/py-explore.exp: return to struct SimpleStruct from field 0
+PASS: gdb.python/py-explore.exp: explore type struct SimpleStruct feild 1
+PASS: gdb.python/py-explore.exp: return to struct SimpleStruct from field 1
+PASS: gdb.python/py-explore.exp: return to GDB prompt from struct SimpleStruct
+PASS: gdb.python/py-explore.exp: explore union SimpleUnion
+PASS: gdb.python/py-explore.exp: explore type union SimpleUnion feild 0
+PASS: gdb.python/py-explore.exp: return to union SimpleUnion from field 0
+PASS: gdb.python/py-explore.exp: explore type union SimpleUnion feild 1
+PASS: gdb.python/py-explore.exp: return to union SimpleUnion from field 1
+PASS: gdb.python/py-explore.exp: explore type union SimpleUnion feild 2
+PASS: gdb.python/py-explore.exp: return to union SimpleUnion from field 2
+PASS: gdb.python/py-explore.exp: explore type union SimpleUnion feild 3
+PASS: gdb.python/py-explore.exp: return to union SimpleUnion from field 3
+PASS: gdb.python/py-explore.exp: return to GDB prompt from union SimpleUnion
+PASS: gdb.python/py-explore.exp: explore SS
+PASS: gdb.python/py-explore.exp: explore type SS feild 0
+PASS: gdb.python/py-explore.exp: return to SS from field 0
+PASS: gdb.python/py-explore.exp: explore type SS feild 1
+PASS: gdb.python/py-explore.exp: return to SS field 1
+PASS: gdb.python/py-explore.exp: return to GDB prompt from SS
+PASS: gdb.python/py-explore.exp: explore type struct ComplexStruct
+PASS: gdb.python/py-explore.exp: explore type struct ComplexStruct field 0
+PASS: gdb.python/py-explore.exp: return to ComplexStruct from field 0
+PASS: gdb.python/py-explore.exp: explore type struct ComplexStruct field 1
+PASS: gdb.python/py-explore.exp: return to ComplexStruct from field 1
+PASS: gdb.python/py-explore.exp: explore type struct ComplexStruct field 2
+PASS: gdb.python/py-explore.exp: return to ComplexStruct from field 2
+PASS: gdb.python/py-explore.exp: return to GDB prompt from ComplexStruct type exploration
+PASS: gdb.python/py-explore.exp: explore type union ComplexUnion
+PASS: gdb.python/py-explore.exp: explore type union ComplexUnion field 0
+PASS: gdb.python/py-explore.exp: return to ComplexUnion from field 0
+PASS: gdb.python/py-explore.exp: explore type union ComplexUnion field 1
+PASS: gdb.python/py-explore.exp: return to ComplexUnion from field 1
+PASS: gdb.python/py-explore.exp: return to GDB prompt from ComplexUnion type exploration
+PASS: gdb.python/py-explore.exp: explore type union ComplexUnion
+PASS: gdb.python/py-explore.exp: explore type union ComplexUnion field 0
+PASS: gdb.python/py-explore.exp: return to ComplexUnion from field 0
+PASS: gdb.python/py-explore.exp: explore type union ComplexUnion field 1
+PASS: gdb.python/py-explore.exp: return to ComplexUnion from field 1
+PASS: gdb.python/py-explore.exp: return to GDB prompt from ComplexUnion type exploration
+Running ./gdb.python/py-finish-breakpoint2.exp ...
+PASS: gdb.python/py-finish-breakpoint2.exp: import python scripts
+PASS: gdb.python/py-finish-breakpoint2.exp: run to exception 1
+PASS: gdb.python/py-finish-breakpoint2.exp: check BP count
+PASS: gdb.python/py-finish-breakpoint2.exp: set FinishBP after the exception
+PASS: gdb.python/py-finish-breakpoint2.exp: check FinishBreakpoint in catch()
+PASS: gdb.python/py-finish-breakpoint2.exp: check finish BP removal
+PASS: gdb.python/py-finish-breakpoint2.exp: continue to second exception
+PASS: gdb.python/py-finish-breakpoint2.exp: set FinishBP after the exception
+PASS: gdb.python/py-finish-breakpoint2.exp: FinishBreakpoint with exception thrown not caught
+Running ./gdb.python/py-finish-breakpoint.exp ...
+PASS: gdb.python/py-finish-breakpoint.exp: disable confirmation
+PASS: gdb.python/py-finish-breakpoint.exp: import python scripts
+PASS: gdb.python/py-finish-breakpoint.exp: continue to the function to finish
+PASS: gdb.python/py-finish-breakpoint.exp: set FinishBreakpoint with default frame value
+PASS: gdb.python/py-finish-breakpoint.exp: set FinishBreakpoint
+PASS: gdb.python/py-finish-breakpoint.exp: check return_value at init
+PASS: gdb.python/py-finish-breakpoint.exp: check MyFinishBreakpoint hit
+PASS: gdb.python/py-finish-breakpoint.exp: check return_value
+PASS: gdb.python/py-finish-breakpoint.exp: check finishBP on default frame has been hit
+PASS: gdb.python/py-finish-breakpoint.exp: ensure that finish bp is invalid afer normal hit
+PASS: gdb.python/py-finish-breakpoint.exp: return to main()
+PASS: gdb.python/py-finish-breakpoint.exp: check FinishBP not allowed in main
+PASS: gdb.python/py-finish-breakpoint.exp: import python scripts
+PASS: gdb.python/py-finish-breakpoint.exp: ensure that shared lib has no debug info
+PASS: gdb.python/py-finish-breakpoint.exp: continue to do_nothing
+PASS: gdb.python/py-finish-breakpoint.exp: set finish breakpoint
+PASS: gdb.python/py-finish-breakpoint.exp: check FinishBreakpoint hit
+PASS: gdb.python/py-finish-breakpoint.exp: check return value without debug symbol
+PASS: gdb.python/py-finish-breakpoint.exp: import python scripts
+PASS: gdb.python/py-finish-breakpoint.exp: set finish breakpoint
+PASS: gdb.python/py-finish-breakpoint.exp: set BP after the jump
+PASS: gdb.python/py-finish-breakpoint.exp: check FinishBP out of scope notification
+PASS: gdb.python/py-finish-breakpoint.exp: ensure that finish bp is invalid afer out of scope notification
+PASS: gdb.python/py-finish-breakpoint.exp: import python scripts
+PASS: gdb.python/py-finish-breakpoint.exp: set a conditional BP
+PASS: gdb.python/py-finish-breakpoint.exp: set FinishBP in a breakpoint condition
+PASS: gdb.python/py-finish-breakpoint.exp: don't allow FinishBreakpoint on dummy frames
+PASS: gdb.python/py-finish-breakpoint.exp: check stopped location
+PASS: gdb.python/py-finish-breakpoint.exp: import python scripts
+PASS: gdb.python/py-finish-breakpoint.exp: set conditional BP
+PASS: gdb.python/py-finish-breakpoint.exp: set BP in condition
+PASS: gdb.python/py-finish-breakpoint.exp: stop in condition function
+PASS: gdb.python/py-finish-breakpoint.exp: finish condition evaluation
+PASS: gdb.python/py-finish-breakpoint.exp: stop at conditional breakpoint
+PASS: gdb.python/py-finish-breakpoint.exp: check stopped location
+PASS: gdb.python/py-finish-breakpoint.exp: import python scripts
+PASS: gdb.python/py-finish-breakpoint.exp: prepare TestExplicitBreakpoint
+PASS: gdb.python/py-finish-breakpoint.exp: don't allow FinishBreakpoint on dummy frames
+PASS: gdb.python/py-finish-breakpoint.exp: prepare TestExplicitBreakpoint
+PASS: gdb.python/py-finish-breakpoint.exp: FinishBP stop at during explicit function call
+PASS: gdb.python/py-finish-breakpoint.exp: switch to exit() test
+PASS: gdb.python/py-finish-breakpoint.exp: set FinishBP after the exit()
+PASS: gdb.python/py-finish-breakpoint.exp: catch out of scope after exit
+PASS: gdb.python/py-finish-breakpoint.exp: set FinishBP after the exec
+PASS: gdb.python/py-finish-breakpoint.exp: catch exec
+PASS: gdb.python/py-finish-breakpoint.exp: catch out of scope after exec
+Running ./gdb.python/py-frame.exp ...
+PASS: gdb.python/py-frame.exp: continue to breakpoint: Block break here.
+PASS: gdb.python/py-frame.exp: test Frame.architecture()
+PASS: gdb.python/py-frame.exp: test i
+PASS: gdb.python/py-frame.exp: test f
+PASS: gdb.python/py-frame.exp: test b
+PASS: gdb.python/py-frame.exp: test i = 1.1
+PASS: gdb.python/py-frame.exp: test double i
+PASS: gdb.python/py-frame.exp: test f = 2.2
+PASS: gdb.python/py-frame.exp: test double f
+PASS: gdb.python/py-frame.exp: test i = 99
+PASS: gdb.python/py-frame.exp: test int i
+PASS: gdb.python/py-frame.exp: continue to breakpoint: breakpoint at f2
+PASS: gdb.python/py-frame.exp: selected frame -vs- newest frame
+PASS: gdb.python/py-frame.exp: newest frame -vs- newest frame
+PASS: gdb.python/py-frame.exp: test equality comparison (false)
+PASS: gdb.python/py-frame.exp: test equality comparison (true)
+PASS: gdb.python/py-frame.exp: test inequality comparison (true)
+PASS: gdb.python/py-frame.exp: test inequality comparison (false)
+PASS: gdb.python/py-frame.exp: test Frame.is_valid
+PASS: gdb.python/py-frame.exp: test Frame.name
+PASS: gdb.python/py-frame.exp: test Frame.type
+PASS: gdb.python/py-frame.exp: test Frame.type
+PASS: gdb.python/py-frame.exp: test gdb.frame_stop_reason_string
+PASS: gdb.python/py-frame.exp: test Frame.pc
+PASS: gdb.python/py-frame.exp: test Frame.older
+PASS: gdb.python/py-frame.exp: test Frame.newer
+PASS: gdb.python/py-frame.exp: test Frame.read_var - error
+PASS: gdb.python/py-frame.exp: test Frame.read_var - success
+PASS: gdb.python/py-frame.exp: test gdb.selected_frame
+Running ./gdb.python/py-frame-inline.exp ...
+PASS: gdb.python/py-frame-inline.exp: continue to breakpoint: Block break here.
+PASS: gdb.python/py-frame-inline.exp: info frame
+PASS: gdb.python/py-frame-inline.exp: up
+PASS: gdb.python/py-frame-inline.exp: python print (gdb.selected_frame().read_var('l'))
+Running ./gdb.python/py-function.exp ...
+PASS: gdb.python/py-function.exp: input convenience function - python
+PASS: gdb.python/py-function.exp: input convenience function - class test_func (gdb.Function):
+PASS: gdb.python/py-function.exp: input convenience function - def __init__ (self):
+PASS: gdb.python/py-function.exp: input convenience function - super (test_func, self).__init__ ("test_func")
+PASS: gdb.python/py-function.exp: input convenience function - def invoke (self, arg):
+PASS: gdb.python/py-function.exp: input convenience function - return "test_func output, arg = %s" % arg.string ()
+PASS: gdb.python/py-function.exp: input convenience function - test_func ()
+PASS: gdb.python/py-function.exp: input convenience function - end
+PASS: gdb.python/py-function.exp: call function
+PASS: gdb.python/py-function.exp: input value-returning convenience function - python
+PASS: gdb.python/py-function.exp: input value-returning convenience function - class Double (gdb.Function):
+PASS: gdb.python/py-function.exp: input value-returning convenience function - def __init__ (self):
+PASS: gdb.python/py-function.exp: input value-returning convenience function - super (Double, self).__init__ ("double")
+PASS: gdb.python/py-function.exp: input value-returning convenience function - def invoke (self, n):
+PASS: gdb.python/py-function.exp: input value-returning convenience function - return n*2
+PASS: gdb.python/py-function.exp: input value-returning convenience function - Double ()
+PASS: gdb.python/py-function.exp: input value-returning convenience function - end
+PASS: gdb.python/py-function.exp: call value-returning function
+PASS: gdb.python/py-function.exp: input int-returning function - python
+PASS: gdb.python/py-function.exp: input int-returning function - class Yes(gdb.Function):
+PASS: gdb.python/py-function.exp: input int-returning function - def __init__(self):
+PASS: gdb.python/py-function.exp: input int-returning function - gdb.Function.__init__(self, 'yes')
+PASS: gdb.python/py-function.exp: input int-returning function - def invoke(self):
+PASS: gdb.python/py-function.exp: input int-returning function - return 1
+PASS: gdb.python/py-function.exp: input int-returning function - Yes ()
+PASS: gdb.python/py-function.exp: input int-returning function - end
+PASS: gdb.python/py-function.exp: call yes with &&
+PASS: gdb.python/py-function.exp: call yes with ||
+PASS: gdb.python/py-function.exp: Test GDBError - python
+PASS: gdb.python/py-function.exp: Test GDBError - class GDBError(gdb.Function):
+PASS: gdb.python/py-function.exp: Test GDBError - def __init__(self):
+PASS: gdb.python/py-function.exp: Test GDBError - gdb.Function.__init__(self, 'gdberror')
+PASS: gdb.python/py-function.exp: Test GDBError - def invoke(self):
+PASS: gdb.python/py-function.exp: Test GDBError - raise gdb.GdbError("This is a GdbError")
+PASS: gdb.python/py-function.exp: Test GDBError - GDBError ()
+PASS: gdb.python/py-function.exp: Test GDBError - end
+PASS: gdb.python/py-function.exp: Test GdbError. There should not be a stack trace
+PASS: gdb.python/py-function.exp: Test Normal Error - python
+PASS: gdb.python/py-function.exp: Test Normal Error - class NormalError(gdb.Function):
+PASS: gdb.python/py-function.exp: Test Normal Error - def __init__(self):
+PASS: gdb.python/py-function.exp: Test Normal Error - gdb.Function.__init__(self, 'normalerror')
+PASS: gdb.python/py-function.exp: Test Normal Error - def invoke(self):
+PASS: gdb.python/py-function.exp: Test Normal Error - raise RuntimeError("This is a Normal Error")
+PASS: gdb.python/py-function.exp: Test Normal Error - NormalError ()
+PASS: gdb.python/py-function.exp: Test Normal Error - end
+PASS: gdb.python/py-function.exp: set python print-stack full
+PASS: gdb.python/py-function.exp: Test a Runtime error. There should be a stack trace.
+PASS: gdb.python/py-function.exp: input command-calling function - python
+PASS: gdb.python/py-function.exp: input command-calling function - class CallCommand(gdb.Function):
+PASS: gdb.python/py-function.exp: input command-calling function - def __init__(self):
+PASS: gdb.python/py-function.exp: input command-calling function - gdb.Function.__init__(self, 'call_command')
+PASS: gdb.python/py-function.exp: input command-calling function - def invoke(self):
+PASS: gdb.python/py-function.exp: input command-calling function - return gdb.execute('print 1', to_string=True)
+PASS: gdb.python/py-function.exp: input command-calling function - CallCommand ()
+PASS: gdb.python/py-function.exp: input command-calling function - end
+PASS: gdb.python/py-function.exp: Setting a value from a function which executes a command.
+PASS: gdb.python/py-function.exp: Setting a value from a function which executes a command, again.
+Running ./gdb.python/py-inferior.exp ...
+PASS: gdb.python/py-inferior.exp: successfully compiled posix threads test case
+PASS: gdb.python/py-inferior.exp: get inferiors list
+PASS: gdb.python/py-inferior.exp: verify inferiors list
+PASS: gdb.python/py-inferior.exp: test equality comparison (true)
+PASS: gdb.python/py-inferior.exp: test Inferior.num
+PASS: gdb.python/py-inferior.exp: test Inferior.pid
+PASS: gdb.python/py-inferior.exp: test Inferior.was_attached
+PASS: gdb.python/py-inferior.exp: test Inferior.threads
+PASS: gdb.python/py-inferior.exp: continue to breakpoint: cont to check_threads
+PASS: gdb.python/py-inferior.exp: test Inferior.threads 2
+PASS: gdb.python/py-inferior.exp: continue to breakpoint: cont to Break here.
+PASS: gdb.python/py-inferior.exp: read str contents
+PASS: gdb.python/py-inferior.exp: write str
+PASS: gdb.python/py-inferior.exp: ensure str was changed in the inferior
+PASS: gdb.python/py-inferior.exp: py start_addr = search_buf.address
+PASS: gdb.python/py-inferior.exp: py length = search_buf.type.sizeof
+PASS: gdb.python/py-inferior.exp: find string pattern
+PASS: gdb.python/py-inferior.exp: pattern not found at end of range
+PASS: gdb.python/py-inferior.exp: pattern found at end of range
+PASS: gdb.python/py-inferior.exp: py from struct import *
+PASS: gdb.python/py-inferior.exp: set int16_search_buf[10] = 0x1234
+PASS: gdb.python/py-inferior.exp: py search_buf = gdb.selected_frame ().read_var ('int16_search_buf')
+PASS: gdb.python/py-inferior.exp: py start_addr = search_buf.address
+PASS: gdb.python/py-inferior.exp: py length = search_buf.type.sizeof
+PASS: gdb.python/py-inferior.exp: py pattern = pack('<H',0x1234)
+PASS: gdb.python/py-inferior.exp: find 16-bit pattern, with value pattern
+PASS: gdb.python/py-inferior.exp: set int32_search_buf[10] = 0x12345678
+PASS: gdb.python/py-inferior.exp: py search_buf = gdb.selected_frame ().read_var ('int32_search_buf')
+PASS: gdb.python/py-inferior.exp: py start_addr = search_buf.address
+PASS: gdb.python/py-inferior.exp: py length = search_buf.type.sizeof
+PASS: gdb.python/py-inferior.exp: py pattern = pack('<I',0x12345678)
+PASS: gdb.python/py-inferior.exp: find 32-bit pattern, with python pattern
+PASS: gdb.python/py-inferior.exp: set int64_search_buf[10] = 0xfedcba9876543210LL
+PASS: gdb.python/py-inferior.exp: py search_buf = gdb.selected_frame ().read_var ('int64_search_buf')
+PASS: gdb.python/py-inferior.exp: py start_addr = search_buf.address
+PASS: gdb.python/py-inferior.exp: py length = search_buf.type.sizeof
+PASS: gdb.python/py-inferior.exp: py pattern = pack('<Q', 0xfedcba9876543210)
+PASS: gdb.python/py-inferior.exp: find 64-bit pattern, with value pattern
+PASS: gdb.python/py-inferior.exp: set *(int8_t*) &search_buf[10] = 0x62
+PASS: gdb.python/py-inferior.exp: set *(int16_t*) &search_buf[11] = 0x6363
+PASS: gdb.python/py-inferior.exp: set *(int32_t*) &search_buf[13] = 0x64646464
+PASS: gdb.python/py-inferior.exp: py search_buf = gdb.selected_frame ().read_var ('search_buf')
+PASS: gdb.python/py-inferior.exp: py start_addr = search_buf[0].address
+PASS: gdb.python/py-inferior.exp: py pattern1 = pack('B', 0x62)
+PASS: gdb.python/py-inferior.exp: py pattern2 = pack('<H', 0x6363)
+PASS: gdb.python/py-inferior.exp: py pattern3 = pack('<I', 0x64646464)
+PASS: gdb.python/py-inferior.exp: find mixed-sized pattern
+PASS: gdb.python/py-inferior.exp: find mixed-sized pattern
+PASS: gdb.python/py-inferior.exp: find mixed-sized pattern
+PASS: gdb.python/py-inferior.exp: set *(int32_t*) &search_buf[0*16000+100] = 0x12345678
+PASS: gdb.python/py-inferior.exp: set *(int32_t*) &search_buf[1*16000+100] = 0x12345678
+PASS: gdb.python/py-inferior.exp: py start_addr = gdb.selected_frame ().read_var ('search_buf')
+PASS: gdb.python/py-inferior.exp: py end_addr = start_addr + gdb.selected_frame ().read_var ('search_buf_size')
+PASS: gdb.python/py-inferior.exp: py pattern = pack('<I', 0x12345678)
+PASS: gdb.python/py-inferior.exp: py first = gdb.inferiors()[0].search_memory (start_addr,end_addr - start_addr, pattern)
+PASS: gdb.python/py-inferior.exp: search spanning large range 1st result
+PASS: gdb.python/py-inferior.exp: py start_addr = first + 1
+PASS: gdb.python/py-inferior.exp: py second = gdb.inferiors()[0].search_memory (start_addr, end_addr - start_addr, pattern)
+PASS: gdb.python/py-inferior.exp: search spanning large range 2nd result
+PASS: gdb.python/py-inferior.exp: py start_addr = second + 1
+PASS: gdb.python/py-inferior.exp: py third = gdb.inferiors()[0].search_memory (start_addr, end_addr - start_addr, pattern)
+PASS: gdb.python/py-inferior.exp: search spanning large range 3rd result
+PASS: gdb.python/py-inferior.exp: get initial list
+PASS: gdb.python/py-inferior.exp: Get inferior list length
+PASS: gdb.python/py-inferior.exp: Check inferior validity
+PASS: gdb.python/py-inferior.exp: add empty inferior 2
+PASS: gdb.python/py-inferior.exp: get new list
+PASS: gdb.python/py-inferior.exp: Get inferior list length
+PASS: gdb.python/py-inferior.exp: Check inferior validity
+PASS: gdb.python/py-inferior.exp: Check inferior validity
+PASS: gdb.python/py-inferior.exp: remove-inferiors 3
+PASS: gdb.python/py-inferior.exp: Check inferior validity
+PASS: gdb.python/py-inferior.exp: Check inferior validity
+PASS: gdb.python/py-inferior.exp: Switch to first inferior
+PASS: gdb.python/py-inferior.exp: First inferior selected
+PASS: gdb.python/py-inferior.exp: Create new inferior
+PASS: gdb.python/py-inferior.exp: Switch to third inferior
+PASS: gdb.python/py-inferior.exp: Third inferior selected
+PASS: gdb.python/py-inferior.exp: Switch to first inferior
+PASS: gdb.python/py-inferior.exp: Remove second inferior
+Running ./gdb.python/py-infthread.exp ...
+PASS: gdb.python/py-infthread.exp: test gdb.selected_thread
+PASS: gdb.python/py-infthread.exp: verify InferiorThread object
+PASS: gdb.python/py-infthread.exp: test Inferior.num
+PASS: gdb.python/py-infthread.exp: test InferiorThread.ptid
+PASS: gdb.python/py-infthread.exp: get supplied name of current thread
+PASS: gdb.python/py-infthread.exp: set name of current thread
+PASS: gdb.python/py-infthread.exp: check name of current thread
+PASS: gdb.python/py-infthread.exp: reset name of current thread
+PASS: gdb.python/py-infthread.exp: check name of current thread again
+PASS: gdb.python/py-infthread.exp: test InferiorThread.is_stopped
+PASS: gdb.python/py-infthread.exp: test InferiorThread.is_running
+PASS: gdb.python/py-infthread.exp: test InferiorThread.is_exited
+PASS: gdb.python/py-infthread.exp: test InferiorThread.is_valid
+PASS: gdb.python/py-infthread.exp: kill inferior 1
+PASS: gdb.python/py-infthread.exp: test InferiorThread.is_valid
+Running ./gdb.python/py-mi.exp ...
+PASS: gdb.python/py-mi.exp: breakpoint at main
+PASS: gdb.python/py-mi.exp: mi runto main
+PASS: gdb.python/py-mi.exp: run to 328 (set breakpoint)
+PASS: gdb.python/py-mi.exp: create container varobj, no pretty-printing
+PASS: gdb.python/py-mi.exp: examine container children=0, no pretty-printing
+PASS: gdb.python/py-mi.exp: delete varobj
+PASS: gdb.python/py-mi.exp: create nscont varobj, no pretty-printing
+PASS: gdb.python/py-mi.exp: examine nscont children=0, no pretty-printing
+PASS: gdb.python/py-mi.exp: delete varobj
+PASS: gdb.python/py-mi.exp: create string_1 varobj
+PASS: gdb.python/py-mi.exp: create estring varobj
+PASS: gdb.python/py-mi.exp: assign string_1 from string_2
+PASS: gdb.python/py-mi.exp: update string varobj after assignment
+PASS: gdb.python/py-mi.exp: create container varobj
+PASS: gdb.python/py-mi.exp: examine container children=0
+PASS: gdb.python/py-mi.exp: next over update 1
+PASS: gdb.python/py-mi.exp: varobj update 1
+PASS: gdb.python/py-mi.exp: next over update 2
+PASS: gdb.python/py-mi.exp: varobj update 2
+PASS: gdb.python/py-mi.exp: clear visualizer
+PASS: gdb.python/py-mi.exp: varobj update after clearing
+PASS: gdb.python/py-mi.exp: choose default visualizer
+PASS: gdb.python/py-mi.exp: varobj update after choosing default
+PASS: gdb.python/py-mi.exp: choose visualizer using expression
+PASS: gdb.python/py-mi.exp: varobj update after choosing via expression
+PASS: gdb.python/py-mi.exp: list varobj children after selecting child range
+PASS: gdb.python/py-mi.exp: list varobj children after resetting child range
+PASS: gdb.python/py-mi.exp: next over update 3
+PASS: gdb.python/py-mi.exp: set update range
+PASS: gdb.python/py-mi.exp: list children after setting update range
+PASS: gdb.python/py-mi.exp: list selected children after setting range
+PASS: gdb.python/py-mi.exp: list children after listing selected range
+PASS: gdb.python/py-mi.exp: next over update 4
+PASS: gdb.python/py-mi.exp: update after next with restricted range
+PASS: gdb.python/py-mi.exp: set update range with non-zero start
+PASS: gdb.python/py-mi.exp: update varobj with change outside selected range
+PASS: gdb.python/py-mi.exp: next over update 5
+PASS: gdb.python/py-mi.exp: create second container varobj
+PASS: gdb.python/py-mi.exp: update varobj, no children requested
+PASS: gdb.python/py-mi.exp: next over update 6
+PASS: gdb.python/py-mi.exp: update varobj 2, no children requested
+PASS: gdb.python/py-mi.exp: run to 131 (set breakpoint)
+PASS: gdb.python/py-mi.exp: create outer varobj
+PASS: gdb.python/py-mi.exp: list children of outer
+PASS: gdb.python/py-mi.exp: list children of outer.s
+PASS: gdb.python/py-mi.exp: next over outer update
+PASS: gdb.python/py-mi.exp: update after updating element of outer
+PASS: gdb.python/py-mi.exp: run to 222 (set breakpoint)
+PASS: gdb.python/py-mi.exp: update after type change
+PASS: gdb.python/py-mi.exp: run to 351 (set breakpoint)
+PASS: gdb.python/py-mi.exp: create nstype varobj
+PASS: gdb.python/py-mi.exp: list children after setting update range
+PASS: gdb.python/py-mi.exp: clear visualizer
+PASS: gdb.python/py-mi.exp: varobj update after clearing
+PASS: gdb.python/py-mi.exp: choose default visualizer
+PASS: gdb.python/py-mi.exp: create nstype2 varobj
+PASS: gdb.python/py-mi.exp: list children after setting exception flag
+PASS: gdb.python/py-mi.exp: create me varobj
+PASS: gdb.python/py-mi.exp: evaluate me varobj
+PASS: gdb.python/py-mi.exp: printer whose children are returned as a list
+PASS: gdb.python/py-mi.exp: run to 254 (set breakpoint)
+PASS: gdb.python/py-mi.exp: create varobj for c
+PASS: gdb.python/py-mi.exp: choose array visualizer for c
+PASS: gdb.python/py-mi.exp: list children of c
+PASS: gdb.python/py-mi.exp: next over change of array element
+PASS: gdb.python/py-mi.exp: update varobj after element change
+PASS: gdb.python/py-mi.exp: breakpoint at main
+PASS: gdb.python/py-mi.exp: mi runto main
+PASS: gdb.python/py-mi.exp: run to 351 (set breakpoint)
+PASS: gdb.python/py-mi.exp: create fake varobj
+PASS: gdb.python/py-mi.exp: list children of fake
+PASS: gdb.python/py-mi.exp: list children fake.private
+PASS: gdb.python/py-mi.exp: Install visualizer on a cplus_fake_child
+Running ./gdb.python/py-objfile.exp ...
+PASS: gdb.python/py-objfile.exp: Find a symbol in objfile
+PASS: gdb.python/py-objfile.exp: Get backing object file
+PASS: gdb.python/py-objfile.exp: Get objfile validity
+PASS: gdb.python/py-objfile.exp: Get objfile validity
+PASS: gdb.python/py-objfile.exp: Get objfile validity after unload
+Running ./gdb.python/py-objfile-script.exp ...
+PASS: gdb.python/py-objfile-script.exp: set auto-load safe-path
+PASS: gdb.python/py-objfile-script.exp: info auto-load python-scripts
+PASS: gdb.python/py-objfile-script.exp: b 38
+PASS: gdb.python/py-objfile-script.exp: continue
+PASS: gdb.python/py-objfile-script.exp: print ss
+Running ./gdb.python/py-parameter.exp ...
+PASS: gdb.python/py-parameter.exp: python print (gdb.parameter ('directories'))
+PASS: gdb.python/py-parameter.exp: Simple gdb booleanparameter - python
+PASS: gdb.python/py-parameter.exp: Simple gdb booleanparameter - class TestParam (gdb.Parameter):
+PASS: gdb.python/py-parameter.exp: Simple gdb booleanparameter - """When enabled, test param does something useful. When disabled, does nothing."""
+PASS: gdb.python/py-parameter.exp: Simple gdb booleanparameter - show_doc = "Show the state of the boolean test-param"
+PASS: gdb.python/py-parameter.exp: Simple gdb booleanparameter - set_doc = "Set the state of the boolean test-param"
+PASS: gdb.python/py-parameter.exp: Simple gdb booleanparameter - def get_show_string (self, pvalue):
+PASS: gdb.python/py-parameter.exp: Simple gdb booleanparameter - return "The state of the Test Parameter is " + pvalue
+PASS: gdb.python/py-parameter.exp: Simple gdb booleanparameter - def get_set_string (self):
+PASS: gdb.python/py-parameter.exp: Simple gdb booleanparameter - val = "on"
+PASS: gdb.python/py-parameter.exp: Simple gdb booleanparameter - if (self.value == False):
+PASS: gdb.python/py-parameter.exp: Simple gdb booleanparameter - val = "off"
+PASS: gdb.python/py-parameter.exp: Simple gdb booleanparameter - return "Test Parameter has been set to " + val
+PASS: gdb.python/py-parameter.exp: Simple gdb booleanparameter - def __init__ (self, name):
+PASS: gdb.python/py-parameter.exp: Simple gdb booleanparameter - super (TestParam, self).__init__ (name, gdb.COMMAND_DATA, gdb.PARAM_BOOLEAN)
+PASS: gdb.python/py-parameter.exp: Simple gdb booleanparameter - self.value = True
+PASS: gdb.python/py-parameter.exp: Simple gdb booleanparameter - test_param = TestParam ('print test-param')
+PASS: gdb.python/py-parameter.exp: Simple gdb booleanparameter - end
+PASS: gdb.python/py-parameter.exp: Test parameter value
+PASS: gdb.python/py-parameter.exp: Show parameter on
+PASS: gdb.python/py-parameter.exp: Turn off parameter
+PASS: gdb.python/py-parameter.exp: Show parameter off
+PASS: gdb.python/py-parameter.exp: Test parameter value
+PASS: gdb.python/py-parameter.exp: Test show help
+PASS: gdb.python/py-parameter.exp: Test set help
+PASS: gdb.python/py-parameter.exp: Test general help
+PASS: gdb.python/py-parameter.exp: enum gdb parameter - python
+PASS: gdb.python/py-parameter.exp: enum gdb parameter - class TestEnumParam (gdb.Parameter):
+PASS: gdb.python/py-parameter.exp: enum gdb parameter - """When set, test param does something useful. When disabled, does nothing."""
+PASS: gdb.python/py-parameter.exp: enum gdb parameter - show_doc = "Show the state of the enum"
+PASS: gdb.python/py-parameter.exp: enum gdb parameter - set_doc = "Set the state of the enum"
+PASS: gdb.python/py-parameter.exp: enum gdb parameter - def get_show_string (self, pvalue):
+PASS: gdb.python/py-parameter.exp: enum gdb parameter - return "The state of the enum is " + pvalue
+PASS: gdb.python/py-parameter.exp: enum gdb parameter - def get_set_string (self):
+PASS: gdb.python/py-parameter.exp: enum gdb parameter - return "The state of the enum has been set to " + self.value
+PASS: gdb.python/py-parameter.exp: enum gdb parameter - def __init__ (self, name):
+PASS: gdb.python/py-parameter.exp: enum gdb parameter - super (TestEnumParam, self).__init__ (name, gdb.COMMAND_DATA, gdb.PARAM_ENUM, ["one", "two"])
+PASS: gdb.python/py-parameter.exp: enum gdb parameter - self.value = "one"
+PASS: gdb.python/py-parameter.exp: enum gdb parameter - test_enum_param = TestEnumParam ('print test-enum-param')
+PASS: gdb.python/py-parameter.exp: enum gdb parameter - end
+PASS: gdb.python/py-parameter.exp: Test enum parameter value
+PASS: gdb.python/py-parameter.exp: Show parameter is initial value
+PASS: gdb.python/py-parameter.exp: Set enum to two
+PASS: gdb.python/py-parameter.exp: Show parameter is new value
+PASS: gdb.python/py-parameter.exp: Test enum parameter value
+PASS: gdb.python/py-parameter.exp: Set invalid enum parameter
+PASS: gdb.python/py-parameter.exp: file gdb parameter - python
+PASS: gdb.python/py-parameter.exp: file gdb parameter - class TestFileParam (gdb.Parameter):
+PASS: gdb.python/py-parameter.exp: file gdb parameter - """When set, test param does something useful. When disabled, does nothing."""
+PASS: gdb.python/py-parameter.exp: file gdb parameter - show_doc = "Show the name of the file"
+PASS: gdb.python/py-parameter.exp: file gdb parameter - set_doc = "Set the name of the file"
+PASS: gdb.python/py-parameter.exp: file gdb parameter - def get_show_string (self, pvalue):
+PASS: gdb.python/py-parameter.exp: file gdb parameter - return "The name of the file is " + pvalue
+PASS: gdb.python/py-parameter.exp: file gdb parameter - def get_set_string (self):
+PASS: gdb.python/py-parameter.exp: file gdb parameter - return "The name of the file has been changed to " + self.value
+PASS: gdb.python/py-parameter.exp: file gdb parameter - def __init__ (self, name):
+PASS: gdb.python/py-parameter.exp: file gdb parameter - super (TestFileParam, self).__init__ (name, gdb.COMMAND_FILES, gdb.PARAM_FILENAME)
+PASS: gdb.python/py-parameter.exp: file gdb parameter - self.value = "foo.txt"
+PASS: gdb.python/py-parameter.exp: file gdb parameter - test_file_param = TestFileParam ('test-file-param')
+PASS: gdb.python/py-parameter.exp: file gdb parameter - end
+PASS: gdb.python/py-parameter.exp: Test file parameter value
+PASS: gdb.python/py-parameter.exp: Show initial file value
+PASS: gdb.python/py-parameter.exp: Set new file parameter
+PASS: gdb.python/py-parameter.exp: Show new file value
+PASS: gdb.python/py-parameter.exp: Test new file parameter value
+PASS: gdb.python/py-parameter.exp: set test-file-param
+PASS: gdb.python/py-parameter.exp: Simple gdb booleanparameter - python
+PASS: gdb.python/py-parameter.exp: Simple gdb booleanparameter - class TestUndocParam (gdb.Parameter):
+PASS: gdb.python/py-parameter.exp: Simple gdb booleanparameter - def get_show_string (self, pvalue):
+PASS: gdb.python/py-parameter.exp: Simple gdb booleanparameter - return "The state of the Test Parameter is " + pvalue
+PASS: gdb.python/py-parameter.exp: Simple gdb booleanparameter - def get_set_string (self):
+PASS: gdb.python/py-parameter.exp: Simple gdb booleanparameter - val = "on"
+PASS: gdb.python/py-parameter.exp: Simple gdb booleanparameter - if (self.value == False):
+PASS: gdb.python/py-parameter.exp: Simple gdb booleanparameter - val = "off"
+PASS: gdb.python/py-parameter.exp: Simple gdb booleanparameter - return "Test Parameter has been set to " + val
+PASS: gdb.python/py-parameter.exp: Simple gdb booleanparameter - def __init__ (self, name):
+PASS: gdb.python/py-parameter.exp: Simple gdb booleanparameter - super (TestUndocParam, self).__init__ (name, gdb.COMMAND_DATA, gdb.PARAM_BOOLEAN)
+PASS: gdb.python/py-parameter.exp: Simple gdb booleanparameter - self.value = True
+PASS: gdb.python/py-parameter.exp: Simple gdb booleanparameter - test_undoc_param = TestUndocParam ('print test-undoc-param')
+PASS: gdb.python/py-parameter.exp: Simple gdb booleanparameter - end
+PASS: gdb.python/py-parameter.exp: Show parameter on
+PASS: gdb.python/py-parameter.exp: Turn off parameter
+PASS: gdb.python/py-parameter.exp: Show parameter off
+PASS: gdb.python/py-parameter.exp: Test parameter value
+PASS: gdb.python/py-parameter.exp: Test show help
+PASS: gdb.python/py-parameter.exp: Test set help
+PASS: gdb.python/py-parameter.exp: Test general help
+PASS: gdb.python/py-parameter.exp: Simple gdb booleanparameter - python
+PASS: gdb.python/py-parameter.exp: Simple gdb booleanparameter - class TestNodocParam (gdb.Parameter):
+PASS: gdb.python/py-parameter.exp: Simple gdb booleanparameter - def __init__ (self, name):
+PASS: gdb.python/py-parameter.exp: Simple gdb booleanparameter - super (TestNodocParam, self).__init__ (name, gdb.COMMAND_DATA, gdb.PARAM_BOOLEAN)
+PASS: gdb.python/py-parameter.exp: Simple gdb booleanparameter - self.value = True
+PASS: gdb.python/py-parameter.exp: Simple gdb booleanparameter - test_nodoc_param = TestNodocParam ('print test-nodoc-param')
+PASS: gdb.python/py-parameter.exp: Simple gdb booleanparameter - end
+PASS: gdb.python/py-parameter.exp: Show parameter on
+PASS: gdb.python/py-parameter.exp: Turn off parameter
+PASS: gdb.python/py-parameter.exp: Show parameter off
+PASS: gdb.python/py-parameter.exp: Test parameter value
+PASS: gdb.python/py-parameter.exp: Test show help
+PASS: gdb.python/py-parameter.exp: Test set help
+PASS: gdb.python/py-parameter.exp: Test general help
+PASS: gdb.python/py-parameter.exp: Simple gdb booleanparameter - python
+PASS: gdb.python/py-parameter.exp: Simple gdb booleanparameter - class TestParam (gdb.Parameter):
+PASS: gdb.python/py-parameter.exp: Simple gdb booleanparameter - """When enabled, test param does something useful. When disabled, does nothing."""
+PASS: gdb.python/py-parameter.exp: Simple gdb booleanparameter - show_doc = "State of the Test Parameter"
+PASS: gdb.python/py-parameter.exp: Simple gdb booleanparameter - set_doc = "Set the state of the Test Parameter"
+PASS: gdb.python/py-parameter.exp: Simple gdb booleanparameter - def __init__ (self, name):
+PASS: gdb.python/py-parameter.exp: Simple gdb booleanparameter - super (TestParam, self).__init__ (name, gdb.COMMAND_DATA, gdb.PARAM_BOOLEAN)
+PASS: gdb.python/py-parameter.exp: Simple gdb booleanparameter - self.value = True
+PASS: gdb.python/py-parameter.exp: Simple gdb booleanparameter - test_param = TestParam ('print test-param')
+PASS: gdb.python/py-parameter.exp: Simple gdb booleanparameter - end
+PASS: gdb.python/py-parameter.exp: Test parameter value
+PASS: gdb.python/py-parameter.exp: Show parameter on
+PASS: gdb.python/py-parameter.exp: Turn off parameter
+PASS: gdb.python/py-parameter.exp: Show parameter off
+PASS: gdb.python/py-parameter.exp: Test parameter value
+PASS: gdb.python/py-parameter.exp: Test show help
+PASS: gdb.python/py-parameter.exp: Test set help
+PASS: gdb.python/py-parameter.exp: Test general help
+Running ./gdb.python/py-pp-maint.exp ...
+PASS: gdb.python/py-pp-maint.exp: b 77
+PASS: gdb.python/py-pp-maint.exp: continue
+PASS: gdb.python/py-pp-maint.exp: info pretty-printer
+PASS: gdb.python/py-pp-maint.exp: info pretty-printer global .*function
+PASS: gdb.python/py-pp-maint.exp: info pretty-printer .* pp-test
+PASS: gdb.python/py-pp-maint.exp: print flt enabled #1
+PASS: gdb.python/py-pp-maint.exp: print ss enabled #1
+PASS: gdb.python/py-pp-maint.exp: disable pretty-printer
+PASS: gdb.python/py-pp-maint.exp: enable pretty-printer
+PASS: gdb.python/py-pp-maint.exp: disable pretty-printer global
+PASS: gdb.python/py-pp-maint.exp: enable pretty-printer
+PASS: gdb.python/py-pp-maint.exp: disable pretty-printer global lookup_function_lookup_test
+PASS: gdb.python/py-pp-maint.exp: disable pretty-printer global pp-test;.*
+PASS: gdb.python/py-pp-maint.exp: info pretty-printer global .*function
+PASS: gdb.python/py-pp-maint.exp: info pretty-printer .* pp-test
+PASS: gdb.python/py-pp-maint.exp: print flt disabled
+PASS: gdb.python/py-pp-maint.exp: print ss disabled
+PASS: gdb.python/py-pp-maint.exp: enable pretty-printer global lookup_function_lookup_test
+PASS: gdb.python/py-pp-maint.exp: enable pretty-printer global pp-test
+PASS: gdb.python/py-pp-maint.exp: enable pretty-printer global pp-test;.*ss.*
+PASS: gdb.python/py-pp-maint.exp: enable pretty-printer global pp-test;.*s.*
+PASS: gdb.python/py-pp-maint.exp: enable pretty-printer global pp-test;.*
+PASS: gdb.python/py-pp-maint.exp: info pretty-printer
+PASS: gdb.python/py-pp-maint.exp: print flt re-enabled
+PASS: gdb.python/py-pp-maint.exp: print ss re-enabled
+PASS: gdb.python/py-pp-maint.exp: print FLAG_1
+PASS: gdb.python/py-pp-maint.exp: print FLAG_1 | FLAG_3
+PASS: gdb.python/py-pp-maint.exp: print FLAG_1 | 8
+Running ./gdb.python/py-prettyprint.exp ...
+PASS: gdb.python/py-prettyprint.exp: set print pretty on
+PASS: gdb.python/py-prettyprint.exp: b 351
+PASS: gdb.python/py-prettyprint.exp: continue
+PASS: gdb.python/py-prettyprint.exp: python exec (open ('py-prettyprint.py').read ())
+PASS: gdb.python/py-prettyprint.exp: print ss
+PASS: gdb.python/py-prettyprint.exp: print ssa[1]
+PASS: gdb.python/py-prettyprint.exp: print ssa
+PASS: gdb.python/py-prettyprint.exp: print arraystruct
+PASS: gdb.python/py-prettyprint.exp: print ns2
+PASS: gdb.python/py-prettyprint.exp: print x
+PASS: gdb.python/py-prettyprint.exp: print cstring
+PASS: gdb.python/py-prettyprint.exp: print estring
+PASS: gdb.python/py-prettyprint.exp: python pp_ls_encoding = 'UTF-8'
+PASS: gdb.python/py-prettyprint.exp: print estring2
+PASS: gdb.python/py-prettyprint.exp: set python print-stack full
+PASS: gdb.python/py-prettyprint.exp: print hint_error
+PASS: gdb.python/py-prettyprint.exp: print c
+PASS: gdb.python/py-prettyprint.exp: print nstype
+PASS: gdb.python/py-prettyprint.exp: set print pretty off
+PASS: gdb.python/py-prettyprint.exp: print nstype on one line
+PASS: gdb.python/py-prettyprint.exp: continue until exit
+PASS: gdb.python/py-prettyprint.exp: set print pretty on
+PASS: gdb.python/py-prettyprint.exp: b 351
+PASS: gdb.python/py-prettyprint.exp: continue
+PASS: gdb.python/py-prettyprint.exp: python exec (open ('py-prettyprint.py').read ())
+PASS: gdb.python/py-prettyprint.exp: print ss
+PASS: gdb.python/py-prettyprint.exp: print ssa[1]
+PASS: gdb.python/py-prettyprint.exp: print ssa
+PASS: gdb.python/py-prettyprint.exp: print arraystruct
+PASS: gdb.python/py-prettyprint.exp: print cps
+PASS: gdb.python/py-prettyprint.exp: print cpss
+PASS: gdb.python/py-prettyprint.exp: print cpssa[0]
+PASS: gdb.python/py-prettyprint.exp: print cpssa[1]
+PASS: gdb.python/py-prettyprint.exp: print cpssa
+PASS: gdb.python/py-prettyprint.exp: print sss
+PASS: gdb.python/py-prettyprint.exp: print ref
+PASS: gdb.python/py-prettyprint.exp: print derived
+PASS: gdb.python/py-prettyprint.exp: print ns
+PASS: gdb.python/py-prettyprint.exp:
+PASS: gdb.python/py-prettyprint.exp: print ns
+PASS: gdb.python/py-prettyprint.exp:
+PASS: gdb.python/py-prettyprint.exp: print ns
+PASS: gdb.python/py-prettyprint.exp:
+PASS: gdb.python/py-prettyprint.exp: print ns2
+PASS: gdb.python/py-prettyprint.exp: print x
+PASS: gdb.python/py-prettyprint.exp: print cstring
+PASS: gdb.python/py-prettyprint.exp: print estring
+PASS: gdb.python/py-prettyprint.exp: python pp_ls_encoding = 'UTF-8'
+PASS: gdb.python/py-prettyprint.exp: print estring2
+PASS: gdb.python/py-prettyprint.exp: set python print-stack full
+PASS: gdb.python/py-prettyprint.exp: print hint_error
+PASS: gdb.python/py-prettyprint.exp: print c
+PASS: gdb.python/py-prettyprint.exp: print nstype
+PASS: gdb.python/py-prettyprint.exp: set print pretty off
+PASS: gdb.python/py-prettyprint.exp: print nstype on one line
+PASS: gdb.python/py-prettyprint.exp: continue until exit
+PASS: gdb.python/py-prettyprint.exp: python exec (open ('py-prettyprint.py').read ())
+PASS: gdb.python/py-prettyprint.exp: continue to breakpoint: eval-break
+PASS: gdb.python/py-prettyprint.exp: info locals
+PASS: gdb.python/py-prettyprint.exp: b 351
+PASS: gdb.python/py-prettyprint.exp: continue
+PASS: gdb.python/py-prettyprint.exp: print ss enabled #1
+PASS: gdb.python/py-prettyprint.exp: python disable_lookup_function ()
+PASS: gdb.python/py-prettyprint.exp: print ss disabled
+PASS: gdb.python/py-prettyprint.exp: python enable_lookup_function ()
+PASS: gdb.python/py-prettyprint.exp: print ss enabled #2
+Running ./gdb.python/py-progspace.exp ...
+PASS: gdb.python/py-progspace.exp: current progspace filename (None)
+PASS: gdb.python/py-progspace.exp: python print (gdb.progspaces())
+PASS: gdb.python/py-progspace.exp: current progspace filename (py-progspace)
+Running ./gdb.python/py-prompt.exp ...
+Running ./gdb.python/py-section-script.exp ...
+PASS: gdb.python/py-section-script.exp: set auto-load safe-path
+PASS: gdb.python/py-section-script.exp: info auto-load python-scripts
+PASS: gdb.python/py-section-script.exp: info auto-load python-scripts py-section-script
+PASS: gdb.python/py-section-script.exp: info auto-load python-scripts no-script-matches-this
+PASS: gdb.python/py-section-script.exp: b 51
+PASS: gdb.python/py-section-script.exp: continue
+PASS: gdb.python/py-section-script.exp: print ss
+Running ./gdb.python/py-shared.exp ...
+PASS: gdb.python/py-shared.exp: func1 address
+PASS: gdb.python/py-shared.exp: Aquire func1 address
+PASS: gdb.python/py-shared.exp: test func1 solib location
+PASS: gdb.python/py-shared.exp: main address
+PASS: gdb.python/py-shared.exp: Aquire main address
+PASS: gdb.python/py-shared.exp: test main solib location
+Running ./gdb.python/py-strfns.exp ...
+PASS: gdb.python/py-strfns.exp: p $_streq (str1, str2)
+PASS: gdb.python/py-strfns.exp: p $_streq (str1, str3)
+PASS: gdb.python/py-strfns.exp: p $_strlen (str1)
+PASS: gdb.python/py-strfns.exp: p $_strlen (buf1)
+PASS: gdb.python/py-strfns.exp: p $_memeq (buf1, buf2, 4)
+PASS: gdb.python/py-strfns.exp: p $_memeq (buf1, buf3, 4)
+PASS: gdb.python/py-strfns.exp: p $_regex (str1, "Hello")
+PASS: gdb.python/py-strfns.exp: p $_regex (str1, "Help")
+PASS: gdb.python/py-strfns.exp: p $_regex (str1, "^Hello")
+PASS: gdb.python/py-strfns.exp: p $_regex (str1, "^Hello.$")
+PASS: gdb.python/py-strfns.exp: condition $bpnum $_streq (arg, "Goodbye.")
+PASS: gdb.python/py-strfns.exp: continue to breakpoint: Break func here.
+PASS: gdb.python/py-strfns.exp: p arg
+PASS: gdb.python/py-strfns.exp: condition $bpnum $_memeq (arg, buf3, 4)
+PASS: gdb.python/py-strfns.exp: continue to breakpoint: Break bfunc here.
+PASS: gdb.python/py-strfns.exp: p /d {char[4]} arg
+PASS: gdb.python/py-strfns.exp: save a corefile
+FAIL: gdb.python/py-strfns.exp: re-load generated corefile
+Running ./gdb.python/py-symbol.exp ...
+PASS: gdb.python/py-symbol.exp: Lookup main
+PASS: gdb.python/py-symbol.exp: Test main_func.is_function
+PASS: gdb.python/py-symbol.exp: Test lookup_global_symbol("junk")
+PASS: gdb.python/py-symbol.exp: print value of main
+PASS: gdb.python/py-symbol.exp: print line number of qq
+PASS: gdb.python/py-symbol.exp: print value of qq
+PASS: gdb.python/py-symbol.exp: print whether qq needs a frame
+PASS: gdb.python/py-symbol.exp: continue to breakpoint: Block break here.
+PASS: gdb.python/py-symbol.exp: Test arg.is_variable
+PASS: gdb.python/py-symbol.exp: Test arg.is_constant
+PASS: gdb.python/py-symbol.exp: Test arg.is_argument
+PASS: gdb.python/py-symbol.exp: Test arg.is_function
+PASS: gdb.python/py-symbol.exp: Test func.is_variable
+PASS: gdb.python/py-symbol.exp: Test func.is_constant
+PASS: gdb.python/py-symbol.exp: Test func.is_argument
+PASS: gdb.python/py-symbol.exp: Test func.is_function
+PASS: gdb.python/py-symbol.exp: Test func.name
+PASS: gdb.python/py-symbol.exp: Test func.print_name
+PASS: gdb.python/py-symbol.exp: Test func.linkage_name
+PASS: gdb.python/py-symbol.exp: Test func.addr_class
+PASS: gdb.python/py-symbol.exp: continue to breakpoint: Break at end.
+PASS: gdb.python/py-symbol.exp: Test a.is_variable
+PASS: gdb.python/py-symbol.exp: Test a.is_constant
+PASS: gdb.python/py-symbol.exp: Test a.is_argument
+PASS: gdb.python/py-symbol.exp: Test a.is_function
+PASS: gdb.python/py-symbol.exp: Test a.addr_class
+PASS: gdb.python/py-symbol.exp: try to print value of a without a frame
+PASS: gdb.python/py-symbol.exp: print value of a
+PASS: gdb.python/py-symbol.exp: print whether a needs a frame
+PASS: gdb.python/py-symbol.exp: Test t.is_variable
+PASS: gdb.python/py-symbol.exp: Test t.is_constant
+PASS: gdb.python/py-symbol.exp: Test t.is_argument
+PASS: gdb.python/py-symbol.exp: Test t.is_function
+PASS: gdb.python/py-symbol.exp: Test t.addr_class
+PASS: gdb.python/py-symbol.exp: Get type
+PASS: gdb.python/py-symbol.exp: Get symtab
+PASS: gdb.python/py-symbol.exp: continue to breakpoint: Break in class.
+PASS: gdb.python/py-symbol.exp: Test func.is_variable
+PASS: gdb.python/py-symbol.exp: Test func.is_constant
+PASS: gdb.python/py-symbol.exp: Test func.is_argument
+PASS: gdb.python/py-symbol.exp: Test func.is_function
+PASS: gdb.python/py-symbol.exp: Test func.name
+PASS: gdb.python/py-symbol.exp: Test func.print_name
+PASS: gdb.python/py-symbol.exp: Test func.linkage_name
+PASS: gdb.python/py-symbol.exp: Test func.addr_class
+PASS: gdb.python/py-symbol.exp: continue to breakpoint: Break at end.
+PASS: gdb.python/py-symbol.exp: Test symbol validity
+PASS: gdb.python/py-symbol.exp: Test symbol validity
+PASS: gdb.python/py-symbol.exp: Test symbol destructor
+Running ./gdb.python/py-symtab.exp ...
+PASS: gdb.python/py-symtab.exp: continue to breakpoint: Block break here.
+PASS: gdb.python/py-symtab.exp: Test symtab
+PASS: gdb.python/py-symtab.exp: Test sal.pc
+PASS: gdb.python/py-symtab.exp: Test sal.last
+PASS: gdb.python/py-symtab.exp: Test sal.line
+PASS: gdb.python/py-symtab.exp: Test sal.is_valid
+PASS: gdb.python/py-symtab.exp: Test symtab.filename
+PASS: gdb.python/py-symtab.exp: Test symtab.objfile
+PASS: gdb.python/py-symtab.exp: Test symtab.fullname
+PASS: gdb.python/py-symtab.exp: Test symtab.is_valid()
+PASS: gdb.python/py-symtab.exp: Test qq in global symbols
+PASS: gdb.python/py-symtab.exp: Test func in global symbols
+PASS: gdb.python/py-symtab.exp: Test main in global symbols
+PASS: gdb.python/py-symtab.exp: Test int in static symbols
+PASS: gdb.python/py-symtab.exp: Test char in static symbols
+PASS: gdb.python/py-symtab.exp: Test simple_struct in static symbols
+PASS: gdb.python/py-symtab.exp: Test sal.is_valid
+PASS: gdb.python/py-symtab.exp: Test symtab.is_valid()
+PASS: gdb.python/py-symtab.exp: Test sal destructor
+PASS: gdb.python/py-symtab.exp: Test symtab destructor
+Running ./gdb.python/py-template.exp ...
+PASS: gdb.python/py-template.exp: print (foo)
+PASS: gdb.python/py-template.exp: python foo = gdb.history(0)
+PASS: gdb.python/py-template.exp: const int
+PASS: gdb.python/py-template.exp: print (foo)
+PASS: gdb.python/py-template.exp: python foo = gdb.history(0)
+PASS: gdb.python/py-template.exp: volatile int
+PASS: gdb.python/py-template.exp: print (foo)
+PASS: gdb.python/py-template.exp: python foo = gdb.history(0)
+PASS: gdb.python/py-template.exp: const int &
+PASS: gdb.python/py-template.exp: print (foo)
+PASS: gdb.python/py-template.exp: python foo = gdb.history(0)
+PASS: gdb.python/py-template.exp: volatile int &
+PASS: gdb.python/py-template.exp: print (foo)
+PASS: gdb.python/py-template.exp: python foo = gdb.history(0)
+PASS: gdb.python/py-template.exp: volatile int * const
+PASS: gdb.python/py-template.exp: print (foo)
+PASS: gdb.python/py-template.exp: python foo = gdb.history(0)
+PASS: gdb.python/py-template.exp: volatile int * const *
+PASS: gdb.python/py-template.exp: print (foo)
+PASS: gdb.python/py-template.exp: python foo = gdb.history(0)
+PASS: gdb.python/py-template.exp: const int * volatile
+PASS: gdb.python/py-template.exp: print (foo)
+PASS: gdb.python/py-template.exp: python foo = gdb.history(0)
+PASS: gdb.python/py-template.exp: const int * volatile * const * volatile *
+Running ./gdb.python/python.exp ...
+PASS: gdb.python/python.exp: multi-line python command - python
+PASS: gdb.python/python.exp: multi-line python command - print (23)
+PASS: gdb.python/python.exp: multi-line python command - end
+PASS: gdb.python/python.exp: show python command - define zzq
+PASS: gdb.python/python.exp: show python command - python
+PASS: gdb.python/python.exp: show python command - print (23)
+PASS: gdb.python/python.exp: show python command - end
+PASS: gdb.python/python.exp: show python command - end
+PASS: gdb.python/python.exp: show python command - show user zzq
+PASS: gdb.python/python.exp: indented multi-line python command - python
+PASS: gdb.python/python.exp: indented multi-line python command - def foo ():
+PASS: gdb.python/python.exp: indented multi-line python command - print ('hello, world!')
+PASS: gdb.python/python.exp: indented multi-line python command - foo ()
+PASS: gdb.python/python.exp: indented multi-line python command - end
+PASS: gdb.python/python.exp: source source2.py
+PASS: gdb.python/python.exp: source -s source2.py
+PASS: gdb.python/python.exp: python print (gdb.current_objfile())
+PASS: gdb.python/python.exp: python print (gdb.objfiles())
+PASS: gdb.python/python.exp: pythonX.Y/lib-dynload/*.so
+PASS: gdb.python/python.exp: python x = gdb.execute('printf "%d", 23', to_string = True)
+PASS: gdb.python/python.exp: python print (x)
+PASS: gdb.python/python.exp: post event insertion - python
+PASS: gdb.python/python.exp: post event insertion - someVal = 0
+PASS: gdb.python/python.exp: post event insertion - class Foo(object):
+PASS: gdb.python/python.exp: post event insertion - def __call__(self):
+PASS: gdb.python/python.exp: post event insertion - global someVal
+PASS: gdb.python/python.exp: post event insertion - someVal += 1
+PASS: gdb.python/python.exp: post event insertion - gdb.post_event(Foo())
+PASS: gdb.python/python.exp: post event insertion - end
+PASS: gdb.python/python.exp: test post event execution
+PASS: gdb.python/python.exp: Test non callable class
+PASS: gdb.python/python.exp: show height
+PASS: gdb.python/python.exp: set height 10
+PASS: gdb.python/python.exp: verify pagination beforehand
+PASS: gdb.python/python.exp: verify pagination beforehand: q
+PASS: gdb.python/python.exp: gdb.execute does not page
+PASS: gdb.python/python.exp: verify pagination afterwards
+PASS: gdb.python/python.exp: verify pagination afterwards: q
+PASS: gdb.python/python.exp: set height 0
+PASS: gdb.python/python.exp: collect help from uiout
+PASS: gdb.python/python.exp: verify help to uiout
+PASS: gdb.python/python.exp: Attempt to aquire thread with no inferior
+PASS: gdb.python/python.exp: Ensure that no threads are returned
+PASS: gdb.python/python.exp: register atexit function - python
+PASS: gdb.python/python.exp: register atexit function - import atexit
+PASS: gdb.python/python.exp: register atexit function - def printit(arg):
+PASS: gdb.python/python.exp: register atexit function - print (arg)
+PASS: gdb.python/python.exp: register atexit function - atexit.register(printit, 'good bye world')
+PASS: gdb.python/python.exp: register atexit function - end
+PASS: gdb.python/python.exp: atexit handling
+PASS: gdb.python/python.exp: test decode_line no source named main
+PASS: gdb.python/python.exp: test decode_line current location
+PASS: gdb.python/python.exp: Test decode_line current location
+PASS: gdb.python/python.exp: Test decode_line expression parse
+PASS: gdb.python/python.exp: Test decode_line current location
+PASS: gdb.python/python.exp: Test decode_line current locationn filename
+PASS: gdb.python/python.exp: Test decode_line current location line number
+PASS: gdb.python/python.exp: test decode_line python.c:26
+PASS: gdb.python/python.exp: Test decode_line python.c:26 length
+PASS: gdb.python/python.exp: Test decode_line expression parse
+PASS: gdb.python/python.exp: Test decode_line python.c:26 length
+PASS: gdb.python/python.exp: Test decode_line python.c:26 filename
+PASS: gdb.python/python.exp: Test decode_line python.c:26 line number
+PASS: gdb.python/python.exp: test decode_line randomfunc
+PASS: gdb.python/python.exp: test decode_line func1()
+PASS: gdb.python/python.exp: Test decode_line func1 length
+PASS: gdb.python/python.exp: Test decode_line func1 length
+PASS: gdb.python/python.exp: Test decode_line func1 filename
+PASS: gdb.python/python.exp: Test decode_line func1 line number
+PASS: gdb.python/python.exp: test decode_line func1,func2
+PASS: gdb.python/python.exp: stop at comma in linespec
+PASS: gdb.python/python.exp: Test stderr location
+PASS: gdb.python/python.exp: Test stdout location
+PASS: gdb.python/python.exp: Test default write
+PASS: gdb.python/python.exp: Test stderr write
+PASS: gdb.python/python.exp: Test stdout write
+PASS: gdb.python/python.exp: Test stdlog write
+PASS: gdb.python/python.exp: Test print-backtrace show setting. Default is message.
+PASS: gdb.python/python.exp: Test print-backtrace set setting
+PASS: gdb.python/python.exp: Test print-backtrace show setting to full.
+PASS: gdb.python/python.exp: prompt substitution - python
+PASS: gdb.python/python.exp: prompt substitution - someCounter = 0
+PASS: gdb.python/python.exp: prompt substitution - def prompt(current):
+PASS: gdb.python/python.exp: prompt substitution - global someCounter
+PASS: gdb.python/python.exp: prompt substitution - if (current == "testfake "):
+PASS: gdb.python/python.exp: prompt substitution - return None
+PASS: gdb.python/python.exp: prompt substitution - someCounter = someCounter + 1
+PASS: gdb.python/python.exp: prompt substitution - return "py prompt " + str (someCounter) + " "
+PASS: gdb.python/python.exp: prompt substitution - end
+PASS: gdb.python/python.exp: prompt substitution readline - python
+PASS: gdb.python/python.exp: prompt substitution readline - pCounter = 0
+PASS: gdb.python/python.exp: prompt substitution readline - def program_prompt(current):
+PASS: gdb.python/python.exp: prompt substitution readline - global pCounter
+PASS: gdb.python/python.exp: prompt substitution readline - if (current == ">"):
+PASS: gdb.python/python.exp: prompt substitution readline - pCounter = pCounter + 1
+PASS: gdb.python/python.exp: prompt substitution readline - return "python line " + str (pCounter) + ": "
+PASS: gdb.python/python.exp: prompt substitution readline - return None
+PASS: gdb.python/python.exp: prompt substitution readline - end
+PASS: gdb.python/python.exp: set hook
+PASS: gdb.python/python.exp: set prompt testfake
+PASS: gdb.python/python.exp: show prompt shows guarded prompt
+PASS: gdb.python/python.exp: set prompt blah overriden
+PASS: gdb.python/python.exp: Delete old hook
+PASS: gdb.python/python.exp: set default prompt
+PASS: gdb.python/python.exp: set programming hook
+PASS: gdb.python/python.exp: readline secondary are not substituted
+PASS: gdb.python/python.exp: end programming
+PASS: gdb.python/python.exp: prompt substitution readline - python
+PASS: gdb.python/python.exp: prompt substitution readline - import gdb.command.prompt
+PASS: gdb.python/python.exp: prompt substitution readline - end
+PASS: gdb.python/python.exp: set basic extended prompt
+PASS: gdb.python/python.exp: set extended prompt working directory
+PASS: gdb.python/python.exp: set extended prompt parameter
+PASS: gdb.python/python.exp: Test print-backtrace show setting. Default is message.
+PASS: gdb.python/python.exp: Test print-backtrace set setting
+PASS: gdb.python/python.exp: Test print-backtrace show setting to full.
+PASS: gdb.python/python.exp: Test print-backtrace set setting
+PASS: gdb.python/python.exp: Test print-backtrace show setting to none.
+PASS: gdb.python/python.exp: Test print-backtrace set setting
+PASS: gdb.python/python.exp: prompt substitution readline - python
+PASS: gdb.python/python.exp: prompt substitution readline - pCounter = 0
+PASS: gdb.python/python.exp: prompt substitution readline - def error_prompt(current):
+PASS: gdb.python/python.exp: prompt substitution readline - raise RuntimeError("Python exception called")
+PASS: gdb.python/python.exp: prompt substitution readline - end
+PASS: gdb.python/python.exp: set hook
+PASS: gdb.python/python.exp: set the hook to default
+PASS: gdb.python/python.exp: Test print-backtrace set setting
+PASS: gdb.python/python.exp: set hook
+PASS: gdb.python/python.exp: set the hook to default
+PASS: gdb.python/python.exp: Get line number of func2 call site
+PASS: gdb.python/python.exp: Test find_pc_line at func2 call site
+PASS: gdb.python/python.exp: Step into func2
+PASS: gdb.python/python.exp: Step out of func2
+PASS: gdb.python/python.exp: Test find_pc_line with resume address
+Running ./gdb.python/py-type.exp ...
+PASS: gdb.python/py-type.exp: lang_c: continue to breakpoint: break to inspect struct and array.
+PASS: gdb.python/py-type.exp: lang_c: test_fields: c typedef field list
+PASS: gdb.python/py-type.exp: lang_c: test_fields: print value (st)
+PASS: gdb.python/py-type.exp: lang_c: test_fields: get value (st) from history
+PASS: gdb.python/py-type.exp: lang_c: test_fields: get fields from st.type
+PASS: gdb.python/py-type.exp: lang_c: test_fields: Check number of fields (st)
+PASS: gdb.python/py-type.exp: lang_c: test_fields: Check structure field a name
+PASS: gdb.python/py-type.exp: lang_c: test_fields: Check structure field b name
+PASS: gdb.python/py-type.exp: lang_c: test_fields: Check that dir includes name
+PASS: gdb.python/py-type.exp: lang_c: test_fields: Check number of fields (st.type)
+PASS: gdb.python/py-type.exp: lang_c: test_fields: Check fields lookup by name
+PASS: gdb.python/py-type.exp: lang_c: test_fields: Check fields iteration over values
+PASS: gdb.python/py-type.exp: lang_c: test_fields: Check fields items list
+PASS: gdb.python/py-type.exp: lang_c: test_fields: Check field name exists test
+PASS: gdb.python/py-type.exp: lang_c: test_fields: Check field name nonexists test
+PASS: gdb.python/py-type.exp: lang_c: test_fields: Check conversion to bool
+PASS: gdb.python/py-type.exp: lang_c: test_fields: python print (len (st.type['a'].type))
+PASS: gdb.python/py-type.exp: lang_c: test_fields: python print (st.type['a'].type.has_key ('x'))
+PASS: gdb.python/py-type.exp: lang_c: test_fields: python print (st.type['a'].type.keys ())
+PASS: gdb.python/py-type.exp: lang_c: test_fields: python print (st.type['a'].type['x'])
+PASS: gdb.python/py-type.exp: lang_c: test_fields: python print (not not st.type['a'].type)
+PASS: gdb.python/py-type.exp: lang_c: test_fields: print value (ar)
+PASS: gdb.python/py-type.exp: lang_c: test_fields: get value (ar) from history
+PASS: gdb.python/py-type.exp: lang_c: test_fields: python fields = ar.type.fields()
+PASS: gdb.python/py-type.exp: lang_c: test_fields: Check the number of fields
+PASS: gdb.python/py-type.exp: lang_c: test_fields: Check array field type
+PASS: gdb.python/py-type.exp: lang_c: test_fields: cast to array with one argument
+PASS: gdb.python/py-type.exp: lang_c: test_fields: cast to array with two arguments
+PASS: gdb.python/py-type.exp: lang_c: test_fields: python print (ar[0].type == ar[0].type)
+PASS: gdb.python/py-type.exp: lang_c: test_fields: print value (vec_data_1)
+PASS: gdb.python/py-type.exp: lang_c: test_fields: get value (vec_data_1) from history
+PASS: gdb.python/py-type.exp: lang_c: test_fields: print value (vec_data_2)
+PASS: gdb.python/py-type.exp: lang_c: test_fields: get value (vec_data_2) from history
+PASS: gdb.python/py-type.exp: lang_c: test_fields: set vec1
+PASS: gdb.python/py-type.exp: lang_c: test_fields: cast to vector with one argument
+PASS: gdb.python/py-type.exp: lang_c: test_fields: set vec2
+PASS: gdb.python/py-type.exp: lang_c: test_fields: cast to vector with two arguments
+PASS: gdb.python/py-type.exp: lang_c: test_fields: python print vec1 == vec2
+PASS: gdb.python/py-type.exp: lang_c: test_fields: set vec3
+PASS: gdb.python/py-type.exp: lang_c: test_fields: python print vec1 == vec3
+PASS: gdb.python/py-type.exp: lang_c: test_enum: print value (e)
+PASS: gdb.python/py-type.exp: lang_c: test_enum: get value (e) from history
+PASS: gdb.python/py-type.exp: lang_c: test_enum: extract type fields from e
+PASS: gdb.python/py-type.exp: lang_c: test_enum: Check the number of enum fields
+PASS: gdb.python/py-type.exp: lang_c: test_enum: Check enum field[0] name
+PASS: gdb.python/py-type.exp: lang_c: test_enum: Check enum field[1]name
+PASS: gdb.python/py-type.exp: lang_c: test_enum: Check the number of type fields
+PASS: gdb.python/py-type.exp: lang_c: test_enum: Check enum field lookup by name (v1)
+PASS: gdb.python/py-type.exp: lang_c: test_enum: Check enum field lookup by name (v2)
+PASS: gdb.python/py-type.exp: lang_c: test_enum: Check num fields iteration over values
+PASS: gdb.python/py-type.exp: lang_c: test_enum: Check enum fields items list
+PASS: gdb.python/py-type.exp: lang_cpp: continue to breakpoint: break to inspect struct and array.
+PASS: gdb.python/py-type.exp: lang_cpp: test_fields: c++ typedef field list
+PASS: gdb.python/py-type.exp: lang_cpp: test_fields: print value (c)
+PASS: gdb.python/py-type.exp: lang_cpp: test_fields: get value (c) from history
+PASS: gdb.python/py-type.exp: lang_cpp: test_fields: get fields from c.type
+PASS: gdb.python/py-type.exp: lang_cpp: test_fields: Check number of fields (c)
+PASS: gdb.python/py-type.exp: lang_cpp: test_fields: Check class field c name
+PASS: gdb.python/py-type.exp: lang_cpp: test_fields: Check class field d name
+PASS: gdb.python/py-type.exp: lang_cpp: test_fields: python print (c.type == gdb.parse_and_eval('d').type)
+PASS: gdb.python/py-type.exp: lang_cpp: test_fields: python print (c.type == gdb.parse_and_eval('d').type.fields()[0].type)
+PASS: gdb.python/py-type.exp: lang_cpp: test_fields: print value (st)
+PASS: gdb.python/py-type.exp: lang_cpp: test_fields: get value (st) from history
+PASS: gdb.python/py-type.exp: lang_cpp: test_fields: get fields from st.type
+PASS: gdb.python/py-type.exp: lang_cpp: test_fields: Check number of fields (st)
+PASS: gdb.python/py-type.exp: lang_cpp: test_fields: Check structure field a name
+PASS: gdb.python/py-type.exp: lang_cpp: test_fields: Check structure field b name
+PASS: gdb.python/py-type.exp: lang_cpp: test_fields: Check that dir includes name
+PASS: gdb.python/py-type.exp: lang_cpp: test_fields: Check number of fields (st.type)
+PASS: gdb.python/py-type.exp: lang_cpp: test_fields: Check fields lookup by name
+PASS: gdb.python/py-type.exp: lang_cpp: test_fields: Check fields iteration over values
+PASS: gdb.python/py-type.exp: lang_cpp: test_fields: Check fields items list
+PASS: gdb.python/py-type.exp: lang_cpp: test_fields: Check field name exists test
+PASS: gdb.python/py-type.exp: lang_cpp: test_fields: Check field name nonexists test
+PASS: gdb.python/py-type.exp: lang_cpp: test_fields: Check conversion to bool
+PASS: gdb.python/py-type.exp: lang_cpp: test_fields: python print (len (st.type['a'].type))
+PASS: gdb.python/py-type.exp: lang_cpp: test_fields: python print (st.type['a'].type.has_key ('x'))
+PASS: gdb.python/py-type.exp: lang_cpp: test_fields: python print (st.type['a'].type.keys ())
+PASS: gdb.python/py-type.exp: lang_cpp: test_fields: python print (st.type['a'].type['x'])
+PASS: gdb.python/py-type.exp: lang_cpp: test_fields: python print (not not st.type['a'].type)
+PASS: gdb.python/py-type.exp: lang_cpp: test_fields: print value (ar)
+PASS: gdb.python/py-type.exp: lang_cpp: test_fields: get value (ar) from history
+PASS: gdb.python/py-type.exp: lang_cpp: test_fields: python fields = ar.type.fields()
+PASS: gdb.python/py-type.exp: lang_cpp: test_fields: Check the number of fields
+PASS: gdb.python/py-type.exp: lang_cpp: test_fields: Check array field type
+PASS: gdb.python/py-type.exp: lang_cpp: test_fields: cast to array with one argument
+PASS: gdb.python/py-type.exp: lang_cpp: test_fields: cast to array with two arguments
+PASS: gdb.python/py-type.exp: lang_cpp: test_fields: python print (ar[0].type == ar[0].type)
+PASS: gdb.python/py-type.exp: lang_cpp: test_fields: print value (vec_data_1)
+PASS: gdb.python/py-type.exp: lang_cpp: test_fields: get value (vec_data_1) from history
+PASS: gdb.python/py-type.exp: lang_cpp: test_fields: print value (vec_data_2)
+PASS: gdb.python/py-type.exp: lang_cpp: test_fields: get value (vec_data_2) from history
+PASS: gdb.python/py-type.exp: lang_cpp: test_fields: set vec1
+PASS: gdb.python/py-type.exp: lang_cpp: test_fields: cast to vector with one argument
+PASS: gdb.python/py-type.exp: lang_cpp: test_fields: set vec2
+PASS: gdb.python/py-type.exp: lang_cpp: test_fields: cast to vector with two arguments
+PASS: gdb.python/py-type.exp: lang_cpp: test_fields: python print vec1 == vec2
+PASS: gdb.python/py-type.exp: lang_cpp: test_fields: set vec3
+PASS: gdb.python/py-type.exp: lang_cpp: test_fields: python print vec1 == vec3
+PASS: gdb.python/py-type.exp: lang_cpp: test_base_class: print value (d)
+PASS: gdb.python/py-type.exp: lang_cpp: test_base_class: get value (d) from history
+PASS: gdb.python/py-type.exp: lang_cpp: test_base_class: extract type fields from d
+PASS: gdb.python/py-type.exp: lang_cpp: test_base_class: Check the number of fields
+PASS: gdb.python/py-type.exp: lang_cpp: test_base_class: Check base class (fields[0])
+PASS: gdb.python/py-type.exp: lang_cpp: test_base_class: Check base class (fields[1])
+PASS: gdb.python/py-type.exp: lang_cpp: test_range: on ranged value: print value (ar)
+PASS: gdb.python/py-type.exp: lang_cpp: test_range: on ranged value: get value (ar) from history
+PASS: gdb.python/py-type.exp: lang_cpp: test_range: on ranged value: Check correct tuple length
+PASS: gdb.python/py-type.exp: lang_cpp: test_range: on ranged value: Check range low bound
+PASS: gdb.python/py-type.exp: lang_cpp: test_range: on ranged value: Check range high bound
+PASS: gdb.python/py-type.exp: lang_cpp: test_range: on ranged type: print value (ar)
+PASS: gdb.python/py-type.exp: lang_cpp: test_range: on ranged type: get value (ar) from history
+PASS: gdb.python/py-type.exp: lang_cpp: test_range: on ranged type: get fields
+PASS: gdb.python/py-type.exp: lang_cpp: test_range: on ranged type: Check range low bound
+PASS: gdb.python/py-type.exp: lang_cpp: test_range: on ranged type: Check range high bound
+PASS: gdb.python/py-type.exp: lang_cpp: test_range: on unranged value: print value (st)
+PASS: gdb.python/py-type.exp: lang_cpp: test_range: on unranged value: get value (st) from history
+PASS: gdb.python/py-type.exp: lang_cpp: test_range: on unranged value: Check range for non ranged type.
+PASS: gdb.python/py-type.exp: lang_cpp: get type of temvar
+PASS: gdb.python/py-type.exp: lang_cpp: python print (ttype.template_argument(0))
+PASS: gdb.python/py-type.exp: lang_cpp: python print (isinstance(ttype.template_argument(0), gdb.Type))
+PASS: gdb.python/py-type.exp: lang_cpp: python print (ttype.template_argument(1))
+PASS: gdb.python/py-type.exp: lang_cpp: python print (isinstance(ttype.template_argument(1), gdb.Value))
+PASS: gdb.python/py-type.exp: lang_cpp: python print (ttype.template_argument(2))
+PASS: gdb.python/py-type.exp: lang_cpp: test_enum: print value (e)
+PASS: gdb.python/py-type.exp: lang_cpp: test_enum: get value (e) from history
+PASS: gdb.python/py-type.exp: lang_cpp: test_enum: extract type fields from e
+PASS: gdb.python/py-type.exp: lang_cpp: test_enum: Check the number of enum fields
+PASS: gdb.python/py-type.exp: lang_cpp: test_enum: Check enum field[0] name
+PASS: gdb.python/py-type.exp: lang_cpp: test_enum: Check enum field[1]name
+PASS: gdb.python/py-type.exp: lang_cpp: test_enum: Check the number of type fields
+PASS: gdb.python/py-type.exp: lang_cpp: test_enum: Check enum field lookup by name (v1)
+PASS: gdb.python/py-type.exp: lang_cpp: test_enum: Check enum field lookup by name (v2)
+PASS: gdb.python/py-type.exp: lang_cpp: test_enum: Check num fields iteration over values
+PASS: gdb.python/py-type.exp: lang_cpp: test_enum: Check enum fields items list
+Running ./gdb.python/py-typeprint.exp ...
+PASS: gdb.python/py-typeprint.exp: python exec (open ('py-typeprint.py').read ())
+PASS: gdb.python/py-typeprint.exp: basic test
+PASS: gdb.python/py-typeprint.exp: raw test
+PASS: gdb.python/py-typeprint.exp: disable type-printer string
+PASS: gdb.python/py-typeprint.exp: whatis with disabled printer
+PASS: gdb.python/py-typeprint.exp: info type-printers
+PASS: gdb.python/py-typeprint.exp: enable type-printer string
+PASS: gdb.python/py-typeprint.exp: whatis with enabled printer
+PASS: gdb.python/py-typeprint.exp: whatis s
+Running ./gdb.python/py-value-cc.exp ...
+PASS: gdb.python/py-value-cc.exp: continue to breakpoint: Break here
+PASS: gdb.python/py-value-cc.exp: python print (str(gdb.parse_and_eval("a").type))
+PASS: gdb.python/py-value-cc.exp: python print (str(gdb.parse_and_eval("a").referenced_value().type))
+PASS: gdb.python/py-value-cc.exp: python print (str(gdb.parse_and_eval("int_ref").type))
+PASS: gdb.python/py-value-cc.exp: python print (str(gdb.parse_and_eval("int_ref").referenced_value().type))
+PASS: gdb.python/py-value-cc.exp: python print (str(gdb.parse_and_eval("int_ref").referenced_value()))
+PASS: gdb.python/py-value-cc.exp: python print (str(gdb.parse_and_eval("int_ptr_ref").dereference().type))
+PASS: gdb.python/py-value-cc.exp: python print (str(gdb.parse_and_eval("int_ptr_ref").referenced_value().type))
+PASS: gdb.python/py-value-cc.exp: python print (str(gdb.parse_and_eval("int_ptr_ref").referenced_value().dereference()))
+PASS: gdb.python/py-value-cc.exp: python print (str(gdb.parse_and_eval("int_ptr_ref").referenced_value().referenced_value()))
+Running ./gdb.python/py-value.exp ...
+PASS: gdb.python/py-value.exp: create boolean value
+PASS: gdb.python/py-value.exp: create integer value
+PASS: gdb.python/py-value.exp: create long value
+PASS: gdb.python/py-value.exp: create double value
+PASS: gdb.python/py-value.exp: create 8-bit string value
+PASS: gdb.python/py-value.exp: print 8-bit string
+PASS: gdb.python/py-value.exp: verify type of 8-bit string
+PASS: gdb.python/py-value.exp: create unicode value
+PASS: gdb.python/py-value.exp: print Unicode string
+PASS: gdb.python/py-value.exp: verify type of unicode string
+PASS: gdb.python/py-value.exp: Test address attribute in non-addressable value
+PASS: gdb.python/py-value.exp: add two integer values
+PASS: gdb.python/py-value.exp: verify type of integer add result
+PASS: gdb.python/py-value.exp: add two double values
+PASS: gdb.python/py-value.exp: subtract two integer values
+PASS: gdb.python/py-value.exp: subtract two double values
+PASS: gdb.python/py-value.exp: multiply two integer values
+PASS: gdb.python/py-value.exp: multiply two double values
+PASS: gdb.python/py-value.exp: divide two integer values
+PASS: gdb.python/py-value.exp: divide two double values
+PASS: gdb.python/py-value.exp: take remainder of two integer values
+PASS: gdb.python/py-value.exp: integer value raised to the power of another integer value
+PASS: gdb.python/py-value.exp: double value raised to the power of integer value
+PASS: gdb.python/py-value.exp: negated integer value
+PASS: gdb.python/py-value.exp: positive integer value
+PASS: gdb.python/py-value.exp: negated double value
+PASS: gdb.python/py-value.exp: positive double value
+PASS: gdb.python/py-value.exp: absolute of integer value
+PASS: gdb.python/py-value.exp: absolute of double value
+PASS: gdb.python/py-value.exp: subtract integer value from python integer
+PASS: gdb.python/py-value.exp: verify type of mixed integer subtraction result
+PASS: gdb.python/py-value.exp: add double value with python float
+PASS: gdb.python/py-value.exp: subtract python integer from integer value
+PASS: gdb.python/py-value.exp: add python float with double value
+PASS: gdb.python/py-value.exp: print evalue
+PASS: gdb.python/py-value.exp: python evalue = gdb.history (0)
+PASS: gdb.python/py-value.exp: python print (int (evalue))
+PASS: gdb.python/py-value.exp: add pointer value with python integer
+PASS: gdb.python/py-value.exp: subtract python integer from pointer value
+PASS: gdb.python/py-value.exp: subtract two pointer values
+PASS: gdb.python/py-value.exp: catch error in python type conversion
+PASS: gdb.python/py-value.exp: catch throw of GDB error
+PASS: gdb.python/py-value.exp: define function to test booleans - python
+PASS: gdb.python/py-value.exp: define function to test booleans - def test_bool (val):
+PASS: gdb.python/py-value.exp: define function to test booleans - if val:
+PASS: gdb.python/py-value.exp: define function to test booleans - print ('yay')
+PASS: gdb.python/py-value.exp: define function to test booleans - else:
+PASS: gdb.python/py-value.exp: define function to test booleans - print ('nay')
+PASS: gdb.python/py-value.exp: define function to test booleans - end
+PASS: gdb.python/py-value.exp: check evaluation of true boolean value in expression
+PASS: gdb.python/py-value.exp: check evaluation of false boolean value in expression
+PASS: gdb.python/py-value.exp: check evaluation of true integer value in expression
+PASS: gdb.python/py-value.exp: check evaluation of false integer value in expression
+PASS: gdb.python/py-value.exp: check evaluation of true integer value in expression
+PASS: gdb.python/py-value.exp: check evaluation of false integer value in expression
+PASS: gdb.python/py-value.exp: less than, equal
+PASS: gdb.python/py-value.exp: less than, less
+PASS: gdb.python/py-value.exp: less than, greater
+PASS: gdb.python/py-value.exp: less than, None
+PASS: gdb.python/py-value.exp: less or equal, equal
+PASS: gdb.python/py-value.exp: less or equal, less
+PASS: gdb.python/py-value.exp: less or equal, greater
+PASS: gdb.python/py-value.exp: less or equal, None
+PASS: gdb.python/py-value.exp: equality of gdb.Values
+PASS: gdb.python/py-value.exp: inequality of gdb.Values
+PASS: gdb.python/py-value.exp: equality of gdb.Value with Python value
+PASS: gdb.python/py-value.exp: inequality of gdb.Value with Python value
+PASS: gdb.python/py-value.exp: inequality of gdb.Value with None
+PASS: gdb.python/py-value.exp: inequality, false
+PASS: gdb.python/py-value.exp: inequality, true
+PASS: gdb.python/py-value.exp: inequality, None
+PASS: gdb.python/py-value.exp: greater than, equal
+PASS: gdb.python/py-value.exp: greater than, less
+PASS: gdb.python/py-value.exp: greater than, greater
+PASS: gdb.python/py-value.exp: greater than, None
+PASS: gdb.python/py-value.exp: greater or equal, equal
+PASS: gdb.python/py-value.exp: greater or equal, less
+PASS: gdb.python/py-value.exp: greater or equal, greater
+PASS: gdb.python/py-value.exp: greater or equal, None
+PASS: gdb.python/py-value.exp: py-value in file.filename
+PASS: gdb.python/py-value.exp: python print (gdb.objfiles()[0].pretty_printers)
+PASS: gdb.python/py-value.exp: python gdb.objfiles()[0].pretty_printers = 0
+PASS: gdb.python/py-value.exp: parse_and_eval constant test
+PASS: gdb.python/py-value.exp: parse_and_eval simple expression test
+PASS: gdb.python/py-value.exp: parse_and_eval type test
+PASS: gdb.python/py-value.exp: Simple Python value dictionary - python
+PASS: gdb.python/py-value.exp: Simple Python value dictionary - one = gdb.Value(1)
+PASS: gdb.python/py-value.exp: Simple Python value dictionary - two = gdb.Value(2)
+PASS: gdb.python/py-value.exp: Simple Python value dictionary - three = gdb.Value(3)
+PASS: gdb.python/py-value.exp: Simple Python value dictionary - vdict = {one:"one str",two:"two str",three:"three str"}
+PASS: gdb.python/py-value.exp: Simple Python value dictionary - end
+PASS: gdb.python/py-value.exp: Test dictionary hash
+PASS: gdb.python/py-value.exp: Test dictionary hash
+PASS: gdb.python/py-value.exp: Test dictionary hash
+PASS: gdb.python/py-value.exp: Test inbuilt hash
+PASS: gdb.python/py-value.exp: continue to breakpoint: break to inspect struct and union
+PASS: gdb.python/py-value.exp: get value from history
+PASS: gdb.python/py-value.exp: access element inside struct using 8-bit string name
+PASS: gdb.python/py-value.exp: access element inside struct using unicode name
+PASS: gdb.python/py-value.exp: dereference value
+PASS: gdb.python/py-value.exp: Test is_optimized_out attribute
+PASS: gdb.python/py-value.exp: Test address attribute
+PASS: gdb.python/py-value.exp: parse_and_eval with memory error
+PASS: gdb.python/py-value.exp: python inval = gdb.parse_and_eval('*(int*)0')
+PASS: gdb.python/py-value.exp: python print (inval.is_lazy)
+PASS: gdb.python/py-value.exp: memory error and lazy values
+PASS: gdb.python/py-value.exp: memory error and lazy values
+PASS: gdb.python/py-value.exp: python argc_lazy = gdb.parse_and_eval('argc')
+PASS: gdb.python/py-value.exp: python argc_notlazy = gdb.parse_and_eval('argc')
+PASS: gdb.python/py-value.exp: python argc_notlazy.fetch_lazy()
+PASS: gdb.python/py-value.exp: python print (argc_lazy.is_lazy)
+PASS: gdb.python/py-value.exp: python print (argc_notlazy.is_lazy)
+PASS: gdb.python/py-value.exp: sanity check argc
+PASS: gdb.python/py-value.exp: python print (argc_lazy.is_lazy)
+PASS: gdb.python/py-value.exp: set argc=2
+PASS: gdb.python/py-value.exp: python print (argc_notlazy)
+PASS: gdb.python/py-value.exp: python print (argc_lazy)
+PASS: gdb.python/py-value.exp: python print (argc_lazy.is_lazy)
+PASS: gdb.python/py-value.exp: print st
+PASS: gdb.python/py-value.exp: get value from history
+PASS: gdb.python/py-value.exp: Test string with no length
+PASS: gdb.python/py-value.exp: Test string (length = -1) is all of the string
+PASS: gdb.python/py-value.exp: python print (st.string (length = 6))
+PASS: gdb.python/py-value.exp: Test string (length = 0) is empty
+PASS: gdb.python/py-value.exp: Test length is 0
+PASS: gdb.python/py-value.exp: print nullst
+PASS: gdb.python/py-value.exp: get value from history
+PASS: gdb.python/py-value.exp: Test string to first null
+PASS: gdb.python/py-value.exp: get string beyond null
+PASS: gdb.python/py-value.exp: python print (repr(nullst))
+PASS: gdb.python/py-value.exp: p/x fp1
+PASS: gdb.python/py-value.exp: get value from history
+PASS: gdb.python/py-value.exp: python fp1 = fp1.dereference()
+PASS: gdb.python/py-value.exp: python result = fp1()
+PASS: gdb.python/py-value.exp: python print (result)
+PASS: gdb.python/py-value.exp: p/x fp2
+PASS: gdb.python/py-value.exp: get value from history
+PASS: gdb.python/py-value.exp: python fp2 = fp2.dereference()
+PASS: gdb.python/py-value.exp: python result2 = fp2(10,20)
+PASS: gdb.python/py-value.exp: python print (result2)
+PASS: gdb.python/py-value.exp: p i
+PASS: gdb.python/py-value.exp: get value from history
+PASS: gdb.python/py-value.exp: python result3 = i()
+PASS: gdb.python/py-value.exp: p/x fp2
+PASS: gdb.python/py-value.exp: get value from history
+PASS: gdb.python/py-value.exp: python fp3 = fp3.dereference()
+PASS: gdb.python/py-value.exp: python result2 = fp3(10)
+PASS: gdb.python/py-value.exp: print sptr
+PASS: gdb.python/py-value.exp: Get value from history
+PASS: gdb.python/py-value.exp: Aquire lazy string
+PASS: gdb.python/py-value.exp: Test type name equality
+PASS: gdb.python/py-value.exp: Test type name equality
+PASS: gdb.python/py-value.exp: print sn
+PASS: gdb.python/py-value.exp: Get value from history
+PASS: gdb.python/py-value.exp: Test lazy string
+PASS: gdb.python/py-value.exp: Succesfully create a lazy string
+PASS: gdb.python/py-value.exp: Test lazy string length
+PASS: gdb.python/py-value.exp: Test lazy string address
+PASS: gdb.python/py-value.exp: create PTR type
+PASS: gdb.python/py-value.exp: kill the inferior
+PASS: gdb.python/py-value.exp: Discard the symbols
+PASS: gdb.python/py-value.exp: cast arg0 to PTR
+PASS: gdb.python/py-value.exp: delete PTR type
+PASS: gdb.python/py-value.exp: print value's type
+PASS: gdb.python/py-value.exp: continue to breakpoint: break to inspect struct and union
+PASS: gdb.python/py-value.exp: Create a value for subscript test
+PASS: gdb.python/py-value.exp: Create a value for subscript test
+PASS: gdb.python/py-value.exp: Baseline print of a Python value
+PASS: gdb.python/py-value.exp: Attempt to access an integer with a subscript
+PASS: gdb.python/py-value.exp: Baseline print of a Python value
+PASS: gdb.python/py-value.exp: Attempt to access a string with a subscript
+PASS: gdb.python/py-value.exp: Build pointer to array
+PASS: gdb.python/py-value.exp:
+PASS: gdb.python/py-value.exp: Access array via pointer with int subscript
+PASS: gdb.python/py-value.exp: Access array via pointer with value subscript
+PASS: gdb.python/py-value.exp: Attempt to access an integer with a subscript
+PASS: gdb.python/py-value.exp: Build array
+PASS: gdb.python/py-value.exp:
+PASS: gdb.python/py-value.exp: Test multiple subscript
+PASS: gdb.python/py-value.exp: continue to breakpoint: break to inspect pointer by reference
+PASS: gdb.python/py-value.exp: Obtain address
+PASS: gdb.python/py-value.exp: Obtains value from GDB
+PASS: gdb.python/py-value.exp: Check pointer passed as reference
+PASS: gdb.python/py-value.exp: python print (bool(gdb.parse_and_eval('base').dynamic_cast(gdb.lookup_type('Derived').pointer())))
+PASS: gdb.python/py-value.exp: python print (gdb.parse_and_eval('base').dynamic_type)
+PASS: gdb.python/py-value.exp: python print (gdb.parse_and_eval('5').dynamic_type)
+PASS: gdb.python/py-value.exp: continue to breakpoint: break to inspect struct and union
+PASS: gdb.python/py-value.exp: Create a value for subscript test
+PASS: gdb.python/py-value.exp: Create a value for subscript test
+PASS: gdb.python/py-value.exp: Baseline print of a Python value
+PASS: gdb.python/py-value.exp: Attempt to access an integer with a subscript
+PASS: gdb.python/py-value.exp: Baseline print of a Python value
+PASS: gdb.python/py-value.exp: Attempt to access a string with a subscript
+PASS: gdb.python/py-value.exp: Build pointer to array
+PASS: gdb.python/py-value.exp:
+PASS: gdb.python/py-value.exp: Access array via pointer with int subscript
+PASS: gdb.python/py-value.exp: Access array via pointer with value subscript
+PASS: gdb.python/py-value.exp: Attempt to access an integer with a subscript
+PASS: gdb.python/py-value.exp: Build array
+PASS: gdb.python/py-value.exp:
+PASS: gdb.python/py-value.exp: Test multiple subscript
+Running ./gdb.reverse/amd64-tailcall-reverse.exp ...
+Running ./gdb.reverse/break-precsave.exp ...
+Running ./gdb.reverse/break-reverse.exp ...
+Running ./gdb.reverse/consecutive-precsave.exp ...
+Running ./gdb.reverse/consecutive-reverse.exp ...
+Running ./gdb.reverse/finish-precsave.exp ...
+Running ./gdb.reverse/finish-reverse-bkpt.exp ...
+Running ./gdb.reverse/finish-reverse.exp ...
+Running ./gdb.reverse/i386-precsave.exp ...
+Running ./gdb.reverse/i386-reverse.exp ...
+Running ./gdb.reverse/i386-sse-reverse.exp ...
+Running ./gdb.reverse/i387-env-reverse.exp ...
+PASS: gdb.reverse/i387-env-reverse.exp: Turn on process record
+FAIL: gdb.reverse/i387-env-reverse.exp: record to end of main (timeout)
+FAIL: gdb.reverse/i387-env-reverse.exp: set reverse direction
+FAIL: gdb.reverse/i387-env-reverse.exp: rewind to beginning of main
+FAIL: gdb.reverse/i387-env-reverse.exp: set forward direction
+PASS: gdb.reverse/i387-env-reverse.exp: begin testing fpu env
+PASS: gdb.reverse/i387-env-reverse.exp: save FPU env in memory
+PASS: gdb.reverse/i387-env-reverse.exp: restore FPU env
+PASS: gdb.reverse/i387-env-reverse.exp: store status word in EAX
+PASS: gdb.reverse/i387-env-reverse.exp: push st0
+FAIL: gdb.reverse/i387-env-reverse.exp: verify eax == 0x8040000
+PASS: gdb.reverse/i387-env-reverse.exp: verify fstat == 0
+PASS: gdb.reverse/i387-env-reverse.exp: verify ftag == 0xffff
+PASS: gdb.reverse/i387-env-reverse.exp: push st0
+PASS: gdb.reverse/i387-env-reverse.exp: verify fstat == 0x3800
+PASS: gdb.reverse/i387-env-reverse.exp: verify ftag == 0x3fff
+PASS: gdb.reverse/i387-env-reverse.exp: push st0
+PASS: gdb.reverse/i387-env-reverse.exp: verify fstat == 0x3000
+PASS: gdb.reverse/i387-env-reverse.exp: verify ftag == 0xfff
+PASS: gdb.reverse/i387-env-reverse.exp: push st0
+PASS: gdb.reverse/i387-env-reverse.exp: verify fstat == 0x2800
+PASS: gdb.reverse/i387-env-reverse.exp: verify ftag == 0x3ff
+PASS: gdb.reverse/i387-env-reverse.exp: push st0
+PASS: gdb.reverse/i387-env-reverse.exp: verify fstat == 0x2000
+PASS: gdb.reverse/i387-env-reverse.exp: verify ftag == 0xff
+PASS: gdb.reverse/i387-env-reverse.exp: push st0
+PASS: gdb.reverse/i387-env-reverse.exp: verify fstat == 0x1800
+PASS: gdb.reverse/i387-env-reverse.exp: verify ftag == 0x3f
+PASS: gdb.reverse/i387-env-reverse.exp: push st0
+PASS: gdb.reverse/i387-env-reverse.exp: verify fstat == 0x1000
+PASS: gdb.reverse/i387-env-reverse.exp: verify ftag == 0xf
+PASS: gdb.reverse/i387-env-reverse.exp: push st0
+PASS: gdb.reverse/i387-env-reverse.exp: verify fstat == 0x800
+PASS: gdb.reverse/i387-env-reverse.exp: verify ftag == 0x7
+PASS: gdb.reverse/i387-env-reverse.exp: push st0
+PASS: gdb.reverse/i387-env-reverse.exp: verify fstat == 0x1000
+PASS: gdb.reverse/i387-env-reverse.exp: verify ftag == 0xf
+PASS: gdb.reverse/i387-env-reverse.exp: push st0
+PASS: gdb.reverse/i387-env-reverse.exp: verify fstat == 0x1800
+PASS: gdb.reverse/i387-env-reverse.exp: verify ftag == 0x3f
+PASS: gdb.reverse/i387-env-reverse.exp: push st0
+PASS: gdb.reverse/i387-env-reverse.exp: verify fstat == 0x2000
+PASS: gdb.reverse/i387-env-reverse.exp: verify ftag == 0xff
+PASS: gdb.reverse/i387-env-reverse.exp: push st0
+PASS: gdb.reverse/i387-env-reverse.exp: verify fstat == 0x2800
+PASS: gdb.reverse/i387-env-reverse.exp: verify ftag == 0x3ff
+PASS: gdb.reverse/i387-env-reverse.exp: push st0
+PASS: gdb.reverse/i387-env-reverse.exp: verify fstat == 0x3000
+PASS: gdb.reverse/i387-env-reverse.exp: verify ftag == 0xfff
+PASS: gdb.reverse/i387-env-reverse.exp: push st0
+PASS: gdb.reverse/i387-env-reverse.exp: verify fstat == 0x3800
+PASS: gdb.reverse/i387-env-reverse.exp: verify ftag == 0x3fff
+PASS: gdb.reverse/i387-env-reverse.exp: push st0
+PASS: gdb.reverse/i387-env-reverse.exp: verify fstat == 0
+PASS: gdb.reverse/i387-env-reverse.exp: verify ftag == 0xffff
+Running ./gdb.reverse/i387-stack-reverse.exp ...
+PASS: gdb.reverse/i387-stack-reverse.exp: Turn on process record
+PASS: gdb.reverse/i387-stack-reverse.exp: record to end of main
+PASS: gdb.reverse/i387-stack-reverse.exp: set reverse direction
+PASS: gdb.reverse/i387-stack-reverse.exp: rewind to beginning of main
+PASS: gdb.reverse/i387-stack-reverse.exp: set forward direction
+PASS: gdb.reverse/i387-stack-reverse.exp: begin test st0
+PASS: gdb.reverse/i387-stack-reverse.exp: push st0 == 1
+PASS: gdb.reverse/i387-stack-reverse.exp: verify st0 == 1
+PASS: gdb.reverse/i387-stack-reverse.exp: push st0 == 3.3219280948*
+PASS: gdb.reverse/i387-stack-reverse.exp: verify st0 == 3.321928094*
+PASS: gdb.reverse/i387-stack-reverse.exp: verify st1 == 1
+PASS: gdb.reverse/i387-stack-reverse.exp: push st0 == 1.4426950406*
+PASS: gdb.reverse/i387-stack-reverse.exp: verify st0 == 1.442695040*
+PASS: gdb.reverse/i387-stack-reverse.exp: verify st1 == 3.3219280948*
+PASS: gdb.reverse/i387-stack-reverse.exp: verify st2 == 1
+PASS: gdb.reverse/i387-stack-reverse.exp: push st0 == 3.14159265*
+PASS: gdb.reverse/i387-stack-reverse.exp: verify st0 == 3.14159265*
+PASS: gdb.reverse/i387-stack-reverse.exp: verify st1 == 1.4426950*
+PASS: gdb.reverse/i387-stack-reverse.exp: verify st2 == 3.3219280*
+PASS: gdb.reverse/i387-stack-reverse.exp: verify st3 == 1
+PASS: gdb.reverse/i387-stack-reverse.exp: push st0 == 0.301029*
+PASS: gdb.reverse/i387-stack-reverse.exp: verify st0 == 0.301029*
+PASS: gdb.reverse/i387-stack-reverse.exp: verify st1 == 3.14159265*
+PASS: gdb.reverse/i387-stack-reverse.exp: verify st2 == 1.44269506*
+PASS: gdb.reverse/i387-stack-reverse.exp: verify st3 == 3.3219280948*
+PASS: gdb.reverse/i387-stack-reverse.exp: verify st4 == 1
+PASS: gdb.reverse/i387-stack-reverse.exp: push st0 == 0.69314*
+PASS: gdb.reverse/i387-stack-reverse.exp: verify st0 == 0.69314*
+PASS: gdb.reverse/i387-stack-reverse.exp: verify st1 == 0.301029*
+PASS: gdb.reverse/i387-stack-reverse.exp: verify st2 == 3.14159265*
+PASS: gdb.reverse/i387-stack-reverse.exp: verify st3 == 1.442695040*
+PASS: gdb.reverse/i387-stack-reverse.exp: verify st4 == 3.3219280948*
+PASS: gdb.reverse/i387-stack-reverse.exp: verify st5 == 1
+PASS: gdb.reverse/i387-stack-reverse.exp: push st0 == 0
+PASS: gdb.reverse/i387-stack-reverse.exp: verify st0 == 0
+PASS: gdb.reverse/i387-stack-reverse.exp: verify st1 == 0.69314*
+PASS: gdb.reverse/i387-stack-reverse.exp: verify st2 == 0.301029*
+PASS: gdb.reverse/i387-stack-reverse.exp: verify st3 == 3.14159265*
+PASS: gdb.reverse/i387-stack-reverse.exp: verify st4 == 1.442695040*
+PASS: gdb.reverse/i387-stack-reverse.exp: verify st5 == 3.32192809*
+PASS: gdb.reverse/i387-stack-reverse.exp: verify st6 == 1
+PASS: gdb.reverse/i387-stack-reverse.exp: push st0 == 0
+PASS: gdb.reverse/i387-stack-reverse.exp: verify st0 == 1
+PASS: gdb.reverse/i387-stack-reverse.exp: verify st1 == 0
+PASS: gdb.reverse/i387-stack-reverse.exp: verify st2 == 0.69314*
+PASS: gdb.reverse/i387-stack-reverse.exp: verify st3 == 0.301029*
+PASS: gdb.reverse/i387-stack-reverse.exp: verify st4 == 3.14159265*
+PASS: gdb.reverse/i387-stack-reverse.exp: verify st5 == 1.44269504*
+PASS: gdb.reverse/i387-stack-reverse.exp: verify st6 == 3.3219280948*
+PASS: gdb.reverse/i387-stack-reverse.exp: verify st7 == 1
+PASS: gdb.reverse/i387-stack-reverse.exp: undo registers, st0-st7
+PASS: gdb.reverse/i387-stack-reverse.exp: verify st0 == 0
+PASS: gdb.reverse/i387-stack-reverse.exp: verify st1 == 0.69314*
+PASS: gdb.reverse/i387-stack-reverse.exp: verify st2 == 0.301029*
+PASS: gdb.reverse/i387-stack-reverse.exp: verify st3 == 3.14159265*
+PASS: gdb.reverse/i387-stack-reverse.exp: verify st4 == 1.442695040*
+PASS: gdb.reverse/i387-stack-reverse.exp: verify st5 == 3.3219280948*
+PASS: gdb.reverse/i387-stack-reverse.exp: verify st6 == 1
+PASS: gdb.reverse/i387-stack-reverse.exp: push st0 == 0.69314*
+PASS: gdb.reverse/i387-stack-reverse.exp: verify st0 == 0.69314*
+PASS: gdb.reverse/i387-stack-reverse.exp: verify st1 == 0.301029*
+PASS: gdb.reverse/i387-stack-reverse.exp: verify st2 == 3.14159265*
+PASS: gdb.reverse/i387-stack-reverse.exp: verify st3 == 1.442695040*
+PASS: gdb.reverse/i387-stack-reverse.exp: verify st4 == 3.3219280948*
+PASS: gdb.reverse/i387-stack-reverse.exp: verify st5 == 1
+PASS: gdb.reverse/i387-stack-reverse.exp: push st0 == 0.301029*
+PASS: gdb.reverse/i387-stack-reverse.exp: verify st0 == 0.301029*
+PASS: gdb.reverse/i387-stack-reverse.exp: verify st1 == 3.14159265*
+PASS: gdb.reverse/i387-stack-reverse.exp: verify st2 == 1.442695040*
+PASS: gdb.reverse/i387-stack-reverse.exp: verify st3 == 3.3219280948*
+PASS: gdb.reverse/i387-stack-reverse.exp: verify st4 == 1
+PASS: gdb.reverse/i387-stack-reverse.exp: push st0 == 3.14159265*
+PASS: gdb.reverse/i387-stack-reverse.exp: verify st0 == 3.14159265*
+PASS: gdb.reverse/i387-stack-reverse.exp: verify st1 == 1.442695040*
+PASS: gdb.reverse/i387-stack-reverse.exp: verify st2 == 3.3219280948*
+PASS: gdb.reverse/i387-stack-reverse.exp: verify st3 == 1
+PASS: gdb.reverse/i387-stack-reverse.exp: push st0 == 1.44269504088*
+PASS: gdb.reverse/i387-stack-reverse.exp: verify st0 == 1.442695040*
+PASS: gdb.reverse/i387-stack-reverse.exp: verify st1 == 3.3219280948*
+PASS: gdb.reverse/i387-stack-reverse.exp: verify st2 == 1
+PASS: gdb.reverse/i387-stack-reverse.exp: push st0 == 3.3219280948*
+PASS: gdb.reverse/i387-stack-reverse.exp: verify st0 == 3.3219280948*
+PASS: gdb.reverse/i387-stack-reverse.exp: verify st1 == 1
+PASS: gdb.reverse/i387-stack-reverse.exp: push st0 == 1
+PASS: gdb.reverse/i387-stack-reverse.exp: verify st0 == 1
+Running ./gdb.reverse/machinestate.exp ...
+Running ./gdb.reverse/machinestate-precsave.exp ...
+Running ./gdb.reverse/next-reverse-bkpt-over-sr.exp ...
+Running ./gdb.reverse/sigall-precsave.exp ...
+Running ./gdb.reverse/sigall-reverse.exp ...
+Running ./gdb.reverse/singlejmp-reverse.exp ...
+Running ./gdb.reverse/solib-precsave.exp ...
+Running ./gdb.reverse/solib-reverse.exp ...
+Running ./gdb.reverse/step-precsave.exp ...
+Running ./gdb.reverse/step-reverse.exp ...
+Running ./gdb.reverse/until-precsave.exp ...
+Running ./gdb.reverse/until-reverse.exp ...
+Running ./gdb.reverse/watch-precsave.exp ...
+Running ./gdb.reverse/watch-reverse.exp ...
+Running ./gdb.server/ext-attach.exp ...
+Running ./gdb.server/ext-run.exp ...
+PASS: gdb.server/ext-run.exp: disconnect
+PASS: gdb.server/ext-run.exp: set remote exec-file
+PASS: gdb.server/ext-run.exp: continue to main
+PASS: gdb.server/ext-run.exp: get process list
+PASS: gdb.server/ext-run.exp: kill
+PASS: gdb.server/ext-run.exp: load new file without any gdbserver inferior
+PASS: gdb.server/ext-run.exp: monitor exit
+Running ./gdb.server/file-transfer.exp ...
+PASS: gdb.server/file-transfer.exp: disconnect
+FAIL: gdb.server/file-transfer.exp: put binary file
+FAIL: gdb.server/file-transfer.exp: get binary file
+FAIL: gdb.server/file-transfer.exp: compare binary file
+FAIL: gdb.server/file-transfer.exp: deleted binary file
+FAIL: gdb.server/file-transfer.exp: put text file
+FAIL: gdb.server/file-transfer.exp: get text file
+FAIL: gdb.server/file-transfer.exp: compare text file
+FAIL: gdb.server/file-transfer.exp: deleted text file
+Running ./gdb.server/no-thread-db.exp ...
+PASS: gdb.server/no-thread-db.exp: successfully compiled posix threads test case
+PASS: gdb.server/no-thread-db.exp: disconnect
+PASS: gdb.server/no-thread-db.exp: libthread-db is now unresolvable
+PASS: gdb.server/no-thread-db.exp: continue to breakpoint: after tls assignment
+PASS: gdb.server/no-thread-db.exp: print foo
+Running ./gdb.server/server-exec-info.exp ...
+PASS: gdb.server/server-exec-info.exp: file
+PASS: gdb.server/server-exec-info.exp: set sysroot remote:
+PASS: gdb.server/server-exec-info.exp: info files
+Running ./gdb.server/server-kill.exp ...
+PASS: gdb.server/server-kill.exp: disconnect
+FAIL: gdb.server/server-kill.exp: tstatus
+Running ./gdb.server/server-mon.exp ...
+PASS: gdb.server/server-mon.exp: disconnect
+PASS: gdb.server/server-mon.exp: monitor help
+PASS: gdb.server/server-mon.exp: monitor
+PASS: gdb.server/server-mon.exp: monitor set debug 1
+PASS: gdb.server/server-mon.exp: monitor set debug 0
+PASS: gdb.server/server-mon.exp: monitor set remote-debug 1
+PASS: gdb.server/server-mon.exp: monitor set remote-debug 0
+Running ./gdb.server/server-run.exp ...
+PASS: gdb.server/server-run.exp: disconnect
+PASS: gdb.server/server-run.exp: loaded dynamic linker
+PASS: gdb.server/server-run.exp: continue to main
+Running ./gdb.server/solib-list.exp ...
+Running ./gdb.stabs/exclfwd.exp ...
+PASS: gdb.stabs/exclfwd.exp: ptype v1
+PASS: gdb.stabs/exclfwd.exp: ptype v2
+PASS: gdb.stabs/exclfwd.exp: ptype v3
+Running ./gdb.stabs/gdb11479.exp ...
+PASS: gdb.stabs/gdb11479.exp: Set breakpoints forced_stabs
+PASS: gdb.stabs/gdb11479.exp: Stop at first breakpoint forced_stabs
+PASS: gdb.stabs/gdb11479.exp: Inspect t in test2 forced_stabs
+PASS: gdb.stabs/gdb11479.exp: sizeof (e) in test2 forced_stabs
+PASS: gdb.stabs/gdb11479.exp: Stop at first breakpoint forced_stabs
+PASS: gdb.stabs/gdb11479.exp: Inspect t in test forced_stabs
+PASS: gdb.stabs/gdb11479.exp: sizeof (e) in test forced_stabs
+PASS: gdb.stabs/gdb11479.exp: Set breakpoints natural_debug_format
+PASS: gdb.stabs/gdb11479.exp: Stop at first breakpoint natural_debug_format
+PASS: gdb.stabs/gdb11479.exp: Inspect t in test2 natural_debug_format
+PASS: gdb.stabs/gdb11479.exp: sizeof (e) in test2 natural_debug_format
+PASS: gdb.stabs/gdb11479.exp: Stop at first breakpoint natural_debug_format
+PASS: gdb.stabs/gdb11479.exp: Inspect t in test natural_debug_format
+PASS: gdb.stabs/gdb11479.exp: sizeof (e) in test natural_debug_format
+Running ./gdb.stabs/weird.exp ...
+PASS: gdb.stabs/weird.exp: weirdx.o read without error
+PASS: gdb.stabs/weird.exp: stabs found
+PASS: gdb.stabs/weird.exp: variable var0 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (var0)
+PASS: gdb.stabs/weird.exp: variable var1 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (var1)
+PASS: gdb.stabs/weird.exp: variable var2 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (var2)
+PASS: gdb.stabs/weird.exp: variable var3 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (var3)
+PASS: gdb.stabs/weird.exp: variable attr32 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr32)
+PASS: gdb.stabs/weird.exp: variable attr33 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr33)
+PASS: gdb.stabs/weird.exp: variable attr35 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr35)
+PASS: gdb.stabs/weird.exp: variable attr36 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr36)
+PASS: gdb.stabs/weird.exp: variable attr37 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr37)
+PASS: gdb.stabs/weird.exp: variable attr38 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr38)
+PASS: gdb.stabs/weird.exp: variable attr39 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr39)
+PASS: gdb.stabs/weird.exp: variable attr41 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr41)
+PASS: gdb.stabs/weird.exp: variable attr42 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr42)
+PASS: gdb.stabs/weird.exp: variable attr43 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr43)
+PASS: gdb.stabs/weird.exp: variable attr44 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr44)
+PASS: gdb.stabs/weird.exp: variable attr46 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr46)
+PASS: gdb.stabs/weird.exp: variable attr47 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr47)
+PASS: gdb.stabs/weird.exp: variable attr58 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr58)
+PASS: gdb.stabs/weird.exp: variable attr59 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr59)
+PASS: gdb.stabs/weird.exp: variable attr60 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr60)
+PASS: gdb.stabs/weird.exp: variable attr61 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr61)
+PASS: gdb.stabs/weird.exp: variable attr62 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr62)
+PASS: gdb.stabs/weird.exp: variable attr63 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr63)
+PASS: gdb.stabs/weird.exp: variable attr64 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr64)
+PASS: gdb.stabs/weird.exp: variable attr65 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr65)
+PASS: gdb.stabs/weird.exp: variable attr66 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr66)
+PASS: gdb.stabs/weird.exp: variable attr67 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr67)
+PASS: gdb.stabs/weird.exp: variable attr68 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr68)
+PASS: gdb.stabs/weird.exp: variable attr69 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr69)
+PASS: gdb.stabs/weird.exp: variable attr70 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr70)
+PASS: gdb.stabs/weird.exp: variable attr71 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr71)
+PASS: gdb.stabs/weird.exp: variable attr72 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr72)
+PASS: gdb.stabs/weird.exp: variable attr73 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr73)
+PASS: gdb.stabs/weird.exp: variable attr74 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr74)
+PASS: gdb.stabs/weird.exp: variable attr75 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr75)
+PASS: gdb.stabs/weird.exp: variable attr76 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr76)
+PASS: gdb.stabs/weird.exp: variable attr77 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr77)
+PASS: gdb.stabs/weird.exp: variable attr78 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr78)
+PASS: gdb.stabs/weird.exp: variable attr79 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr79)
+PASS: gdb.stabs/weird.exp: variable attr80 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr80)
+PASS: gdb.stabs/weird.exp: variable attr81 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr81)
+PASS: gdb.stabs/weird.exp: variable attr82 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr82)
+PASS: gdb.stabs/weird.exp: variable attr83 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr83)
+PASS: gdb.stabs/weird.exp: variable attr84 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr84)
+PASS: gdb.stabs/weird.exp: variable attr85 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr85)
+PASS: gdb.stabs/weird.exp: variable attr86 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr86)
+PASS: gdb.stabs/weird.exp: variable attr87 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr87)
+PASS: gdb.stabs/weird.exp: variable attr88 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr88)
+PASS: gdb.stabs/weird.exp: variable attr89 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr89)
+PASS: gdb.stabs/weird.exp: variable attr90 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr90)
+PASS: gdb.stabs/weird.exp: variable attr91 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr91)
+PASS: gdb.stabs/weird.exp: variable attr92 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr92)
+PASS: gdb.stabs/weird.exp: variable attr93 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr93)
+PASS: gdb.stabs/weird.exp: variable attr94 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr94)
+PASS: gdb.stabs/weird.exp: variable attr95 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr95)
+PASS: gdb.stabs/weird.exp: variable attr96 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr96)
+PASS: gdb.stabs/weird.exp: variable attr97 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr97)
+PASS: gdb.stabs/weird.exp: variable attr98 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr98)
+PASS: gdb.stabs/weird.exp: variable attr99 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr99)
+PASS: gdb.stabs/weird.exp: variable attr100 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr100)
+PASS: gdb.stabs/weird.exp: variable attr101 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr101)
+PASS: gdb.stabs/weird.exp: variable attr102 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr102)
+PASS: gdb.stabs/weird.exp: variable attr103 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr103)
+PASS: gdb.stabs/weird.exp: variable attr104 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr104)
+PASS: gdb.stabs/weird.exp: variable attr105 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr105)
+PASS: gdb.stabs/weird.exp: variable attr106 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr106)
+PASS: gdb.stabs/weird.exp: variable attr107 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr107)
+PASS: gdb.stabs/weird.exp: variable attr108 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr108)
+PASS: gdb.stabs/weird.exp: variable attr109 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr109)
+PASS: gdb.stabs/weird.exp: variable attr110 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr110)
+PASS: gdb.stabs/weird.exp: variable attr111 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr111)
+PASS: gdb.stabs/weird.exp: variable attr112 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr112)
+PASS: gdb.stabs/weird.exp: variable attr113 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr113)
+PASS: gdb.stabs/weird.exp: variable attr114 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr114)
+PASS: gdb.stabs/weird.exp: variable attr115 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr115)
+PASS: gdb.stabs/weird.exp: variable attr116 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr116)
+PASS: gdb.stabs/weird.exp: variable attr117 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr117)
+PASS: gdb.stabs/weird.exp: variable attr118 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr118)
+PASS: gdb.stabs/weird.exp: variable attr119 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr119)
+PASS: gdb.stabs/weird.exp: variable attr120 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr120)
+PASS: gdb.stabs/weird.exp: variable attr121 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr121)
+PASS: gdb.stabs/weird.exp: variable attr122 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr122)
+PASS: gdb.stabs/weird.exp: variable attr123 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr123)
+PASS: gdb.stabs/weird.exp: variable attr124 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr124)
+PASS: gdb.stabs/weird.exp: variable attr125 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr125)
+PASS: gdb.stabs/weird.exp: variable attr126 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr126)
+PASS: gdb.stabs/weird.exp: 'e' constant on non-enum type
+PASS: gdb.stabs/weird.exp: whatis const69
+PASS: gdb.stabs/weird.exp: 'e' constant with embedded type
+PASS: gdb.stabs/weird.exp: char constant
+PASS: gdb.stabs/weird.exp: String constant 1
+PASS: gdb.stabs/weird.exp: String constant 2
+PASS: gdb.stabs/weird.exp: String constant 3
+PASS: gdb.stabs/weird.exp: String constant 4
+PASS: gdb.stabs/weird.exp: p bad_neg0
+PASS: gdb.stabs/weird.exp: ptype on inttype
+PASS: gdb.stabs/weird.exp: unrecognized floating point type
+PASS: gdb.stabs/weird.exp: print very big integer
+PASS: gdb.stabs/weird.exp: whatis consth
+PASS: gdb.stabs/weird.exp: whatis consth2
+XFAIL: gdb.stabs/weird.exp: print struct constant
+PASS: gdb.stabs/weird.exp: print bad_type0
+PASS: gdb.stabs/weird.exp: print bad_type1
+XFAIL: gdb.stabs/weird.exp: array0 with strange index
+XFAIL: gdb.stabs/weird.exp: array1 with strange index
+PASS: gdb.stabs/weird.exp: whatis one_var (known failure in gdb 4.10)
+PASS: gdb.stabs/weird.exp: whatis one_var test 2
+PASS: gdb.stabs/weird.exp: whatis two_var (known failure in gdb 4.10)
+PASS: gdb.stabs/weird.exp: whatis two_var test 2
+XFAIL: gdb.stabs/weird.exp: whatis pointer_to_int_var
+XFAIL: gdb.stabs/weird.exp: whatis intp_var
+PASS: gdb.stabs/weird.exp: p common0var0
+XFAIL: gdb.stabs/weird.exp: p common0var1
+XFAIL: gdb.stabs/weird.exp: p common0var2
+Running ./gdb.threads/attach-into-signal.exp ...
+Running ./gdb.threads/attach-stopped.exp ...
+Running ./gdb.threads/bp_in_thread.exp ...
+PASS: gdb.threads/bp_in_thread.exp: successfully compiled posix threads test case
+PASS: gdb.threads/bp_in_thread.exp: breakpoint on noreturn
+PASS: gdb.threads/bp_in_thread.exp: run to noreturn
+Running ./gdb.threads/clone-new-thread-event.exp ...
+PASS: gdb.threads/clone-new-thread-event.exp: catch SIGUSR1
+Running ./gdb.threads/corethreads.exp ...
+Running ./gdb.threads/create-fail.exp ...
+PASS: gdb.threads/create-fail.exp: successfully compiled posix threads test case
+PASS: gdb.threads/create-fail.exp: iteration 1: run till end
+PASS: gdb.threads/create-fail.exp: iteration 2: run till end
+PASS: gdb.threads/create-fail.exp: iteration 3: run till end
+PASS: gdb.threads/create-fail.exp: iteration 4: run till end
+PASS: gdb.threads/create-fail.exp: iteration 5: run till end
+PASS: gdb.threads/create-fail.exp: iteration 6: run till end
+PASS: gdb.threads/create-fail.exp: iteration 7: run till end
+PASS: gdb.threads/create-fail.exp: iteration 8: run till end
+PASS: gdb.threads/create-fail.exp: iteration 9: run till end
+PASS: gdb.threads/create-fail.exp: iteration 10: run till end
+Running ./gdb.threads/current-lwp-dead.exp ...
+PASS: gdb.threads/current-lwp-dead.exp: continue to breakpoint: fn_return
+Running ./gdb.threads/execl.exp ...
+Running ./gdb.threads/fork-child-threads.exp ...
+Running ./gdb.threads/fork-thread-pending.exp ...
+Running ./gdb.threads/gcore-thread.exp ...
+PASS: gdb.threads/gcore-thread.exp: successfully compiled posix threads test case
+PASS: gdb.threads/gcore-thread.exp: successfully compiled posix threads test case
+PASS: gdb.threads/gcore-thread.exp: help gcore
+PASS: gdb.threads/gcore-thread.exp: thread 1 is running
+PASS: gdb.threads/gcore-thread.exp: thread 2 is running
+PASS: gdb.threads/gcore-thread.exp: save a corefile
+PASS: gdb.threads/gcore-thread.exp: clear __stack_user.next
+PASS: gdb.threads/gcore-thread.exp: clear stack_used.next
+PASS: gdb.threads/gcore-thread.exp: save a zeroed-threads corefile
+FAIL: gdb.threads/gcore-thread.exp: corefile: re-load generated corefile (bad file format)
+FAIL: gdb.threads/gcore-thread.exp: core0file: re-load generated corefile (bad file format)
+Running ./gdb.threads/hand-call-in-threads.exp ...
+PASS: gdb.threads/hand-call-in-threads.exp: successfully compiled posix threads test case
+PASS: gdb.threads/hand-call-in-threads.exp: breakpoint on all_threads_running
+PASS: gdb.threads/hand-call-in-threads.exp: breakpoint on hand_call
+PASS: gdb.threads/hand-call-in-threads.exp: run to all_threads_running
+PASS: gdb.threads/hand-call-in-threads.exp: enable scheduler locking
+PASS: gdb.threads/hand-call-in-threads.exp: show scheduler locking on
+PASS: gdb.threads/hand-call-in-threads.exp: prepare to make hand call, thread 1
+PASS: gdb.threads/hand-call-in-threads.exp: hand call, thread 1
+PASS: gdb.threads/hand-call-in-threads.exp: prepare to make hand call, thread 2
+PASS: gdb.threads/hand-call-in-threads.exp: hand call, thread 2
+PASS: gdb.threads/hand-call-in-threads.exp: prepare to make hand call, thread 3
+PASS: gdb.threads/hand-call-in-threads.exp: hand call, thread 3
+PASS: gdb.threads/hand-call-in-threads.exp: prepare to make hand call, thread 4
+PASS: gdb.threads/hand-call-in-threads.exp: hand call, thread 4
+PASS: gdb.threads/hand-call-in-threads.exp: prepare to make hand call, thread 5
+PASS: gdb.threads/hand-call-in-threads.exp: hand call, thread 5
+PASS: gdb.threads/hand-call-in-threads.exp: set confirm off
+PASS: gdb.threads/hand-call-in-threads.exp: prepare to discard hand call, thread 1
+PASS: gdb.threads/hand-call-in-threads.exp: dummy stack frame number, thread 1
+PASS: gdb.threads/hand-call-in-threads.exp: setting frame, thread 1
+PASS: gdb.threads/hand-call-in-threads.exp: discard hand call, thread 1
+PASS: gdb.threads/hand-call-in-threads.exp: prepare to discard hand call, thread 2
+PASS: gdb.threads/hand-call-in-threads.exp: dummy stack frame number, thread 2
+PASS: gdb.threads/hand-call-in-threads.exp: setting frame, thread 2
+PASS: gdb.threads/hand-call-in-threads.exp: discard hand call, thread 2
+PASS: gdb.threads/hand-call-in-threads.exp: prepare to discard hand call, thread 3
+PASS: gdb.threads/hand-call-in-threads.exp: dummy stack frame number, thread 3
+PASS: gdb.threads/hand-call-in-threads.exp: setting frame, thread 3
+PASS: gdb.threads/hand-call-in-threads.exp: discard hand call, thread 3
+PASS: gdb.threads/hand-call-in-threads.exp: prepare to discard hand call, thread 4
+PASS: gdb.threads/hand-call-in-threads.exp: dummy stack frame number, thread 4
+PASS: gdb.threads/hand-call-in-threads.exp: setting frame, thread 4
+PASS: gdb.threads/hand-call-in-threads.exp: discard hand call, thread 4
+PASS: gdb.threads/hand-call-in-threads.exp: prepare to discard hand call, thread 5
+PASS: gdb.threads/hand-call-in-threads.exp: dummy stack frame number, thread 5
+PASS: gdb.threads/hand-call-in-threads.exp: setting frame, thread 5
+PASS: gdb.threads/hand-call-in-threads.exp: discard hand call, thread 5
+PASS: gdb.threads/hand-call-in-threads.exp: all dummies popped
+PASS: gdb.threads/hand-call-in-threads.exp: disable scheduler locking
+PASS: gdb.threads/hand-call-in-threads.exp: show scheduler locking off
+Running ./gdb.threads/ia64-sigill.exp ...
+PASS: gdb.threads/ia64-sigill.exp: successfully compiled posix threads test case
+PASS: gdb.threads/ia64-sigill.exp: info addr label
+PASS: gdb.threads/ia64-sigill.exp: set $sigill_bpnum=$bpnum
+PASS: gdb.threads/ia64-sigill.exp: set debug infrun 1
+PASS: gdb.threads/ia64-sigill.exp: continue
+PASS: gdb.threads/ia64-sigill.exp: delete $sigill_bpnum
+PASS: gdb.threads/ia64-sigill.exp: continue for the pending signal
+Running ./gdb.threads/interrupted-hand-call.exp ...
+PASS: gdb.threads/interrupted-hand-call.exp: successfully compiled posix threads test case
+PASS: gdb.threads/interrupted-hand-call.exp: breakpoint on all_threads_running
+PASS: gdb.threads/interrupted-hand-call.exp: run to all_threads_running
+PASS: gdb.threads/interrupted-hand-call.exp: hand-call interrupted by signal in another thread
+PASS: gdb.threads/interrupted-hand-call.exp: dummy stack frame present
+PASS: gdb.threads/interrupted-hand-call.exp: finish hand-call
+PASS: gdb.threads/interrupted-hand-call.exp: dummy frame popped
+PASS: gdb.threads/interrupted-hand-call.exp: continue until exit
+Running ./gdb.threads/killed.exp ...
+PASS: gdb.threads/killed.exp: successfully compiled posix threads test case
+PASS: gdb.threads/killed.exp: run program to completion
+PASS: gdb.threads/killed.exp: GDB exits after multi-threaded program exits messily
+Running ./gdb.threads/leader-exit.exp ...
+PASS: gdb.threads/leader-exit.exp: successfully compiled posix threads test case
+FAIL: gdb.threads/leader-exit.exp: continue to breakpoint: break-here (timeout)
+FAIL: gdb.threads/leader-exit.exp: Single thread has been left (timeout)
+Running ./gdb.threads/linux-dp.exp ...
+PASS: gdb.threads/linux-dp.exp: successfully compiled posix threads test case
+PASS: gdb.threads/linux-dp.exp: set print sevenbit-strings
+PASS: gdb.threads/linux-dp.exp: info threads 1
+PASS: gdb.threads/linux-dp.exp: continue to breakpoint: about to create philosopher: 0
+UNSUPPORTED: gdb.threads/linux-dp.exp: create philosopher: 0
+PASS: gdb.threads/linux-dp.exp: info threads after: 0
+PASS: gdb.threads/linux-dp.exp: continue to breakpoint: about to create philosopher: 1
+UNSUPPORTED: gdb.threads/linux-dp.exp: create philosopher: 1
+PASS: gdb.threads/linux-dp.exp: info threads after: 1
+PASS: gdb.threads/linux-dp.exp: continue to breakpoint: about to create philosopher: 2
+UNSUPPORTED: gdb.threads/linux-dp.exp: create philosopher: 2
+PASS: gdb.threads/linux-dp.exp: info threads after: 2
+PASS: gdb.threads/linux-dp.exp: continue to breakpoint: about to create philosopher: 3
+UNSUPPORTED: gdb.threads/linux-dp.exp: create philosopher: 3
+PASS: gdb.threads/linux-dp.exp: info threads after: 3
+PASS: gdb.threads/linux-dp.exp: continue to breakpoint: about to create philosopher: 4
+UNSUPPORTED: gdb.threads/linux-dp.exp: create philosopher: 4
+PASS: gdb.threads/linux-dp.exp: info threads after: 4
+PASS: gdb.threads/linux-dp.exp: continue to breakpoint: main thread's sleep
+PASS: gdb.threads/linux-dp.exp: info threads 2
+PASS: gdb.threads/linux-dp.exp: continue to breakpoint: thread 5's print
+PASS: gdb.threads/linux-dp.exp: first thread-specific breakpoint hit
+PASS: gdb.threads/linux-dp.exp: continue to breakpoint: thread 5's print, pass: 0
+PASS: gdb.threads/linux-dp.exp: continue to breakpoint: thread 5's print, pass: 1
+PASS: gdb.threads/linux-dp.exp: continue to breakpoint: thread 5's print, pass: 2
+PASS: gdb.threads/linux-dp.exp: continue to breakpoint: thread 5's print, pass: 3
+PASS: gdb.threads/linux-dp.exp: continue to breakpoint: thread 5's print, pass: 4
+PASS: gdb.threads/linux-dp.exp: continue to breakpoint: thread 5's print, pass: 5
+PASS: gdb.threads/linux-dp.exp: continue to breakpoint: thread 5's print, pass: 6
+PASS: gdb.threads/linux-dp.exp: continue to breakpoint: thread 5's print, pass: 7
+PASS: gdb.threads/linux-dp.exp: continue to breakpoint: thread 5's print, pass: 8
+PASS: gdb.threads/linux-dp.exp: continue to breakpoint: thread 5's print, pass: 9
+PASS: gdb.threads/linux-dp.exp: thread-specific breakpoint is thread-specific
+PASS: gdb.threads/linux-dp.exp: selected thread: 1
+PASS: gdb.threads/linux-dp.exp: main is distinct: 1
+PASS: gdb.threads/linux-dp.exp: selected thread: 2
+PASS: gdb.threads/linux-dp.exp: philosopher is distinct: 2
+PASS: gdb.threads/linux-dp.exp: selected thread: 3
+PASS: gdb.threads/linux-dp.exp: philosopher is distinct: 3
+PASS: gdb.threads/linux-dp.exp: selected thread: 4
+PASS: gdb.threads/linux-dp.exp: philosopher is distinct: 4
+PASS: gdb.threads/linux-dp.exp: selected thread: 5
+PASS: gdb.threads/linux-dp.exp: philosopher is distinct: 5
+PASS: gdb.threads/linux-dp.exp: selected thread: 6
+PASS: gdb.threads/linux-dp.exp: philosopher is distinct: 6
+PASS: gdb.threads/linux-dp.exp: found an interesting thread
+PASS: gdb.threads/linux-dp.exp: manager thread found (not found) when expected
+Running ./gdb.threads/local-watch-wrong-thread.exp ...
+Running ./gdb.threads/manythreads.exp ...
+PASS: gdb.threads/manythreads.exp: successfully compiled posix threads test case
+PASS: gdb.threads/manythreads.exp: set print sevenbit-strings
+PASS: gdb.threads/manythreads.exp: shell stty intr '^C'
+PASS: gdb.threads/manythreads.exp: first continue
+PASS: gdb.threads/manythreads.exp: stop threads 1
+PASS: gdb.threads/manythreads.exp: info threads
+PASS: gdb.threads/manythreads.exp: give a name to the thread
+PASS: gdb.threads/manythreads.exp: check thread name
+PASS: gdb.threads/manythreads.exp: second continue
+PASS: gdb.threads/manythreads.exp: check for duplicate SIGINT
+PASS: gdb.threads/manythreads.exp: stop threads 2
+PASS: gdb.threads/manythreads.exp: GDB exits after stopping multithreaded program
+Running ./gdb.threads/multi-create.exp ...
+PASS: gdb.threads/multi-create.exp: successfully compiled posix threads test case
+PASS: gdb.threads/multi-create.exp: continue to breakpoint 0
+PASS: gdb.threads/multi-create.exp: continue to breakpoint 1
+PASS: gdb.threads/multi-create.exp: continue to breakpoint 2
+PASS: gdb.threads/multi-create.exp: continue to breakpoint 3
+PASS: gdb.threads/multi-create.exp: continue to breakpoint 4
+PASS: gdb.threads/multi-create.exp: continue to breakpoint 5
+PASS: gdb.threads/multi-create.exp: continue to breakpoint 6
+PASS: gdb.threads/multi-create.exp: continue to breakpoint 7
+PASS: gdb.threads/multi-create.exp: continue to breakpoint 8
+PASS: gdb.threads/multi-create.exp: continue to breakpoint 9
+PASS: gdb.threads/multi-create.exp: continue to breakpoint 10
+PASS: gdb.threads/multi-create.exp: continue to breakpoint 11
+PASS: gdb.threads/multi-create.exp: continue to breakpoint 12
+PASS: gdb.threads/multi-create.exp: continue to breakpoint 13
+PASS: gdb.threads/multi-create.exp: continue to breakpoint 14
+PASS: gdb.threads/multi-create.exp: continue to breakpoint 15
+PASS: gdb.threads/multi-create.exp: continue to breakpoint 16
+PASS: gdb.threads/multi-create.exp: continue to breakpoint 17
+PASS: gdb.threads/multi-create.exp: continue to breakpoint 18
+PASS: gdb.threads/multi-create.exp: continue to breakpoint 19
+PASS: gdb.threads/multi-create.exp: continue to breakpoint 20
+PASS: gdb.threads/multi-create.exp: continue to breakpoint 21
+PASS: gdb.threads/multi-create.exp: continue to breakpoint 22
+PASS: gdb.threads/multi-create.exp: continue to breakpoint 23
+PASS: gdb.threads/multi-create.exp: continue to breakpoint 24
+PASS: gdb.threads/multi-create.exp: continue to breakpoint 25
+PASS: gdb.threads/multi-create.exp: continue to breakpoint 26
+PASS: gdb.threads/multi-create.exp: continue to breakpoint 27
+PASS: gdb.threads/multi-create.exp: continue to breakpoint 28
+PASS: gdb.threads/multi-create.exp: continue to breakpoint 29
+PASS: gdb.threads/multi-create.exp: continue to breakpoint 30
+PASS: gdb.threads/multi-create.exp: continue to breakpoint 31
+Running ./gdb.threads/non-ldr-exc-1.exp ...
+Running ./gdb.threads/non-ldr-exc-2.exp ...
+Running ./gdb.threads/non-ldr-exc-3.exp ...
+Running ./gdb.threads/non-ldr-exc-4.exp ...
+Running ./gdb.threads/no-unwaited-for-left.exp ...
+PASS: gdb.threads/no-unwaited-for-left.exp: successfully compiled posix threads test case
+PASS: gdb.threads/no-unwaited-for-left.exp: continue to breakpoint: break-here
+PASS: gdb.threads/no-unwaited-for-left.exp: enable scheduler-locking, for thread 2
+FAIL: gdb.threads/no-unwaited-for-left.exp: continue stops when thread 2 exits (the program exited)
+FAIL: gdb.threads/no-unwaited-for-left.exp: only main thread left, thread 2 terminated
+PASS: gdb.threads/no-unwaited-for-left.exp: select main thread
+FAIL: gdb.threads/no-unwaited-for-left.exp: disable scheduler-locking, letting new thread start
+FAIL: gdb.threads/no-unwaited-for-left.exp: continue to breakpoint: break-here-2
+FAIL: gdb.threads/no-unwaited-for-left.exp: enable scheduler-locking, for main thread
+FAIL: gdb.threads/no-unwaited-for-left.exp: continue stops when the main thread exits (the program is no longer running)
+FAIL: gdb.threads/no-unwaited-for-left.exp: only thread 3 left, main thread terminated
+Running ./gdb.threads/pending-step.exp ...
+PASS: gdb.threads/pending-step.exp: successfully compiled posix threads test case
+PASS: gdb.threads/pending-step.exp: continue to breakpoint: continue to first breakpoint hit
+PASS: gdb.threads/pending-step.exp: next in multiple threads with breakpoints
+Running ./gdb.threads/print-threads.exp ...
+PASS: gdb.threads/print-threads.exp: successfully compiled posix threads test case
+PASS: gdb.threads/print-threads.exp: set print sevenbit-strings
+PASS: gdb.threads/print-threads.exp: set width 0
+PASS: gdb.threads/print-threads.exp: shell stty intr '^C'
+PASS: gdb.threads/print-threads.exp: break thread_function
+PASS: gdb.threads/print-threads.exp: set var slow = 0
+PASS: gdb.threads/print-threads.exp: Hit thread_function breakpoint, 1 (fast)
+PASS: gdb.threads/print-threads.exp: Hit thread_function breakpoint, 2 (fast)
+PASS: gdb.threads/print-threads.exp: Hit thread_function breakpoint, 3 (fast)
+PASS: gdb.threads/print-threads.exp: Hit thread_function breakpoint, 4 (fast)
+PASS: gdb.threads/print-threads.exp: Hit thread_function breakpoint, 5 (fast)
+PASS: gdb.threads/print-threads.exp: program exited normally
+PASS: gdb.threads/print-threads.exp: all threads ran once (fast)
+PASS: gdb.threads/print-threads.exp: break thread_function (2)
+PASS: gdb.threads/print-threads.exp: set var slow = 1
+PASS: gdb.threads/print-threads.exp: Hit thread_function breakpoint, 1 (slow)
+PASS: gdb.threads/print-threads.exp: Hit thread_function breakpoint, 2 (slow)
+PASS: gdb.threads/print-threads.exp: Hit thread_function breakpoint, 3 (slow)
+PASS: gdb.threads/print-threads.exp: Hit thread_function breakpoint, 4 (slow)
+PASS: gdb.threads/print-threads.exp: Hit thread_function breakpoint, 5 (slow)
+PASS: gdb.threads/print-threads.exp: program exited normally
+PASS: gdb.threads/print-threads.exp: all threads ran once (slow)
+PASS: gdb.threads/print-threads.exp: break thread_function (3)
+PASS: gdb.threads/print-threads.exp: set var slow = 1 (2)
+PASS: gdb.threads/print-threads.exp: Hit thread_function breakpoint, 1 (slow with kill breakpoint)
+PASS: gdb.threads/print-threads.exp: Hit thread_function breakpoint, 2 (slow with kill breakpoint)
+PASS: gdb.threads/print-threads.exp: Hit thread_function breakpoint, 3 (slow with kill breakpoint)
+PASS: gdb.threads/print-threads.exp: Hit thread_function breakpoint, 4 (slow with kill breakpoint)
+PASS: gdb.threads/print-threads.exp: Hit thread_function breakpoint, 5 (slow with kill breakpoint)
+PASS: gdb.threads/print-threads.exp: program exited normally
+PASS: gdb.threads/print-threads.exp: all threads ran once (slow with kill breakpoint)
+Running ./gdb.threads/pthread_cond_wait.exp ...
+PASS: gdb.threads/pthread_cond_wait.exp: successfully compiled posix threads test case
+PASS: gdb.threads/pthread_cond_wait.exp: breakpoint on break_me
+PASS: gdb.threads/pthread_cond_wait.exp: run to break_me
+PASS: gdb.threads/pthread_cond_wait.exp: backtrace in blocked thread
+Running ./gdb.threads/pthreads.exp ...
+PASS: gdb.threads/pthreads.exp: successfully compiled posix threads test case
+PASS: gdb.threads/pthreads.exp: set print sevenbit-strings
+PASS: gdb.threads/pthreads.exp: set width 0
+PASS: gdb.threads/pthreads.exp: shell stty intr '^C'
+PASS: gdb.threads/pthreads.exp: info threads
+PASS: gdb.threads/pthreads.exp: break thread1
+PASS: gdb.threads/pthreads.exp: Continue to creation of first thread
+PASS: gdb.threads/pthreads.exp: disable
+PASS: gdb.threads/pthreads.exp: break thread2
+PASS: gdb.threads/pthreads.exp: Continue to creation of second thread
+PASS: gdb.threads/pthreads.exp: set var common_routine::hits=0
+PASS: gdb.threads/pthreads.exp: set var common_routine::from_thread1=0
+PASS: gdb.threads/pthreads.exp: set var common_routine::from_thread2=0
+PASS: gdb.threads/pthreads.exp: set var common_routine::from_main=0
+PASS: gdb.threads/pthreads.exp: set var common_routine::full_coverage=0
+PASS: gdb.threads/pthreads.exp: disable
+PASS: gdb.threads/pthreads.exp: tbreak common_routine if hits >= 15
+PASS: gdb.threads/pthreads.exp: stopped before calling common_routine 15 times
+PASS: gdb.threads/pthreads.exp: All threads running after startup
+PASS: gdb.threads/pthreads.exp: Continue with all threads running
+PASS: gdb.threads/pthreads.exp: Stopped with a ^C
+PASS: gdb.threads/pthreads.exp: bt
+PASS: gdb.threads/pthreads.exp: set var common_routine::hits=0
+PASS: gdb.threads/pthreads.exp: set var common_routine::from_thread1=0
+PASS: gdb.threads/pthreads.exp: set var common_routine::from_thread2=0
+PASS: gdb.threads/pthreads.exp: set var common_routine::from_main=0
+PASS: gdb.threads/pthreads.exp: set var common_routine::full_coverage=0
+PASS: gdb.threads/pthreads.exp: disable
+PASS: gdb.threads/pthreads.exp: tbreak common_routine if hits >= 15
+PASS: gdb.threads/pthreads.exp: stopped before calling common_routine 15 times
+PASS: gdb.threads/pthreads.exp: All threads running after continuing from ^C stop
+PASS: gdb.threads/pthreads.exp: check backtrace from main thread
+PASS: gdb.threads/pthreads.exp: check backtrace from thread 1
+PASS: gdb.threads/pthreads.exp: check backtrace from thread 2
+PASS: gdb.threads/pthreads.exp: apply backtrace command to all three threads
+PASS: gdb.threads/pthreads.exp: set break at common_routine in thread 2
+PASS: gdb.threads/pthreads.exp: continue to bkpt at common_routine in thread 2
+PASS: gdb.threads/pthreads.exp: backtrace from thread 2 bkpt in common_routine
+Running ./gdb.threads/schedlock.exp ...
+PASS: gdb.threads/schedlock.exp: successfully compiled posix threads test case
+PASS: gdb.threads/schedlock.exp: shell stty intr '^C'
+PASS: gdb.threads/schedlock.exp: set print sevenbit-strings
+PASS: gdb.threads/schedlock.exp: set width 0
+PASS: gdb.threads/schedlock.exp: scheduler locking set to none
+PASS: gdb.threads/schedlock.exp: continue to breakpoint: all threads started
+PASS: gdb.threads/schedlock.exp: listed args (1)
+PASS: gdb.threads/schedlock.exp: continue (initial)
+PASS: gdb.threads/schedlock.exp: stop all threads (initial)
+PASS: gdb.threads/schedlock.exp: continue to breakpoint: return to loop (initial)
+PASS: gdb.threads/schedlock.exp: listed args (2)
+PASS: gdb.threads/schedlock.exp: all threads alive
+PASS: gdb.threads/schedlock.exp: find current thread (1)
+PASS: gdb.threads/schedlock.exp: set scheduler-locking off
+PASS: gdb.threads/schedlock.exp: step to increment (unlocked 0)
+PASS: gdb.threads/schedlock.exp: step to increment (unlocked 1)
+PASS: gdb.threads/schedlock.exp: step to increment (unlocked 2)
+PASS: gdb.threads/schedlock.exp: step to increment (unlocked 3)
+PASS: gdb.threads/schedlock.exp: step to increment (unlocked 4)
+PASS: gdb.threads/schedlock.exp: step to increment (unlocked 5)
+PASS: gdb.threads/schedlock.exp: step to increment (unlocked 6)
+PASS: gdb.threads/schedlock.exp: step to increment (unlocked 7)
+PASS: gdb.threads/schedlock.exp: step to increment (unlocked 8)
+PASS: gdb.threads/schedlock.exp: step to increment (unlocked 9)
+PASS: gdb.threads/schedlock.exp: find current thread (2)
+PASS: gdb.threads/schedlock.exp: step without lock does not change thread
+PASS: gdb.threads/schedlock.exp: listed args (3)
+PASS: gdb.threads/schedlock.exp: current thread stepped
+PASS: gdb.threads/schedlock.exp: other threads ran - unlocked
+PASS: gdb.threads/schedlock.exp: set scheduler-locking on
+PASS: gdb.threads/schedlock.exp: continue (with lock)
+PASS: gdb.threads/schedlock.exp: stop all threads (with lock)
+PASS: gdb.threads/schedlock.exp: continue to breakpoint: return to loop (with lock)
+PASS: gdb.threads/schedlock.exp: find current thread (3)
+PASS: gdb.threads/schedlock.exp: continue with lock does not change thread
+PASS: gdb.threads/schedlock.exp: listed args (4)
+PASS: gdb.threads/schedlock.exp: current thread ran
+PASS: gdb.threads/schedlock.exp: other threads didn't run - locked
+PASS: gdb.threads/schedlock.exp: step to increment (locked 0)
+PASS: gdb.threads/schedlock.exp: step to increment (locked 1)
+PASS: gdb.threads/schedlock.exp: step to increment (locked 2)
+PASS: gdb.threads/schedlock.exp: step to increment (locked 3)
+PASS: gdb.threads/schedlock.exp: step to increment (locked 4)
+PASS: gdb.threads/schedlock.exp: step to increment (locked 5)
+PASS: gdb.threads/schedlock.exp: step to increment (locked 6)
+PASS: gdb.threads/schedlock.exp: step to increment (locked 7)
+PASS: gdb.threads/schedlock.exp: step to increment (locked 8)
+PASS: gdb.threads/schedlock.exp: step to increment (locked 9)
+PASS: gdb.threads/schedlock.exp: find current thread (2)
+PASS: gdb.threads/schedlock.exp: step with lock does not change thread
+PASS: gdb.threads/schedlock.exp: listed args (5)
+PASS: gdb.threads/schedlock.exp: current thread stepped locked
+PASS: gdb.threads/schedlock.exp: other threads didn't run - step locked
+Running ./gdb.threads/siginfo-threads.exp ...
+PASS: gdb.threads/siginfo-threads.exp: successfully compiled posix threads test case
+PASS: gdb.threads/siginfo-threads.exp: handle SIGUSR1 stop print pass
+PASS: gdb.threads/siginfo-threads.exp: handle SIGUSR2 stop print pass
+PASS: gdb.threads/siginfo-threads.exp: get pid
+PASS: gdb.threads/siginfo-threads.exp: catch signal 0
+PASS: gdb.threads/siginfo-threads.exp: signal 0 si_signo
+PASS: gdb.threads/siginfo-threads.exp: signal 0 si_code is SI_TKILL
+PASS: gdb.threads/siginfo-threads.exp: signal 0 si_pid
+PASS: gdb.threads/siginfo-threads.exp: catch signal 1
+PASS: gdb.threads/siginfo-threads.exp: signal 1 si_signo
+PASS: gdb.threads/siginfo-threads.exp: signal 1 si_code is SI_TKILL
+PASS: gdb.threads/siginfo-threads.exp: signal 1 si_pid
+PASS: gdb.threads/siginfo-threads.exp: catch signal 2
+PASS: gdb.threads/siginfo-threads.exp: signal 2 si_signo
+PASS: gdb.threads/siginfo-threads.exp: signal 2 si_code is SI_TKILL
+PASS: gdb.threads/siginfo-threads.exp: signal 2 si_pid
+PASS: gdb.threads/siginfo-threads.exp: catch signal 3
+PASS: gdb.threads/siginfo-threads.exp: signal 3 si_signo
+PASS: gdb.threads/siginfo-threads.exp: signal 3 si_code is SI_TKILL
+PASS: gdb.threads/siginfo-threads.exp: signal 3 si_pid
+PASS: gdb.threads/siginfo-threads.exp: continue to breakpoint: break-at-exit
+Running ./gdb.threads/sigstep-threads.exp ...
+PASS: gdb.threads/sigstep-threads.exp: successfully compiled posix threads test case
+PASS: gdb.threads/sigstep-threads.exp: handle SIGUSR1 nostop print pass
+PASS: gdb.threads/sigstep-threads.exp: set scheduler-locking off
+PASS: gdb.threads/sigstep-threads.exp: set $step1=$bpnum
+PASS: gdb.threads/sigstep-threads.exp: continue to breakpoint: step-1
+PASS: gdb.threads/sigstep-threads.exp: disable $step1
+PASS: gdb.threads/sigstep-threads.exp: step
+Running ./gdb.threads/sigthread.exp ...
+PASS: gdb.threads/sigthread.exp: successfully compiled posix threads test case
+PASS: gdb.threads/sigthread.exp: handle SIGUSR1 nostop noprint pass
+PASS: gdb.threads/sigthread.exp: handle SIGUSR2 nostop noprint pass
+PASS: gdb.threads/sigthread.exp: continue
+PASS: gdb.threads/sigthread.exp: stop with control-c
+Running ./gdb.threads/staticthreads.exp ...
+PASS: gdb.threads/staticthreads.exp: successfully compiled posix threads test case
+PASS: gdb.threads/staticthreads.exp: set print sevenbit-strings
+PASS: gdb.threads/staticthreads.exp: break sem_post
+PASS: gdb.threads/staticthreads.exp: Continue to main's call of sem_post
+PASS: gdb.threads/staticthreads.exp: rerun to main
+PASS: gdb.threads/staticthreads.exp: handle SIG32 nostop noprint pass
+PASS: gdb.threads/staticthreads.exp: handle SIG32 helps
+PASS: gdb.threads/staticthreads.exp: info threads
+PASS: gdb.threads/staticthreads.exp: GDB exits with static thread program
+Running ./gdb.threads/switch-threads.exp ...
+PASS: gdb.threads/switch-threads.exp: successfully compiled posix threads test case
+PASS: gdb.threads/switch-threads.exp: continue to breakpoint: continue to thread_func
+PASS: gdb.threads/switch-threads.exp: next
+Running ./gdb.threads/threadapply.exp ...
+PASS: gdb.threads/threadapply.exp: successfully compiled posix threads test case
+PASS: gdb.threads/threadapply.exp: b 62
+PASS: gdb.threads/threadapply.exp: continue
+PASS: gdb.threads/threadapply.exp: macro details
+PASS: gdb.threads/threadapply.exp: defining macro
+PASS: gdb.threads/threadapply.exp: set backtrace limit 3
+PASS: gdb.threads/threadapply.exp: thread apply all backthread
+PASS: gdb.threads/threadapply.exp: step to the thread_function
+PASS: gdb.threads/threadapply.exp: go up in the stack frame
+PASS: gdb.threads/threadapply.exp: run a simple print command on all threads
+PASS: gdb.threads/threadapply.exp: go down and check selected frame
+Running ./gdb.threads/thread_check.exp ...
+PASS: gdb.threads/thread_check.exp: successfully compiled posix threads test case
+PASS: gdb.threads/thread_check.exp: breakpoint at tf
+PASS: gdb.threads/thread_check.exp: continue to tf
+PASS: gdb.threads/thread_check.exp: backtrace from thread function
+Running ./gdb.threads/thread_events.exp ...
+Running ./gdb.threads/thread-execl.exp ...
+Running ./gdb.threads/thread-find.exp ...
+PASS: gdb.threads/thread-find.exp: successfully compiled posix threads test case
+PASS: gdb.threads/thread-find.exp: set print sevenbit-strings
+PASS: gdb.threads/thread-find.exp: continue to breakpoint: main thread's sleep
+PASS: gdb.threads/thread-find.exp: info threads
+PASS: gdb.threads/thread-find.exp: name thread 1
+PASS: gdb.threads/thread-find.exp: name thread 2
+PASS: gdb.threads/thread-find.exp: name thread 3
+PASS: gdb.threads/thread-find.exp: name thread 4
+PASS: gdb.threads/thread-find.exp: name thread 5
+PASS: gdb.threads/thread-find.exp: name thread 6
+PASS: gdb.threads/thread-find.exp: collect thread id
+PASS: gdb.threads/thread-find.exp: got thread ids
+PASS: gdb.threads/thread-find.exp: collect process id
+PASS: gdb.threads/thread-find.exp: collect lwp id
+PASS: gdb.threads/thread-find.exp: find thread name 6
+PASS: gdb.threads/thread-find.exp: find thread name 5
+PASS: gdb.threads/thread-find.exp: find thread name 4
+PASS: gdb.threads/thread-find.exp: find thread name 3
+PASS: gdb.threads/thread-find.exp: find thread name 2
+PASS: gdb.threads/thread-find.exp: find thread name 1
+PASS: gdb.threads/thread-find.exp: find thread id 6
+PASS: gdb.threads/thread-find.exp: find thread id 5
+PASS: gdb.threads/thread-find.exp: find thread id 4
+PASS: gdb.threads/thread-find.exp: find thread id 3
+PASS: gdb.threads/thread-find.exp: find thread id 2
+PASS: gdb.threads/thread-find.exp: find thread id 1
+PASS: gdb.threads/thread-find.exp: no thread
+PASS: gdb.threads/thread-find.exp: test regular exp
+PASS: gdb.threads/thread-find.exp: info threads 2 4 6
+PASS: gdb.threads/thread-find.exp: info threads 3-5
+PASS: gdb.threads/thread-find.exp: test inverted range
+PASS: gdb.threads/thread-find.exp: info threads 3-3
+PASS: gdb.threads/thread-find.exp: info thread foo
+PASS: gdb.threads/thread-find.exp: info thread foo -1
+Running ./gdb.threads/thread-specific.exp ...
+PASS: gdb.threads/thread-specific.exp: successfully compiled posix threads test case
+PASS: gdb.threads/thread-specific.exp: set print sevenbit-strings
+PASS: gdb.threads/thread-specific.exp: set width 0
+PASS: gdb.threads/thread-specific.exp: thread var when not running
+PASS: gdb.threads/thread-specific.exp: continue to breakpoint: all threads started
+PASS: gdb.threads/thread-specific.exp: get threads list
+PASS: gdb.threads/thread-specific.exp: thread var in main
+PASS: gdb.threads/thread-specific.exp: breakpoint 59 main thread
+PASS: gdb.threads/thread-specific.exp: continue to thread-specific breakpoint
+PASS: gdb.threads/thread-specific.exp: found breakpoint for thread number
+PASS: gdb.threads/thread-specific.exp: thread var at break
+Running ./gdb.threads/thread-unwindonsignal.exp ...
+PASS: gdb.threads/thread-unwindonsignal.exp: successfully compiled posix threads test case
+PASS: gdb.threads/thread-unwindonsignal.exp: breakpoint on all_threads_running
+PASS: gdb.threads/thread-unwindonsignal.exp: run to all_threads_running
+PASS: gdb.threads/thread-unwindonsignal.exp: setting unwindonsignal
+PASS: gdb.threads/thread-unwindonsignal.exp: showing unwindonsignal
+PASS: gdb.threads/thread-unwindonsignal.exp: hand-call interrupted by signal in another thread
+PASS: gdb.threads/thread-unwindonsignal.exp: dummy stack frame present
+PASS: gdb.threads/thread-unwindonsignal.exp: wrong thread not unwound
+PASS: gdb.threads/thread-unwindonsignal.exp: finish hand-call
+PASS: gdb.threads/thread-unwindonsignal.exp: dummy frame popped
+PASS: gdb.threads/thread-unwindonsignal.exp: continue until exit
+Running ./gdb.threads/threxit-hop-specific.exp ...
+PASS: gdb.threads/threxit-hop-specific.exp: successfully compiled posix threads test case
+PASS: gdb.threads/threxit-hop-specific.exp: continue to thread start
+PASS: gdb.threads/threxit-hop-specific.exp: set thread specific breakpoint
+PASS: gdb.threads/threxit-hop-specific.exp: get past the thread specific breakpoint
+Running ./gdb.threads/tls.exp ...
+PASS: gdb.threads/tls.exp: successfully compiled posix threads test case
+PASS: gdb.threads/tls.exp: set breakpoint at all threads
+PASS: gdb.threads/tls.exp: set breakpoint at synch point
+PASS: gdb.threads/tls.exp: set breakpoint at exit
+PASS: gdb.threads/tls.exp: continue to first thread: get to thread
+PASS: gdb.threads/tls.exp: at least one th in spin while stopped at first th
+PASS: gdb.threads/tls.exp: first thread print me
+PASS: gdb.threads/tls.exp: first thread local storage
+PASS: gdb.threads/tls.exp: first another thread local storage
+PASS: gdb.threads/tls.exp: first info address a_thread_local
+PASS: gdb.threads/tls.exp: first info address another_thread_local
+PASS: gdb.threads/tls.exp: continue to second thread
+PASS: gdb.threads/tls.exp: at least one th in spin while stopped at second th
+PASS: gdb.threads/tls.exp: second thread print me
+PASS: gdb.threads/tls.exp: second thread local storage
+PASS: gdb.threads/tls.exp: second another thread local storage
+PASS: gdb.threads/tls.exp: second info address a_thread_local
+PASS: gdb.threads/tls.exp: second info address another_thread_local
+PASS: gdb.threads/tls.exp: continue to third thread
+PASS: gdb.threads/tls.exp: at least one th in spin while stopped at third th
+PASS: gdb.threads/tls.exp: third thread print me
+PASS: gdb.threads/tls.exp: third thread local storage
+PASS: gdb.threads/tls.exp: third another thread local storage
+PASS: gdb.threads/tls.exp: third info address a_thread_local
+PASS: gdb.threads/tls.exp: third info address another_thread_local
+PASS: gdb.threads/tls.exp: continue to synch point
+PASS: gdb.threads/tls.exp: get number of threads
+PASS: gdb.threads/tls.exp: selected thread: 1
+PASS: gdb.threads/tls.exp: backtrace of thread number 1 not relevant
+PASS: gdb.threads/tls.exp: selected thread: 2
+PASS: gdb.threads/tls.exp: backtrace of thread number 2 in spin
+PASS: gdb.threads/tls.exp: selected thread: 3
+PASS: gdb.threads/tls.exp: backtrace of thread number 3 in spin
+PASS: gdb.threads/tls.exp: selected thread: 4
+PASS: gdb.threads/tls.exp: backtrace of thread number 4 in spin
+PASS: gdb.threads/tls.exp: selected thread: 4
+PASS: gdb.threads/tls.exp: thread 4 up
+PASS: gdb.threads/tls.exp: 4 thread print me
+PASS: gdb.threads/tls.exp: 4 thread local storage
+PASS: gdb.threads/tls.exp: 4 another thread local storage
+PASS: gdb.threads/tls.exp: 4 info address a_thread_local
+PASS: gdb.threads/tls.exp: 4 info address another_thread_local
+PASS: gdb.threads/tls.exp: selected thread: 2
+PASS: gdb.threads/tls.exp: thread 2 up
+PASS: gdb.threads/tls.exp: 2 thread print me
+PASS: gdb.threads/tls.exp: 2 thread local storage
+PASS: gdb.threads/tls.exp: 2 another thread local storage
+PASS: gdb.threads/tls.exp: 2 info address a_thread_local
+PASS: gdb.threads/tls.exp: 2 info address another_thread_local
+PASS: gdb.threads/tls.exp: selected thread: 3
+PASS: gdb.threads/tls.exp: thread 3 up
+PASS: gdb.threads/tls.exp: 3 thread print me
+PASS: gdb.threads/tls.exp: 3 thread local storage
+PASS: gdb.threads/tls.exp: 3 another thread local storage
+PASS: gdb.threads/tls.exp: 3 info address a_thread_local
+PASS: gdb.threads/tls.exp: 3 info address another_thread_local
+PASS: gdb.threads/tls.exp: threads exited
+PASS: gdb.threads/tls.exp: Expect only base thread at end
+PASS: gdb.threads/tls.exp: info address a_global
+PASS: gdb.threads/tls.exp: info address me
+PASS: gdb.threads/tls.exp: p a_thread_local
+FAIL: gdb.threads/tls.exp: p file2_thread_local
+PASS: gdb.threads/tls.exp: info address file2_thread_local
+PASS: gdb.threads/tls.exp: p a_thread_local second time
+PASS: gdb.threads/tls.exp: info address a_thread_local
+Running ./gdb.threads/tls-nodebug.exp ...
+PASS: gdb.threads/tls-nodebug.exp: successfully compiled posix threads test case
+FAIL: gdb.threads/tls-nodebug.exp: thread local storage
+Running ./gdb.threads/tls-shared.exp ...
+PASS: gdb.threads/tls-shared.exp: successfully compiled posix threads test case
+PASS: gdb.threads/tls-shared.exp: successfully compiled posix threads test case
+PASS: gdb.threads/tls-shared.exp: print thread local storage variable
+PASS: gdb.threads/tls-shared.exp: ptype of thread local storage variable
+PASS: gdb.threads/tls-shared.exp: print storage info for thread local storage variable
+PASS: gdb.threads/tls-shared.exp: break at and of main
+PASS: gdb.threads/tls-shared.exp: continue to break
+PASS: gdb.threads/tls-shared.exp: print result
+Running ./gdb.threads/tls-var.exp ...
+PASS: gdb.threads/tls-var.exp: successfully compiled posix threads test case
+PASS: gdb.threads/tls-var.exp: whatis tls_var
+PASS: gdb.threads/tls-var.exp: print tls_var
+Running ./gdb.threads/watchpoint-fork.exp ...
+KFAIL: gdb.threads/watchpoint-fork.exp: gdbserver does not support debugging across fork (PRMS: remote/13584)
+Running ./gdb.threads/watchthreads2.exp ...
+Running ./gdb.threads/watchthreads.exp ...
+Running ./gdb.threads/watchthreads-reorder.exp ...
+Running ./gdb.trace/actions.exp ...
+PASS: gdb.trace/actions.exp: 5.1a: set three tracepoints, no actions
+PASS: gdb.trace/actions.exp: 5.1b: set actions for first tracepoint
+PASS: gdb.trace/actions.exp: 5.1c: verify actions set for first tracepoint
+PASS: gdb.trace/actions.exp: 5.1d: set actions for second tracepoint
+PASS: gdb.trace/actions.exp: 5.1e: verify actions set for second tracepoint
+PASS: gdb.trace/actions.exp: 5.2a: set actions for last (default) tracepoint
+PASS: gdb.trace/actions.exp: 5.2b: verify actions set for second tracepoint
+PASS: gdb.trace/actions.exp: 5.3a: reset actions for first tracepoint
+PASS: gdb.trace/actions.exp: 5.3b: verify actions set for first tracepoint
+PASS: gdb.trace/actions.exp: 5.4: 'end' command out of context
+PASS: gdb.trace/actions.exp: 5.5a: set empty actions for first tracepoint
+PASS: gdb.trace/actions.exp: 5.5c: verify NO actions for first tracepoint
+PASS: gdb.trace/actions.exp: 5.6: actions for invalid tracepoint number
+PASS: gdb.trace/actions.exp: 5.7: invalid action
+PASS: gdb.trace/actions.exp: 5.8a: help actions
+PASS: gdb.trace/actions.exp: 5.8b: help collect
+PASS: gdb.trace/actions.exp: 5.8c: help while-stepping
+PASS: gdb.trace/actions.exp: 5.8d: help end
+PASS: gdb.trace/actions.exp: 5.9a: set default-collect
+PASS: gdb.trace/actions.exp: 5.9b: show default-collect
+PASS: gdb.trace/actions.exp: 5.9c: set default-collect
+PASS: gdb.trace/actions.exp: Create a trace state variable
+PASS: gdb.trace/actions.exp: 5.10a: set teval action for first tracepoint
+PASS: gdb.trace/actions.exp: 5.10a: set teval action for second tracepoint
+PASS: gdb.trace/actions.exp: 5.10a: verify teval actions set for two tracepoints
+Running ./gdb.trace/ax.exp ...
+PASS: gdb.trace/ax.exp: maint agent 12
+PASS: gdb.trace/ax.exp: maint agent gdb_char_test
+PASS: gdb.trace/ax.exp: maint agent gdb_arr_test[12]
+PASS: gdb.trace/ax.exp: maint agent gdb_arr_test[gdb_short_test]
+PASS: gdb.trace/ax.exp: maint agent gdb_struct1_test
+PASS: gdb.trace/ax.exp: maint agent gdb_struct1_test.s
+PASS: gdb.trace/ax.exp: maint agent gdb_struct1_test.arr[gdb_struct1_test.c]
+PASS: gdb.trace/ax.exp: maint agent gdb_structp_test
+PASS: gdb.trace/ax.exp: maint agent gdb_structp_test->l
+PASS: gdb.trace/ax.exp: maint agent gdb_structp_test->bfield
+PASS: gdb.trace/ax.exp: maint agent gdb_long_test + gdb_short_test
+PASS: gdb.trace/ax.exp: maint agent gdb_long_test - gdb_short_test
+PASS: gdb.trace/ax.exp: maint agent gdb_long_test * gdb_short_test
+PASS: gdb.trace/ax.exp: maint agent gdb_long_test / gdb_short_test
+PASS: gdb.trace/ax.exp: maint agent gdb_structp_test + 1
+PASS: gdb.trace/ax.exp: maint agent gdb_long_test == gdb_short_test
+PASS: gdb.trace/ax.exp: maint agent gdb_long_test != gdb_short_test
+PASS: gdb.trace/ax.exp: maint agent gdb_long_test < gdb_short_test
+PASS: gdb.trace/ax.exp: maint agent gdb_long_test <= gdb_short_test
+PASS: gdb.trace/ax.exp: maint agent gdb_long_test > gdb_short_test
+PASS: gdb.trace/ax.exp: maint agent gdb_long_test >= gdb_short_test
+PASS: gdb.trace/ax.exp: maint agent &gdb_long_test == &gdb_short_test
+PASS: gdb.trace/ax.exp: maint agent &gdb_long_test < &gdb_short_test
+PASS: gdb.trace/ax.exp: maint agent-eval 12
+PASS: gdb.trace/ax.exp: maint agent-eval gdb_char_test
+PASS: gdb.trace/ax.exp: maint agent-eval gdb_arr_test[12]
+PASS: gdb.trace/ax.exp: maint agent-eval gdb_arr_test[gdb_short_test]
+PASS: gdb.trace/ax.exp: maint agent-eval gdb_struct1_test
+PASS: gdb.trace/ax.exp: maint agent-eval gdb_struct1_test.s
+PASS: gdb.trace/ax.exp: maint agent-eval gdb_struct1_test.arr[gdb_struct1_test.c]
+PASS: gdb.trace/ax.exp: maint agent-eval gdb_structp_test
+PASS: gdb.trace/ax.exp: maint agent-eval gdb_structp_test->l
+PASS: gdb.trace/ax.exp: maint agent-eval gdb_structp_test->bfield
+PASS: gdb.trace/ax.exp: maint agent-eval gdb_long_test + gdb_short_test
+PASS: gdb.trace/ax.exp: maint agent-eval gdb_long_test - gdb_short_test
+PASS: gdb.trace/ax.exp: maint agent-eval gdb_long_test * gdb_short_test
+PASS: gdb.trace/ax.exp: maint agent-eval gdb_long_test / gdb_short_test
+PASS: gdb.trace/ax.exp: maint agent-eval gdb_structp_test + 1
+PASS: gdb.trace/ax.exp: maint agent-eval gdb_long_test == gdb_short_test
+PASS: gdb.trace/ax.exp: maint agent-eval gdb_long_test != gdb_short_test
+PASS: gdb.trace/ax.exp: maint agent-eval gdb_long_test < gdb_short_test
+PASS: gdb.trace/ax.exp: maint agent-eval gdb_long_test <= gdb_short_test
+PASS: gdb.trace/ax.exp: maint agent-eval gdb_long_test > gdb_short_test
+PASS: gdb.trace/ax.exp: maint agent-eval gdb_long_test >= gdb_short_test
+PASS: gdb.trace/ax.exp: maint agent-eval &gdb_long_test == &gdb_short_test
+PASS: gdb.trace/ax.exp: maint agent-eval &gdb_long_test < &gdb_short_test
+Running ./gdb.trace/backtrace.exp ...
+PASS: gdb.trace/backtrace.exp: 8.6: setup TP to collect regs
+PASS: gdb.trace/backtrace.exp: 8.6: setup TP to collect regs, args, and locals
+PASS: gdb.trace/backtrace.exp: 8.6: setup TP to collect stack mem cast expr
+PASS: gdb.trace/backtrace.exp: run trace experiment
+PASS: gdb.trace/backtrace.exp: init: make sure not debugging any trace frame
+PASS: gdb.trace/backtrace.exp: 8.6: find start frame
+PASS: gdb.trace/backtrace.exp: 8.6: Backtrace, depth == 1, collect nothing
+PASS: gdb.trace/backtrace.exp: 8.6: find frame 1
+PASS: gdb.trace/backtrace.exp: 8.6: Backtrace, depth == 1, collect regs
+PASS: gdb.trace/backtrace.exp: 8.6: find frame 2
+PASS: gdb.trace/backtrace.exp: 8.6: Backtrace, depth == 1, collect args and locals
+PASS: gdb.trace/backtrace.exp: 8.6: find frame 4
+PASS: gdb.trace/backtrace.exp: 8.6: Backtrace, depth == 1, collect stack mem expr
+PASS: gdb.trace/backtrace.exp: 8.6: find frame 5
+PASS: gdb.trace/backtrace.exp: 8.6: Backtrace, depth == 2, collect nothing
+PASS: gdb.trace/backtrace.exp: 8.6: find frame 6
+PASS: gdb.trace/backtrace.exp: 8.6: Backtrace, depth == 2, collect regs
+PASS: gdb.trace/backtrace.exp: 8.6: find frame 7
+PASS: gdb.trace/backtrace.exp: 8.6: Backtrace, depth == 2, collect args and locals
+PASS: gdb.trace/backtrace.exp: 8.6: find frame 9
+PASS: gdb.trace/backtrace.exp: 8.6: Backtrace, depth == 1, collect stack mem expr
+PASS: gdb.trace/backtrace.exp: 8.6: find frame 10
+PASS: gdb.trace/backtrace.exp: 8.6: Backtrace, depth == 3, collect nothing
+PASS: gdb.trace/backtrace.exp: 8.6: find frame 11
+PASS: gdb.trace/backtrace.exp: 8.6: Backtrace, depth == 3, collect regs
+PASS: gdb.trace/backtrace.exp: 8.6: find frame 12
+PASS: gdb.trace/backtrace.exp: 8.6: Backtrace, depth == 3, collect args and locals
+PASS: gdb.trace/backtrace.exp: 8.6: find frame 14
+PASS: gdb.trace/backtrace.exp: 8.6: Backtrace, depth == 1, collect stack mem expr
+PASS: gdb.trace/backtrace.exp: 8.6: find frame 15
+PASS: gdb.trace/backtrace.exp: 8.6: Backtrace, depth == 4, collect nothing
+PASS: gdb.trace/backtrace.exp: 8.6: find frame 16
+PASS: gdb.trace/backtrace.exp: 8.6: Backtrace, depth == 4, collect regs
+PASS: gdb.trace/backtrace.exp: 8.6: find frame 17
+PASS: gdb.trace/backtrace.exp: 8.6: Backtrace, depth == 4, collect args and locals
+PASS: gdb.trace/backtrace.exp: 8.6: find frame 19
+PASS: gdb.trace/backtrace.exp: 8.6: Backtrace, depth == 1, collect stack mem expr
+PASS: gdb.trace/backtrace.exp: 1.13: trace in recursion: depth not equal to 3
+Running ./gdb.trace/change-loc.exp ...
+PASS: gdb.trace/change-loc.exp: 1 trace: delete break 1
+PASS: gdb.trace/change-loc.exp: 1 trace: next
+PASS: gdb.trace/change-loc.exp: 1 trace: set tracepoint on main
+PASS: gdb.trace/change-loc.exp: 1 trace: breakpoint on marker
+PASS: gdb.trace/change-loc.exp: 1 trace: tstart
+PASS: gdb.trace/change-loc.exp: 1 trace: continue to marker 1
+PASS: gdb.trace/change-loc.exp: 1 trace: set tracepoint on set_tracepoint
+PASS: gdb.trace/change-loc.exp: 1 trace: set action for tracepoint
+FAIL: gdb.trace/change-loc.exp: 1 trace: tracepoint with two locations
+PASS: gdb.trace/change-loc.exp: 1 trace: continue to marker 2
+FAIL: gdb.trace/change-loc.exp: 1 trace: tracepoint with three locations
+PASS: gdb.trace/change-loc.exp: 1 trace: continue to marker 3
+FAIL: gdb.trace/change-loc.exp: 1 trace: tracepoint with two locations (unload)
+PASS: gdb.trace/change-loc.exp: 1 trace: tstop
+FAIL: gdb.trace/change-loc.exp: 1 trace: tfind frame 0
+PASS: gdb.trace/change-loc.exp: 1 trace: tfind
+PASS: gdb.trace/change-loc.exp: 2 trace: set pending tracepoint
+PASS: gdb.trace/change-loc.exp: 2 trace: set action for tracepoint
+PASS: gdb.trace/change-loc.exp: 2 trace: single pending tracepoint info (without symbols)
+PASS: gdb.trace/change-loc.exp: 2 trace: tracepoint with one location
+PASS: gdb.trace/change-loc.exp: 2 trace: run to main
+PASS: gdb.trace/change-loc.exp: 2 trace: delete break 2
+FAIL: gdb.trace/change-loc.exp: 2 trace: tracepoint with two locations
+PASS: gdb.trace/change-loc.exp: 2 trace: breakpoint on marker
+PASS: gdb.trace/change-loc.exp: 2 trace: tstart
+PASS: gdb.trace/change-loc.exp: 2 trace: continue to marker 1
+PASS: gdb.trace/change-loc.exp: 2 trace: continue to marker 2
+FAIL: gdb.trace/change-loc.exp: 2 trace: tracepoint with three locations
+PASS: gdb.trace/change-loc.exp: 2 trace: continue to marker 3
+FAIL: gdb.trace/change-loc.exp: 2 trace: tracepoint with two locations (unload)
+PASS: gdb.trace/change-loc.exp: 2 trace: tstop
+PASS: gdb.trace/change-loc.exp: 2 trace: tfind frame 0
+FAIL: gdb.trace/change-loc.exp: 2 trace: tfind frame 1
+FAIL: gdb.trace/change-loc.exp: 2 trace: tfind frame 2
+PASS: gdb.trace/change-loc.exp: 2 trace: tfind
+ERROR: (DejaGnu) proc "else\{" does not exist.
+Running ./gdb.xml/tdesc-arch.exp ...
+PASS: gdb.xml/tdesc-arch.exp: read valid architectures
+PASS: gdb.xml/tdesc-arch.exp: read default architecture
+PASS: gdb.xml/tdesc-arch.exp: set tdesc filename tdesc-arch.xml (first architecture)
+PASS: gdb.xml/tdesc-arch.exp: show architecture (first architecture)
+PASS: gdb.xml/tdesc-arch.exp: set tdesc filename tdesc-arch.xml (second architecture)
+PASS: gdb.xml/tdesc-arch.exp: show architecture (second architecture)
+PASS: gdb.xml/tdesc-arch.exp: set tdesc filename tdesc-arch.xml (invalid architecture)
+PASS: gdb.xml/tdesc-arch.exp: show architecture (invalid architecture)
+Running ./gdb.xml/tdesc-errors.exp ...
+PASS: gdb.xml/tdesc-errors.exp: set tdesc filename gdb.xml/tdesc-bogus.xml
+PASS: gdb.xml/tdesc-errors.exp: set tdesc filename gdb.xml/tdesc-unknown.xml
+Running ./gdb.xml/tdesc-regs.exp ...
+PASS: gdb.xml/tdesc-regs.exp: set tdesc file single-reg.xml
+PASS: gdb.xml/tdesc-regs.exp: set tdesc filename regs.xml - from extra-regs.xml
+PASS: gdb.xml/tdesc-regs.exp: ptype $extrareg
+PASS: gdb.xml/tdesc-regs.exp: ptype $uintreg
+PASS: gdb.xml/tdesc-regs.exp: ptype $vecreg
+PASS: gdb.xml/tdesc-regs.exp: ptype $unionreg
+PASS: gdb.xml/tdesc-regs.exp: ptype $unionreg.v4
+PASS: gdb.xml/tdesc-regs.exp: ptype $structreg
+PASS: gdb.xml/tdesc-regs.exp: ptype $structreg.v4
+PASS: gdb.xml/tdesc-regs.exp: ptype $bitfields
+PASS: gdb.xml/tdesc-regs.exp: set tdesc filename regs.xml - from core-only.xml
+PASS: gdb.xml/tdesc-regs.exp: ptype $extrareg
+Running ./gdb.xml/tdesc-xinclude.exp ...
+PASS: gdb.xml/tdesc-xinclude.exp: set tdesc filename gdb.xml/includes.xml
+PASS: gdb.xml/tdesc-xinclude.exp: set tdesc filename gdb.xml/bad-include.xml
+PASS: gdb.xml/tdesc-xinclude.exp: set tdesc filename gdb.xml/loop.xml
+
+ === gdb Summary ===
+
+# of expected passes 17663
+# of unexpected failures 251
+# of unexpected successes 1
+# of expected failures 30
+# of unknown successes 1
+# of known failures 41
+# of untested testcases 54
+# of unresolved testcases 9
+# of unsupported tests 106
+/var/tmp/portage/cross-i686-pc-linux-gnu/gdb-7.6.1/work/gdb-7.6.1/gdb/testsuite/../../gdb/gdb version 7.6.1 -nw -nx -data-directory /var/tmp/portage/cross-i686-pc-linux-gnu/gdb-7.6.1/work/gdb-7.6.1/gdb/testsuite/../data-directory
+
diff --git a/dejagnu/gdb_baseline/x86_64-cros-linux-gnu b/dejagnu/gdb_baseline/x86_64-cros-linux-gnu
new file mode 100644
index 00000000..a9245eab
--- /dev/null
+++ b/dejagnu/gdb_baseline/x86_64-cros-linux-gnu
@@ -0,0 +1,19294 @@
+Test Run By yunlian on Mon Dec 16 14:52:38 2013
+Target is x86_64-cros-linux-gnu
+
+ === gdb tests ===
+
+Schedule of variations:
+ lumpy
+
+Running target lumpy
+Running ./gdb.ada/aliased_array.exp ...
+UNSUPPORTED: gdb.ada/aliased_array.exp: compilation foo.adb
+Running ./gdb.ada/array_bounds.exp ...
+UNSUPPORTED: gdb.ada/array_bounds.exp: compilation bar.adb
+Running ./gdb.ada/arrayidx.exp ...
+UNSUPPORTED: gdb.ada/arrayidx.exp: compilation p.adb
+Running ./gdb.ada/arrayparam.exp ...
+UNSUPPORTED: gdb.ada/arrayparam.exp: compilation foo.adb
+Running ./gdb.ada/arrayptr.exp ...
+UNSUPPORTED: gdb.ada/arrayptr.exp: compilation foo.adb
+Running ./gdb.ada/array_return.exp ...
+UNSUPPORTED: gdb.ada/array_return.exp: compilation p.adb
+Running ./gdb.ada/array_subscript_addr.exp ...
+UNSUPPORTED: gdb.ada/array_subscript_addr.exp: compilation p.adb
+Running ./gdb.ada/assign_1.exp ...
+PASS: gdb.ada/assign_1.exp: Changing the language to ada
+PASS: gdb.ada/assign_1.exp: set convenience variable $xxx to 1
+Running ./gdb.ada/atomic_enum.exp ...
+UNSUPPORTED: gdb.ada/atomic_enum.exp: compilation foo.adb
+Running ./gdb.ada/bad-task-bp-keyword.exp ...
+UNSUPPORTED: gdb.ada/bad-task-bp-keyword.exp: compilation foo.adb
+Running ./gdb.ada/boolean_expr.exp ...
+PASS: gdb.ada/boolean_expr.exp: Changing the language to ada
+PASS: gdb.ada/boolean_expr.exp: print 1 = 2
+PASS: gdb.ada/boolean_expr.exp: print 3 = 3
+Running ./gdb.ada/bp_enum_homonym.exp ...
+UNSUPPORTED: gdb.ada/bp_enum_homonym.exp: compilation p.adb
+Running ./gdb.ada/bp_on_var.exp ...
+UNSUPPORTED: gdb.ada/bp_on_var.exp: compilation foo.adb
+Running ./gdb.ada/bp_range_type.exp ...
+UNSUPPORTED: gdb.ada/bp_range_type.exp: compilation foo.adb
+Running ./gdb.ada/bp_reset.exp ...
+UNSUPPORTED: gdb.ada/bp_reset.exp: compilation foo.adb
+Running ./gdb.ada/call_pn.exp ...
+UNSUPPORTED: gdb.ada/call_pn.exp: compilation foo.adb
+Running ./gdb.ada/catch_ex.exp ...
+UNSUPPORTED: gdb.ada/catch_ex.exp: compilation foo.adb
+Running ./gdb.ada/char_enum.exp ...
+UNSUPPORTED: gdb.ada/char_enum.exp: compilation foo.adb
+Running ./gdb.ada/char_param.exp ...
+UNSUPPORTED: gdb.ada/char_param.exp: compilation foo.adb
+Running ./gdb.ada/complete.exp ...
+UNSUPPORTED: gdb.ada/complete.exp: compilation foo.adb
+Running ./gdb.ada/cond_lang.exp ...
+UNSUPPORTED: gdb.ada/cond_lang.exp: compilation a.adb
+Running ./gdb.ada/dyn_loc.exp ...
+UNSUPPORTED: gdb.ada/dyn_loc.exp: compilation p.adb
+Running ./gdb.ada/enum_idx_packed.exp ...
+UNSUPPORTED: gdb.ada/enum_idx_packed.exp: compilation foo.adb
+Running ./gdb.ada/exec_changed.exp ...
+UNTESTED: gdb.ada/exec_changed.exp: exec_changed.exp
+Running ./gdb.ada/expr_delims.exp ...
+UNSUPPORTED: gdb.ada/expr_delims.exp: compilation foo.adb
+Running ./gdb.ada/exprs.exp ...
+UNSUPPORTED: gdb.ada/exprs.exp: compilation p.adb
+Running ./gdb.ada/fixed_cmp.exp ...
+UNSUPPORTED: gdb.ada/fixed_cmp.exp: compilation fixed.adb
+Running ./gdb.ada/fixed_points.exp ...
+UNSUPPORTED: gdb.ada/fixed_points.exp: compilation fixed_points.adb
+Running ./gdb.ada/formatted_ref.exp ...
+UNSUPPORTED: gdb.ada/formatted_ref.exp: compilation formatted_ref.adb
+UNTESTED: gdb.ada/formatted_ref.exp: formatted-ref.exp
+Running ./gdb.ada/frame_args.exp ...
+UNSUPPORTED: gdb.ada/frame_args.exp: compilation foo.adb
+Running ./gdb.ada/fullname_bp.exp ...
+UNSUPPORTED: gdb.ada/fullname_bp.exp: compilation foo.adb
+Running ./gdb.ada/fun_addr.exp ...
+UNSUPPORTED: gdb.ada/fun_addr.exp: compilation foo.adb
+Running ./gdb.ada/funcall_param.exp ...
+UNSUPPORTED: gdb.ada/funcall_param.exp: compilation foo.adb
+Running ./gdb.ada/fun_in_declare.exp ...
+UNSUPPORTED: gdb.ada/fun_in_declare.exp: compilation foo.adb
+Running ./gdb.ada/homonym.exp ...
+UNSUPPORTED: gdb.ada/homonym.exp: compilation homonym_main.adb
+Running ./gdb.ada/info_locals_renaming.exp ...
+UNSUPPORTED: gdb.ada/info_locals_renaming.exp: compilation foo.adb
+Running ./gdb.ada/info_types.exp ...
+PASS: gdb.ada/info_types.exp: set lang ada
+PASS: gdb.ada/info_types.exp: info types new_integer_type
+Running ./gdb.ada/int_deref.exp ...
+UNSUPPORTED: gdb.ada/int_deref.exp: compilation foo.adb
+Running ./gdb.ada/interface.exp ...
+UNSUPPORTED: gdb.ada/interface.exp: compilation foo.adb
+Running ./gdb.ada/iwide.exp ...
+UNSUPPORTED: gdb.ada/iwide.exp: compilation p.adb
+Running ./gdb.ada/lang_switch.exp ...
+UNSUPPORTED: gdb.ada/lang_switch.exp: compilation lang_switch.adb
+Running ./gdb.ada/mi_catch_ex.exp ...
+UNSUPPORTED: gdb.ada/mi_catch_ex.exp: compilation foo.adb
+Running ./gdb.ada/mi_task_arg.exp ...
+UNSUPPORTED: gdb.ada/mi_task_arg.exp: compilation task_switch.adb
+Running ./gdb.ada/mi_task_info.exp ...
+UNSUPPORTED: gdb.ada/mi_task_info.exp: compilation task_switch.adb
+Running ./gdb.ada/mod_from_name.exp ...
+UNSUPPORTED: gdb.ada/mod_from_name.exp: compilation foo.adb
+Running ./gdb.ada/nested.exp ...
+UNSUPPORTED: gdb.ada/nested.exp: compilation hello.adb
+Running ./gdb.ada/null_array.exp ...
+UNSUPPORTED: gdb.ada/null_array.exp: compilation foo.adb
+Running ./gdb.ada/null_record.exp ...
+UNSUPPORTED: gdb.ada/null_record.exp: compilation null_record.adb
+Running ./gdb.ada/operator_bp.exp ...
+UNSUPPORTED: gdb.ada/operator_bp.exp: compilation ops_test.adb
+Running ./gdb.ada/optim_drec.exp ...
+UNSUPPORTED: gdb.ada/optim_drec.exp: compilation foo.adb
+Running ./gdb.ada/packed_array.exp ...
+UNSUPPORTED: gdb.ada/packed_array.exp: compilation pa.adb
+Running ./gdb.ada/packed_tagged.exp ...
+UNSUPPORTED: gdb.ada/packed_tagged.exp: compilation comp_bug.adb
+Running ./gdb.ada/print_chars.exp ...
+UNSUPPORTED: gdb.ada/print_chars.exp: compilation foo.adb
+Running ./gdb.ada/print_pc.exp ...
+UNSUPPORTED: gdb.ada/print_pc.exp: compilation dummy.adb
+Running ./gdb.ada/ptr_typedef.exp ...
+UNSUPPORTED: gdb.ada/ptr_typedef.exp: compilation foo.adb
+Running ./gdb.ada/ptype_arith_binop.exp ...
+PASS: gdb.ada/ptype_arith_binop.exp: set lang ada
+PASS: gdb.ada/ptype_arith_binop.exp: ptype 3 * 2.0
+PASS: gdb.ada/ptype_arith_binop.exp: ptype 3 / 2.0
+Running ./gdb.ada/ptype_field.exp ...
+UNSUPPORTED: gdb.ada/ptype_field.exp: compilation foo.adb
+Running ./gdb.ada/ptype_tagged_param.exp ...
+UNSUPPORTED: gdb.ada/ptype_tagged_param.exp: compilation foo.adb
+Running ./gdb.ada/rdv_wait.exp ...
+UNSUPPORTED: gdb.ada/rdv_wait.exp: compilation foo.adb
+Running ./gdb.ada/rec_return.exp ...
+UNSUPPORTED: gdb.ada/rec_return.exp: compilation foo.adb
+Running ./gdb.ada/ref_param.exp ...
+UNSUPPORTED: gdb.ada/ref_param.exp: compilation foo.adb
+Running ./gdb.ada/ref_tick_size.exp ...
+UNSUPPORTED: gdb.ada/ref_tick_size.exp: compilation p.adb
+Running ./gdb.ada/same_enum.exp ...
+UNSUPPORTED: gdb.ada/same_enum.exp: compilation a.adb
+Running ./gdb.ada/set_pckd_arr_elt.exp ...
+UNSUPPORTED: gdb.ada/set_pckd_arr_elt.exp: compilation foo.adb
+Running ./gdb.ada/set_wstr.exp ...
+UNSUPPORTED: gdb.ada/set_wstr.exp: compilation a.adb
+Running ./gdb.ada/small_reg_param.exp ...
+UNSUPPORTED: gdb.ada/small_reg_param.exp: compilation foo.adb
+Running ./gdb.ada/start.exp ...
+UNTESTED: gdb.ada/start.exp: start.exp
+Running ./gdb.ada/str_ref_cmp.exp ...
+UNSUPPORTED: gdb.ada/str_ref_cmp.exp: compilation foo.adb
+Running ./gdb.ada/sym_print_name.exp ...
+UNSUPPORTED: gdb.ada/sym_print_name.exp: compilation foo.adb
+Running ./gdb.ada/taft_type.exp ...
+UNSUPPORTED: gdb.ada/taft_type.exp: compilation p.adb
+Running ./gdb.ada/tagged.exp ...
+UNSUPPORTED: gdb.ada/tagged.exp: compilation foo.adb
+Running ./gdb.ada/tagged_not_init.exp ...
+UNSUPPORTED: gdb.ada/tagged_not_init.exp: compilation foo.adb
+Running ./gdb.ada/task_bp.exp ...
+UNSUPPORTED: gdb.ada/task_bp.exp: compilation foo.adb
+Running ./gdb.ada/tasks.exp ...
+UNSUPPORTED: gdb.ada/tasks.exp: compilation foo.adb
+Running ./gdb.ada/tick_last_segv.exp ...
+UNSUPPORTED: gdb.ada/tick_last_segv.exp: compilation foo.adb
+Running ./gdb.ada/type_coercion.exp ...
+UNSUPPORTED: gdb.ada/type_coercion.exp: compilation assign.adb
+Running ./gdb.ada/unc_arr_ptr_in_var_rec.exp ...
+UNSUPPORTED: gdb.ada/unc_arr_ptr_in_var_rec.exp: compilation foo.adb
+Running ./gdb.ada/uninitialized_vars.exp ...
+UNSUPPORTED: gdb.ada/uninitialized_vars.exp: compilation parse.adb
+Running ./gdb.ada/variant_record_packed_array.exp ...
+UNSUPPORTED: gdb.ada/variant_record_packed_array.exp: compilation foo.adb
+Running ./gdb.ada/watch_arg.exp ...
+UNSUPPORTED: gdb.ada/watch_arg.exp: compilation watch.adb
+Running ./gdb.ada/whatis_array_val.exp ...
+UNSUPPORTED: gdb.ada/whatis_array_val.exp: compilation foo.adb
+Running ./gdb.ada/widewide.exp ...
+UNSUPPORTED: gdb.ada/widewide.exp: compilation foo.adb
+Running ./gdb.arch/alpha-step.exp ...
+Running ./gdb.arch/altivec-abi.exp ...
+Running ./gdb.arch/altivec-regs.exp ...
+Running ./gdb.arch/amd64-byte.exp ...
+PASS: gdb.arch/amd64-byte.exp: set first breakpoint in main
+PASS: gdb.arch/amd64-byte.exp: continue to breakpoint: continue to first breakpoint in main
+PASS: gdb.arch/amd64-byte.exp: check contents of %al
+PASS: gdb.arch/amd64-byte.exp: check contents of %bl
+PASS: gdb.arch/amd64-byte.exp: check contents of %cl
+PASS: gdb.arch/amd64-byte.exp: check contents of %dl
+PASS: gdb.arch/amd64-byte.exp: check contents of %sil
+PASS: gdb.arch/amd64-byte.exp: check contents of %dil
+PASS: gdb.arch/amd64-byte.exp: check contents of %ah
+PASS: gdb.arch/amd64-byte.exp: check contents of %bh
+PASS: gdb.arch/amd64-byte.exp: check contents of %ch
+PASS: gdb.arch/amd64-byte.exp: check contents of %dh
+PASS: gdb.arch/amd64-byte.exp: set second breakpoint in main
+PASS: gdb.arch/amd64-byte.exp: continue to breakpoint: continue to second breakpoint in main
+PASS: gdb.arch/amd64-byte.exp: check contents of %r8l
+PASS: gdb.arch/amd64-byte.exp: check contents of %r9l
+PASS: gdb.arch/amd64-byte.exp: check contents of %r10l
+PASS: gdb.arch/amd64-byte.exp: check contents of %r11l
+PASS: gdb.arch/amd64-byte.exp: check contents of %r12l
+PASS: gdb.arch/amd64-byte.exp: check contents of %r13l
+PASS: gdb.arch/amd64-byte.exp: check contents of %r14l
+PASS: gdb.arch/amd64-byte.exp: check contents of %r15l
+PASS: gdb.arch/amd64-byte.exp: set %al
+PASS: gdb.arch/amd64-byte.exp: set %bl
+PASS: gdb.arch/amd64-byte.exp: set %cl
+PASS: gdb.arch/amd64-byte.exp: set %dl
+PASS: gdb.arch/amd64-byte.exp: set %sil
+PASS: gdb.arch/amd64-byte.exp: set %dil
+PASS: gdb.arch/amd64-byte.exp: set %ah
+PASS: gdb.arch/amd64-byte.exp: set %bh
+PASS: gdb.arch/amd64-byte.exp: set %ch
+PASS: gdb.arch/amd64-byte.exp: set %dh
+PASS: gdb.arch/amd64-byte.exp: set third breakpoint in main
+PASS: gdb.arch/amd64-byte.exp: continue to breakpoint: continue to third breakpoint in main
+PASS: gdb.arch/amd64-byte.exp: check contents of %al
+PASS: gdb.arch/amd64-byte.exp: check contents of %bl
+PASS: gdb.arch/amd64-byte.exp: check contents of %cl
+PASS: gdb.arch/amd64-byte.exp: check contents of %dl
+PASS: gdb.arch/amd64-byte.exp: check contents of %sil
+PASS: gdb.arch/amd64-byte.exp: check contents of %dil
+PASS: gdb.arch/amd64-byte.exp: check contents of %ah
+PASS: gdb.arch/amd64-byte.exp: check contents of %bh
+PASS: gdb.arch/amd64-byte.exp: check contents of %ch
+PASS: gdb.arch/amd64-byte.exp: check contents of %dh
+PASS: gdb.arch/amd64-byte.exp: set %r8l
+PASS: gdb.arch/amd64-byte.exp: set %r9l
+PASS: gdb.arch/amd64-byte.exp: set %r10l
+PASS: gdb.arch/amd64-byte.exp: set %r11l
+PASS: gdb.arch/amd64-byte.exp: set %r12l
+PASS: gdb.arch/amd64-byte.exp: set %r13l
+PASS: gdb.arch/amd64-byte.exp: set %r14l
+PASS: gdb.arch/amd64-byte.exp: set %r15l
+PASS: gdb.arch/amd64-byte.exp: set forth breakpoint in main
+PASS: gdb.arch/amd64-byte.exp: continue to breakpoint: continue to forth breakpoint in main
+PASS: gdb.arch/amd64-byte.exp: check contents of %r8l
+PASS: gdb.arch/amd64-byte.exp: check contents of %r9l
+PASS: gdb.arch/amd64-byte.exp: check contents of %r10l
+PASS: gdb.arch/amd64-byte.exp: check contents of %r11l
+PASS: gdb.arch/amd64-byte.exp: check contents of %r12l
+PASS: gdb.arch/amd64-byte.exp: check contents of %r13l
+PASS: gdb.arch/amd64-byte.exp: check contents of %r14l
+PASS: gdb.arch/amd64-byte.exp: check contents of %r15l
+Running ./gdb.arch/amd64-disp-step.exp ...
+gdb compile failed, /usr/x86_64-pc-linux-gnu/x86_64-cros-linux-gnu/binutils-bin/2.22/ld.gold.real: error: /tmp/ccQtpEfb.o: requires unsupported dynamic reloc 11; recompile with -fPIC
+collect2: error: ld returned 1 exit status
+UNTESTED: gdb.arch/amd64-disp-step.exp: amd64-disp-step.exp
+Running ./gdb.arch/amd64-dword.exp ...
+PASS: gdb.arch/amd64-dword.exp: set first breakpoint in main
+PASS: gdb.arch/amd64-dword.exp: continue to breakpoint: continue to first breakpoint in main
+PASS: gdb.arch/amd64-dword.exp: check contents of %eax
+PASS: gdb.arch/amd64-dword.exp: check contents of %ebx
+PASS: gdb.arch/amd64-dword.exp: check contents of %ecx
+PASS: gdb.arch/amd64-dword.exp: check contents of %edx
+PASS: gdb.arch/amd64-dword.exp: check contents of %esi
+PASS: gdb.arch/amd64-dword.exp: check contents of %edi
+PASS: gdb.arch/amd64-dword.exp: set second breakpoint in main
+PASS: gdb.arch/amd64-dword.exp: continue to breakpoint: continue to second breakpoint in main
+PASS: gdb.arch/amd64-dword.exp: check contents of %r8d
+PASS: gdb.arch/amd64-dword.exp: check contents of %r9d
+PASS: gdb.arch/amd64-dword.exp: check contents of %r10d
+PASS: gdb.arch/amd64-dword.exp: check contents of %r11d
+PASS: gdb.arch/amd64-dword.exp: check contents of %r12d
+PASS: gdb.arch/amd64-dword.exp: check contents of %r13d
+PASS: gdb.arch/amd64-dword.exp: check contents of %r14d
+PASS: gdb.arch/amd64-dword.exp: check contents of %r15d
+PASS: gdb.arch/amd64-dword.exp: set %eax
+PASS: gdb.arch/amd64-dword.exp: set %ebx
+PASS: gdb.arch/amd64-dword.exp: set %ecx
+PASS: gdb.arch/amd64-dword.exp: set %edx
+PASS: gdb.arch/amd64-dword.exp: set %esi
+PASS: gdb.arch/amd64-dword.exp: set %edi
+PASS: gdb.arch/amd64-dword.exp: set third breakpoint in main
+PASS: gdb.arch/amd64-dword.exp: continue to breakpoint: continue to third breakpoint in main
+PASS: gdb.arch/amd64-dword.exp: check contents of %eax
+PASS: gdb.arch/amd64-dword.exp: check contents of %ebx
+PASS: gdb.arch/amd64-dword.exp: check contents of %ecx
+PASS: gdb.arch/amd64-dword.exp: check contents of %edx
+PASS: gdb.arch/amd64-dword.exp: check contents of %esi
+PASS: gdb.arch/amd64-dword.exp: check contents of %edi
+PASS: gdb.arch/amd64-dword.exp: set %r8d
+PASS: gdb.arch/amd64-dword.exp: set %r9d
+PASS: gdb.arch/amd64-dword.exp: set %r10d
+PASS: gdb.arch/amd64-dword.exp: set %r11d
+PASS: gdb.arch/amd64-dword.exp: set %r12d
+PASS: gdb.arch/amd64-dword.exp: set %r13d
+PASS: gdb.arch/amd64-dword.exp: set %r14d
+PASS: gdb.arch/amd64-dword.exp: set %r15d
+PASS: gdb.arch/amd64-dword.exp: set forth breakpoint in main
+PASS: gdb.arch/amd64-dword.exp: continue to breakpoint: continue to forth breakpoint in main
+PASS: gdb.arch/amd64-dword.exp: check contents of %r8d
+PASS: gdb.arch/amd64-dword.exp: check contents of %r9d
+PASS: gdb.arch/amd64-dword.exp: check contents of %r10d
+PASS: gdb.arch/amd64-dword.exp: check contents of %r11d
+PASS: gdb.arch/amd64-dword.exp: check contents of %r12d
+PASS: gdb.arch/amd64-dword.exp: check contents of %r13d
+PASS: gdb.arch/amd64-dword.exp: check contents of %r14d
+PASS: gdb.arch/amd64-dword.exp: check contents of %r15d
+Running ./gdb.arch/amd64-entry-value.exp ...
+gdb compile failed, /usr/x86_64-pc-linux-gnu/x86_64-cros-linux-gnu/binutils-bin/2.22/ld.gold.real: error: /var/tmp/portage/cross-x86_64-cros-linux-gnu/gdb-7.6.1/work/gdb-7.6.1/gdb/testsuite/gdb.arch/amd64-entry-value0.o: requires dynamic R_X86_64_32 reloc which may overflow at runtime; recompile with -fPIC
+collect2: error: ld returned 1 exit status
+UNTESTED: gdb.arch/amd64-entry-value.exp: amd64-entry-value.exp
+Running ./gdb.arch/amd64-entry-value-inline.exp ...
+PASS: gdb.arch/amd64-entry-value-inline.exp: continue to breakpoint: break-here
+FAIL: gdb.arch/amd64-entry-value-inline.exp: p y
+Running ./gdb.arch/amd64-entry-value-param.exp ...
+PASS: gdb.arch/amd64-entry-value-param.exp: continue to breakpoint: break-here
+FAIL: gdb.arch/amd64-entry-value-param.exp: p y
+FAIL: gdb.arch/amd64-entry-value-param.exp: p b
+PASS: gdb.arch/amd64-entry-value-param.exp: continue to breakpoint: break-here
+FAIL: gdb.arch/amd64-entry-value-param.exp: p y
+FAIL: gdb.arch/amd64-entry-value-param.exp: p b
+PASS: gdb.arch/amd64-entry-value-param.exp: continue to breakpoint: break-here
+FAIL: gdb.arch/amd64-entry-value-param.exp: p y
+FAIL: gdb.arch/amd64-entry-value-param.exp: p b
+Running ./gdb.arch/amd64-i386-address.exp ...
+gdb compile failed, /usr/x86_64-pc-linux-gnu/x86_64-cros-linux-gnu/binutils-bin/2.22/ld.gold.real: error: cannot find -lm
+collect2: error: ld returned 1 exit status
+UNTESTED: gdb.arch/amd64-i386-address.exp: amd64-i386-address.exp
+Running ./gdb.arch/amd64-prologue-xmm.exp ...
+PASS: gdb.arch/amd64-prologue-xmm.exp: continue to breakpoint: func
+PASS: gdb.arch/amd64-prologue-xmm.exp: stopped at func
+Running ./gdb.arch/amd64-tailcall-cxx.exp ...
+FAIL: gdb.arch/amd64-tailcall-cxx.exp: bt
+Running ./gdb.arch/amd64-tailcall-noret.exp ...
+gdb compile failed, /usr/x86_64-pc-linux-gnu/x86_64-cros-linux-gnu/binutils-bin/2.22/ld.gold.real: error: /var/tmp/portage/cross-x86_64-cros-linux-gnu/gdb-7.6.1/work/gdb-7.6.1/gdb/testsuite/gdb.arch/amd64-tailcall-noret0.o: requires dynamic R_X86_64_PC32 reloc against 'abort' which may overflow at runtime; recompile with -fPIC
+collect2: error: ld returned 1 exit status
+UNTESTED: gdb.arch/amd64-tailcall-noret.exp: amd64-tailcall-noret.exp
+Running ./gdb.arch/amd64-tailcall-ret.exp ...
+PASS: gdb.arch/amd64-tailcall-ret.exp: continue to breakpoint: g
+PASS: gdb.arch/amd64-tailcall-ret.exp: return
+PASS: gdb.arch/amd64-tailcall-ret.exp: continue to breakpoint: g
+PASS: gdb.arch/amd64-tailcall-ret.exp: finish
+Running ./gdb.arch/amd64-word.exp ...
+PASS: gdb.arch/amd64-word.exp: set first breakpoint in main
+PASS: gdb.arch/amd64-word.exp: continue to breakpoint: continue to first breakpoint in main
+PASS: gdb.arch/amd64-word.exp: check contents of %ax
+PASS: gdb.arch/amd64-word.exp: check contents of %bx
+PASS: gdb.arch/amd64-word.exp: check contents of %cx
+PASS: gdb.arch/amd64-word.exp: check contents of %dx
+PASS: gdb.arch/amd64-word.exp: check contents of %si
+PASS: gdb.arch/amd64-word.exp: check contents of %di
+PASS: gdb.arch/amd64-word.exp: set second breakpoint in main
+PASS: gdb.arch/amd64-word.exp: continue to breakpoint: continue to second breakpoint in main
+PASS: gdb.arch/amd64-word.exp: check contents of %r8w
+PASS: gdb.arch/amd64-word.exp: check contents of %r9w
+PASS: gdb.arch/amd64-word.exp: check contents of %r10w
+PASS: gdb.arch/amd64-word.exp: check contents of %r11w
+PASS: gdb.arch/amd64-word.exp: check contents of %r12w
+PASS: gdb.arch/amd64-word.exp: check contents of %r13w
+PASS: gdb.arch/amd64-word.exp: check contents of %r14w
+PASS: gdb.arch/amd64-word.exp: check contents of %r15w
+PASS: gdb.arch/amd64-word.exp: set %ax
+PASS: gdb.arch/amd64-word.exp: set %bx
+PASS: gdb.arch/amd64-word.exp: set %cx
+PASS: gdb.arch/amd64-word.exp: set %dx
+PASS: gdb.arch/amd64-word.exp: set %si
+PASS: gdb.arch/amd64-word.exp: set %di
+PASS: gdb.arch/amd64-word.exp: set third breakpoint in main
+PASS: gdb.arch/amd64-word.exp: continue to breakpoint: continue to third breakpoint in main
+PASS: gdb.arch/amd64-word.exp: check contents of %ax
+PASS: gdb.arch/amd64-word.exp: check contents of %bx
+PASS: gdb.arch/amd64-word.exp: check contents of %cx
+PASS: gdb.arch/amd64-word.exp: check contents of %dx
+PASS: gdb.arch/amd64-word.exp: check contents of %si
+PASS: gdb.arch/amd64-word.exp: check contents of %di
+PASS: gdb.arch/amd64-word.exp: set %r8w
+PASS: gdb.arch/amd64-word.exp: set %r9w
+PASS: gdb.arch/amd64-word.exp: set %r10w
+PASS: gdb.arch/amd64-word.exp: set %r11w
+PASS: gdb.arch/amd64-word.exp: set %r12w
+PASS: gdb.arch/amd64-word.exp: set %r13w
+PASS: gdb.arch/amd64-word.exp: set %r14w
+PASS: gdb.arch/amd64-word.exp: set %r15w
+PASS: gdb.arch/amd64-word.exp: set forth breakpoint in main
+PASS: gdb.arch/amd64-word.exp: continue to breakpoint: continue to forth breakpoint in main
+PASS: gdb.arch/amd64-word.exp: check contents of %r8w
+PASS: gdb.arch/amd64-word.exp: check contents of %r9w
+PASS: gdb.arch/amd64-word.exp: check contents of %r10w
+PASS: gdb.arch/amd64-word.exp: check contents of %r11w
+PASS: gdb.arch/amd64-word.exp: check contents of %r12w
+PASS: gdb.arch/amd64-word.exp: check contents of %r13w
+PASS: gdb.arch/amd64-word.exp: check contents of %r14w
+PASS: gdb.arch/amd64-word.exp: check contents of %r15w
+Running ./gdb.arch/arm-bl-branch-dest.exp ...
+Running ./gdb.arch/arm-disp-step.exp ...
+Running ./gdb.arch/e500-abi.exp ...
+Running ./gdb.arch/e500-prologue.exp ...
+Running ./gdb.arch/e500-regs.exp ...
+Running ./gdb.arch/gdb1291.exp ...
+Running ./gdb.arch/gdb1431.exp ...
+Running ./gdb.arch/gdb1558.exp ...
+Running ./gdb.arch/i386-avx.exp ...
+PASS: gdb.arch/i386-avx.exp: check whether processor supports AVX
+PASS: gdb.arch/i386-avx.exp: set first breakpoint in main
+PASS: gdb.arch/i386-avx.exp: continue to breakpoint: continue to first breakpoint in main
+PASS: gdb.arch/i386-avx.exp: check float contents of %ymm0
+PASS: gdb.arch/i386-avx.exp: check int8 contents of %ymm0
+PASS: gdb.arch/i386-avx.exp: check float contents of %ymm1
+PASS: gdb.arch/i386-avx.exp: check int8 contents of %ymm1
+PASS: gdb.arch/i386-avx.exp: check float contents of %ymm2
+PASS: gdb.arch/i386-avx.exp: check int8 contents of %ymm2
+PASS: gdb.arch/i386-avx.exp: check float contents of %ymm3
+PASS: gdb.arch/i386-avx.exp: check int8 contents of %ymm3
+PASS: gdb.arch/i386-avx.exp: check float contents of %ymm4
+PASS: gdb.arch/i386-avx.exp: check int8 contents of %ymm4
+PASS: gdb.arch/i386-avx.exp: check float contents of %ymm5
+PASS: gdb.arch/i386-avx.exp: check int8 contents of %ymm5
+PASS: gdb.arch/i386-avx.exp: check float contents of %ymm6
+PASS: gdb.arch/i386-avx.exp: check int8 contents of %ymm6
+PASS: gdb.arch/i386-avx.exp: check float contents of %ymm7
+PASS: gdb.arch/i386-avx.exp: check int8 contents of %ymm7
+PASS: gdb.arch/i386-avx.exp: check float contents of %ymm8
+PASS: gdb.arch/i386-avx.exp: check int8 contents of %ymm8
+PASS: gdb.arch/i386-avx.exp: check float contents of %ymm9
+PASS: gdb.arch/i386-avx.exp: check int8 contents of %ymm9
+PASS: gdb.arch/i386-avx.exp: check float contents of %ymm10
+PASS: gdb.arch/i386-avx.exp: check int8 contents of %ymm10
+PASS: gdb.arch/i386-avx.exp: check float contents of %ymm11
+PASS: gdb.arch/i386-avx.exp: check int8 contents of %ymm11
+PASS: gdb.arch/i386-avx.exp: check float contents of %ymm12
+PASS: gdb.arch/i386-avx.exp: check int8 contents of %ymm12
+PASS: gdb.arch/i386-avx.exp: check float contents of %ymm13
+PASS: gdb.arch/i386-avx.exp: check int8 contents of %ymm13
+PASS: gdb.arch/i386-avx.exp: check float contents of %ymm14
+PASS: gdb.arch/i386-avx.exp: check int8 contents of %ymm14
+PASS: gdb.arch/i386-avx.exp: check float contents of %ymm15
+PASS: gdb.arch/i386-avx.exp: check int8 contents of %ymm15
+PASS: gdb.arch/i386-avx.exp: set %ymm0
+PASS: gdb.arch/i386-avx.exp: set %ymm1
+PASS: gdb.arch/i386-avx.exp: set %ymm2
+PASS: gdb.arch/i386-avx.exp: set %ymm3
+PASS: gdb.arch/i386-avx.exp: set %ymm4
+PASS: gdb.arch/i386-avx.exp: set %ymm5
+PASS: gdb.arch/i386-avx.exp: set %ymm6
+PASS: gdb.arch/i386-avx.exp: set %ymm7
+PASS: gdb.arch/i386-avx.exp: set %ymm8
+PASS: gdb.arch/i386-avx.exp: set %ymm9
+PASS: gdb.arch/i386-avx.exp: set %ymm10
+PASS: gdb.arch/i386-avx.exp: set %ymm11
+PASS: gdb.arch/i386-avx.exp: set %ymm12
+PASS: gdb.arch/i386-avx.exp: set %ymm13
+PASS: gdb.arch/i386-avx.exp: set %ymm14
+PASS: gdb.arch/i386-avx.exp: set %ymm15
+PASS: gdb.arch/i386-avx.exp: set second breakpoint in main
+PASS: gdb.arch/i386-avx.exp: continue to breakpoint: continue to second breakpoint in main
+PASS: gdb.arch/i386-avx.exp: check contents of data[0]
+PASS: gdb.arch/i386-avx.exp: check contents of data[1]
+PASS: gdb.arch/i386-avx.exp: check contents of data[2]
+PASS: gdb.arch/i386-avx.exp: check contents of data[3]
+PASS: gdb.arch/i386-avx.exp: check contents of data[4]
+PASS: gdb.arch/i386-avx.exp: check contents of data[5]
+PASS: gdb.arch/i386-avx.exp: check contents of data[6]
+PASS: gdb.arch/i386-avx.exp: check contents of data[7]
+PASS: gdb.arch/i386-avx.exp: check contents of data[8]
+PASS: gdb.arch/i386-avx.exp: check contents of data[9]
+PASS: gdb.arch/i386-avx.exp: check contents of data[10]
+PASS: gdb.arch/i386-avx.exp: check contents of data[11]
+PASS: gdb.arch/i386-avx.exp: check contents of data[12]
+PASS: gdb.arch/i386-avx.exp: check contents of data[13]
+PASS: gdb.arch/i386-avx.exp: check contents of data[14]
+PASS: gdb.arch/i386-avx.exp: check contents of data[15]
+Running ./gdb.arch/i386-bp_permanent.exp ...
+Running ./gdb.arch/i386-byte.exp ...
+PASS: gdb.arch/i386-byte.exp: set first breakpoint in main
+PASS: gdb.arch/i386-byte.exp: continue to breakpoint: continue to first breakpoint in main
+PASS: gdb.arch/i386-byte.exp: check contents of %al
+PASS: gdb.arch/i386-byte.exp: check contents of %ah
+PASS: gdb.arch/i386-byte.exp: check contents of %bl
+PASS: gdb.arch/i386-byte.exp: check contents of %bh
+PASS: gdb.arch/i386-byte.exp: check contents of %cl
+PASS: gdb.arch/i386-byte.exp: check contents of %ch
+PASS: gdb.arch/i386-byte.exp: check contents of %dl
+PASS: gdb.arch/i386-byte.exp: check contents of %dh
+PASS: gdb.arch/i386-byte.exp: set %al
+PASS: gdb.arch/i386-byte.exp: set %ah
+PASS: gdb.arch/i386-byte.exp: set %bl
+PASS: gdb.arch/i386-byte.exp: set %bh
+PASS: gdb.arch/i386-byte.exp: set %cl
+PASS: gdb.arch/i386-byte.exp: set %ch
+PASS: gdb.arch/i386-byte.exp: set %dl
+PASS: gdb.arch/i386-byte.exp: set %dh
+PASS: gdb.arch/i386-byte.exp: set second breakpoint in main
+PASS: gdb.arch/i386-byte.exp: continue to breakpoint: continue to second breakpoint in main
+PASS: gdb.arch/i386-byte.exp: check contents of %al
+PASS: gdb.arch/i386-byte.exp: check contents of %ah
+PASS: gdb.arch/i386-byte.exp: check contents of %bl
+PASS: gdb.arch/i386-byte.exp: check contents of %bh
+PASS: gdb.arch/i386-byte.exp: check contents of %cl
+PASS: gdb.arch/i386-byte.exp: check contents of %ch
+PASS: gdb.arch/i386-byte.exp: check contents of %dl
+PASS: gdb.arch/i386-byte.exp: check contents of %dh
+Running ./gdb.arch/i386-cfi-notcurrent.exp ...
+Running ./gdb.arch/i386-disp-step.exp ...
+Running ./gdb.arch/i386-dr3-watch.exp ...
+PASS: gdb.arch/i386-dr3-watch.exp: set breakpoint always-inserted on
+PASS: gdb.arch/i386-dr3-watch.exp: watch i1
+PASS: gdb.arch/i386-dr3-watch.exp: watch i2
+PASS: gdb.arch/i386-dr3-watch.exp: watch i3
+PASS: gdb.arch/i386-dr3-watch.exp: watch i4
+PASS: gdb.arch/i386-dr3-watch.exp: continue to i1 watchpoint
+PASS: gdb.arch/i386-dr3-watch.exp: continue to i2 watchpoint
+PASS: gdb.arch/i386-dr3-watch.exp: continue to i3 watchpoint
+PASS: gdb.arch/i386-dr3-watch.exp: continue to i4 watchpoint
+PASS: gdb.arch/i386-dr3-watch.exp: set watchpoint occuping one debug register
+PASS: gdb.arch/i386-dr3-watch.exp: watchpoint on gap1 does not fit debug registers
+PASS: gdb.arch/i386-dr3-watch.exp: delete all watchpoints
+PASS: gdb.arch/i386-dr3-watch.exp: watch i1 still fits
+PASS: gdb.arch/i386-dr3-watch.exp: watch i2 still fits
+PASS: gdb.arch/i386-dr3-watch.exp: watch i3 still fits
+PASS: gdb.arch/i386-dr3-watch.exp: watch i4 still fits
+Running ./gdb.arch/i386-float.exp ...
+gdb compile failed, /usr/x86_64-pc-linux-gnu/x86_64-cros-linux-gnu/binutils-bin/2.22/ld.gold.real: error: /var/tmp/portage/cross-x86_64-cros-linux-gnu/gdb-7.6.1/work/gdb-7.6.1/gdb/testsuite/gdb.arch/i386-float0.o: requires unsupported dynamic reloc 11; recompile with -fPIC
+collect2: error: ld returned 1 exit status
+UNTESTED: gdb.arch/i386-float.exp: break.exp
+Running ./gdb.arch/i386-gnu-cfi.exp ...
+Running ./gdb.arch/i386-permbkpt.exp ...
+PASS: gdb.arch/i386-permbkpt.exp: First permanent break
+PASS: gdb.arch/i386-permbkpt.exp: Second permanent break
+Running ./gdb.arch/i386-prologue.exp ...
+Running ./gdb.arch/i386-signal.exp ...
+gdb compile failed, /usr/x86_64-pc-linux-gnu/x86_64-cros-linux-gnu/binutils-bin/2.22/ld.gold.real: error: /tmp/ccAjQh8y.o: requires unsupported dynamic reloc 11; recompile with -fPIC
+collect2: error: ld returned 1 exit status
+UNTESTED: gdb.arch/i386-signal.exp: i386-signal.exp
+Running ./gdb.arch/i386-size.exp ...
+Running ./gdb.arch/i386-size-overlap.exp ...
+Running ./gdb.arch/i386-sse.exp ...
+PASS: gdb.arch/i386-sse.exp: check whether processor supports SSE
+PASS: gdb.arch/i386-sse.exp: set first breakpoint in main
+PASS: gdb.arch/i386-sse.exp: continue to breakpoint: continue to first breakpoint in main
+PASS: gdb.arch/i386-sse.exp: check float contents of %xmm0
+PASS: gdb.arch/i386-sse.exp: check int8 contents of %xmm0
+PASS: gdb.arch/i386-sse.exp: check float contents of %xmm1
+PASS: gdb.arch/i386-sse.exp: check int8 contents of %xmm1
+PASS: gdb.arch/i386-sse.exp: check float contents of %xmm2
+PASS: gdb.arch/i386-sse.exp: check int8 contents of %xmm2
+PASS: gdb.arch/i386-sse.exp: check float contents of %xmm3
+PASS: gdb.arch/i386-sse.exp: check int8 contents of %xmm3
+PASS: gdb.arch/i386-sse.exp: check float contents of %xmm4
+PASS: gdb.arch/i386-sse.exp: check int8 contents of %xmm4
+PASS: gdb.arch/i386-sse.exp: check float contents of %xmm5
+PASS: gdb.arch/i386-sse.exp: check int8 contents of %xmm5
+PASS: gdb.arch/i386-sse.exp: check float contents of %xmm6
+PASS: gdb.arch/i386-sse.exp: check int8 contents of %xmm6
+PASS: gdb.arch/i386-sse.exp: check float contents of %xmm7
+PASS: gdb.arch/i386-sse.exp: check int8 contents of %xmm7
+PASS: gdb.arch/i386-sse.exp: check float contents of %xmm8
+PASS: gdb.arch/i386-sse.exp: check int8 contents of %xmm8
+PASS: gdb.arch/i386-sse.exp: check float contents of %xmm9
+PASS: gdb.arch/i386-sse.exp: check int8 contents of %xmm9
+PASS: gdb.arch/i386-sse.exp: check float contents of %xmm10
+PASS: gdb.arch/i386-sse.exp: check int8 contents of %xmm10
+PASS: gdb.arch/i386-sse.exp: check float contents of %xmm11
+PASS: gdb.arch/i386-sse.exp: check int8 contents of %xmm11
+PASS: gdb.arch/i386-sse.exp: check float contents of %xmm12
+PASS: gdb.arch/i386-sse.exp: check int8 contents of %xmm12
+PASS: gdb.arch/i386-sse.exp: check float contents of %xmm13
+PASS: gdb.arch/i386-sse.exp: check int8 contents of %xmm13
+PASS: gdb.arch/i386-sse.exp: check float contents of %xmm14
+PASS: gdb.arch/i386-sse.exp: check int8 contents of %xmm14
+PASS: gdb.arch/i386-sse.exp: check float contents of %xmm15
+PASS: gdb.arch/i386-sse.exp: check int8 contents of %xmm15
+PASS: gdb.arch/i386-sse.exp: set %xmm0
+PASS: gdb.arch/i386-sse.exp: set %xmm1
+PASS: gdb.arch/i386-sse.exp: set %xmm2
+PASS: gdb.arch/i386-sse.exp: set %xmm3
+PASS: gdb.arch/i386-sse.exp: set %xmm4
+PASS: gdb.arch/i386-sse.exp: set %xmm5
+PASS: gdb.arch/i386-sse.exp: set %xmm6
+PASS: gdb.arch/i386-sse.exp: set %xmm7
+PASS: gdb.arch/i386-sse.exp: set %xmm8
+PASS: gdb.arch/i386-sse.exp: set %xmm9
+PASS: gdb.arch/i386-sse.exp: set %xmm10
+PASS: gdb.arch/i386-sse.exp: set %xmm11
+PASS: gdb.arch/i386-sse.exp: set %xmm12
+PASS: gdb.arch/i386-sse.exp: set %xmm13
+PASS: gdb.arch/i386-sse.exp: set %xmm14
+PASS: gdb.arch/i386-sse.exp: set %xmm15
+PASS: gdb.arch/i386-sse.exp: set second breakpoint in main
+PASS: gdb.arch/i386-sse.exp: continue to breakpoint: continue to second breakpoint in main
+PASS: gdb.arch/i386-sse.exp: check contents of data[0]
+PASS: gdb.arch/i386-sse.exp: check contents of data[1]
+PASS: gdb.arch/i386-sse.exp: check contents of data[2]
+PASS: gdb.arch/i386-sse.exp: check contents of data[3]
+PASS: gdb.arch/i386-sse.exp: check contents of data[4]
+PASS: gdb.arch/i386-sse.exp: check contents of data[5]
+PASS: gdb.arch/i386-sse.exp: check contents of data[6]
+PASS: gdb.arch/i386-sse.exp: check contents of data[7]
+PASS: gdb.arch/i386-sse.exp: check contents of data[8]
+PASS: gdb.arch/i386-sse.exp: check contents of data[9]
+PASS: gdb.arch/i386-sse.exp: check contents of data[10]
+PASS: gdb.arch/i386-sse.exp: check contents of data[11]
+PASS: gdb.arch/i386-sse.exp: check contents of data[12]
+PASS: gdb.arch/i386-sse.exp: check contents of data[13]
+PASS: gdb.arch/i386-sse.exp: check contents of data[14]
+PASS: gdb.arch/i386-sse.exp: check contents of data[15]
+Running ./gdb.arch/i386-sse-stack-align.exp ...
+Running ./gdb.arch/i386-unwind.exp ...
+Running ./gdb.arch/i386-word.exp ...
+PASS: gdb.arch/i386-word.exp: set first breakpoint in main
+PASS: gdb.arch/i386-word.exp: continue to breakpoint: continue to first breakpoint in main
+PASS: gdb.arch/i386-word.exp: check contents of %ax
+PASS: gdb.arch/i386-word.exp: check contents of %bx
+PASS: gdb.arch/i386-word.exp: check contents of %cx
+PASS: gdb.arch/i386-word.exp: check contents of %dx
+PASS: gdb.arch/i386-word.exp: set %ax
+PASS: gdb.arch/i386-word.exp: set %bx
+PASS: gdb.arch/i386-word.exp: set %cx
+PASS: gdb.arch/i386-word.exp: set %dx
+PASS: gdb.arch/i386-word.exp: set second breakpoint in main
+PASS: gdb.arch/i386-word.exp: continue to breakpoint: continue to second breakpoint in main
+PASS: gdb.arch/i386-word.exp: check contents of %ax
+PASS: gdb.arch/i386-word.exp: check contents of %bx
+PASS: gdb.arch/i386-word.exp: check contents of %cx
+PASS: gdb.arch/i386-word.exp: check contents of %dx
+Running ./gdb.arch/ia64-breakpoint-shadow.exp ...
+Running ./gdb.arch/iwmmxt-regs.exp ...
+Running ./gdb.arch/mips16-thunks.exp ...
+Running ./gdb.arch/mips-octeon-bbit.exp ...
+Running ./gdb.arch/pa-nullify.exp ...
+Running ./gdb.arch/powerpc-aix-prologue.exp ...
+Running ./gdb.arch/powerpc-d128-regs.exp ...
+Running ./gdb.arch/powerpc-prologue.exp ...
+Running ./gdb.arch/ppc64-atomic-inst.exp ...
+Running ./gdb.arch/ppc-dfp.exp ...
+Running ./gdb.arch/ppc-fp.exp ...
+Running ./gdb.arch/spu-info.exp ...
+Running ./gdb.arch/spu-ls.exp ...
+Running ./gdb.arch/system-gcore.exp ...
+PASS: gdb.arch/system-gcore.exp: help gcore
+PASS: gdb.arch/system-gcore.exp: set breakpoint at terminal_func
+PASS: gdb.arch/system-gcore.exp: continue to terminal_func
+PASS: gdb.arch/system-gcore.exp: save a corefile
+FAIL: gdb.arch/system-gcore.exp: re-load generated corefile (bad file format)
+Running ./gdb.arch/thumb2-it.exp ...
+Running ./gdb.arch/thumb-bx-pc.exp ...
+Running ./gdb.arch/thumb-prologue.exp ...
+Running ./gdb.arch/thumb-singlestep.exp ...
+Running ./gdb.arch/vsx-regs.exp ...
+Running ./gdb.asm/asm-source.exp ...
+PASS: gdb.asm/asm-source.exp: f at main
+PASS: gdb.asm/asm-source.exp: next over macro
+PASS: gdb.asm/asm-source.exp: step into foo2
+PASS: gdb.asm/asm-source.exp: info target
+PASS: gdb.asm/asm-source.exp: info symbol
+PASS: gdb.asm/asm-source.exp: list
+PASS: gdb.asm/asm-source.exp: search
+PASS: gdb.asm/asm-source.exp: f in foo2
+PASS: gdb.asm/asm-source.exp: n in foo2
+PASS: gdb.asm/asm-source.exp: bt ALL in foo2
+PASS: gdb.asm/asm-source.exp: bt 2 in foo2
+PASS: gdb.asm/asm-source.exp: s 2
+PASS: gdb.asm/asm-source.exp: n 2
+PASS: gdb.asm/asm-source.exp: bt 3 in foo3
+PASS: gdb.asm/asm-source.exp: info source asmsrc1.s
+PASS: gdb.asm/asm-source.exp: finish from foo3
+PASS: gdb.asm/asm-source.exp: info source asmsrc2.s
+PASS: gdb.asm/asm-source.exp: info sources
+PASS: gdb.asm/asm-source.exp: info line
+PASS: gdb.asm/asm-source.exp: next over foo3
+PASS: gdb.asm/asm-source.exp: return from foo2
+PASS: gdb.asm/asm-source.exp: look at global variable
+PASS: gdb.asm/asm-source.exp: x/i &globalvar
+PASS: gdb.asm/asm-source.exp: disassem &globalvar, &globalvar+1
+PASS: gdb.asm/asm-source.exp: look at static variable
+PASS: gdb.asm/asm-source.exp: x/i &staticvar
+PASS: gdb.asm/asm-source.exp: disassem &staticvar, &staticvar+1
+PASS: gdb.asm/asm-source.exp: look at static function
+Running ./gdb.base/a2-run.exp ...
+Running ./gdb.base/advance.exp ...
+PASS: gdb.base/advance.exp: advance line number
+PASS: gdb.base/advance.exp: malformed advance
+PASS: gdb.base/advance.exp: advance func
+PASS: gdb.base/advance.exp: advance function not called by current frame
+PASS: gdb.base/advance.exp: set breakpoint at call to func3
+PASS: gdb.base/advance.exp: continue to call to func3 in main
+PASS: gdb.base/advance.exp: advance function called as param
+PASS: gdb.base/advance.exp: advance with no argument
+Running ./gdb.base/alias.exp ...
+PASS: gdb.base/alias.exp: alias -a set2=set
+PASS: gdb.base/alias.exp: set2 print elements 42
+PASS: gdb.base/alias.exp: verify set2
+PASS: gdb.base/alias.exp: abbrev set2 not present in help command list
+PASS: gdb.base/alias.exp: alias -a set3= set
+PASS: gdb.base/alias.exp: set3 print elements 43
+PASS: gdb.base/alias.exp: verify set3
+PASS: gdb.base/alias.exp: abbrev set3 not present in help command list
+PASS: gdb.base/alias.exp: alias -a set4 =set
+PASS: gdb.base/alias.exp: set4 print elements 44
+PASS: gdb.base/alias.exp: verify set4
+PASS: gdb.base/alias.exp: abbrev set4 not present in help command list
+PASS: gdb.base/alias.exp: alias -a set5 = set
+PASS: gdb.base/alias.exp: set5 print elements 45
+PASS: gdb.base/alias.exp: verify set5
+PASS: gdb.base/alias.exp: abbrev set5 not present in help command list
+PASS: gdb.base/alias.exp: alias -a -- set6 = set
+PASS: gdb.base/alias.exp: set6 print elements 46
+PASS: gdb.base/alias.exp: verify set6
+PASS: gdb.base/alias.exp: abbrev set6 not present in help command list
+PASS: gdb.base/alias.exp: alias -a -- -a = set
+PASS: gdb.base/alias.exp: -a print elements 47
+PASS: gdb.base/alias.exp: verify -a
+PASS: gdb.base/alias.exp: abbrev -a not present in help command list
+PASS: gdb.base/alias.exp: alias set2=set
+PASS: gdb.base/alias.exp: alias foo=bar
+PASS: gdb.base/alias.exp: alias spe = set p elem
+PASS: gdb.base/alias.exp: spe 50
+PASS: gdb.base/alias.exp: verify spe
+PASS: gdb.base/alias.exp: alias set pr elms = set p elem
+PASS: gdb.base/alias.exp: set pr elms 51
+PASS: gdb.base/alias.exp: verify set pr elms
+PASS: gdb.base/alias.exp: help set print
+Running ./gdb.base/all-bin.exp ...
+PASS: gdb.base/all-bin.exp: continuing after dummy()
+PASS: gdb.base/all-bin.exp: print value of v_int+v_char
+PASS: gdb.base/all-bin.exp: print value of v_int+v_short
+PASS: gdb.base/all-bin.exp: print value of v_int+v_signed_char
+PASS: gdb.base/all-bin.exp: print value of v_int+v_unsigned_char
+PASS: gdb.base/all-bin.exp: print value of v_int+v_signed_short
+PASS: gdb.base/all-bin.exp: print value of v_int+v_unsigned_short
+PASS: gdb.base/all-bin.exp: print value of v_int+v_signed_int
+PASS: gdb.base/all-bin.exp: print value of v_int+v_unsigned_int
+PASS: gdb.base/all-bin.exp: print value of v_int+v_long
+PASS: gdb.base/all-bin.exp: print value of v_int+v_signed_long
+PASS: gdb.base/all-bin.exp: print value of v_int+v_unsigned_long
+PASS: gdb.base/all-bin.exp: print value of v_int+v_float
+PASS: gdb.base/all-bin.exp: print value of v_int+v_double
+PASS: gdb.base/all-bin.exp: print value of v_int<=v_char
+PASS: gdb.base/all-bin.exp: print value of v_int<=v_short
+PASS: gdb.base/all-bin.exp: print value of v_int<=v_signed_char
+PASS: gdb.base/all-bin.exp: print value of v_int<=v_unsigned_char
+PASS: gdb.base/all-bin.exp: print value of v_int<=v_signed_short
+PASS: gdb.base/all-bin.exp: print value of v_int<=v_unsigned_short
+PASS: gdb.base/all-bin.exp: print value of v_int<=v_signed_int
+PASS: gdb.base/all-bin.exp: print value of v_int<=v_unsigned_int
+PASS: gdb.base/all-bin.exp: print value of v_int<=v_long
+PASS: gdb.base/all-bin.exp: print value of v_int<=v_signed_long
+PASS: gdb.base/all-bin.exp: print value of v_int<=v_unsigned_long
+PASS: gdb.base/all-bin.exp: print value of v_int<=v_float
+PASS: gdb.base/all-bin.exp: print value of v_int<=v_double
+PASS: gdb.base/all-bin.exp: set v_char=0
+PASS: gdb.base/all-bin.exp: set v_double=0
+PASS: gdb.base/all-bin.exp: set v_unsigned_long=0
+PASS: gdb.base/all-bin.exp: print value of v_int&&v_char
+PASS: gdb.base/all-bin.exp: print value of v_int&&v_short
+PASS: gdb.base/all-bin.exp: print value of v_int&&v_signed_char
+PASS: gdb.base/all-bin.exp: print value of v_int&&v_unsigned_char
+PASS: gdb.base/all-bin.exp: print value of v_int&&v_signed_short
+PASS: gdb.base/all-bin.exp: print value of v_int&&v_unsigned_short
+PASS: gdb.base/all-bin.exp: print value of v_int&&v_signed_int
+PASS: gdb.base/all-bin.exp: print value of v_int&&v_unsigned_int
+PASS: gdb.base/all-bin.exp: print value of v_int&&v_long
+PASS: gdb.base/all-bin.exp: print value of v_int&&v_signed_long
+PASS: gdb.base/all-bin.exp: print value of v_int&&v_unsigned_long
+PASS: gdb.base/all-bin.exp: print value of v_int&&v_float
+PASS: gdb.base/all-bin.exp: print value of v_int&&v_double
+Running ./gdb.base/annota1.exp ...
+Running ./gdb.base/annota3.exp ...
+Running ./gdb.base/anon.exp ...
+PASS: gdb.base/anon.exp: set breakpoint in anon.c
+PASS: gdb.base/anon.exp: continue to breakpoint: continue to breakpoint in anon.c
+PASS: gdb.base/anon.exp: print val.data.six
+Running ./gdb.base/args.exp ...
+Running ./gdb.base/argv0-symlink.exp ...
+PASS: gdb.base/argv0-symlink.exp: kept file symbolic link name
+FAIL: gdb.base/argv0-symlink.exp: kept directory symbolic link name
+Running ./gdb.base/arithmet.exp ...
+PASS: gdb.base/arithmet.exp: set variable x=14
+PASS: gdb.base/arithmet.exp: set variable y=2
+PASS: gdb.base/arithmet.exp: set variable z=2
+PASS: gdb.base/arithmet.exp: set variable w=3
+PASS: gdb.base/arithmet.exp: print x
+PASS: gdb.base/arithmet.exp: print y
+PASS: gdb.base/arithmet.exp: print z
+PASS: gdb.base/arithmet.exp: print w
+PASS: gdb.base/arithmet.exp: print x+y
+PASS: gdb.base/arithmet.exp: print x-y
+PASS: gdb.base/arithmet.exp: print x*y
+PASS: gdb.base/arithmet.exp: print x/y
+PASS: gdb.base/arithmet.exp: print x%y
+PASS: gdb.base/arithmet.exp: print x+y+z
+PASS: gdb.base/arithmet.exp: print x-y-z
+PASS: gdb.base/arithmet.exp: print x*y*z
+PASS: gdb.base/arithmet.exp: print x/y/z
+PASS: gdb.base/arithmet.exp: print x%y%z
+PASS: gdb.base/arithmet.exp: set variable x=10
+PASS: gdb.base/arithmet.exp: set variable y=4
+PASS: gdb.base/arithmet.exp: print x+y-z
+PASS: gdb.base/arithmet.exp: print x+y*z
+PASS: gdb.base/arithmet.exp: print x+y%w
+PASS: gdb.base/arithmet.exp: print x+y/w
+PASS: gdb.base/arithmet.exp: print x-y*z
+PASS: gdb.base/arithmet.exp: print x-y%z
+PASS: gdb.base/arithmet.exp: print x-y/z
+PASS: gdb.base/arithmet.exp: print x*y/z
+PASS: gdb.base/arithmet.exp: print x*y%w
+PASS: gdb.base/arithmet.exp: print x/y%w
+PASS: gdb.base/arithmet.exp: print x-(y+w)
+PASS: gdb.base/arithmet.exp: print x/(y*w)
+PASS: gdb.base/arithmet.exp: print x-(y/w)
+PASS: gdb.base/arithmet.exp: print (x+y)*w
+Running ./gdb.base/arrayidx.exp ...
+PASS: gdb.base/arrayidx.exp: Set print array-indexes to off
+PASS: gdb.base/arrayidx.exp: Print array with array-indexes off
+PASS: gdb.base/arrayidx.exp: Set print array-indexes to on
+PASS: gdb.base/arrayidx.exp: Print array with array-indexes on
+Running ./gdb.base/assign.exp ...
+PASS: gdb.base/assign.exp: continuing after dummy()
+PASS: gdb.base/assign.exp: v_int=57
+PASS: gdb.base/assign.exp: set v_int to 6
+PASS: gdb.base/assign.exp: v_int+=57
+PASS: gdb.base/assign.exp: set v_int to 6 (2)
+PASS: gdb.base/assign.exp: v_int-=57
+PASS: gdb.base/assign.exp: set v_int to 6 (3)
+PASS: gdb.base/assign.exp: v_int*=5
+PASS: gdb.base/assign.exp: set v_int to 6 (4)
+PASS: gdb.base/assign.exp: v_int/=4
+PASS: gdb.base/assign.exp: set v_int to 6 (5)
+PASS: gdb.base/assign.exp: v_int%=4
+PASS: gdb.base/assign.exp: set v_int to 6 (6)
+PASS: gdb.base/assign.exp: v_int+=char
+PASS: gdb.base/assign.exp: set v_int to 6 (7)
+PASS: gdb.base/assign.exp: v_int+=signed_char
+PASS: gdb.base/assign.exp: set v_int to 6 (8)
+PASS: gdb.base/assign.exp: v_int+=unsigned_char
+PASS: gdb.base/assign.exp: set v_int to 6 (9)
+PASS: gdb.base/assign.exp: v_int+=short
+PASS: gdb.base/assign.exp: set v_int to 6 (10)
+PASS: gdb.base/assign.exp: v_int+=signed_short
+PASS: gdb.base/assign.exp: set v_int to 6 (11)
+PASS: gdb.base/assign.exp: v_int=+unsigned_short
+PASS: gdb.base/assign.exp: set v_int to 6 (12)
+PASS: gdb.base/assign.exp: v_int+=signed_int
+PASS: gdb.base/assign.exp: set v_int to 6 (13)
+PASS: gdb.base/assign.exp: v_int+=unsigned_int
+PASS: gdb.base/assign.exp: set v_int to 6 (14)
+PASS: gdb.base/assign.exp: v_int+=long
+PASS: gdb.base/assign.exp: set v_int to 6 (15)
+PASS: gdb.base/assign.exp: v_int+=signed_long
+PASS: gdb.base/assign.exp: set v_int to 6 (16)
+PASS: gdb.base/assign.exp: v_int+=unsigned_long
+PASS: gdb.base/assign.exp: set v_int to 6 (17)
+PASS: gdb.base/assign.exp: v_int+=v_float
+PASS: gdb.base/assign.exp: set v_int to 6 (18)
+PASS: gdb.base/assign.exp: v_int+=double
+Running ./gdb.base/async.exp ...
+Running ./gdb.base/async-shell.exp ...
+Running ./gdb.base/attach.exp ...
+Running ./gdb.base/attach-pie-misread.exp ...
+Running ./gdb.base/attach-pie-noexec.exp ...
+Running ./gdb.base/attach-twice.exp ...
+Running ./gdb.base/auxv.exp ...
+PASS: gdb.base/auxv.exp: set print sevenbit-strings
+PASS: gdb.base/auxv.exp: set width 0
+PASS: gdb.base/auxv.exp: tbreak 78
+PASS: gdb.base/auxv.exp: continue
+PASS: gdb.base/auxv.exp: info auxv on live process
+PASS: gdb.base/auxv.exp: gcore
+PASS: gdb.base/auxv.exp: continue
+PASS: gdb.base/auxv.exp: continue
+UNSUPPORTED: gdb.base/auxv.exp: generate native core dump
+UNSUPPORTED: gdb.base/auxv.exp: info auxv on native core dump
+UNSUPPORTED: gdb.base/auxv.exp: matching auxv data from live and core
+FAIL: gdb.base/auxv.exp: load core file for info auxv on gcore-created dump
+FAIL: gdb.base/auxv.exp: info auxv on gcore-created dump
+FAIL: gdb.base/auxv.exp: matching auxv data from live and gcore
+Running ./gdb.base/bang.exp ...
+PASS: gdb.base/bang.exp: run program
+Running ./gdb.base/bfp-test.exp ...
+PASS: gdb.base/bfp-test.exp: continue to breakpoint: return
+PASS: gdb.base/bfp-test.exp: The original value of b32 is 1.5
+PASS: gdb.base/bfp-test.exp: The original value of b64 is 2.25
+PASS: gdb.base/bfp-test.exp: The original value of b128 is 3.375
+PASS: gdb.base/bfp-test.exp: Try to change b32 to -1.5 with 'print b32=-1.5f'
+PASS: gdb.base/bfp-test.exp: Try to change b64 to -2.25 with 'print b64=-2.25f'
+PASS: gdb.base/bfp-test.exp: Try to change b128 to -3.375 with 'print b128=-3.375l'
+PASS: gdb.base/bfp-test.exp: set variable b32 = 10.5f
+PASS: gdb.base/bfp-test.exp: set variable b64 = 20.25f
+PASS: gdb.base/bfp-test.exp: set variable b128 = 30.375l
+PASS: gdb.base/bfp-test.exp: The value of b32 is changed to 10.5
+PASS: gdb.base/bfp-test.exp: The value of b64 is changed to 20.25
+PASS: gdb.base/bfp-test.exp: The value of b128 is changed to 30.375
+PASS: gdb.base/bfp-test.exp: set variable b32 = 100.5a
+PASS: gdb.base/bfp-test.exp: set variable b64 = 200.25x
+PASS: gdb.base/bfp-test.exp: set variable b128 = 300.375fl
+PASS: gdb.base/bfp-test.exp: set variable b128 = 300.375fff
+Running ./gdb.base/bigcore.exp ...
+UNTESTED: gdb.base/bigcore.exp: Remote system
+Running ./gdb.base/bitfields2.exp ...
+PASS: gdb.base/bitfields2.exp: set print sevenbit-strings
+PASS: gdb.base/bitfields2.exp: break tester prior to break1
+PASS: gdb.base/bitfields2.exp: continuing to tester prior to break1
+PASS: gdb.base/bitfields2.exp: continuing to break1 #0
+PASS: gdb.base/bitfields2.exp: bitfield uniqueness; flags.s1 = 1
+PASS: gdb.base/bitfields2.exp: continuing to break1 #1
+PASS: gdb.base/bitfields2.exp: bitfield uniqueness; flags.u1 = 1
+PASS: gdb.base/bitfields2.exp: continuing to break1 #2
+PASS: gdb.base/bitfields2.exp: bitfield uniqueness; flags.s2 = 1
+PASS: gdb.base/bitfields2.exp: continuing to break1 #3
+PASS: gdb.base/bitfields2.exp: bitfield uniqueness; flags.u2 = 1
+PASS: gdb.base/bitfields2.exp: continuing to break1 #4
+PASS: gdb.base/bitfields2.exp: bitfield uniqueness; flags.s3 = 1
+PASS: gdb.base/bitfields2.exp: continuing to break1 #5
+PASS: gdb.base/bitfields2.exp: bitfield uniqueness; flags.u3 = 1
+PASS: gdb.base/bitfields2.exp: break tester prior to break2
+PASS: gdb.base/bitfields2.exp: continuing to tester prior to break2
+PASS: gdb.base/bitfields2.exp: continuing to break2 #0
+PASS: gdb.base/bitfields2.exp: bitfield containment; flags.u1, flags.u3, and flags.s3 to all 1s
+PASS: gdb.base/bitfields2.exp: continuing to break2 #1
+PASS: gdb.base/bitfields2.exp: bitfield containment; flags.u2, flags.s1, flags.s2 to all 1s
+PASS: gdb.base/bitfields2.exp: break tester prior to break3
+PASS: gdb.base/bitfields2.exp: continuing to tester prior to break3
+PASS: gdb.base/bitfields2.exp: continuing to break3 #0
+PASS: gdb.base/bitfields2.exp: maximum unsigned bitfield values
+PASS: gdb.base/bitfields2.exp: break tester prior to break4
+PASS: gdb.base/bitfields2.exp: continuing to tester prior to break4
+PASS: gdb.base/bitfields2.exp: continuing to break4 #0
+PASS: gdb.base/bitfields2.exp: maximum signed bitfield values
+PASS: gdb.base/bitfields2.exp: continuing to break4 #1
+PASS: gdb.base/bitfields2.exp: determining signed-ness of bitfields
+PASS: gdb.base/bitfields2.exp: most negative signed bitfield values
+PASS: gdb.base/bitfields2.exp: continuing to break4 #2
+PASS: gdb.base/bitfields2.exp: signed bitfields containing -1
+PASS: gdb.base/bitfields2.exp: break tester prior to break5
+PASS: gdb.base/bitfields2.exp: continuing to tester prior to break5
+PASS: gdb.base/bitfields2.exp: continuing to break5 #0
+PASS: gdb.base/bitfields2.exp: set long long unsigned bitfield
+PASS: gdb.base/bitfields2.exp: set long long signed bitfield positive
+PASS: gdb.base/bitfields2.exp: long long bitfield values after set
+PASS: gdb.base/bitfields2.exp: set long long signed bitfield negative
+PASS: gdb.base/bitfields2.exp: long long bitfield values after set negative
+Running ./gdb.base/bitfields.exp ...
+PASS: gdb.base/bitfields.exp: set print sevenbit-strings
+PASS: gdb.base/bitfields.exp: print flags
+PASS: gdb.base/bitfields.exp: continuing to break1 #1
+PASS: gdb.base/bitfields.exp: bitfield uniqueness (s1)
+PASS: gdb.base/bitfields.exp: continuing to break1 #2
+PASS: gdb.base/bitfields.exp: bitfield uniqueness (u1)
+PASS: gdb.base/bitfields.exp: continuing to break1 #3
+PASS: gdb.base/bitfields.exp: bitfield uniqueness (s2)
+PASS: gdb.base/bitfields.exp: continuing to break1 #4
+PASS: gdb.base/bitfields.exp: bitfield uniqueness (u2)
+PASS: gdb.base/bitfields.exp: continuing to break1 #5
+PASS: gdb.base/bitfields.exp: bitfield uniqueness (s3)
+PASS: gdb.base/bitfields.exp: continuing to break1 #6
+PASS: gdb.base/bitfields.exp: bitfield uniqueness (u3)
+PASS: gdb.base/bitfields.exp: continuing to break1 #7
+PASS: gdb.base/bitfields.exp: bitfield uniqueness (s9)
+PASS: gdb.base/bitfields.exp: continuing to break1 #8
+PASS: gdb.base/bitfields.exp: bitfield uniqueness (u9)
+PASS: gdb.base/bitfields.exp: continuing to break1 #9
+PASS: gdb.base/bitfields.exp: bitfield uniqueness (sc)
+PASS: gdb.base/bitfields.exp: bitfield containment #1
+PASS: gdb.base/bitfields.exp: continuing to break2
+PASS: gdb.base/bitfields.exp: bitfield containment #2
+PASS: gdb.base/bitfields.exp: unsigned bitfield ranges
+PASS: gdb.base/bitfields.exp: signed bitfields, max positive values
+PASS: gdb.base/bitfields.exp: continuing to break4 #1
+PASS: gdb.base/bitfields.exp: determining signed-ness of bitfields
+PASS: gdb.base/bitfields.exp: signed bitfields, max negative values
+PASS: gdb.base/bitfields.exp: continuing to break4 #2
+PASS: gdb.base/bitfields.exp: signed bitfields with -1
+PASS: gdb.base/bitfields.exp: continuing to break5
+PASS: gdb.base/bitfields.exp: distinct bitfields in container
+PASS: gdb.base/bitfields.exp: print container.one.u3
+PASS: gdb.base/bitfields.exp: print container.two.u3
+PASS: gdb.base/bitfields.exp: set internal var
+PASS: gdb.base/bitfields.exp: set $myvar.a = 0
+PASS: gdb.base/bitfields.exp: set $myvar.inner.b = 1
+PASS: gdb.base/bitfields.exp: set $myvar.inner.deep.c = 0
+PASS: gdb.base/bitfields.exp: set $myvar.inner.deep.d = -1
+PASS: gdb.base/bitfields.exp: set $myvar.inner.e = 1
+PASS: gdb.base/bitfields.exp: set $myvar.f = 1
+PASS: gdb.base/bitfields.exp: print $myvar.a
+PASS: gdb.base/bitfields.exp: print $myvar.inner.b
+PASS: gdb.base/bitfields.exp: print $myvar.inner.deep.c
+PASS: gdb.base/bitfields.exp: print $myvar.inner.deep.d
+PASS: gdb.base/bitfields.exp: print $myvar.inner.e
+PASS: gdb.base/bitfields.exp: print $myvar.f
+Running ./gdb.base/bitops.exp ...
+PASS: gdb.base/bitops.exp: print value of !1
+PASS: gdb.base/bitops.exp: print value of !0
+PASS: gdb.base/bitops.exp: print value of !100
+PASS: gdb.base/bitops.exp: print value of !1000
+PASS: gdb.base/bitops.exp: print value of !10
+PASS: gdb.base/bitops.exp: print value of !2
+PASS: gdb.base/bitops.exp: print value of 10 | 5
+PASS: gdb.base/bitops.exp: print value of 10 & 5
+PASS: gdb.base/bitops.exp: print value of 10 ^ 5
+PASS: gdb.base/bitops.exp: print value of -!0
+PASS: gdb.base/bitops.exp: print value of ~-!0
+PASS: gdb.base/bitops.exp: print value of 3 * 2 / 4.0 * 2.0
+PASS: gdb.base/bitops.exp: print value of 8 << 2 >> 4
+PASS: gdb.base/bitops.exp: print value of -1 < 0 > 1
+PASS: gdb.base/bitops.exp: print value of 15 ^ 10 ^ 5 ^ 7
+PASS: gdb.base/bitops.exp: print value of 3.5 < 4.0
+PASS: gdb.base/bitops.exp: print value of 3.5 < -4.0
+PASS: gdb.base/bitops.exp: print value of 2 > -3
+PASS: gdb.base/bitops.exp: print value of -3>4
+PASS: gdb.base/bitops.exp: print value of (-3 > 4)
+PASS: gdb.base/bitops.exp: print value of 3>=2.5
+PASS: gdb.base/bitops.exp: print value of 3>=4.5
+PASS: gdb.base/bitops.exp: print value of 3==3.0
+PASS: gdb.base/bitops.exp: print value of 3==4.0
+PASS: gdb.base/bitops.exp: print value of 3!=3.0
+PASS: gdb.base/bitops.exp: print value of 3!=5.0
+PASS: gdb.base/bitops.exp: print value of 0 || 1 && 0 | 0 ^ 0 == 8 > 128 >>1 +2 *2
+PASS: gdb.base/bitops.exp: print value of 1.0 || 0
+PASS: gdb.base/bitops.exp: print value of 0.0 || 1.0
+PASS: gdb.base/bitops.exp: print value of 0.0 || 0
+PASS: gdb.base/bitops.exp: print value of 0 || 1 && 0 | 0 ^ 0 == 8
+PASS: gdb.base/bitops.exp: print value of 0 == 8 > 128 >> 1 + 2 * 2
+Running ./gdb.base/break-always.exp ...
+PASS: gdb.base/break-always.exp: set breakpoint always-inserted on
+PASS: gdb.base/break-always.exp: confirm breakpoint always-inserted
+PASS: gdb.base/break-always.exp: set breakpoint on bar
+PASS: gdb.base/break-always.exp: set 2nd breakpoint on bar
+PASS: gdb.base/break-always.exp: set 3rd breakpoint on bar
+PASS: gdb.base/break-always.exp: set 4th breakpoint on bar
+PASS: gdb.base/break-always.exp: initial check breakpoint state
+PASS: gdb.base/break-always.exp: initial disable all breakpoints
+PASS: gdb.base/break-always.exp: initial enable all breakpoints
+PASS: gdb.base/break-always.exp: re-disable all breakpoints
+PASS: gdb.base/break-always.exp: enable 3.A
+PASS: gdb.base/break-always.exp: disable 3.B
+PASS: gdb.base/break-always.exp: enable 3.C
+PASS: gdb.base/break-always.exp: enable 2.D
+PASS: gdb.base/break-always.exp: disable 2.E
+PASS: gdb.base/break-always.exp: disable 3.F
+PASS: gdb.base/break-always.exp: enable 3.G
+PASS: gdb.base/break-always.exp: enable 2.H
+PASS: gdb.base/break-always.exp: disable 2.I
+PASS: gdb.base/break-always.exp: before re-enable check breakpoint state
+PASS: gdb.base/break-always.exp: re-enable all breakpoints
+PASS: gdb.base/break-always.exp: set breakpoint on bar 2
+PASS: gdb.base/break-always.exp: save shadow
+PASS: gdb.base/break-always.exp: write 0 to breakpoint's address
+PASS: gdb.base/break-always.exp: read back 0 from the breakpoint's address
+PASS: gdb.base/break-always.exp: write 1 to breakpoint's address
+PASS: gdb.base/break-always.exp: read back 1 from the breakpoint's address
+PASS: gdb.base/break-always.exp: p /x *(char *) 0x55555555470c = $shadow
+PASS: gdb.base/break-always.exp: continue to breakpoint: bar
+Running ./gdb.base/break-caller-line.exp ...
+PASS: gdb.base/break-caller-line.exp: up
+PASS: gdb.base/break-caller-line.exp: info line *$pc
+PASS: gdb.base/break-caller-line.exp: break
+Running ./gdb.base/break-entry.exp ...
+UNTESTED: gdb.base/break-entry.exp: break-entry.exp
+Running ./gdb.base/break.exp ...
+PASS: gdb.base/break.exp: Delete all breakpoints when none
+PASS: gdb.base/break.exp: breakpoint function
+PASS: gdb.base/break.exp: breakpoint quoted function
+PASS: gdb.base/break.exp: breakpoint function in file
+PASS: gdb.base/break.exp: use `list' to establish default source file
+PASS: gdb.base/break.exp: breakpoint line number
+PASS: gdb.base/break.exp: breakpoint duplicate
+PASS: gdb.base/break.exp: breakpoint line number in file
+PASS: gdb.base/break.exp: breakpoint at start of multi line if conditional
+PASS: gdb.base/break.exp: breakpoint at start of multi line while conditional
+PASS: gdb.base/break.exp: breakpoint info
+PASS: gdb.base/break.exp: info break 2 4 6
+PASS: gdb.base/break.exp: info break 3-5
+PASS: gdb.base/break.exp: disable using history values
+PASS: gdb.base/break.exp: check disable with history values
+PASS: gdb.base/break.exp: disable with convenience values
+PASS: gdb.base/break.exp: check disable with convenience values
+PASS: gdb.base/break.exp: disable non-existent breakpoint 10
+PASS: gdb.base/break.exp: set $baz 1.234
+PASS: gdb.base/break.exp: disable with non-integer convenience var
+PASS: gdb.base/break.exp: disable with non-existent convenience var
+PASS: gdb.base/break.exp: disable with non-existent history value
+PASS: gdb.base/break.exp: disable with badly formed history value
+PASS: gdb.base/break.exp: run until function breakpoint
+PASS: gdb.base/break.exp: list marker1
+PASS: gdb.base/break.exp: break lineno
+PASS: gdb.base/break.exp: delete $bpnum
+PASS: gdb.base/break.exp: run until breakpoint set at a line number
+PASS: gdb.base/break.exp: run until file:function(6) breakpoint
+PASS: gdb.base/break.exp: run until file:function(5) breakpoint
+PASS: gdb.base/break.exp: run until file:function(4) breakpoint
+PASS: gdb.base/break.exp: run until file:function(3) breakpoint
+PASS: gdb.base/break.exp: run until file:function(2) breakpoint
+PASS: gdb.base/break.exp: run until file:function(1) breakpoint
+PASS: gdb.base/break.exp: run until quoted breakpoint
+PASS: gdb.base/break.exp: run until file:linenum breakpoint
+PASS: gdb.base/break.exp: breakpoint offset +1
+PASS: gdb.base/break.exp: step onto breakpoint
+PASS: gdb.base/break.exp: setting breakpoint at }
+PASS: gdb.base/break.exp: continue to breakpoint at }
+PASS: gdb.base/break.exp: Temporary breakpoint function
+PASS: gdb.base/break.exp: Temporary breakpoint function in file
+PASS: gdb.base/break.exp: Temporary breakpoint line number #1
+PASS: gdb.base/break.exp: Temporary breakpoint line number #2
+PASS: gdb.base/break.exp: Temporary breakpoint line number in file #1
+PASS: gdb.base/break.exp: Temporary breakpoint line number in file #2
+PASS: gdb.base/break.exp: Temporary breakpoint info
+PASS: gdb.base/break.exp: catch requires an event name
+PASS: gdb.base/break.exp: set catch fork, never expected to trigger
+PASS: gdb.base/break.exp: set catch vfork, never expected to trigger
+PASS: gdb.base/break.exp: set catch exec, never expected to trigger
+PASS: gdb.base/break.exp: set breakpoint pending off
+PASS: gdb.base/break.exp: break on non-existent source line
+PASS: gdb.base/break.exp: until bp_location1
+PASS: gdb.base/break.exp: break on default location, 1st time
+PASS: gdb.base/break.exp: break on default location, 2nd time
+PASS: gdb.base/break.exp: break on default location, 3rd time
+PASS: gdb.base/break.exp: break on default location, 4th time
+PASS: gdb.base/break.exp: set to-be-silent break bp_location1
+PASS: gdb.base/break.exp: set silent break bp_location1
+PASS: gdb.base/break.exp: info silent break bp_location1
+PASS: gdb.base/break.exp: hit silent break bp_location1
+PASS: gdb.base/break.exp: stopped for silent break bp_location1
+PASS: gdb.base/break.exp: thread-specific breakpoint on non-existent thread disallowed
+PASS: gdb.base/break.exp: thread-specific breakpoint on bogus thread ID disallowed
+PASS: gdb.base/break.exp: breakpoint with trailing garbage disallowed
+PASS: gdb.base/break.exp: step over breakpoint
+PASS: gdb.base/break.exp: clear line has no breakpoint disallowed
+PASS: gdb.base/break.exp: clear current line has no breakpoint disallowed
+PASS: gdb.base/break.exp: break marker3 #1
+PASS: gdb.base/break.exp: break marker3 #2
+PASS: gdb.base/break.exp: clear marker3
+PASS: gdb.base/break.exp: set convenience variable $foo to bp_location11
+PASS: gdb.base/break.exp: set breakpoint via convenience variable
+PASS: gdb.base/break.exp: set convenience variable $foo to 81.5
+PASS: gdb.base/break.exp: set breakpoint via non-integer convenience variable disallowed
+PASS: gdb.base/break.exp: set breakpoint on to-be-called function
+PASS: gdb.base/break.exp: hit breakpoint on called function
+PASS: gdb.base/break.exp: backtrace while in called function
+PASS: gdb.base/break.exp: finish from called function
+PASS: gdb.base/break.exp: finish with arguments disallowed
+PASS: gdb.base/break.exp: finish from outermost frame disallowed
+PASS: gdb.base/break.exp: kill program
+PASS: gdb.base/break.exp: break at factorial
+PASS: gdb.base/break.exp: continue to factorial(5)
+PASS: gdb.base/break.exp: backtrace from factorial(5)
+PASS: gdb.base/break.exp: next to recursive call
+PASS: gdb.base/break.exp: next over recursive call
+PASS: gdb.base/break.exp: backtrace from factorial(5.1)
+PASS: gdb.base/break.exp: continue until exit at recursive next test
+PASS: gdb.base/break.exp: breakpoint function, optimized file
+PASS: gdb.base/break.exp: breakpoint small function, optimized file
+PASS: gdb.base/break.exp: run until function breakpoint, optimized file (code motion)
+PASS: gdb.base/break.exp: run until breakpoint set at small function, optimized file
+PASS: gdb.base/break.exp: rbreak junk pending setup
+PASS: gdb.base/break.exp: rbreak junk set breakpoint
+PASS: gdb.base/break.exp: rbreak junk
+Running ./gdb.base/break-inline.exp ...
+PASS: gdb.base/break-inline.exp: break
+Running ./gdb.base/break-interp.exp ...
+Running ./gdb.base/break-on-linker-gcd-function.exp ...
+PASS: gdb.base/break-on-linker-gcd-function.exp: b 25
+Running ./gdb.base/breakpoint-shadow.exp ...
+PASS: gdb.base/breakpoint-shadow.exp: set breakpoint always-inserted on
+PASS: gdb.base/breakpoint-shadow.exp: show breakpoint always-inserted
+PASS: gdb.base/breakpoint-shadow.exp: disassembly without breakpoints
+PASS: gdb.base/breakpoint-shadow.exp: First breakpoint placed
+PASS: gdb.base/breakpoint-shadow.exp: Second breakpoint placed
+PASS: gdb.base/breakpoint-shadow.exp: disassembly with breakpoints
+Running ./gdb.base/call-ar-st.exp ...
+PASS: gdb.base/call-ar-st.exp: set print sevenbit-strings
+PASS: gdb.base/call-ar-st.exp: set print address off
+PASS: gdb.base/call-ar-st.exp: set width 0
+PASS: gdb.base/call-ar-st.exp: tbreakpoint line 1209
+PASS: gdb.base/call-ar-st.exp: run until breakpoint set at a line
+PASS: gdb.base/call-ar-st.exp: tbreakpoint line 1216
+PASS: gdb.base/call-ar-st.exp: tbreakpoint line 1220
+PASS: gdb.base/call-ar-st.exp: step inside print_all_arrays
+PASS: gdb.base/call-ar-st.exp: tbreakpoint line 1236
+PASS: gdb.base/call-ar-st.exp: tbreakpoint line 1241
+PASS: gdb.base/call-ar-st.exp: continue to 1241
+PASS: gdb.base/call-ar-st.exp: set breakpoint in sum_array_print
+PASS: gdb.base/call-ar-st.exp: set print frame-arguments all
+PASS: gdb.base/call-ar-st.exp: check args of sum_array_print
+PASS: gdb.base/call-ar-st.exp: tbreakpoint line 1281
+PASS: gdb.base/call-ar-st.exp: print compute_with_small_structs(20)
+PASS: gdb.base/call-ar-st.exp: tbreakpoint line 1286
+PASS: gdb.base/call-ar-st.exp: continue to 1286
+PASS: gdb.base/call-ar-st.exp: tbreak in print_long_arg_list after stepping into memcpy
+PASS: gdb.base/call-ar-st.exp: step into print_long_arg_list
+PASS: gdb.base/call-ar-st.exp: tbreakpoint line 1300
+PASS: gdb.base/call-ar-st.exp: step into init_bit_flags_combo
+PASS: gdb.base/call-ar-st.exp: tbreakpoint line 1305
+PASS: gdb.base/call-ar-st.exp: continue to 1305
+PASS: gdb.base/call-ar-st.exp: tbreakpoint line 1311
+PASS: gdb.base/call-ar-st.exp: continue to 1311
+Running ./gdb.base/callexit.exp ...
+PASS: gdb.base/callexit.exp: inferior function call terminated program
+Running ./gdb.base/callfuncs.exp ...
+PASS: gdb.base/callfuncs.exp: set print sevenbit-strings
+PASS: gdb.base/callfuncs.exp: set print address off
+PASS: gdb.base/callfuncs.exp: set width 0
+PASS: gdb.base/callfuncs.exp: set language c
+PASS: gdb.base/callfuncs.exp: next to t_double_values
+PASS: gdb.base/callfuncs.exp: next to t_structs_c
+PASS: gdb.base/callfuncs.exp: retrieve original register contents
+PASS: gdb.base/callfuncs.exp: set unwindonsignal on
+PASS: gdb.base/callfuncs.exp: p t_char_values(0,0)
+PASS: gdb.base/callfuncs.exp: p t_char_values('a','b')
+PASS: gdb.base/callfuncs.exp: p t_char_values(char_val1,char_val2)
+PASS: gdb.base/callfuncs.exp: p t_char_values('a',char_val2)
+PASS: gdb.base/callfuncs.exp: p t_char_values(char_val1,'b')
+PASS: gdb.base/callfuncs.exp: p t_short_values(0,0)
+PASS: gdb.base/callfuncs.exp: p t_short_values(10,-23)
+PASS: gdb.base/callfuncs.exp: p t_short_values(short_val1,short_val2)
+PASS: gdb.base/callfuncs.exp: p t_short_values(10,short_val2)
+PASS: gdb.base/callfuncs.exp: p t_short_values(short_val1,-23)
+PASS: gdb.base/callfuncs.exp: p t_int_values(0,0)
+PASS: gdb.base/callfuncs.exp: p t_int_values(87,-26)
+PASS: gdb.base/callfuncs.exp: p t_int_values(int_val1,int_val2)
+PASS: gdb.base/callfuncs.exp: p t_int_values(87,int_val2)
+PASS: gdb.base/callfuncs.exp: p t_int_values(int_val1,-26)
+PASS: gdb.base/callfuncs.exp: p t_long_values(0,0)
+PASS: gdb.base/callfuncs.exp: p t_long_values(789,-321)
+PASS: gdb.base/callfuncs.exp: p t_long_values(long_val1,long_val2)
+PASS: gdb.base/callfuncs.exp: p t_long_values(789,long_val2)
+PASS: gdb.base/callfuncs.exp: p t_long_values(long_val1,-321)
+PASS: gdb.base/callfuncs.exp: p t_float_values(0.0,0.0)
+PASS: gdb.base/callfuncs.exp: p t_float_values(3.14159,-2.3765)
+PASS: gdb.base/callfuncs.exp: p t_float_values(float_val1,float_val2)
+PASS: gdb.base/callfuncs.exp: p t_float_values(3.14159,float_val2)
+PASS: gdb.base/callfuncs.exp: p t_float_values(float_val1,-2.3765)
+PASS: gdb.base/callfuncs.exp: p t_float_values2(0.0,0.0)
+PASS: gdb.base/callfuncs.exp: p t_float_values2(3.14159,float_val2)
+PASS: gdb.base/callfuncs.exp: Call function with many float arguments.
+PASS: gdb.base/callfuncs.exp: p t_small_values(1,2,3,4,5,6,7,8,9,10)
+PASS: gdb.base/callfuncs.exp: p t_double_values(0.0,0.0)
+PASS: gdb.base/callfuncs.exp: p t_double_values(45.654,-67.66)
+PASS: gdb.base/callfuncs.exp: p t_double_values(double_val1,double_val2)
+PASS: gdb.base/callfuncs.exp: p t_double_values(45.654,double_val2)
+PASS: gdb.base/callfuncs.exp: p t_double_values(double_val1,-67.66)
+PASS: gdb.base/callfuncs.exp: Call function with many double arguments.
+PASS: gdb.base/callfuncs.exp: p t_double_int(99.0, 1)
+PASS: gdb.base/callfuncs.exp: p t_double_int(99.0, 99)
+PASS: gdb.base/callfuncs.exp: p t_int_double(99, 1.0)
+PASS: gdb.base/callfuncs.exp: p t_int_double(99, 99.0)
+PASS: gdb.base/callfuncs.exp: p t_float_complex_values(fc1, fc2)
+PASS: gdb.base/callfuncs.exp: p t_float_complex_values(fc3, fc4)
+PASS: gdb.base/callfuncs.exp: p t_float_complex_many_args(fc1, fc2, fc3, fc4, fc1, fc2, fc3, fc4, fc1, fc2, fc3, fc4, fc1, fc2, fc3, fc4)
+PASS: gdb.base/callfuncs.exp: p t_float_complex_many_args(fc1, fc1, fc1, fc1, fc1, fc1, fc1, fc1, fc1, fc1, fc1, fc1, fc1, fc1, fc1, fc1)
+PASS: gdb.base/callfuncs.exp: p t_double_complex_values(dc1, dc2)
+PASS: gdb.base/callfuncs.exp: p t_double_complex_values(dc3, dc4)
+PASS: gdb.base/callfuncs.exp: p t_double_complex_many_args(dc1, dc2, dc3, dc4, dc1, dc2, dc3, dc4, dc1, dc2, dc3, dc4, dc1, dc2, dc3, dc4)
+PASS: gdb.base/callfuncs.exp: p t_double_complex_many_args(dc1, dc1, dc1, dc1, dc1, dc1, dc1, dc1, dc1, dc1, dc1, dc1, dc1, dc1, dc1, dc1)
+PASS: gdb.base/callfuncs.exp: p t_long_double_complex_values(ldc1, ldc2)
+PASS: gdb.base/callfuncs.exp: p t_long_double_complex_values(ldc3, ldc4)
+PASS: gdb.base/callfuncs.exp: p t_long_double_complex_many_args(ldc1, ldc2, ldc3, ldc4, ldc1, ldc2, ldc3, ldc4, ldc1, ldc2, ldc3, ldc4, ldc1, ldc2, ldc3, ldc4)
+PASS: gdb.base/callfuncs.exp: p t_long_double_complex_many_args(ldc1, ldc1, ldc1, ldc1, ldc1, ldc1, ldc1,ldc1, ldc1, ldc1, ldc1, ldc1, ldc1, ldc1, ldc1, ldc1)
+PASS: gdb.base/callfuncs.exp: p t_string_values(string_val2,string_val1)
+PASS: gdb.base/callfuncs.exp: p t_string_values(string_val1,string_val2)
+PASS: gdb.base/callfuncs.exp: p t_string_values("string 1","string 2")
+PASS: gdb.base/callfuncs.exp: p t_string_values("string 1",string_val2)
+PASS: gdb.base/callfuncs.exp: p t_string_values(string_val1,"string 2")
+PASS: gdb.base/callfuncs.exp: p t_char_array_values(char_array_val2,char_array_val1)
+PASS: gdb.base/callfuncs.exp: p t_char_array_values(char_array_val1,char_array_val2)
+PASS: gdb.base/callfuncs.exp: p t_char_array_values("carray 1","carray 2")
+PASS: gdb.base/callfuncs.exp: p t_char_array_values("carray 1",char_array_val2)
+PASS: gdb.base/callfuncs.exp: p t_char_array_values(char_array_val1,"carray 2")
+PASS: gdb.base/callfuncs.exp: p doubleit(4)
+PASS: gdb.base/callfuncs.exp: p add(4,5)
+PASS: gdb.base/callfuncs.exp: p t_func_values(func_val2,func_val1)
+PASS: gdb.base/callfuncs.exp: p t_func_values(func_val1,func_val2)
+PASS: gdb.base/callfuncs.exp: p function_struct.func(5)
+PASS: gdb.base/callfuncs.exp: p function_struct_ptr->func(10)
+PASS: gdb.base/callfuncs.exp: p t_func_values(add,func_val2)
+PASS: gdb.base/callfuncs.exp: p t_func_values(func_val1,doubleit)
+PASS: gdb.base/callfuncs.exp: p t_call_add(add,3,4)
+PASS: gdb.base/callfuncs.exp: p t_call_add(func_val1,3,4)
+PASS: gdb.base/callfuncs.exp: p t_enum_value1(enumval1)
+PASS: gdb.base/callfuncs.exp: p t_enum_value1(enum_val1)
+PASS: gdb.base/callfuncs.exp: p t_enum_value1(enum_val2)
+PASS: gdb.base/callfuncs.exp: p t_enum_value2(enumval2)
+PASS: gdb.base/callfuncs.exp: p t_enum_value2(enum_val2)
+PASS: gdb.base/callfuncs.exp: p t_enum_value2(enum_val1)
+PASS: gdb.base/callfuncs.exp: p sum_args(1,{2})
+PASS: gdb.base/callfuncs.exp: p sum_args(2,{2,3})
+PASS: gdb.base/callfuncs.exp: p sum_args(3,{2,3,4})
+PASS: gdb.base/callfuncs.exp: p sum_args(4,{2,3,4,5})
+PASS: gdb.base/callfuncs.exp: p sum10 (1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
+PASS: gdb.base/callfuncs.exp: p cmp10 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9)
+PASS: gdb.base/callfuncs.exp: call inferior func with struct - returns char
+PASS: gdb.base/callfuncs.exp: call inferior func with struct - returns short
+PASS: gdb.base/callfuncs.exp: call inferior func with struct - returns int
+PASS: gdb.base/callfuncs.exp: call inferior func with struct - returns long
+PASS: gdb.base/callfuncs.exp: call inferior func with struct - returns float
+PASS: gdb.base/callfuncs.exp: call inferior func with struct - returns double
+PASS: gdb.base/callfuncs.exp: call inferior func with struct - returns float _Complex
+PASS: gdb.base/callfuncs.exp: call inferior func with struct - returns double _Complex
+PASS: gdb.base/callfuncs.exp: call inferior func with struct - returns long double _Complex
+PASS: gdb.base/callfuncs.exp: call inferior func with struct - returns char *
+PASS: gdb.base/callfuncs.exp: set unwindonsignal off
+PASS: gdb.base/callfuncs.exp: register contents after gdb function calls
+PASS: gdb.base/callfuncs.exp: gdb function calls preserve register contents
+PASS: gdb.base/callfuncs.exp: set language c
+PASS: gdb.base/callfuncs.exp: next to t_double_values
+PASS: gdb.base/callfuncs.exp: next to t_structs_c
+PASS: gdb.base/callfuncs.exp: retrieve original register contents
+PASS: gdb.base/callfuncs.exp: stop at breakpoint in call dummy function
+PASS: gdb.base/callfuncs.exp: continue from call dummy breakpoint
+PASS: gdb.base/callfuncs.exp: bt after continuing from call dummy breakpoint
+PASS: gdb.base/callfuncs.exp: register contents after stop in call dummy
+PASS: gdb.base/callfuncs.exp: continue after stop in call dummy preserves register contents
+PASS: gdb.base/callfuncs.exp: set language c
+PASS: gdb.base/callfuncs.exp: next to t_double_values
+PASS: gdb.base/callfuncs.exp: next to t_structs_c
+PASS: gdb.base/callfuncs.exp: retrieve original register contents
+PASS: gdb.base/callfuncs.exp: call function causing a breakpoint then do a finish
+PASS: gdb.base/callfuncs.exp: finish from call dummy breakpoint returns correct value
+PASS: gdb.base/callfuncs.exp: bt after finishing from call dummy breakpoint
+PASS: gdb.base/callfuncs.exp: register contents after finish in call dummy
+PASS: gdb.base/callfuncs.exp: finish after stop in call dummy preserves register contents
+PASS: gdb.base/callfuncs.exp: set language c
+PASS: gdb.base/callfuncs.exp: next to t_double_values
+PASS: gdb.base/callfuncs.exp: next to t_structs_c
+PASS: gdb.base/callfuncs.exp: retrieve original register contents
+PASS: gdb.base/callfuncs.exp: call function causing a breakpoint and then do a return
+PASS: gdb.base/callfuncs.exp: back at main after return from call dummy breakpoint
+PASS: gdb.base/callfuncs.exp: register contents after return in call dummy
+PASS: gdb.base/callfuncs.exp: return after stop in call dummy preserves register contents
+PASS: gdb.base/callfuncs.exp: set language c
+PASS: gdb.base/callfuncs.exp: next to t_double_values
+PASS: gdb.base/callfuncs.exp: next to t_structs_c
+PASS: gdb.base/callfuncs.exp: retrieve original register contents
+PASS: gdb.base/callfuncs.exp: stop at nested call level 1
+PASS: gdb.base/callfuncs.exp: backtrace at nested call level 1
+PASS: gdb.base/callfuncs.exp: stop at nested call level 2
+PASS: gdb.base/callfuncs.exp: backtrace at nested call level 2
+PASS: gdb.base/callfuncs.exp: stop at nested call level 3
+PASS: gdb.base/callfuncs.exp: backtrace at nested call level 3
+PASS: gdb.base/callfuncs.exp: stop at nested call level 4
+PASS: gdb.base/callfuncs.exp: backtrace at nested call level 4
+PASS: gdb.base/callfuncs.exp: Finish from nested call level 4
+PASS: gdb.base/callfuncs.exp: backtrace after finish from nested call level 4
+PASS: gdb.base/callfuncs.exp: Finish from nested call level 3
+PASS: gdb.base/callfuncs.exp: backtrace after finish from nested call level 3
+PASS: gdb.base/callfuncs.exp: Finish from nested call level 2
+PASS: gdb.base/callfuncs.exp: backtrace after finish from nested call level 2
+PASS: gdb.base/callfuncs.exp: Finish from nested call level 1
+PASS: gdb.base/callfuncs.exp: backtrace after finish from nested call level 1
+PASS: gdb.base/callfuncs.exp: register contents after nested call dummies
+PASS: gdb.base/callfuncs.exp: nested call dummies preserve register contents
+PASS: gdb.base/callfuncs.exp: set $old_sp = $sp
+PASS: gdb.base/callfuncs.exp: set $sp = 0
+PASS: gdb.base/callfuncs.exp: sp == 0: call doubleit (1)
+PASS: gdb.base/callfuncs.exp: set $sp = -1
+PASS: gdb.base/callfuncs.exp: sp == -1: call doubleit (1)
+PASS: gdb.base/callfuncs.exp: set $sp = $old_sp
+PASS: gdb.base/callfuncs.exp: print callfunc (Lcallfunc, 5)
+PASS: gdb.base/callfuncs.exp: print *((int *(*) (void)) voidfunc)()
+Running ./gdb.base/call-rt-st.exp ...
+PASS: gdb.base/call-rt-st.exp: set print sevenbit-strings
+PASS: gdb.base/call-rt-st.exp: set print address off
+PASS: gdb.base/call-rt-st.exp: set width 0
+PASS: gdb.base/call-rt-st.exp: breakpoint loop_count
+PASS: gdb.base/call-rt-st.exp: continue to loop_count
+PASS: gdb.base/call-rt-st.exp: finish out from loop_count (line 777)
+Running ./gdb.base/call-sc.exp ...
+PASS: gdb.base/call-sc.exp: set print sevenbit-strings
+PASS: gdb.base/call-sc.exp: set print address off
+PASS: gdb.base/call-sc.exp: set width 0
+PASS: gdb.base/call-sc.exp: ptype; call-sc-tc (char)
+PASS: gdb.base/call-sc.exp: ptype foo; call-sc-tc char
+PASS: gdb.base/call-sc.exp: p/c fun(); call call-sc-tc
+PASS: gdb.base/call-sc.exp: call Fun(foo); call call-sc-tc
+PASS: gdb.base/call-sc.exp: p/c L; call call-sc-tc
+PASS: gdb.base/call-sc.exp: advance to fun for return; return call-sc-tc
+PASS: gdb.base/call-sc.exp: zed L for return; return call-sc-tc
+PASS: gdb.base/call-sc.exp: return foo; return call-sc-tc
+PASS: gdb.base/call-sc.exp: return foo; synchronize pc to main()
+PASS: gdb.base/call-sc.exp: value foo returned; return call-sc-tc
+PASS: gdb.base/call-sc.exp: advance to fun for finish; return call-sc-tc
+PASS: gdb.base/call-sc.exp: zed L for finish; return call-sc-tc
+PASS: gdb.base/call-sc.exp: finish foo; return call-sc-tc
+PASS: gdb.base/call-sc.exp: value foo finished; return call-sc-tc
+PASS: gdb.base/call-sc.exp: return and finish use same convention; return call-sc-tc
+PASS: gdb.base/call-sc.exp: set print sevenbit-strings
+PASS: gdb.base/call-sc.exp: set print address off
+PASS: gdb.base/call-sc.exp: set width 0
+PASS: gdb.base/call-sc.exp: ptype; call-sc-ts (short int)
+PASS: gdb.base/call-sc.exp: ptype foo; call-sc-ts short int
+PASS: gdb.base/call-sc.exp: p/c fun(); call call-sc-ts
+PASS: gdb.base/call-sc.exp: call Fun(foo); call call-sc-ts
+PASS: gdb.base/call-sc.exp: p/c L; call call-sc-ts
+PASS: gdb.base/call-sc.exp: advance to fun for return; return call-sc-ts
+PASS: gdb.base/call-sc.exp: zed L for return; return call-sc-ts
+PASS: gdb.base/call-sc.exp: return foo; return call-sc-ts
+PASS: gdb.base/call-sc.exp: return foo; synchronize pc to main()
+PASS: gdb.base/call-sc.exp: value foo returned; return call-sc-ts
+PASS: gdb.base/call-sc.exp: advance to fun for finish; return call-sc-ts
+PASS: gdb.base/call-sc.exp: zed L for finish; return call-sc-ts
+PASS: gdb.base/call-sc.exp: finish foo; return call-sc-ts
+PASS: gdb.base/call-sc.exp: value foo finished; return call-sc-ts
+PASS: gdb.base/call-sc.exp: return and finish use same convention; return call-sc-ts
+PASS: gdb.base/call-sc.exp: set print sevenbit-strings
+PASS: gdb.base/call-sc.exp: set print address off
+PASS: gdb.base/call-sc.exp: set width 0
+PASS: gdb.base/call-sc.exp: ptype; call-sc-ti (int)
+PASS: gdb.base/call-sc.exp: ptype foo; call-sc-ti int
+PASS: gdb.base/call-sc.exp: p/c fun(); call call-sc-ti
+PASS: gdb.base/call-sc.exp: call Fun(foo); call call-sc-ti
+PASS: gdb.base/call-sc.exp: p/c L; call call-sc-ti
+PASS: gdb.base/call-sc.exp: advance to fun for return; return call-sc-ti
+PASS: gdb.base/call-sc.exp: zed L for return; return call-sc-ti
+PASS: gdb.base/call-sc.exp: return foo; return call-sc-ti
+PASS: gdb.base/call-sc.exp: return foo; synchronize pc to main()
+PASS: gdb.base/call-sc.exp: value foo returned; return call-sc-ti
+PASS: gdb.base/call-sc.exp: advance to fun for finish; return call-sc-ti
+PASS: gdb.base/call-sc.exp: zed L for finish; return call-sc-ti
+PASS: gdb.base/call-sc.exp: finish foo; return call-sc-ti
+PASS: gdb.base/call-sc.exp: value foo finished; return call-sc-ti
+PASS: gdb.base/call-sc.exp: return and finish use same convention; return call-sc-ti
+PASS: gdb.base/call-sc.exp: set print sevenbit-strings
+PASS: gdb.base/call-sc.exp: set print address off
+PASS: gdb.base/call-sc.exp: set width 0
+PASS: gdb.base/call-sc.exp: ptype; call-sc-tl (long int)
+PASS: gdb.base/call-sc.exp: ptype foo; call-sc-tl long int
+PASS: gdb.base/call-sc.exp: p/c fun(); call call-sc-tl
+PASS: gdb.base/call-sc.exp: call Fun(foo); call call-sc-tl
+PASS: gdb.base/call-sc.exp: p/c L; call call-sc-tl
+PASS: gdb.base/call-sc.exp: advance to fun for return; return call-sc-tl
+PASS: gdb.base/call-sc.exp: zed L for return; return call-sc-tl
+PASS: gdb.base/call-sc.exp: return foo; return call-sc-tl
+PASS: gdb.base/call-sc.exp: return foo; synchronize pc to main()
+PASS: gdb.base/call-sc.exp: value foo returned; return call-sc-tl
+PASS: gdb.base/call-sc.exp: advance to fun for finish; return call-sc-tl
+PASS: gdb.base/call-sc.exp: zed L for finish; return call-sc-tl
+PASS: gdb.base/call-sc.exp: finish foo; return call-sc-tl
+PASS: gdb.base/call-sc.exp: value foo finished; return call-sc-tl
+PASS: gdb.base/call-sc.exp: return and finish use same convention; return call-sc-tl
+PASS: gdb.base/call-sc.exp: set print sevenbit-strings
+PASS: gdb.base/call-sc.exp: set print address off
+PASS: gdb.base/call-sc.exp: set width 0
+PASS: gdb.base/call-sc.exp: ptype; call-sc-tll (long long int)
+PASS: gdb.base/call-sc.exp: ptype foo; call-sc-tll long long int
+PASS: gdb.base/call-sc.exp: p/c fun(); call call-sc-tll
+PASS: gdb.base/call-sc.exp: call Fun(foo); call call-sc-tll
+PASS: gdb.base/call-sc.exp: p/c L; call call-sc-tll
+PASS: gdb.base/call-sc.exp: advance to fun for return; return call-sc-tll
+PASS: gdb.base/call-sc.exp: zed L for return; return call-sc-tll
+PASS: gdb.base/call-sc.exp: return foo; return call-sc-tll
+PASS: gdb.base/call-sc.exp: return foo; synchronize pc to main()
+PASS: gdb.base/call-sc.exp: value foo returned; return call-sc-tll
+PASS: gdb.base/call-sc.exp: advance to fun for finish; return call-sc-tll
+PASS: gdb.base/call-sc.exp: zed L for finish; return call-sc-tll
+PASS: gdb.base/call-sc.exp: finish foo; return call-sc-tll
+PASS: gdb.base/call-sc.exp: value foo finished; return call-sc-tll
+PASS: gdb.base/call-sc.exp: return and finish use same convention; return call-sc-tll
+PASS: gdb.base/call-sc.exp: set print sevenbit-strings
+PASS: gdb.base/call-sc.exp: set print address off
+PASS: gdb.base/call-sc.exp: set width 0
+PASS: gdb.base/call-sc.exp: ptype; call-sc-tf (float)
+PASS: gdb.base/call-sc.exp: ptype foo; call-sc-tf float
+PASS: gdb.base/call-sc.exp: p/c fun(); call call-sc-tf
+PASS: gdb.base/call-sc.exp: call Fun(foo); call call-sc-tf
+PASS: gdb.base/call-sc.exp: p/c L; call call-sc-tf
+PASS: gdb.base/call-sc.exp: advance to fun for return; return call-sc-tf
+PASS: gdb.base/call-sc.exp: zed L for return; return call-sc-tf
+PASS: gdb.base/call-sc.exp: return foo; return call-sc-tf
+PASS: gdb.base/call-sc.exp: return foo; synchronize pc to main()
+PASS: gdb.base/call-sc.exp: value foo returned; return call-sc-tf
+PASS: gdb.base/call-sc.exp: advance to fun for finish; return call-sc-tf
+PASS: gdb.base/call-sc.exp: zed L for finish; return call-sc-tf
+PASS: gdb.base/call-sc.exp: finish foo; return call-sc-tf
+PASS: gdb.base/call-sc.exp: value foo finished; return call-sc-tf
+PASS: gdb.base/call-sc.exp: return and finish use same convention; return call-sc-tf
+PASS: gdb.base/call-sc.exp: set print sevenbit-strings
+PASS: gdb.base/call-sc.exp: set print address off
+PASS: gdb.base/call-sc.exp: set width 0
+PASS: gdb.base/call-sc.exp: ptype; call-sc-td (double)
+PASS: gdb.base/call-sc.exp: ptype foo; call-sc-td double
+PASS: gdb.base/call-sc.exp: p/c fun(); call call-sc-td
+PASS: gdb.base/call-sc.exp: call Fun(foo); call call-sc-td
+PASS: gdb.base/call-sc.exp: p/c L; call call-sc-td
+PASS: gdb.base/call-sc.exp: advance to fun for return; return call-sc-td
+PASS: gdb.base/call-sc.exp: zed L for return; return call-sc-td
+PASS: gdb.base/call-sc.exp: return foo; return call-sc-td
+PASS: gdb.base/call-sc.exp: return foo; synchronize pc to main()
+PASS: gdb.base/call-sc.exp: value foo returned; return call-sc-td
+PASS: gdb.base/call-sc.exp: advance to fun for finish; return call-sc-td
+PASS: gdb.base/call-sc.exp: zed L for finish; return call-sc-td
+PASS: gdb.base/call-sc.exp: finish foo; return call-sc-td
+PASS: gdb.base/call-sc.exp: value foo finished; return call-sc-td
+PASS: gdb.base/call-sc.exp: return and finish use same convention; return call-sc-td
+PASS: gdb.base/call-sc.exp: set print sevenbit-strings
+PASS: gdb.base/call-sc.exp: set print address off
+PASS: gdb.base/call-sc.exp: set width 0
+PASS: gdb.base/call-sc.exp: ptype; call-sc-tld (long double)
+PASS: gdb.base/call-sc.exp: ptype foo; call-sc-tld long double
+PASS: gdb.base/call-sc.exp: p/c fun(); call call-sc-tld
+PASS: gdb.base/call-sc.exp: call Fun(foo); call call-sc-tld
+PASS: gdb.base/call-sc.exp: p/c L; call call-sc-tld
+PASS: gdb.base/call-sc.exp: advance to fun for return; return call-sc-tld
+PASS: gdb.base/call-sc.exp: zed L for return; return call-sc-tld
+PASS: gdb.base/call-sc.exp: return foo; return call-sc-tld
+PASS: gdb.base/call-sc.exp: return foo; synchronize pc to main()
+PASS: gdb.base/call-sc.exp: value foo returned; return call-sc-tld
+PASS: gdb.base/call-sc.exp: advance to fun for finish; return call-sc-tld
+PASS: gdb.base/call-sc.exp: zed L for finish; return call-sc-tld
+PASS: gdb.base/call-sc.exp: finish foo; return call-sc-tld
+PASS: gdb.base/call-sc.exp: value foo finished; return call-sc-tld
+PASS: gdb.base/call-sc.exp: return and finish use same convention; return call-sc-tld
+PASS: gdb.base/call-sc.exp: set print sevenbit-strings
+PASS: gdb.base/call-sc.exp: set print address off
+PASS: gdb.base/call-sc.exp: set width 0
+PASS: gdb.base/call-sc.exp: ptype; call-sc-te (enum {e = 49})
+PASS: gdb.base/call-sc.exp: ptype foo; call-sc-te enum {e = 49}
+PASS: gdb.base/call-sc.exp: p/c fun(); call call-sc-te
+PASS: gdb.base/call-sc.exp: call Fun(foo); call call-sc-te
+PASS: gdb.base/call-sc.exp: p/c L; call call-sc-te
+PASS: gdb.base/call-sc.exp: advance to fun for return; return call-sc-te
+PASS: gdb.base/call-sc.exp: zed L for return; return call-sc-te
+PASS: gdb.base/call-sc.exp: return foo; return call-sc-te
+PASS: gdb.base/call-sc.exp: return foo; synchronize pc to main()
+PASS: gdb.base/call-sc.exp: value foo returned; return call-sc-te
+PASS: gdb.base/call-sc.exp: advance to fun for finish; return call-sc-te
+PASS: gdb.base/call-sc.exp: zed L for finish; return call-sc-te
+PASS: gdb.base/call-sc.exp: finish foo; return call-sc-te
+PASS: gdb.base/call-sc.exp: value foo finished; return call-sc-te
+PASS: gdb.base/call-sc.exp: return and finish use same convention; return call-sc-te
+Running ./gdb.base/call-signal-resume.exp ...
+Running ./gdb.base/call-strs.exp ...
+PASS: gdb.base/call-strs.exp: set print sevenbit-strings
+PASS: gdb.base/call-strs.exp: set print address off
+PASS: gdb.base/call-strs.exp: set print symbol off
+PASS: gdb.base/call-strs.exp: set width 0
+PASS: gdb.base/call-strs.exp: step after assignment to s
+PASS: gdb.base/call-strs.exp: next over strcpy
+PASS: gdb.base/call-strs.exp: print buf
+PASS: gdb.base/call-strs.exp: print s
+Running ./gdb.base/catch-load.exp ...
+PASS: gdb.base/catch-load.exp: plain load: set var libname = "catch-load-so.so"
+PASS: gdb.base/catch-load.exp: plain load: set stop-on-solib-events 0
+PASS: gdb.base/catch-load.exp: plain load: catch load
+PASS: gdb.base/catch-load.exp: plain load: continue
+PASS: gdb.base/catch-load.exp: plain load with stop-on-solib-events: set var libname = "catch-load-so.so"
+PASS: gdb.base/catch-load.exp: plain load with stop-on-solib-events: set stop-on-solib-events 1
+PASS: gdb.base/catch-load.exp: plain load with stop-on-solib-events: catch load
+PASS: gdb.base/catch-load.exp: plain load with stop-on-solib-events: continue
+PASS: gdb.base/catch-load.exp: rx load: set var libname = "catch-load-so.so"
+PASS: gdb.base/catch-load.exp: rx load: set stop-on-solib-events 0
+PASS: gdb.base/catch-load.exp: rx load: catch load catch-load-so
+PASS: gdb.base/catch-load.exp: rx load: continue
+PASS: gdb.base/catch-load.exp: rx load with stop-on-solib-events: set var libname = "catch-load-so.so"
+PASS: gdb.base/catch-load.exp: rx load with stop-on-solib-events: set stop-on-solib-events 1
+PASS: gdb.base/catch-load.exp: rx load with stop-on-solib-events: catch load catch-load-so
+PASS: gdb.base/catch-load.exp: rx load with stop-on-solib-events: continue
+PASS: gdb.base/catch-load.exp: non-matching load: set var libname = "catch-load-so.so"
+PASS: gdb.base/catch-load.exp: non-matching load: set stop-on-solib-events 0
+PASS: gdb.base/catch-load.exp: non-matching load: catch load zardoz
+PASS: gdb.base/catch-load.exp: non-matching load: continue
+PASS: gdb.base/catch-load.exp: non-matching load with stop-on-solib-events: set var libname = "catch-load-so.so"
+PASS: gdb.base/catch-load.exp: non-matching load with stop-on-solib-events: set stop-on-solib-events 1
+PASS: gdb.base/catch-load.exp: non-matching load with stop-on-solib-events: catch load zardoz
+PASS: gdb.base/catch-load.exp: non-matching load with stop-on-solib-events: continue
+PASS: gdb.base/catch-load.exp: plain unload: set var libname = "catch-load-so.so"
+PASS: gdb.base/catch-load.exp: plain unload: set stop-on-solib-events 0
+PASS: gdb.base/catch-load.exp: plain unload: catch unload
+PASS: gdb.base/catch-load.exp: plain unload: continue
+PASS: gdb.base/catch-load.exp: plain unload with stop-on-solib-events: set var libname = "catch-load-so.so"
+PASS: gdb.base/catch-load.exp: plain unload with stop-on-solib-events: set stop-on-solib-events 1
+PASS: gdb.base/catch-load.exp: plain unload with stop-on-solib-events: catch unload
+PASS: gdb.base/catch-load.exp: plain unload with stop-on-solib-events: continue
+PASS: gdb.base/catch-load.exp: rx unload: set var libname = "catch-load-so.so"
+PASS: gdb.base/catch-load.exp: rx unload: set stop-on-solib-events 0
+PASS: gdb.base/catch-load.exp: rx unload: catch unload catch-load-so
+PASS: gdb.base/catch-load.exp: rx unload: continue
+PASS: gdb.base/catch-load.exp: rx unload with stop-on-solib-events: set var libname = "catch-load-so.so"
+PASS: gdb.base/catch-load.exp: rx unload with stop-on-solib-events: set stop-on-solib-events 1
+PASS: gdb.base/catch-load.exp: rx unload with stop-on-solib-events: catch unload catch-load-so
+PASS: gdb.base/catch-load.exp: rx unload with stop-on-solib-events: continue
+PASS: gdb.base/catch-load.exp: non-matching unload: set var libname = "catch-load-so.so"
+PASS: gdb.base/catch-load.exp: non-matching unload: set stop-on-solib-events 0
+PASS: gdb.base/catch-load.exp: non-matching unload: catch unload zardoz
+PASS: gdb.base/catch-load.exp: non-matching unload: continue
+PASS: gdb.base/catch-load.exp: non-matching unload with stop-on-solib-events: set var libname = "catch-load-so.so"
+PASS: gdb.base/catch-load.exp: non-matching unload with stop-on-solib-events: set stop-on-solib-events 1
+PASS: gdb.base/catch-load.exp: non-matching unload with stop-on-solib-events: catch unload zardoz
+PASS: gdb.base/catch-load.exp: non-matching unload with stop-on-solib-events: continue
+Running ./gdb.base/catch-signal.exp ...
+PASS: gdb.base/catch-signal.exp: SIGHUP: continue to breakpoint: first HUP
+PASS: gdb.base/catch-signal.exp: SIGHUP: handle SIGHUP nostop noprint pass
+PASS: gdb.base/catch-signal.exp: SIGHUP: catch signal
+PASS: gdb.base/catch-signal.exp: SIGHUP: continue
+PASS: gdb.base/catch-signal.exp: SIGHUP: continue to breakpoint: handle marker
+PASS: gdb.base/catch-signal.exp: SIGHUP: continue to breakpoint: second HUP
+PASS: gdb.base/catch-signal.exp: SIGHUP: catch signal SIGHUP
+PASS: gdb.base/catch-signal.exp: SIGHUP: continue
+PASS: gdb.base/catch-signal.exp: SIGHUP: continue to breakpoint: third HUP
+PASS: gdb.base/catch-signal.exp: SIGHUP: handle SIGUSR1 nostop noprint pass
+PASS: gdb.base/catch-signal.exp: SIGHUP: catch signal SIGUSR1
+PASS: gdb.base/catch-signal.exp: SIGHUP: handle SIGHUP nostop noprint nopass
+PASS: gdb.base/catch-signal.exp: SIGHUP: continue to breakpoint: fourth HUP
+PASS: gdb.base/catch-signal.exp: 1: continue to breakpoint: first HUP
+PASS: gdb.base/catch-signal.exp: 1: handle SIGHUP nostop noprint pass
+PASS: gdb.base/catch-signal.exp: 1: catch signal
+PASS: gdb.base/catch-signal.exp: 1: continue
+PASS: gdb.base/catch-signal.exp: 1: continue to breakpoint: handle marker
+PASS: gdb.base/catch-signal.exp: 1: continue to breakpoint: second HUP
+PASS: gdb.base/catch-signal.exp: 1: catch signal 1
+PASS: gdb.base/catch-signal.exp: 1: continue
+PASS: gdb.base/catch-signal.exp: 1: continue to breakpoint: third HUP
+PASS: gdb.base/catch-signal.exp: 1: handle SIGUSR1 nostop noprint pass
+PASS: gdb.base/catch-signal.exp: 1: catch signal SIGUSR1
+PASS: gdb.base/catch-signal.exp: 1: handle SIGHUP nostop noprint nopass
+PASS: gdb.base/catch-signal.exp: 1: continue to breakpoint: fourth HUP
+PASS: gdb.base/catch-signal.exp: SIGHUP SIGUSR2: continue to breakpoint: first HUP
+PASS: gdb.base/catch-signal.exp: SIGHUP SIGUSR2: handle SIGHUP nostop noprint pass
+PASS: gdb.base/catch-signal.exp: SIGHUP SIGUSR2: catch signal
+PASS: gdb.base/catch-signal.exp: SIGHUP SIGUSR2: continue
+PASS: gdb.base/catch-signal.exp: SIGHUP SIGUSR2: continue to breakpoint: handle marker
+PASS: gdb.base/catch-signal.exp: SIGHUP SIGUSR2: continue to breakpoint: second HUP
+PASS: gdb.base/catch-signal.exp: SIGHUP SIGUSR2: catch signal SIGHUP SIGUSR2
+PASS: gdb.base/catch-signal.exp: SIGHUP SIGUSR2: continue
+PASS: gdb.base/catch-signal.exp: SIGHUP SIGUSR2: continue to breakpoint: third HUP
+PASS: gdb.base/catch-signal.exp: SIGHUP SIGUSR2: handle SIGUSR1 nostop noprint pass
+PASS: gdb.base/catch-signal.exp: SIGHUP SIGUSR2: catch signal SIGUSR1
+PASS: gdb.base/catch-signal.exp: SIGHUP SIGUSR2: handle SIGHUP nostop noprint nopass
+PASS: gdb.base/catch-signal.exp: SIGHUP SIGUSR2: continue to breakpoint: fourth HUP
+PASS: gdb.base/catch-signal.exp: catch signal SIGZARDOZ
+PASS: gdb.base/catch-signal.exp: catch signal all
+PASS: gdb.base/catch-signal.exp: catch signal all SIGHUP
+PASS: gdb.base/catch-signal.exp: catch signal SIGHUP all
+PASS: gdb.base/catch-signal.exp: set catchpoint '' for printing
+PASS: gdb.base/catch-signal.exp: info break for ''
+PASS: gdb.base/catch-signal.exp: save breakpoints for ''
+PASS: gdb.base/catch-signal.exp: results of save breakpoints for ''
+PASS: gdb.base/catch-signal.exp: set catchpoint 'SIGHUP' for printing
+PASS: gdb.base/catch-signal.exp: info break for 'SIGHUP'
+PASS: gdb.base/catch-signal.exp: save breakpoints for 'SIGHUP'
+PASS: gdb.base/catch-signal.exp: results of save breakpoints for 'SIGHUP'
+PASS: gdb.base/catch-signal.exp: set catchpoint 'SIGHUP SIGUSR2' for printing
+PASS: gdb.base/catch-signal.exp: info break for 'SIGHUP SIGUSR2'
+PASS: gdb.base/catch-signal.exp: save breakpoints for 'SIGHUP SIGUSR2'
+PASS: gdb.base/catch-signal.exp: results of save breakpoints for 'SIGHUP SIGUSR2'
+PASS: gdb.base/catch-signal.exp: set catchpoint 'all' for printing
+PASS: gdb.base/catch-signal.exp: info break for 'all'
+PASS: gdb.base/catch-signal.exp: save breakpoints for 'all'
+PASS: gdb.base/catch-signal.exp: results of save breakpoints for 'all'
+Running ./gdb.base/catch-syscall.exp ...
+Running ./gdb.base/charset.exp ...
+PASS: gdb.base/charset.exp: show charset
+PASS: gdb.base/charset.exp: show target-charset
+PASS: gdb.base/charset.exp: check `show target-charset' against `show charset'
+PASS: gdb.base/charset.exp: show host-charset
+PASS: gdb.base/charset.exp: check `show host-charset' against `show charset'
+PASS: gdb.base/charset.exp: try malformed `set charset'
+PASS: gdb.base/charset.exp: try `set host-charset' with invalid charset
+PASS: gdb.base/charset.exp: try `set target-charset' with invalid charset
+PASS: gdb.base/charset.exp: capture valid host charsets
+PASS: gdb.base/charset.exp: capture valid target charsets
+PASS: gdb.base/charset.exp: try `set host-charset ASCII'
+PASS: gdb.base/charset.exp: parse `show charset' after `set host-charset ASCII'
+PASS: gdb.base/charset.exp: check effect of `set host-charset ASCII'
+PASS: gdb.base/charset.exp: try `set target-charset ASCII'
+PASS: gdb.base/charset.exp: parse `show charset' after `set target-charset ASCII'
+PASS: gdb.base/charset.exp: check effect of `set target-charset ASCII'
+PASS: gdb.base/charset.exp: try `set target-charset ISO-8859-1'
+PASS: gdb.base/charset.exp: parse `show charset' after `set target-charset ISO-8859-1'
+PASS: gdb.base/charset.exp: check effect of `set target-charset ISO-8859-1'
+PASS: gdb.base/charset.exp: try `set target-charset EBCDIC-US'
+PASS: gdb.base/charset.exp: parse `show charset' after `set target-charset EBCDIC-US'
+PASS: gdb.base/charset.exp: check effect of `set target-charset EBCDIC-US'
+PASS: gdb.base/charset.exp: try `set target-charset IBM1047'
+PASS: gdb.base/charset.exp: parse `show charset' after `set target-charset IBM1047'
+PASS: gdb.base/charset.exp: check effect of `set target-charset IBM1047'
+PASS: gdb.base/charset.exp: try `set host-charset ISO-8859-1'
+PASS: gdb.base/charset.exp: parse `show charset' after `set host-charset ISO-8859-1'
+PASS: gdb.base/charset.exp: check effect of `set host-charset ISO-8859-1'
+PASS: gdb.base/charset.exp: try `set target-charset ASCII'
+PASS: gdb.base/charset.exp: parse `show charset' after `set target-charset ASCII'
+PASS: gdb.base/charset.exp: check effect of `set target-charset ASCII'
+PASS: gdb.base/charset.exp: try `set target-charset ISO-8859-1'
+PASS: gdb.base/charset.exp: parse `show charset' after `set target-charset ISO-8859-1'
+PASS: gdb.base/charset.exp: check effect of `set target-charset ISO-8859-1'
+PASS: gdb.base/charset.exp: try `set target-charset EBCDIC-US'
+PASS: gdb.base/charset.exp: parse `show charset' after `set target-charset EBCDIC-US'
+PASS: gdb.base/charset.exp: check effect of `set target-charset EBCDIC-US'
+PASS: gdb.base/charset.exp: try `set target-charset IBM1047'
+PASS: gdb.base/charset.exp: parse `show charset' after `set target-charset IBM1047'
+PASS: gdb.base/charset.exp: check effect of `set target-charset IBM1047'
+PASS: gdb.base/charset.exp: try `set host-charset EBCDIC-US'
+PASS: gdb.base/charset.exp: parse `show charset' after `set host-charset EBCDIC-US'
+PASS: gdb.base/charset.exp: check effect of `set host-charset EBCDIC-US'
+PASS: gdb.base/charset.exp: try `set target-charset ASCII'
+PASS: gdb.base/charset.exp: parse `show charset' after `set target-charset ASCII'
+PASS: gdb.base/charset.exp: check effect of `set target-charset ASCII'
+PASS: gdb.base/charset.exp: try `set target-charset ISO-8859-1'
+PASS: gdb.base/charset.exp: parse `show charset' after `set target-charset ISO-8859-1'
+PASS: gdb.base/charset.exp: check effect of `set target-charset ISO-8859-1'
+PASS: gdb.base/charset.exp: try `set target-charset EBCDIC-US'
+PASS: gdb.base/charset.exp: parse `show charset' after `set target-charset EBCDIC-US'
+PASS: gdb.base/charset.exp: check effect of `set target-charset EBCDIC-US'
+PASS: gdb.base/charset.exp: try `set target-charset IBM1047'
+PASS: gdb.base/charset.exp: parse `show charset' after `set target-charset IBM1047'
+PASS: gdb.base/charset.exp: check effect of `set target-charset IBM1047'
+PASS: gdb.base/charset.exp: try `set host-charset IBM1047'
+PASS: gdb.base/charset.exp: parse `show charset' after `set host-charset IBM1047'
+PASS: gdb.base/charset.exp: check effect of `set host-charset IBM1047'
+PASS: gdb.base/charset.exp: try `set target-charset ASCII'
+PASS: gdb.base/charset.exp: parse `show charset' after `set target-charset ASCII'
+PASS: gdb.base/charset.exp: check effect of `set target-charset ASCII'
+PASS: gdb.base/charset.exp: try `set target-charset ISO-8859-1'
+PASS: gdb.base/charset.exp: parse `show charset' after `set target-charset ISO-8859-1'
+PASS: gdb.base/charset.exp: check effect of `set target-charset ISO-8859-1'
+PASS: gdb.base/charset.exp: try `set target-charset EBCDIC-US'
+PASS: gdb.base/charset.exp: parse `show charset' after `set target-charset EBCDIC-US'
+PASS: gdb.base/charset.exp: check effect of `set target-charset EBCDIC-US'
+PASS: gdb.base/charset.exp: try `set target-charset IBM1047'
+PASS: gdb.base/charset.exp: parse `show charset' after `set target-charset IBM1047'
+PASS: gdb.base/charset.exp: check effect of `set target-charset IBM1047'
+PASS: gdb.base/charset.exp: set breakpoint after all strings have been initialized
+PASS: gdb.base/charset.exp: run until all strings have been initialized
+PASS: gdb.base/charset.exp: get integer valueof "sizeof (wchar_t)" (4)
+PASS: gdb.base/charset.exp: set host-charset ASCII
+PASS: gdb.base/charset.exp: set target-charset ASCII
+PASS: gdb.base/charset.exp: print the null character in ASCII
+PASS: gdb.base/charset.exp: print string in ASCII
+PASS: gdb.base/charset.exp: parse character literal in ASCII
+PASS: gdb.base/charset.exp: check value of parsed character literal in ASCII
+PASS: gdb.base/charset.exp: parse string literal in ASCII
+PASS: gdb.base/charset.exp: check value of parsed string literal in ASCII
+PASS: gdb.base/charset.exp: try printing '\a' in ASCII
+PASS: gdb.base/charset.exp: check value of '\a' in ASCII
+PASS: gdb.base/charset.exp: check value of "\a" in ASCII
+PASS: gdb.base/charset.exp: try printing '\b' in ASCII
+PASS: gdb.base/charset.exp: check value of '\b' in ASCII
+PASS: gdb.base/charset.exp: check value of "\b" in ASCII
+PASS: gdb.base/charset.exp: try printing '\f' in ASCII
+PASS: gdb.base/charset.exp: check value of '\f' in ASCII
+PASS: gdb.base/charset.exp: check value of "\f" in ASCII
+PASS: gdb.base/charset.exp: try printing '\n' in ASCII
+PASS: gdb.base/charset.exp: check value of '\n' in ASCII
+PASS: gdb.base/charset.exp: check value of "\n" in ASCII
+PASS: gdb.base/charset.exp: try printing '\r' in ASCII
+PASS: gdb.base/charset.exp: check value of '\r' in ASCII
+PASS: gdb.base/charset.exp: check value of "\r" in ASCII
+PASS: gdb.base/charset.exp: try printing '\t' in ASCII
+PASS: gdb.base/charset.exp: check value of '\t' in ASCII
+PASS: gdb.base/charset.exp: check value of "\t" in ASCII
+PASS: gdb.base/charset.exp: try printing '\v' in ASCII
+PASS: gdb.base/charset.exp: check value of '\v' in ASCII
+PASS: gdb.base/charset.exp: check value of "\v" in ASCII
+PASS: gdb.base/charset.exp: print escape that doesn't exist in ASCII
+PASS: gdb.base/charset.exp: check value of escape that doesn't exist in ASCII
+PASS: gdb.base/charset.exp: set target-charset ISO-8859-1
+PASS: gdb.base/charset.exp: print the null character in ISO-8859-1
+PASS: gdb.base/charset.exp: print string in ISO-8859-1
+PASS: gdb.base/charset.exp: parse character literal in ISO-8859-1
+PASS: gdb.base/charset.exp: check value of parsed character literal in ISO-8859-1
+PASS: gdb.base/charset.exp: parse string literal in ISO-8859-1
+PASS: gdb.base/charset.exp: check value of parsed string literal in ISO-8859-1
+PASS: gdb.base/charset.exp: try printing '\a' in ISO-8859-1
+PASS: gdb.base/charset.exp: check value of '\a' in ISO-8859-1
+PASS: gdb.base/charset.exp: check value of "\a" in ISO-8859-1
+PASS: gdb.base/charset.exp: try printing '\b' in ISO-8859-1
+PASS: gdb.base/charset.exp: check value of '\b' in ISO-8859-1
+PASS: gdb.base/charset.exp: check value of "\b" in ISO-8859-1
+PASS: gdb.base/charset.exp: try printing '\f' in ISO-8859-1
+PASS: gdb.base/charset.exp: check value of '\f' in ISO-8859-1
+PASS: gdb.base/charset.exp: check value of "\f" in ISO-8859-1
+PASS: gdb.base/charset.exp: try printing '\n' in ISO-8859-1
+PASS: gdb.base/charset.exp: check value of '\n' in ISO-8859-1
+PASS: gdb.base/charset.exp: check value of "\n" in ISO-8859-1
+PASS: gdb.base/charset.exp: try printing '\r' in ISO-8859-1
+PASS: gdb.base/charset.exp: check value of '\r' in ISO-8859-1
+PASS: gdb.base/charset.exp: check value of "\r" in ISO-8859-1
+PASS: gdb.base/charset.exp: try printing '\t' in ISO-8859-1
+PASS: gdb.base/charset.exp: check value of '\t' in ISO-8859-1
+PASS: gdb.base/charset.exp: check value of "\t" in ISO-8859-1
+PASS: gdb.base/charset.exp: try printing '\v' in ISO-8859-1
+PASS: gdb.base/charset.exp: check value of '\v' in ISO-8859-1
+PASS: gdb.base/charset.exp: check value of "\v" in ISO-8859-1
+PASS: gdb.base/charset.exp: print escape that doesn't exist in ISO-8859-1
+PASS: gdb.base/charset.exp: check value of escape that doesn't exist in ISO-8859-1
+PASS: gdb.base/charset.exp: set target-charset EBCDIC-US
+PASS: gdb.base/charset.exp: print the null character in EBCDIC-US
+PASS: gdb.base/charset.exp: print string in EBCDIC-US
+PASS: gdb.base/charset.exp: parse character literal in EBCDIC-US
+PASS: gdb.base/charset.exp: check value of parsed character literal in EBCDIC-US
+PASS: gdb.base/charset.exp: parse string literal in EBCDIC-US
+PASS: gdb.base/charset.exp: check value of parsed string literal in EBCDIC-US
+PASS: gdb.base/charset.exp: try printing '\a' in EBCDIC-US
+PASS: gdb.base/charset.exp: check value of '\a' in EBCDIC-US
+PASS: gdb.base/charset.exp: check value of "\a" in EBCDIC-US
+PASS: gdb.base/charset.exp: try printing '\b' in EBCDIC-US
+PASS: gdb.base/charset.exp: check value of '\b' in EBCDIC-US
+PASS: gdb.base/charset.exp: check value of "\b" in EBCDIC-US
+PASS: gdb.base/charset.exp: try printing '\f' in EBCDIC-US
+PASS: gdb.base/charset.exp: check value of '\f' in EBCDIC-US
+PASS: gdb.base/charset.exp: check value of "\f" in EBCDIC-US
+PASS: gdb.base/charset.exp: try printing '\n' in EBCDIC-US
+PASS: gdb.base/charset.exp: check value of '\n' in EBCDIC-US
+PASS: gdb.base/charset.exp: check value of "\n" in EBCDIC-US
+PASS: gdb.base/charset.exp: try printing '\r' in EBCDIC-US
+PASS: gdb.base/charset.exp: check value of '\r' in EBCDIC-US
+PASS: gdb.base/charset.exp: check value of "\r" in EBCDIC-US
+PASS: gdb.base/charset.exp: try printing '\t' in EBCDIC-US
+PASS: gdb.base/charset.exp: check value of '\t' in EBCDIC-US
+PASS: gdb.base/charset.exp: check value of "\t" in EBCDIC-US
+PASS: gdb.base/charset.exp: try printing '\v' in EBCDIC-US
+PASS: gdb.base/charset.exp: check value of '\v' in EBCDIC-US
+PASS: gdb.base/charset.exp: check value of "\v" in EBCDIC-US
+PASS: gdb.base/charset.exp: print escape that doesn't exist in EBCDIC-US
+PASS: gdb.base/charset.exp: check value of escape that doesn't exist in EBCDIC-US
+PASS: gdb.base/charset.exp: set target-charset IBM1047
+PASS: gdb.base/charset.exp: print the null character in IBM1047
+PASS: gdb.base/charset.exp: print string in IBM1047
+PASS: gdb.base/charset.exp: parse character literal in IBM1047
+PASS: gdb.base/charset.exp: check value of parsed character literal in IBM1047
+PASS: gdb.base/charset.exp: parse string literal in IBM1047
+PASS: gdb.base/charset.exp: check value of parsed string literal in IBM1047
+PASS: gdb.base/charset.exp: try printing '\a' in IBM1047
+PASS: gdb.base/charset.exp: check value of '\a' in IBM1047
+PASS: gdb.base/charset.exp: check value of "\a" in IBM1047
+PASS: gdb.base/charset.exp: try printing '\b' in IBM1047
+PASS: gdb.base/charset.exp: check value of '\b' in IBM1047
+PASS: gdb.base/charset.exp: check value of "\b" in IBM1047
+PASS: gdb.base/charset.exp: try printing '\f' in IBM1047
+PASS: gdb.base/charset.exp: check value of '\f' in IBM1047
+PASS: gdb.base/charset.exp: check value of "\f" in IBM1047
+PASS: gdb.base/charset.exp: try printing '\n' in IBM1047
+PASS: gdb.base/charset.exp: check value of '\n' in IBM1047
+PASS: gdb.base/charset.exp: check value of "\n" in IBM1047
+PASS: gdb.base/charset.exp: try printing '\r' in IBM1047
+PASS: gdb.base/charset.exp: check value of '\r' in IBM1047
+PASS: gdb.base/charset.exp: check value of "\r" in IBM1047
+PASS: gdb.base/charset.exp: try printing '\t' in IBM1047
+PASS: gdb.base/charset.exp: check value of '\t' in IBM1047
+PASS: gdb.base/charset.exp: check value of "\t" in IBM1047
+PASS: gdb.base/charset.exp: try printing '\v' in IBM1047
+PASS: gdb.base/charset.exp: check value of '\v' in IBM1047
+PASS: gdb.base/charset.exp: check value of "\v" in IBM1047
+PASS: gdb.base/charset.exp: print escape that doesn't exist in IBM1047
+PASS: gdb.base/charset.exp: check value of escape that doesn't exist in IBM1047
+PASS: gdb.base/charset.exp: set target-wide-charset UTF-32
+PASS: gdb.base/charset.exp: print the null character in UTF-32
+PASS: gdb.base/charset.exp: print string in UTF-32
+PASS: gdb.base/charset.exp: parse character literal in UTF-32
+PASS: gdb.base/charset.exp: check value of parsed character literal in UTF-32
+PASS: gdb.base/charset.exp: parse string literal in UTF-32
+PASS: gdb.base/charset.exp: check value of parsed string literal in UTF-32
+PASS: gdb.base/charset.exp: try printing '\a' in UTF-32
+PASS: gdb.base/charset.exp: check value of '\a' in UTF-32
+PASS: gdb.base/charset.exp: check value of "\a" in UTF-32
+PASS: gdb.base/charset.exp: try printing '\b' in UTF-32
+PASS: gdb.base/charset.exp: check value of '\b' in UTF-32
+PASS: gdb.base/charset.exp: check value of "\b" in UTF-32
+PASS: gdb.base/charset.exp: try printing '\f' in UTF-32
+PASS: gdb.base/charset.exp: check value of '\f' in UTF-32
+PASS: gdb.base/charset.exp: check value of "\f" in UTF-32
+PASS: gdb.base/charset.exp: try printing '\n' in UTF-32
+PASS: gdb.base/charset.exp: check value of '\n' in UTF-32
+PASS: gdb.base/charset.exp: check value of "\n" in UTF-32
+PASS: gdb.base/charset.exp: try printing '\r' in UTF-32
+PASS: gdb.base/charset.exp: check value of '\r' in UTF-32
+PASS: gdb.base/charset.exp: check value of "\r" in UTF-32
+PASS: gdb.base/charset.exp: try printing '\t' in UTF-32
+PASS: gdb.base/charset.exp: check value of '\t' in UTF-32
+PASS: gdb.base/charset.exp: check value of "\t" in UTF-32
+PASS: gdb.base/charset.exp: try printing '\v' in UTF-32
+PASS: gdb.base/charset.exp: check value of '\v' in UTF-32
+PASS: gdb.base/charset.exp: check value of "\v" in UTF-32
+PASS: gdb.base/charset.exp: print escape that doesn't exist in UTF-32
+PASS: gdb.base/charset.exp: check value of escape that doesn't exist in UTF-32
+PASS: gdb.base/charset.exp: set target-charset UTF-8
+PASS: gdb.base/charset.exp: non-representable target character
+PASS: gdb.base/charset.exp: print '\x'
+PASS: gdb.base/charset.exp: print '\u'
+PASS: gdb.base/charset.exp: print '\9'
+PASS: gdb.base/charset.exp: print "\1011"
+PASS: gdb.base/charset.exp: basic wide string concatenation
+PASS: gdb.base/charset.exp: narrow and wide string concatenation
+PASS: gdb.base/charset.exp: wide and narrow string concatenation
+PASS: gdb.base/charset.exp: wide string concatenation with escape
+PASS: gdb.base/charset.exp: concatenate three strings with empty wide string
+PASS: gdb.base/charset.exp: basic wide character
+PASS: gdb.base/charset.exp: get integer valueof "sizeof (char16_t)" (2)
+PASS: gdb.base/charset.exp: basic UTF-16 string concatenation
+PASS: gdb.base/charset.exp: narrow and UTF-16 string concatenation
+PASS: gdb.base/charset.exp: UTF-16 and narrow string concatenation
+PASS: gdb.base/charset.exp: UTF-16 string concatenation with escape
+PASS: gdb.base/charset.exp: concatenate three strings with empty UTF-16 string
+PASS: gdb.base/charset.exp: basic UTF-16 character
+PASS: gdb.base/charset.exp: get integer valueof "sizeof (char32_t)" (4)
+PASS: gdb.base/charset.exp: basic UTF-32 string concatenation
+PASS: gdb.base/charset.exp: narrow and UTF-32 string concatenation
+PASS: gdb.base/charset.exp: UTF-32 and narrow string concatenation
+PASS: gdb.base/charset.exp: UTF-32 string concatenation with escape
+PASS: gdb.base/charset.exp: concatenate three strings with empty UTF-32 string
+PASS: gdb.base/charset.exp: basic UTF-32 character
+PASS: gdb.base/charset.exp: undefined concatenation of wide and UTF-16
+PASS: gdb.base/charset.exp: undefined concatenation of wide and UTF-32
+PASS: gdb.base/charset.exp: typedef to wchar_t
+PASS: gdb.base/charset.exp: undefined concatenation of UTF-16 and UTF-32
+PASS: gdb.base/charset.exp: set up for python printing of utf-16 string
+PASS: gdb.base/charset.exp: extract utf-16 string using python
+PASS: gdb.base/charset.exp: EVAL_SKIP cleanup handling regression test
+PASS: gdb.base/charset.exp: Assign String16 with prefix u
+PASS: gdb.base/charset.exp: Display String String16 with x/hs
+PASS: gdb.base/charset.exp: Assign String32 with prefix U
+PASS: gdb.base/charset.exp: Display String String32 with x/ws
+PASS: gdb.base/charset.exp: Assign String32 with prefix L
+PASS: gdb.base/charset.exp: Display String String32 with x/ws
+PASS: gdb.base/charset.exp: assign string to short array
+PASS: gdb.base/charset.exp: assign string to int array
+PASS: gdb.base/charset.exp: assign string to long array
+Running ./gdb.base/checkpoint.exp ...
+Running ./gdb.base/chng-syms.exp ...
+PASS: gdb.base/chng-syms.exp: setting conditional breakpoint on function
+PASS: gdb.base/chng-syms.exp: continue until exit at breakpoint first time through
+PASS: gdb.base/chng-syms.exp: running with invalidated bpt condition after executable changes
+Running ./gdb.base/code_elim.exp ...
+PASS: gdb.base/code_elim.exp: symbol-file code_elim1
+PASS: gdb.base/code_elim.exp: single psymtabs: test eliminated var my_global_symbol
+PASS: gdb.base/code_elim.exp: single psymtabs: test eliminated var my_static_symbol
+PASS: gdb.base/code_elim.exp: single psymtabs: test eliminated var my_global_func
+PASS: gdb.base/code_elim.exp: single psymtabs: get address of main
+PASS: gdb.base/code_elim.exp: single symtabs: test eliminated var my_global_symbol
+PASS: gdb.base/code_elim.exp: single symtabs: test eliminated var my_static_symbol
+PASS: gdb.base/code_elim.exp: single symtabs: test eliminated var my_global_func
+PASS: gdb.base/code_elim.exp: single symtabs: get address of main
+PASS: gdb.base/code_elim.exp: order1: add-symbol-file code_elim1 0x100000
+PASS: gdb.base/code_elim.exp: order1: add-symbol-file code_elim2 0x200000
+PASS: gdb.base/code_elim.exp: order1: get address of my_global_symbol
+PASS: gdb.base/code_elim.exp: order1: get address of my_static_symbol
+PASS: gdb.base/code_elim.exp: order1: get address of my_global_func
+PASS: gdb.base/code_elim.exp: order1: get address of main
+PASS: gdb.base/code_elim.exp: order2: add-symbol-file code_elim2 0x200000
+PASS: gdb.base/code_elim.exp: order2: add-symbol-file code_elim1 0x100000
+PASS: gdb.base/code_elim.exp: order2: get address of my_global_symbol
+PASS: gdb.base/code_elim.exp: order2: get address of my_static_symbol
+PASS: gdb.base/code_elim.exp: order2: get address of my_global_func
+PASS: gdb.base/code_elim.exp: order2: get address of main
+Running ./gdb.base/code-expr.exp ...
+PASS: gdb.base/code-expr.exp: set print sevenbit-strings
+PASS: gdb.base/code-expr.exp: set print address off
+PASS: gdb.base/code-expr.exp: set width 0
+PASS: gdb.base/code-expr.exp: (@code char)
+PASS: gdb.base/code-expr.exp: (@code signed char)
+PASS: gdb.base/code-expr.exp: (@code unsigned char)
+PASS: gdb.base/code-expr.exp: (@code short)
+PASS: gdb.base/code-expr.exp: (@code signed short)
+PASS: gdb.base/code-expr.exp: (@code unsigned short)
+PASS: gdb.base/code-expr.exp: (@code int)
+PASS: gdb.base/code-expr.exp: (@code signed int)
+PASS: gdb.base/code-expr.exp: (@code unsigned int)
+PASS: gdb.base/code-expr.exp: (@code long)
+PASS: gdb.base/code-expr.exp: (@code signed long)
+PASS: gdb.base/code-expr.exp: (@code unsigned long)
+PASS: gdb.base/code-expr.exp: (@code long long)
+PASS: gdb.base/code-expr.exp: (@code signed long long)
+PASS: gdb.base/code-expr.exp: (@code unsigned long long)
+PASS: gdb.base/code-expr.exp: (@code float)
+PASS: gdb.base/code-expr.exp: (@code double)
+PASS: gdb.base/code-expr.exp: (@data char)
+PASS: gdb.base/code-expr.exp: (@data signed char)
+PASS: gdb.base/code-expr.exp: (@data unsigned char)
+PASS: gdb.base/code-expr.exp: (@data short)
+PASS: gdb.base/code-expr.exp: (@data signed short)
+PASS: gdb.base/code-expr.exp: (@data unsigned short)
+PASS: gdb.base/code-expr.exp: (@data int)
+PASS: gdb.base/code-expr.exp: (@data signed int)
+PASS: gdb.base/code-expr.exp: (@data unsigned int)
+PASS: gdb.base/code-expr.exp: (@data long)
+PASS: gdb.base/code-expr.exp: (@data signed long)
+PASS: gdb.base/code-expr.exp: (@data unsigned long)
+PASS: gdb.base/code-expr.exp: (@data long long)
+PASS: gdb.base/code-expr.exp: (@data signed long long)
+PASS: gdb.base/code-expr.exp: (@data unsigned long long)
+PASS: gdb.base/code-expr.exp: (@data float)
+PASS: gdb.base/code-expr.exp: (@data double)
+PASS: gdb.base/code-expr.exp: (char @code)
+PASS: gdb.base/code-expr.exp: (signed char @code)
+PASS: gdb.base/code-expr.exp: (unsigned char @code)
+PASS: gdb.base/code-expr.exp: (short @code)
+PASS: gdb.base/code-expr.exp: (signed short @code)
+PASS: gdb.base/code-expr.exp: (unsigned short @code)
+PASS: gdb.base/code-expr.exp: (int @code)
+PASS: gdb.base/code-expr.exp: (signed int @code)
+PASS: gdb.base/code-expr.exp: (unsigned int @code)
+PASS: gdb.base/code-expr.exp: (long @code)
+PASS: gdb.base/code-expr.exp: (signed long @code)
+PASS: gdb.base/code-expr.exp: (unsigned long @code)
+PASS: gdb.base/code-expr.exp: (long long @code)
+PASS: gdb.base/code-expr.exp: (signed long long @code)
+PASS: gdb.base/code-expr.exp: (unsigned long long @code)
+PASS: gdb.base/code-expr.exp: (float @code)
+PASS: gdb.base/code-expr.exp: (double @code)
+PASS: gdb.base/code-expr.exp: (char @data)
+PASS: gdb.base/code-expr.exp: (signed char @data)
+PASS: gdb.base/code-expr.exp: (unsigned char @data)
+PASS: gdb.base/code-expr.exp: (short @data)
+PASS: gdb.base/code-expr.exp: (signed short @data)
+PASS: gdb.base/code-expr.exp: (unsigned short @data)
+PASS: gdb.base/code-expr.exp: (int @data)
+PASS: gdb.base/code-expr.exp: (signed int @data)
+PASS: gdb.base/code-expr.exp: (unsigned int @data)
+PASS: gdb.base/code-expr.exp: (long @data)
+PASS: gdb.base/code-expr.exp: (signed long @data)
+PASS: gdb.base/code-expr.exp: (unsigned long @data)
+PASS: gdb.base/code-expr.exp: (long long @data)
+PASS: gdb.base/code-expr.exp: (signed long long @data)
+PASS: gdb.base/code-expr.exp: (unsigned long long @data)
+PASS: gdb.base/code-expr.exp: (float @data)
+PASS: gdb.base/code-expr.exp: (double @data)
+PASS: gdb.base/code-expr.exp: (@code enum misordered)
+PASS: gdb.base/code-expr.exp: (enum misordered @code)
+PASS: gdb.base/code-expr.exp: (@data enum misordered)
+PASS: gdb.base/code-expr.exp: (enum misordered @data)
+PASS: gdb.base/code-expr.exp: (@code int *)
+PASS: gdb.base/code-expr.exp: (int @code *)
+PASS: gdb.base/code-expr.exp: (int * @code)
+PASS: gdb.base/code-expr.exp: (@code int * @code)
+PASS: gdb.base/code-expr.exp: (int @code * @code)
+PASS: gdb.base/code-expr.exp: (@code int **)
+PASS: gdb.base/code-expr.exp: (int @code **)
+PASS: gdb.base/code-expr.exp: (int ** @code)
+PASS: gdb.base/code-expr.exp: (@code int * @code *)
+PASS: gdb.base/code-expr.exp: (int @code * @code *)
+PASS: gdb.base/code-expr.exp: (@code int * @code * @code)
+PASS: gdb.base/code-expr.exp: (int @code * @code * @code)
+PASS: gdb.base/code-expr.exp: (@code struct t_struct)
+PASS: gdb.base/code-expr.exp: (@code union t_union)
+PASS: gdb.base/code-expr.exp: (struct t_struct @code)
+PASS: gdb.base/code-expr.exp: (union t_union @code)
+PASS: gdb.base/code-expr.exp: (@code struct t_struct *)
+PASS: gdb.base/code-expr.exp: (@code union t_union *)
+PASS: gdb.base/code-expr.exp: (struct t_struct @code *)
+PASS: gdb.base/code-expr.exp: (union t_union @code *)
+PASS: gdb.base/code-expr.exp: (struct t_struct * @code)
+PASS: gdb.base/code-expr.exp: (union t_union * @code)
+PASS: gdb.base/code-expr.exp: (@code struct t_struct * @code)
+PASS: gdb.base/code-expr.exp: (@code union t_union * @code)
+PASS: gdb.base/code-expr.exp: (struct t_struct @code * @code)
+PASS: gdb.base/code-expr.exp: (union t_union @code * @code)
+Running ./gdb.base/commands.exp ...
+PASS: gdb.base/commands.exp: set foo in gdbvar_simple_if_test
+PASS: gdb.base/commands.exp: gdbvar_simple_if_test #1
+PASS: gdb.base/commands.exp: gdbvar_simple_if_test #2
+PASS: gdb.base/commands.exp: set foo in gdbvar_simple_while_test
+PASS: gdb.base/commands.exp: gdbvar_simple_while_test #1
+PASS: gdb.base/commands.exp: set foo in gdbvar complex_if_while_test
+PASS: gdb.base/commands.exp: gdbvar_complex_if_while_test #1
+PASS: gdb.base/commands.exp: set foo in user_defined_command_test
+PASS: gdb.base/commands.exp: define mycommand in user_defined_command_test
+PASS: gdb.base/commands.exp: enter commands in user_defined_command_test
+PASS: gdb.base/commands.exp: execute user defined command in user_defined_command_test
+PASS: gdb.base/commands.exp: display user command in user_defined_command_test
+PASS: gdb.base/commands.exp: tried to deprecate non-existing command
+PASS: gdb.base/commands.exp: maintenance deprecate p "new_p" /1/
+PASS: gdb.base/commands.exp: p deprecated warning, with replacement
+PASS: gdb.base/commands.exp: Deprecated warning goes away /1/
+PASS: gdb.base/commands.exp: maintenance deprecate p "new_p" /2/
+PASS: gdb.base/commands.exp: maintenance deprecate print "new_print"
+PASS: gdb.base/commands.exp: both alias and command are deprecated
+PASS: gdb.base/commands.exp: Deprecated warning goes away /2/
+PASS: gdb.base/commands.exp: deprecate long command /1/
+PASS: gdb.base/commands.exp: long command deprecated /1/
+PASS: gdb.base/commands.exp: deprecate long command /2/
+PASS: gdb.base/commands.exp: long command deprecated with no alternative /2/
+PASS: gdb.base/commands.exp: deprecate with no arguments
+PASS: gdb.base/commands.exp: stray_arg0_test #1
+PASS: gdb.base/commands.exp: stray_arg0_test #2
+PASS: gdb.base/commands.exp: stray_arg0_test #3
+PASS: gdb.base/commands.exp: stray_arg0_test #4
+PASS: gdb.base/commands.exp: source file with indented comment
+PASS: gdb.base/commands.exp: recursive source test
+PASS: gdb.base/commands.exp: set $tem in if_commands_test
+PASS: gdb.base/commands.exp: if $tem == 2 - if_commands_test 1
+PASS: gdb.base/commands.exp: break main - if_commands_test 1
+PASS: gdb.base/commands.exp: else - if_commands_test 1
+PASS: gdb.base/commands.exp: break factorial - if_commands_test 1
+PASS: gdb.base/commands.exp: commands - if_commands_test 1
+PASS: gdb.base/commands.exp: silent - if_commands_test 1
+PASS: gdb.base/commands.exp: set $tem = 3 - if_commands_test 1
+PASS: gdb.base/commands.exp: continue - if_commands_test 1
+PASS: gdb.base/commands.exp: first end - if_commands_test 1
+PASS: gdb.base/commands.exp: second end - if_commands_test 1
+PASS: gdb.base/commands.exp: if $tem == 1 - if_commands_test 2
+PASS: gdb.base/commands.exp: break main - if_commands_test 2
+PASS: gdb.base/commands.exp: else - if_commands_test 2
+PASS: gdb.base/commands.exp: break factorial - if_commands_test 2
+PASS: gdb.base/commands.exp: commands - if_commands_test 2
+PASS: gdb.base/commands.exp: silent - if_commands_test 2
+PASS: gdb.base/commands.exp: set $tem = 3 - if_commands_test 2
+PASS: gdb.base/commands.exp: continue - if_commands_test 2
+PASS: gdb.base/commands.exp: first end - if_commands_test 2
+PASS: gdb.base/commands.exp: second end - if_commands_test 2
+PASS: gdb.base/commands.exp: hook-stop 1
+PASS: gdb.base/commands.exp: hook-stop 1a
+PASS: gdb.base/commands.exp: hook-stop 1b
+PASS: gdb.base/commands.exp: main commands 1
+PASS: gdb.base/commands.exp: main commands 1a
+PASS: gdb.base/commands.exp: main commands 1b
+PASS: gdb.base/commands.exp: main commands 1c
+PASS: gdb.base/commands.exp: main commands 2
+PASS: gdb.base/commands.exp: main commands 2a
+PASS: gdb.base/commands.exp: main commands 2b
+PASS: gdb.base/commands.exp: main commands 2c
+PASS: gdb.base/commands.exp: cmd1 error
+PASS: gdb.base/commands.exp: no cmd2
+PASS: gdb.base/commands.exp: define one
+PASS: gdb.base/commands.exp: define hook-one
+PASS: gdb.base/commands.exp: define one in redefine_hook_test
+PASS: gdb.base/commands.exp: enter commands for one redefinition in redefine_hook_test
+PASS: gdb.base/commands.exp: execute one command in redefine_hook_test
+PASS: gdb.base/commands.exp: define backtrace
+PASS: gdb.base/commands.exp: expect response to define backtrace
+PASS: gdb.base/commands.exp: enter commands in redefine_backtrace_test
+PASS: gdb.base/commands.exp: execute backtrace command in redefine_backtrace_test
+PASS: gdb.base/commands.exp: execute bt command in redefine_backtrace_test
+Running ./gdb.base/completion.exp ...
+PASS: gdb.base/completion.exp: complete 'hfgfh'
+PASS: gdb.base/completion.exp: complete 'show output'
+PASS: gdb.base/completion.exp: complete 'show output-'
+PASS: gdb.base/completion.exp: complete 'p'
+PASS: gdb.base/completion.exp: complete 'p '
+PASS: gdb.base/completion.exp: complete 'info t foo'
+PASS: gdb.base/completion.exp: complete 'info t'
+PASS: gdb.base/completion.exp: complete 'info t '
+PASS: gdb.base/completion.exp: complete 'info asdfgh'
+PASS: gdb.base/completion.exp: complete 'info asdfgh '
+PASS: gdb.base/completion.exp: complete 'info'
+PASS: gdb.base/completion.exp: complete 'info '
+PASS: gdb.base/completion.exp: complete (2) 'info '
+PASS: gdb.base/completion.exp: complete 'help info wat'
+PASS: gdb.base/completion.exp: complete 'p "break1'
+XFAIL: gdb.base/completion.exp: complete 'p "break1.'
+PASS: gdb.base/completion.exp: complete 'p 'arg'
+PASS: gdb.base/completion.exp: complete (2) 'p 'arg'
+PASS: gdb.base/completion.exp: complete 'handle signal'
+PASS: gdb.base/completion.exp: complete 'handle keyword'
+PASS: gdb.base/completion.exp: complete help aliases
+PASS: gdb.base/completion.exp: complete 'p no_var_named_this-arg'
+PASS: gdb.base/completion.exp: complete (2) 'p no_var_named_this-arg'
+ERROR: internal buffer is full.
+UNRESOLVED: gdb.base/completion.exp: complete (2) 'p no_var_named_this-'
+ERROR: internal buffer is full.
+UNRESOLVED: gdb.base/completion.exp: complete 'p values[0].a'
+ERROR: internal buffer is full.
+UNRESOLVED: gdb.base/completion.exp: complete 'p values[0] . a'
+ERROR: internal buffer is full.
+UNRESOLVED: gdb.base/completion.exp: complete 'p &values[0] -> a'
+ERROR: internal buffer is full.
+UNRESOLVED: gdb.base/completion.exp: completion of field in anonymous union
+ERROR: internal buffer is full.
+UNRESOLVED: gdb.base/completion.exp: ptype completion of field in anonymous union
+ERROR: internal buffer is full.
+UNRESOLVED: gdb.base/completion.exp: whatis completion of field in anonymous union
+PASS: gdb.base/completion.exp: cd to ${srcdir}
+PASS: gdb.base/completion.exp: directory completion
+PASS: gdb.base/completion.exp: directory completion 2
+PASS: gdb.base/completion.exp: Glob remaining of directory test
+PASS: gdb.base/completion.exp: complete-command 'file ./gdb.base/compl'
+PASS: gdb.base/completion.exp: complete 'file ./gdb.base/complet'
+PASS: gdb.base/completion.exp: complete 'info func marke'
+PASS: gdb.base/completion.exp: complete 'set follow-fork-mode'
+PASS: gdb.base/completion.exp: field completion with invalid field
+PASS: gdb.base/completion.exp: test non-deprecated completion
+PASS: gdb.base/completion.exp: test deprecated completion
+PASS: gdb.base/completion.exp: complete ptype struct some_
+PASS: gdb.base/completion.exp: complete ptype enum some_
+PASS: gdb.base/completion.exp: complete ptype union some_
+PASS: gdb.base/completion.exp: complete set gnutarget aut
+PASS: gdb.base/completion.exp: complete set cp-abi aut
+Running ./gdb.base/complex.exp ...
+PASS: gdb.base/complex.exp: print complex packed value in C
+PASS: gdb.base/complex.exp: print complex value in C
+Running ./gdb.base/comprdebug.exp ...
+PASS: gdb.base/comprdebug.exp: file comprdebug0.o
+Running ./gdb.base/condbreak.exp ...
+PASS: gdb.base/condbreak.exp: breakpoint function
+PASS: gdb.base/condbreak.exp: break marker1 if 1==1
+PASS: gdb.base/condbreak.exp: delete 2
+PASS: gdb.base/condbreak.exp: break break.c:92 if 1==1
+PASS: gdb.base/condbreak.exp: delete 3
+PASS: gdb.base/condbreak.exp: break marker1 if (1==1)
+PASS: gdb.base/condbreak.exp: break break.c:92 if (1==1)
+PASS: gdb.base/condbreak.exp: break marker2 if (a==43)
+PASS: gdb.base/condbreak.exp: break marker3 if (multi_line_if_conditional(1,1,1)==0)
+PASS: gdb.base/condbreak.exp: break marker4
+PASS: gdb.base/condbreak.exp: breakpoint info
+PASS: gdb.base/condbreak.exp: rerun to main
+PASS: gdb.base/condbreak.exp: run until breakpoint set at a line number
+PASS: gdb.base/condbreak.exp: run until breakpoint at marker1
+PASS: gdb.base/condbreak.exp: run until breakpoint at marker2
+PASS: gdb.base/condbreak.exp: break main if (1==1) thread 999
+PASS: gdb.base/condbreak.exp: break main thread 999 if (1==1)
+PASS: gdb.base/condbreak.exp: break *main if (1==1) thread 999
+PASS: gdb.base/condbreak.exp: break *main thread 999 if (1==1)
+PASS: gdb.base/condbreak.exp: break *main if (1==1) task 999
+PASS: gdb.base/condbreak.exp: break *main task 999 if (1==1)
+PASS: gdb.base/condbreak.exp: break *main if (1==1) t 999
+PASS: gdb.base/condbreak.exp: break *main if (1==1) th 999
+PASS: gdb.base/condbreak.exp: break *main if (1==1) ta 999
+PASS: gdb.base/condbreak.exp: run until breakpoint at marker3
+PASS: gdb.base/condbreak.exp: run until breakpoint at marker4
+PASS: gdb.base/condbreak.exp: complete cond 1
+PASS: gdb.base/condbreak.exp: set variable $var = 1
+PASS: gdb.base/condbreak.exp: complete cond $v
+PASS: gdb.base/condbreak.exp: complete cond 1 values[0].a
+Running ./gdb.base/cond-eval-mode.exp ...
+PASS: gdb.base/cond-eval-mode.exp: set breakpoint condition-evaluation host
+PASS: gdb.base/cond-eval-mode.exp: set breakpoint condition-evaluation auto
+PASS: gdb.base/cond-eval-mode.exp: set breakpoint condition-evaluation target
+Running ./gdb.base/cond-expr.exp ...
+PASS: gdb.base/cond-expr.exp: print value of cond expr (const true)
+PASS: gdb.base/cond-expr.exp: print value of cond expr (const false)
+PASS: gdb.base/cond-expr.exp: set variable x=14
+PASS: gdb.base/cond-expr.exp: set variable y=2
+PASS: gdb.base/cond-expr.exp: set variable z=3
+PASS: gdb.base/cond-expr.exp: print value of cond expr (var true)
+PASS: gdb.base/cond-expr.exp: set variable x=0
+PASS: gdb.base/cond-expr.exp: print value of cond expr (var false)
+PASS: gdb.base/cond-expr.exp: print whatis of cond expr
+Running ./gdb.base/consecutive.exp ...
+PASS: gdb.base/consecutive.exp: continue to breakpoint in foo
+PASS: gdb.base/consecutive.exp: get breakpoint address for foo
+PASS: gdb.base/consecutive.exp: set bp, 2nd instr
+PASS: gdb.base/consecutive.exp: stopped at bp, 2nd instr
+Running ./gdb.base/constvars.exp ...
+PASS: gdb.base/constvars.exp: break marker1
+PASS: gdb.base/constvars.exp: continue to marker1
+PASS: gdb.base/constvars.exp: up from marker1
+PASS: gdb.base/constvars.exp: ptype qux1
+PASS: gdb.base/constvars.exp: print lave
+PASS: gdb.base/constvars.exp: ptype lave
+PASS: gdb.base/constvars.exp: print lavish
+PASS: gdb.base/constvars.exp: ptype lavish
+PASS: gdb.base/constvars.exp: print lax
+PASS: gdb.base/constvars.exp: ptype lax
+PASS: gdb.base/constvars.exp: print lecherous
+PASS: gdb.base/constvars.exp: ptype lecherous
+PASS: gdb.base/constvars.exp: print lechery
+PASS: gdb.base/constvars.exp: ptype lechery
+PASS: gdb.base/constvars.exp: print lectern
+PASS: gdb.base/constvars.exp: ptype lectern
+PASS: gdb.base/constvars.exp: print leeway
+PASS: gdb.base/constvars.exp: ptype leeway
+PASS: gdb.base/constvars.exp: print legacy
+PASS: gdb.base/constvars.exp: ptype legacy
+PASS: gdb.base/constvars.exp: print laconic
+PASS: gdb.base/constvars.exp: ptype laconic
+PASS: gdb.base/constvars.exp: print laggard
+PASS: gdb.base/constvars.exp: ptype laggard
+PASS: gdb.base/constvars.exp: print lagoon
+PASS: gdb.base/constvars.exp: ptype lagoon
+PASS: gdb.base/constvars.exp: print laity
+PASS: gdb.base/constvars.exp: ptype laity
+PASS: gdb.base/constvars.exp: print lambent
+PASS: gdb.base/constvars.exp: ptype lambent
+PASS: gdb.base/constvars.exp: print laminated
+PASS: gdb.base/constvars.exp: ptype laminated
+PASS: gdb.base/constvars.exp: print lampoon
+PASS: gdb.base/constvars.exp: ptype lampoon
+PASS: gdb.base/constvars.exp: print languid
+PASS: gdb.base/constvars.exp: ptype languid
+PASS: gdb.base/constvars.exp: print *legend
+PASS: gdb.base/constvars.exp: ptype legend
+PASS: gdb.base/constvars.exp: print *legerdemain
+PASS: gdb.base/constvars.exp: ptype legerdemain
+PASS: gdb.base/constvars.exp: print *leniency
+PASS: gdb.base/constvars.exp: ptype leniency
+PASS: gdb.base/constvars.exp: print *leonine
+PASS: gdb.base/constvars.exp: ptype leonine
+PASS: gdb.base/constvars.exp: print *lesion
+PASS: gdb.base/constvars.exp: ptype lesion
+PASS: gdb.base/constvars.exp: print *lethal
+PASS: gdb.base/constvars.exp: ptype lethal
+PASS: gdb.base/constvars.exp: print *lethargic
+PASS: gdb.base/constvars.exp: ptype lethargic
+PASS: gdb.base/constvars.exp: print *levity
+PASS: gdb.base/constvars.exp: ptype levity
+PASS: gdb.base/constvars.exp: print *lewd
+PASS: gdb.base/constvars.exp: ptype lewd
+PASS: gdb.base/constvars.exp: print *lexicographer
+PASS: gdb.base/constvars.exp: ptype lexicographer
+PASS: gdb.base/constvars.exp: print *lexicon
+PASS: gdb.base/constvars.exp: ptype lexicon
+PASS: gdb.base/constvars.exp: print *liaison
+PASS: gdb.base/constvars.exp: ptype liaison
+PASS: gdb.base/constvars.exp: print *libation
+PASS: gdb.base/constvars.exp: ptype libation
+PASS: gdb.base/constvars.exp: print *libelous
+PASS: gdb.base/constvars.exp: ptype libelous
+PASS: gdb.base/constvars.exp: print *libertine
+PASS: gdb.base/constvars.exp: ptype libertine
+PASS: gdb.base/constvars.exp: print *libidinous
+PASS: gdb.base/constvars.exp: ptype libidinous
+PASS: gdb.base/constvars.exp: print *languish
+PASS: gdb.base/constvars.exp: ptype languish
+PASS: gdb.base/constvars.exp: print *languor
+PASS: gdb.base/constvars.exp: ptype languor
+PASS: gdb.base/constvars.exp: print *lank
+PASS: gdb.base/constvars.exp: ptype lank
+PASS: gdb.base/constvars.exp: print *lapidary
+PASS: gdb.base/constvars.exp: ptype lapidary
+PASS: gdb.base/constvars.exp: print *larceny
+PASS: gdb.base/constvars.exp: ptype larceny
+PASS: gdb.base/constvars.exp: print *largess
+PASS: gdb.base/constvars.exp: ptype largess
+PASS: gdb.base/constvars.exp: print *lascivious
+PASS: gdb.base/constvars.exp: ptype lascivious
+PASS: gdb.base/constvars.exp: print *lassitude
+PASS: gdb.base/constvars.exp: ptype lassitude
+PASS: gdb.base/constvars.exp: print *lamprey
+PASS: gdb.base/constvars.exp: ptype lamprey
+PASS: gdb.base/constvars.exp: print *lariat
+PASS: gdb.base/constvars.exp: ptype lariat
+PASS: gdb.base/constvars.exp: print *laudanum
+PASS: gdb.base/constvars.exp: ptype laudanum
+PASS: gdb.base/constvars.exp: print *lecithin
+PASS: gdb.base/constvars.exp: ptype lecithin
+PASS: gdb.base/constvars.exp: print *leviathan
+PASS: gdb.base/constvars.exp: ptype leviathan
+PASS: gdb.base/constvars.exp: print *libretto
+PASS: gdb.base/constvars.exp: ptype libretto
+PASS: gdb.base/constvars.exp: print *lissome
+PASS: gdb.base/constvars.exp: ptype lissome
+PASS: gdb.base/constvars.exp: print *locust
+PASS: gdb.base/constvars.exp: ptype locust
+PASS: gdb.base/constvars.exp: ptype logical
+PASS: gdb.base/constvars.exp: ptype lugged
+PASS: gdb.base/constvars.exp: ptype luck
+PASS: gdb.base/constvars.exp: ptype lunar
+PASS: gdb.base/constvars.exp: ptype lumen
+PASS: gdb.base/constvars.exp: ptype lurk
+PASS: gdb.base/constvars.exp: ptype lush
+PASS: gdb.base/constvars.exp: ptype lynx
+PASS: gdb.base/constvars.exp: ptype crass
+PASS: gdb.base/constvars.exp: ptype crisp
+Running ./gdb.base/corefile.exp ...
+Running ./gdb.base/ctxobj.exp ...
+PASS: gdb.base/ctxobj.exp: break in get_version functions
+PASS: gdb.base/ctxobj.exp: continue to get_version_1
+PASS: gdb.base/ctxobj.exp: print libctxobj1's this_version_num from partial symtab
+PASS: gdb.base/ctxobj.exp: print libctxobj1's this_version_num from symtab
+PASS: gdb.base/ctxobj.exp: continue to get_version_2
+PASS: gdb.base/ctxobj.exp: print libctxobj2's this_version_num from partial symtab
+PASS: gdb.base/ctxobj.exp: print libctxobj2's this_version_num from symtab
+Running ./gdb.base/cursal.exp ...
+PASS: gdb.base/cursal.exp: set listsize 1
+PASS: gdb.base/cursal.exp: list before run
+PASS: gdb.base/cursal.exp: list in main
+PASS: gdb.base/cursal.exp: list in func2
+PASS: gdb.base/cursal.exp: backtrace
+PASS: gdb.base/cursal.exp: list after backtrace
+PASS: gdb.base/cursal.exp: set listsize 3
+PASS: gdb.base/cursal.exp: list size 3
+Running ./gdb.base/cvexpr.exp ...
+PASS: gdb.base/cvexpr.exp: set print sevenbit-strings
+PASS: gdb.base/cvexpr.exp: set print address off
+PASS: gdb.base/cvexpr.exp: set width 0
+PASS: gdb.base/cvexpr.exp: (const char)
+PASS: gdb.base/cvexpr.exp: (const signed char)
+PASS: gdb.base/cvexpr.exp: (const unsigned char)
+PASS: gdb.base/cvexpr.exp: (const short)
+PASS: gdb.base/cvexpr.exp: (const signed short)
+PASS: gdb.base/cvexpr.exp: (const unsigned short)
+PASS: gdb.base/cvexpr.exp: (const int)
+PASS: gdb.base/cvexpr.exp: (const signed int)
+PASS: gdb.base/cvexpr.exp: (const unsigned int)
+PASS: gdb.base/cvexpr.exp: (const long)
+PASS: gdb.base/cvexpr.exp: (const signed long)
+PASS: gdb.base/cvexpr.exp: (const unsigned long)
+PASS: gdb.base/cvexpr.exp: (const long long)
+PASS: gdb.base/cvexpr.exp: (const signed long long)
+PASS: gdb.base/cvexpr.exp: (const unsigned long long)
+PASS: gdb.base/cvexpr.exp: (const float)
+PASS: gdb.base/cvexpr.exp: (const double)
+PASS: gdb.base/cvexpr.exp: (volatile char)
+PASS: gdb.base/cvexpr.exp: (volatile signed char)
+PASS: gdb.base/cvexpr.exp: (volatile unsigned char)
+PASS: gdb.base/cvexpr.exp: (volatile short)
+PASS: gdb.base/cvexpr.exp: (volatile signed short)
+PASS: gdb.base/cvexpr.exp: (volatile unsigned short)
+PASS: gdb.base/cvexpr.exp: (volatile int)
+PASS: gdb.base/cvexpr.exp: (volatile signed int)
+PASS: gdb.base/cvexpr.exp: (volatile unsigned int)
+PASS: gdb.base/cvexpr.exp: (volatile long)
+PASS: gdb.base/cvexpr.exp: (volatile signed long)
+PASS: gdb.base/cvexpr.exp: (volatile unsigned long)
+PASS: gdb.base/cvexpr.exp: (volatile long long)
+PASS: gdb.base/cvexpr.exp: (volatile signed long long)
+PASS: gdb.base/cvexpr.exp: (volatile unsigned long long)
+PASS: gdb.base/cvexpr.exp: (volatile float)
+PASS: gdb.base/cvexpr.exp: (volatile double)
+PASS: gdb.base/cvexpr.exp: (const volatile int)
+PASS: gdb.base/cvexpr.exp: (volatile const int)
+PASS: gdb.base/cvexpr.exp: (const int volatile)
+PASS: gdb.base/cvexpr.exp: (volatile int const)
+PASS: gdb.base/cvexpr.exp: (int const volatile)
+PASS: gdb.base/cvexpr.exp: (int volatile const)
+PASS: gdb.base/cvexpr.exp: (const volatile int *)
+PASS: gdb.base/cvexpr.exp: (volatile const int *)
+PASS: gdb.base/cvexpr.exp: (const int volatile)
+PASS: gdb.base/cvexpr.exp: (volatile int const *)
+PASS: gdb.base/cvexpr.exp: (int const volatile *)
+PASS: gdb.base/cvexpr.exp: (int volatile const *)
+PASS: gdb.base/cvexpr.exp: (int * const volatile)
+PASS: gdb.base/cvexpr.exp: (int * volatile const)
+PASS: gdb.base/cvexpr.exp: (char const)
+PASS: gdb.base/cvexpr.exp: (signed char const)
+PASS: gdb.base/cvexpr.exp: (unsigned char const)
+PASS: gdb.base/cvexpr.exp: (short const)
+PASS: gdb.base/cvexpr.exp: (signed short const)
+PASS: gdb.base/cvexpr.exp: (unsigned short const)
+PASS: gdb.base/cvexpr.exp: (int const)
+PASS: gdb.base/cvexpr.exp: (signed int const)
+PASS: gdb.base/cvexpr.exp: (unsigned int const)
+PASS: gdb.base/cvexpr.exp: (long const)
+PASS: gdb.base/cvexpr.exp: (signed long const)
+PASS: gdb.base/cvexpr.exp: (unsigned long const)
+PASS: gdb.base/cvexpr.exp: (long long const)
+PASS: gdb.base/cvexpr.exp: (signed long long const)
+PASS: gdb.base/cvexpr.exp: (unsigned long long const)
+PASS: gdb.base/cvexpr.exp: (float const)
+PASS: gdb.base/cvexpr.exp: (double const)
+PASS: gdb.base/cvexpr.exp: (char volatile)
+PASS: gdb.base/cvexpr.exp: (signed char volatile)
+PASS: gdb.base/cvexpr.exp: (unsigned char volatile)
+PASS: gdb.base/cvexpr.exp: (short volatile)
+PASS: gdb.base/cvexpr.exp: (signed short volatile)
+PASS: gdb.base/cvexpr.exp: (unsigned short volatile)
+PASS: gdb.base/cvexpr.exp: (int volatile)
+PASS: gdb.base/cvexpr.exp: (signed int volatile)
+PASS: gdb.base/cvexpr.exp: (unsigned int volatile)
+PASS: gdb.base/cvexpr.exp: (long volatile)
+PASS: gdb.base/cvexpr.exp: (signed long volatile)
+PASS: gdb.base/cvexpr.exp: (unsigned long volatile)
+PASS: gdb.base/cvexpr.exp: (long long volatile)
+PASS: gdb.base/cvexpr.exp: (signed long long volatile)
+PASS: gdb.base/cvexpr.exp: (unsigned long long volatile)
+PASS: gdb.base/cvexpr.exp: (float volatile)
+PASS: gdb.base/cvexpr.exp: (double volatile)
+PASS: gdb.base/cvexpr.exp: (const enum misordered)
+PASS: gdb.base/cvexpr.exp: (enum misordered const)
+PASS: gdb.base/cvexpr.exp: (volatile enum misordered)
+PASS: gdb.base/cvexpr.exp: (enum misordered volatile)
+PASS: gdb.base/cvexpr.exp: (const int *)
+PASS: gdb.base/cvexpr.exp: (int const *)
+PASS: gdb.base/cvexpr.exp: (int * const)
+PASS: gdb.base/cvexpr.exp: (const int * const)
+PASS: gdb.base/cvexpr.exp: (int const * const)
+PASS: gdb.base/cvexpr.exp: (const int **)
+PASS: gdb.base/cvexpr.exp: (int const **)
+PASS: gdb.base/cvexpr.exp: (int ** const)
+PASS: gdb.base/cvexpr.exp: (const int * const *)
+PASS: gdb.base/cvexpr.exp: (int const * const *)
+PASS: gdb.base/cvexpr.exp: (const int * const * const)
+PASS: gdb.base/cvexpr.exp: (int const * const * const)
+PASS: gdb.base/cvexpr.exp: (const struct t_struct)
+PASS: gdb.base/cvexpr.exp: (const union t_union)
+PASS: gdb.base/cvexpr.exp: (struct t_struct const)
+PASS: gdb.base/cvexpr.exp: (union t_union const)
+PASS: gdb.base/cvexpr.exp: (const struct t_struct *)
+PASS: gdb.base/cvexpr.exp: (const union t_union *)
+PASS: gdb.base/cvexpr.exp: (struct t_struct const *)
+PASS: gdb.base/cvexpr.exp: (union t_union const *)
+PASS: gdb.base/cvexpr.exp: (struct t_struct * const)
+PASS: gdb.base/cvexpr.exp: (union t_union * const)
+PASS: gdb.base/cvexpr.exp: (const struct t_struct * const)
+PASS: gdb.base/cvexpr.exp: (const union t_union * const)
+PASS: gdb.base/cvexpr.exp: (struct t_struct const * const)
+PASS: gdb.base/cvexpr.exp: (union t_union const * const)
+Running ./gdb.base/dbx.exp ...
+PASS: gdb.base/dbx.exp: stop in main
+PASS: gdb.base/dbx.exp: status
+PASS: gdb.base/dbx.exp: stop at average.c:43
+PASS: gdb.base/dbx.exp: stop in average.c:43
+PASS: gdb.base/dbx.exp: stop at main
+PASS: gdb.base/dbx.exp: running to main
+PASS: gdb.base/dbx.exp: assign first
+PASS: gdb.base/dbx.exp: print first
+PASS: gdb.base/dbx.exp: whereis my_list
+PASS: gdb.base/dbx.exp: file average.c:1
+PASS: gdb.base/dbx.exp: cont 1
+PASS: gdb.base/dbx.exp: step
+XFAIL: gdb.base/dbx.exp: func sum
+PASS: gdb.base/dbx.exp: stop in sum
+PASS: gdb.base/dbx.exp: cont 2
+XFAIL: gdb.base/dbx.exp: func print_average
+Running ./gdb.base/debug-expr.exp ...
+PASS: gdb.base/debug-expr.exp: set variable array[0] = 0
+PASS: gdb.base/debug-expr.exp: set variable array[1] = 1
+PASS: gdb.base/debug-expr.exp: set variable array[2] = 2
+PASS: gdb.base/debug-expr.exp: set variable array[3] = 3
+PASS: gdb.base/debug-expr.exp: set debug expression 1
+PASS: gdb.base/debug-expr.exp: print /x {char[4]} array
+Running ./gdb.base/default.exp ...
+PASS: gdb.base/default.exp: add-symbol-file
+PASS: gdb.base/default.exp: append
+PASS: gdb.base/default.exp: append binary
+PASS: gdb.base/default.exp: append memory
+PASS: gdb.base/default.exp: append value
+PASS: gdb.base/default.exp: append binary memory
+PASS: gdb.base/default.exp: append binary value
+WARNING: Skipping backtrace and break tests because of GDB stub.
+PASS: gdb.base/default.exp: continue
+PASS: gdb.base/default.exp: continue "c" abbreviation
+PASS: gdb.base/default.exp: call
+PASS: gdb.base/default.exp: catch
+PASS: gdb.base/default.exp: cd
+PASS: gdb.base/default.exp: clear
+PASS: gdb.base/default.exp: commands
+PASS: gdb.base/default.exp: condition
+PASS: gdb.base/default.exp: core-file
+PASS: gdb.base/default.exp: delete "d" abbreviation
+PASS: gdb.base/default.exp: delete
+PASS: gdb.base/default.exp: define
+PASS: gdb.base/default.exp: delete breakpoints
+PASS: gdb.base/default.exp: delete display prompt
+PASS: gdb.base/default.exp: detach
+PASS: gdb.base/default.exp: directory prompt
+PASS: gdb.base/default.exp: disable "dis" abbreviation
+PASS: gdb.base/default.exp: disable "disa" abbreviation
+PASS: gdb.base/default.exp: disable
+PASS: gdb.base/default.exp: disable breakpoints
+PASS: gdb.base/default.exp: disable display
+PASS: gdb.base/default.exp: disassemble
+PASS: gdb.base/default.exp: display
+PASS: gdb.base/default.exp: do
+PASS: gdb.base/default.exp: document
+PASS: gdb.base/default.exp: down
+PASS: gdb.base/default.exp: down-silently
+PASS: gdb.base/default.exp: dump
+PASS: gdb.base/default.exp: dump binary
+PASS: gdb.base/default.exp: dump ihex
+PASS: gdb.base/default.exp: dump memory
+PASS: gdb.base/default.exp: dump srec
+PASS: gdb.base/default.exp: dump tekhex
+PASS: gdb.base/default.exp: dump value
+PASS: gdb.base/default.exp: dump binary memory
+PASS: gdb.base/default.exp: dump binary value
+PASS: gdb.base/default.exp: dump ihex memory
+PASS: gdb.base/default.exp: dump ihex value
+PASS: gdb.base/default.exp: dump srec memory
+PASS: gdb.base/default.exp: dump srec value
+PASS: gdb.base/default.exp: dump tekhex memory
+PASS: gdb.base/default.exp: dump tekhex value
+PASS: gdb.base/default.exp: echo
+PASS: gdb.base/default.exp: enable breakpoints delete
+PASS: gdb.base/default.exp: enable breakpoints once
+PASS: gdb.base/default.exp: enable breakpoints
+PASS: gdb.base/default.exp: enable delete
+PASS: gdb.base/default.exp: enable display
+PASS: gdb.base/default.exp: enable once
+PASS: gdb.base/default.exp: enable
+PASS: gdb.base/default.exp: exec-file
+PASS: gdb.base/default.exp: frame "f" abbreviation
+PASS: gdb.base/default.exp: frame
+PASS: gdb.base/default.exp: fg
+PASS: gdb.base/default.exp: file
+PASS: gdb.base/default.exp: finish
+PASS: gdb.base/default.exp: forward-search
+PASS: gdb.base/default.exp: gcore
+PASS: gdb.base/default.exp: generate-core-file
+PASS: gdb.base/default.exp: help "h" abbreviation
+PASS: gdb.base/default.exp: help
+PASS: gdb.base/default.exp: handle
+PASS: gdb.base/default.exp: info "i" abbreviation
+PASS: gdb.base/default.exp: info
+PASS: gdb.base/default.exp: ignore
+PASS: gdb.base/default.exp: info address
+PASS: gdb.base/default.exp: info all-registers
+PASS: gdb.base/default.exp: info args
+PASS: gdb.base/default.exp: info bogus-gdb-command
+PASS: gdb.base/default.exp: info breakpoints
+PASS: gdb.base/default.exp: info copying
+PASS: gdb.base/default.exp: info display
+PASS: gdb.base/default.exp: info frame "f" abbreviation
+PASS: gdb.base/default.exp: info frame
+PASS: gdb.base/default.exp: info files
+PASS: gdb.base/default.exp: info float
+PASS: gdb.base/default.exp: info functions
+PASS: gdb.base/default.exp: info locals
+PASS: gdb.base/default.exp: info program
+PASS: gdb.base/default.exp: info registers
+PASS: gdb.base/default.exp: info stack "s" abbreviation
+PASS: gdb.base/default.exp: info stack
+PASS: gdb.base/default.exp: info set
+PASS: gdb.base/default.exp: info symbol
+PASS: gdb.base/default.exp: info source
+PASS: gdb.base/default.exp: info sources
+PASS: gdb.base/default.exp: info target
+PASS: gdb.base/default.exp: info terminal
+PASS: gdb.base/default.exp: info threads
+PASS: gdb.base/default.exp: info types
+PASS: gdb.base/default.exp: info variables
+PASS: gdb.base/default.exp: info vector
+PASS: gdb.base/default.exp: info warranty
+PASS: gdb.base/default.exp: info watchpoints
+PASS: gdb.base/default.exp: inspect
+PASS: gdb.base/default.exp: jump
+PASS: gdb.base/default.exp: kill
+PASS: gdb.base/default.exp: list "l" abbreviation
+PASS: gdb.base/default.exp: list
+PASS: gdb.base/default.exp: load
+PASS: gdb.base/default.exp: next "n" abbreviation
+PASS: gdb.base/default.exp: next
+PASS: gdb.base/default.exp: nexti "ni" abbreviation
+PASS: gdb.base/default.exp: nexti
+PASS: gdb.base/default.exp: output
+PASS: gdb.base/default.exp: overlay
+PASS: gdb.base/default.exp: overlay on
+PASS: gdb.base/default.exp: overlay manual #1
+PASS: gdb.base/default.exp: overlay auto
+PASS: gdb.base/default.exp: overlay off
+PASS: gdb.base/default.exp: overlay list
+PASS: gdb.base/default.exp: overlay map #1
+PASS: gdb.base/default.exp: overlay unmap #1
+PASS: gdb.base/default.exp: overlay manual #2
+PASS: gdb.base/default.exp: overlay map #2
+PASS: gdb.base/default.exp: overlay unmap #2
+PASS: gdb.base/default.exp: print "p" abbreviation
+PASS: gdb.base/default.exp: print
+PASS: gdb.base/default.exp: printf
+PASS: gdb.base/default.exp: ptype
+PASS: gdb.base/default.exp: pwd
+PASS: gdb.base/default.exp: rbreak
+PASS: gdb.base/default.exp: restore
+PASS: gdb.base/default.exp: return
+PASS: gdb.base/default.exp: reverse-search
+PASS: gdb.base/default.exp: step "s" abbreviation #1
+PASS: gdb.base/default.exp: step #1
+PASS: gdb.base/default.exp: search
+PASS: gdb.base/default.exp: section
+PASS: gdb.base/default.exp: set annotate
+PASS: gdb.base/default.exp: set args
+PASS: gdb.base/default.exp: set check "c" abbreviation
+PASS: gdb.base/default.exp: set check "ch" abbreviation
+PASS: gdb.base/default.exp: set check "check" abbreviation
+PASS: gdb.base/default.exp: set check range
+PASS: gdb.base/default.exp: set check type
+PASS: gdb.base/default.exp: set complaints
+PASS: gdb.base/default.exp: set confirm
+PASS: gdb.base/default.exp: set environment
+PASS: gdb.base/default.exp: set height
+PASS: gdb.base/default.exp: set history expansion
+PASS: gdb.base/default.exp: set history filename
+PASS: gdb.base/default.exp: set history save
+PASS: gdb.base/default.exp: set history size
+PASS: gdb.base/default.exp: set history
+PASS: gdb.base/default.exp: set language
+PASS: gdb.base/default.exp: set listsize
+PASS: gdb.base/default.exp: set print "p" abbreviation
+PASS: gdb.base/default.exp: set print "pr" abbreviation
+PASS: gdb.base/default.exp: set print
+PASS: gdb.base/default.exp: set print address
+PASS: gdb.base/default.exp: set print array
+PASS: gdb.base/default.exp: set print asm-demangle
+PASS: gdb.base/default.exp: set print demangle
+PASS: gdb.base/default.exp: set print elements
+PASS: gdb.base/default.exp: set print object
+PASS: gdb.base/default.exp: set print pretty
+PASS: gdb.base/default.exp: set print sevenbit-strings
+PASS: gdb.base/default.exp: set print union
+PASS: gdb.base/default.exp: set print vtbl
+PASS: gdb.base/default.exp: set radix
+PASS: gdb.base/default.exp: set variable
+PASS: gdb.base/default.exp: set verbose
+PASS: gdb.base/default.exp: set width
+PASS: gdb.base/default.exp: set write
+PASS: gdb.base/default.exp: set
+PASS: gdb.base/default.exp: shell echo Hi dad!
+PASS: gdb.base/default.exp: show annotate
+PASS: gdb.base/default.exp: show args
+PASS: gdb.base/default.exp: show check "c" abbreviation
+PASS: gdb.base/default.exp: show check "ch" abbreviation
+PASS: gdb.base/default.exp: show check "check" abbreviation
+PASS: gdb.base/default.exp: show check range
+PASS: gdb.base/default.exp: show check type
+PASS: gdb.base/default.exp: show commands
+PASS: gdb.base/default.exp: show complaints
+PASS: gdb.base/default.exp: show confirm
+PASS: gdb.base/default.exp: show convenience
+PASS: gdb.base/default.exp: show directories
+PASS: gdb.base/default.exp: show editing
+PASS: gdb.base/default.exp: show height
+PASS: gdb.base/default.exp: show history expansion
+PASS: gdb.base/default.exp: show history filename
+PASS: gdb.base/default.exp: show history save
+PASS: gdb.base/default.exp: show history size
+PASS: gdb.base/default.exp: show history
+PASS: gdb.base/default.exp: show language
+PASS: gdb.base/default.exp: show listsize
+PASS: gdb.base/default.exp: show p
+PASS: gdb.base/default.exp: show pr
+PASS: gdb.base/default.exp: show print
+PASS: gdb.base/default.exp: show paths
+PASS: gdb.base/default.exp: show print address
+PASS: gdb.base/default.exp: show print array
+PASS: gdb.base/default.exp: show print asm-demangle
+PASS: gdb.base/default.exp: show print demangle
+PASS: gdb.base/default.exp: show print elements
+PASS: gdb.base/default.exp: show print object
+PASS: gdb.base/default.exp: show print pretty
+PASS: gdb.base/default.exp: show print sevenbit-strings
+PASS: gdb.base/default.exp: show print union
+PASS: gdb.base/default.exp: show print vtbl
+PASS: gdb.base/default.exp: show prompt
+PASS: gdb.base/default.exp: show radix
+PASS: gdb.base/default.exp: show user
+PASS: gdb.base/default.exp: show values
+PASS: gdb.base/default.exp: show verbose
+PASS: gdb.base/default.exp: show version
+PASS: gdb.base/default.exp: show width
+PASS: gdb.base/default.exp: show write
+PASS: gdb.base/default.exp: show
+PASS: gdb.base/default.exp: stepi "si" abbreviation
+PASS: gdb.base/default.exp: stepi
+PASS: gdb.base/default.exp: signal
+PASS: gdb.base/default.exp: source
+PASS: gdb.base/default.exp: step "s" abbreviation #2
+PASS: gdb.base/default.exp: step #2
+PASS: gdb.base/default.exp: symbol-file
+PASS: gdb.base/default.exp: target child
+PASS: gdb.base/default.exp: target procfs
+PASS: gdb.base/default.exp: target core
+PASS: gdb.base/default.exp: target exec
+PASS: gdb.base/default.exp: target remote
+PASS: gdb.base/default.exp: target
+PASS: gdb.base/default.exp: tbreak
+PASS: gdb.base/default.exp: thread
+PASS: gdb.base/default.exp: thread apply
+PASS: gdb.base/default.exp: thread find
+PASS: gdb.base/default.exp: thread name
+PASS: gdb.base/default.exp: tty
+PASS: gdb.base/default.exp: until "u" abbreviation
+PASS: gdb.base/default.exp: until
+PASS: gdb.base/default.exp: undisplay prompt
+PASS: gdb.base/default.exp: unset environment prompt
+PASS: gdb.base/default.exp: unset
+PASS: gdb.base/default.exp: up-silently
+PASS: gdb.base/default.exp: watch
+PASS: gdb.base/default.exp: whatis
+PASS: gdb.base/default.exp: where
+PASS: gdb.base/default.exp: x
+Running ./gdb.base/define.exp ...
+PASS: gdb.base/define.exp: define user command: nextwhere
+PASS: gdb.base/define.exp: use user command: nextwhere
+PASS: gdb.base/define.exp: define user command: nextwh
+PASS: gdb.base/define.exp: redefine user command aborted: nextwhere
+PASS: gdb.base/define.exp: redefine user command: nextwhere
+PASS: gdb.base/define.exp: redocumenting builtin command disallowed
+PASS: gdb.base/define.exp: document user command: nextwhere
+PASS: gdb.base/define.exp: re-document user command: nextwhere
+PASS: gdb.base/define.exp: help user command: nextwhere
+PASS: gdb.base/define.exp: set up whitespace in help string
+PASS: gdb.base/define.exp: preserve whitespace in help string
+PASS: gdb.base/define.exp: define user command: ifnospace
+PASS: gdb.base/define.exp: test ifnospace is parsed correctly
+PASS: gdb.base/define.exp: define user command: whilenospace
+PASS: gdb.base/define.exp: test whilenospace is parsed correctly
+PASS: gdb.base/define.exp: define user command: user-bt
+PASS: gdb.base/define.exp: define hook-stop command
+PASS: gdb.base/define.exp: use hook-stop command
+PASS: gdb.base/define.exp: define hook undefined command aborted: bar
+PASS: gdb.base/define.exp: define hook undefined command: bar
+PASS: gdb.base/define.exp: define target testsuite
+PASS: gdb.base/define.exp: document target testsuite
+PASS: gdb.base/define.exp: help target
+PASS: gdb.base/define.exp: target testsuite
+PASS: gdb.base/define.exp: show user target testsuite
+PASS: gdb.base/define.exp: define target hook-testsuite
+PASS: gdb.base/define.exp: define target hookpost-testsuite
+PASS: gdb.base/define.exp: target testsuite with hooks
+PASS: gdb.base/define.exp: set gdb_prompt
+PASS: gdb.base/define.exp: reset gdb_prompt
+Running ./gdb.base/del.exp ...
+PASS: gdb.base/del.exp: Remove all breakpoints (del)
+PASS: gdb.base/del.exp: info break after removing break on main
+PASS: gdb.base/del.exp: breakpoint insertion (del)
+PASS: gdb.base/del.exp: Remove last breakpoint (del)
+PASS: gdb.base/del.exp: info break after removing break on main (del)
+PASS: gdb.base/del.exp: Remove all breakpoints (d)
+PASS: gdb.base/del.exp: info break after removing break on main
+PASS: gdb.base/del.exp: breakpoint insertion (d)
+PASS: gdb.base/del.exp: Remove last breakpoint (d)
+PASS: gdb.base/del.exp: info break after removing break on main (d)
+Running ./gdb.base/detach.exp ...
+Running ./gdb.base/dfp-exprs.exp ...
+PASS: gdb.base/dfp-exprs.exp: p 1.2df
+PASS: gdb.base/dfp-exprs.exp: p -1.2df
+PASS: gdb.base/dfp-exprs.exp: p 1.234567df
+PASS: gdb.base/dfp-exprs.exp: p -1.234567df
+PASS: gdb.base/dfp-exprs.exp: p 1234567.df
+PASS: gdb.base/dfp-exprs.exp: p -1234567.df
+PASS: gdb.base/dfp-exprs.exp: p 1.2E1df
+PASS: gdb.base/dfp-exprs.exp: p 1.2E10df
+PASS: gdb.base/dfp-exprs.exp: p 1.2E-10df
+PASS: gdb.base/dfp-exprs.exp: p 1.2E96df
+PASS: gdb.base/dfp-exprs.exp: p 1.2dd
+PASS: gdb.base/dfp-exprs.exp: p -1.2dd
+PASS: gdb.base/dfp-exprs.exp: p 1.234567890123456dd
+PASS: gdb.base/dfp-exprs.exp: p -1.234567890123456dd
+PASS: gdb.base/dfp-exprs.exp: p 1234567890123456.dd
+PASS: gdb.base/dfp-exprs.exp: p -1234567890123456.dd
+PASS: gdb.base/dfp-exprs.exp: p 1.2E1dd
+PASS: gdb.base/dfp-exprs.exp: p 1.2E10dd
+PASS: gdb.base/dfp-exprs.exp: p 1.2E-10dd
+PASS: gdb.base/dfp-exprs.exp: p 1.2E384dd
+PASS: gdb.base/dfp-exprs.exp: p 1.2dl
+PASS: gdb.base/dfp-exprs.exp: p -1.2dl
+PASS: gdb.base/dfp-exprs.exp: p 1.234567890123456789012345678901234dl
+PASS: gdb.base/dfp-exprs.exp: p -1.234567890123456789012345678901234dl
+PASS: gdb.base/dfp-exprs.exp: p 1234567890123456789012345678901234.dl
+PASS: gdb.base/dfp-exprs.exp: p -1234567890123456789012345678901234.dl
+PASS: gdb.base/dfp-exprs.exp: p 1.2E1dl
+PASS: gdb.base/dfp-exprs.exp: p 1.2E10dl
+PASS: gdb.base/dfp-exprs.exp: p 1.2E-10dl
+PASS: gdb.base/dfp-exprs.exp: p 1.2E6144dl
+PASS: gdb.base/dfp-exprs.exp: p 1.4df + 1.2df
+PASS: gdb.base/dfp-exprs.exp: p 1.4df - 1.2df
+PASS: gdb.base/dfp-exprs.exp: p 1.4df * 1.2df
+PASS: gdb.base/dfp-exprs.exp: p 1.4df / 1.2df
+PASS: gdb.base/dfp-exprs.exp: p 1.4dd + 1.2dd
+PASS: gdb.base/dfp-exprs.exp: p 1.4dd - 1.2dd
+PASS: gdb.base/dfp-exprs.exp: p 1.4dd * 1.2dd
+PASS: gdb.base/dfp-exprs.exp: p 1.4dd / 1.2dd
+PASS: gdb.base/dfp-exprs.exp: p 1.4dl + 1.2dl
+PASS: gdb.base/dfp-exprs.exp: p 1.4dl - 1.2dl
+PASS: gdb.base/dfp-exprs.exp: p 1.4dl * 1.2dl
+PASS: gdb.base/dfp-exprs.exp: p 1.4dl / 1.2dl
+PASS: gdb.base/dfp-exprs.exp: ptype 2.df + 2.df
+PASS: gdb.base/dfp-exprs.exp: ptype 2.dd + 2.dd
+PASS: gdb.base/dfp-exprs.exp: ptype 2.dl + 2.dl
+PASS: gdb.base/dfp-exprs.exp: p 2.1df + 2.7dd
+PASS: gdb.base/dfp-exprs.exp: p 2.1dd + 2.7df
+PASS: gdb.base/dfp-exprs.exp: p 2.6df + 2.7dl
+PASS: gdb.base/dfp-exprs.exp: p 2.6dl + 2.7df
+PASS: gdb.base/dfp-exprs.exp: p 2.3dd + 2.2dl
+PASS: gdb.base/dfp-exprs.exp: p 2.3dl + 2.2dd
+PASS: gdb.base/dfp-exprs.exp: ptype 2.df + 2.dd
+PASS: gdb.base/dfp-exprs.exp: ptype 2.df + 2.dl
+PASS: gdb.base/dfp-exprs.exp: ptype 2.dd + 2.dl
+PASS: gdb.base/dfp-exprs.exp: p 1.2df + 1
+PASS: gdb.base/dfp-exprs.exp: p 2 + 1.7dd
+PASS: gdb.base/dfp-exprs.exp: p 3 + 2.1dl
+PASS: gdb.base/dfp-exprs.exp: ptype 1.2df + 1
+PASS: gdb.base/dfp-exprs.exp: ptype 2 + 1.7dd
+PASS: gdb.base/dfp-exprs.exp: ptype 3 + 2.1dl
+PASS: gdb.base/dfp-exprs.exp: p 1.2df + 2ll
+PASS: gdb.base/dfp-exprs.exp: p 1.2df + 1.2f
+PASS: gdb.base/dfp-exprs.exp: p !0.df
+PASS: gdb.base/dfp-exprs.exp: p !0.dd
+PASS: gdb.base/dfp-exprs.exp: p !0.dl
+PASS: gdb.base/dfp-exprs.exp: p !0.5df
+PASS: gdb.base/dfp-exprs.exp: p !0.5dd
+PASS: gdb.base/dfp-exprs.exp: p !0.5dl
+PASS: gdb.base/dfp-exprs.exp: p 1.2df == 1.2df
+PASS: gdb.base/dfp-exprs.exp: p 1.2df == 1.2dd
+PASS: gdb.base/dfp-exprs.exp: p 1.2df == 1.2dl
+PASS: gdb.base/dfp-exprs.exp: p 1.2dd == 1.2df
+PASS: gdb.base/dfp-exprs.exp: p 1.2dd == 1.2dl
+PASS: gdb.base/dfp-exprs.exp: p 1.2dl == 1.2df
+PASS: gdb.base/dfp-exprs.exp: p 1.2dl == 1.2dd
+PASS: gdb.base/dfp-exprs.exp: p 1.2df == 1.3df
+PASS: gdb.base/dfp-exprs.exp: p 1.2df == 1.3dd
+PASS: gdb.base/dfp-exprs.exp: p 1.2df == 1.3dl
+PASS: gdb.base/dfp-exprs.exp: p 1.2dd == 1.3df
+PASS: gdb.base/dfp-exprs.exp: p 1.2dd == 1.3dl
+PASS: gdb.base/dfp-exprs.exp: p 1.2dl == 1.3df
+PASS: gdb.base/dfp-exprs.exp: p 1.2dl == 1.3dd
+PASS: gdb.base/dfp-exprs.exp: p +1.2df
+PASS: gdb.base/dfp-exprs.exp: p +1.2dd
+PASS: gdb.base/dfp-exprs.exp: p +1.2dl
+PASS: gdb.base/dfp-exprs.exp: p 1.2df < 1.3df
+PASS: gdb.base/dfp-exprs.exp: p 1.2df < 1.3dd
+PASS: gdb.base/dfp-exprs.exp: p 1.2dl < 1.3df
+PASS: gdb.base/dfp-exprs.exp: p 1.2dd < 1.3dd
+PASS: gdb.base/dfp-exprs.exp: p 1.2dd < 1.3dl
+PASS: gdb.base/dfp-exprs.exp: p 1.2dl < 1.3dl
+PASS: gdb.base/dfp-exprs.exp: p 1.2dl < 1.3df
+PASS: gdb.base/dfp-exprs.exp: p 1.2df > 1
+PASS: gdb.base/dfp-exprs.exp: p 1.2dl > 2
+PASS: gdb.base/dfp-exprs.exp: p 2 > 1.2dd
+PASS: gdb.base/dfp-exprs.exp: p 2 > 3.1dl
+PASS: gdb.base/dfp-exprs.exp: p (float) -0.1df
+PASS: gdb.base/dfp-exprs.exp: p (int) 8.3dd
+PASS: gdb.base/dfp-exprs.exp: p (_Decimal64) 3.1
+PASS: gdb.base/dfp-exprs.exp: p (_Decimal128) 3.7df
+PASS: gdb.base/dfp-exprs.exp: p (_Decimal32) 4
+Running ./gdb.base/dfp-test.exp ...
+PASS: gdb.base/dfp-test.exp: get integer valueof "sizeof (long)" (8)
+PASS: gdb.base/dfp-test.exp: next after initializing d32
+PASS: gdb.base/dfp-test.exp: d32 is initialized to 1.2345
+PASS: gdb.base/dfp-test.exp: next after assigning builtin infinity to d32
+PASS: gdb.base/dfp-test.exp: d32 is positive Infinity
+PASS: gdb.base/dfp-test.exp: next after assigning negative builtin infinity to d32
+PASS: gdb.base/dfp-test.exp: d32 is negative Infinity
+PASS: gdb.base/dfp-test.exp: next after assigning builtin NaN to d32
+PASS: gdb.base/dfp-test.exp: d32 is NaN
+PASS: gdb.base/dfp-test.exp: p d32=123.45df
+PASS: gdb.base/dfp-test.exp: p d32=12345.df
+PASS: gdb.base/dfp-test.exp: p d32=12345.67df
+PASS: gdb.base/dfp-test.exp: p d32=1234567.df
+PASS: gdb.base/dfp-test.exp: p d32=1.234567E0df
+PASS: gdb.base/dfp-test.exp: p d32=1.234567E10df
+PASS: gdb.base/dfp-test.exp: p d32=1.234567E+96df
+PASS: gdb.base/dfp-test.exp: p d32=9.999999E96df
+PASS: gdb.base/dfp-test.exp: p d32=1.0E-95df
+PASS: gdb.base/dfp-test.exp: p d32=1.E-101df
+PASS: gdb.base/dfp-test.exp: p d32=0.000001E-95df
+PASS: gdb.base/dfp-test.exp: 1.2345678 is rounded to 1.234568
+PASS: gdb.base/dfp-test.exp: 1.0E-101 is rounded to 1E-101
+PASS: gdb.base/dfp-test.exp: 1.234567E+97 is Infinity
+PASS: gdb.base/dfp-test.exp: 12345. is a valid number
+PASS: gdb.base/dfp-test.exp: 12345 is an invalid number
+PASS: gdb.base/dfp-test.exp: 1.23E is an invalid number
+PASS: gdb.base/dfp-test.exp: 1.23E45A is an invalid number
+PASS: gdb.base/dfp-test.exp: next after initializing d64
+PASS: gdb.base/dfp-test.exp: d64 is initialized to 1.2345
+PASS: gdb.base/dfp-test.exp: next after assigning builtin infinity to d64
+PASS: gdb.base/dfp-test.exp: d64 is positive Infinity
+PASS: gdb.base/dfp-test.exp: next after assigning negative builtin infinity to d64
+PASS: gdb.base/dfp-test.exp: d64 is negative Infinity
+PASS: gdb.base/dfp-test.exp: next after assigning builtin NaN to d64
+PASS: gdb.base/dfp-test.exp: d64 is NaN
+PASS: gdb.base/dfp-test.exp: p d64=123.45dd
+PASS: gdb.base/dfp-test.exp: p d64=12345.dd
+PASS: gdb.base/dfp-test.exp: p d64=12345.67dd
+PASS: gdb.base/dfp-test.exp: p d64=1.234567890123456dd
+PASS: gdb.base/dfp-test.exp: p d64=1.234567890123456E10dd
+PASS: gdb.base/dfp-test.exp: p d64=1.234567890123456E100dd
+PASS: gdb.base/dfp-test.exp: p d64=1.234567890123456E384dd
+PASS: gdb.base/dfp-test.exp: p d64=9.999999999999999E384dd
+PASS: gdb.base/dfp-test.exp: p d64=1.E-383dd
+PASS: gdb.base/dfp-test.exp: p d64=1.E-398dd
+PASS: gdb.base/dfp-test.exp: p d64=0.000000000000001E-383dd
+PASS: gdb.base/dfp-test.exp: 1.2345678901234567 is rounded to 1.234567890123457
+PASS: gdb.base/dfp-test.exp: d64=9.9999999999999999E384 is Infinity
+PASS: gdb.base/dfp-test.exp: d64=1.234567890123456E385 is Infinity
+PASS: gdb.base/dfp-test.exp: 12345dd is an invalid number
+PASS: gdb.base/dfp-test.exp: 1.23E is an invalid number
+PASS: gdb.base/dfp-test.exp: 1.23E45A is an invalid number
+PASS: gdb.base/dfp-test.exp: next after initializing d128
+PASS: gdb.base/dfp-test.exp: d128 is initialized to 1.2345
+PASS: gdb.base/dfp-test.exp: p d128=123.45dl
+PASS: gdb.base/dfp-test.exp: p d128=12345.dl
+PASS: gdb.base/dfp-test.exp: p d128=12345.67dl
+PASS: gdb.base/dfp-test.exp: p d128=1.234567890123456789012345678901234dl
+PASS: gdb.base/dfp-test.exp: p d128=1.234567890123456E10dl
+PASS: gdb.base/dfp-test.exp: p d128=1.234567890123456E100dl
+PASS: gdb.base/dfp-test.exp: p d128=1.234567890123456E1000dl
+PASS: gdb.base/dfp-test.exp: p d128=9.999999999999999999999999999999999E6144dl
+PASS: gdb.base/dfp-test.exp: p d128=1.E-6143dl
+PASS: gdb.base/dfp-test.exp: p d128=1.E-6176dl
+PASS: gdb.base/dfp-test.exp: p d128=0.000000000000000000000000000000001E-6143dl
+PASS: gdb.base/dfp-test.exp: 1.2345678901234567890123456789012345 is rounded to 1.234567890123456789012345678901234
+PASS: gdb.base/dfp-test.exp: d128=1.234567890123456E6145 is Infinity
+PASS: gdb.base/dfp-test.exp: 12345dl is an invalid number
+PASS: gdb.base/dfp-test.exp: 1.23E is an invalid number
+PASS: gdb.base/dfp-test.exp: 1.23E45A is an invalid number
+PASS: gdb.base/dfp-test.exp: next after assigning builtin infinity to d128
+PASS: gdb.base/dfp-test.exp: d128 is positive Infinity
+PASS: gdb.base/dfp-test.exp: next after assigning negative builtin infinity to d128
+PASS: gdb.base/dfp-test.exp: d128 is negative Infinity
+PASS: gdb.base/dfp-test.exp: next after assigning builtin NaN to d128
+PASS: gdb.base/dfp-test.exp: d128 is NaN
+PASS: gdb.base/dfp-test.exp: continue to breakpoint: entry to arg0_32
+PASS: gdb.base/dfp-test.exp: backtrace at arg0_32
+PASS: gdb.base/dfp-test.exp: continue to breakpoint: entry to arg0_64
+PASS: gdb.base/dfp-test.exp: backtrace at arg0_64
+PASS: gdb.base/dfp-test.exp: continue to breakpoint: entry to arg0_128
+PASS: gdb.base/dfp-test.exp: backtrace at arg0_128
+PASS: gdb.base/dfp-test.exp: Call function with correct _Decimal32 arguments.
+PASS: gdb.base/dfp-test.exp: Backtrace function with correct _Decimal32 arguments.
+PASS: gdb.base/dfp-test.exp: Correct _Decimal32 return value from called function.
+PASS: gdb.base/dfp-test.exp: Call function with correct _Decimal64 arguments.
+PASS: gdb.base/dfp-test.exp: Backtrace function with correct _Decimal64 arguments.
+PASS: gdb.base/dfp-test.exp: Correct _Decimal64 return value from called function.
+PASS: gdb.base/dfp-test.exp: Call function with correct _Decimal128 arguments.
+PASS: gdb.base/dfp-test.exp: Backtrace function with correct _Decimal128 arguments.
+PASS: gdb.base/dfp-test.exp: Correct _Decimal128 return value from called function.
+PASS: gdb.base/dfp-test.exp: Call function with mixed decimal float arguments TEST.
+PASS: gdb.base/dfp-test.exp: Call function with mixed decimal float arguments.
+PASS: gdb.base/dfp-test.exp: Call function with many _Decimal32 arguments.
+PASS: gdb.base/dfp-test.exp: Call function with many _Decimal64 arguments.
+PASS: gdb.base/dfp-test.exp: Call function with many _Decimal128 arguments.
+PASS: gdb.base/dfp-test.exp: Call function with many mixed decimal float arguments.
+PASS: gdb.base/dfp-test.exp: continue to breakpoint: Setting a decimal struct
+PASS: gdb.base/dfp-test.exp: print ds.dec32
+PASS: gdb.base/dfp-test.exp: print ds.dec64
+PASS: gdb.base/dfp-test.exp: print ds.dec128
+PASS: gdb.base/dfp-test.exp: print d32 + ds.dec32
+PASS: gdb.base/dfp-test.exp: print d64 + ds.dec64
+PASS: gdb.base/dfp-test.exp: print d128 + ds.dec128
+PASS: gdb.base/dfp-test.exp: ptype d64 + ds.dec32
+PASS: gdb.base/dfp-test.exp: ptype d128 + ds.dec32
+PASS: gdb.base/dfp-test.exp: ptype d128 + ds.dec64
+PASS: gdb.base/dfp-test.exp: p d32 + 1
+PASS: gdb.base/dfp-test.exp: p 2 + d64
+PASS: gdb.base/dfp-test.exp: p ds.int4 + d128
+PASS: gdb.base/dfp-test.exp: ptype d32 + 1
+PASS: gdb.base/dfp-test.exp: ptype ds.int4 + d128
+PASS: gdb.base/dfp-test.exp: p !d32
+PASS: gdb.base/dfp-test.exp: p !d64
+PASS: gdb.base/dfp-test.exp: p !d128
+PASS: gdb.base/dfp-test.exp: p +d32
+PASS: gdb.base/dfp-test.exp: p +d64
+PASS: gdb.base/dfp-test.exp: p +d128
+PASS: gdb.base/dfp-test.exp: p d64 == d128
+PASS: gdb.base/dfp-test.exp: p d128 == ds.dec32
+PASS: gdb.base/dfp-test.exp: p d128 == d32
+PASS: gdb.base/dfp-test.exp: p ds.dec32 == ds.dec64
+PASS: gdb.base/dfp-test.exp: p d32 < ds.dec32
+PASS: gdb.base/dfp-test.exp: p d64 < ds.dec64
+PASS: gdb.base/dfp-test.exp: p d128 < ds.dec128
+PASS: gdb.base/dfp-test.exp: p ds.dec32 < d32
+PASS: gdb.base/dfp-test.exp: p d64 > ds.dec64
+PASS: gdb.base/dfp-test.exp: p ds.dec128 > d128
+PASS: gdb.base/dfp-test.exp: p d32 < ds.int4
+PASS: gdb.base/dfp-test.exp: p ds.int4 > d32
+PASS: gdb.base/dfp-test.exp: p ds.dec32 < ds.int4
+PASS: gdb.base/dfp-test.exp: p ds.int4 > ds.dec64
+PASS: gdb.base/dfp-test.exp: p ds.dec128 > ds.int4
+PASS: gdb.base/dfp-test.exp: p d32 + ds.long8
+PASS: gdb.base/dfp-test.exp: p d64 + ds.float4
+PASS: gdb.base/dfp-test.exp: p ds.double8 + d128
+PASS: gdb.base/dfp-test.exp: print ds.dec32=d32
+PASS: gdb.base/dfp-test.exp: print ds.dec64=d64
+PASS: gdb.base/dfp-test.exp: print ds.dec128=d128
+PASS: gdb.base/dfp-test.exp: print ds.dec32 = -d32
+PASS: gdb.base/dfp-test.exp: print ds.dec64 = -d64
+PASS: gdb.base/dfp-test.exp: print ds.dec128 = -d128
+PASS: gdb.base/dfp-test.exp: print ds.double8 = ds.dec64
+PASS: gdb.base/dfp-test.exp: print ds.dec64 = ds.float4
+PASS: gdb.base/dfp-test.exp: print ds.dec128 = -ds.double8
+PASS: gdb.base/dfp-test.exp: print ds.dec128 = ds.dec32
+PASS: gdb.base/dfp-test.exp: print ds.dec32 = ds.int4
+PASS: gdb.base/dfp-test.exp: print ds.int4 = 7.3dl
+Running ./gdb.base/disabled-location.exp ...
+PASS: gdb.base/disabled-location.exp: setting breakpoint on function
+PASS: gdb.base/disabled-location.exp: disable location
+PASS: gdb.base/disabled-location.exp: step doesn't trip on disabled location
+Running ./gdb.base/disasm-end-cu.exp ...
+PASS: gdb.base/disasm-end-cu.exp: get hexadecimal valueof "&main"
+PASS: gdb.base/disasm-end-cu.exp: get hexadecimal valueof "&dummy_3"
+PASS: gdb.base/disasm-end-cu.exp: disassemble command returned some output
+Running ./gdb.base/display.exp ...
+PASS: gdb.base/display.exp: break do_loops
+PASS: gdb.base/display.exp: get to do_loops
+PASS: gdb.base/display.exp: set watch
+PASS: gdb.base/display.exp: break loop end
+PASS: gdb.base/display.exp: inf disp
+PASS: gdb.base/display.exp: display i
+PASS: gdb.base/display.exp: display j
+PASS: gdb.base/display.exp: display &k
+PASS: gdb.base/display.exp: display/f f
+PASS: gdb.base/display.exp: display/s &sum
+PASS: gdb.base/display.exp: first disp
+PASS: gdb.base/display.exp: second disp
+PASS: gdb.base/display.exp: catch err
+PASS: gdb.base/display.exp: disab disp 1
+PASS: gdb.base/display.exp: disab disp 2
+PASS: gdb.base/display.exp: re-enab
+PASS: gdb.base/display.exp: re-enab of enab
+PASS: gdb.base/display.exp: undisp
+PASS: gdb.base/display.exp: info disp
+PASS: gdb.base/display.exp: next hit
+PASS: gdb.base/display.exp: undisp all
+PASS: gdb.base/display.exp: disp *p_i
+PASS: gdb.base/display.exp: p p_i = 0x0
+PASS: gdb.base/display.exp: display bad address
+PASS: gdb.base/display.exp: p p_i = &i
+PASS: gdb.base/display.exp: display good address
+PASS: gdb.base/display.exp: undisp all again
+PASS: gdb.base/display.exp: disab 3
+PASS: gdb.base/display.exp: watch off
+PASS: gdb.base/display.exp: finish
+PASS: gdb.base/display.exp: step
+PASS: gdb.base/display.exp: tbreak in do_vars
+PASS: gdb.base/display.exp: cont
+PASS: gdb.base/display.exp: printf
+PASS: gdb.base/display.exp: printf %d
+PASS: gdb.base/display.exp: printf "%d
+PASS: gdb.base/display.exp: printf "%d%d",i
+PASS: gdb.base/display.exp: printf "\\!\a\f\r\t\v\b\n"
+PASS: gdb.base/display.exp: re-set term
+PASS: gdb.base/display.exp: printf "\w"
+PASS: gdb.base/display.exp: printf "%d" j
+PASS: gdb.base/display.exp: printf "%p\n", 0
+PASS: gdb.base/display.exp: printf "%p\n", 1
+PASS: gdb.base/display.exp: print/z j
+PASS: gdb.base/display.exp: debug test output 1
+PASS: gdb.base/display.exp: debug test output 1a
+PASS: gdb.base/display.exp: debug test output 2
+PASS: gdb.base/display.exp: debug test output 2a
+PASS: gdb.base/display.exp: debug test output 3
+PASS: gdb.base/display.exp: x/0 j
+PASS: gdb.base/display.exp: print/0 j
+PASS: gdb.base/display.exp: ignored s
+PASS: gdb.base/display.exp: no i
+PASS: gdb.base/display.exp: print/a &sum
+PASS: gdb.base/display.exp: print/a main+4
+PASS: gdb.base/display.exp: print/a $pc
+PASS: gdb.base/display.exp: print/a &&j
+Running ./gdb.base/disp-step-syscall.exp ...
+PASS: gdb.base/disp-step-syscall.exp: fork: delete break 1
+PASS: gdb.base/disp-step-syscall.exp: fork: break marker
+PASS: gdb.base/disp-step-syscall.exp: fork: set displaced-stepping off
+PASS: gdb.base/disp-step-syscall.exp: fork: break fork
+PASS: gdb.base/disp-step-syscall.exp: fork: continue to fork (1st time)
+PASS: gdb.base/disp-step-syscall.exp: fork: continue to fork (2nd time)
+PASS: gdb.base/disp-step-syscall.exp: fork: display/i $pc
+PASS: gdb.base/disp-step-syscall.exp: fork: get hexadecimal valueof "$pc"
+PASS: gdb.base/disp-step-syscall.exp: fork: stepi fork insn
+PASS: gdb.base/disp-step-syscall.exp: fork: get hexadecimal valueof "$pc"
+PASS: gdb.base/disp-step-syscall.exp: fork: continue to fork (3rd time)
+PASS: gdb.base/disp-step-syscall.exp: fork: break on syscall insns
+PASS: gdb.base/disp-step-syscall.exp: fork: delete break fork
+PASS: gdb.base/disp-step-syscall.exp: fork: continue to syscall insn fork
+PASS: gdb.base/disp-step-syscall.exp: fork: set displaced-stepping on
+PASS: gdb.base/disp-step-syscall.exp: fork: single step over fork
+PASS: gdb.base/disp-step-syscall.exp: fork: get hexadecimal valueof "$pc"
+PASS: gdb.base/disp-step-syscall.exp: fork: single step over fork final pc
+PASS: gdb.base/disp-step-syscall.exp: fork: delete break fork insn
+PASS: gdb.base/disp-step-syscall.exp: fork: continue to marker (fork)
+PASS: gdb.base/disp-step-syscall.exp: vfork: delete break 1
+PASS: gdb.base/disp-step-syscall.exp: vfork: break marker
+PASS: gdb.base/disp-step-syscall.exp: vfork: set displaced-stepping off
+PASS: gdb.base/disp-step-syscall.exp: vfork: break vfork
+PASS: gdb.base/disp-step-syscall.exp: vfork: continue to vfork (1st time)
+PASS: gdb.base/disp-step-syscall.exp: vfork: continue to vfork (2nd time)
+PASS: gdb.base/disp-step-syscall.exp: vfork: display/i $pc
+PASS: gdb.base/disp-step-syscall.exp: vfork: get hexadecimal valueof "$pc"
+PASS: gdb.base/disp-step-syscall.exp: vfork: stepi vfork insn
+PASS: gdb.base/disp-step-syscall.exp: vfork: get hexadecimal valueof "$pc"
+PASS: gdb.base/disp-step-syscall.exp: vfork: continue to vfork (3rd time)
+PASS: gdb.base/disp-step-syscall.exp: vfork: break on syscall insns
+PASS: gdb.base/disp-step-syscall.exp: vfork: delete break vfork
+PASS: gdb.base/disp-step-syscall.exp: vfork: continue to syscall insn vfork
+PASS: gdb.base/disp-step-syscall.exp: vfork: set displaced-stepping on
+KFAIL: gdb.base/disp-step-syscall.exp: vfork: single step over vfork (PRMS: server/13796)
+Running ./gdb.base/dmsym.exp ...
+PASS: gdb.base/dmsym.exp: set lang ada
+PASS: gdb.base/dmsym.exp: break pck__foo__bar__minsym
+PASS: gdb.base/dmsym.exp: info line pck__foo__bar__minsym
+PASS: gdb.base/dmsym.exp: set lang auto
+PASS: gdb.base/dmsym.exp: Run until breakpoint at BREAK
+PASS: gdb.base/dmsym.exp: continue
+PASS: gdb.base/dmsym.exp: print val
+Running ./gdb.base/dprintf.exp ...
+PASS: gdb.base/dprintf.exp: dprintf
+PASS: gdb.base/dprintf.exp: dprintf foo
+PASS: gdb.base/dprintf.exp: dprintf 29
+PASS: gdb.base/dprintf.exp: dprintf foo,"At foo entry\n"
+PASS: gdb.base/dprintf.exp: ignore $bpnum 1
+PASS: gdb.base/dprintf.exp: dprintf 26,"arg=%d, g=%d\n", arg, g
+PASS: gdb.base/dprintf.exp: dprintf info 1
+PASS: gdb.base/dprintf.exp: break 27
+PASS: gdb.base/dprintf.exp: 1st dprintf, gdb
+PASS: gdb.base/dprintf.exp: 2nd dprintf, gdb
+PASS: gdb.base/dprintf.exp: Set dprintf style to agent - can do
+PASS: gdb.base/dprintf.exp: 1st dprintf, agent
+PASS: gdb.base/dprintf.exp: 2nd dprintf, agent
+PASS: gdb.base/dprintf.exp: dprintf info 2
+PASS: gdb.base/dprintf.exp: Set dprintf style to an unrecognized type
+Running ./gdb.base/dprintf-next.exp ...
+PASS: gdb.base/dprintf-next.exp: dprintf 24, "%d\n", x
+PASS: gdb.base/dprintf-next.exp: next 1
+PASS: gdb.base/dprintf-next.exp: next 2
+Running ./gdb.base/dprintf-non-stop.exp ...
+UNSUPPORTED: gdb.base/dprintf-non-stop.exp: Testing dprintf with remote/non-stop is not supported.
+Running ./gdb.base/dprintf-pending.exp ...
+PASS: gdb.base/dprintf-pending.exp: without format: set pending dprintf
+PASS: gdb.base/dprintf-pending.exp: without format: resolved dprintf fails to be re-set
+PASS: gdb.base/dprintf-pending.exp: without symbols: set pending dprintf
+PASS: gdb.base/dprintf-pending.exp: without symbols: single pending dprintf info
+PASS: gdb.base/dprintf-pending.exp: without symbols: run to resolved dprintf
+PASS: gdb.base/dprintf-pending.exp: set pending dprintf
+PASS: gdb.base/dprintf-pending.exp: single pending dprintf info
+PASS: gdb.base/dprintf-pending.exp: run to resolved dprintf
+Running ./gdb.base/dump.exp ...
+PASS: gdb.base/dump.exp: inaccessible memory is reported
+PASS: gdb.base/dump.exp: endianness: little
+PASS: gdb.base/dump.exp: dump array as value, default
+PASS: gdb.base/dump.exp: dump struct as value, default
+PASS: gdb.base/dump.exp: dump array as value, binary
+PASS: gdb.base/dump.exp: dump struct as value, binary
+PASS: gdb.base/dump.exp: dump array as value, srec
+PASS: gdb.base/dump.exp: dump struct as value, srec
+FAIL: gdb.base/dump.exp: dump array as value, intel hex
+FAIL: gdb.base/dump.exp: dump struct as value, intel hex
+PASS: gdb.base/dump.exp: dump array as value, tekhex
+PASS: gdb.base/dump.exp: dump struct as value, tekhex
+PASS: gdb.base/dump.exp: capture /x &intarray[0]
+PASS: gdb.base/dump.exp: capture /x &intarray[32]
+PASS: gdb.base/dump.exp: capture /x &intstruct
+PASS: gdb.base/dump.exp: capture /x &intstruct + 1
+PASS: gdb.base/dump.exp: capture intarray
+PASS: gdb.base/dump.exp: capture intstruct
+PASS: gdb.base/dump.exp: capture type of pointer &intarray
+PASS: gdb.base/dump.exp: capture type of pointer &intstruct
+PASS: gdb.base/dump.exp: dump array as memory, default
+PASS: gdb.base/dump.exp: dump struct as memory, default
+PASS: gdb.base/dump.exp: dump array as memory, binary
+PASS: gdb.base/dump.exp: dump struct as memory, binary
+PASS: gdb.base/dump.exp: dump array as memory, srec
+PASS: gdb.base/dump.exp: dump struct as memory, srec
+FAIL: gdb.base/dump.exp: dump array as memory, ihex
+FAIL: gdb.base/dump.exp: dump struct as memory, ihex
+PASS: gdb.base/dump.exp: dump array as memory, tekhex
+PASS: gdb.base/dump.exp: dump struct as memory, tekhex
+PASS: gdb.base/dump.exp: dump array as mem, srec, expressions
+PASS: gdb.base/dump.exp: print zero_all ()
+PASS: gdb.base/dump.exp: array as value, srec; file restored ok
+PASS: gdb.base/dump.exp: array as value, srec; capture intarray
+FAIL: gdb.base/dump.exp: array as value, srec; value restored ok
+PASS: gdb.base/dump.exp: struct as value, srec; file restored ok
+PASS: gdb.base/dump.exp: struct as value, srec; capture intstruct
+FAIL: gdb.base/dump.exp: struct as value, srec; value restored ok
+PASS: gdb.base/dump.exp: zero all
+PASS: gdb.base/dump.exp: array as memory, srec; file restored ok
+PASS: gdb.base/dump.exp: array as memory, srec; capture intarray
+FAIL: gdb.base/dump.exp: array as memory, srec; value restored ok
+PASS: gdb.base/dump.exp: struct as memory, srec; file restored ok
+PASS: gdb.base/dump.exp: struct as memory, srec; capture intstruct
+FAIL: gdb.base/dump.exp: struct as memory, srec; value restored ok
+PASS: gdb.base/dump.exp: print zero_all ()
+FAIL: gdb.base/dump.exp: array as value, ihex; file restored ok
+PASS: gdb.base/dump.exp: array as value, ihex; capture intarray
+FAIL: gdb.base/dump.exp: array as value, ihex; value restored ok
+FAIL: gdb.base/dump.exp: struct as value, ihex; file restored ok
+PASS: gdb.base/dump.exp: struct as value, ihex; capture intstruct
+FAIL: gdb.base/dump.exp: struct as value, ihex; value restored ok
+PASS: gdb.base/dump.exp: print zero_all ()
+FAIL: gdb.base/dump.exp: array as memory, ihex; file restored ok
+PASS: gdb.base/dump.exp: array as memory, ihex; capture intarray
+FAIL: gdb.base/dump.exp: array as memory, ihex; value restored ok
+FAIL: gdb.base/dump.exp: struct as memory, ihex; file restored ok
+PASS: gdb.base/dump.exp: struct as memory, ihex; capture intstruct
+FAIL: gdb.base/dump.exp: struct as memory, ihex; value restored ok
+PASS: gdb.base/dump.exp: print zero_all ()
+PASS: gdb.base/dump.exp: array as value, tekhex; file restored ok
+PASS: gdb.base/dump.exp: array as value, tekhex; capture intarray
+FAIL: gdb.base/dump.exp: array as value, tekhex; value restored ok
+PASS: gdb.base/dump.exp: struct as value, tekhex; file restored ok
+PASS: gdb.base/dump.exp: struct as value, tekhex; capture intstruct
+FAIL: gdb.base/dump.exp: struct as value, tekhex; value restored ok
+PASS: gdb.base/dump.exp: print zero_all ()
+PASS: gdb.base/dump.exp: array as memory, tekhex; file restored ok
+PASS: gdb.base/dump.exp: array as memory, tekhex; capture intarray
+FAIL: gdb.base/dump.exp: array as memory, tekhex; value restored ok
+PASS: gdb.base/dump.exp: struct as memory, tekhex; file restored ok
+PASS: gdb.base/dump.exp: struct as memory, tekhex; capture intstruct
+FAIL: gdb.base/dump.exp: struct as memory, tekhex; value restored ok
+PASS: gdb.base/dump.exp: print zero_all ()
+PASS: gdb.base/dump.exp: array as value, binary; file restored ok
+PASS: gdb.base/dump.exp: array as value, binary; capture intarray
+PASS: gdb.base/dump.exp: array as value, binary; value restored ok
+PASS: gdb.base/dump.exp: struct as value, binary; file restored ok
+PASS: gdb.base/dump.exp: struct as value, binary; capture intstruct
+PASS: gdb.base/dump.exp: struct as value, binary; value restored ok
+PASS: gdb.base/dump.exp: print zero_all ()
+PASS: gdb.base/dump.exp: array as memory, binary; file restored ok
+PASS: gdb.base/dump.exp: array as memory, binary; capture intarray
+PASS: gdb.base/dump.exp: array as memory, binary; value restored ok
+PASS: gdb.base/dump.exp: struct as memory, binary; file restored ok
+PASS: gdb.base/dump.exp: struct as memory, binary; capture intstruct
+PASS: gdb.base/dump.exp: struct as memory, binary; value restored ok
+PASS: gdb.base/dump.exp: capture /x &intarray2[0]
+PASS: gdb.base/dump.exp: capture /x &intstruct2
+PASS: gdb.base/dump.exp: capture (char *) &intarray2 - (char *) &intarray
+PASS: gdb.base/dump.exp: capture (char *) &intstruct2 - (char *) &intstruct
+PASS: gdb.base/dump.exp: print zero_all ()
+PASS: gdb.base/dump.exp: array copy, srec; file restored ok
+PASS: gdb.base/dump.exp: array copy, srec; capture intarray2
+FAIL: gdb.base/dump.exp: array copy, srec; value restored ok
+PASS: gdb.base/dump.exp: struct copy, srec; file restored ok
+PASS: gdb.base/dump.exp: struct copy, srec; capture intstruct2
+FAIL: gdb.base/dump.exp: struct copy, srec; value restored ok
+PASS: gdb.base/dump.exp: print zero_all ()
+FAIL: gdb.base/dump.exp: array copy, ihex; file restored ok
+PASS: gdb.base/dump.exp: array copy, ihex; capture intarray2
+FAIL: gdb.base/dump.exp: array copy, ihex; value restored ok
+FAIL: gdb.base/dump.exp: struct copy, ihex; file restored ok
+PASS: gdb.base/dump.exp: struct copy, ihex; capture intstruct2
+FAIL: gdb.base/dump.exp: struct copy, ihex; value restored ok
+PASS: gdb.base/dump.exp: print zero_all ()
+PASS: gdb.base/dump.exp: array copy, tekhex; file restored ok
+PASS: gdb.base/dump.exp: array copy, tekhex; capture intarray2
+FAIL: gdb.base/dump.exp: array copy, tekhex; value restored ok
+PASS: gdb.base/dump.exp: struct copy, tekhex; file restored ok
+PASS: gdb.base/dump.exp: struct copy, tekhex; capture intstruct2
+FAIL: gdb.base/dump.exp: struct copy, tekhex; value restored ok
+PASS: gdb.base/dump.exp: print zero_all ()
+PASS: gdb.base/dump.exp: array copy, binary; file restored ok
+PASS: gdb.base/dump.exp: array copy, binary; capture intarray2
+PASS: gdb.base/dump.exp: array copy, binary; value restored ok
+PASS: gdb.base/dump.exp: struct copy, binary; file restored ok
+PASS: gdb.base/dump.exp: struct copy, binary; capture intstruct2
+PASS: gdb.base/dump.exp: struct copy, binary; value restored ok
+PASS: gdb.base/dump.exp: capture /x &intarray[3]
+PASS: gdb.base/dump.exp: capture /x &intarray[4]
+PASS: gdb.base/dump.exp: capture /x (char *) &intarray[3] - (char *) &intarray[0]
+PASS: gdb.base/dump.exp: capture /x (char *) &intarray[4] - (char *) &intarray[0]
+PASS: gdb.base/dump.exp: print zero_all ()
+FAIL: gdb.base/dump.exp: array partial, srec; file restored ok
+PASS: gdb.base/dump.exp: array partial, srec; capture intarray[3]
+FAIL: gdb.base/dump.exp: array partial, srec; value restored ok
+PASS: gdb.base/dump.exp: element 2 not changed - 1
+PASS: gdb.base/dump.exp: element 4 not changed - 1
+PASS: gdb.base/dump.exp: print zero_all ()
+FAIL: gdb.base/dump.exp: array partial, ihex; file restored ok
+PASS: gdb.base/dump.exp: array partial, ihex; capture intarray[3]
+FAIL: gdb.base/dump.exp: array partial, ihex; value restored ok
+PASS: gdb.base/dump.exp: element 2 not changed - 2
+PASS: gdb.base/dump.exp: element 4 not changed - 2
+PASS: gdb.base/dump.exp: print zero_all ()
+FAIL: gdb.base/dump.exp: array partial, tekhex; file restored ok
+PASS: gdb.base/dump.exp: array partial, tekhex; capture intarray[3]
+FAIL: gdb.base/dump.exp: array partial, tekhex; value restored ok
+PASS: gdb.base/dump.exp: element 2 not changed - 3
+PASS: gdb.base/dump.exp: element 4 not changed - 3
+PASS: gdb.base/dump.exp: print zero_all ()
+PASS: gdb.base/dump.exp: array partial, binary; file restored ok
+PASS: gdb.base/dump.exp: array partial, binary; capture intarray[3]
+PASS: gdb.base/dump.exp: array partial, binary; value restored ok
+PASS: gdb.base/dump.exp: element 2 not changed - 4
+PASS: gdb.base/dump.exp: element 4 not changed - 4
+FAIL: gdb.base/dump.exp: array partial with expressions; file restored ok
+PASS: gdb.base/dump.exp: array partial with expressions; capture intarray2[3]
+FAIL: gdb.base/dump.exp: array partial with expressions; value restored ok
+PASS: gdb.base/dump.exp: element 2 not changed, == 4
+PASS: gdb.base/dump.exp: element 4 not changed, == 4
+PASS: gdb.base/dump.exp: setting little endianness
+PASS: gdb.base/dump.exp: file binfile; capture intarray
+PASS: gdb.base/dump.exp: start with intarray un-initialized
+PASS: gdb.base/dump.exp: file binfile; capture intstruct
+PASS: gdb.base/dump.exp: start with intstruct un-initialized
+PASS: gdb.base/dump.exp: reload array as value, srec; capture * (int (*)[32]) 0x555555556040
+FAIL: gdb.base/dump.exp: reload array as value, srec; value restored ok
+PASS: gdb.base/dump.exp: reload struct as value, srec; capture * (struct teststruct *) 0x555555556140
+FAIL: gdb.base/dump.exp: reload struct as value, srec; value restored ok
+PASS: gdb.base/dump.exp: reload array as memory, srec; capture * (int (*)[32]) 0x555555556040
+FAIL: gdb.base/dump.exp: reload array as memory, srec; value restored ok
+PASS: gdb.base/dump.exp: reload struct as memory, srec; capture * (struct teststruct *) 0x555555556140
+FAIL: gdb.base/dump.exp: reload struct as memory, srec; value restored ok
+ERROR: Couldn't load intarr1.ihex into /var/tmp/portage/cross-x86_64-cros-linux-gnu/gdb-7.6.1/work/gdb-7.6.1/gdb/testsuite/../../gdb/gdb.
+UNRESOLVED: gdb.base/dump.exp: reload array as value, intel hex; capture * (int (*)[32]) 0x555555556040
+FAIL: gdb.base/dump.exp: reload array as value, intel hex; value restored ok
+ERROR: Couldn't load intstr1.ihex into /var/tmp/portage/cross-x86_64-cros-linux-gnu/gdb-7.6.1/work/gdb-7.6.1/gdb/testsuite/../../gdb/gdb.
+UNRESOLVED: gdb.base/dump.exp: reload struct as value, intel hex; capture * (struct teststruct *) 0x555555556140
+FAIL: gdb.base/dump.exp: reload struct as value, intel hex; value restored ok
+ERROR: Couldn't load intarr2.ihex into /var/tmp/portage/cross-x86_64-cros-linux-gnu/gdb-7.6.1/work/gdb-7.6.1/gdb/testsuite/../../gdb/gdb.
+UNRESOLVED: gdb.base/dump.exp: reload array as memory, intel hex; capture * (int (*)[32]) 0x555555556040
+FAIL: gdb.base/dump.exp: reload array as memory, intel hex; value restored ok
+ERROR: Couldn't load intstr2.ihex into /var/tmp/portage/cross-x86_64-cros-linux-gnu/gdb-7.6.1/work/gdb-7.6.1/gdb/testsuite/../../gdb/gdb.
+UNRESOLVED: gdb.base/dump.exp: reload struct as memory, intel hex; capture * (struct teststruct *) 0x555555556140
+FAIL: gdb.base/dump.exp: reload struct as memory, intel hex; value restored ok
+PASS: gdb.base/dump.exp: reload array as value, tekhex; capture * (int (*)[32]) 0x555555556040
+FAIL: gdb.base/dump.exp: reload array as value, tekhex; value restored ok
+PASS: gdb.base/dump.exp: reload struct as value, tekhex; capture * (struct teststruct *) 0x555555556140
+FAIL: gdb.base/dump.exp: reload struct as value, tekhex; value restored ok
+PASS: gdb.base/dump.exp: reload array as memory, tekhex; capture * (int (*)[32]) 0x555555556040
+FAIL: gdb.base/dump.exp: reload array as memory, tekhex; value restored ok
+PASS: gdb.base/dump.exp: reload struct as memory, tekhex; capture * (struct teststruct *) 0x555555556140
+FAIL: gdb.base/dump.exp: reload struct as memory, tekhex; value restored ok
+Running ./gdb.base/duplicate-bp.exp ...
+PASS: gdb.base/duplicate-bp.exp: del_1_stop_2: set $bp_num_1 = $bpnum
+PASS: gdb.base/duplicate-bp.exp: del_1_stop_2: set $bp_num_2 = $bpnum
+PASS: gdb.base/duplicate-bp.exp: del_1_stop_2: step to place breakpoints
+PASS: gdb.base/duplicate-bp.exp: del_1_stop_2: delete $bp_num_1
+PASS: gdb.base/duplicate-bp.exp: del_1_stop_2: delete #1, stop at #2
+PASS: gdb.base/duplicate-bp.exp: del_2_stop_1: set $bp_num_1 = $bpnum
+PASS: gdb.base/duplicate-bp.exp: del_2_stop_1: set $bp_num_2 = $bpnum
+PASS: gdb.base/duplicate-bp.exp: del_2_stop_1: step to place breakpoints
+PASS: gdb.base/duplicate-bp.exp: del_2_stop_1: delete $bp_num_2
+PASS: gdb.base/duplicate-bp.exp: del_2_stop_1: delete #2, stop at #1
+PASS: gdb.base/duplicate-bp.exp: dis_1_del_2_stop_3: set $bp_num_1 = $bpnum
+PASS: gdb.base/duplicate-bp.exp: dis_1_del_2_stop_3: set $bp_num_2 = $bpnum
+PASS: gdb.base/duplicate-bp.exp: dis_1_del_2_stop_3: set $bp_num_3 = $bpnum
+PASS: gdb.base/duplicate-bp.exp: dis_1_del_2_stop_3: step to place breakpoints
+PASS: gdb.base/duplicate-bp.exp: dis_1_del_2_stop_3: disable $bp_num_1
+PASS: gdb.base/duplicate-bp.exp: dis_1_del_2_stop_3: step
+PASS: gdb.base/duplicate-bp.exp: dis_1_del_2_stop_3: delete $bp_num_2
+PASS: gdb.base/duplicate-bp.exp: dis_1_del_2_stop_3: disable #1, delete #2, stop at #3
+PASS: gdb.base/duplicate-bp.exp: dis_2_del_1_stop_3: set $bp_num_1 = $bpnum
+PASS: gdb.base/duplicate-bp.exp: dis_2_del_1_stop_3: set $bp_num_2 = $bpnum
+PASS: gdb.base/duplicate-bp.exp: dis_2_del_1_stop_3: set $bp_num_3 = $bpnum
+PASS: gdb.base/duplicate-bp.exp: dis_2_del_1_stop_3: step to place breakpoints
+PASS: gdb.base/duplicate-bp.exp: dis_2_del_1_stop_3: disable $bp_num_2
+PASS: gdb.base/duplicate-bp.exp: dis_2_del_1_stop_3: step
+PASS: gdb.base/duplicate-bp.exp: dis_2_del_1_stop_3: delete $bp_num_1
+PASS: gdb.base/duplicate-bp.exp: dis_2_del_1_stop_3: disable #2, delete #1, stop at #3
+PASS: gdb.base/duplicate-bp.exp: dis_1_del_3_stop_1: set $bp_num_1 = $bpnum
+PASS: gdb.base/duplicate-bp.exp: dis_1_del_3_stop_1: set $bp_num_2 = $bpnum
+PASS: gdb.base/duplicate-bp.exp: dis_1_del_3_stop_1: set $bp_num_3 = $bpnum
+PASS: gdb.base/duplicate-bp.exp: dis_1_del_3_stop_1: step to place breakpoints
+PASS: gdb.base/duplicate-bp.exp: dis_1_del_3_stop_1: disable $bp_num_1
+PASS: gdb.base/duplicate-bp.exp: dis_1_del_3_stop_1: step
+PASS: gdb.base/duplicate-bp.exp: dis_1_del_3_stop_1: delete $bp_num_3
+PASS: gdb.base/duplicate-bp.exp: dis_1_del_3_stop_1: disable #1, delete #3, stop at #2
+PASS: gdb.base/duplicate-bp.exp: dis_3_del_1_stop_2: set $bp_num_1 = $bpnum
+PASS: gdb.base/duplicate-bp.exp: dis_3_del_1_stop_2: set $bp_num_2 = $bpnum
+PASS: gdb.base/duplicate-bp.exp: dis_3_del_1_stop_2: set $bp_num_3 = $bpnum
+PASS: gdb.base/duplicate-bp.exp: dis_3_del_1_stop_2: step to place breakpoints
+PASS: gdb.base/duplicate-bp.exp: dis_3_del_1_stop_2: disable $bp_num_3
+PASS: gdb.base/duplicate-bp.exp: dis_3_del_1_stop_2: step
+PASS: gdb.base/duplicate-bp.exp: dis_3_del_1_stop_2: delete $bp_num_1
+PASS: gdb.base/duplicate-bp.exp: dis_3_del_1_stop_2: disable #3, delete #1, stop at #2
+PASS: gdb.base/duplicate-bp.exp: dis_2_del_3_stop_1: set $bp_num_1 = $bpnum
+PASS: gdb.base/duplicate-bp.exp: dis_2_del_3_stop_1: set $bp_num_2 = $bpnum
+PASS: gdb.base/duplicate-bp.exp: dis_2_del_3_stop_1: set $bp_num_3 = $bpnum
+PASS: gdb.base/duplicate-bp.exp: dis_2_del_3_stop_1: step to place breakpoints
+PASS: gdb.base/duplicate-bp.exp: dis_2_del_3_stop_1: disable $bp_num_2
+PASS: gdb.base/duplicate-bp.exp: dis_2_del_3_stop_1: step
+PASS: gdb.base/duplicate-bp.exp: dis_2_del_3_stop_1: delete $bp_num_3
+PASS: gdb.base/duplicate-bp.exp: dis_2_del_3_stop_1: disable #2, delete #3, stop at #1
+PASS: gdb.base/duplicate-bp.exp: dis_3_del_2_stop_1: set $bp_num_1 = $bpnum
+PASS: gdb.base/duplicate-bp.exp: dis_3_del_2_stop_1: set $bp_num_2 = $bpnum
+PASS: gdb.base/duplicate-bp.exp: dis_3_del_2_stop_1: set $bp_num_3 = $bpnum
+PASS: gdb.base/duplicate-bp.exp: dis_3_del_2_stop_1: step to place breakpoints
+PASS: gdb.base/duplicate-bp.exp: dis_3_del_2_stop_1: disable $bp_num_3
+PASS: gdb.base/duplicate-bp.exp: dis_3_del_2_stop_1: step
+PASS: gdb.base/duplicate-bp.exp: dis_3_del_2_stop_1: delete $bp_num_2
+PASS: gdb.base/duplicate-bp.exp: dis_3_del_2_stop_1: disable #3, delete #2, stop at #1
+Running ./gdb.base/dup-sect.exp ...
+PASS: gdb.base/dup-sect.exp: rename section
+PASS: gdb.base/dup-sect.exp: split
+PASS: gdb.base/dup-sect.exp: strip
+PASS: gdb.base/dup-sect.exp: var1 after strip
+PASS: gdb.base/dup-sect.exp: var2 after strip
+Running ./gdb.base/echo.exp ...
+PASS: gdb.base/echo.exp: Echo test
+Running ./gdb.base/empty_exe.exp ...
+PASS: gdb.base/empty_exe.exp: file ''
+PASS: gdb.base/empty_exe.exp: print 1
+Running ./gdb.base/ena-dis-br.exp ...
+PASS: gdb.base/ena-dis-br.exp: break marker1
+PASS: gdb.base/ena-dis-br.exp: enable break marker1
+PASS: gdb.base/ena-dis-br.exp: info break marker1
+PASS: gdb.base/ena-dis-br.exp: continue to break marker1
+PASS: gdb.base/ena-dis-br.exp: delete break marker1
+PASS: gdb.base/ena-dis-br.exp: break marker2
+PASS: gdb.base/ena-dis-br.exp: enable once break marker2
+PASS: gdb.base/ena-dis-br.exp: info auto-disabled break marker2
+PASS: gdb.base/ena-dis-br.exp: continue to auto-disabled break marker2
+PASS: gdb.base/ena-dis-br.exp: info auto-disabled break marker2
+PASS: gdb.base/ena-dis-br.exp: continue until exit at no stop
+PASS: gdb.base/ena-dis-br.exp: rerun to main
+PASS: gdb.base/ena-dis-br.exp: continue until exit at no stop at auto-disabled break marker2
+PASS: gdb.base/ena-dis-br.exp: break marker3
+PASS: gdb.base/ena-dis-br.exp: enable del break marker3
+PASS: gdb.base/ena-dis-br.exp: info auto-deleted break marker2
+PASS: gdb.base/ena-dis-br.exp: continue to auto-deleted break marker3
+PASS: gdb.base/ena-dis-br.exp: info auto-deleted break marker3
+PASS: gdb.base/ena-dis-br.exp: break marker4
+PASS: gdb.base/ena-dis-br.exp: disable break marker4
+PASS: gdb.base/ena-dis-br.exp: info break marker4
+PASS: gdb.base/ena-dis-br.exp: break 113
+PASS: gdb.base/ena-dis-br.exp: break marker1
+PASS: gdb.base/ena-dis-br.exp: disable break with count
+PASS: gdb.base/ena-dis-br.exp: continue from enable count, first time
+PASS: gdb.base/ena-dis-br.exp: continue from enable count, second time
+PASS: gdb.base/ena-dis-br.exp: continue through enable count, now disabled
+PASS: gdb.base/ena-dis-br.exp: break marker1
+PASS: gdb.base/ena-dis-br.exp: ignore non-existent break
+PASS: gdb.base/ena-dis-br.exp: ignore break with missing ignore count
+PASS: gdb.base/ena-dis-br.exp: ignore break marker1 -1
+PASS: gdb.base/ena-dis-br.exp: ignore break marker1 0
+PASS: gdb.base/ena-dis-br.exp: ignore break marker1
+PASS: gdb.base/ena-dis-br.exp: info ignored break marker1
+PASS: gdb.base/ena-dis-br.exp: continue until exit at no stop at ignored break marker1
+PASS: gdb.base/ena-dis-br.exp: rerun to main
+PASS: gdb.base/ena-dis-br.exp: continue to break marker1, 2nd time
+PASS: gdb.base/ena-dis-br.exp: break marker1
+PASS: gdb.base/ena-dis-br.exp: ignore break marker1
+PASS: gdb.base/ena-dis-br.exp: enable del break marker1
+PASS: gdb.base/ena-dis-br.exp: info break marker1
+PASS: gdb.base/ena-dis-br.exp: continue until exit at no stop at ignored & auto-deleted break marker1
+PASS: gdb.base/ena-dis-br.exp: rerun to main
+PASS: gdb.base/ena-dis-br.exp: continue to ignored & auto-deleted break marker1
+PASS: gdb.base/ena-dis-br.exp: break marker1
+PASS: gdb.base/ena-dis-br.exp: ignore break marker1
+PASS: gdb.base/ena-dis-br.exp: disable break marker1
+PASS: gdb.base/ena-dis-br.exp: continue until exit at no stop at ignored & disabled break marker1
+PASS: gdb.base/ena-dis-br.exp: rerun to main
+PASS: gdb.base/ena-dis-br.exp: info ignored & disabled break marker1
+PASS: gdb.base/ena-dis-br.exp: prepare to continue with ignore count
+PASS: gdb.base/ena-dis-br.exp: continue with ignore count
+PASS: gdb.base/ena-dis-br.exp: step
+PASS: gdb.base/ena-dis-br.exp: continue with ignore count, not stopped at bpt
+Running ./gdb.base/ending-run.exp ...
+PASS: gdb.base/ending-run.exp: bpt at line before routine
+PASS: gdb.base/ending-run.exp: b ending-run.c:14, one
+PASS: gdb.base/ending-run.exp: b ending-run.c:31
+PASS: gdb.base/ending-run.exp: run
+PASS: gdb.base/ending-run.exp: clear worked
+PASS: gdb.base/ending-run.exp: cleared bp at line before routine
+PASS: gdb.base/ending-run.exp: b ending-run.c:1
+PASS: gdb.base/ending-run.exp: b ending-run.c:14, two
+PASS: gdb.base/ending-run.exp: Cleared 2 by line
+PASS: gdb.base/ending-run.exp: b ending-run.c:14
+PASS: gdb.base/ending-run.exp: Breakpoint 7 at *ending-run.c:14
+PASS: gdb.base/ending-run.exp: Clear 2 by default
+PASS: gdb.base/ending-run.exp: all set to continue
+PASS: gdb.base/ending-run.exp: cont
+PASS: gdb.base/ending-run.exp: step out of main
+Running ./gdb.base/enum_cond.exp ...
+PASS: gdb.base/enum_cond.exp: break call_me if param.e == 1
+PASS: gdb.base/enum_cond.exp: continue to conditional breakpoint in call_me
+Running ./gdb.base/enumval.exp ...
+PASS: gdb.base/enumval.exp: print e
+PASS: gdb.base/enumval.exp: print f
+PASS: gdb.base/enumval.exp: print J
+PASS: gdb.base/enumval.exp: print K
+Running ./gdb.base/environ.exp ...
+Running ./gdb.base/eu-strip-infcall.exp ...
+PASS: gdb.base/eu-strip-infcall.exp: infcall
+Running ./gdb.base/eval.exp ...
+PASS: gdb.base/eval.exp: Initialize $a.
+PASS: gdb.base/eval.exp: First eval.
+PASS: gdb.base/eval.exp: Second eval.
+Running ./gdb.base/eval-skip.exp ...
+PASS: gdb.base/eval-skip.exp: set variable x=14
+PASS: gdb.base/eval-skip.exp: set variable y=2
+PASS: gdb.base/eval-skip.exp: set variable z=2
+PASS: gdb.base/eval-skip.exp: set variable w=3
+PASS: gdb.base/eval-skip.exp: print value of (0 && (x+y))
+PASS: gdb.base/eval-skip.exp: print value of (0 && (x-y))
+PASS: gdb.base/eval-skip.exp: print value of (0 && (x*y))
+PASS: gdb.base/eval-skip.exp: print value of (0 && (x/y))
+PASS: gdb.base/eval-skip.exp: print value of (0 && (x%y))
+PASS: gdb.base/eval-skip.exp: print value of (0 && (x&&y))
+PASS: gdb.base/eval-skip.exp: print value of (0 && (x||y))
+PASS: gdb.base/eval-skip.exp: print value of (0 && (x&y))
+PASS: gdb.base/eval-skip.exp: print value of (0 && (x|y))
+PASS: gdb.base/eval-skip.exp: print value of (0 && (x^y))
+PASS: gdb.base/eval-skip.exp: print value of (0 && (x < y))
+PASS: gdb.base/eval-skip.exp: print value of (0 && (x <= y))
+PASS: gdb.base/eval-skip.exp: print value of (0 && (x>y))
+PASS: gdb.base/eval-skip.exp: print value of (0 && (x>=y))
+PASS: gdb.base/eval-skip.exp: print value of (0 && (x==y))
+PASS: gdb.base/eval-skip.exp: print value of (0 && (x!=y))
+PASS: gdb.base/eval-skip.exp: print value of (0 && (x<<31))
+PASS: gdb.base/eval-skip.exp: print value of (0 && (x>>31))
+PASS: gdb.base/eval-skip.exp: print value of (0 && (!x))
+PASS: gdb.base/eval-skip.exp: print value of (0 && (~x))
+PASS: gdb.base/eval-skip.exp: print value of (0 && (-x))
+PASS: gdb.base/eval-skip.exp: print value of (0 && (x++))
+PASS: gdb.base/eval-skip.exp: print value of (0 && (++x))
+PASS: gdb.base/eval-skip.exp: print value of (0 && (x--))
+PASS: gdb.base/eval-skip.exp: print value of (0 && (--x))
+PASS: gdb.base/eval-skip.exp: print value of (0 && (x+=7))
+PASS: gdb.base/eval-skip.exp: print value of (0 && (x=y))
+Running ./gdb.base/exe-lock.exp ...
+PASS: gdb.base/exe-lock.exp: continue until exit
+Running ./gdb.base/expand-psymtabs.exp ...
+PASS: gdb.base/expand-psymtabs.exp: Expand psymtabs
+Running ./gdb.base/exprs.exp ...
+PASS: gdb.base/exprs.exp: print char == (setup)
+PASS: gdb.base/exprs.exp: print char == (print v_char == 0)
+PASS: gdb.base/exprs.exp: print char == (print v_char == 127)
+PASS: gdb.base/exprs.exp: print char != (setup)
+PASS: gdb.base/exprs.exp: print char != (print v_char != 0)
+PASS: gdb.base/exprs.exp: print char != (print v_char != 127)
+PASS: gdb.base/exprs.exp: print char < (setup)
+PASS: gdb.base/exprs.exp: print char < (print v_char < 0)
+PASS: gdb.base/exprs.exp: print char < (print v_char < 127)
+PASS: gdb.base/exprs.exp: print char > (setup)
+PASS: gdb.base/exprs.exp: print char > (print v_char > 0)
+PASS: gdb.base/exprs.exp: print char > (print v_char > 127)
+PASS: gdb.base/exprs.exp: print signed char == (setup)
+PASS: gdb.base/exprs.exp: print signed char == (print v_signed_char == 0)
+PASS: gdb.base/exprs.exp: print signed char == (print v_signed_char == 127)
+PASS: gdb.base/exprs.exp: print signed char != (setup)
+PASS: gdb.base/exprs.exp: print signed char != (print v_signed_char != 0)
+PASS: gdb.base/exprs.exp: print signed char != (print v_signed_char != 127)
+PASS: gdb.base/exprs.exp: print signed char < (setup)
+PASS: gdb.base/exprs.exp: print signed char < (print v_signed_char < 0)
+PASS: gdb.base/exprs.exp: print signed char < (print v_signed_char < 127)
+PASS: gdb.base/exprs.exp: print signed char > (setup)
+PASS: gdb.base/exprs.exp: print signed char > (print v_signed_char > 0)
+PASS: gdb.base/exprs.exp: print signed char > (print v_signed_char > 127)
+PASS: gdb.base/exprs.exp: print signed char == (minus) (setup)
+PASS: gdb.base/exprs.exp: print signed char == (minus) (print v_signed_char == 0)
+PASS: gdb.base/exprs.exp: print signed char == (minus) (print v_signed_char == -1)
+PASS: gdb.base/exprs.exp: print signed char != (minus) (setup)
+PASS: gdb.base/exprs.exp: print signed char != (minus) (print v_signed_char != 0)
+PASS: gdb.base/exprs.exp: print signed char != (minus) (print v_signed_char != -1)
+PASS: gdb.base/exprs.exp: print signed char < (minus) (setup)
+PASS: gdb.base/exprs.exp: print signed char < (minus) (print v_signed_char < 0)
+PASS: gdb.base/exprs.exp: print signed char < (minus) (print v_signed_char < 127)
+PASS: gdb.base/exprs.exp: print signed char > (minus) (setup)
+PASS: gdb.base/exprs.exp: print signed char > (minus) (print v_signed_char > 0)
+PASS: gdb.base/exprs.exp: print signed char > (minus) (print v_signed_char > 127)
+PASS: gdb.base/exprs.exp: print unsigned char == (setup)
+PASS: gdb.base/exprs.exp: print unsigned char == (print v_unsigned_char == 0)
+PASS: gdb.base/exprs.exp: print unsigned char == (print v_unsigned_char == 127)
+PASS: gdb.base/exprs.exp: print unsigned char != (setup)
+PASS: gdb.base/exprs.exp: print unsigned char != (print v_unsigned_char != 0)
+PASS: gdb.base/exprs.exp: print unsigned char != (print v_unsigned_char != 127)
+PASS: gdb.base/exprs.exp: print unsigned char < (setup)
+PASS: gdb.base/exprs.exp: print unsigned char < (print v_unsigned_char < 0)
+PASS: gdb.base/exprs.exp: print unsigned char < (print v_unsigned_char < 127)
+PASS: gdb.base/exprs.exp: print unsigned char > (setup)
+PASS: gdb.base/exprs.exp: print unsigned char > (print v_unsigned_char > 0)
+PASS: gdb.base/exprs.exp: print unsigned char > (print v_unsigned_char > 127)
+PASS: gdb.base/exprs.exp: print unsigned char == (~0) (setup)
+PASS: gdb.base/exprs.exp: print unsigned char == (~0) (print v_unsigned_char == 0)
+PASS: gdb.base/exprs.exp: print unsigned char == (~0) (print v_unsigned_char == ~0)
+PASS: gdb.base/exprs.exp: print unsigned char == (~0) (print v_unsigned_char == (unsigned char)~0)
+PASS: gdb.base/exprs.exp: print unsigned char != (~0) (setup)
+PASS: gdb.base/exprs.exp: print unsigned char != (~0) (print v_unsigned_char != 0)
+PASS: gdb.base/exprs.exp: print unsigned char != (~0) (print v_unsigned_char != (unsigned char)~0)
+PASS: gdb.base/exprs.exp: print unsigned char != (~0) (print v_unsigned_char != ~0)
+PASS: gdb.base/exprs.exp: print unsigned char < (~0) (setup)
+PASS: gdb.base/exprs.exp: print unsigned char < (~0) (print v_unsigned_char < 0)
+PASS: gdb.base/exprs.exp: print unsigned char < (~0) (print v_unsigned_char < 127)
+PASS: gdb.base/exprs.exp: print unsigned char > (~0) (setup)
+PASS: gdb.base/exprs.exp: print unsigned char > (~0) (print v_unsigned_char > 0)
+PASS: gdb.base/exprs.exp: print unsigned char > (~0) (print v_unsigned_char > 127)
+PASS: gdb.base/exprs.exp: print signed short == (setup)
+PASS: gdb.base/exprs.exp: print signed short == (print v_short == 0)
+PASS: gdb.base/exprs.exp: print signed short == (print v_short == 0x7FFF)
+PASS: gdb.base/exprs.exp: print signed short != (setup)
+PASS: gdb.base/exprs.exp: print signed short != (print v_short != 0)
+PASS: gdb.base/exprs.exp: print signed short != (print v_short != 0x7FFF)
+PASS: gdb.base/exprs.exp: print signed short < (setup)
+PASS: gdb.base/exprs.exp: print signed short < (print v_short < 0)
+PASS: gdb.base/exprs.exp: print signed short < (print v_short < 0x7FFF)
+PASS: gdb.base/exprs.exp: print signed short > (setup)
+PASS: gdb.base/exprs.exp: print signed short > (print v_short > 0)
+PASS: gdb.base/exprs.exp: print signed short > (print v_short > 0x7FFF)
+PASS: gdb.base/exprs.exp: print signed short == (minus) (setup)
+PASS: gdb.base/exprs.exp: print signed short == (minus) (print v_short == 0)
+PASS: gdb.base/exprs.exp: print signed short == (minus) (print v_short == -1)
+PASS: gdb.base/exprs.exp: print signed short != (minus) (setup)
+PASS: gdb.base/exprs.exp: print signed short != (minus) (print v_short != 0)
+PASS: gdb.base/exprs.exp: print signed short != (minus) (print v_short != -1)
+PASS: gdb.base/exprs.exp: print signed short < (minus) (setup)
+PASS: gdb.base/exprs.exp: print signed short < (minus) (print v_short < 0)
+PASS: gdb.base/exprs.exp: print signed short < (minus) (print v_short < 0x7FFF)
+PASS: gdb.base/exprs.exp: print signed short > (minus) (setup)
+PASS: gdb.base/exprs.exp: print signed short > (minus) (print v_short > 0)
+PASS: gdb.base/exprs.exp: print signed short > (minus) (print v_short > 0x7FFF)
+PASS: gdb.base/exprs.exp: print signed signed short == (setup)
+PASS: gdb.base/exprs.exp: print signed signed short == (print v_signed_short == 0)
+PASS: gdb.base/exprs.exp: print signed signed short == (print v_signed_short == 0x7FFF)
+PASS: gdb.base/exprs.exp: print signed signed short != (setup)
+PASS: gdb.base/exprs.exp: print signed signed short != (print v_signed_short != 0)
+PASS: gdb.base/exprs.exp: print signed signed short != (print v_signed_short != 0x7FFF)
+PASS: gdb.base/exprs.exp: print signed signed short < (setup)
+PASS: gdb.base/exprs.exp: print signed signed short < (print v_signed_short < 0)
+PASS: gdb.base/exprs.exp: print signed signed short < (print v_signed_short < 0x7FFF)
+PASS: gdb.base/exprs.exp: print signed signed short > (setup)
+PASS: gdb.base/exprs.exp: print signed signed short > (print v_signed_short > 0)
+PASS: gdb.base/exprs.exp: print signed signed short > (print v_signed_short > 0x7FFF)
+PASS: gdb.base/exprs.exp: print signed signed short == (minus) (setup)
+PASS: gdb.base/exprs.exp: print signed signed short == (minus) (print v_signed_short == 0)
+PASS: gdb.base/exprs.exp: print signed signed short == (minus) (print v_signed_short == -1)
+PASS: gdb.base/exprs.exp: print signed signed short != (minus) (setup)
+PASS: gdb.base/exprs.exp: print signed signed short != (minus) (print v_signed_short != 0)
+PASS: gdb.base/exprs.exp: print signed signed short != (minus) (print v_signed_short != -1)
+PASS: gdb.base/exprs.exp: print signed signed short < (minus) (setup)
+PASS: gdb.base/exprs.exp: print signed signed short < (minus) (print v_signed_short < 0)
+PASS: gdb.base/exprs.exp: print signed signed short < (minus) (print v_signed_short < 0x7FFF)
+PASS: gdb.base/exprs.exp: print signed signed short > (minus) (setup)
+PASS: gdb.base/exprs.exp: print signed signed short > (minus) (print v_signed_short > 0)
+PASS: gdb.base/exprs.exp: print signed signed short > (minus) (print v_signed_short > 0x7FFF)
+PASS: gdb.base/exprs.exp: print unsigned short == (setup)
+PASS: gdb.base/exprs.exp: print unsigned short == (print v_unsigned_short == 0)
+PASS: gdb.base/exprs.exp: print unsigned short == (print v_unsigned_short == 0x7FFF)
+PASS: gdb.base/exprs.exp: print unsigned short != (setup)
+PASS: gdb.base/exprs.exp: print unsigned short != (print v_unsigned_short != 0)
+PASS: gdb.base/exprs.exp: print unsigned short != (print v_unsigned_short != 0x7FFF)
+PASS: gdb.base/exprs.exp: print unsigned short < (setup)
+PASS: gdb.base/exprs.exp: print unsigned short < (print v_unsigned_short < 0)
+PASS: gdb.base/exprs.exp: print unsigned short < (print v_unsigned_short < 0x7FFF)
+PASS: gdb.base/exprs.exp: print unsigned short > (setup)
+PASS: gdb.base/exprs.exp: print unsigned short > (print v_unsigned_short > 0)
+PASS: gdb.base/exprs.exp: print unsigned short > (print v_unsigned_short > 0x7FFF)
+PASS: gdb.base/exprs.exp: print unsigned short == (~0) (setup)
+PASS: gdb.base/exprs.exp: print unsigned short == (~0) (print v_unsigned_short == 0)
+PASS: gdb.base/exprs.exp: print unsigned short == (~0) (print sizeof (v_unsigned_short) < sizeof (~0) && v_unsigned_short == ~0)
+PASS: gdb.base/exprs.exp: print unsigned short == (~0) (print v_unsigned_short == (unsigned short)~0)
+PASS: gdb.base/exprs.exp: print unsigned short != (~0) (setup)
+PASS: gdb.base/exprs.exp: print unsigned short != (~0) (print v_unsigned_short != 0)
+PASS: gdb.base/exprs.exp: print unsigned short != (~0) (print v_unsigned_short != (unsigned short)~0)
+PASS: gdb.base/exprs.exp: print unsigned short < (~0) (setup)
+PASS: gdb.base/exprs.exp: print unsigned short < (~0) (print v_unsigned_short < 0)
+PASS: gdb.base/exprs.exp: print unsigned short < (~0) (print v_unsigned_short < 0x7FFF)
+PASS: gdb.base/exprs.exp: print unsigned short > (~0) (setup)
+PASS: gdb.base/exprs.exp: print unsigned short > (~0) (print v_unsigned_short > 0)
+PASS: gdb.base/exprs.exp: print unsigned short > (~0) (print v_unsigned_short > 0x7FFF)
+PASS: gdb.base/exprs.exp: print signed int == (setup)
+PASS: gdb.base/exprs.exp: print signed int == (print v_int == 0)
+PASS: gdb.base/exprs.exp: print signed int == (print v_int == 0x7FFF)
+PASS: gdb.base/exprs.exp: print signed int != (setup)
+PASS: gdb.base/exprs.exp: print signed int != (print v_int != 0)
+PASS: gdb.base/exprs.exp: print signed int != (print v_int != 0x7FFF)
+PASS: gdb.base/exprs.exp: print signed int < (setup)
+PASS: gdb.base/exprs.exp: print signed int < (print v_int < 0)
+PASS: gdb.base/exprs.exp: print signed int < (print v_int < 0x7FFF)
+PASS: gdb.base/exprs.exp: print signed int > (setup)
+PASS: gdb.base/exprs.exp: print signed int > (print v_int > 0)
+PASS: gdb.base/exprs.exp: print signed int > (print v_int > 0x7FFF)
+PASS: gdb.base/exprs.exp: print signed int == (minus) (setup)
+PASS: gdb.base/exprs.exp: print signed int == (minus) (print v_int == 0)
+PASS: gdb.base/exprs.exp: print signed int == (minus) (print v_int == -1)
+PASS: gdb.base/exprs.exp: print signed int != (minus) (setup)
+PASS: gdb.base/exprs.exp: print signed int != (minus) (print v_int != 0)
+PASS: gdb.base/exprs.exp: print signed int != (minus) (print v_int != -1)
+PASS: gdb.base/exprs.exp: print signed int < (minus) (setup)
+PASS: gdb.base/exprs.exp: print signed int < (minus) (print v_int < 0)
+PASS: gdb.base/exprs.exp: print signed int < (minus) (print v_int < 0x7FFF)
+PASS: gdb.base/exprs.exp: print signed int > (minus) (setup)
+PASS: gdb.base/exprs.exp: print signed int > (minus) (print v_int > 0)
+PASS: gdb.base/exprs.exp: print signed int > (minus) (print v_int > 0x7FFF)
+PASS: gdb.base/exprs.exp: print signed signed int == (setup)
+PASS: gdb.base/exprs.exp: print signed signed int == (print v_signed_int == 0)
+PASS: gdb.base/exprs.exp: print signed signed int == (print v_signed_int == 0x7FFF)
+PASS: gdb.base/exprs.exp: print signed signed int != (setup)
+PASS: gdb.base/exprs.exp: print signed signed int != (print v_signed_int != 0)
+PASS: gdb.base/exprs.exp: print signed signed int != (print v_signed_int != 0x7FFF)
+PASS: gdb.base/exprs.exp: print signed signed int < (setup)
+PASS: gdb.base/exprs.exp: print signed signed int < (print v_signed_int < 0)
+PASS: gdb.base/exprs.exp: print signed signed int < (print v_signed_int < 0x7FFF)
+PASS: gdb.base/exprs.exp: print signed signed int > (setup)
+PASS: gdb.base/exprs.exp: print signed signed int > (print v_signed_int > 0)
+PASS: gdb.base/exprs.exp: print signed signed int > (print v_signed_int > 0x7FFF)
+PASS: gdb.base/exprs.exp: print signed signed int == (minus) (setup)
+PASS: gdb.base/exprs.exp: print signed signed int == (minus) (print v_signed_int == 0)
+PASS: gdb.base/exprs.exp: print signed signed int == (minus) (print v_signed_int == -1)
+PASS: gdb.base/exprs.exp: print signed signed int != (minus) (setup)
+PASS: gdb.base/exprs.exp: print signed signed int != (minus) (print v_signed_int != 0)
+PASS: gdb.base/exprs.exp: print signed signed int != (minus) (print v_signed_int != -1)
+PASS: gdb.base/exprs.exp: print signed signed int < (minus) (setup)
+PASS: gdb.base/exprs.exp: print signed signed int < (minus) (print v_signed_int < 0)
+PASS: gdb.base/exprs.exp: print signed signed int < (minus) (print v_signed_int < 0x7FFF)
+PASS: gdb.base/exprs.exp: print signed signed int > (minus) (setup)
+PASS: gdb.base/exprs.exp: print signed signed int > (minus) (print v_signed_int > 0)
+PASS: gdb.base/exprs.exp: print signed signed int > (minus) (print v_signed_int > 0x7FFF)
+PASS: gdb.base/exprs.exp: print unsigned int == (setup)
+PASS: gdb.base/exprs.exp: print unsigned int == (print v_unsigned_int == 0)
+PASS: gdb.base/exprs.exp: print unsigned int == (print v_unsigned_int == 0x7FFF)
+PASS: gdb.base/exprs.exp: print unsigned int != (setup)
+PASS: gdb.base/exprs.exp: print unsigned int != (print v_unsigned_int != 0)
+PASS: gdb.base/exprs.exp: print unsigned int != (print v_unsigned_int != 0x7FFF)
+PASS: gdb.base/exprs.exp: print unsigned int < (setup)
+PASS: gdb.base/exprs.exp: print unsigned int < (print v_unsigned_int < 0)
+PASS: gdb.base/exprs.exp: print unsigned int < (print v_unsigned_int < 0x7FFF)
+PASS: gdb.base/exprs.exp: print unsigned int > (setup)
+PASS: gdb.base/exprs.exp: print unsigned int > (print v_unsigned_int > 0)
+PASS: gdb.base/exprs.exp: print unsigned int > (print v_unsigned_int > 0x7FFF)
+PASS: gdb.base/exprs.exp: print unsigned int == (~0) (setup)
+PASS: gdb.base/exprs.exp: print unsigned int == (~0) (print v_unsigned_int == 0)
+PASS: gdb.base/exprs.exp: print unsigned int == (~0) (print v_unsigned_int == ~0)
+PASS: gdb.base/exprs.exp: print unsigned int == (~0) (print v_unsigned_int == (unsigned int)~0)
+PASS: gdb.base/exprs.exp: print unsigned int != (~0) (setup)
+PASS: gdb.base/exprs.exp: print unsigned int != (~0) (print v_unsigned_int != 0)
+PASS: gdb.base/exprs.exp: print unsigned int != (~0) (print v_unsigned_int != (unsigned int)~0)
+PASS: gdb.base/exprs.exp: print unsigned int < (~0) (setup)
+PASS: gdb.base/exprs.exp: print unsigned int < (~0) (print v_unsigned_int < 0)
+PASS: gdb.base/exprs.exp: print unsigned int < (~0) (print v_unsigned_int < 0x7FFF)
+PASS: gdb.base/exprs.exp: print unsigned int > (~0) (setup)
+PASS: gdb.base/exprs.exp: print unsigned int > (~0) (print v_unsigned_int > 0)
+PASS: gdb.base/exprs.exp: print unsigned int > (~0) (print v_unsigned_int > 0x7FFF)
+PASS: gdb.base/exprs.exp: print signed long == (setup)
+PASS: gdb.base/exprs.exp: print signed long == (print v_long == 0)
+PASS: gdb.base/exprs.exp: print signed long == (print v_long == 0x7FFF)
+PASS: gdb.base/exprs.exp: print signed long != (setup)
+PASS: gdb.base/exprs.exp: print signed long != (print v_long != 0)
+PASS: gdb.base/exprs.exp: print signed long != (print v_long != 0x7FFF)
+PASS: gdb.base/exprs.exp: print signed long < (setup)
+PASS: gdb.base/exprs.exp: print signed long < (print v_long < 0)
+PASS: gdb.base/exprs.exp: print signed long < (print v_long < 0x7FFF)
+PASS: gdb.base/exprs.exp: print signed long > (setup)
+PASS: gdb.base/exprs.exp: print signed long > (print v_long > 0)
+PASS: gdb.base/exprs.exp: print signed long > (print v_long > 0x7FFF)
+PASS: gdb.base/exprs.exp: print signed long == (minus) (setup)
+PASS: gdb.base/exprs.exp: print signed long == (minus) (print v_long == 0)
+PASS: gdb.base/exprs.exp: print signed long == (minus) (print v_long == -1)
+PASS: gdb.base/exprs.exp: print signed long != (minus) (setup)
+PASS: gdb.base/exprs.exp: print signed long != (minus) (print v_long != 0)
+PASS: gdb.base/exprs.exp: print signed long != (minus) (print v_long != -1)
+PASS: gdb.base/exprs.exp: print signed long < (minus) (setup)
+PASS: gdb.base/exprs.exp: print signed long < (minus) (print v_long < 0)
+PASS: gdb.base/exprs.exp: print signed long < (minus) (print v_long < 0x7FFF)
+PASS: gdb.base/exprs.exp: print signed long > (minus) (setup)
+PASS: gdb.base/exprs.exp: print signed long > (minus) (print v_long > 0)
+PASS: gdb.base/exprs.exp: print signed long > (minus) (print v_long > 0x7FFF)
+PASS: gdb.base/exprs.exp: print signed signed long == (setup)
+PASS: gdb.base/exprs.exp: print signed signed long == (print v_signed_long == 0)
+PASS: gdb.base/exprs.exp: print signed signed long == (print v_signed_long == 0x7FFF)
+PASS: gdb.base/exprs.exp: print signed signed long != (setup)
+PASS: gdb.base/exprs.exp: print signed signed long != (print v_signed_long != 0)
+PASS: gdb.base/exprs.exp: print signed signed long != (print v_signed_long != 0x7FFF)
+PASS: gdb.base/exprs.exp: print signed signed long < (setup)
+PASS: gdb.base/exprs.exp: print signed signed long < (print v_signed_long < 0)
+PASS: gdb.base/exprs.exp: print signed signed long < (print v_signed_long < 0x7FFF)
+PASS: gdb.base/exprs.exp: print signed signed long > (setup)
+PASS: gdb.base/exprs.exp: print signed signed long > (print v_signed_long > 0)
+PASS: gdb.base/exprs.exp: print signed signed long > (print v_signed_long > 0x7FFF)
+PASS: gdb.base/exprs.exp: print signed signed long == (minus) (setup)
+PASS: gdb.base/exprs.exp: print signed signed long == (minus) (print v_signed_long == 0)
+PASS: gdb.base/exprs.exp: print signed signed long == (minus) (print v_signed_long == -1)
+PASS: gdb.base/exprs.exp: print signed signed long != (minus) (setup)
+PASS: gdb.base/exprs.exp: print signed signed long != (minus) (print v_signed_long != 0)
+PASS: gdb.base/exprs.exp: print signed signed long != (minus) (print v_signed_long != -1)
+PASS: gdb.base/exprs.exp: print signed signed long < (minus) (setup)
+PASS: gdb.base/exprs.exp: print signed signed long < (minus) (print v_signed_long < 0)
+PASS: gdb.base/exprs.exp: print signed signed long < (minus) (print v_signed_long < 0x7FFF)
+PASS: gdb.base/exprs.exp: print signed signed long > (minus) (setup)
+PASS: gdb.base/exprs.exp: print signed signed long > (minus) (print v_signed_long > 0)
+PASS: gdb.base/exprs.exp: print signed signed long > (minus) (print v_signed_long > 0x7FFF)
+PASS: gdb.base/exprs.exp: print unsigned long == (setup)
+PASS: gdb.base/exprs.exp: print unsigned long == (print v_unsigned_long == 0)
+PASS: gdb.base/exprs.exp: print unsigned long == (print v_unsigned_long == 0x7FFF)
+PASS: gdb.base/exprs.exp: print unsigned long != (setup)
+PASS: gdb.base/exprs.exp: print unsigned long != (print v_unsigned_long != 0)
+PASS: gdb.base/exprs.exp: print unsigned long != (print v_unsigned_long != 0x7FFF)
+PASS: gdb.base/exprs.exp: print unsigned long < (setup)
+PASS: gdb.base/exprs.exp: print unsigned long < (print v_unsigned_long < 0)
+PASS: gdb.base/exprs.exp: print unsigned long < (print v_unsigned_long < 0x7FFF)
+PASS: gdb.base/exprs.exp: print unsigned long > (setup)
+PASS: gdb.base/exprs.exp: print unsigned long > (print v_unsigned_long > 0)
+PASS: gdb.base/exprs.exp: print unsigned long > (print v_unsigned_long > 0x7FFF)
+PASS: gdb.base/exprs.exp: print unsigned long == (~0) (setup)
+PASS: gdb.base/exprs.exp: print unsigned long == (~0) (print v_unsigned_long == 0)
+PASS: gdb.base/exprs.exp: print unsigned long == (~0) (print v_unsigned_long == ~0)
+PASS: gdb.base/exprs.exp: print unsigned long == (~0) (print v_unsigned_long == (unsigned long)~0)
+PASS: gdb.base/exprs.exp: print unsigned long != (~0) (setup)
+PASS: gdb.base/exprs.exp: print unsigned long != (~0) (print v_unsigned_long != 0)
+PASS: gdb.base/exprs.exp: print unsigned long != (~0) (print v_unsigned_long != (unsigned long)~0)
+PASS: gdb.base/exprs.exp: print unsigned long < (~0) (setup)
+PASS: gdb.base/exprs.exp: print unsigned long < (~0) (print v_unsigned_long < 0)
+PASS: gdb.base/exprs.exp: print unsigned long < (~0) (print v_unsigned_long < 0x7FFF)
+PASS: gdb.base/exprs.exp: print unsigned long > (~0) (setup)
+PASS: gdb.base/exprs.exp: print unsigned long > (~0) (print v_unsigned_long > 0)
+PASS: gdb.base/exprs.exp: print unsigned long > (~0) (print v_unsigned_long > 0x7FFF)
+PASS: gdb.base/exprs.exp: print (void*)v_signed_char (setup)
+PASS: gdb.base/exprs.exp: print (void*)v_signed_char (print (void*)v_signed_char)
+PASS: gdb.base/exprs.exp: print (void*)v_signed_short (setup)
+PASS: gdb.base/exprs.exp: print (void*)v_signed_short (print (void*)v_signed_short)
+PASS: gdb.base/exprs.exp: print (void*)v_signed_int (setup)
+PASS: gdb.base/exprs.exp: print (void*)v_signed_int (print (void*)v_signed_int)
+PASS: gdb.base/exprs.exp: print (void*)v_signed_long (setup)
+PASS: gdb.base/exprs.exp: print (void*)v_signed_long (print (void*)v_signed_long)
+PASS: gdb.base/exprs.exp: print (void*)v_unsigned_char (setup)
+PASS: gdb.base/exprs.exp: print (void*)v_unsigned_char (print (void*)v_unsigned_char)
+PASS: gdb.base/exprs.exp: print (void*)v_unsigned_short (setup)
+PASS: gdb.base/exprs.exp: print (void*)v_unsigned_short (print (void*)v_unsigned_short)
+PASS: gdb.base/exprs.exp: print (void*)v_unsigned_int (setup)
+PASS: gdb.base/exprs.exp: print (void*)v_unsigned_int (print (void*)v_unsigned_int)
+PASS: gdb.base/exprs.exp: print (void*)v_unsigned_long (setup)
+PASS: gdb.base/exprs.exp: print (void*)v_unsigned_long (print (void*)v_unsigned_long)
+PASS: gdb.base/exprs.exp: sizeof (long long) > sizeof (long) (false)
+XFAIL: gdb.base/exprs.exp: truncate (void*) 0x00000000ffffffff + 1
+XFAIL: gdb.base/exprs.exp: truncate (void*) 0xffffffff00000000 - 1
+PASS: gdb.base/exprs.exp: \$[0-9]* = "xy" (setup)
+PASS: gdb.base/exprs.exp: \$[0-9]* = "xyz" (setup)
+PASS: gdb.base/exprs.exp: \$[0-9]* = red (setup)
+PASS: gdb.base/exprs.exp: set output-radix 8
+PASS: gdb.base/exprs.exp: \$[0-9]* = red (setup)
+PASS: gdb.base/exprs.exp: \$[0-9]* = 0 (setup)
+PASS: gdb.base/exprs.exp: set output-radix 10
+PASS: gdb.base/exprs.exp: set variable v_int = 1
+PASS: gdb.base/exprs.exp: print v_int++
+PASS: gdb.base/exprs.exp: print ++v_int
+PASS: gdb.base/exprs.exp: print v_int--
+PASS: gdb.base/exprs.exp: print --v_int
+PASS: gdb.base/exprs.exp: print v_int++ = 5
+PASS: gdb.base/exprs.exp: print v_int-- = 5
+PASS: gdb.base/exprs.exp: print v_int_array_init
+PASS: gdb.base/exprs.exp: print *v_int_array_init@1
+PASS: gdb.base/exprs.exp: print *v_int_array_init@2
+PASS: gdb.base/exprs.exp: print v_int_array_init[0]@1
+PASS: gdb.base/exprs.exp: print v_int_array_init[0]@2
+PASS: gdb.base/exprs.exp: print v_int_array_init[1]@1
+PASS: gdb.base/exprs.exp: set variable v_short_array[0] = 42
+PASS: gdb.base/exprs.exp: print {short} v_short_array
+PASS: gdb.base/exprs.exp: print (void) v_int_pointer
+PASS: gdb.base/exprs.exp: print & (void) v_char
+Running ./gdb.base/fileio.exp ...
+Running ./gdb.base/find.exp ...
+PASS: gdb.base/find.exp: breakpoint function in file
+PASS: gdb.base/find.exp: run until function breakpoint
+PASS: gdb.base/find.exp: find string pattern
+PASS: gdb.base/find.exp: pattern not found at end of range
+PASS: gdb.base/find.exp: pattern found at end of range
+PASS: gdb.base/find.exp: max-count
+PASS: gdb.base/find.exp: $_
+PASS: gdb.base/find.exp: $numfound
+PASS: gdb.base/find.exp: size,max-count, /1b
+PASS: gdb.base/find.exp: size,max-count, /b1
+PASS: gdb.base/find.exp: size,max-count, /b/1
+PASS: gdb.base/find.exp: size,max-count, /1/b
+PASS: gdb.base/find.exp: find byte pattern with end address
+PASS: gdb.base/find.exp: find 16-bit pattern
+PASS: gdb.base/find.exp: find 16-bit pattern
+PASS: gdb.base/find.exp: find 32-bit pattern
+PASS: gdb.base/find.exp: find 32-bit pattern
+PASS: gdb.base/find.exp: find 64-bit pattern
+PASS: gdb.base/find.exp: find 64-bit pattern
+PASS: gdb.base/find.exp: find mixed-sized pattern
+PASS: gdb.base/find.exp: search spanning large range
+PASS: gdb.base/find.exp: find int64_search_buf, +64/8*100, int64_search_buf
+Running ./gdb.base/find-unmapped.exp ...
+Running ./gdb.base/finish.exp ...
+PASS: gdb.base/finish.exp: set break on void_func
+PASS: gdb.base/finish.exp: continue to void_func
+PASS: gdb.base/finish.exp: finish from void_func
+PASS: gdb.base/finish.exp: set break on char_func
+PASS: gdb.base/finish.exp: continue to char_func
+PASS: gdb.base/finish.exp: finish from char_func
+PASS: gdb.base/finish.exp: set break on short_func
+PASS: gdb.base/finish.exp: continue to short_func
+PASS: gdb.base/finish.exp: finish from short_func
+PASS: gdb.base/finish.exp: set break on int_func
+PASS: gdb.base/finish.exp: continue to int_func
+PASS: gdb.base/finish.exp: finish from int_func
+PASS: gdb.base/finish.exp: set break on long_func
+PASS: gdb.base/finish.exp: continue to long_func
+PASS: gdb.base/finish.exp: finish from long_func
+PASS: gdb.base/finish.exp: set break on long_long_func
+PASS: gdb.base/finish.exp: continue to long_long_func
+PASS: gdb.base/finish.exp: finish from long_long_func
+PASS: gdb.base/finish.exp: set break on float_func
+PASS: gdb.base/finish.exp: continue to float_func
+PASS: gdb.base/finish.exp: finish from float_func
+PASS: gdb.base/finish.exp: set break on double_func
+PASS: gdb.base/finish.exp: continue to double_func
+PASS: gdb.base/finish.exp: finish from double_func
+PASS: gdb.base/finish.exp: Testing the "fin" abbreviation for "finish"
+Running ./gdb.base/fixsection.exp ...
+PASS: gdb.base/fixsection.exp: breakpoint at static_fun
+Running ./gdb.base/float.exp ...
+PASS: gdb.base/float.exp: info float
+PASS: gdb.base/float.exp: step
+PASS: gdb.base/float.exp: finish
+Running ./gdb.base/foll-exec.exp ...
+Running ./gdb.base/foll-fork.exp ...
+Running ./gdb.base/foll-vfork.exp ...
+Running ./gdb.base/fortran-sym-case.exp ...
+PASS: gdb.base/fortran-sym-case.exp: set language fortran
+PASS: gdb.base/fortran-sym-case.exp: frame
+Running ./gdb.base/frame-args.exp ...
+PASS: gdb.base/frame-args.exp: set print frame-arguments all
+PASS: gdb.base/frame-args.exp: frame 1 with print frame-arguments set to all
+PASS: gdb.base/frame-args.exp: set print frame-arguments scalars
+PASS: gdb.base/frame-args.exp: frame 1 with print frame-arguments set to scalars
+PASS: gdb.base/frame-args.exp: set print frame-arguments none
+PASS: gdb.base/frame-args.exp: frame 1 with print frame-arguments set to none
+Running ./gdb.base/freebpcmd.exp ...
+PASS: gdb.base/freebpcmd.exp: set breakpoint
+PASS: gdb.base/freebpcmd.exp: send breakpoint commands
+PASS: gdb.base/freebpcmd.exp: run program with breakpoint commands
+Running ./gdb.base/fullname.exp ...
+PASS: gdb.base/fullname.exp: set breakpoint by full path before loading symbols - built absolute
+PASS: gdb.base/fullname.exp: set breakpoint at main - built absolute
+PASS: gdb.base/fullname.exp: set breakpoint by full path after loading symbols - built absolute
+PASS: gdb.base/fullname.exp: set breakpoint by full path before loading symbols - built relative
+PASS: gdb.base/fullname.exp: set breakpoint at main - built relative
+PASS: gdb.base/fullname.exp: set breakpoint by full path after loading symbols - built relative
+PASS: gdb.base/fullname.exp: set breakpoint by full path before loading symbols - built other
+PASS: gdb.base/fullname.exp: set breakpoint at main - built other
+PASS: gdb.base/fullname.exp: set breakpoint by full path after loading symbols - built other
+Running ./gdb.base/fullpath-expand.exp ...
+PASS: gdb.base/fullpath-expand.exp: rbreak XXX/fullpath-expand-func.c:func
+PASS: gdb.base/fullpath-expand.exp: list func
+PASS: gdb.base/fullpath-expand.exp: info source
+Running ./gdb.base/funcargs.exp ...
+PASS: gdb.base/funcargs.exp: set print frame-arguments all
+PASS: gdb.base/funcargs.exp: run to call0a
+PASS: gdb.base/funcargs.exp: print c after run to call0a
+PASS: gdb.base/funcargs.exp: print s after run to call0a
+PASS: gdb.base/funcargs.exp: print i after run to call0a
+PASS: gdb.base/funcargs.exp: print l after run to call0a
+PASS: gdb.base/funcargs.exp: continue to call0b
+PASS: gdb.base/funcargs.exp: continue to call0c
+PASS: gdb.base/funcargs.exp: continue to call0d
+PASS: gdb.base/funcargs.exp: continue to call0e
+PASS: gdb.base/funcargs.exp: run to call1a
+PASS: gdb.base/funcargs.exp: print uc
+PASS: gdb.base/funcargs.exp: print us
+PASS: gdb.base/funcargs.exp: print ui
+PASS: gdb.base/funcargs.exp: print ul
+PASS: gdb.base/funcargs.exp: continue to call1b
+PASS: gdb.base/funcargs.exp: continue to call1c
+PASS: gdb.base/funcargs.exp: continue to call1d
+PASS: gdb.base/funcargs.exp: continue to call1e
+PASS: gdb.base/funcargs.exp: run to call2a
+PASS: gdb.base/funcargs.exp: print c after run to call2a
+PASS: gdb.base/funcargs.exp: print f1 after run to call2a
+PASS: gdb.base/funcargs.exp: print s after run to call2a
+PASS: gdb.base/funcargs.exp: print d1 after run to call2a
+PASS: gdb.base/funcargs.exp: print i after run to call2a
+PASS: gdb.base/funcargs.exp: print f2 after run to call2a
+PASS: gdb.base/funcargs.exp: print l after run to call2a
+PASS: gdb.base/funcargs.exp: print d2 after run to call2a
+PASS: gdb.base/funcargs.exp: continue to call2b
+PASS: gdb.base/funcargs.exp: continue to call2c
+PASS: gdb.base/funcargs.exp: continue to call2d
+PASS: gdb.base/funcargs.exp: continue to call2e
+PASS: gdb.base/funcargs.exp: continue to call2f
+PASS: gdb.base/funcargs.exp: continue to call2g
+PASS: gdb.base/funcargs.exp: continue to call2h
+PASS: gdb.base/funcargs.exp: continue to call2i
+PASS: gdb.base/funcargs.exp: run to call2a
+PASS: gdb.base/funcargs.exp: continue to callcb
+PASS: gdb.base/funcargs.exp: continue to callcc
+PASS: gdb.base/funcargs.exp: continue to callcd
+PASS: gdb.base/funcargs.exp: continue to callce
+PASS: gdb.base/funcargs.exp: continue to callcf
+PASS: gdb.base/funcargs.exp: run to callc1a
+PASS: gdb.base/funcargs.exp: continue to callc1b
+PASS: gdb.base/funcargs.exp: run to callc2a
+PASS: gdb.base/funcargs.exp: continue to callc2b
+PASS: gdb.base/funcargs.exp: run to call3a
+PASS: gdb.base/funcargs.exp: print *cp
+PASS: gdb.base/funcargs.exp: print *sp
+PASS: gdb.base/funcargs.exp: print *ip
+PASS: gdb.base/funcargs.exp: print *lp
+PASS: gdb.base/funcargs.exp: continue to call3b
+PASS: gdb.base/funcargs.exp: print *ucp
+PASS: gdb.base/funcargs.exp: print *usp
+PASS: gdb.base/funcargs.exp: print *uip
+PASS: gdb.base/funcargs.exp: print *ulp
+PASS: gdb.base/funcargs.exp: continue to call3c
+PASS: gdb.base/funcargs.exp: print *fp
+PASS: gdb.base/funcargs.exp: print *dp
+PASS: gdb.base/funcargs.exp: run to call4a
+PASS: gdb.base/funcargs.exp: print *stp
+PASS: gdb.base/funcargs.exp: continue to call4b
+PASS: gdb.base/funcargs.exp: print *unp (little-endian, sizeof long != sizeof int)
+PASS: gdb.base/funcargs.exp: locate actual args, structs/unions passed by reference
+PASS: gdb.base/funcargs.exp: run to call5a
+PASS: gdb.base/funcargs.exp: print st
+PASS: gdb.base/funcargs.exp: continue to call5b (little-endian, sizeof long != sizeof int)
+PASS: gdb.base/funcargs.exp: print un (little-endian, sizeof long != sizeof int)
+PASS: gdb.base/funcargs.exp: run to call6a
+PASS: gdb.base/funcargs.exp: backtrace from call6a
+PASS: gdb.base/funcargs.exp: continue to call6b
+PASS: gdb.base/funcargs.exp: backtrace from call6b
+PASS: gdb.base/funcargs.exp: continue to call6c
+PASS: gdb.base/funcargs.exp: backtrace from call6c
+PASS: gdb.base/funcargs.exp: continue to call6d
+PASS: gdb.base/funcargs.exp: backtrace from call6d
+PASS: gdb.base/funcargs.exp: continue to call6e
+PASS: gdb.base/funcargs.exp: backtrace from call6e
+PASS: gdb.base/funcargs.exp: continue to call6f
+PASS: gdb.base/funcargs.exp: backtrace from call6f
+PASS: gdb.base/funcargs.exp: continue to call6g
+PASS: gdb.base/funcargs.exp: backtrace from call6g
+PASS: gdb.base/funcargs.exp: continue to call6h
+PASS: gdb.base/funcargs.exp: backtrace from call6h
+PASS: gdb.base/funcargs.exp: continue to call6i
+PASS: gdb.base/funcargs.exp: backtrace from call6i
+PASS: gdb.base/funcargs.exp: continue to call6j
+PASS: gdb.base/funcargs.exp: backtrace from call6j
+PASS: gdb.base/funcargs.exp: continue to call6k
+PASS: gdb.base/funcargs.exp: backtrace from call6k
+PASS: gdb.base/funcargs.exp: run to call7a
+PASS: gdb.base/funcargs.exp: backtrace from call7a
+PASS: gdb.base/funcargs.exp: continue to call7b
+PASS: gdb.base/funcargs.exp: backtrace from call7b
+PASS: gdb.base/funcargs.exp: continue to call7c
+PASS: gdb.base/funcargs.exp: backtrace from call7c
+PASS: gdb.base/funcargs.exp: continue to call7d
+PASS: gdb.base/funcargs.exp: backtrace from call7d
+PASS: gdb.base/funcargs.exp: continue to call7e
+PASS: gdb.base/funcargs.exp: backtrace from call7e
+PASS: gdb.base/funcargs.exp: continue to call7f
+PASS: gdb.base/funcargs.exp: backtrace from call7f
+PASS: gdb.base/funcargs.exp: continue to call7g
+PASS: gdb.base/funcargs.exp: backtrace from call7g
+PASS: gdb.base/funcargs.exp: continue to call7h
+PASS: gdb.base/funcargs.exp: backtrace from call7h
+PASS: gdb.base/funcargs.exp: continue to call7i
+PASS: gdb.base/funcargs.exp: backtrace from call7i
+PASS: gdb.base/funcargs.exp: continue to call7j
+PASS: gdb.base/funcargs.exp: backtrace from call7j
+PASS: gdb.base/funcargs.exp: continue to call7k
+PASS: gdb.base/funcargs.exp: backtrace from call7k
+PASS: gdb.base/funcargs.exp: run to hitbottom
+PASS: gdb.base/funcargs.exp: recursive passing of structs by value
+PASS: gdb.base/funcargs.exp: print c after runto localvars_after_alloca
+PASS: gdb.base/funcargs.exp: print s after runto localvars_after_alloca
+PASS: gdb.base/funcargs.exp: print i after runto localvars_after_alloca
+PASS: gdb.base/funcargs.exp: print l after runto localvars_after_alloca
+PASS: gdb.base/funcargs.exp: next in localvars_after_alloca()
+PASS: gdb.base/funcargs.exp: print c in localvars_after_alloca
+PASS: gdb.base/funcargs.exp: print s in localvars_after_alloca
+PASS: gdb.base/funcargs.exp: print i in localvars_after_alloca
+PASS: gdb.base/funcargs.exp: print l in localvars_after_alloca
+PASS: gdb.base/funcargs.exp: backtrace after alloca
+PASS: gdb.base/funcargs.exp: print c in call_after_alloca
+PASS: gdb.base/funcargs.exp: print s in call_after_alloca
+PASS: gdb.base/funcargs.exp: print i in call_after_alloca
+PASS: gdb.base/funcargs.exp: print l in call_after_alloca
+PASS: gdb.base/funcargs.exp: backtrace from call_after_alloca_subr
+PASS: gdb.base/funcargs.exp: continue to call0a
+PASS: gdb.base/funcargs.exp: print c in localvars_in_indirect_call
+PASS: gdb.base/funcargs.exp: print s in localvars_in_indirect_call
+PASS: gdb.base/funcargs.exp: print i in localvars_in_indirect_call
+PASS: gdb.base/funcargs.exp: print l in localvars_in_indirect_call
+PASS: gdb.base/funcargs.exp: backtrace in indirectly called function
+PASS: gdb.base/funcargs.exp: finish from indirectly called function
+PASS: gdb.base/funcargs.exp: stepping into indirectly called function
+PASS: gdb.base/funcargs.exp: finish from marker_call_with_trampolines
+PASS: gdb.base/funcargs.exp: stepping into function called with trampolines
+PASS: gdb.base/funcargs.exp: backtrace through call with trampolines
+PASS: gdb.base/funcargs.exp: stepping back to main from function called with trampolines
+Running ./gdb.base/gcore-buffer-overflow.exp ...
+PASS: gdb.base/gcore-buffer-overflow.exp: help gcore
+PASS: gdb.base/gcore-buffer-overflow.exp: Set buffer exceeding arguments
+PASS: gdb.base/gcore-buffer-overflow.exp: save a corefile
+Running ./gdb.base/gcore.exp ...
+PASS: gdb.base/gcore.exp: help gcore
+PASS: gdb.base/gcore.exp: set breakpoint at terminal_func
+PASS: gdb.base/gcore.exp: continue to terminal_func
+PASS: gdb.base/gcore.exp: save a corefile
+FAIL: gdb.base/gcore.exp: re-load generated corefile (bad file format)
+Running ./gdb.base/gcore-relro.exp ...
+PASS: gdb.base/gcore-relro.exp: help gcore
+PASS: gdb.base/gcore-relro.exp: save a corefile
+FAIL: gdb.base/gcore-relro.exp: re-load generated corefile
+FAIL: gdb.base/gcore-relro.exp: library got loaded
+Running ./gdb.base/gdb1056.exp ...
+PASS: gdb.base/gdb1056.exp: print 1/0
+PASS: gdb.base/gdb1056.exp: Test unsigned division by zero
+Running ./gdb.base/gdb1090.exp ...
+PASS: gdb.base/gdb1090.exp: continue to breakpoint: break-here
+PASS: gdb.base/gdb1090.exp: print s24
+Running ./gdb.base/gdb11530.exp ...
+PASS: gdb.base/gdb11530.exp: print a.i
+PASS: gdb.base/gdb11530.exp: print sizeof (a.i)
+PASS: gdb.base/gdb11530.exp: print sizeof (a.i) == sizeof (int)
+Running ./gdb.base/gdb11531.exp ...
+PASS: gdb.base/gdb11531.exp: Set watchpoint
+PASS: gdb.base/gdb11531.exp: watchpoint variable triggers at next
+PASS: gdb.base/gdb11531.exp: watchpoint variable triggers at continue
+Running ./gdb.base/gdb1250.exp ...
+PASS: gdb.base/gdb1250.exp: backtrace from abort
+Running ./gdb.base/gdb1555.exp ...
+PASS: gdb.base/gdb1555.exp: Step into shared lib function
+PASS: gdb.base/gdb1555.exp: Next while in a shared lib function
+Running ./gdb.base/gdb1821.exp ...
+PASS: gdb.base/gdb1821.exp: print /x bar
+Running ./gdb.base/gdbindex-stabs.exp ...
+PASS: gdb.base/gdbindex-stabs.exp: list stabs_function
+Running ./gdb.base/gdbvars.exp ...
+PASS: gdb.base/gdbvars.exp: set print sevenbit-strings
+PASS: gdb.base/gdbvars.exp: Set value-history[1] using $1
+PASS: gdb.base/gdbvars.exp: Set value-history[2] using $2
+PASS: gdb.base/gdbvars.exp: Set value-history[3] using $3
+PASS: gdb.base/gdbvars.exp: Print value-history[MAX-1] using inplicit index $$
+PASS: gdb.base/gdbvars.exp: Print value-history[MAX-1] again using implicit index $$
+PASS: gdb.base/gdbvars.exp: Print value-history[MAX] using implicit index $
+PASS: gdb.base/gdbvars.exp: Print value-history[MAX-2] using explicit index $$2
+PASS: gdb.base/gdbvars.exp: Print value-history[MAX] using explicit index $0
+PASS: gdb.base/gdbvars.exp: print 108
+PASS: gdb.base/gdbvars.exp: Print value-history[MAX] using explicit index $$0
+PASS: gdb.base/gdbvars.exp: Print value-history[1] using explicit index $1
+PASS: gdb.base/gdbvars.exp: Print value-history[2] using explicit index $2
+PASS: gdb.base/gdbvars.exp: Print value-history[3] using explicit index $3
+PASS: gdb.base/gdbvars.exp: Print (value-history[MAX] - 3) using implicit index $
+PASS: gdb.base/gdbvars.exp: Use value-history element in arithmetic expression
+PASS: gdb.base/gdbvars.exp: Set a new convenience variable
+PASS: gdb.base/gdbvars.exp: Print contents of new convenience variable
+PASS: gdb.base/gdbvars.exp: Set convenience variable to a new value
+PASS: gdb.base/gdbvars.exp: Print new contents of convenience variable
+PASS: gdb.base/gdbvars.exp: Set convenience variable $_
+PASS: gdb.base/gdbvars.exp: Print contents of convenience variable $_
+PASS: gdb.base/gdbvars.exp: Use convenience variable in arithmetic expression
+PASS: gdb.base/gdbvars.exp: Use convenience variable assignment in arithmetic expression
+PASS: gdb.base/gdbvars.exp: Print contents of uninitialized convenience variable
+PASS: gdb.base/gdbvars.exp: Set a new convenience variable to a program variable
+PASS: gdb.base/gdbvars.exp: Print contents of new convenience variable of program variable
+Running ./gdb.base/gnu-debugdata.exp ...
+PASS: gdb.base/gnu-debugdata.exp: nm -D - invoke x86_64-cros-linux-gnu-nm
+PASS: gdb.base/gnu-debugdata.exp: nm -D - invoke awk
+PASS: gdb.base/gnu-debugdata.exp: nm -D - invoke sort
+PASS: gdb.base/gnu-debugdata.exp: nm - invoke x86_64-cros-linux-gnu-nm
+PASS: gdb.base/gnu-debugdata.exp: nm - invoke awk
+PASS: gdb.base/gnu-debugdata.exp: nm - invoke sort
+PASS: gdb.base/gnu-debugdata.exp: comm
+PASS: gdb.base/gnu-debugdata.exp: objcopy 1
+PASS: gdb.base/gnu-debugdata.exp: strip
+PASS: gdb.base/gnu-debugdata.exp: copydebug
+PASS: gdb.base/gnu-debugdata.exp: addlink
+PASS: gdb.base/gnu-debugdata.exp: xz
+PASS: gdb.base/gnu-debugdata.exp: objcopy 2
+PASS: gdb.base/gnu-debugdata.exp: no symtab
+PASS: gdb.base/gnu-debugdata.exp: have symtab
+PASS: gdb.base/gnu-debugdata.exp: unload MiniDebugInfo
+Running ./gdb.base/gnu-ifunc.exp ...
+PASS: gdb.base/gnu-ifunc.exp: continue to breakpoint: break-at-call
+FAIL: gdb.base/gnu-ifunc.exp: p gnu_ifunc (3)
+FAIL: gdb.base/gnu-ifunc.exp: step
+FAIL: gdb.base/gnu-ifunc.exp: continue to break-at-nextcall
+FAIL: gdb.base/gnu-ifunc.exp: continue to breakpoint: nextcall gnu_ifunc
+FAIL: gdb.base/gnu-ifunc.exp: nextcall gnu_ifunc skipped
+PASS: gdb.base/gnu-ifunc.exp: p gnu_ifunc executing
+PASS: gdb.base/gnu-ifunc.exp: info sym gnu_ifunc executing
+PASS: gdb.base/gnu-ifunc.exp: info addr gnu_ifunc
+PASS: gdb.base/gnu-ifunc.exp: info sym <gnu_ifunc-address>
+PASS: gdb.base/gnu-ifunc.exp: static gnu_ifunc
+Running ./gdb.base/gnu_vector.exp ...
+PASS: gdb.base/gnu_vector.exp: print c4
+PASS: gdb.base/gnu_vector.exp: print c4[2]
+PASS: gdb.base/gnu_vector.exp: print i4a
+PASS: gdb.base/gnu_vector.exp: print i4b
+PASS: gdb.base/gnu_vector.exp: print i4a + i4b
+PASS: gdb.base/gnu_vector.exp: print i4a - i4b
+PASS: gdb.base/gnu_vector.exp: print i4a * i4b
+PASS: gdb.base/gnu_vector.exp: print i4a / i4b
+PASS: gdb.base/gnu_vector.exp: print i4a % i4b
+PASS: gdb.base/gnu_vector.exp: print i4a++
+PASS: gdb.base/gnu_vector.exp: print ++i4a
+PASS: gdb.base/gnu_vector.exp: print i4a--
+PASS: gdb.base/gnu_vector.exp: print --i4a
+PASS: gdb.base/gnu_vector.exp: print +i4a
+PASS: gdb.base/gnu_vector.exp: print -i4a
+PASS: gdb.base/gnu_vector.exp: print i4a & i4b
+PASS: gdb.base/gnu_vector.exp: print i4a | i4b
+PASS: gdb.base/gnu_vector.exp: print i4a ^ i4b
+PASS: gdb.base/gnu_vector.exp: print ~i4a
+PASS: gdb.base/gnu_vector.exp: print i4a << i4b
+PASS: gdb.base/gnu_vector.exp: print i4a >> i4b
+PASS: gdb.base/gnu_vector.exp: print f4a
+PASS: gdb.base/gnu_vector.exp: print f4b
+PASS: gdb.base/gnu_vector.exp: print f4a + f4b
+PASS: gdb.base/gnu_vector.exp: print f4a - f4b
+PASS: gdb.base/gnu_vector.exp: print f4a * f4b
+PASS: gdb.base/gnu_vector.exp: print f4a / f4b
+PASS: gdb.base/gnu_vector.exp: print +f4a
+PASS: gdb.base/gnu_vector.exp: print -f4a
+PASS: gdb.base/gnu_vector.exp: print (char4) 0x01010101
+PASS: gdb.base/gnu_vector.exp: print (char4) ia
+PASS: gdb.base/gnu_vector.exp: print (int2) lla
+PASS: gdb.base/gnu_vector.exp: print (int2) 1
+PASS: gdb.base/gnu_vector.exp: print (longlong2) 2
+PASS: gdb.base/gnu_vector.exp: print (float2) 3
+PASS: gdb.base/gnu_vector.exp: print (double2) 4
+PASS: gdb.base/gnu_vector.exp: print (uint4) ia
+PASS: gdb.base/gnu_vector.exp: print (int4) -3
+PASS: gdb.base/gnu_vector.exp: print (float4) 4
+PASS: gdb.base/gnu_vector.exp: print i4b = ia
+PASS: gdb.base/gnu_vector.exp: print i4a = 3
+PASS: gdb.base/gnu_vector.exp: print f4a = fb
+PASS: gdb.base/gnu_vector.exp: print f4b = 2
+PASS: gdb.base/gnu_vector.exp: print c4 + lla
+PASS: gdb.base/gnu_vector.exp: print i4a + lla
+PASS: gdb.base/gnu_vector.exp: print lla + c4
+PASS: gdb.base/gnu_vector.exp: print lla + i4a
+PASS: gdb.base/gnu_vector.exp: print c4 + ib
+PASS: gdb.base/gnu_vector.exp: print i4a + ib
+PASS: gdb.base/gnu_vector.exp: print i4a + 1
+PASS: gdb.base/gnu_vector.exp: print 1 + i4a
+PASS: gdb.base/gnu_vector.exp: print fa - f4b
+PASS: gdb.base/gnu_vector.exp: print 2 - f4b
+PASS: gdb.base/gnu_vector.exp: print f4a * fb
+PASS: gdb.base/gnu_vector.exp: print f4a * 1
+PASS: gdb.base/gnu_vector.exp: print ia / i4b
+PASS: gdb.base/gnu_vector.exp: print 2 / i4b
+PASS: gdb.base/gnu_vector.exp: print i4a % ib
+PASS: gdb.base/gnu_vector.exp: print i4a % 1
+PASS: gdb.base/gnu_vector.exp: print ia & i4b
+PASS: gdb.base/gnu_vector.exp: print 2 & i4b
+PASS: gdb.base/gnu_vector.exp: print i4a | ib
+PASS: gdb.base/gnu_vector.exp: print i4a | 1
+PASS: gdb.base/gnu_vector.exp: print ia ^ i4b
+PASS: gdb.base/gnu_vector.exp: print 2 ^ i4b
+PASS: gdb.base/gnu_vector.exp: print i4a << ib
+PASS: gdb.base/gnu_vector.exp: print i4a << 1
+PASS: gdb.base/gnu_vector.exp: print i4a >> ib
+PASS: gdb.base/gnu_vector.exp: print i4a >> 1
+PASS: gdb.base/gnu_vector.exp: print i4a = {2, 4, 8, 16}
+PASS: gdb.base/gnu_vector.exp: print i4a <<= ib
+PASS: gdb.base/gnu_vector.exp: print i4a + d2
+PASS: gdb.base/gnu_vector.exp: print d2 + i4a
+PASS: gdb.base/gnu_vector.exp: print f4a + ll2
+PASS: gdb.base/gnu_vector.exp: print ll2 + f4a
+PASS: gdb.base/gnu_vector.exp: print i2 + ll2
+PASS: gdb.base/gnu_vector.exp: print ll2 + i2
+PASS: gdb.base/gnu_vector.exp: print i4a + ll2
+PASS: gdb.base/gnu_vector.exp: print ll2 + i4a
+PASS: gdb.base/gnu_vector.exp: print f4a + d2
+PASS: gdb.base/gnu_vector.exp: print d2 + f4a
+PASS: gdb.base/gnu_vector.exp: print ui4 + i4a
+PASS: gdb.base/gnu_vector.exp: print i4a + ui4
+PASS: gdb.base/gnu_vector.exp: print i4a + i2
+PASS: gdb.base/gnu_vector.exp: print i2 + i4a
+PASS: gdb.base/gnu_vector.exp: print f4a + f2
+PASS: gdb.base/gnu_vector.exp: print f2 + f4a
+PASS: gdb.base/gnu_vector.exp: print (double2) f2
+PASS: gdb.base/gnu_vector.exp: print (int4) c4
+PASS: gdb.base/gnu_vector.exp: print (char4) i4a
+PASS: gdb.base/gnu_vector.exp: ptype c4
+PASS: gdb.base/gnu_vector.exp: ptype char4
+PASS: gdb.base/gnu_vector.exp: ptype i4a
+PASS: gdb.base/gnu_vector.exp: ptype int4
+PASS: gdb.base/gnu_vector.exp: ptype f4b
+PASS: gdb.base/gnu_vector.exp: ptype float4
+PASS: gdb.base/gnu_vector.exp: ptype union_with_vector_1
+PASS: gdb.base/gnu_vector.exp: ptype struct_with_vector_1
+Running ./gdb.base/hashline1.exp ...
+PASS: gdb.base/hashline1.exp: set breakpoint
+Running ./gdb.base/hashline2.exp ...
+PASS: gdb.base/hashline2.exp: set breakpoint
+Running ./gdb.base/hashline3.exp ...
+PASS: gdb.base/hashline3.exp: set breakpoint
+Running ./gdb.base/hbreak2.exp ...
+PASS: gdb.base/hbreak2.exp: hardware breakpoint support
+PASS: gdb.base/hbreak2.exp: hardware breakpoint insertion
+PASS: gdb.base/hbreak2.exp: hardware breakpoint function
+PASS: gdb.base/hbreak2.exp: hardware breakpoint quoted function
+PASS: gdb.base/hbreak2.exp: hardware breakpoint function in file
+PASS: gdb.base/hbreak2.exp: use `list' to establish default source file
+PASS: gdb.base/hbreak2.exp: hardware breakpoint line number
+PASS: gdb.base/hbreak2.exp: hardware breakpoint line number in file
+PASS: gdb.base/hbreak2.exp: hardware breakpoint at start of multi line if conditional
+PASS: gdb.base/hbreak2.exp: hardware breakpoint at start of multi line while conditional
+PASS: gdb.base/hbreak2.exp: hardware breakpoint info
+PASS: gdb.base/hbreak2.exp: hardware breakpoint function (2)
+PASS: gdb.base/hbreak2.exp: run until function breakpoint
+PASS: gdb.base/hbreak2.exp: hardware breakpoint line number (2)
+PASS: gdb.base/hbreak2.exp: run until breakpoint set at a line number
+PASS: gdb.base/hbreak2.exp: hardware breakpoint function in file (2)
+PASS: gdb.base/hbreak2.exp: run until file:function(6) breakpoint
+PASS: gdb.base/hbreak2.exp: run until file:function(5) breakpoint
+PASS: gdb.base/hbreak2.exp: run until file:function(4) breakpoint
+PASS: gdb.base/hbreak2.exp: run until file:function(3) breakpoint
+PASS: gdb.base/hbreak2.exp: run until file:function(2) breakpoint
+PASS: gdb.base/hbreak2.exp: run until file:function(1) breakpoint
+PASS: gdb.base/hbreak2.exp: hardware breakpoint quoted function (2)
+PASS: gdb.base/hbreak2.exp: run until quoted breakpoint
+PASS: gdb.base/hbreak2.exp: hardware breakpoint line number in file (2)
+PASS: gdb.base/hbreak2.exp: run until file:linenum breakpoint
+PASS: gdb.base/hbreak2.exp: hardware breakpoint offset +1
+PASS: gdb.base/hbreak2.exp: step onto hardware breakpoint
+PASS: gdb.base/hbreak2.exp: setting hardware breakpoint at }
+PASS: gdb.base/hbreak2.exp: continue to hardware breakpoint at }
+PASS: gdb.base/hbreak2.exp: temporary hardware breakpoint function
+PASS: gdb.base/hbreak2.exp: temporary hardware breakpoint function in file
+PASS: gdb.base/hbreak2.exp: temporary hardware breakpoint line number #1
+PASS: gdb.base/hbreak2.exp: temporary hardware breakpoint line number #2
+PASS: gdb.base/hbreak2.exp: temporary hardware breakpoint line number in file #1
+PASS: gdb.base/hbreak2.exp: temporary hardware breakpoint line number in file #2
+PASS: gdb.base/hbreak2.exp: temporary hardware breakpoint info
+PASS: gdb.base/hbreak2.exp: set breakpoint pending off
+PASS: gdb.base/hbreak2.exp: hardware break on non-existent source line
+PASS: gdb.base/hbreak2.exp: until bp_location1
+PASS: gdb.base/hbreak2.exp: hardware break on default location
+PASS: gdb.base/hbreak2.exp: set to-be-silent hardware break bp_location1
+PASS: gdb.base/hbreak2.exp: set silent break bp_location1
+PASS: gdb.base/hbreak2.exp: info silent hardware break bp_location1
+PASS: gdb.base/hbreak2.exp: hit silent hardware break bp_location1
+PASS: gdb.base/hbreak2.exp: stopped for silent hardware break bp_location1
+PASS: gdb.base/hbreak2.exp: thread-specific hardware breakpoint on non-existent thread disallowed
+PASS: gdb.base/hbreak2.exp: thread-specific hardware breakpoint on bogus thread ID disallowed
+PASS: gdb.base/hbreak2.exp: hardware breakpoint with trailing garbage disallowed
+PASS: gdb.base/hbreak2.exp: step over hardware breakpoint
+PASS: gdb.base/hbreak2.exp: clear line has no breakpoint disallowed
+PASS: gdb.base/hbreak2.exp: clear current line has no breakpoint disallowed
+PASS: gdb.base/hbreak2.exp: set convenience variable $foo to bp_location11
+PASS: gdb.base/hbreak2.exp: set hardware breakpoint via convenience variable
+PASS: gdb.base/hbreak2.exp: set convenience variable $foo to 81.5
+PASS: gdb.base/hbreak2.exp: set hardware breakpoint via non-integer convenience variable disallowed
+PASS: gdb.base/hbreak2.exp: set hardware breakpoint on to-be-called function
+PASS: gdb.base/hbreak2.exp: hit hardware breakpoint on called function
+PASS: gdb.base/hbreak2.exp: backtrace while in called function
+PASS: gdb.base/hbreak2.exp: finish from called function
+PASS: gdb.base/hbreak2.exp: hardware break at factorial
+PASS: gdb.base/hbreak2.exp: kill program
+PASS: gdb.base/hbreak2.exp: run to factorial(6)
+PASS: gdb.base/hbreak2.exp: continue to factorial(5)
+PASS: gdb.base/hbreak2.exp: backtrace from factorial(5)
+PASS: gdb.base/hbreak2.exp: next to recursive call
+PASS: gdb.base/hbreak2.exp: next over recursive call
+PASS: gdb.base/hbreak2.exp: backtrace from factorial(5.1)
+PASS: gdb.base/hbreak2.exp: continue until exit at recursive next test
+PASS: gdb.base/hbreak2.exp: hardware breakpoint function, optimized file
+PASS: gdb.base/hbreak2.exp: run until hardware function breakpoint, optimized file (code motion)
+PASS: gdb.base/hbreak2.exp: hardware breakpoint small function, optimized file
+PASS: gdb.base/hbreak2.exp: run until hardware breakpoint set at small function, optimized file
+Running ./gdb.base/hbreak.exp ...
+Running ./gdb.base/help.exp ...
+PASS: gdb.base/help.exp: disable pagination
+PASS: gdb.base/help.exp: help aliases
+PASS: gdb.base/help.exp: help breakpoints
+PASS: gdb.base/help.exp: help data
+PASS: gdb.base/help.exp: help files
+PASS: gdb.base/help.exp: help internals
+PASS: gdb.base/help.exp: help obscure
+PASS: gdb.base/help.exp: help running
+PASS: gdb.base/help.exp: help stack
+PASS: gdb.base/help.exp: help status
+PASS: gdb.base/help.exp: help support
+PASS: gdb.base/help.exp: help tracepoints
+PASS: gdb.base/help.exp: help user-defined
+PASS: gdb.base/help.exp: help breakpoint "b" abbreviation
+PASS: gdb.base/help.exp: help breakpoint "br" abbreviation
+PASS: gdb.base/help.exp: help breakpoint "bre" abbreviation
+PASS: gdb.base/help.exp: help breakpoint "brea" abbreviation
+PASS: gdb.base/help.exp: help breakpoint "break" abbreviation
+PASS: gdb.base/help.exp: help backtrace "bt" abbreviation
+PASS: gdb.base/help.exp: help backtrace
+PASS: gdb.base/help.exp: help commands
+PASS: gdb.base/help.exp: help delete "d" abbreviation
+PASS: gdb.base/help.exp: help delete
+PASS: gdb.base/help.exp: help help "h" abbreviation
+PASS: gdb.base/help.exp: help help
+PASS: gdb.base/help.exp: help show copying
+PASS: gdb.base/help.exp: help show warranty
+PASS: gdb.base/help.exp: help show commands
+PASS: gdb.base/help.exp: help show confirm
+PASS: gdb.base/help.exp: help info bogus-gdb-command
+PASS: gdb.base/help.exp: help gotcha
+PASS: gdb.base/help.exp: apropos \(print[^ bsiedf\".-]\)
+PASS: gdb.base/help.exp: apropos handle signal
+PASS: gdb.base/help.exp: apropos apropos
+Running ./gdb.base/hook-stop-continue.exp ...
+PASS: gdb.base/hook-stop-continue.exp: breakpoint line number
+PASS: gdb.base/hook-stop-continue.exp: print $do_continue = 1
+PASS: gdb.base/hook-stop-continue.exp: define hook-stop command
+PASS: gdb.base/hook-stop-continue.exp: next triggering hook-stop
+PASS: gdb.base/hook-stop-continue.exp: next no hook-stop
+Running ./gdb.base/hook-stop-frame.exp ...
+PASS: gdb.base/hook-stop-frame.exp: breakpoint line number
+PASS: gdb.base/hook-stop-frame.exp: define hook-stop command
+PASS: gdb.base/hook-stop-frame.exp: hook-stop runs before frame print
+Running ./gdb.base/huge.exp ...
+PASS: gdb.base/huge.exp: print a very large data object
+Running ./gdb.base/ifelse.exp ...
+PASS: gdb.base/ifelse.exp: if 1 with empty body
+PASS: gdb.base/ifelse.exp: if 0 with empty body
+PASS: gdb.base/ifelse.exp: if true else false #1
+PASS: gdb.base/ifelse.exp: if 1 .. else with empty body
+PASS: gdb.base/ifelse.exp: if true else false #2
+PASS: gdb.base/ifelse.exp: if 0 .. else with empty body
+PASS: gdb.base/ifelse.exp: if true else false #3
+PASS: gdb.base/ifelse.exp: create define with empty else
+PASS: gdb.base/ifelse.exp: call original define
+PASS: gdb.base/ifelse.exp: replace define with if .. else with empty body
+PASS: gdb.base/ifelse.exp: call replacement define
+Running ./gdb.base/included.exp ...
+PASS: gdb.base/included.exp: set listsize 1
+PASS: gdb.base/included.exp: list main
+PASS: gdb.base/included.exp: list integer
+PASS: gdb.base/included.exp: ptype integer
+PASS: gdb.base/included.exp: info variables integer
+Running ./gdb.base/inferior-died.exp ...
+UNSUPPORTED: gdb.base/inferior-died.exp: inferior-died.exp
+Running ./gdb.base/infnan.exp ...
+PASS: gdb.base/infnan.exp: print a
+PASS: gdb.base/infnan.exp: print b
+Running ./gdb.base/info-fun.exp ...
+Running ./gdb.base/infoline.exp ...
+PASS: gdb.base/infoline.exp: info line infoline.c:18
+Running ./gdb.base/info-macros.exp ...
+FAIL: gdb.base/info-macros.exp: info macro -- -all
+FAIL: gdb.base/info-macros.exp: info macro -- -all
+PASS: gdb.base/info-macros.exp: info macro -all --
+PASS: gdb.base/info-macros.exp: info macro -all --
+PASS: gdb.base/info-macros.exp: info macro -all --
+PASS: gdb.base/info-macros.exp: info macro --
+PASS: gdb.base/info-macros.exp: 'info macro -- '
+PASS: gdb.base/info-macros.exp: 'info macro -- '
+PASS: gdb.base/info-macros.exp: info macro -invalid-option 1
+PASS: gdb.base/info-macros.exp: info macro -invalid-option
+PASS: gdb.base/info-macros.exp: info macro -invalid-option FOO
+PASS: gdb.base/info-macros.exp: info macro -invalid-option FOO
+FAIL: gdb.base/info-macros.exp: info macro -- FOO
+FAIL: gdb.base/info-macros.exp: info macro -- FOO
+FAIL: gdb.base/info-macros.exp: info macro -- FOO
+FAIL: gdb.base/info-macros.exp: info macro FOO
+FAIL: gdb.base/info-macros.exp: info macro FOO
+FAIL: gdb.base/info-macros.exp: info macro -a FOO 1
+FAIL: gdb.base/info-macros.exp: info macro -a -- FOO 1
+FAIL: gdb.base/info-macros.exp: info macro -all -- FOO 1
+FAIL: gdb.base/info-macros.exp: info macro -a -- FOO
+FAIL: gdb.base/info-macros.exp: info macro -a -- FOO
+FAIL: gdb.base/info-macros.exp: info macros 2
+FAIL: gdb.base/info-macros.exp: info macros 3
+FAIL: gdb.base/info-macros.exp: info macros 4
+FAIL: gdb.base/info-macros.exp: info macros *$pc
+FAIL: gdb.base/info-macros.exp: info macros
+FAIL: gdb.base/info-macros.exp: info macros 6
+FAIL: gdb.base/info-macros.exp: info macros 7
+KFAIL: gdb.base/info-macros.exp: info macros info-macros.c:42 (PRMS: gdb/NNNN)
+Running ./gdb.base/info-os.exp ...
+PASS: gdb.base/info-os.exp: get inferior process ID
+PASS: gdb.base/info-os.exp: continue to breakpoint: Set breakpoint here
+PASS: gdb.base/info-os.exp: get shared memory key
+PASS: gdb.base/info-os.exp: get shared memory ID
+PASS: gdb.base/info-os.exp: get semaphore key
+PASS: gdb.base/info-os.exp: get semaphore ID
+PASS: gdb.base/info-os.exp: get message queue key
+PASS: gdb.base/info-os.exp: get message queue ID
+PASS: gdb.base/info-os.exp: get socket port number
+PASS: gdb.base/info-os.exp: get process list
+PASS: gdb.base/info-os.exp: get process groups
+PASS: gdb.base/info-os.exp: get threads
+PASS: gdb.base/info-os.exp: get threads
+PASS: gdb.base/info-os.exp: get file descriptors
+PASS: gdb.base/info-os.exp: get internet-domain sockets
+PASS: gdb.base/info-os.exp: get shared-memory regions
+PASS: gdb.base/info-os.exp: get semaphores
+PASS: gdb.base/info-os.exp: get message queues
+PASS: gdb.base/info-os.exp: continue
+Running ./gdb.base/info-proc.exp ...
+PASS: gdb.base/info-proc.exp: help info proc
+PASS: gdb.base/info-proc.exp: info proc without a process
+PASS: gdb.base/info-proc.exp: info proc with process
+PASS: gdb.base/info-proc.exp: info proc mapping
+PASS: gdb.base/info-proc.exp: save a core file
+FAIL: gdb.base/info-proc.exp: core break.gcore
+FAIL: gdb.base/info-proc.exp: info proc mapping with core file
+Running ./gdb.base/info-target.exp ...
+PASS: gdb.base/info-target.exp: info target
+Running ./gdb.base/interact.exp ...
+PASS: gdb.base/interact.exp: set interactive-mode auto
+PASS: gdb.base/interact.exp: source script with interactive-mode auto
+PASS: gdb.base/interact.exp: sanity check with interactive-mode auto
+PASS: gdb.base/interact.exp: show interactive-mode (auto)
+PASS: gdb.base/interact.exp: set interactive-mode on
+PASS: gdb.base/interact.exp: source script with interactive-mode on
+PASS: gdb.base/interact.exp: sanity check with interactive-mode on
+PASS: gdb.base/interact.exp: show interactive-mode (on)
+PASS: gdb.base/interact.exp: set interactive-mode off
+PASS: gdb.base/interact.exp: source script with interactive-mode off
+PASS: gdb.base/interact.exp: sanity check with interactive-mode off
+PASS: gdb.base/interact.exp: show interactive-mode (off)
+Running ./gdb.base/interp.exp ...
+PASS: gdb.base/interp.exp: interpreter-exec mi "-var-update *"
+PASS: gdb.base/interp.exp: interpreter-exec console "show version"
+PASS: gdb.base/interp.exp: interpreter-exec mi "-var-update *"
+PASS: gdb.base/interp.exp: interpreter-exec mi "-stack-info-frame"
+PASS: gdb.base/interp.exp: interpreter-exec mi1 "-break-insert main"
+PASS: gdb.base/interp.exp: interpreter-exec mi2 "-break-insert main"
+PASS: gdb.base/interp.exp: interpreter-exec mi3 "-break-insert main"
+PASS: gdb.base/interp.exp: can list sources
+Running ./gdb.base/interrupt.exp ...
+Running ./gdb.base/jit.exp ...
+PASS: gdb.base/jit.exp: one_jit_test-1: continue to breakpoint: break here 0
+PASS: gdb.base/jit.exp: one_jit_test-1: set var argc = 2
+PASS: gdb.base/jit.exp: one_jit_test-1: set var libname = "SHLIBDIR/jit-solib.so"
+PASS: gdb.base/jit.exp: one_jit_test-1: set var count = 1
+PASS: gdb.base/jit.exp: one_jit_test-1: continue to breakpoint: break here 1
+PASS: gdb.base/jit.exp: one_jit_test-1: info function jit_function
+PASS: gdb.base/jit.exp: one_jit_test-1: continue to breakpoint: break here 2
+PASS: gdb.base/jit.exp: one_jit_test-1: info function jit_function
+PASS: gdb.base/jit.exp: one_jit_test-2: continue to breakpoint: break here 0
+PASS: gdb.base/jit.exp: one_jit_test-2: set var argc = 2
+PASS: gdb.base/jit.exp: one_jit_test-2: set var libname = "SHLIBDIR/jit-solib.so"
+PASS: gdb.base/jit.exp: one_jit_test-2: set var count = 2
+PASS: gdb.base/jit.exp: one_jit_test-2: continue to breakpoint: break here 1
+PASS: gdb.base/jit.exp: one_jit_test-2: info function jit_function
+PASS: gdb.base/jit.exp: one_jit_test-2: continue to breakpoint: break here 2
+PASS: gdb.base/jit.exp: one_jit_test-2: info function jit_function
+PASS: gdb.base/jit.exp: PIE: one_jit_test-1: continue to breakpoint: break here 0
+PASS: gdb.base/jit.exp: PIE: one_jit_test-1: set var argc = 2
+PASS: gdb.base/jit.exp: PIE: one_jit_test-1: set var libname = "SHLIBDIR/jit-solib.so"
+PASS: gdb.base/jit.exp: PIE: one_jit_test-1: set var count = 1
+PASS: gdb.base/jit.exp: PIE: one_jit_test-1: continue to breakpoint: break here 1
+PASS: gdb.base/jit.exp: PIE: one_jit_test-1: info function jit_function
+PASS: gdb.base/jit.exp: PIE: one_jit_test-1: continue to breakpoint: break here 2
+PASS: gdb.base/jit.exp: PIE: one_jit_test-1: info function jit_function
+Running ./gdb.base/jit-simple.exp ...
+PASS: gdb.base/jit-simple.exp: blah 1
+PASS: gdb.base/jit-simple.exp: recompile jit-simple.c
+PASS: gdb.base/jit-simple.exp: blah 1
+Running ./gdb.base/jit-so.exp ...
+PASS: gdb.base/jit-so.exp: one_jit_test-1: continue to breakpoint: break here before-dlopen
+PASS: gdb.base/jit-so.exp: one_jit_test-1: set var jit_libname = "jit-main.so"
+PASS: gdb.base/jit-so.exp: one_jit_test-1: continue to breakpoint: break here after-dlopen
+PASS: gdb.base/jit-so.exp: one_jit_test-1: continue to breakpoint: break here 0
+PASS: gdb.base/jit-so.exp: one_jit_test-1: set var argc = 2
+PASS: gdb.base/jit-so.exp: one_jit_test-1: set var libname = "SHLIBDIR/jit-solib.so"
+PASS: gdb.base/jit-so.exp: one_jit_test-1: set var count = 1
+PASS: gdb.base/jit-so.exp: one_jit_test-1: continue to breakpoint: break here 1
+PASS: gdb.base/jit-so.exp: one_jit_test-1: info function jit_function
+PASS: gdb.base/jit-so.exp: one_jit_test-1: continue to breakpoint: break here 2
+PASS: gdb.base/jit-so.exp: one_jit_test-1: info function jit_function
+PASS: gdb.base/jit-so.exp: one_jit_test-2: continue to breakpoint: break here before-dlopen
+PASS: gdb.base/jit-so.exp: one_jit_test-2: set var jit_libname = "jit-main.so"
+PASS: gdb.base/jit-so.exp: one_jit_test-2: continue to breakpoint: break here after-dlopen
+PASS: gdb.base/jit-so.exp: one_jit_test-2: continue to breakpoint: break here 0
+PASS: gdb.base/jit-so.exp: one_jit_test-2: set var argc = 2
+PASS: gdb.base/jit-so.exp: one_jit_test-2: set var libname = "SHLIBDIR/jit-solib.so"
+PASS: gdb.base/jit-so.exp: one_jit_test-2: set var count = 2
+PASS: gdb.base/jit-so.exp: one_jit_test-2: continue to breakpoint: break here 1
+PASS: gdb.base/jit-so.exp: one_jit_test-2: info function jit_function
+PASS: gdb.base/jit-so.exp: one_jit_test-2: continue to breakpoint: break here 2
+PASS: gdb.base/jit-so.exp: one_jit_test-2: info function jit_function
+Running ./gdb.base/jump.exp ...
+PASS: gdb.base/jump.exp: break before jump to non-call
+PASS: gdb.base/jump.exp: jump to non-call
+PASS: gdb.base/jump.exp: break before jump to call
+PASS: gdb.base/jump.exp: jump to call
+PASS: gdb.base/jump.exp: disable breakpoint on call
+PASS: gdb.base/jump.exp: jump to call with disabled breakpoint
+PASS: gdb.base/jump.exp: jump without argument disallowed
+PASS: gdb.base/jump.exp: jump with trailing argument junk
+PASS: gdb.base/jump.exp: aborted jump out of current function
+PASS: gdb.base/jump.exp: jump out of current function
+Running ./gdb.base/kill-after-signal.exp ...
+PASS: gdb.base/kill-after-signal.exp: handle SIGUSR1 stop print pass
+PASS: gdb.base/kill-after-signal.exp: continue
+PASS: gdb.base/kill-after-signal.exp: stepi
+PASS: gdb.base/kill-after-signal.exp: kill
+Running ./gdb.base/label.exp ...
+Running ./gdb.base/langs.exp ...
+PASS: gdb.base/langs.exp: break on nonexistent function in langs.exp
+PASS: gdb.base/langs.exp: show language at csub in langs.exp
+PASS: gdb.base/langs.exp: backtrace in langs.exp
+PASS: gdb.base/langs.exp: up to foo in langs.exp
+PASS: gdb.base/langs.exp: show language at foo in langs.exp
+PASS: gdb.base/langs.exp: up to cppsub_ in langs.exp
+PASS: gdb.base/langs.exp: show language at cppsub_ in langs.exp
+PASS: gdb.base/langs.exp: up to fsub in langs.exp
+PASS: gdb.base/langs.exp: show language at fsub in langs.exp
+PASS: gdb.base/langs.exp: up to langs0__2do in langs.exp
+PASS: gdb.base/langs.exp: show language at langs0__2do in langs.exp
+PASS: gdb.base/langs.exp: up to main in langs.exp
+PASS: gdb.base/langs.exp: show language at main in langs.exp
+PASS: gdb.base/langs.exp: continue until exit at langs.exp
+PASS: gdb.base/langs.exp: set lang to minimal
+PASS: gdb.base/langs.exp: print parameter value
+Running ./gdb.base/ldbl_e308.exp ...
+PASS: gdb.base/ldbl_e308.exp: set variable ldbl_308 = 1.6e+308l
+PASS: gdb.base/ldbl_e308.exp: print ldbl_308
+Running ./gdb.base/lineinc.exp ...
+PASS: gdb.base/lineinc.exp: tolerate macro info with multiple #inclusions per line
+Running ./gdb.base/linespecs.exp ...
+PASS: gdb.base/linespecs.exp: list c:/foo/bar/baz.c:1
+PASS: gdb.base/linespecs.exp: list c:/foo/bar/baz.c
+PASS: gdb.base/linespecs.exp: list fooc:/foo/bar/baz.c:1
+PASS: gdb.base/linespecs.exp: list fooc:/foo/bar/baz.c
+Running ./gdb.base/list.exp ...
+PASS: gdb.base/list.exp: set width 0
+PASS: gdb.base/list.exp: show default list size
+PASS: gdb.base/list.exp: list default lines around main
+PASS: gdb.base/list.exp: setting listsize to 1 #1
+PASS: gdb.base/list.exp: show listsize 1 #1
+PASS: gdb.base/list.exp: list line 1 with listsize 1
+PASS: gdb.base/list.exp: list line 2 with listsize 1
+PASS: gdb.base/list.exp: setting listsize to 2 #2
+PASS: gdb.base/list.exp: show listsize 2 #2
+PASS: gdb.base/list.exp: list line 1 with listsize 2
+PASS: gdb.base/list.exp: list line 2 with listsize 2
+PASS: gdb.base/list.exp: list line 3 with listsize 2
+PASS: gdb.base/list.exp: setting listsize to 3 #3
+PASS: gdb.base/list.exp: show listsize 3 #3
+PASS: gdb.base/list.exp: list line 1 with listsize 3
+PASS: gdb.base/list.exp: list line 2 with listsize 3
+PASS: gdb.base/list.exp: list line 3 with listsize 3
+PASS: gdb.base/list.exp: setting listsize to 4 #4
+PASS: gdb.base/list.exp: show listsize 4 #4
+PASS: gdb.base/list.exp: list line 1 with listsize 4
+PASS: gdb.base/list.exp: list line 2 with listsize 4
+PASS: gdb.base/list.exp: list line 3 with listsize 4
+PASS: gdb.base/list.exp: list line 4 with listsize 4
+PASS: gdb.base/list.exp: setting listsize to 100 #5
+PASS: gdb.base/list.exp: show listsize 100 #5
+PASS: gdb.base/list.exp: list line 1 with listsize 100
+PASS: gdb.base/list.exp: list line 10 with listsize 100
+PASS: gdb.base/list.exp: setting listsize to 0 #6
+PASS: gdb.base/list.exp: show listsize unlimited #6
+PASS: gdb.base/list.exp: list line 1 with unlimited listsize
+PASS: gdb.base/list.exp: setting listsize to 10 #7
+PASS: gdb.base/list.exp: show listsize 10 #7
+PASS: gdb.base/list.exp: list line 1 in include file
+PASS: gdb.base/list.exp: list message for lines past EOF
+PASS: gdb.base/list.exp: list filename:number (4 tests)
+PASS: gdb.base/list.exp: list function in source file 1
+PASS: gdb.base/list.exp: list function in source file 2
+PASS: gdb.base/list.exp: list function in include file
+PASS: gdb.base/list.exp: successive list commands to page forward (4 tests)
+PASS: gdb.base/list.exp: 4 successive "list -" commands to page backwards
+PASS: gdb.base/list.exp: repeat list commands to page forward using 'return' (4 tests)
+PASS: gdb.base/list.exp: list range; filename:line1,filename:line2
+PASS: gdb.base/list.exp: list range; line1,line2
+PASS: gdb.base/list.exp: list range; upper bound past EOF
+PASS: gdb.base/list.exp: list range; both bounds past EOF
+PASS: gdb.base/list.exp: list range, must be same files
+PASS: gdb.base/list.exp: list filename:function (5 tests)
+PASS: gdb.base/list.exp: list 'list0.c:main'
+XFAIL: gdb.base/list.exp: list filename:function; wrong filename rejected
+PASS: gdb.base/list.exp: list filename:function; nonexistant file
+PASS: gdb.base/list.exp: list filename:function; nonexistant function
+PASS: gdb.base/list.exp: set listsize 4
+PASS: gdb.base/list.exp: list long_line
+PASS: gdb.base/list.exp: search 4321
+PASS: gdb.base/list.exp: search 6789
+PASS: gdb.base/list.exp: search extremely long line (> 5000 chars)
+PASS: gdb.base/list.exp: set listsize 2
+PASS: gdb.base/list.exp: list 1
+PASS: gdb.base/list.exp: list ,5
+Running ./gdb.base/logical.exp ...
+PASS: gdb.base/logical.exp: evaluate x; variables x = 0; expecting 0
+PASS: gdb.base/logical.exp: evaluate !x; variables x = 0; expecting 1
+PASS: gdb.base/logical.exp: evaluate !!x; variables x = 0; expecting 0
+PASS: gdb.base/logical.exp: evaluate x; variables x = 1; expecting 1
+PASS: gdb.base/logical.exp: evaluate !x; variables x = 1; expecting 0
+PASS: gdb.base/logical.exp: evaluate !!x; variables x = 1; expecting 1
+PASS: gdb.base/logical.exp: evaluate x && y; variables x = 0, y = 0; expecting 0
+PASS: gdb.base/logical.exp: evaluate !x && y; variables x = 0, y = 0; expecting 0
+PASS: gdb.base/logical.exp: evaluate x && !y; variables x = 0, y = 0; expecting 0
+PASS: gdb.base/logical.exp: evaluate !x && !y; variables x = 0, y = 0; expecting 1
+PASS: gdb.base/logical.exp: evaluate x || y; variables x = 0, y = 0; expecting 0
+PASS: gdb.base/logical.exp: evaluate !x || y; variables x = 0, y = 0; expecting 1
+PASS: gdb.base/logical.exp: evaluate x || !y; variables x = 0, y = 0; expecting 1
+PASS: gdb.base/logical.exp: evaluate !x || !y; variables x = 0, y = 0; expecting 1
+PASS: gdb.base/logical.exp: evaluate x < y; variables x = 0, y = 0; expecting 0
+PASS: gdb.base/logical.exp: evaluate x <= y; variables x = 0, y = 0; expecting 1
+PASS: gdb.base/logical.exp: evaluate x == y; variables x = 0, y = 0; expecting 1
+PASS: gdb.base/logical.exp: evaluate x != y; variables x = 0, y = 0; expecting 0
+PASS: gdb.base/logical.exp: evaluate x >= y; variables x = 0, y = 0; expecting 1
+PASS: gdb.base/logical.exp: evaluate x > y; variables x = 0, y = 0; expecting 0
+PASS: gdb.base/logical.exp: evaluate x && y; variables x = 0, y = 1; expecting 0
+PASS: gdb.base/logical.exp: evaluate !x && y; variables x = 0, y = 1; expecting 1
+PASS: gdb.base/logical.exp: evaluate x && !y; variables x = 0, y = 1; expecting 0
+PASS: gdb.base/logical.exp: evaluate !x && !y; variables x = 0, y = 1; expecting 0
+PASS: gdb.base/logical.exp: evaluate x || y; variables x = 0, y = 1; expecting 1
+PASS: gdb.base/logical.exp: evaluate !x || y; variables x = 0, y = 1; expecting 1
+PASS: gdb.base/logical.exp: evaluate x || !y; variables x = 0, y = 1; expecting 0
+PASS: gdb.base/logical.exp: evaluate !x || !y; variables x = 0, y = 1; expecting 1
+PASS: gdb.base/logical.exp: evaluate x < y; variables x = 0, y = 1; expecting 1
+PASS: gdb.base/logical.exp: evaluate x <= y; variables x = 0, y = 1; expecting 1
+PASS: gdb.base/logical.exp: evaluate x == y; variables x = 0, y = 1; expecting 0
+PASS: gdb.base/logical.exp: evaluate x != y; variables x = 0, y = 1; expecting 1
+PASS: gdb.base/logical.exp: evaluate x >= y; variables x = 0, y = 1; expecting 0
+PASS: gdb.base/logical.exp: evaluate x > y; variables x = 0, y = 1; expecting 0
+PASS: gdb.base/logical.exp: evaluate x && y; variables x = 1, y = 0; expecting 0
+PASS: gdb.base/logical.exp: evaluate !x && y; variables x = 1, y = 0; expecting 0
+PASS: gdb.base/logical.exp: evaluate x && !y; variables x = 1, y = 0; expecting 1
+PASS: gdb.base/logical.exp: evaluate !x && !y; variables x = 1, y = 0; expecting 0
+PASS: gdb.base/logical.exp: evaluate x || y; variables x = 1, y = 0; expecting 1
+PASS: gdb.base/logical.exp: evaluate !x || y; variables x = 1, y = 0; expecting 0
+PASS: gdb.base/logical.exp: evaluate x || !y; variables x = 1, y = 0; expecting 1
+PASS: gdb.base/logical.exp: evaluate !x || !y; variables x = 1, y = 0; expecting 1
+PASS: gdb.base/logical.exp: evaluate x < y; variables x = 1, y = 0; expecting 0
+PASS: gdb.base/logical.exp: evaluate x <= y; variables x = 1, y = 0; expecting 0
+PASS: gdb.base/logical.exp: evaluate x == y; variables x = 1, y = 0; expecting 0
+PASS: gdb.base/logical.exp: evaluate x != y; variables x = 1, y = 0; expecting 1
+PASS: gdb.base/logical.exp: evaluate x >= y; variables x = 1, y = 0; expecting 1
+PASS: gdb.base/logical.exp: evaluate x > y; variables x = 1, y = 0; expecting 1
+PASS: gdb.base/logical.exp: evaluate x && y; variables x = 1, y = 1; expecting 1
+PASS: gdb.base/logical.exp: evaluate !x && y; variables x = 1, y = 1; expecting 0
+PASS: gdb.base/logical.exp: evaluate x && !y; variables x = 1, y = 1; expecting 0
+PASS: gdb.base/logical.exp: evaluate !x && !y; variables x = 1, y = 1; expecting 0
+PASS: gdb.base/logical.exp: evaluate x || y; variables x = 1, y = 1; expecting 1
+PASS: gdb.base/logical.exp: evaluate !x || y; variables x = 1, y = 1; expecting 1
+PASS: gdb.base/logical.exp: evaluate x || !y; variables x = 1, y = 1; expecting 1
+PASS: gdb.base/logical.exp: evaluate !x || !y; variables x = 1, y = 1; expecting 0
+PASS: gdb.base/logical.exp: evaluate x < y; variables x = 1, y = 1; expecting 0
+PASS: gdb.base/logical.exp: evaluate x <= y; variables x = 1, y = 1; expecting 1
+PASS: gdb.base/logical.exp: evaluate x == y; variables x = 1, y = 1; expecting 1
+PASS: gdb.base/logical.exp: evaluate x != y; variables x = 1, y = 1; expecting 0
+PASS: gdb.base/logical.exp: evaluate x >= y; variables x = 1, y = 1; expecting 1
+PASS: gdb.base/logical.exp: evaluate x > y; variables x = 1, y = 1; expecting 0
+PASS: gdb.base/logical.exp: evaluate x && y && z; variables x = 0, y = 0, z = 0; expecting 0
+PASS: gdb.base/logical.exp: evaluate x || y && z; variables x = 0, y = 0, z = 0; expecting 0
+PASS: gdb.base/logical.exp: evaluate x && y || z; variables x = 0, y = 0, z = 0; expecting 0
+PASS: gdb.base/logical.exp: evaluate x || y || z; variables x = 0, y = 0, z = 0; expecting 0
+PASS: gdb.base/logical.exp: evaluate x || !y && z; variables x = 0, y = 0, z = 0; expecting 0
+PASS: gdb.base/logical.exp: evaluate !x || y && z; variables x = 0, y = 0, z = 0; expecting 1
+PASS: gdb.base/logical.exp: evaluate !x || y && !z; variables x = 0, y = 0, z = 0; expecting 1
+PASS: gdb.base/logical.exp: evaluate x && y && z; variables x = 0, y = 0, z = 1; expecting 0
+PASS: gdb.base/logical.exp: evaluate x || y && z; variables x = 0, y = 0, z = 1; expecting 0
+PASS: gdb.base/logical.exp: evaluate x && y || z; variables x = 0, y = 0, z = 1; expecting 1
+PASS: gdb.base/logical.exp: evaluate x || y || z; variables x = 0, y = 0, z = 1; expecting 1
+PASS: gdb.base/logical.exp: evaluate x || !y && z; variables x = 0, y = 0, z = 1; expecting 1
+PASS: gdb.base/logical.exp: evaluate !x || y && z; variables x = 0, y = 0, z = 1; expecting 1
+PASS: gdb.base/logical.exp: evaluate !x || y && !z; variables x = 0, y = 0, z = 1; expecting 1
+PASS: gdb.base/logical.exp: evaluate x && y && z; variables x = 0, y = 1, z = 0; expecting 0
+PASS: gdb.base/logical.exp: evaluate x || y && z; variables x = 0, y = 1, z = 0; expecting 0
+PASS: gdb.base/logical.exp: evaluate x && y || z; variables x = 0, y = 1, z = 0; expecting 0
+PASS: gdb.base/logical.exp: evaluate x || y || z; variables x = 0, y = 1, z = 0; expecting 1
+PASS: gdb.base/logical.exp: evaluate x || !y && z; variables x = 0, y = 1, z = 0; expecting 0
+PASS: gdb.base/logical.exp: evaluate !x || y && z; variables x = 0, y = 1, z = 0; expecting 1
+PASS: gdb.base/logical.exp: evaluate !x || y && !z; variables x = 0, y = 1, z = 0; expecting 1
+PASS: gdb.base/logical.exp: evaluate x && y && z; variables x = 0, y = 1, z = 1; expecting 0
+PASS: gdb.base/logical.exp: evaluate x || y && z; variables x = 0, y = 1, z = 1; expecting 1
+PASS: gdb.base/logical.exp: evaluate x && y || z; variables x = 0, y = 1, z = 1; expecting 1
+PASS: gdb.base/logical.exp: evaluate x || y || z; variables x = 0, y = 1, z = 1; expecting 1
+PASS: gdb.base/logical.exp: evaluate x || !y && z; variables x = 0, y = 1, z = 1; expecting 0
+PASS: gdb.base/logical.exp: evaluate !x || y && z; variables x = 0, y = 1, z = 1; expecting 1
+PASS: gdb.base/logical.exp: evaluate !x || y && !z; variables x = 0, y = 1, z = 1; expecting 1
+PASS: gdb.base/logical.exp: evaluate x && y && z; variables x = 1, y = 0, z = 0; expecting 0
+PASS: gdb.base/logical.exp: evaluate x || y && z; variables x = 1, y = 0, z = 0; expecting 1
+PASS: gdb.base/logical.exp: evaluate x && y || z; variables x = 1, y = 0, z = 0; expecting 0
+PASS: gdb.base/logical.exp: evaluate x || y || z; variables x = 1, y = 0, z = 0; expecting 1
+PASS: gdb.base/logical.exp: evaluate x || !y && z; variables x = 1, y = 0, z = 0; expecting 1
+PASS: gdb.base/logical.exp: evaluate !x || y && z; variables x = 1, y = 0, z = 0; expecting 0
+PASS: gdb.base/logical.exp: evaluate !x || y && !z; variables x = 1, y = 0, z = 0; expecting 0
+PASS: gdb.base/logical.exp: evaluate x && y && z; variables x = 1, y = 0, z = 1; expecting 0
+PASS: gdb.base/logical.exp: evaluate x || y && z; variables x = 1, y = 0, z = 1; expecting 1
+PASS: gdb.base/logical.exp: evaluate x && y || z; variables x = 1, y = 0, z = 1; expecting 1
+PASS: gdb.base/logical.exp: evaluate x || y || z; variables x = 1, y = 0, z = 1; expecting 1
+PASS: gdb.base/logical.exp: evaluate x || !y && z; variables x = 1, y = 0, z = 1; expecting 1
+PASS: gdb.base/logical.exp: evaluate !x || y && z; variables x = 1, y = 0, z = 1; expecting 0
+PASS: gdb.base/logical.exp: evaluate !x || y && !z; variables x = 1, y = 0, z = 1; expecting 0
+PASS: gdb.base/logical.exp: evaluate x && y && z; variables x = 1, y = 1, z = 0; expecting 0
+PASS: gdb.base/logical.exp: evaluate x || y && z; variables x = 1, y = 1, z = 0; expecting 1
+PASS: gdb.base/logical.exp: evaluate x && y || z; variables x = 1, y = 1, z = 0; expecting 1
+PASS: gdb.base/logical.exp: evaluate x || y || z; variables x = 1, y = 1, z = 0; expecting 1
+PASS: gdb.base/logical.exp: evaluate x || !y && z; variables x = 1, y = 1, z = 0; expecting 1
+PASS: gdb.base/logical.exp: evaluate !x || y && z; variables x = 1, y = 1, z = 0; expecting 0
+PASS: gdb.base/logical.exp: evaluate !x || y && !z; variables x = 1, y = 1, z = 0; expecting 1
+PASS: gdb.base/logical.exp: evaluate x && y && z; variables x = 1, y = 1, z = 1; expecting 1
+PASS: gdb.base/logical.exp: evaluate x || y && z; variables x = 1, y = 1, z = 1; expecting 1
+PASS: gdb.base/logical.exp: evaluate x && y || z; variables x = 1, y = 1, z = 1; expecting 1
+PASS: gdb.base/logical.exp: evaluate x || y || z; variables x = 1, y = 1, z = 1; expecting 1
+PASS: gdb.base/logical.exp: evaluate x || !y && z; variables x = 1, y = 1, z = 1; expecting 1
+PASS: gdb.base/logical.exp: evaluate !x || y && z; variables x = 1, y = 1, z = 1; expecting 1
+PASS: gdb.base/logical.exp: evaluate !x || y && !z; variables x = 1, y = 1, z = 1; expecting 0
+PASS: gdb.base/logical.exp: evaluate x > y || w == z; variables x = 1, y = 2, w = 3, z = 3; expecting 1
+PASS: gdb.base/logical.exp: evaluate x >= y && w != z; variables x = 1, y = 2, w = 3, z = 3; expecting 0
+PASS: gdb.base/logical.exp: evaluate ! x > y || w + z; variables x = 1, y = 2, w = 3, z = 3; expecting 1
+PASS: gdb.base/logical.exp: evaluate x > y || w == z; variables x = 1, y = 2, w = 1, z = 3; expecting 0
+PASS: gdb.base/logical.exp: evaluate x >= y && w != z; variables x = 1, y = 2, w = 1, z = 3; expecting 0
+PASS: gdb.base/logical.exp: evaluate ! x > y || w + z; variables x = 1, y = 2, w = 1, z = 3; expecting 1
+PASS: gdb.base/logical.exp: evaluate x > y || w == z; variables x = 2, y = 2, w = 2, z = 3; expecting 0
+PASS: gdb.base/logical.exp: evaluate x >= y && w != z; variables x = 2, y = 2, w = 2, z = 3; expecting 1
+PASS: gdb.base/logical.exp: evaluate ! x > y || w + z; variables x = 2, y = 2, w = 2, z = 3; expecting 1
+Running ./gdb.base/longest-types.exp ...
+PASS: gdb.base/longest-types.exp: print &f->buf
+Running ./gdb.base/longjmp.exp ...
+PASS: gdb.base/longjmp.exp: breakpoint at pattern 1 start
+PASS: gdb.base/longjmp.exp: continue to breakpoint at pattern 1 start
+PASS: gdb.base/longjmp.exp: breakpoint at miss_step_1
+PASS: gdb.base/longjmp.exp: next over setjmp (1)
+PASS: gdb.base/longjmp.exp: next to longjmp (1)
+FAIL: gdb.base/longjmp.exp: next over longjmp(1)
+PASS: gdb.base/longjmp.exp: breakpoint at pattern 2 start
+PASS: gdb.base/longjmp.exp: continue to breakpoint at pattern 2 start
+PASS: gdb.base/longjmp.exp: breakpoint at miss_step_2
+PASS: gdb.base/longjmp.exp: next over setjmp (2)
+FAIL: gdb.base/longjmp.exp: next over call_longjmp (2)
+PASS: gdb.base/longjmp.exp: breakpoint at pattern 3 start
+PASS: gdb.base/longjmp.exp: continue to breakpoint at pattern 3 start
+PASS: gdb.base/longjmp.exp: next over patt3
+Running ./gdb.base/long_long.exp ...
+PASS: gdb.base/long_long.exp: get integer valueof "sizeof (char)" (1)
+PASS: gdb.base/long_long.exp: get integer valueof "sizeof (short)" (2)
+PASS: gdb.base/long_long.exp: get integer valueof "sizeof (int)" (4)
+PASS: gdb.base/long_long.exp: get integer valueof "sizeof (long)" (8)
+PASS: gdb.base/long_long.exp: get integer valueof "sizeof (long long)" (8)
+PASS: gdb.base/long_long.exp: get integer valueof "sizeof (void *)" (8)
+PASS: gdb.base/long_long.exp: get integer valueof "sizeof (double)" (8)
+PASS: gdb.base/long_long.exp: get integer valueof "sizeof (long double)" (16)
+PASS: gdb.base/long_long.exp: continue to breakpoint: Stop here and look
+PASS: gdb.base/long_long.exp: hex print p/x
+PASS: gdb.base/long_long.exp: decimal print p/x
+PASS: gdb.base/long_long.exp: default print val.dec
+PASS: gdb.base/long_long.exp: default print val.bin
+PASS: gdb.base/long_long.exp: default print val.oct
+PASS: gdb.base/long_long.exp: default print hex
+PASS: gdb.base/long_long.exp: decimal print p/u
+PASS: gdb.base/long_long.exp: binary print
+PASS: gdb.base/long_long.exp: octal print
+PASS: gdb.base/long_long.exp: print +ve long long
+PASS: gdb.base/long_long.exp: decimal print p/d
+PASS: gdb.base/long_long.exp: p/d val.oct
+PASS: gdb.base/long_long.exp: p/u val.oct
+PASS: gdb.base/long_long.exp: p/o val.oct
+PASS: gdb.base/long_long.exp: p/t val.oct
+PASS: gdb.base/long_long.exp: p/a val.oct
+PASS: gdb.base/long_long.exp: p/c val.oct
+PASS: gdb.base/long_long.exp: p/f val.oct
+PASS: gdb.base/long_long.exp: p/x *(char *)c
+PASS: gdb.base/long_long.exp: p/d *(char *)c
+PASS: gdb.base/long_long.exp: p/u *(char *)c
+PASS: gdb.base/long_long.exp: p/o *(char *)c
+PASS: gdb.base/long_long.exp: p/t *(char *)c
+PASS: gdb.base/long_long.exp: p/a *(char *)c
+PASS: gdb.base/long_long.exp: p/f *(char *)c
+PASS: gdb.base/long_long.exp: p/c *(char *)c
+PASS: gdb.base/long_long.exp: p/x *(short *)s
+PASS: gdb.base/long_long.exp: p/d *(short *)s
+PASS: gdb.base/long_long.exp: p/u *(short *)s
+PASS: gdb.base/long_long.exp: p/o *(short *)s
+PASS: gdb.base/long_long.exp: p/t *(short *)s
+PASS: gdb.base/long_long.exp: p/a *(short *)s
+PASS: gdb.base/long_long.exp: p/f *(short *)s
+PASS: gdb.base/long_long.exp: p/c *(short *)s
+PASS: gdb.base/long_long.exp: p/x *(int *)i
+PASS: gdb.base/long_long.exp: p/d *(int *)i
+PASS: gdb.base/long_long.exp: p/u *(int *)i
+PASS: gdb.base/long_long.exp: p/o *(int *)i
+PASS: gdb.base/long_long.exp: p/t *(int *)i
+PASS: gdb.base/long_long.exp: p/a *(int *)i
+PASS: gdb.base/long_long.exp: p/f *(int *)i
+PASS: gdb.base/long_long.exp: p/c *(int *)i
+PASS: gdb.base/long_long.exp: p/x *(long *)l
+PASS: gdb.base/long_long.exp: p/d *(long *)l
+PASS: gdb.base/long_long.exp: p/u *(long *)l
+PASS: gdb.base/long_long.exp: p/o *(long *)l
+PASS: gdb.base/long_long.exp: p/t *(long *)l
+PASS: gdb.base/long_long.exp: p/a *(long *)l
+PASS: gdb.base/long_long.exp: p/f *(long *)l
+PASS: gdb.base/long_long.exp: p/c *(long *)l
+PASS: gdb.base/long_long.exp: p/x *(long long *)ll
+PASS: gdb.base/long_long.exp: p/d *(long long *)ll
+PASS: gdb.base/long_long.exp: p/u *(long long *)ll
+PASS: gdb.base/long_long.exp: p/o *(long long *)ll
+PASS: gdb.base/long_long.exp: p/t *(long long *)ll
+PASS: gdb.base/long_long.exp: p/a *(long long *)ll
+PASS: gdb.base/long_long.exp: p/f *(long long *)ll
+PASS: gdb.base/long_long.exp: p/c *(long long *)ll
+PASS: gdb.base/long_long.exp: set examine size to w
+PASS: gdb.base/long_long.exp: x/x w
+PASS: gdb.base/long_long.exp: x/d w
+PASS: gdb.base/long_long.exp: x/u w
+PASS: gdb.base/long_long.exp: x/o w
+PASS: gdb.base/long_long.exp: x/t w
+PASS: gdb.base/long_long.exp: x/a
+PASS: gdb.base/long_long.exp: x/c b
+PASS: gdb.base/long_long.exp: x/f &val.oct
+PASS: gdb.base/long_long.exp: set examine size to g
+PASS: gdb.base/long_long.exp: x/2x g
+PASS: gdb.base/long_long.exp: x/2d g
+PASS: gdb.base/long_long.exp: x/2u g
+PASS: gdb.base/long_long.exp: x/2o g
+PASS: gdb.base/long_long.exp: x/2t g
+PASS: gdb.base/long_long.exp: x/2a
+PASS: gdb.base/long_long.exp: x/2c b
+PASS: gdb.base/long_long.exp: x/2f &val.oct
+PASS: gdb.base/long_long.exp: x/2bx b
+PASS: gdb.base/long_long.exp: x/2bd b
+PASS: gdb.base/long_long.exp: x/2bu b
+PASS: gdb.base/long_long.exp: x/2bo b
+PASS: gdb.base/long_long.exp: x/2bt b
+PASS: gdb.base/long_long.exp: x/2ba b
+PASS: gdb.base/long_long.exp: x/2bc b
+PASS: gdb.base/long_long.exp: x/2bf b
+PASS: gdb.base/long_long.exp: x/2hx h
+PASS: gdb.base/long_long.exp: x/2hd h
+PASS: gdb.base/long_long.exp: x/2hu h
+PASS: gdb.base/long_long.exp: x/2ho h
+PASS: gdb.base/long_long.exp: x/2ht h
+PASS: gdb.base/long_long.exp: x/2ha h
+PASS: gdb.base/long_long.exp: x/2hc h
+PASS: gdb.base/long_long.exp: x/2hf h
+PASS: gdb.base/long_long.exp: x/2wx w
+PASS: gdb.base/long_long.exp: x/2wd w
+PASS: gdb.base/long_long.exp: x/2wu w
+PASS: gdb.base/long_long.exp: x/2wo w
+PASS: gdb.base/long_long.exp: x/2wt w
+PASS: gdb.base/long_long.exp: x/2wa w
+PASS: gdb.base/long_long.exp: x/2wc w
+PASS: gdb.base/long_long.exp: x/2wf w
+PASS: gdb.base/long_long.exp: x/2gx g
+PASS: gdb.base/long_long.exp: x/2gd g
+PASS: gdb.base/long_long.exp: x/2gu g
+PASS: gdb.base/long_long.exp: x/2go g
+PASS: gdb.base/long_long.exp: x/2gt g
+PASS: gdb.base/long_long.exp: x/2ga g
+PASS: gdb.base/long_long.exp: x/2gc g
+PASS: gdb.base/long_long.exp: x/2gf g
+Running ./gdb.base/macscp.exp ...
+PASS: gdb.base/macscp.exp: list main for support check
+UNSUPPORTED: gdb.base/macscp.exp: Skipping test because debug information does not include macro information.
+Running ./gdb.base/maint.exp ...
+PASS: gdb.base/maint.exp: set height 0
+PASS: gdb.base/maint.exp: maint print registers
+PASS: gdb.base/maint.exp: maint check-symtabs
+PASS: gdb.base/maint.exp: maint space
+PASS: gdb.base/maint.exp: maint space 1
+PASS: gdb.base/maint.exp: maint time
+PASS: gdb.base/maint.exp: maint time 1
+PASS: gdb.base/maint.exp: maint time 0
+PASS: gdb.base/maint.exp: maint space 0
+PASS: gdb.base/maint.exp: maint demangle
+PASS: gdb.base/maint.exp: maint demangle main
+PASS: gdb.base/maint.exp: maint print statistics
+PASS: gdb.base/maint.exp: maint print dummy-frames
+PASS: gdb.base/maint.exp: maint print objfiles: header
+PASS: gdb.base/maint.exp: maint print objfiles: psymtabs
+PASS: gdb.base/maint.exp: maint print objfiles: symtabs
+PASS: gdb.base/maint.exp: maint print psymbols w/o args
+PASS: gdb.base/maint.exp: maint print psymbols 1
+PASS: gdb.base/maint.exp: shell rm -f psymbols_output
+PASS: gdb.base/maint.exp: maint print msymbols w/o args
+PASS: gdb.base/maint.exp: maint print msymbols
+PASS: gdb.base/maint.exp: shell rm -f msymbols_output
+PASS: gdb.base/maint.exp: cd to objdir
+PASS: gdb.base/maint.exp: maint print msymbols
+PASS: gdb.base/maint.exp: shell rm -f msymbols_output2
+PASS: gdb.base/maint.exp: cd to mydir
+PASS: gdb.base/maint.exp: maint print symbols w/o args
+PASS: gdb.base/maint.exp: maint print symbols
+PASS: gdb.base/maint.exp: shell rm -f symbols_output
+PASS: gdb.base/maint.exp: maint print type
+PASS: gdb.base/maint.exp: maint info sections
+PASS: gdb.base/maint.exp: maint info sections .text
+PASS: gdb.base/maint.exp: maint info sections CODE
+PASS: gdb.base/maint.exp: maint info sections DATA
+PASS: gdb.base/maint.exp: maint info breakpoints
+PASS: gdb.base/maint.exp: maint print w/o args
+PASS: gdb.base/maint.exp: maint info w/o args
+PASS: gdb.base/maint.exp: maint w/o args
+PASS: gdb.base/maint.exp: help maint
+PASS: gdb.base/maint.exp: help maint check-symtabs
+PASS: gdb.base/maint.exp: help maint space
+PASS: gdb.base/maint.exp: help maint time
+PASS: gdb.base/maint.exp: help maint demangle
+PASS: gdb.base/maint.exp: help maint dump-me
+PASS: gdb.base/maint.exp: help maint internal-error
+PASS: gdb.base/maint.exp: help maint internal-warning
+PASS: gdb.base/maint.exp: help maint print statistics
+PASS: gdb.base/maint.exp: help maint print dummy-frames
+PASS: gdb.base/maint.exp: help maint print objfiles
+PASS: gdb.base/maint.exp: help maint print psymbols
+PASS: gdb.base/maint.exp: help maint print msymbols
+PASS: gdb.base/maint.exp: help maint print symbols
+PASS: gdb.base/maint.exp: help maint print type
+PASS: gdb.base/maint.exp: help maint info sections
+PASS: gdb.base/maint.exp: help maint info breakpoints
+PASS: gdb.base/maint.exp: help maint info
+PASS: gdb.base/maint.exp: help maint print
+PASS: gdb.base/maint.exp: help maint
+PASS: gdb.base/maint.exp: maint dump-me
+PASS: gdb.base/maint.exp: maint internal-error
+PASS: gdb.base/maint.exp: internal-error resync
+Running ./gdb.base/memattr.exp ...
+PASS: gdb.base/memattr.exp: create mem region 1
+PASS: gdb.base/memattr.exp: create mem region 2
+PASS: gdb.base/memattr.exp: create mem region 3
+PASS: gdb.base/memattr.exp: create mem region 4
+PASS: gdb.base/memattr.exp: create mem region 5
+PASS: gdb.base/memattr.exp: info mem (1)
+PASS: gdb.base/memattr.exp: mem1 cannot be read
+PASS: gdb.base/memattr.exp: mem1 can be written
+PASS: gdb.base/memattr.exp: mem2 cannot be written
+PASS: gdb.base/memattr.exp: mem2 can be read
+PASS: gdb.base/memattr.exp: disable mem 1
+PASS: gdb.base/memattr.exp: mem 1 was disabled
+PASS: gdb.base/memattr.exp: enable mem 1
+PASS: gdb.base/memattr.exp: mem 1 was enabled
+PASS: gdb.base/memattr.exp: disable mem 2 4
+PASS: gdb.base/memattr.exp: mem 2 and 4 were disabled
+PASS: gdb.base/memattr.exp: enable mem 2-4
+PASS: gdb.base/memattr.exp: mem 2-4 were enabled
+PASS: gdb.base/memattr.exp: disable mem
+PASS: gdb.base/memattr.exp: mem 1 to 5 were disabled
+PASS: gdb.base/memattr.exp: enable mem
+PASS: gdb.base/memattr.exp: mem 1 to 5 were enabled
+PASS: gdb.base/memattr.exp: disable non-existant regions
+PASS: gdb.base/memattr.exp: delete mem 1
+PASS: gdb.base/memattr.exp: mem 1 was deleted
+PASS: gdb.base/memattr.exp: delete mem 2 4
+PASS: gdb.base/memattr.exp: mem 2 and 4 were deleted
+PASS: gdb.base/memattr.exp: delete mem 2-4
+PASS: gdb.base/memattr.exp: mem 2-4 were deleted
+PASS: gdb.base/memattr.exp: delete non-existant region
+PASS: gdb.base/memattr.exp: mem 0x30 0x60 ro
+PASS: gdb.base/memattr.exp: 0x30 0x60: 0x20 0x40: overlap
+PASS: gdb.base/memattr.exp: 0x30 0x60: 0x30 0x40: overlap
+PASS: gdb.base/memattr.exp: 0x30 0x60: 0x40 0x50: overlap
+PASS: gdb.base/memattr.exp: 0x30 0x60: 0x50 0x60: overlap
+PASS: gdb.base/memattr.exp: 0x30 0x60: 0x50 0x70: overlap
+PASS: gdb.base/memattr.exp: 0x30 0x60: 0x30 0x60: overlap
+PASS: gdb.base/memattr.exp: 0x30 0x60: 0x20 0x70: overlap
+PASS: gdb.base/memattr.exp: 0x30 0x60: 0x20 0x0: overlap
+PASS: gdb.base/memattr.exp: 0x30 0x60: 0x30 0x0: overlap
+PASS: gdb.base/memattr.exp: 0x30 0x60: 0x40 0x0: overlap
+PASS: gdb.base/memattr.exp: 0x30 0x60: 0x20 0x30: no-overlap
+PASS: gdb.base/memattr.exp: 0x30 0x60: 0x60 0x70: no-overlap
+PASS: gdb.base/memattr.exp: 0x30 0x60: 0x80 0x0: no-overlap
+PASS: gdb.base/memattr.exp: mem 0x30 0x0 ro
+PASS: gdb.base/memattr.exp: 0x30 0x0: 0x20 0x50: overlap
+PASS: gdb.base/memattr.exp: 0x30 0x0: 0x30 0x50: overlap
+PASS: gdb.base/memattr.exp: 0x30 0x0: 0x40 0x50: overlap
+PASS: gdb.base/memattr.exp: 0x30 0x0: 0x20 0x0: overlap
+PASS: gdb.base/memattr.exp: 0x30 0x0: 0x30 0x0: overlap
+PASS: gdb.base/memattr.exp: 0x30 0x0: 0x40 0x0: overlap
+PASS: gdb.base/memattr.exp: 0x30 0x0: 0x20 0x30: no-overlap
+PASS: gdb.base/memattr.exp: 0x30 0x0: 0x00 0x10: no-overlap
+Running ./gdb.base/mips_pro.exp ...
+PASS: gdb.base/mips_pro.exp: backtrace
+Running ./gdb.base/miscexprs.exp ...
+PASS: gdb.base/miscexprs.exp: continue to marker1
+PASS: gdb.base/miscexprs.exp: up from marker1
+PASS: gdb.base/miscexprs.exp: print value of &ibig.i[0]
+PASS: gdb.base/miscexprs.exp: print value of &cbig.c[0]
+PASS: gdb.base/miscexprs.exp: print value of &fbig.f[0]
+PASS: gdb.base/miscexprs.exp: print value of &dbig.d[0]
+PASS: gdb.base/miscexprs.exp: print value of &sbig.s[0]
+PASS: gdb.base/miscexprs.exp: print value of &lbig.l[0]
+PASS: gdb.base/miscexprs.exp: print value of ibig.i[100] | 1
+PASS: gdb.base/miscexprs.exp: print value of sbig.s[90] & 127
+PASS: gdb.base/miscexprs.exp: print value of !ibig.i[100]
+PASS: gdb.base/miscexprs.exp: print value of !sbig.s[90]
+PASS: gdb.base/miscexprs.exp: print value of !ibig.i[100]
+PASS: gdb.base/miscexprs.exp: print value of !ibig.i[100]
+PASS: gdb.base/miscexprs.exp: print value of !sbig.s[90] * 10
+PASS: gdb.base/miscexprs.exp: print value of ibig.i[100] * sbig.s[90]
+PASS: gdb.base/miscexprs.exp: print value of fbig.f[100] * dbig.d[202]
+PASS: gdb.base/miscexprs.exp: print value of !(sbig.s[90] * 2)
+PASS: gdb.base/miscexprs.exp: print value of sizeof sbig
+PASS: gdb.base/miscexprs.exp: print value of sizeof cbig
+PASS: gdb.base/miscexprs.exp: print value of sizeof lbig / sizeof long
+PASS: gdb.base/miscexprs.exp: print value of ibig.i[100] << 2
+PASS: gdb.base/miscexprs.exp: print value of sbig.s[90] >> 4
+PASS: gdb.base/miscexprs.exp: print value of lbig.l[333] >> 6
+Running ./gdb.base/morestack.exp ...
+PASS: gdb.base/morestack.exp: continue
+PASS: gdb.base/morestack.exp: up 3000
+Running ./gdb.base/moribund-step.exp ...
+PASS: gdb.base/moribund-step.exp: set non-stop on
+Running ./gdb.base/multi-forks.exp ...
+Running ./gdb.base/nextoverexit.exp ...
+PASS: gdb.base/nextoverexit.exp: next over exit
+Running ./gdb.base/nodebug.exp ...
+PASS: gdb.base/nodebug.exp: p top
+PASS: gdb.base/nodebug.exp: whatis top
+PASS: gdb.base/nodebug.exp: ptype top
+PASS: gdb.base/nodebug.exp: p middle
+PASS: gdb.base/nodebug.exp: whatis middle
+PASS: gdb.base/nodebug.exp: ptype middle
+PASS: gdb.base/nodebug.exp: p dataglobal
+PASS: gdb.base/nodebug.exp: whatis dataglobal
+PASS: gdb.base/nodebug.exp: ptype dataglobal
+PASS: gdb.base/nodebug.exp: p datalocal
+PASS: gdb.base/nodebug.exp: whatis datalocal
+PASS: gdb.base/nodebug.exp: ptype datalocal
+PASS: gdb.base/nodebug.exp: p bssglobal
+PASS: gdb.base/nodebug.exp: whatis bssglobal
+PASS: gdb.base/nodebug.exp: ptype bssglobal
+PASS: gdb.base/nodebug.exp: p bsslocal
+PASS: gdb.base/nodebug.exp: whatis bsslocal
+PASS: gdb.base/nodebug.exp: ptype bsslocal
+PASS: gdb.base/nodebug.exp: backtrace from inner in nodebug.exp
+PASS: gdb.base/nodebug.exp: p/c array_index("abcdef",2)
+PASS: gdb.base/nodebug.exp: backtrace from middle in nodebug.exp
+Running ./gdb.base/nofield.exp ...
+PASS: gdb.base/nofield.exp: ptype struct not_empty
+PASS: gdb.base/nofield.exp: ptype struct empty
+PASS: gdb.base/nofield.exp: ptype union empty_union
+Running ./gdb.base/nostdlib.exp ...
+UNTESTED: gdb.base/nostdlib.exp: nostdlib.exp
+Running ./gdb.base/opaque.exp ...
+PASS: gdb.base/opaque.exp: whatis on opaque struct pointer (statically)
+PASS: gdb.base/opaque.exp: ptype on opaque struct pointer (statically)
+PASS: gdb.base/opaque.exp: whatis on opaque struct instance (statically)
+PASS: gdb.base/opaque.exp: ptype on opaque struct instance (statically)
+PASS: gdb.base/opaque.exp: ptype on opaque struct tagname (statically)
+PASS: gdb.base/opaque.exp: whatis on opaque struct pointer (dynamically)
+PASS: gdb.base/opaque.exp: ptype on opaque struct pointer (dynamically) 1
+PASS: gdb.base/opaque.exp: whatis on opaque struct instance (dynamically) 1
+PASS: gdb.base/opaque.exp: ptype on opaque struct instance (dynamically) 1
+PASS: gdb.base/opaque.exp: ptype on opaque struct tagname (dynamically) 1
+PASS: gdb.base/opaque.exp: whatis on opaque struct pointer (dynamically) 1
+PASS: gdb.base/opaque.exp: ptype on opaque struct pointer (dynamically) 2
+PASS: gdb.base/opaque.exp: whatis on opaque struct instance (dynamically) 2
+PASS: gdb.base/opaque.exp: ptype on opaque struct instance (dynamically) 2
+PASS: gdb.base/opaque.exp: ptype on opaque struct tagname (dynamically) 2
+Running ./gdb.base/overlays.exp ...
+Running ./gdb.base/page.exp ...
+PASS: gdb.base/page.exp: set pagination off
+PASS: gdb.base/page.exp: pagination is off
+PASS: gdb.base/page.exp: unpaged help
+PASS: gdb.base/page.exp: set pagination on
+PASS: gdb.base/page.exp: pagination is on
+PASS: gdb.base/page.exp: set height 10
+PASS: gdb.base/page.exp: paged help
+PASS: gdb.base/page.exp: q
+Running ./gdb.base/pc-fp.exp ...
+PASS: gdb.base/pc-fp.exp: get hexadecimal valueof "$pc"
+PASS: gdb.base/pc-fp.exp: get hexadecimal valueof "$fp"
+PASS: gdb.base/pc-fp.exp: display/i $pc
+PASS: gdb.base/pc-fp.exp: display/w $fp
+PASS: gdb.base/pc-fp.exp: info register $pc
+PASS: gdb.base/pc-fp.exp: info register $fp
+PASS: gdb.base/pc-fp.exp: info register pc fp
+Running ./gdb.base/pending.exp ...
+PASS: gdb.base/pending.exp: set pending breakpoint (without symbols)
+PASS: gdb.base/pending.exp: complete condition
+PASS: gdb.base/pending.exp: single pending breakpoint info (without symbols)
+PASS: gdb.base/pending.exp: run to resolved breakpoint 1 (without symbols)
+PASS: gdb.base/pending.exp: set pending breakpoint
+PASS: gdb.base/pending.exp: single pending breakpoint info
+PASS: gdb.base/pending.exp: breakpoint function
+PASS: gdb.base/pending.exp: pending plus real breakpoint info
+PASS: gdb.base/pending.exp: Don't set pending breakpoint
+PASS: gdb.base/pending.exp: condition 1 k == 1
+PASS: gdb.base/pending.exp: pending plus condition
+PASS: gdb.base/pending.exp: disable 1
+PASS: gdb.base/pending.exp: pending disabled
+PASS: gdb.base/pending.exp: Set commands for pending breakpoint
+PASS: gdb.base/pending.exp: pending disabled plus commands
+PASS: gdb.base/pending.exp: Set pending breakpoint 2
+PASS: gdb.base/pending.exp: multiple pending breakpoints
+PASS: gdb.base/pending.exp: Set pending breakpoint 3
+PASS: gdb.base/pending.exp: set ignore count on pending breakpoint 3
+PASS: gdb.base/pending.exp: multiple pending breakpoints 2
+PASS: gdb.base/pending.exp: running to main
+PASS: gdb.base/pending.exp: re-enabling pending breakpoint that can resolve instantly
+PASS: gdb.base/pending.exp: continue to resolved breakpoint 2
+PASS: gdb.base/pending.exp: continue to resolved breakpoint 1
+PASS: gdb.base/pending.exp: Disable other breakpoints
+PASS: gdb.base/pending.exp: Disable other breakpoints
+PASS: gdb.base/pending.exp: continue to resolved breakpoint 3
+PASS: gdb.base/pending.exp: set imaginary pending breakpoint
+PASS: gdb.base/pending.exp: rerun to main
+PASS: gdb.base/pending.exp: verify pending breakpoint after restart
+Running ./gdb.base/permissions.exp ...
+PASS: gdb.base/permissions.exp: show may-write-registers
+PASS: gdb.base/permissions.exp: show may-write-memory
+PASS: gdb.base/permissions.exp: show may-insert-breakpoints
+PASS: gdb.base/permissions.exp: show may-insert-tracepoints
+PASS: gdb.base/permissions.exp: show may-insert-fast-tracepoints
+PASS: gdb.base/permissions.exp: show may-interrupt
+PASS: gdb.base/permissions.exp: enable observer mode
+PASS: gdb.base/permissions.exp: show may-write-memory
+PASS: gdb.base/permissions.exp: show may-write-registers
+PASS: gdb.base/permissions.exp: show may-insert-breakpoints
+PASS: gdb.base/permissions.exp: show may-insert-tracepoints
+PASS: gdb.base/permissions.exp: show may-insert-fast-tracepoints
+PASS: gdb.base/permissions.exp: show may-interrupt
+PASS: gdb.base/permissions.exp: disable observer mode
+PASS: gdb.base/permissions.exp: set non-stop off
+PASS: gdb.base/permissions.exp: set a global
+PASS: gdb.base/permissions.exp: print x
+PASS: gdb.base/permissions.exp: set may-write-memory off
+PASS: gdb.base/permissions.exp: try to set a global
+PASS: gdb.base/permissions.exp: print x
+Running ./gdb.base/pie-execl.exp ...
+Running ./gdb.base/pointers.exp ...
+PASS: gdb.base/pointers.exp: continuing after dummy()
+PASS: gdb.base/pointers.exp: set pointer to beginning of array
+PASS: gdb.base/pointers.exp: set pointer to end of array
+PASS: gdb.base/pointers.exp: print object pointed to
+PASS: gdb.base/pointers.exp: print object pointed to #2
+PASS: gdb.base/pointers.exp: pointer1==pointer2
+PASS: gdb.base/pointers.exp: pointer1!=pointer2
+PASS: gdb.base/pointers.exp: pointer1<=pointer2
+PASS: gdb.base/pointers.exp: pointer1>=pointer2
+PASS: gdb.base/pointers.exp: pointer1<pointer2
+PASS: gdb.base/pointers.exp: pointer1>pointer2
+PASS: gdb.base/pointers.exp: set y = *v_int_pointer++
+PASS: gdb.base/pointers.exp: pointer assignment
+PASS: gdb.base/pointers.exp: and post-increment
+PASS: gdb.base/pointers.exp: set y = *--v_int_pointer2
+PASS: gdb.base/pointers.exp: pointer assignment
+PASS: gdb.base/pointers.exp: and pre-decrement
+PASS: gdb.base/pointers.exp: set y =v_int_pointer-v_int_pointer2
+PASS: gdb.base/pointers.exp: pointer1-pointer2
+PASS: gdb.base/pointers.exp: set v_int_pointer=v_int_array
+PASS: gdb.base/pointers.exp: print array element through pointer
+PASS: gdb.base/pointers.exp: print array element through pointer #2
+PASS: gdb.base/pointers.exp: print array element through pointer #3
+PASS: gdb.base/pointers.exp: print array element through pointer #4
+PASS: gdb.base/pointers.exp: print array element through pointer #5
+PASS: gdb.base/pointers.exp: increment rptr
+PASS: gdb.base/pointers.exp: print array element through pointer #6
+PASS: gdb.base/pointers.exp: print array element through pointer #7
+PASS: gdb.base/pointers.exp: print array element through pointer #8
+PASS: gdb.base/pointers.exp: print array element w/ pointer arithmetic
+PASS: gdb.base/pointers.exp: print through ptr to ptr
+PASS: gdb.base/pointers.exp: continue
+PASS: gdb.base/pointers.exp: up from marker1
+PASS: gdb.base/pointers.exp: print value of *pUC
+PASS: gdb.base/pointers.exp: ptype pUC
+PASS: gdb.base/pointers.exp: print value of *pS
+PASS: gdb.base/pointers.exp: ptype pS
+PASS: gdb.base/pointers.exp: print value of *pUS
+PASS: gdb.base/pointers.exp: ptype pUS
+PASS: gdb.base/pointers.exp: print value of *pI
+PASS: gdb.base/pointers.exp: ptype pI
+PASS: gdb.base/pointers.exp: print value of *pUI
+PASS: gdb.base/pointers.exp: ptype pUI
+PASS: gdb.base/pointers.exp: print value of *pL
+PASS: gdb.base/pointers.exp: ptype pL
+PASS: gdb.base/pointers.exp: print value of *pUL
+PASS: gdb.base/pointers.exp: ptype pUL
+PASS: gdb.base/pointers.exp: print value of *pF
+PASS: gdb.base/pointers.exp: ptype pF
+PASS: gdb.base/pointers.exp: print value of *pD
+PASS: gdb.base/pointers.exp: ptype pD
+PASS: gdb.base/pointers.exp: print value of ******ppppppC
+PASS: gdb.base/pointers.exp: ptype pC
+PASS: gdb.base/pointers.exp: ptype ppC
+PASS: gdb.base/pointers.exp: ptype pppC
+PASS: gdb.base/pointers.exp: ptype ppppC
+PASS: gdb.base/pointers.exp: ptype pppppC
+PASS: gdb.base/pointers.exp: ptype ppppppC
+PASS: gdb.base/pointers.exp: p instance.array_variable + 0
+Running ./gdb.base/pr10179.exp ...
+PASS: gdb.base/pr10179.exp: rbreak foo.*
+PASS: gdb.base/pr10179.exp: rbreak pr10179-a.c:foo.*
+PASS: gdb.base/pr10179.exp: rbreak pr10179-a.c : .*
+Running ./gdb.base/pr11022.exp ...
+Running ./gdb.base/prelink.exp ...
+Running ./gdb.base/printcmds.exp ...
+PASS: gdb.base/printcmds.exp: print $pc
+PASS: gdb.base/printcmds.exp: print "abc"
+PASS: gdb.base/printcmds.exp: print sizeof ("abc")
+PASS: gdb.base/printcmds.exp: ptype "abc"
+PASS: gdb.base/printcmds.exp: print $cvar = "abc"
+PASS: gdb.base/printcmds.exp: print sizeof ($cvar)
+PASS: gdb.base/printcmds.exp: print $pc (with file)
+PASS: gdb.base/printcmds.exp: set print sevenbit-strings
+PASS: gdb.base/printcmds.exp: set print address off
+PASS: gdb.base/printcmds.exp: set width 0
+PASS: gdb.base/printcmds.exp: p ctable1[120] #1
+PASS: gdb.base/printcmds.exp: p 123
+PASS: gdb.base/printcmds.exp: p -123
+PASS: gdb.base/printcmds.exp: p/d 123
+PASS: gdb.base/printcmds.exp: p 0123
+PASS: gdb.base/printcmds.exp: p 00123
+PASS: gdb.base/printcmds.exp: p -0123
+PASS: gdb.base/printcmds.exp: p/o 0123
+PASS: gdb.base/printcmds.exp: p 0x123
+PASS: gdb.base/printcmds.exp: p -0x123
+PASS: gdb.base/printcmds.exp: p 0x0123
+PASS: gdb.base/printcmds.exp: p -0x0123
+PASS: gdb.base/printcmds.exp: p 0xABCDEF
+PASS: gdb.base/printcmds.exp: p 0xabcdef
+PASS: gdb.base/printcmds.exp: p 0xAbCdEf
+PASS: gdb.base/printcmds.exp: p/x 0x123
+PASS: gdb.base/printcmds.exp: p 0b0
+PASS: gdb.base/printcmds.exp: p 0b1111
+PASS: gdb.base/printcmds.exp: p 0B1111
+PASS: gdb.base/printcmds.exp: p -0b1111
+PASS: gdb.base/printcmds.exp: reject p 0x
+PASS: gdb.base/printcmds.exp: reject p 0b
+PASS: gdb.base/printcmds.exp: p ''
+PASS: gdb.base/printcmds.exp: p '''
+PASS: gdb.base/printcmds.exp: reject p '\'
+PASS: gdb.base/printcmds.exp: reject p '\\\'
+PASS: gdb.base/printcmds.exp: reject p DEADBEEF
+PASS: gdb.base/printcmds.exp: reject p 09
+PASS: gdb.base/printcmds.exp: reject p 079
+PASS: gdb.base/printcmds.exp: reject p 0xG
+PASS: gdb.base/printcmds.exp: reject p 0xAG
+PASS: gdb.base/printcmds.exp: reject p 0b2
+PASS: gdb.base/printcmds.exp: reject p 0b12
+PASS: gdb.base/printcmds.exp: check for floating addition
+PASS: gdb.base/printcmds.exp: p 1.
+PASS: gdb.base/printcmds.exp: p 1.5
+PASS: gdb.base/printcmds.exp: p 1.f
+PASS: gdb.base/printcmds.exp: p 1.5f
+PASS: gdb.base/printcmds.exp: p 1.l
+PASS: gdb.base/printcmds.exp: p 1.5l
+PASS: gdb.base/printcmds.exp: p 0x1.1
+PASS: gdb.base/printcmds.exp: reject p 123DEADBEEF
+PASS: gdb.base/printcmds.exp: reject p 123foobar.bazfoo3
+PASS: gdb.base/printcmds.exp: reject p 123EEEEEEEEEEEEEEEEE33333k333
+PASS: gdb.base/printcmds.exp: reject p 1.1x
+PASS: gdb.base/printcmds.exp: reject p 1.1ff
+PASS: gdb.base/printcmds.exp: reject p 1.1ll
+PASS: gdb.base/printcmds.exp: p 'a'
+PASS: gdb.base/printcmds.exp: p/c 'a'
+PASS: gdb.base/printcmds.exp: p/x 'a'
+PASS: gdb.base/printcmds.exp: p/d 'a'
+PASS: gdb.base/printcmds.exp: p/t 'a'
+PASS: gdb.base/printcmds.exp: p '\141'
+PASS: gdb.base/printcmds.exp: p/x '\377'
+PASS: gdb.base/printcmds.exp: p '\''
+PASS: gdb.base/printcmds.exp: p '\\'
+PASS: gdb.base/printcmds.exp: p ctable1[0]
+PASS: gdb.base/printcmds.exp: p ctable1[1]
+PASS: gdb.base/printcmds.exp: p ctable1[2]
+PASS: gdb.base/printcmds.exp: p ctable1[3]
+PASS: gdb.base/printcmds.exp: p ctable1[4]
+PASS: gdb.base/printcmds.exp: p ctable1[5]
+PASS: gdb.base/printcmds.exp: p ctable1[6]
+PASS: gdb.base/printcmds.exp: p ctable1[7]
+PASS: gdb.base/printcmds.exp: p ctable1[8]
+PASS: gdb.base/printcmds.exp: p ctable1[9]
+PASS: gdb.base/printcmds.exp: p ctable1[10]
+PASS: gdb.base/printcmds.exp: p ctable1[11]
+PASS: gdb.base/printcmds.exp: p ctable1[12]
+PASS: gdb.base/printcmds.exp: p ctable1[13]
+PASS: gdb.base/printcmds.exp: p ctable1[14]
+PASS: gdb.base/printcmds.exp: p ctable1[15]
+PASS: gdb.base/printcmds.exp: p ctable1[16]
+PASS: gdb.base/printcmds.exp: p ctable1[17]
+PASS: gdb.base/printcmds.exp: p ctable1[18]
+PASS: gdb.base/printcmds.exp: p ctable1[19]
+PASS: gdb.base/printcmds.exp: p ctable1[20]
+PASS: gdb.base/printcmds.exp: p ctable1[21]
+PASS: gdb.base/printcmds.exp: p ctable1[22]
+PASS: gdb.base/printcmds.exp: p ctable1[23]
+PASS: gdb.base/printcmds.exp: p ctable1[24]
+PASS: gdb.base/printcmds.exp: p ctable1[25]
+PASS: gdb.base/printcmds.exp: p ctable1[26]
+PASS: gdb.base/printcmds.exp: p ctable1[27]
+PASS: gdb.base/printcmds.exp: p ctable1[28]
+PASS: gdb.base/printcmds.exp: p ctable1[29]
+PASS: gdb.base/printcmds.exp: p ctable1[30]
+PASS: gdb.base/printcmds.exp: p ctable1[31]
+PASS: gdb.base/printcmds.exp: p ctable1[32]
+PASS: gdb.base/printcmds.exp: p ctable1[33]
+PASS: gdb.base/printcmds.exp: p ctable1[34]
+PASS: gdb.base/printcmds.exp: p ctable1[35]
+PASS: gdb.base/printcmds.exp: p ctable1[36]
+PASS: gdb.base/printcmds.exp: p ctable1[37]
+PASS: gdb.base/printcmds.exp: p ctable1[38]
+PASS: gdb.base/printcmds.exp: p ctable1[39]
+PASS: gdb.base/printcmds.exp: p ctable1[40]
+PASS: gdb.base/printcmds.exp: p ctable1[41]
+PASS: gdb.base/printcmds.exp: p ctable1[42]
+PASS: gdb.base/printcmds.exp: p ctable1[43]
+PASS: gdb.base/printcmds.exp: p ctable1[44]
+PASS: gdb.base/printcmds.exp: p ctable1[45]
+PASS: gdb.base/printcmds.exp: p ctable1[46]
+PASS: gdb.base/printcmds.exp: p ctable1[47]
+PASS: gdb.base/printcmds.exp: p ctable1[48]
+PASS: gdb.base/printcmds.exp: p ctable1[49]
+PASS: gdb.base/printcmds.exp: p ctable1[50]
+PASS: gdb.base/printcmds.exp: p ctable1[51]
+PASS: gdb.base/printcmds.exp: p ctable1[52]
+PASS: gdb.base/printcmds.exp: p ctable1[53]
+PASS: gdb.base/printcmds.exp: p ctable1[54]
+PASS: gdb.base/printcmds.exp: p ctable1[55]
+PASS: gdb.base/printcmds.exp: p ctable1[56]
+PASS: gdb.base/printcmds.exp: p ctable1[57]
+PASS: gdb.base/printcmds.exp: p ctable1[58]
+PASS: gdb.base/printcmds.exp: p ctable1[59]
+PASS: gdb.base/printcmds.exp: p ctable1[60]
+PASS: gdb.base/printcmds.exp: p ctable1[61]
+PASS: gdb.base/printcmds.exp: p ctable1[62]
+PASS: gdb.base/printcmds.exp: p ctable1[63]
+PASS: gdb.base/printcmds.exp: p ctable1[64]
+PASS: gdb.base/printcmds.exp: p ctable1[65]
+PASS: gdb.base/printcmds.exp: p ctable1[66]
+PASS: gdb.base/printcmds.exp: p ctable1[67]
+PASS: gdb.base/printcmds.exp: p ctable1[68]
+PASS: gdb.base/printcmds.exp: p ctable1[69]
+PASS: gdb.base/printcmds.exp: p ctable1[70]
+PASS: gdb.base/printcmds.exp: p ctable1[71]
+PASS: gdb.base/printcmds.exp: p ctable1[72]
+PASS: gdb.base/printcmds.exp: p ctable1[73]
+PASS: gdb.base/printcmds.exp: p ctable1[74]
+PASS: gdb.base/printcmds.exp: p ctable1[75]
+PASS: gdb.base/printcmds.exp: p ctable1[76]
+PASS: gdb.base/printcmds.exp: p ctable1[77]
+PASS: gdb.base/printcmds.exp: p ctable1[78]
+PASS: gdb.base/printcmds.exp: p ctable1[79]
+PASS: gdb.base/printcmds.exp: p ctable1[80]
+PASS: gdb.base/printcmds.exp: p ctable1[81]
+PASS: gdb.base/printcmds.exp: p ctable1[82]
+PASS: gdb.base/printcmds.exp: p ctable1[83]
+PASS: gdb.base/printcmds.exp: p ctable1[84]
+PASS: gdb.base/printcmds.exp: p ctable1[85]
+PASS: gdb.base/printcmds.exp: p ctable1[86]
+PASS: gdb.base/printcmds.exp: p ctable1[87]
+PASS: gdb.base/printcmds.exp: p ctable1[88]
+PASS: gdb.base/printcmds.exp: p ctable1[89]
+PASS: gdb.base/printcmds.exp: p ctable1[90]
+PASS: gdb.base/printcmds.exp: p ctable1[91]
+PASS: gdb.base/printcmds.exp: p ctable1[92]
+PASS: gdb.base/printcmds.exp: p ctable1[93]
+PASS: gdb.base/printcmds.exp: p ctable1[94]
+PASS: gdb.base/printcmds.exp: p ctable1[95]
+PASS: gdb.base/printcmds.exp: p ctable1[96]
+PASS: gdb.base/printcmds.exp: p ctable1[97]
+PASS: gdb.base/printcmds.exp: p ctable1[98]
+PASS: gdb.base/printcmds.exp: p ctable1[99]
+PASS: gdb.base/printcmds.exp: p ctable1[100]
+PASS: gdb.base/printcmds.exp: p ctable1[101]
+PASS: gdb.base/printcmds.exp: p ctable1[102]
+PASS: gdb.base/printcmds.exp: p ctable1[103]
+PASS: gdb.base/printcmds.exp: p ctable1[104]
+PASS: gdb.base/printcmds.exp: p ctable1[105]
+PASS: gdb.base/printcmds.exp: p ctable1[106]
+PASS: gdb.base/printcmds.exp: p ctable1[107]
+PASS: gdb.base/printcmds.exp: p ctable1[108]
+PASS: gdb.base/printcmds.exp: p ctable1[109]
+PASS: gdb.base/printcmds.exp: p ctable1[110]
+PASS: gdb.base/printcmds.exp: p ctable1[111]
+PASS: gdb.base/printcmds.exp: p ctable1[112]
+PASS: gdb.base/printcmds.exp: p ctable1[113]
+PASS: gdb.base/printcmds.exp: p ctable1[114]
+PASS: gdb.base/printcmds.exp: p ctable1[115]
+PASS: gdb.base/printcmds.exp: p ctable1[116]
+PASS: gdb.base/printcmds.exp: p ctable1[117]
+PASS: gdb.base/printcmds.exp: p ctable1[118]
+PASS: gdb.base/printcmds.exp: p ctable1[119]
+PASS: gdb.base/printcmds.exp: p ctable1[120]
+PASS: gdb.base/printcmds.exp: p ctable1[121]
+PASS: gdb.base/printcmds.exp: p ctable1[122]
+PASS: gdb.base/printcmds.exp: p ctable1[123]
+PASS: gdb.base/printcmds.exp: p ctable1[124]
+PASS: gdb.base/printcmds.exp: p ctable1[125]
+PASS: gdb.base/printcmds.exp: p ctable1[126]
+PASS: gdb.base/printcmds.exp: p ctable1[127]
+PASS: gdb.base/printcmds.exp: p ctable1[128]
+PASS: gdb.base/printcmds.exp: p ctable1[129]
+PASS: gdb.base/printcmds.exp: p ctable1[130]
+PASS: gdb.base/printcmds.exp: p ctable1[131]
+PASS: gdb.base/printcmds.exp: p ctable1[132]
+PASS: gdb.base/printcmds.exp: p ctable1[133]
+PASS: gdb.base/printcmds.exp: p ctable1[134]
+PASS: gdb.base/printcmds.exp: p ctable1[135]
+PASS: gdb.base/printcmds.exp: p ctable1[136]
+PASS: gdb.base/printcmds.exp: p ctable1[137]
+PASS: gdb.base/printcmds.exp: p ctable1[138]
+PASS: gdb.base/printcmds.exp: p ctable1[139]
+PASS: gdb.base/printcmds.exp: p ctable1[140]
+PASS: gdb.base/printcmds.exp: p ctable1[141]
+PASS: gdb.base/printcmds.exp: p ctable1[142]
+PASS: gdb.base/printcmds.exp: p ctable1[143]
+PASS: gdb.base/printcmds.exp: p ctable1[144]
+PASS: gdb.base/printcmds.exp: p ctable1[145]
+PASS: gdb.base/printcmds.exp: p ctable1[146]
+PASS: gdb.base/printcmds.exp: p ctable1[147]
+PASS: gdb.base/printcmds.exp: p ctable1[148]
+PASS: gdb.base/printcmds.exp: p ctable1[149]
+PASS: gdb.base/printcmds.exp: p ctable1[150]
+PASS: gdb.base/printcmds.exp: p ctable1[151]
+PASS: gdb.base/printcmds.exp: p ctable1[152]
+PASS: gdb.base/printcmds.exp: p ctable1[153]
+PASS: gdb.base/printcmds.exp: p ctable1[154]
+PASS: gdb.base/printcmds.exp: p ctable1[155]
+PASS: gdb.base/printcmds.exp: p ctable1[156]
+PASS: gdb.base/printcmds.exp: p ctable1[157]
+PASS: gdb.base/printcmds.exp: p ctable1[158]
+PASS: gdb.base/printcmds.exp: p ctable1[159]
+PASS: gdb.base/printcmds.exp: p ctable1[160]
+PASS: gdb.base/printcmds.exp: p ctable1[161]
+PASS: gdb.base/printcmds.exp: p ctable1[162]
+PASS: gdb.base/printcmds.exp: p ctable1[163]
+PASS: gdb.base/printcmds.exp: p ctable1[164]
+PASS: gdb.base/printcmds.exp: p ctable1[165]
+PASS: gdb.base/printcmds.exp: p ctable1[166]
+PASS: gdb.base/printcmds.exp: p ctable1[167]
+PASS: gdb.base/printcmds.exp: p ctable1[168]
+PASS: gdb.base/printcmds.exp: p ctable1[169]
+PASS: gdb.base/printcmds.exp: p ctable1[170]
+PASS: gdb.base/printcmds.exp: p ctable1[171]
+PASS: gdb.base/printcmds.exp: p ctable1[172]
+PASS: gdb.base/printcmds.exp: p ctable1[173]
+PASS: gdb.base/printcmds.exp: p ctable1[174]
+PASS: gdb.base/printcmds.exp: p ctable1[175]
+PASS: gdb.base/printcmds.exp: p ctable1[176]
+PASS: gdb.base/printcmds.exp: p ctable1[177]
+PASS: gdb.base/printcmds.exp: p ctable1[178]
+PASS: gdb.base/printcmds.exp: p ctable1[179]
+PASS: gdb.base/printcmds.exp: p ctable1[180]
+PASS: gdb.base/printcmds.exp: p ctable1[181]
+PASS: gdb.base/printcmds.exp: p ctable1[182]
+PASS: gdb.base/printcmds.exp: p ctable1[183]
+PASS: gdb.base/printcmds.exp: p ctable1[184]
+PASS: gdb.base/printcmds.exp: p ctable1[185]
+PASS: gdb.base/printcmds.exp: p ctable1[186]
+PASS: gdb.base/printcmds.exp: p ctable1[187]
+PASS: gdb.base/printcmds.exp: p ctable1[188]
+PASS: gdb.base/printcmds.exp: p ctable1[189]
+PASS: gdb.base/printcmds.exp: p ctable1[190]
+PASS: gdb.base/printcmds.exp: p ctable1[191]
+PASS: gdb.base/printcmds.exp: p ctable1[192]
+PASS: gdb.base/printcmds.exp: p ctable1[193]
+PASS: gdb.base/printcmds.exp: p ctable1[194]
+PASS: gdb.base/printcmds.exp: p ctable1[195]
+PASS: gdb.base/printcmds.exp: p ctable1[196]
+PASS: gdb.base/printcmds.exp: p ctable1[197]
+PASS: gdb.base/printcmds.exp: p ctable1[198]
+PASS: gdb.base/printcmds.exp: p ctable1[199]
+PASS: gdb.base/printcmds.exp: p ctable1[200]
+PASS: gdb.base/printcmds.exp: p ctable1[201]
+PASS: gdb.base/printcmds.exp: p ctable1[202]
+PASS: gdb.base/printcmds.exp: p ctable1[203]
+PASS: gdb.base/printcmds.exp: p ctable1[204]
+PASS: gdb.base/printcmds.exp: p ctable1[205]
+PASS: gdb.base/printcmds.exp: p ctable1[206]
+PASS: gdb.base/printcmds.exp: p ctable1[207]
+PASS: gdb.base/printcmds.exp: p ctable1[208]
+PASS: gdb.base/printcmds.exp: p ctable1[209]
+PASS: gdb.base/printcmds.exp: p ctable1[210]
+PASS: gdb.base/printcmds.exp: p ctable1[211]
+PASS: gdb.base/printcmds.exp: p ctable1[212]
+PASS: gdb.base/printcmds.exp: p ctable1[213]
+PASS: gdb.base/printcmds.exp: p ctable1[214]
+PASS: gdb.base/printcmds.exp: p ctable1[215]
+PASS: gdb.base/printcmds.exp: p ctable1[216]
+PASS: gdb.base/printcmds.exp: p ctable1[217]
+PASS: gdb.base/printcmds.exp: p ctable1[218]
+PASS: gdb.base/printcmds.exp: p ctable1[219]
+PASS: gdb.base/printcmds.exp: p ctable1[220]
+PASS: gdb.base/printcmds.exp: p ctable1[221]
+PASS: gdb.base/printcmds.exp: p ctable1[222]
+PASS: gdb.base/printcmds.exp: p ctable1[223]
+PASS: gdb.base/printcmds.exp: p ctable1[224]
+PASS: gdb.base/printcmds.exp: p ctable1[225]
+PASS: gdb.base/printcmds.exp: p ctable1[226]
+PASS: gdb.base/printcmds.exp: p ctable1[227]
+PASS: gdb.base/printcmds.exp: p ctable1[228]
+PASS: gdb.base/printcmds.exp: p ctable1[229]
+PASS: gdb.base/printcmds.exp: p ctable1[230]
+PASS: gdb.base/printcmds.exp: p ctable1[231]
+PASS: gdb.base/printcmds.exp: p ctable1[232]
+PASS: gdb.base/printcmds.exp: p ctable1[233]
+PASS: gdb.base/printcmds.exp: p ctable1[234]
+PASS: gdb.base/printcmds.exp: p ctable1[235]
+PASS: gdb.base/printcmds.exp: p ctable1[236]
+PASS: gdb.base/printcmds.exp: p ctable1[237]
+PASS: gdb.base/printcmds.exp: p ctable1[238]
+PASS: gdb.base/printcmds.exp: p ctable1[239]
+PASS: gdb.base/printcmds.exp: p ctable1[240]
+PASS: gdb.base/printcmds.exp: p ctable1[241]
+PASS: gdb.base/printcmds.exp: p ctable1[242]
+PASS: gdb.base/printcmds.exp: p ctable1[243]
+PASS: gdb.base/printcmds.exp: p ctable1[244]
+PASS: gdb.base/printcmds.exp: p ctable1[245]
+PASS: gdb.base/printcmds.exp: p ctable1[246]
+PASS: gdb.base/printcmds.exp: p ctable1[247]
+PASS: gdb.base/printcmds.exp: p ctable1[248]
+PASS: gdb.base/printcmds.exp: p ctable1[249]
+PASS: gdb.base/printcmds.exp: p ctable1[250]
+PASS: gdb.base/printcmds.exp: p ctable1[251]
+PASS: gdb.base/printcmds.exp: p ctable1[252]
+PASS: gdb.base/printcmds.exp: p ctable1[253]
+PASS: gdb.base/printcmds.exp: p ctable1[254]
+PASS: gdb.base/printcmds.exp: p ctable1[255]
+PASS: gdb.base/printcmds.exp: set print elements 1
+PASS: gdb.base/printcmds.exp: p &ctable2[0*16] with print elements set to 1
+PASS: gdb.base/printcmds.exp: p &ctable2[1*16] with print elements set to 1
+PASS: gdb.base/printcmds.exp: p &ctable2[2*16] with print elements set to 1
+PASS: gdb.base/printcmds.exp: p &ctable2[3*16] with print elements set to 1
+PASS: gdb.base/printcmds.exp: p &ctable2[4*16] with print elements set to 1
+PASS: gdb.base/printcmds.exp: p &ctable2[5*16] with print elements set to 1
+PASS: gdb.base/printcmds.exp: p &ctable2[6*16] with print elements set to 1
+PASS: gdb.base/printcmds.exp: p &ctable2[7*16] with print elements set to 1
+PASS: gdb.base/printcmds.exp: p &ctable2[8*16] with print elements set to 1
+PASS: gdb.base/printcmds.exp: p &ctable2[9*16] with print elements set to 1
+PASS: gdb.base/printcmds.exp: p &ctable2[10*16] with print elements set to 1
+PASS: gdb.base/printcmds.exp: p &ctable2[11*16] with print elements set to 1
+PASS: gdb.base/printcmds.exp: p &ctable2[12*16] with print elements set to 1
+PASS: gdb.base/printcmds.exp: p &ctable2[13*16] with print elements set to 1
+PASS: gdb.base/printcmds.exp: p &ctable2[14*16] with print elements set to 1
+PASS: gdb.base/printcmds.exp: p &ctable2[15*16] with print elements set to 1
+PASS: gdb.base/printcmds.exp: set print elements 2
+PASS: gdb.base/printcmds.exp: p &ctable2[0*16] with print elements set to 2
+PASS: gdb.base/printcmds.exp: p &ctable2[1*16] with print elements set to 2
+PASS: gdb.base/printcmds.exp: p &ctable2[2*16] with print elements set to 2
+PASS: gdb.base/printcmds.exp: p &ctable2[3*16] with print elements set to 2
+PASS: gdb.base/printcmds.exp: p &ctable2[4*16] with print elements set to 2
+PASS: gdb.base/printcmds.exp: p &ctable2[5*16] with print elements set to 2
+PASS: gdb.base/printcmds.exp: p &ctable2[6*16] with print elements set to 2
+PASS: gdb.base/printcmds.exp: p &ctable2[7*16] with print elements set to 2
+PASS: gdb.base/printcmds.exp: p &ctable2[8*16] with print elements set to 2
+PASS: gdb.base/printcmds.exp: p &ctable2[9*16] with print elements set to 2
+PASS: gdb.base/printcmds.exp: p &ctable2[10*16] with print elements set to 2
+PASS: gdb.base/printcmds.exp: p &ctable2[11*16] with print elements set to 2
+PASS: gdb.base/printcmds.exp: p &ctable2[12*16] with print elements set to 2
+PASS: gdb.base/printcmds.exp: p &ctable2[13*16] with print elements set to 2
+PASS: gdb.base/printcmds.exp: p &ctable2[14*16] with print elements set to 2
+PASS: gdb.base/printcmds.exp: p &ctable2[15*16] with print elements set to 2
+PASS: gdb.base/printcmds.exp: set print elements 3
+PASS: gdb.base/printcmds.exp: p &ctable2[0*16] with print elements set to 3
+PASS: gdb.base/printcmds.exp: p &ctable2[1*16] with print elements set to 3
+PASS: gdb.base/printcmds.exp: p &ctable2[2*16] with print elements set to 3
+PASS: gdb.base/printcmds.exp: p &ctable2[3*16] with print elements set to 3
+PASS: gdb.base/printcmds.exp: p &ctable2[4*16] with print elements set to 3
+PASS: gdb.base/printcmds.exp: p &ctable2[5*16] with print elements set to 3
+PASS: gdb.base/printcmds.exp: p &ctable2[6*16] with print elements set to 3
+PASS: gdb.base/printcmds.exp: p &ctable2[7*16] with print elements set to 3
+PASS: gdb.base/printcmds.exp: p &ctable2[8*16] with print elements set to 3
+PASS: gdb.base/printcmds.exp: p &ctable2[9*16] with print elements set to 3
+PASS: gdb.base/printcmds.exp: p &ctable2[10*16] with print elements set to 3
+PASS: gdb.base/printcmds.exp: p &ctable2[11*16] with print elements set to 3
+PASS: gdb.base/printcmds.exp: p &ctable2[12*16] with print elements set to 3
+PASS: gdb.base/printcmds.exp: p &ctable2[13*16] with print elements set to 3
+PASS: gdb.base/printcmds.exp: p &ctable2[14*16] with print elements set to 3
+PASS: gdb.base/printcmds.exp: p &ctable2[15*16] with print elements set to 3
+PASS: gdb.base/printcmds.exp: set print elements 4
+PASS: gdb.base/printcmds.exp: p &ctable2[0*16] with print elements set to 4
+PASS: gdb.base/printcmds.exp: p &ctable2[1*16] with print elements set to 4
+PASS: gdb.base/printcmds.exp: p &ctable2[2*16] with print elements set to 4
+PASS: gdb.base/printcmds.exp: p &ctable2[3*16] with print elements set to 4
+PASS: gdb.base/printcmds.exp: p &ctable2[4*16] with print elements set to 4
+PASS: gdb.base/printcmds.exp: p &ctable2[5*16] with print elements set to 4
+PASS: gdb.base/printcmds.exp: p &ctable2[6*16] with print elements set to 4
+PASS: gdb.base/printcmds.exp: p &ctable2[7*16] with print elements set to 4
+PASS: gdb.base/printcmds.exp: p &ctable2[8*16] with print elements set to 4
+PASS: gdb.base/printcmds.exp: p &ctable2[9*16] with print elements set to 4
+PASS: gdb.base/printcmds.exp: p &ctable2[10*16] with print elements set to 4
+PASS: gdb.base/printcmds.exp: p &ctable2[11*16] with print elements set to 4
+PASS: gdb.base/printcmds.exp: p &ctable2[12*16] with print elements set to 4
+PASS: gdb.base/printcmds.exp: p &ctable2[13*16] with print elements set to 4
+PASS: gdb.base/printcmds.exp: p &ctable2[14*16] with print elements set to 4
+PASS: gdb.base/printcmds.exp: p &ctable2[15*16] with print elements set to 4
+PASS: gdb.base/printcmds.exp: set print elements 5
+PASS: gdb.base/printcmds.exp: p &ctable2[0*16] with print elements set to 5
+PASS: gdb.base/printcmds.exp: p &ctable2[1*16] with print elements set to 5
+PASS: gdb.base/printcmds.exp: p &ctable2[2*16] with print elements set to 5
+PASS: gdb.base/printcmds.exp: p &ctable2[3*16] with print elements set to 5
+PASS: gdb.base/printcmds.exp: p &ctable2[4*16] with print elements set to 5
+PASS: gdb.base/printcmds.exp: p &ctable2[5*16] with print elements set to 5
+PASS: gdb.base/printcmds.exp: p &ctable2[6*16] with print elements set to 5
+PASS: gdb.base/printcmds.exp: p &ctable2[7*16] with print elements set to 5
+PASS: gdb.base/printcmds.exp: p &ctable2[8*16] with print elements set to 5
+PASS: gdb.base/printcmds.exp: p &ctable2[9*16] with print elements set to 5
+PASS: gdb.base/printcmds.exp: p &ctable2[10*16] with print elements set to 5
+PASS: gdb.base/printcmds.exp: p &ctable2[11*16] with print elements set to 5
+PASS: gdb.base/printcmds.exp: p &ctable2[12*16] with print elements set to 5
+PASS: gdb.base/printcmds.exp: p &ctable2[13*16] with print elements set to 5
+PASS: gdb.base/printcmds.exp: p &ctable2[14*16] with print elements set to 5
+PASS: gdb.base/printcmds.exp: p &ctable2[15*16] with print elements set to 5
+PASS: gdb.base/printcmds.exp: set print elements 6
+PASS: gdb.base/printcmds.exp: p &ctable2[0*16] with print elements set to 6
+PASS: gdb.base/printcmds.exp: p &ctable2[1*16] with print elements set to 6
+PASS: gdb.base/printcmds.exp: p &ctable2[2*16] with print elements set to 6
+PASS: gdb.base/printcmds.exp: p &ctable2[3*16] with print elements set to 6
+PASS: gdb.base/printcmds.exp: p &ctable2[4*16] with print elements set to 6
+PASS: gdb.base/printcmds.exp: p &ctable2[5*16] with print elements set to 6
+PASS: gdb.base/printcmds.exp: p &ctable2[6*16] with print elements set to 6
+PASS: gdb.base/printcmds.exp: p &ctable2[7*16] with print elements set to 6
+PASS: gdb.base/printcmds.exp: p &ctable2[8*16] with print elements set to 6
+PASS: gdb.base/printcmds.exp: p &ctable2[9*16] with print elements set to 6
+PASS: gdb.base/printcmds.exp: p &ctable2[10*16] with print elements set to 6
+PASS: gdb.base/printcmds.exp: p &ctable2[11*16] with print elements set to 6
+PASS: gdb.base/printcmds.exp: p &ctable2[12*16] with print elements set to 6
+PASS: gdb.base/printcmds.exp: p &ctable2[13*16] with print elements set to 6
+PASS: gdb.base/printcmds.exp: p &ctable2[14*16] with print elements set to 6
+PASS: gdb.base/printcmds.exp: p &ctable2[15*16] with print elements set to 6
+PASS: gdb.base/printcmds.exp: set print elements 7
+PASS: gdb.base/printcmds.exp: p &ctable2[0*16] with print elements set to 7
+PASS: gdb.base/printcmds.exp: p &ctable2[1*16] with print elements set to 7
+PASS: gdb.base/printcmds.exp: p &ctable2[2*16] with print elements set to 7
+PASS: gdb.base/printcmds.exp: p &ctable2[3*16] with print elements set to 7
+PASS: gdb.base/printcmds.exp: p &ctable2[4*16] with print elements set to 7
+PASS: gdb.base/printcmds.exp: p &ctable2[5*16] with print elements set to 7
+PASS: gdb.base/printcmds.exp: p &ctable2[6*16] with print elements set to 7
+PASS: gdb.base/printcmds.exp: p &ctable2[7*16] with print elements set to 7
+PASS: gdb.base/printcmds.exp: p &ctable2[8*16] with print elements set to 7
+PASS: gdb.base/printcmds.exp: p &ctable2[9*16] with print elements set to 7
+PASS: gdb.base/printcmds.exp: p &ctable2[10*16] with print elements set to 7
+PASS: gdb.base/printcmds.exp: p &ctable2[11*16] with print elements set to 7
+PASS: gdb.base/printcmds.exp: p &ctable2[12*16] with print elements set to 7
+PASS: gdb.base/printcmds.exp: p &ctable2[13*16] with print elements set to 7
+PASS: gdb.base/printcmds.exp: p &ctable2[14*16] with print elements set to 7
+PASS: gdb.base/printcmds.exp: p &ctable2[15*16] with print elements set to 7
+PASS: gdb.base/printcmds.exp: set print elements 8
+PASS: gdb.base/printcmds.exp: p &ctable2[0*16] with print elements set to 8
+PASS: gdb.base/printcmds.exp: p &ctable2[1*16] with print elements set to 8
+PASS: gdb.base/printcmds.exp: p &ctable2[2*16] with print elements set to 8
+PASS: gdb.base/printcmds.exp: p &ctable2[3*16] with print elements set to 8
+PASS: gdb.base/printcmds.exp: p &ctable2[4*16] with print elements set to 8
+PASS: gdb.base/printcmds.exp: p &ctable2[5*16] with print elements set to 8
+PASS: gdb.base/printcmds.exp: p &ctable2[6*16] with print elements set to 8
+PASS: gdb.base/printcmds.exp: p &ctable2[7*16] with print elements set to 8
+PASS: gdb.base/printcmds.exp: p &ctable2[8*16] with print elements set to 8
+PASS: gdb.base/printcmds.exp: p &ctable2[9*16] with print elements set to 8
+PASS: gdb.base/printcmds.exp: p &ctable2[10*16] with print elements set to 8
+PASS: gdb.base/printcmds.exp: p &ctable2[11*16] with print elements set to 8
+PASS: gdb.base/printcmds.exp: p &ctable2[12*16] with print elements set to 8
+PASS: gdb.base/printcmds.exp: p &ctable2[13*16] with print elements set to 8
+PASS: gdb.base/printcmds.exp: p &ctable2[14*16] with print elements set to 8
+PASS: gdb.base/printcmds.exp: p &ctable2[15*16] with print elements set to 8
+PASS: gdb.base/printcmds.exp: set print elements 9
+PASS: gdb.base/printcmds.exp: p &ctable2[0*16] with print elements set to 9
+PASS: gdb.base/printcmds.exp: p &ctable2[1*16] with print elements set to 9
+PASS: gdb.base/printcmds.exp: p &ctable2[2*16] with print elements set to 9
+PASS: gdb.base/printcmds.exp: p &ctable2[3*16] with print elements set to 9
+PASS: gdb.base/printcmds.exp: p &ctable2[4*16] with print elements set to 9
+PASS: gdb.base/printcmds.exp: p &ctable2[5*16] with print elements set to 9
+PASS: gdb.base/printcmds.exp: p &ctable2[6*16] with print elements set to 9
+PASS: gdb.base/printcmds.exp: p &ctable2[7*16] with print elements set to 9
+PASS: gdb.base/printcmds.exp: p &ctable2[8*16] with print elements set to 9
+PASS: gdb.base/printcmds.exp: p &ctable2[9*16] with print elements set to 9
+PASS: gdb.base/printcmds.exp: p &ctable2[10*16] with print elements set to 9
+PASS: gdb.base/printcmds.exp: p &ctable2[11*16] with print elements set to 9
+PASS: gdb.base/printcmds.exp: p &ctable2[12*16] with print elements set to 9
+PASS: gdb.base/printcmds.exp: p &ctable2[13*16] with print elements set to 9
+PASS: gdb.base/printcmds.exp: p &ctable2[14*16] with print elements set to 9
+PASS: gdb.base/printcmds.exp: p &ctable2[15*16] with print elements set to 9
+PASS: gdb.base/printcmds.exp: set print elements 10
+PASS: gdb.base/printcmds.exp: p &ctable2[0*16] with print elements set to 10
+PASS: gdb.base/printcmds.exp: p &ctable2[1*16] with print elements set to 10
+PASS: gdb.base/printcmds.exp: p &ctable2[2*16] with print elements set to 10
+PASS: gdb.base/printcmds.exp: p &ctable2[3*16] with print elements set to 10
+PASS: gdb.base/printcmds.exp: p &ctable2[4*16] with print elements set to 10
+PASS: gdb.base/printcmds.exp: p &ctable2[5*16] with print elements set to 10
+PASS: gdb.base/printcmds.exp: p &ctable2[6*16] with print elements set to 10
+PASS: gdb.base/printcmds.exp: p &ctable2[7*16] with print elements set to 10
+PASS: gdb.base/printcmds.exp: p &ctable2[8*16] with print elements set to 10
+PASS: gdb.base/printcmds.exp: p &ctable2[9*16] with print elements set to 10
+PASS: gdb.base/printcmds.exp: p &ctable2[10*16] with print elements set to 10
+PASS: gdb.base/printcmds.exp: p &ctable2[11*16] with print elements set to 10
+PASS: gdb.base/printcmds.exp: p &ctable2[12*16] with print elements set to 10
+PASS: gdb.base/printcmds.exp: p &ctable2[13*16] with print elements set to 10
+PASS: gdb.base/printcmds.exp: p &ctable2[14*16] with print elements set to 10
+PASS: gdb.base/printcmds.exp: p &ctable2[15*16] with print elements set to 10
+PASS: gdb.base/printcmds.exp: set print elements 11
+PASS: gdb.base/printcmds.exp: p &ctable2[0*16] with print elements set to 11
+PASS: gdb.base/printcmds.exp: p &ctable2[1*16] with print elements set to 11
+PASS: gdb.base/printcmds.exp: p &ctable2[2*16] with print elements set to 11
+PASS: gdb.base/printcmds.exp: p &ctable2[3*16] with print elements set to 11
+PASS: gdb.base/printcmds.exp: p &ctable2[4*16] with print elements set to 11
+PASS: gdb.base/printcmds.exp: p &ctable2[5*16] with print elements set to 11
+PASS: gdb.base/printcmds.exp: p &ctable2[6*16] with print elements set to 11
+PASS: gdb.base/printcmds.exp: p &ctable2[7*16] with print elements set to 11
+PASS: gdb.base/printcmds.exp: p &ctable2[8*16] with print elements set to 11
+PASS: gdb.base/printcmds.exp: p &ctable2[9*16] with print elements set to 11
+PASS: gdb.base/printcmds.exp: p &ctable2[10*16] with print elements set to 11
+PASS: gdb.base/printcmds.exp: p &ctable2[11*16] with print elements set to 11
+PASS: gdb.base/printcmds.exp: p &ctable2[12*16] with print elements set to 11
+PASS: gdb.base/printcmds.exp: p &ctable2[13*16] with print elements set to 11
+PASS: gdb.base/printcmds.exp: p &ctable2[14*16] with print elements set to 11
+PASS: gdb.base/printcmds.exp: p &ctable2[15*16] with print elements set to 11
+PASS: gdb.base/printcmds.exp: set print elements 12
+PASS: gdb.base/printcmds.exp: p &ctable2[0*16] with print elements set to 12
+PASS: gdb.base/printcmds.exp: p &ctable2[1*16] with print elements set to 12
+PASS: gdb.base/printcmds.exp: p &ctable2[2*16] with print elements set to 12
+PASS: gdb.base/printcmds.exp: p &ctable2[3*16] with print elements set to 12
+PASS: gdb.base/printcmds.exp: p &ctable2[4*16] with print elements set to 12
+PASS: gdb.base/printcmds.exp: p &ctable2[5*16] with print elements set to 12
+PASS: gdb.base/printcmds.exp: p &ctable2[6*16] with print elements set to 12
+PASS: gdb.base/printcmds.exp: p &ctable2[7*16] with print elements set to 12
+PASS: gdb.base/printcmds.exp: p &ctable2[8*16] with print elements set to 12
+PASS: gdb.base/printcmds.exp: p &ctable2[9*16] with print elements set to 12
+PASS: gdb.base/printcmds.exp: p &ctable2[10*16] with print elements set to 12
+PASS: gdb.base/printcmds.exp: p &ctable2[11*16] with print elements set to 12
+PASS: gdb.base/printcmds.exp: p &ctable2[12*16] with print elements set to 12
+PASS: gdb.base/printcmds.exp: p &ctable2[13*16] with print elements set to 12
+PASS: gdb.base/printcmds.exp: p &ctable2[14*16] with print elements set to 12
+PASS: gdb.base/printcmds.exp: p &ctable2[15*16] with print elements set to 12
+PASS: gdb.base/printcmds.exp: set print elements 13
+PASS: gdb.base/printcmds.exp: p &ctable2[0*16] with print elements set to 13
+PASS: gdb.base/printcmds.exp: p &ctable2[1*16] with print elements set to 13
+PASS: gdb.base/printcmds.exp: p &ctable2[2*16] with print elements set to 13
+PASS: gdb.base/printcmds.exp: p &ctable2[3*16] with print elements set to 13
+PASS: gdb.base/printcmds.exp: p &ctable2[4*16] with print elements set to 13
+PASS: gdb.base/printcmds.exp: p &ctable2[5*16] with print elements set to 13
+PASS: gdb.base/printcmds.exp: p &ctable2[6*16] with print elements set to 13
+PASS: gdb.base/printcmds.exp: p &ctable2[7*16] with print elements set to 13
+PASS: gdb.base/printcmds.exp: p &ctable2[8*16] with print elements set to 13
+PASS: gdb.base/printcmds.exp: p &ctable2[9*16] with print elements set to 13
+PASS: gdb.base/printcmds.exp: p &ctable2[10*16] with print elements set to 13
+PASS: gdb.base/printcmds.exp: p &ctable2[11*16] with print elements set to 13
+PASS: gdb.base/printcmds.exp: p &ctable2[12*16] with print elements set to 13
+PASS: gdb.base/printcmds.exp: p &ctable2[13*16] with print elements set to 13
+PASS: gdb.base/printcmds.exp: p &ctable2[14*16] with print elements set to 13
+PASS: gdb.base/printcmds.exp: p &ctable2[15*16] with print elements set to 13
+PASS: gdb.base/printcmds.exp: set print elements 14
+PASS: gdb.base/printcmds.exp: p &ctable2[0*16] with print elements set to 14
+PASS: gdb.base/printcmds.exp: p &ctable2[1*16] with print elements set to 14
+PASS: gdb.base/printcmds.exp: p &ctable2[2*16] with print elements set to 14
+PASS: gdb.base/printcmds.exp: p &ctable2[3*16] with print elements set to 14
+PASS: gdb.base/printcmds.exp: p &ctable2[4*16] with print elements set to 14
+PASS: gdb.base/printcmds.exp: p &ctable2[5*16] with print elements set to 14
+PASS: gdb.base/printcmds.exp: p &ctable2[6*16] with print elements set to 14
+PASS: gdb.base/printcmds.exp: p &ctable2[7*16] with print elements set to 14
+PASS: gdb.base/printcmds.exp: p &ctable2[8*16] with print elements set to 14
+PASS: gdb.base/printcmds.exp: p &ctable2[9*16] with print elements set to 14
+PASS: gdb.base/printcmds.exp: p &ctable2[10*16] with print elements set to 14
+PASS: gdb.base/printcmds.exp: p &ctable2[11*16] with print elements set to 14
+PASS: gdb.base/printcmds.exp: p &ctable2[12*16] with print elements set to 14
+PASS: gdb.base/printcmds.exp: p &ctable2[13*16] with print elements set to 14
+PASS: gdb.base/printcmds.exp: p &ctable2[14*16] with print elements set to 14
+PASS: gdb.base/printcmds.exp: p &ctable2[15*16] with print elements set to 14
+PASS: gdb.base/printcmds.exp: set print elements 15
+PASS: gdb.base/printcmds.exp: p &ctable2[0*16] with print elements set to 15
+PASS: gdb.base/printcmds.exp: p &ctable2[1*16] with print elements set to 15
+PASS: gdb.base/printcmds.exp: p &ctable2[2*16] with print elements set to 15
+PASS: gdb.base/printcmds.exp: p &ctable2[3*16] with print elements set to 15
+PASS: gdb.base/printcmds.exp: p &ctable2[4*16] with print elements set to 15
+PASS: gdb.base/printcmds.exp: p &ctable2[5*16] with print elements set to 15
+PASS: gdb.base/printcmds.exp: p &ctable2[6*16] with print elements set to 15
+PASS: gdb.base/printcmds.exp: p &ctable2[7*16] with print elements set to 15
+PASS: gdb.base/printcmds.exp: p &ctable2[8*16] with print elements set to 15
+PASS: gdb.base/printcmds.exp: p &ctable2[9*16] with print elements set to 15
+PASS: gdb.base/printcmds.exp: p &ctable2[10*16] with print elements set to 15
+PASS: gdb.base/printcmds.exp: p &ctable2[11*16] with print elements set to 15
+PASS: gdb.base/printcmds.exp: p &ctable2[12*16] with print elements set to 15
+PASS: gdb.base/printcmds.exp: p &ctable2[13*16] with print elements set to 15
+PASS: gdb.base/printcmds.exp: p &ctable2[14*16] with print elements set to 15
+PASS: gdb.base/printcmds.exp: p &ctable2[15*16] with print elements set to 15
+PASS: gdb.base/printcmds.exp: set print elements 16
+PASS: gdb.base/printcmds.exp: p &ctable2[0*16] with print elements set to 16
+PASS: gdb.base/printcmds.exp: p &ctable2[1*16] with print elements set to 16
+PASS: gdb.base/printcmds.exp: p &ctable2[2*16] with print elements set to 16
+PASS: gdb.base/printcmds.exp: p &ctable2[3*16] with print elements set to 16
+PASS: gdb.base/printcmds.exp: p &ctable2[4*16] with print elements set to 16
+PASS: gdb.base/printcmds.exp: p &ctable2[5*16] with print elements set to 16
+PASS: gdb.base/printcmds.exp: p &ctable2[6*16] with print elements set to 16
+PASS: gdb.base/printcmds.exp: p &ctable2[7*16] with print elements set to 16
+PASS: gdb.base/printcmds.exp: p &ctable2[8*16] with print elements set to 16
+PASS: gdb.base/printcmds.exp: p &ctable2[9*16] with print elements set to 16
+PASS: gdb.base/printcmds.exp: p &ctable2[10*16] with print elements set to 16
+PASS: gdb.base/printcmds.exp: p &ctable2[11*16] with print elements set to 16
+PASS: gdb.base/printcmds.exp: p &ctable2[12*16] with print elements set to 16
+PASS: gdb.base/printcmds.exp: p &ctable2[13*16] with print elements set to 16
+PASS: gdb.base/printcmds.exp: p &ctable2[14*16] with print elements set to 16
+PASS: gdb.base/printcmds.exp: p &ctable2[15*16] with print elements set to 16
+PASS: gdb.base/printcmds.exp: correct element repeats in array embedded at offset > 0
+PASS: gdb.base/printcmds.exp: set print elements 0
+PASS: gdb.base/printcmds.exp: p teststring with elements set to 0
+PASS: gdb.base/printcmds.exp: set print elements 1
+PASS: gdb.base/printcmds.exp: p teststring with elements set to 1
+PASS: gdb.base/printcmds.exp: set print elements 5
+PASS: gdb.base/printcmds.exp: p teststring with elements set to 5
+PASS: gdb.base/printcmds.exp: set print elements 19
+PASS: gdb.base/printcmds.exp: p teststring with elements set to 19
+PASS: gdb.base/printcmds.exp: set print elements 20
+PASS: gdb.base/printcmds.exp: p teststring with elements set to 20
+PASS: gdb.base/printcmds.exp: set print elements 8
+PASS: gdb.base/printcmds.exp: p &ctable1[0]
+PASS: gdb.base/printcmds.exp: p &ctable1[1]
+PASS: gdb.base/printcmds.exp: p &ctable1[1*8]
+PASS: gdb.base/printcmds.exp: p &ctable1[2*8]
+PASS: gdb.base/printcmds.exp: p &ctable1[3*8]
+PASS: gdb.base/printcmds.exp: p &ctable1[4*8]
+PASS: gdb.base/printcmds.exp: p &ctable1[5*8]
+PASS: gdb.base/printcmds.exp: p &ctable1[6*8]
+PASS: gdb.base/printcmds.exp: p &ctable1[7*8]
+PASS: gdb.base/printcmds.exp: p &ctable1[8*8]
+PASS: gdb.base/printcmds.exp: p &ctable1[9*8]
+PASS: gdb.base/printcmds.exp: p &ctable1[10*8]
+PASS: gdb.base/printcmds.exp: p &ctable1[11*8]
+PASS: gdb.base/printcmds.exp: p &ctable1[12*8]
+PASS: gdb.base/printcmds.exp: p &ctable1[13*8]
+PASS: gdb.base/printcmds.exp: p &ctable1[14*8]
+PASS: gdb.base/printcmds.exp: p &ctable1[15*8]
+PASS: gdb.base/printcmds.exp: p &ctable1[16*8]
+PASS: gdb.base/printcmds.exp: p &ctable1[17*8]
+PASS: gdb.base/printcmds.exp: p &ctable1[18*8]
+PASS: gdb.base/printcmds.exp: p &ctable1[19*8]
+PASS: gdb.base/printcmds.exp: p &ctable1[20*8]
+PASS: gdb.base/printcmds.exp: p &ctable1[21*8]
+PASS: gdb.base/printcmds.exp: p &ctable1[22*8]
+PASS: gdb.base/printcmds.exp: p &ctable1[23*8]
+PASS: gdb.base/printcmds.exp: p &ctable1[24*8]
+PASS: gdb.base/printcmds.exp: p &ctable1[25*8]
+PASS: gdb.base/printcmds.exp: p &ctable1[26*8]
+PASS: gdb.base/printcmds.exp: p &ctable1[27*8]
+PASS: gdb.base/printcmds.exp: p &ctable1[28*8]
+PASS: gdb.base/printcmds.exp: p &ctable1[29*8]
+PASS: gdb.base/printcmds.exp: p &ctable1[30*8]
+PASS: gdb.base/printcmds.exp: p &ctable1[31*8]
+PASS: gdb.base/printcmds.exp: set print elements 24
+PASS: gdb.base/printcmds.exp: set print elements 24
+PASS: gdb.base/printcmds.exp: p a1[0]
+PASS: gdb.base/printcmds.exp: p a1[9]
+PASS: gdb.base/printcmds.exp: p a2
+PASS: gdb.base/printcmds.exp: p a2[0]
+PASS: gdb.base/printcmds.exp: p a2[3]
+PASS: gdb.base/printcmds.exp: set print null-stop on
+PASS: gdb.base/printcmds.exp: print a2 with null-stop on
+PASS: gdb.base/printcmds.exp: set print null-stop off
+PASS: gdb.base/printcmds.exp: p int1dim[0]@2
+PASS: gdb.base/printcmds.exp: p int1dim[0]@2@3
+PASS: gdb.base/printcmds.exp: set print elements 24
+PASS: gdb.base/printcmds.exp: set print address on
+PASS: gdb.base/printcmds.exp: p arrays
+PASS: gdb.base/printcmds.exp: p parrays
+PASS: gdb.base/printcmds.exp: p parrays->array1
+PASS: gdb.base/printcmds.exp: p &parrays->array1
+PASS: gdb.base/printcmds.exp: p parrays->array2
+PASS: gdb.base/printcmds.exp: p &parrays->array2
+PASS: gdb.base/printcmds.exp: p parrays->array3
+PASS: gdb.base/printcmds.exp: p &parrays->array3
+PASS: gdb.base/printcmds.exp: p parrays->array4
+PASS: gdb.base/printcmds.exp: p &parrays->array4
+PASS: gdb.base/printcmds.exp: p parrays->array5
+PASS: gdb.base/printcmds.exp: p &parrays->array5
+PASS: gdb.base/printcmds.exp: set print address off
+PASS: gdb.base/printcmds.exp: set print elements 50
+PASS: gdb.base/printcmds.exp: p "a string"
+PASS: gdb.base/printcmds.exp: p "embedded \000 null"
+PASS: gdb.base/printcmds.exp: p "abcd"[2]
+PASS: gdb.base/printcmds.exp: p sizeof ("abcdef")
+PASS: gdb.base/printcmds.exp: ptype "foo"
+PASS: gdb.base/printcmds.exp: p *"foo"
+PASS: gdb.base/printcmds.exp: ptype *"foo"
+PASS: gdb.base/printcmds.exp: p &*"foo"
+PASS: gdb.base/printcmds.exp: ptype &*"foo"
+PASS: gdb.base/printcmds.exp: p (char *)"foo"
+PASS: gdb.base/printcmds.exp: print {'a','b','c'}
+PASS: gdb.base/printcmds.exp: print {4,5,6}[2]
+PASS: gdb.base/printcmds.exp: print *&{4,5,6}[1]
+PASS: gdb.base/printcmds.exp: print some_volatile_enum
+PASS: gdb.base/printcmds.exp: print three
+PASS: gdb.base/printcmds.exp: printf "x=%d,y=%d,z=%d\n", 5, 6, 7
+PASS: gdb.base/printcmds.exp: printf "string=%.4sxx\n", teststring
+PASS: gdb.base/printcmds.exp: printf "string=%sxx\n", teststring
+PASS: gdb.base/printcmds.exp: printf "%f is fun\n", 1.0
+PASS: gdb.base/printcmds.exp: printf "x=%d,y=%f,z=%d\n", 5, 6.0, 7
+PASS: gdb.base/printcmds.exp: printf "%x %f, %c %x, %x, %f\n", 0xbad, -99.541, 'z', 0xfeedface, 0xdeadbeef, 5.0
+PASS: gdb.base/printcmds.exp: printf "%c\n", "x"[1,0]
+PASS: gdb.base/printcmds.exp: printf "%%%d%%\n", 5
+PASS: gdb.base/printcmds.exp: printf "%Hf\n",1.2df
+PASS: gdb.base/printcmds.exp: printf "%Hf\n",-1.2df
+PASS: gdb.base/printcmds.exp: printf "%Hf\n",1.234567df
+PASS: gdb.base/printcmds.exp: printf "%Hf\n",-1.234567df
+PASS: gdb.base/printcmds.exp: printf "%Hf\n",1234567.df
+PASS: gdb.base/printcmds.exp: printf "%Hf\n",-1234567.df
+PASS: gdb.base/printcmds.exp: printf "%Hf\n",1.2E1df
+PASS: gdb.base/printcmds.exp: printf "%Hf\n",1.2E10df
+PASS: gdb.base/printcmds.exp: printf "%Hf\n",1.2E-10df
+PASS: gdb.base/printcmds.exp: printf "%Hf\n",1.2E96df
+PASS: gdb.base/printcmds.exp: printf "%Df\n",1.2dd
+PASS: gdb.base/printcmds.exp: printf "%Df\n",-1.2dd
+PASS: gdb.base/printcmds.exp: printf "%Df\n",1.234567890123456dd
+PASS: gdb.base/printcmds.exp: printf "%Df\n",-1.234567890123456dd
+PASS: gdb.base/printcmds.exp: printf "%Df\n",1234567890123456.dd
+PASS: gdb.base/printcmds.exp: printf "%Df\n",-1234567890123456.dd
+PASS: gdb.base/printcmds.exp: printf "%Df\n",1.2E1dd
+PASS: gdb.base/printcmds.exp: printf "%Df\n",1.2E10dd
+PASS: gdb.base/printcmds.exp: printf "%Df\n",1.2E-10dd
+PASS: gdb.base/printcmds.exp: printf "%Df\n",1.2E384dd
+PASS: gdb.base/printcmds.exp: printf "%DDf\n",1.2dl
+PASS: gdb.base/printcmds.exp: printf "%DDf\n",-1.2dl
+PASS: gdb.base/printcmds.exp: printf "%DDf\n",1.234567890123456789012345678901234dl
+PASS: gdb.base/printcmds.exp: printf "%DDf\n",-1.234567890123456789012345678901234dl
+PASS: gdb.base/printcmds.exp: printf "%DDf\n",1234567890123456789012345678901234.dl
+PASS: gdb.base/printcmds.exp: printf "%DDf\n",-1234567890123456789012345678901234.dl
+PASS: gdb.base/printcmds.exp: printf "%DDf\n",1.2E1dl
+PASS: gdb.base/printcmds.exp: printf "%DDf\n",1.2E10dl
+PASS: gdb.base/printcmds.exp: printf "%DDf\n",1.2E-10dl
+PASS: gdb.base/printcmds.exp: printf "%DDf\n",1.2E6144dl
+PASS: gdb.base/printcmds.exp: printf "%Hf %Hf\n",1.2df,1.3df
+PASS: gdb.base/printcmds.exp: set print symbol on
+PASS: gdb.base/printcmds.exp: print &three
+PASS: gdb.base/printcmds.exp: print parrays
+PASS: gdb.base/printcmds.exp: set print symbol off
+PASS: gdb.base/printcmds.exp: print invalid_LLL
+PASS: gdb.base/printcmds.exp: print invalid_LLE
+PASS: gdb.base/printcmds.exp: print invalid_LLR
+PASS: gdb.base/printcmds.exp: print invalid_LLS
+PASS: gdb.base/printcmds.exp: print invalid_ELL
+PASS: gdb.base/printcmds.exp: print invalid_ELR
+PASS: gdb.base/printcmds.exp: print invalid_ELS
+PASS: gdb.base/printcmds.exp: print invalid_RLL
+PASS: gdb.base/printcmds.exp: print invalid_RLE
+PASS: gdb.base/printcmds.exp: print invalid_RLR
+PASS: gdb.base/printcmds.exp: print invalid_RLS
+PASS: gdb.base/printcmds.exp: print invalid_SLL
+PASS: gdb.base/printcmds.exp: print invalid_SLE
+PASS: gdb.base/printcmds.exp: print invalid_SLR
+PASS: gdb.base/printcmds.exp: print invalid_SLS
+PASS: gdb.base/printcmds.exp: print invalid_LRL
+PASS: gdb.base/printcmds.exp: print invalid_LRE
+PASS: gdb.base/printcmds.exp: print invalid_LRR
+PASS: gdb.base/printcmds.exp: print invalid_LRS
+PASS: gdb.base/printcmds.exp: print invalid_ERL
+PASS: gdb.base/printcmds.exp: print invalid_ERR
+PASS: gdb.base/printcmds.exp: print invalid_ERS
+PASS: gdb.base/printcmds.exp: print invalid_RRL
+PASS: gdb.base/printcmds.exp: print invalid_RRE
+PASS: gdb.base/printcmds.exp: print invalid_RRR
+PASS: gdb.base/printcmds.exp: print invalid_RRS
+PASS: gdb.base/printcmds.exp: print invalid_SRL
+PASS: gdb.base/printcmds.exp: print invalid_SRE
+PASS: gdb.base/printcmds.exp: print invalid_SRR
+PASS: gdb.base/printcmds.exp: print invalid_SRS
+PASS: gdb.base/printcmds.exp: print invalid_LSL
+PASS: gdb.base/printcmds.exp: print invalid_LSE
+PASS: gdb.base/printcmds.exp: print invalid_LSR
+PASS: gdb.base/printcmds.exp: print invalid_LSS
+PASS: gdb.base/printcmds.exp: print invalid_ESL
+PASS: gdb.base/printcmds.exp: print invalid_ESR
+PASS: gdb.base/printcmds.exp: print invalid_ESS
+PASS: gdb.base/printcmds.exp: print invalid_RSL
+PASS: gdb.base/printcmds.exp: print invalid_RSE
+PASS: gdb.base/printcmds.exp: print invalid_RSR
+PASS: gdb.base/printcmds.exp: print invalid_RSS
+PASS: gdb.base/printcmds.exp: print invalid_SSL
+PASS: gdb.base/printcmds.exp: print invalid_SSE
+PASS: gdb.base/printcmds.exp: print invalid_SSR
+PASS: gdb.base/printcmds.exp: print invalid_SSS
+Running ./gdb.base/print-file-var.exp ...
+PASS: gdb.base/print-file-var.exp: breapoint past v1 & v2 initialization
+PASS: gdb.base/print-file-var.exp: continue to STOP marker
+PASS: gdb.base/print-file-var.exp: print 'print-file-var-lib1.c'::this_version_id == v1
+PASS: gdb.base/print-file-var.exp: print 'print-file-var-lib2.c'::this_version_id == v2
+Running ./gdb.base/prologue.exp ...
+PASS: gdb.base/prologue.exp: setting breakpoint at marker
+PASS: gdb.base/prologue.exp: continue to marker
+PASS: gdb.base/prologue.exp: reading $pc: marker
+PASS: gdb.base/prologue.exp: setting breakpoint at other
+PASS: gdb.base/prologue.exp: continue to other
+PASS: gdb.base/prologue.exp: reading $pc: other
+PASS: gdb.base/prologue.exp: same pc from minimal symbol
+Running ./gdb.base/prologue-include.exp ...
+PASS: gdb.base/prologue-include.exp: breakpoint main
+Running ./gdb.base/psymtab.exp ...
+PASS: gdb.base/psymtab.exp: psymtab pending setup
+PASS: gdb.base/psymtab.exp: Don't search past end of psymtab.
+Running ./gdb.base/ptr-typedef.exp ...
+PASS: gdb.base/ptr-typedef.exp: print foo_ptr
+PASS: gdb.base/ptr-typedef.exp: print foz_ptr
+Running ./gdb.base/ptype.exp ...
+PASS: gdb.base/ptype.exp: ptype unnamed enumeration member
+PASS: gdb.base/ptype.exp: ptype structure
+PASS: gdb.base/ptype.exp: ptype v_struct1.v_float_member
+PASS: gdb.base/ptype.exp: ptype v_struct1->v_float_member
+PASS: gdb.base/ptype.exp: ptype v_t_struct_p.v_float_member
+PASS: gdb.base/ptype.exp: ptype v_t_struct_p->v_float_member
+PASS: gdb.base/ptype.exp: ptype linked list structure
+PASS: gdb.base/ptype.exp: ptype union
+PASS: gdb.base/ptype.exp: ptype linked list union
+PASS: gdb.base/ptype.exp: ptype unnamed enumeration
+PASS: gdb.base/ptype.exp: ptype named enumeration
+PASS: gdb.base/ptype.exp: ptype unnamed typedef'd enumeration
+PASS: gdb.base/ptype.exp: list main
+PASS: gdb.base/ptype.exp: whatis unnamed typedef'd enum (compiler bug in IBM's xlc)
+PASS: gdb.base/ptype.exp: printing typedef'd struct
+PASS: gdb.base/ptype.exp: printing typedef'd union
+PASS: gdb.base/ptype.exp: ptype named typedef'd enumf'd enum
+PASS: gdb.base/ptype.exp: ptype misordered enumeration
+PASS: gdb.base/ptype.exp: ptype named enumeration member
+PASS: gdb.base/ptype.exp: ptype unnamed enumeration member #2
+PASS: gdb.base/ptype.exp: ptype short
+PASS: gdb.base/ptype.exp: ptype int
+PASS: gdb.base/ptype.exp: ptype t_char_array
+PASS: gdb.base/ptype.exp: ptype pv_char_array
+PASS: gdb.base/ptype.exp: ptype outer structure
+PASS: gdb.base/ptype.exp: ptype inner structure
+PASS: gdb.base/ptype.exp: ptype inner union
+PASS: gdb.base/ptype.exp: ptype nested structure
+PASS: gdb.base/ptype.exp: ptype outer int
+PASS: gdb.base/ptype.exp: ptype nested structure #2
+PASS: gdb.base/ptype.exp: ptype inner int
+PASS: gdb.base/ptype.exp: ptype nested union
+PASS: gdb.base/ptype.exp: ptype the_highest
+PASS: gdb.base/ptype.exp: ptype the_highest
+PASS: gdb.base/ptype.exp: ptype func_type
+PASS: gdb.base/ptype.exp: ptype old_fptr
+PASS: gdb.base/ptype.exp: ptype new_fptr
+PASS: gdb.base/ptype.exp: ptype fptr
+PASS: gdb.base/ptype.exp: ptype fptr2
+PASS: gdb.base/ptype.exp: ptype xptr
+PASS: gdb.base/ptype.exp: ptype ffptr
+PASS: gdb.base/ptype.exp: ptype fffptr
+PASS: gdb.base/ptype.exp: list intfoo
+PASS: gdb.base/ptype.exp: ptype foo typedef after first list of intfoo
+PASS: gdb.base/ptype.exp: list charfoo
+PASS: gdb.base/ptype.exp: ptype foo typedef after first list of charfoo
+PASS: gdb.base/ptype.exp: list intfoo
+PASS: gdb.base/ptype.exp: ptype foo typedef after second list of intfoo
+PASS: gdb.base/ptype.exp: list charfoo
+PASS: gdb.base/ptype.exp: ptype foo typedef after second list of charfoo
+PASS: gdb.base/ptype.exp: ptype "abc"
+PASS: gdb.base/ptype.exp: ptype {'a','b','c'}
+PASS: gdb.base/ptype.exp: ptype {0,1,2}
+PASS: gdb.base/ptype.exp: ptype {(long)0,(long)1,(long)2}
+PASS: gdb.base/ptype.exp: ptype {(float)0,(float)1,(float)2}
+PASS: gdb.base/ptype.exp: ptype {{0,1,2},{3,4,5}}
+PASS: gdb.base/ptype.exp: ptype {4,5,6}[2]
+PASS: gdb.base/ptype.exp: ptype *&{4,5,6}[1]
+PASS: gdb.base/ptype.exp: ptype $pc
+Running ./gdb.base/radix.exp ...
+PASS: gdb.base/radix.exp: initialize radix, input radix 2
+PASS: gdb.base/radix.exp: set input-radix 2
+PASS: gdb.base/radix.exp: show radix, input radix 2
+PASS: gdb.base/radix.exp: print 010; expect 8; input radix 2
+PASS: gdb.base/radix.exp: print 20.; expect 20; input radix 2
+PASS: gdb.base/radix.exp: print (int) 20.; expect 20; input radix 2
+PASS: gdb.base/radix.exp: print 0xf; expect 15; input radix 2
+PASS: gdb.base/radix.exp: print 0; expect 0; input radix 2
+PASS: gdb.base/radix.exp: print 1; expect 1; input radix 2
+PASS: gdb.base/radix.exp: print -1; expect -1; input radix 2
+PASS: gdb.base/radix.exp: print 10; expect 2; input radix 2
+PASS: gdb.base/radix.exp: print 11; expect 3; input radix 2
+PASS: gdb.base/radix.exp: print -10; expect -2; input radix 2
+PASS: gdb.base/radix.exp: print -11; expect -3; input radix 2
+PASS: gdb.base/radix.exp: print 100; expect 4; input radix 2
+PASS: gdb.base/radix.exp: print 101; expect 5; input radix 2
+PASS: gdb.base/radix.exp: print -100; expect -4; input radix 2
+PASS: gdb.base/radix.exp: print -101; expect -5; input radix 2
+PASS: gdb.base/radix.exp: print 10101; expect 21; input radix 2
+PASS: gdb.base/radix.exp: print 4; expect Invalid number "4"\.; input radix 2
+PASS: gdb.base/radix.exp: print -2; expect Invalid number "2"\.; input radix 2
+PASS: gdb.base/radix.exp: initialize radix, input radix 3
+PASS: gdb.base/radix.exp: set input-radix 3
+PASS: gdb.base/radix.exp: show radix, input radix 3
+PASS: gdb.base/radix.exp: print 010; expect 8; input radix 3
+PASS: gdb.base/radix.exp: print 20.; expect 20; input radix 3
+PASS: gdb.base/radix.exp: print (int) 20.; expect 20; input radix 3
+PASS: gdb.base/radix.exp: print 0xf; expect 15; input radix 3
+PASS: gdb.base/radix.exp: print 0; expect 0; input radix 3
+PASS: gdb.base/radix.exp: print 1; expect 1; input radix 3
+PASS: gdb.base/radix.exp: print -1; expect -1; input radix 3
+PASS: gdb.base/radix.exp: print 10; expect 3; input radix 3
+PASS: gdb.base/radix.exp: print 11; expect 4; input radix 3
+PASS: gdb.base/radix.exp: print -10; expect -3; input radix 3
+PASS: gdb.base/radix.exp: print -11; expect -4; input radix 3
+PASS: gdb.base/radix.exp: print 100; expect 9; input radix 3
+PASS: gdb.base/radix.exp: print 101; expect 10; input radix 3
+PASS: gdb.base/radix.exp: print -100; expect -9; input radix 3
+PASS: gdb.base/radix.exp: print -101; expect -10; input radix 3
+PASS: gdb.base/radix.exp: print 10101; expect 91; input radix 3
+PASS: gdb.base/radix.exp: print 2; expect 2; input radix 3
+PASS: gdb.base/radix.exp: print 20; expect 6; input radix 3
+PASS: gdb.base/radix.exp: print 3; expect Invalid number "3"\.; input radix 3
+PASS: gdb.base/radix.exp: print 30; expect Invalid number "30"\.; input radix 2
+PASS: gdb.base/radix.exp: initialize radix, input radix 8
+PASS: gdb.base/radix.exp: set input-radix 8
+PASS: gdb.base/radix.exp: show radix, input radix 8
+PASS: gdb.base/radix.exp: print 010; expect 8; input radix 8
+PASS: gdb.base/radix.exp: print 20.; expect 20; input radix 8
+PASS: gdb.base/radix.exp: print (int) 20.; expect 20; input radix 8
+PASS: gdb.base/radix.exp: print 0xf; expect 15; input radix 8
+PASS: gdb.base/radix.exp: print 0; expect 0; input radix 8
+PASS: gdb.base/radix.exp: print 1; expect 1; input radix 8
+PASS: gdb.base/radix.exp: print -1; expect -1; input radix 8
+PASS: gdb.base/radix.exp: print 10; expect 8; input radix 8
+PASS: gdb.base/radix.exp: print 11; expect 9; input radix 8
+PASS: gdb.base/radix.exp: print -10; expect -8; input radix 8
+PASS: gdb.base/radix.exp: print -11; expect -9; input radix 8
+PASS: gdb.base/radix.exp: print 100; expect 64; input radix 8
+PASS: gdb.base/radix.exp: print 101; expect 65; input radix 8
+PASS: gdb.base/radix.exp: print -100; expect -64; input radix 8
+PASS: gdb.base/radix.exp: print -101; expect -65; input radix 8
+PASS: gdb.base/radix.exp: print 10101; expect 4161; input radix 8
+PASS: gdb.base/radix.exp: print 20; expect 16; input radix 8
+PASS: gdb.base/radix.exp: print -20; expect -16; input radix 8
+PASS: gdb.base/radix.exp: print 8; expect Invalid number "8".; input radix 8
+PASS: gdb.base/radix.exp: print -9; expect Invalid number "9".; input radix 8
+PASS: gdb.base/radix.exp: initialize radix, input radix 10
+PASS: gdb.base/radix.exp: set input-radix 10
+PASS: gdb.base/radix.exp: show radix, input radix 10
+PASS: gdb.base/radix.exp: print 010; expect 8; input radix 10
+PASS: gdb.base/radix.exp: print 20.; expect 20; input radix 10
+PASS: gdb.base/radix.exp: print (int) 20.; expect 20; input radix 10
+PASS: gdb.base/radix.exp: print 0xf; expect 15; input radix 10
+PASS: gdb.base/radix.exp: print 0; expect 0; input radix 10
+PASS: gdb.base/radix.exp: print 1; expect 1; input radix 10
+PASS: gdb.base/radix.exp: print -1; expect -1; input radix 10
+PASS: gdb.base/radix.exp: print 10; expect 10; input radix 10
+PASS: gdb.base/radix.exp: print 11; expect 11; input radix 10
+PASS: gdb.base/radix.exp: print -10; expect -10; input radix 10
+PASS: gdb.base/radix.exp: print -11; expect -11; input radix 10
+PASS: gdb.base/radix.exp: print 100; expect 100; input radix 10
+PASS: gdb.base/radix.exp: print 101; expect 101; input radix 10
+PASS: gdb.base/radix.exp: print -100; expect -100; input radix 10
+PASS: gdb.base/radix.exp: print -101; expect -101; input radix 10
+PASS: gdb.base/radix.exp: print 10101; expect 10101; input radix 10
+PASS: gdb.base/radix.exp: print -12; expect -12; input radix 10
+PASS: gdb.base/radix.exp: initialize radix, input radix 16
+PASS: gdb.base/radix.exp: set input-radix 16
+PASS: gdb.base/radix.exp: show radix, input radix 16
+PASS: gdb.base/radix.exp: print 010; expect 8; input radix 16
+PASS: gdb.base/radix.exp: print 20.; expect 20; input radix 16
+PASS: gdb.base/radix.exp: print (int) 20.; expect 20; input radix 16
+PASS: gdb.base/radix.exp: print 0xf; expect 15; input radix 16
+PASS: gdb.base/radix.exp: print 0; expect 0; input radix 16
+PASS: gdb.base/radix.exp: print 1; expect 1; input radix 16
+PASS: gdb.base/radix.exp: print -1; expect -1; input radix 16
+PASS: gdb.base/radix.exp: print 10; expect 16; input radix 16
+PASS: gdb.base/radix.exp: print 11; expect 17; input radix 16
+PASS: gdb.base/radix.exp: print -10; expect -16; input radix 16
+PASS: gdb.base/radix.exp: print -11; expect -17; input radix 16
+PASS: gdb.base/radix.exp: print 100; expect 256; input radix 16
+PASS: gdb.base/radix.exp: print 101; expect 257; input radix 16
+PASS: gdb.base/radix.exp: print -100; expect -256; input radix 16
+PASS: gdb.base/radix.exp: print -101; expect -257; input radix 16
+PASS: gdb.base/radix.exp: print 10101; expect 65793; input radix 16
+PASS: gdb.base/radix.exp: initialize radix, output radix 8
+PASS: gdb.base/radix.exp: set output-radix 8
+PASS: gdb.base/radix.exp: show radix, output radix 8
+PASS: gdb.base/radix.exp: print 010; expect 010; output radix 8
+PASS: gdb.base/radix.exp: print 0xf; expect 17; output radix 8
+PASS: gdb.base/radix.exp: print 10; expect 12; output radix 8
+PASS: gdb.base/radix.exp: print 100; expect 144; output radix 8
+KFAIL: gdb.base/radix.exp: print 20.; expect 24; output radix 8 (PRMS: gdb/1715)
+PASS: gdb.base/radix.exp: print (int) 20.; expect 24; output radix 8
+PASS: gdb.base/radix.exp: initialize radix, output radix 10
+PASS: gdb.base/radix.exp: set output-radix 10
+PASS: gdb.base/radix.exp: show radix, output radix 10
+PASS: gdb.base/radix.exp: print 010; expect 8; output radix 10
+PASS: gdb.base/radix.exp: print 0xf; expect 15; output radix 10
+PASS: gdb.base/radix.exp: print 10; expect 10; output radix 10
+PASS: gdb.base/radix.exp: print 100; expect 100; output radix 10
+PASS: gdb.base/radix.exp: print 20.; expect 20; output radix 10
+PASS: gdb.base/radix.exp: print (int) 20.; expect 20; output radix 10
+PASS: gdb.base/radix.exp: initialize radix, output radix 16
+PASS: gdb.base/radix.exp: set output-radix 16
+PASS: gdb.base/radix.exp: show radix, output radix 16
+PASS: gdb.base/radix.exp: print 010; expect 8; output radix 16
+PASS: gdb.base/radix.exp: print 0xf; expect f; output radix 16
+PASS: gdb.base/radix.exp: print 10; expect a; output radix 16
+PASS: gdb.base/radix.exp: print 100; expect 64; output radix 16
+KFAIL: gdb.base/radix.exp: print 20.; expect 14; output radix 16 (PRMS: gdb/1715)
+PASS: gdb.base/radix.exp: print (int) 20.; expect 14; output radix 16
+PASS: gdb.base/radix.exp: Reset radices
+PASS: gdb.base/radix.exp: Reject input-radix 0
+PASS: gdb.base/radix.exp: Input radix unchanged after rejecting 0
+PASS: gdb.base/radix.exp: Reject input-radix 1
+PASS: gdb.base/radix.exp: Input radix unchanged after rejecting 1
+PASS: gdb.base/radix.exp: Reject output-radix 0
+PASS: gdb.base/radix.exp: Output radix unchanged after rejecting 0
+PASS: gdb.base/radix.exp: Reject output-radix 1
+PASS: gdb.base/radix.exp: Output radix unchanged after rejecting 1
+PASS: gdb.base/radix.exp: set radix 7 rejected
+PASS: gdb.base/radix.exp: Output radix unchanged after rejection through set radix command
+Running ./gdb.base/randomize.exp ...
+UNTESTED: gdb.base/randomize.exp: Disabling randomization is not supported on this Linux GDB
+Running ./gdb.base/random-signal.exp ...
+PASS: gdb.base/random-signal.exp: set can-use-hw-watchpoints 0
+PASS: gdb.base/random-signal.exp: watch v
+PASS: gdb.base/random-signal.exp: continue
+FAIL: gdb.base/random-signal.exp: stop with control-c
+Running ./gdb.base/readline-ask.exp ...
+PASS: gdb.base/readline-ask.exp: set width 50
+PASS: gdb.base/readline-ask.exp: set height 3
+PASS: gdb.base/readline-ask.exp: bell for more message
+FAIL: gdb.base/readline-ask.exp: more message for 01 and 02
+FAIL: gdb.base/readline-ask.exp: more message for 03
+FAIL: gdb.base/readline-ask.exp: more finish for 04
+ERROR: Undefined command "foo".
+UNRESOLVED: gdb.base/readline-ask.exp: abort more message
+PASS: gdb.base/readline-ask.exp: bell for ask message
+FAIL: gdb.base/readline-ask.exp: ask message
+Running ./gdb.base/readline.exp ...
+PASS: gdb.base/readline.exp: Simple operate-and-get-next - send p 1
+PASS: gdb.base/readline.exp: Simple operate-and-get-next - send p 2
+PASS: gdb.base/readline.exp: Simple operate-and-get-next - send p 3
+PASS: gdb.base/readline.exp: Simple operate-and-get-next - C-p to p 3
+PASS: gdb.base/readline.exp: Simple operate-and-get-next - C-p to p 2
+PASS: gdb.base/readline.exp: Simple operate-and-get-next - C-p to p 1
+PASS: gdb.base/readline.exp: Simple operate-and-get-next - C-o for p 1
+PASS: gdb.base/readline.exp: Simple operate-and-get-next - C-o for p 2
+PASS: gdb.base/readline.exp: Simple operate-and-get-next - C-o for p 3
+PASS: gdb.base/readline.exp: Simple operate-and-get-next - final prompt
+PASS: gdb.base/readline.exp: operate-and-get-next with secondary prompt - send if 1 > 0
+PASS: gdb.base/readline.exp: operate-and-get-next with secondary prompt - send p 5
+PASS: gdb.base/readline.exp: operate-and-get-next with secondary prompt - send end
+PASS: gdb.base/readline.exp: operate-and-get-next with secondary prompt - C-p to end
+PASS: gdb.base/readline.exp: operate-and-get-next with secondary prompt - C-p to p 5
+PASS: gdb.base/readline.exp: operate-and-get-next with secondary prompt - C-p to if 1 > 0
+PASS: gdb.base/readline.exp: operate-and-get-next with secondary prompt - C-o for if 1 > 0
+PASS: gdb.base/readline.exp: operate-and-get-next with secondary prompt - C-o for p 5
+PASS: gdb.base/readline.exp: operate-and-get-next with secondary prompt - C-o for end
+PASS: gdb.base/readline.exp: operate-and-get-next with secondary prompt - final prompt
+PASS: gdb.base/readline.exp: print 42
+PASS: gdb.base/readline.exp: arrow keys with secondary prompt
+PASS: gdb.base/readline.exp: Simple operate-and-get-next - send p 7
+PASS: gdb.base/readline.exp: Simple operate-and-get-next - send p 8
+PASS: gdb.base/readline.exp: Simple operate-and-get-next - send p 9
+PASS: gdb.base/readline.exp: Simple operate-and-get-next - C-p to p 9
+PASS: gdb.base/readline.exp: Simple operate-and-get-next - C-p to p 8
+PASS: gdb.base/readline.exp: Simple operate-and-get-next - C-p to p 7
+PASS: gdb.base/readline.exp: Simple operate-and-get-next - C-o for p 7
+PASS: gdb.base/readline.exp: Simple operate-and-get-next - C-o for p 8
+PASS: gdb.base/readline.exp: Simple operate-and-get-next - C-o for p 9
+PASS: gdb.base/readline.exp: Simple operate-and-get-next - final prompt
+Running ./gdb.base/realname-expand.exp ...
+PASS: gdb.base/realname-expand.exp: set basenames-may-differ on
+PASS: gdb.base/realname-expand.exp: rbreak realname-expand-real.c:func
+PASS: gdb.base/realname-expand.exp: set basenames-may-differ on
+PASS: gdb.base/realname-expand.exp: break realname-expand-real.c:func
+Running ./gdb.base/recpar.exp ...
+PASS: gdb.base/recpar.exp: break recpar.c:26 if n == 3
+PASS: gdb.base/recpar.exp: continue
+PASS: gdb.base/recpar.exp: backtrace
+PASS: gdb.base/recpar.exp: frame 2
+PASS: gdb.base/recpar.exp: print foo::val
+Running ./gdb.base/recurse.exp ...
+PASS: gdb.base/recurse.exp: next over b = 0 in first instance
+PASS: gdb.base/recurse.exp: set first instance watchpoint
+PASS: gdb.base/recurse.exp: continue to first instance watchpoint, first time
+PASS: gdb.base/recurse.exp: continue to recurse (a = 9)
+PASS: gdb.base/recurse.exp: continue to recurse (a = 8)
+PASS: gdb.base/recurse.exp: continue to recurse (a = 7)
+PASS: gdb.base/recurse.exp: continue to recurse (a = 6)
+PASS: gdb.base/recurse.exp: continue to recurse (a = 5)
+PASS: gdb.base/recurse.exp: next over b = 0 in second instance
+PASS: gdb.base/recurse.exp: set second instance watchpoint
+PASS: gdb.base/recurse.exp: continue to second instance watchpoint, first time
+PASS: gdb.base/recurse.exp: continue to recurse (a = 4)
+PASS: gdb.base/recurse.exp: continue to recurse (a = 3)
+PASS: gdb.base/recurse.exp: continue to recurse (a = 2)
+PASS: gdb.base/recurse.exp: continue to recurse (a = 1)
+PASS: gdb.base/recurse.exp: continue to second instance watchpoint, second time
+PASS: gdb.base/recurse.exp: second instance watchpoint deleted when leaving scope
+PASS: gdb.base/recurse.exp: continue to first instance watchpoint, second time
+PASS: gdb.base/recurse.exp: first instance watchpoint deleted when leaving scope
+Running ./gdb.base/relational.exp ...
+PASS: gdb.base/relational.exp: set variable x=14
+PASS: gdb.base/relational.exp: set variable y=2
+PASS: gdb.base/relational.exp: set variable z=2
+PASS: gdb.base/relational.exp: set variable w=3
+PASS: gdb.base/relational.exp: print value of x
+PASS: gdb.base/relational.exp: print value of y
+PASS: gdb.base/relational.exp: print value of z
+PASS: gdb.base/relational.exp: print value of w
+PASS: gdb.base/relational.exp: print value of x<y
+PASS: gdb.base/relational.exp: print value of x<=y
+PASS: gdb.base/relational.exp: print value of x>y
+PASS: gdb.base/relational.exp: print value of x>=y
+PASS: gdb.base/relational.exp: print value of x==y
+PASS: gdb.base/relational.exp: print value of x!=y
+PASS: gdb.base/relational.exp: set variable x
+PASS: gdb.base/relational.exp: set variable y
+PASS: gdb.base/relational.exp: set variable z
+PASS: gdb.base/relational.exp: print value of x<y<z
+PASS: gdb.base/relational.exp: print value of x<=y<=z
+PASS: gdb.base/relational.exp: print value of x>y>z
+PASS: gdb.base/relational.exp: print value of x>=y>=z
+PASS: gdb.base/relational.exp: set variable x
+PASS: gdb.base/relational.exp: set variable y
+PASS: gdb.base/relational.exp: set variable z
+PASS: gdb.base/relational.exp: print value of x==y==z
+PASS: gdb.base/relational.exp: set variable z
+PASS: gdb.base/relational.exp: print value of x!=y!=z
+PASS: gdb.base/relational.exp: set variable x
+PASS: gdb.base/relational.exp: set variable y
+PASS: gdb.base/relational.exp: set variable z
+PASS: gdb.base/relational.exp: print value of x<y==z
+PASS: gdb.base/relational.exp: print value of x<y!=z
+PASS: gdb.base/relational.exp: set variable x
+PASS: gdb.base/relational.exp: set variable y
+PASS: gdb.base/relational.exp: set variable z
+PASS: gdb.base/relational.exp: print value of x<y<=z
+PASS: gdb.base/relational.exp: print value of x<y>=z
+PASS: gdb.base/relational.exp: set variable z
+PASS: gdb.base/relational.exp: print value of x<y>z
+PASS: gdb.base/relational.exp: set variable x
+PASS: gdb.base/relational.exp: print value of x>y>=z
+PASS: gdb.base/relational.exp: set variable z
+PASS: gdb.base/relational.exp: print value of x>y==z
+PASS: gdb.base/relational.exp: set variable x
+PASS: gdb.base/relational.exp: set variable z
+PASS: gdb.base/relational.exp: print value of x>y!=z
+PASS: gdb.base/relational.exp: set x to 4
+PASS: gdb.base/relational.exp: print value of x>y<=z
+PASS: gdb.base/relational.exp: print value of x>=y==z
+PASS: gdb.base/relational.exp: set variable x
+PASS: gdb.base/relational.exp: print value of x>=y!=z
+PASS: gdb.base/relational.exp: set variable x
+PASS: gdb.base/relational.exp: set variable z
+PASS: gdb.base/relational.exp: print value of x>=y<=z
+PASS: gdb.base/relational.exp: print value of x<=y==z
+PASS: gdb.base/relational.exp: set variable x
+PASS: gdb.base/relational.exp: print value of x<=y!=z
+PASS: gdb.base/relational.exp: print value of x==y!=z
+PASS: gdb.base/relational.exp: set variable z
+PASS: gdb.base/relational.exp: print value of x>=(y<z)
+PASS: gdb.base/relational.exp: print value of x>=(y!=z)
+PASS: gdb.base/relational.exp: print value of x==(y==z)
+PASS: gdb.base/relational.exp: set variable x
+PASS: gdb.base/relational.exp: set variable z
+PASS: gdb.base/relational.exp: print value of (x==y)<z
+Running ./gdb.base/relativedebug.exp ...
+PASS: gdb.base/relativedebug.exp: continue
+PASS: gdb.base/relativedebug.exp: pause found in backtrace
+Running ./gdb.base/relocate.exp ...
+PASS: gdb.base/relocate.exp: add-symbol-file relocate.o 0
+PASS: gdb.base/relocate.exp: get address of static_foo
+PASS: gdb.base/relocate.exp: get address of static_bar
+PASS: gdb.base/relocate.exp: static variables have different addresses
+PASS: gdb.base/relocate.exp: get address of global_foo
+PASS: gdb.base/relocate.exp: get address of global_bar
+PASS: gdb.base/relocate.exp: global variables have different addresses
+PASS: gdb.base/relocate.exp: get address of function_foo
+PASS: gdb.base/relocate.exp: get address of function_bar
+PASS: gdb.base/relocate.exp: functions have different addresses
+PASS: gdb.base/relocate.exp: set $offset = 0x10000
+PASS: gdb.base/relocate.exp: add-symbol-file relocate.o $offset
+PASS: gdb.base/relocate.exp: get address of function_foo
+PASS: gdb.base/relocate.exp: function foo has a different address
+PASS: gdb.base/relocate.exp: print static_foo
+PASS: gdb.base/relocate.exp: print static_bar
+PASS: gdb.base/relocate.exp: print global_foo
+PASS: gdb.base/relocate.exp: print global_bar
+Running ./gdb.base/remote.exp ...
+PASS: gdb.base/remote.exp: write-packet default
+PASS: gdb.base/remote.exp: set write-packet - NULL
+PASS: gdb.base/remote.exp: set remote memory-write-packet-size 20
+PASS: gdb.base/remote.exp: set write-packet - small
+PASS: gdb.base/remote.exp: set remote memory-write-packet-size 1
+PASS: gdb.base/remote.exp: set write-packet - very-small
+PASS: gdb.base/remote.exp: timed download `remote' - limit, 398 - set packet size
+PASS: gdb.base/remote.exp: timed download `remote' - limit, 398
+PASS: gdb.base/remote.exp: timed download `remote' - limit, 400 - set packet size
+PASS: gdb.base/remote.exp: timed download `remote' - limit, 400
+PASS: gdb.base/remote.exp: timed download `remote' - fixed, 0 - set packet size
+PASS: gdb.base/remote.exp: timed download `remote' - fixed, 0 - set write size class
+PASS: gdb.base/remote.exp: timed download `remote' - fixed, 16385 - set packet size
+PASS: gdb.base/remote.exp: timed download `remote' - limit, 0 - set packet size
+PASS: gdb.base/remote.exp: timed download `remote' - limit, 0
+PASS: gdb.base/remote.exp: get integer valueof "sizeof (random_data)" (49152)
+PASS: gdb.base/remote.exp: x/8ub random_data
+PASS: gdb.base/remote.exp: x/8ub random_data + 400 - 4
+PASS: gdb.base/remote.exp: x/8ub random_data + 16384 - 4
+PASS: gdb.base/remote.exp: set remote memory-read-packet-size 16
+PASS: gdb.base/remote.exp: show remote memory-read-packet-size
+PASS: gdb.base/remote.exp: x/17ub random_data
+PASS: gdb.base/remote.exp: set remote hardware-watchpoint-limit -1
+PASS: gdb.base/remote.exp: set remote hardware-breakpoint-limit -1
+PASS: gdb.base/remote.exp: set remote hardware-watchpoint-limit 2147483647
+PASS: gdb.base/remote.exp: set remote hardware-breakpoint-limit 2147483647
+Running ./gdb.base/remotetimeout.exp ...
+Running ./gdb.base/reread.exp ...
+PASS: gdb.base/reread.exp: breakpoint foo in first file
+PASS: gdb.base/reread.exp: run to foo()
+UNSUPPORTED: gdb.base/reread.exp: run to foo() second time
+UNSUPPORTED: gdb.base/reread.exp: second pass: GDB should check for changes before running
+Running ./gdb.base/restore.exp ...
+PASS: gdb.base/restore.exp: tbreak caller1
+PASS: gdb.base/restore.exp: run to caller1
+PASS: gdb.base/restore.exp: caller1 calls callee1; tbreak callee
+PASS: gdb.base/restore.exp: caller1 calls callee1; continue to callee
+PASS: gdb.base/restore.exp: caller1 calls callee1; return callee now
+PASS: gdb.base/restore.exp: caller1 calls callee1; return restored l1 to 32492
+PASS: gdb.base/restore.exp: caller1 calls callee2; tbreak callee
+PASS: gdb.base/restore.exp: caller1 calls callee2; continue to callee
+PASS: gdb.base/restore.exp: caller1 calls callee2; return callee now
+PASS: gdb.base/restore.exp: caller1 calls callee2; return restored l1 to 32492
+PASS: gdb.base/restore.exp: caller1 calls callee3; tbreak callee
+PASS: gdb.base/restore.exp: caller1 calls callee3; continue to callee
+PASS: gdb.base/restore.exp: caller1 calls callee3; return callee now
+PASS: gdb.base/restore.exp: caller1 calls callee3; return restored l1 to 32492
+PASS: gdb.base/restore.exp: caller1 calls callee4; tbreak callee
+PASS: gdb.base/restore.exp: caller1 calls callee4; continue to callee
+PASS: gdb.base/restore.exp: caller1 calls callee4; return callee now
+PASS: gdb.base/restore.exp: caller1 calls callee4; return restored l1 to 32492
+PASS: gdb.base/restore.exp: caller1 calls callee5; tbreak callee
+PASS: gdb.base/restore.exp: caller1 calls callee5; continue to callee
+PASS: gdb.base/restore.exp: caller1 calls callee5; return callee now
+PASS: gdb.base/restore.exp: caller1 calls callee5; return restored l1 to 32492
+PASS: gdb.base/restore.exp: tbreak caller2
+PASS: gdb.base/restore.exp: run to caller2
+PASS: gdb.base/restore.exp: caller2 calls callee1; tbreak callee
+PASS: gdb.base/restore.exp: caller2 calls callee1; continue to callee
+PASS: gdb.base/restore.exp: caller2 calls callee1; return callee now
+PASS: gdb.base/restore.exp: caller2 calls callee1; return restored l1 to 32492
+PASS: gdb.base/restore.exp: caller2 calls callee1; return restored l2 to 32493
+PASS: gdb.base/restore.exp: caller2 calls callee2; tbreak callee
+PASS: gdb.base/restore.exp: caller2 calls callee2; continue to callee
+PASS: gdb.base/restore.exp: caller2 calls callee2; return callee now
+PASS: gdb.base/restore.exp: caller2 calls callee2; return restored l1 to 32492
+PASS: gdb.base/restore.exp: caller2 calls callee2; return restored l2 to 32493
+PASS: gdb.base/restore.exp: caller2 calls callee3; tbreak callee
+PASS: gdb.base/restore.exp: caller2 calls callee3; continue to callee
+PASS: gdb.base/restore.exp: caller2 calls callee3; return callee now
+PASS: gdb.base/restore.exp: caller2 calls callee3; return restored l1 to 32492
+PASS: gdb.base/restore.exp: caller2 calls callee3; return restored l2 to 32493
+PASS: gdb.base/restore.exp: caller2 calls callee4; tbreak callee
+PASS: gdb.base/restore.exp: caller2 calls callee4; continue to callee
+PASS: gdb.base/restore.exp: caller2 calls callee4; return callee now
+PASS: gdb.base/restore.exp: caller2 calls callee4; return restored l1 to 32492
+PASS: gdb.base/restore.exp: caller2 calls callee4; return restored l2 to 32493
+PASS: gdb.base/restore.exp: caller2 calls callee5; tbreak callee
+PASS: gdb.base/restore.exp: caller2 calls callee5; continue to callee
+PASS: gdb.base/restore.exp: caller2 calls callee5; return callee now
+PASS: gdb.base/restore.exp: caller2 calls callee5; return restored l1 to 32492
+PASS: gdb.base/restore.exp: caller2 calls callee5; return restored l2 to 32493
+PASS: gdb.base/restore.exp: tbreak caller3
+PASS: gdb.base/restore.exp: run to caller3
+PASS: gdb.base/restore.exp: caller3 calls callee1; tbreak callee
+PASS: gdb.base/restore.exp: caller3 calls callee1; continue to callee
+PASS: gdb.base/restore.exp: caller3 calls callee1; return callee now
+PASS: gdb.base/restore.exp: caller3 calls callee1; return restored l1 to 32492
+PASS: gdb.base/restore.exp: caller3 calls callee1; return restored l2 to 32493
+PASS: gdb.base/restore.exp: caller3 calls callee1; return restored l3 to 32494
+PASS: gdb.base/restore.exp: caller3 calls callee2; tbreak callee
+PASS: gdb.base/restore.exp: caller3 calls callee2; continue to callee
+PASS: gdb.base/restore.exp: caller3 calls callee2; return callee now
+PASS: gdb.base/restore.exp: caller3 calls callee2; return restored l1 to 32492
+PASS: gdb.base/restore.exp: caller3 calls callee2; return restored l2 to 32493
+PASS: gdb.base/restore.exp: caller3 calls callee2; return restored l3 to 32494
+PASS: gdb.base/restore.exp: caller3 calls callee3; tbreak callee
+PASS: gdb.base/restore.exp: caller3 calls callee3; continue to callee
+PASS: gdb.base/restore.exp: caller3 calls callee3; return callee now
+PASS: gdb.base/restore.exp: caller3 calls callee3; return restored l1 to 32492
+PASS: gdb.base/restore.exp: caller3 calls callee3; return restored l2 to 32493
+PASS: gdb.base/restore.exp: caller3 calls callee3; return restored l3 to 32494
+PASS: gdb.base/restore.exp: caller3 calls callee4; tbreak callee
+PASS: gdb.base/restore.exp: caller3 calls callee4; continue to callee
+PASS: gdb.base/restore.exp: caller3 calls callee4; return callee now
+PASS: gdb.base/restore.exp: caller3 calls callee4; return restored l1 to 32492
+PASS: gdb.base/restore.exp: caller3 calls callee4; return restored l2 to 32493
+PASS: gdb.base/restore.exp: caller3 calls callee4; return restored l3 to 32494
+PASS: gdb.base/restore.exp: caller3 calls callee5; tbreak callee
+PASS: gdb.base/restore.exp: caller3 calls callee5; continue to callee
+PASS: gdb.base/restore.exp: caller3 calls callee5; return callee now
+PASS: gdb.base/restore.exp: caller3 calls callee5; return restored l1 to 32492
+PASS: gdb.base/restore.exp: caller3 calls callee5; return restored l2 to 32493
+PASS: gdb.base/restore.exp: caller3 calls callee5; return restored l3 to 32494
+PASS: gdb.base/restore.exp: tbreak caller4
+PASS: gdb.base/restore.exp: run to caller4
+PASS: gdb.base/restore.exp: caller4 calls callee1; tbreak callee
+PASS: gdb.base/restore.exp: caller4 calls callee1; continue to callee
+PASS: gdb.base/restore.exp: caller4 calls callee1; return callee now
+PASS: gdb.base/restore.exp: caller4 calls callee1; return restored l1 to 32492
+PASS: gdb.base/restore.exp: caller4 calls callee1; return restored l2 to 32493
+PASS: gdb.base/restore.exp: caller4 calls callee1; return restored l3 to 32494
+PASS: gdb.base/restore.exp: caller4 calls callee1; return restored l4 to 32495
+PASS: gdb.base/restore.exp: caller4 calls callee2; tbreak callee
+PASS: gdb.base/restore.exp: caller4 calls callee2; continue to callee
+PASS: gdb.base/restore.exp: caller4 calls callee2; return callee now
+PASS: gdb.base/restore.exp: caller4 calls callee2; return restored l1 to 32492
+PASS: gdb.base/restore.exp: caller4 calls callee2; return restored l2 to 32493
+PASS: gdb.base/restore.exp: caller4 calls callee2; return restored l3 to 32494
+PASS: gdb.base/restore.exp: caller4 calls callee2; return restored l4 to 32495
+PASS: gdb.base/restore.exp: caller4 calls callee3; tbreak callee
+PASS: gdb.base/restore.exp: caller4 calls callee3; continue to callee
+PASS: gdb.base/restore.exp: caller4 calls callee3; return callee now
+PASS: gdb.base/restore.exp: caller4 calls callee3; return restored l1 to 32492
+PASS: gdb.base/restore.exp: caller4 calls callee3; return restored l2 to 32493
+PASS: gdb.base/restore.exp: caller4 calls callee3; return restored l3 to 32494
+PASS: gdb.base/restore.exp: caller4 calls callee3; return restored l4 to 32495
+PASS: gdb.base/restore.exp: caller4 calls callee4; tbreak callee
+PASS: gdb.base/restore.exp: caller4 calls callee4; continue to callee
+PASS: gdb.base/restore.exp: caller4 calls callee4; return callee now
+PASS: gdb.base/restore.exp: caller4 calls callee4; return restored l1 to 32492
+PASS: gdb.base/restore.exp: caller4 calls callee4; return restored l2 to 32493
+PASS: gdb.base/restore.exp: caller4 calls callee4; return restored l3 to 32494
+PASS: gdb.base/restore.exp: caller4 calls callee4; return restored l4 to 32495
+PASS: gdb.base/restore.exp: caller4 calls callee5; tbreak callee
+PASS: gdb.base/restore.exp: caller4 calls callee5; continue to callee
+PASS: gdb.base/restore.exp: caller4 calls callee5; return callee now
+PASS: gdb.base/restore.exp: caller4 calls callee5; return restored l1 to 32492
+PASS: gdb.base/restore.exp: caller4 calls callee5; return restored l2 to 32493
+PASS: gdb.base/restore.exp: caller4 calls callee5; return restored l3 to 32494
+PASS: gdb.base/restore.exp: caller4 calls callee5; return restored l4 to 32495
+PASS: gdb.base/restore.exp: tbreak caller5
+PASS: gdb.base/restore.exp: run to caller5
+PASS: gdb.base/restore.exp: caller5 calls callee1; tbreak callee
+PASS: gdb.base/restore.exp: caller5 calls callee1; continue to callee
+PASS: gdb.base/restore.exp: caller5 calls callee1; return callee now
+FAIL: gdb.base/restore.exp: caller5 calls callee1; return restored l1 to 32492
+PASS: gdb.base/restore.exp: caller5 calls callee1; return restored l2 to 32493
+PASS: gdb.base/restore.exp: caller5 calls callee1; return restored l3 to 32494
+PASS: gdb.base/restore.exp: caller5 calls callee1; return restored l4 to 32495
+PASS: gdb.base/restore.exp: caller5 calls callee1; return restored l5 to 32496
+PASS: gdb.base/restore.exp: caller5 calls callee2; tbreak callee
+PASS: gdb.base/restore.exp: caller5 calls callee2; continue to callee
+PASS: gdb.base/restore.exp: caller5 calls callee2; return callee now
+FAIL: gdb.base/restore.exp: caller5 calls callee2; return restored l1 to 32492
+PASS: gdb.base/restore.exp: caller5 calls callee2; return restored l2 to 32493
+PASS: gdb.base/restore.exp: caller5 calls callee2; return restored l3 to 32494
+PASS: gdb.base/restore.exp: caller5 calls callee2; return restored l4 to 32495
+PASS: gdb.base/restore.exp: caller5 calls callee2; return restored l5 to 32496
+PASS: gdb.base/restore.exp: caller5 calls callee3; tbreak callee
+PASS: gdb.base/restore.exp: caller5 calls callee3; continue to callee
+PASS: gdb.base/restore.exp: caller5 calls callee3; return callee now
+FAIL: gdb.base/restore.exp: caller5 calls callee3; return restored l1 to 32492
+PASS: gdb.base/restore.exp: caller5 calls callee3; return restored l2 to 32493
+PASS: gdb.base/restore.exp: caller5 calls callee3; return restored l3 to 32494
+PASS: gdb.base/restore.exp: caller5 calls callee3; return restored l4 to 32495
+PASS: gdb.base/restore.exp: caller5 calls callee3; return restored l5 to 32496
+PASS: gdb.base/restore.exp: caller5 calls callee4; tbreak callee
+PASS: gdb.base/restore.exp: caller5 calls callee4; continue to callee
+PASS: gdb.base/restore.exp: caller5 calls callee4; return callee now
+FAIL: gdb.base/restore.exp: caller5 calls callee4; return restored l1 to 32492
+PASS: gdb.base/restore.exp: caller5 calls callee4; return restored l2 to 32493
+PASS: gdb.base/restore.exp: caller5 calls callee4; return restored l3 to 32494
+PASS: gdb.base/restore.exp: caller5 calls callee4; return restored l4 to 32495
+PASS: gdb.base/restore.exp: caller5 calls callee4; return restored l5 to 32496
+PASS: gdb.base/restore.exp: caller5 calls callee5; tbreak callee
+PASS: gdb.base/restore.exp: caller5 calls callee5; continue to callee
+PASS: gdb.base/restore.exp: caller5 calls callee5; return callee now
+FAIL: gdb.base/restore.exp: caller5 calls callee5; return restored l1 to 32492
+PASS: gdb.base/restore.exp: caller5 calls callee5; return restored l2 to 32493
+PASS: gdb.base/restore.exp: caller5 calls callee5; return restored l3 to 32494
+PASS: gdb.base/restore.exp: caller5 calls callee5; return restored l4 to 32495
+PASS: gdb.base/restore.exp: caller5 calls callee5; return restored l5 to 32496
+Running ./gdb.base/return2.exp ...
+PASS: gdb.base/return2.exp: set break on void_func
+PASS: gdb.base/return2.exp: continue to void_func
+PASS: gdb.base/return2.exp: return from void_func
+PASS: gdb.base/return2.exp: void function returned successfully
+PASS: gdb.base/return2.exp: set break on char_func
+PASS: gdb.base/return2.exp: continue to char_func
+PASS: gdb.base/return2.exp: return from char_func
+PASS: gdb.base/return2.exp: char value returned successfully
+PASS: gdb.base/return2.exp: validate result value not equal to program return value
+PASS: gdb.base/return2.exp: set break on short_func
+PASS: gdb.base/return2.exp: continue to short_func
+PASS: gdb.base/return2.exp: return from short_func
+PASS: gdb.base/return2.exp: short value returned successfully
+PASS: gdb.base/return2.exp: validate result value not equal to program return value
+PASS: gdb.base/return2.exp: set break on int_func
+PASS: gdb.base/return2.exp: continue to int_func
+PASS: gdb.base/return2.exp: return from int_func
+PASS: gdb.base/return2.exp: int value returned successfully
+PASS: gdb.base/return2.exp: validate result value not equal to program return value
+PASS: gdb.base/return2.exp: set break on long_func
+PASS: gdb.base/return2.exp: continue to long_func
+PASS: gdb.base/return2.exp: return from long_func
+PASS: gdb.base/return2.exp: long value returned successfully
+PASS: gdb.base/return2.exp: validate result value not equal to program return value
+PASS: gdb.base/return2.exp: set break on long_long_func
+PASS: gdb.base/return2.exp: continue to long_long_func
+PASS: gdb.base/return2.exp: return from long_long_func
+PASS: gdb.base/return2.exp: long_long value returned successfully
+PASS: gdb.base/return2.exp: validate result value not equal to program return value
+PASS: gdb.base/return2.exp: set break on float_func
+PASS: gdb.base/return2.exp: continue to float_func
+PASS: gdb.base/return2.exp: return from float_func
+PASS: gdb.base/return2.exp: float value returned successfully
+PASS: gdb.base/return2.exp: validate result value not equal to program return value
+PASS: gdb.base/return2.exp: set break on double_func
+PASS: gdb.base/return2.exp: continue to double_func
+PASS: gdb.base/return2.exp: return from double_func
+PASS: gdb.base/return2.exp: double value returned successfully
+PASS: gdb.base/return2.exp: validate result value not equal to program return value
+Running ./gdb.base/return.exp ...
+PASS: gdb.base/return.exp: simple return
+PASS: gdb.base/return.exp: break func2
+PASS: gdb.base/return.exp: break func3
+PASS: gdb.base/return.exp: continue to return of -5
+PASS: gdb.base/return.exp: next over call to func2
+PASS: gdb.base/return.exp: correct value returned (integer test)
+PASS: gdb.base/return.exp: continue to return of -5.0
+PASS: gdb.base/return.exp: next over call to func3
+PASS: gdb.base/return.exp: correct value returned double test (known problem with sparc solaris)
+Running ./gdb.base/return-nodebug.exp ...
+PASS: gdb.base/return-nodebug.exp: signed-char: return from function with no debug info without a cast
+PASS: gdb.base/return-nodebug.exp: signed-char: return from function with no debug info with a cast
+PASS: gdb.base/return-nodebug.exp: signed-char: advance to marker
+PASS: gdb.base/return-nodebug.exp: signed-char: full width of the returned result
+PASS: gdb.base/return-nodebug.exp: short: return from function with no debug info without a cast
+PASS: gdb.base/return-nodebug.exp: short: return from function with no debug info with a cast
+PASS: gdb.base/return-nodebug.exp: short: advance to marker
+PASS: gdb.base/return-nodebug.exp: short: full width of the returned result
+PASS: gdb.base/return-nodebug.exp: int: return from function with no debug info without a cast
+PASS: gdb.base/return-nodebug.exp: int: return from function with no debug info with a cast
+PASS: gdb.base/return-nodebug.exp: int: advance to marker
+PASS: gdb.base/return-nodebug.exp: int: full width of the returned result
+PASS: gdb.base/return-nodebug.exp: long: return from function with no debug info without a cast
+PASS: gdb.base/return-nodebug.exp: long: return from function with no debug info with a cast
+PASS: gdb.base/return-nodebug.exp: long: advance to marker
+PASS: gdb.base/return-nodebug.exp: long: full width of the returned result
+PASS: gdb.base/return-nodebug.exp: long-long: return from function with no debug info without a cast
+PASS: gdb.base/return-nodebug.exp: long-long: return from function with no debug info with a cast
+PASS: gdb.base/return-nodebug.exp: long-long: advance to marker
+PASS: gdb.base/return-nodebug.exp: long-long: full width of the returned result
+PASS: gdb.base/return-nodebug.exp: float: return from function with no debug info without a cast
+PASS: gdb.base/return-nodebug.exp: float: return from function with no debug info with a cast
+PASS: gdb.base/return-nodebug.exp: float: advance to marker
+PASS: gdb.base/return-nodebug.exp: float: full width of the returned result
+PASS: gdb.base/return-nodebug.exp: double: return from function with no debug info without a cast
+PASS: gdb.base/return-nodebug.exp: double: return from function with no debug info with a cast
+PASS: gdb.base/return-nodebug.exp: double: advance to marker
+PASS: gdb.base/return-nodebug.exp: double: full width of the returned result
+Running ./gdb.base/save-bp.exp ...
+PASS: gdb.base/save-bp.exp: add breakpoint commands
+PASS: gdb.base/save-bp.exp: dprintf save-bp.c:33,"At foo entry\n"
+PASS: gdb.base/save-bp.exp: save breakpoint bps
+PASS: gdb.base/save-bp.exp: source bps
+PASS: gdb.base/save-bp.exp: info break
+Running ./gdb.base/savedregs.exp ...
+PASS: gdb.base/savedregs.exp: advance thrower
+PASS: gdb.base/savedregs.exp: Get main info frame
+PASS: gdb.base/savedregs.exp: handle SIGSEGV pass print nostop
+PASS: gdb.base/savedregs.exp: handle SIGILL pass print nostop
+PASS: gdb.base/savedregs.exp: advance catcher
+PASS: gdb.base/savedregs.exp: Get sigtramp info frame
+PASS: gdb.base/savedregs.exp: Get thrower info frame
+PASS: gdb.base/savedregs.exp: Check main info frame; stack contains catcher sigtramp thrower main
+PASS: gdb.base/savedregs.exp: break caller
+PASS: gdb.base/savedregs.exp: call caller (1,2,3,4,5,6,7,8)
+PASS: gdb.base/savedregs.exp: Get dummy info frame
+PASS: gdb.base/savedregs.exp: Get catcher info frame
+PASS: gdb.base/savedregs.exp: Check sigtramp info frame; stack contains caller dummy catcher sigtramp thrower main
+PASS: gdb.base/savedregs.exp: Check thrower info frame; stack contains caller dummy catcher sigtramp thrower main
+PASS: gdb.base/savedregs.exp: Check main info frame; stack contains caller dummy catcher sigtramp thrower main
+PASS: gdb.base/savedregs.exp: advance callee
+PASS: gdb.base/savedregs.exp: Get caller info frame
+PASS: gdb.base/savedregs.exp: Check dummy info frame; stack contains callee caller dummy catcher sigtramp thrower main
+PASS: gdb.base/savedregs.exp: Check catcher info frame; stack contains callee caller dummy catcher sigtramp thrower main
+PASS: gdb.base/savedregs.exp: Check sigtramp info frame; stack contains callee caller dummy catcher sigtramp thrower main
+PASS: gdb.base/savedregs.exp: Check thrower info frame; stack contains callee caller dummy catcher sigtramp thrower main
+PASS: gdb.base/savedregs.exp: Check main info frame; stack contains callee caller dummy catcher sigtramp thrower main
+Running ./gdb.base/scope.exp ...
+PASS: gdb.base/scope.exp: print 'scope0.c'::filelocal_ro
+UNSUPPORTED: gdb.base/scope.exp: print 'scope0.c'::filelocal_bss before run
+PASS: gdb.base/scope.exp: print 'scope0.c'::filelocal before run
+PASS: gdb.base/scope.exp: next over init0() in main
+PASS: gdb.base/scope.exp: print filelocal
+PASS: gdb.base/scope.exp: print 'scope0.c'::filelocal at main
+PASS: gdb.base/scope.exp: print filelocal_bss
+PASS: gdb.base/scope.exp: print 'scope0.c'::filelocal_bss in test_at_main
+PASS: gdb.base/scope.exp: print filelocal_ro in test_at_main
+PASS: gdb.base/scope.exp: print 'scope0.c'::filelocal_ro
+PASS: gdb.base/scope.exp: print 'scope1.c'::filelocal
+PASS: gdb.base/scope.exp: print 'scope1.c'::filelocal_bss
+PASS: gdb.base/scope.exp: print 'scope1.c'::filelocal_ro
+PASS: gdb.base/scope.exp: print foo::funclocal
+PASS: gdb.base/scope.exp: print 'scope1.c'::foo::funclocal
+PASS: gdb.base/scope.exp: print foo::funclocal_ro
+PASS: gdb.base/scope.exp: print 'scope1.c'::foo::funclocal_ro
+PASS: gdb.base/scope.exp: print bar::funclocal
+PASS: gdb.base/scope.exp: print 'scope1.c'::bar::funclocal
+PASS: gdb.base/scope.exp: print 'scope0.c'::filelocal at foo
+PASS: gdb.base/scope.exp: print 'scope0.c'::filelocal_bss in test_at_foo
+PASS: gdb.base/scope.exp: print 'scope0.c'::filelocal_ro
+PASS: gdb.base/scope.exp: print filelocal at foo
+PASS: gdb.base/scope.exp: print 'scope1.c'::filelocal at foo
+PASS: gdb.base/scope.exp: print filelocal_bss at foo
+PASS: gdb.base/scope.exp: print 'scope1.c'::filelocal_bss at foo
+PASS: gdb.base/scope.exp: print filelocal_ro at foo
+PASS: gdb.base/scope.exp: print 'scope1.c'::filelocal_ro at foo
+PASS: gdb.base/scope.exp: print funclocal at foo
+PASS: gdb.base/scope.exp: print foo::funclocal at foo
+PASS: gdb.base/scope.exp: print 'scope1.c'::foo::funclocal at foo
+PASS: gdb.base/scope.exp: print funclocal_bss at foo
+PASS: gdb.base/scope.exp: print foo::funclocal_bss at foo
+PASS: gdb.base/scope.exp: print 'scope1.c'::foo::funclocal_bss at foo
+PASS: gdb.base/scope.exp: print funclocal_ro at foo
+PASS: gdb.base/scope.exp: print foo::funclocal_ro at foo
+PASS: gdb.base/scope.exp: print 'scope1.c'::foo::funclocal_ro at foo
+PASS: gdb.base/scope.exp: print bar::funclocal at foo
+PASS: gdb.base/scope.exp: print 'scope1.c'::bar::funclocal at foo
+PASS: gdb.base/scope.exp: print 'scope0.c'::filelocal at bar
+PASS: gdb.base/scope.exp: print 'scope0.c'::filelocal_bss in test_at_bar
+PASS: gdb.base/scope.exp: print 'scope0.c'::filelocal_ro at bar
+PASS: gdb.base/scope.exp: print filelocal at bar
+PASS: gdb.base/scope.exp: print 'scope1.c'::filelocal at bar
+PASS: gdb.base/scope.exp: print filelocal_bss at bar
+PASS: gdb.base/scope.exp: print 'scope1.c'::filelocal_bss at bar
+PASS: gdb.base/scope.exp: print filelocal_ro in test_at_bar
+PASS: gdb.base/scope.exp: print 'scope1.c'::filelocal_ro at bar
+PASS: gdb.base/scope.exp: print foo::funclocal at bar
+PASS: gdb.base/scope.exp: print 'scope1.c'::foo::funclocal at bar
+PASS: gdb.base/scope.exp: print foo::funclocal_bss at bar
+PASS: gdb.base/scope.exp: print 'scope1.c'::foo::funclocal_bss at bar
+PASS: gdb.base/scope.exp: print foo::funclocal_ro at bar
+PASS: gdb.base/scope.exp: print 'scope1.c'::foo::funclocal_ro at bar
+PASS: gdb.base/scope.exp: print funclocal at bar
+PASS: gdb.base/scope.exp: print bar::funclocal at bar
+PASS: gdb.base/scope.exp: print 'scope1.c'::bar::funclocal at bar
+PASS: gdb.base/scope.exp: print funclocal_bss at bar
+PASS: gdb.base/scope.exp: print bar::funclocal_bss at bar
+PASS: gdb.base/scope.exp: print 'scope1.c'::bar::funclocal_bss at bar
+PASS: gdb.base/scope.exp: continue to marker2
+PASS: gdb.base/scope.exp: up from marker2 in scopes.exp
+PASS: gdb.base/scope.exp: print localval, outer scope
+PASS: gdb.base/scope.exp: print localval1, outer scope
+PASS: gdb.base/scope.exp: print localval2, outer scope
+PASS: gdb.base/scope.exp: print localval3, outer scope
+PASS: gdb.base/scope.exp: continue to marker3 in scope.exp
+PASS: gdb.base/scope.exp: up from marker3 in scope.exp
+PASS: gdb.base/scope.exp: print localval, first nested scope
+PASS: gdb.base/scope.exp: print localval1, first nested scope
+PASS: gdb.base/scope.exp: print localval2, first nested scope
+PASS: gdb.base/scope.exp: print localval3, first nested scope
+PASS: gdb.base/scope.exp: continue to marker4 in scope.exp
+PASS: gdb.base/scope.exp: up from marker4 in scope.exp
+PASS: gdb.base/scope.exp: print localval, innermost scope
+PASS: gdb.base/scope.exp: print localval1, innermost scope
+PASS: gdb.base/scope.exp: print localval2, innermost scope
+PASS: gdb.base/scope.exp: print localval3, innermost scope
+PASS: gdb.base/scope.exp: continue to marker1
+PASS: gdb.base/scope.exp: up from marker1 in scope.exp
+PASS: gdb.base/scope.exp: 100 auto variables correctly initialized
+PASS: gdb.base/scope.exp: args in correct order
+Running ./gdb.base/sect-cmd.exp ...
+Running ./gdb.base/sepdebug.exp ...
+PASS: gdb.base/sepdebug.exp: breakpoint function
+PASS: gdb.base/sepdebug.exp: breakpoint quoted function
+PASS: gdb.base/sepdebug.exp: breakpoint function in file
+PASS: gdb.base/sepdebug.exp: use `list' to establish default source file
+PASS: gdb.base/sepdebug.exp: breakpoint line number
+PASS: gdb.base/sepdebug.exp: breakpoint duplicate
+PASS: gdb.base/sepdebug.exp: breakpoint line number in file
+PASS: gdb.base/sepdebug.exp: breakpoint at start of multi line if conditional
+PASS: gdb.base/sepdebug.exp: breakpoint at start of multi line while conditional
+PASS: gdb.base/sepdebug.exp: breakpoint info
+PASS: gdb.base/sepdebug.exp: run until function breakpoint
+PASS: gdb.base/sepdebug.exp: run until breakpoint set at a line number
+PASS: gdb.base/sepdebug.exp: run until file:function(6) breakpoint
+PASS: gdb.base/sepdebug.exp: run until file:function(5) breakpoint
+PASS: gdb.base/sepdebug.exp: run until file:function(4) breakpoint
+PASS: gdb.base/sepdebug.exp: run until file:function(3) breakpoint
+PASS: gdb.base/sepdebug.exp: run until file:function(2) breakpoint
+PASS: gdb.base/sepdebug.exp: run until file:function(1) breakpoint
+PASS: gdb.base/sepdebug.exp: run until quoted breakpoint
+PASS: gdb.base/sepdebug.exp: run until file:linenum breakpoint
+PASS: gdb.base/sepdebug.exp: breakpoint offset +1
+PASS: gdb.base/sepdebug.exp: step onto breakpoint
+PASS: gdb.base/sepdebug.exp: Temporary breakpoint function
+PASS: gdb.base/sepdebug.exp: Temporary breakpoint function in file
+PASS: gdb.base/sepdebug.exp: Temporary breakpoint line number #1
+PASS: gdb.base/sepdebug.exp: Temporary breakpoint line number #2
+PASS: gdb.base/sepdebug.exp: Temporary breakpoint line number in file #1
+PASS: gdb.base/sepdebug.exp: Temporary breakpoint line number in file #2
+PASS: gdb.base/sepdebug.exp: Temporary breakpoint info
+PASS: gdb.base/sepdebug.exp: catch requires an event name
+PASS: gdb.base/sepdebug.exp: set catch fork, never expected to trigger
+PASS: gdb.base/sepdebug.exp: set catch vfork, never expected to trigger
+PASS: gdb.base/sepdebug.exp: set catch exec, never expected to trigger
+PASS: gdb.base/sepdebug.exp: set breakpoint pending off
+PASS: gdb.base/sepdebug.exp: break on non-existent source line
+PASS: gdb.base/sepdebug.exp: until bp_location1
+PASS: gdb.base/sepdebug.exp: break on default location, 1st time
+PASS: gdb.base/sepdebug.exp: break on default location, 2nd time
+PASS: gdb.base/sepdebug.exp: break on default location, 3rd time
+PASS: gdb.base/sepdebug.exp: break on default location, 4th time
+PASS: gdb.base/sepdebug.exp: set to-be-silent break bp_location1
+PASS: gdb.base/sepdebug.exp: set silent break bp_location1
+PASS: gdb.base/sepdebug.exp: info silent break bp_location1
+PASS: gdb.base/sepdebug.exp: hit silent break bp_location1
+PASS: gdb.base/sepdebug.exp: stopped for silent break bp_location1
+PASS: gdb.base/sepdebug.exp: thread-specific breakpoint on non-existent thread disallowed
+PASS: gdb.base/sepdebug.exp: thread-specific breakpoint on bogus thread ID disallowed
+PASS: gdb.base/sepdebug.exp: breakpoint with trailing garbage disallowed
+PASS: gdb.base/sepdebug.exp: step over breakpoint
+PASS: gdb.base/sepdebug.exp: clear line has no breakpoint disallowed
+PASS: gdb.base/sepdebug.exp: clear current line has no breakpoint disallowed
+PASS: gdb.base/sepdebug.exp: break marker3 #1
+PASS: gdb.base/sepdebug.exp: break marker3 #2
+PASS: gdb.base/sepdebug.exp: clear marker3
+PASS: gdb.base/sepdebug.exp: set convenience variable $foo to bp_location11
+PASS: gdb.base/sepdebug.exp: set breakpoint via convenience variable
+PASS: gdb.base/sepdebug.exp: set convenience variable $foo to 81.5
+PASS: gdb.base/sepdebug.exp: set breakpoint via non-integer convenience variable disallowed
+PASS: gdb.base/sepdebug.exp: set breakpoint on to-be-called function
+PASS: gdb.base/sepdebug.exp: hit breakpoint on called function
+PASS: gdb.base/sepdebug.exp: backtrace while in called function
+PASS: gdb.base/sepdebug.exp: finish from called function
+PASS: gdb.base/sepdebug.exp: finish with arguments disallowed
+PASS: gdb.base/sepdebug.exp: finish from outermost frame disallowed
+PASS: gdb.base/sepdebug.exp: kill program
+PASS: gdb.base/sepdebug.exp: break at factorial
+PASS: gdb.base/sepdebug.exp: continue to factorial(5)
+PASS: gdb.base/sepdebug.exp: backtrace from factorial(5)
+PASS: gdb.base/sepdebug.exp: next to recursive call
+PASS: gdb.base/sepdebug.exp: next over recursive call
+PASS: gdb.base/sepdebug.exp: backtrace from factorial(5.1)
+PASS: gdb.base/sepdebug.exp: continue until exit at recursive next test
+PASS: gdb.base/sepdebug.exp: debuglink: set separate debug location
+PASS: gdb.base/sepdebug.exp: debuglink: breakpoint function, optimized file
+PASS: gdb.base/sepdebug.exp: debuglink: breakpoint small function, optimized file
+PASS: gdb.base/sepdebug.exp: debuglink: run until function breakpoint, optimized file
+PASS: gdb.base/sepdebug.exp: debuglink: run until breakpoint set at small function, optimized file
+PASS: gdb.base/sepdebug.exp: CRC mismatch is reported
+PASS: gdb.base/sepdebug.exp: build-id support by binutils
+PASS: gdb.base/sepdebug.exp: build-id: set separate debug location
+PASS: gdb.base/sepdebug.exp: build-id: breakpoint function, optimized file
+PASS: gdb.base/sepdebug.exp: build-id: breakpoint small function, optimized file
+PASS: gdb.base/sepdebug.exp: build-id: run until function breakpoint, optimized file
+PASS: gdb.base/sepdebug.exp: build-id: run until breakpoint set at small function, optimized file
+PASS: gdb.base/sepdebug.exp: multiple-dirs: set separate debug location
+PASS: gdb.base/sepdebug.exp: multiple-dirs: breakpoint function, optimized file
+PASS: gdb.base/sepdebug.exp: multiple-dirs: breakpoint small function, optimized file
+PASS: gdb.base/sepdebug.exp: multiple-dirs: run until function breakpoint, optimized file
+PASS: gdb.base/sepdebug.exp: multiple-dirs: run until breakpoint set at small function, optimized file
+Running ./gdb.base/sep.exp ...
+PASS: gdb.base/sep.exp: list using location inside included file
+PASS: gdb.base/sep.exp: breakpoint inside included file
+Running ./gdb.base/sepsymtab.exp ...
+PASS: gdb.base/sepsymtab.exp: info sym main
+Running ./gdb.base/set-lang-auto.exp ...
+PASS: gdb.base/set-lang-auto.exp: show lang after loading binary
+PASS: gdb.base/set-lang-auto.exp: forcing the language to ada
+PASS: gdb.base/set-lang-auto.exp: show lang after switching language to ada
+PASS: gdb.base/set-lang-auto.exp: switching the language back to auto
+PASS: gdb.base/set-lang-auto.exp: show lang after having switched back to auto
+Running ./gdb.base/set-noassign.exp ...
+PASS: gdb.base/set-noassign.exp: set language ada
+PASS: gdb.base/set-noassign.exp: warning for set without assignment
+Running ./gdb.base/setshow.exp ...
+PASS: gdb.base/setshow.exp: default annotation_level is zero
+PASS: gdb.base/setshow.exp: set annotate 2
+PASS: gdb.base/setshow.exp: show annotate 2
+PASS: gdb.base/setshow.exp: annotation_level 2
+PASS: gdb.base/setshow.exp: set annotate 1
+PASS: gdb.base/setshow.exp: show annotate (1)
+PASS: gdb.base/setshow.exp: annotation_level 1
+PASS: gdb.base/setshow.exp: set annotate 0
+PASS: gdb.base/setshow.exp: show annotate (0)
+PASS: gdb.base/setshow.exp: annotation_level 0
+PASS: gdb.base/setshow.exp: set args ~
+PASS: gdb.base/setshow.exp: show args ~
+PASS: gdb.base/setshow.exp: set args
+PASS: gdb.base/setshow.exp: show args
+PASS: gdb.base/setshow.exp: set check range on
+PASS: gdb.base/setshow.exp: show check range (on)
+PASS: gdb.base/setshow.exp: set check range off
+PASS: gdb.base/setshow.exp: show check range (off)
+PASS: gdb.base/setshow.exp: set check range auto
+PASS: gdb.base/setshow.exp: show check range (auto)
+PASS: gdb.base/setshow.exp: set check type on
+PASS: gdb.base/setshow.exp: show check type (on)
+PASS: gdb.base/setshow.exp: set check type off
+PASS: gdb.base/setshow.exp: show check type (off)
+PASS: gdb.base/setshow.exp: set complaints 100
+PASS: gdb.base/setshow.exp: show complaints (100)
+PASS: gdb.base/setshow.exp: set complaints 0
+PASS: gdb.base/setshow.exp: show complaints (0)
+PASS: gdb.base/setshow.exp: set confirm off
+PASS: gdb.base/setshow.exp: show confirm (off)
+PASS: gdb.base/setshow.exp: set confirm on
+PASS: gdb.base/setshow.exp: show confirm (on)
+PASS: gdb.base/setshow.exp: set editing off
+PASS: gdb.base/setshow.exp: show editing (off)
+PASS: gdb.base/setshow.exp: set environment FOOBARBAZ
+PASS: gdb.base/setshow.exp: show environment FOOBARBAZ
+PASS: gdb.base/setshow.exp: set height 100
+PASS: gdb.base/setshow.exp: show height
+PASS: gdb.base/setshow.exp: set history expansion on
+PASS: gdb.base/setshow.exp: show history expansion
+PASS: gdb.base/setshow.exp: set history filename foobar.baz
+PASS: gdb.base/setshow.exp: show history filename (foobar.baz)
+PASS: gdb.base/setshow.exp: set history save on
+PASS: gdb.base/setshow.exp: show history save (on)
+PASS: gdb.base/setshow.exp: set history size 100
+PASS: gdb.base/setshow.exp: show history size (100)
+PASS: gdb.base/setshow.exp: set language asm
+PASS: gdb.base/setshow.exp: show language (asm)
+PASS: gdb.base/setshow.exp: set language java
+PASS: gdb.base/setshow.exp: show language (java)
+PASS: gdb.base/setshow.exp: complete set language minimal
+PASS: gdb.base/setshow.exp: set language auto
+PASS: gdb.base/setshow.exp: show language (auto)
+PASS: gdb.base/setshow.exp: set listsize 100
+PASS: gdb.base/setshow.exp: show listsize (100)
+PASS: gdb.base/setshow.exp: set prompt FooBarBaz
+PASS: gdb.base/setshow.exp: show prompt FooBarBaz
+PASS: gdb.base/setshow.exp: set prompt gdb
+PASS: gdb.base/setshow.exp: set radix 11
+PASS: gdb.base/setshow.exp: set radix 16
+PASS: gdb.base/setshow.exp: show radix (16)
+PASS: gdb.base/setshow.exp: set radix 10
+PASS: gdb.base/setshow.exp: show radix (10)
+PASS: gdb.base/setshow.exp: set width 90
+PASS: gdb.base/setshow.exp: show width (90)
+PASS: gdb.base/setshow.exp: set write on
+PASS: gdb.base/setshow.exp: show write (on)
+PASS: gdb.base/setshow.exp: show user
+PASS: gdb.base/setshow.exp: set verbose on
+PASS: gdb.base/setshow.exp: show verbose (on)
+PASS: gdb.base/setshow.exp: set verbose off
+PASS: gdb.base/setshow.exp: show verbose (off)
+Running ./gdb.base/setvar.exp ...
+PASS: gdb.base/setvar.exp: set print sevenbit-strings
+PASS: gdb.base/setvar.exp: set variable char=0
+PASS: gdb.base/setvar.exp: set variable char=1
+PASS: gdb.base/setvar.exp: set variable char=7 (Bel)
+PASS: gdb.base/setvar.exp: set variable char=32 (SPC)
+PASS: gdb.base/setvar.exp: set variable char=65 ('A')
+PASS: gdb.base/setvar.exp: set variable char=97 ('a')
+PASS: gdb.base/setvar.exp: set variable char=126 ('~')
+PASS: gdb.base/setvar.exp: set variable char=127 (8-bit)
+PASS: gdb.base/setvar.exp: set variable signed char=0
+PASS: gdb.base/setvar.exp: set variable signed char=1
+PASS: gdb.base/setvar.exp: set variable signed char=7 (Bel)
+PASS: gdb.base/setvar.exp: set variable signed char=32 (SPC)
+PASS: gdb.base/setvar.exp: set variable signed char=65 ('A')
+PASS: gdb.base/setvar.exp: set variable signed char=97 ('a')
+PASS: gdb.base/setvar.exp: set variable signed char=126 ('~')
+PASS: gdb.base/setvar.exp: set variable signed char=127 (8-bit)
+PASS: gdb.base/setvar.exp: set variable v_signed_char=-1
+PASS: gdb.base/setvar.exp: set variable signed char=-1 (-1)
+PASS: gdb.base/setvar.exp: set variable v_signed_char=0xFF
+PASS: gdb.base/setvar.exp: set variable signed char=0xFF (0xFF)
+PASS: gdb.base/setvar.exp: set variable unsigned char=0
+PASS: gdb.base/setvar.exp: set variable unsigned char=1
+PASS: gdb.base/setvar.exp: set variable unsigned char=7 (Bel)
+PASS: gdb.base/setvar.exp: set variable unsigned char=32 (SPC)
+PASS: gdb.base/setvar.exp: set variable unsigned char=65 ('A')
+PASS: gdb.base/setvar.exp: set variable unsigned char=97 ('a')
+PASS: gdb.base/setvar.exp: set variable unsigned char=126 ('~')
+PASS: gdb.base/setvar.exp: set variable unsigned char=255 (8-bit)
+PASS: gdb.base/setvar.exp: set variable short=0
+PASS: gdb.base/setvar.exp: set variable short=1
+PASS: gdb.base/setvar.exp: set variable short=-1 (minus)
+PASS: gdb.base/setvar.exp: set variable signed short=0
+PASS: gdb.base/setvar.exp: set variable signed short=1
+PASS: gdb.base/setvar.exp: set variable signed short=-1 (minus)
+PASS: gdb.base/setvar.exp: set variable unsigned short=0
+PASS: gdb.base/setvar.exp: set variable unsigned short=1
+PASS: gdb.base/setvar.exp: set variable unsigned short=~0 (minus)
+PASS: gdb.base/setvar.exp: set variable int=0
+PASS: gdb.base/setvar.exp: set variable int=1
+PASS: gdb.base/setvar.exp: set variable int=-1 (minus)
+PASS: gdb.base/setvar.exp: set variable signed int=0
+PASS: gdb.base/setvar.exp: set variable signed int=1
+PASS: gdb.base/setvar.exp: set variable signed int=-1 (minus)
+PASS: gdb.base/setvar.exp: set variable unsigned int=0
+PASS: gdb.base/setvar.exp: set variable unsigned int=1
+PASS: gdb.base/setvar.exp: set variable unsigned int=~0 (minus)
+PASS: gdb.base/setvar.exp: set variable long=0
+PASS: gdb.base/setvar.exp: set variable long=1
+PASS: gdb.base/setvar.exp: set variable long=-1 (minus)
+PASS: gdb.base/setvar.exp: set variable signed long=0
+PASS: gdb.base/setvar.exp: set variable signed long=1
+PASS: gdb.base/setvar.exp: set variable signed long=-1 (minus)
+PASS: gdb.base/setvar.exp: set variable unsigned long=0
+PASS: gdb.base/setvar.exp: set variable unsigned long=1
+PASS: gdb.base/setvar.exp: set variable unsigned long=~0 (minus)
+PASS: gdb.base/setvar.exp: set variable float=0
+PASS: gdb.base/setvar.exp: set variable float=1
+PASS: gdb.base/setvar.exp: set variable float=-1 (minus)
+PASS: gdb.base/setvar.exp: set variable double=0
+PASS: gdb.base/setvar.exp: set variable double=1
+PASS: gdb.base/setvar.exp: set variable double=-1 (minus)
+PASS: gdb.base/setvar.exp: set variable char array="hi" (string)
+PASS: gdb.base/setvar.exp: set variable signed char array="hi" (string)
+PASS: gdb.base/setvar.exp: set variable unsigned char array="hi" (string)
+PASS: gdb.base/setvar.exp: set variable short array
+PASS: gdb.base/setvar.exp: set variable signed short array
+PASS: gdb.base/setvar.exp: set variable unsigned short array
+PASS: gdb.base/setvar.exp: set variable int array
+PASS: gdb.base/setvar.exp: set variable signed int array
+PASS: gdb.base/setvar.exp: set variable unsigned int array
+PASS: gdb.base/setvar.exp: set variable long array
+PASS: gdb.base/setvar.exp: set variable signed long array
+PASS: gdb.base/setvar.exp: set variable unsigned long array
+PASS: gdb.base/setvar.exp: set variable float array
+PASS: gdb.base/setvar.exp: set variable double array
+PASS: gdb.base/setvar.exp: set variable char pointer="hi" (string)
+PASS: gdb.base/setvar.exp: set variable char pointer="hi" (string) (#2)
+PASS: gdb.base/setvar.exp: set variable signed char pointer="hi" (string)
+PASS: gdb.base/setvar.exp: set variable signed char pointer="hi" (string) (#2)
+PASS: gdb.base/setvar.exp: set variable unsigned char pointer="hi" (string)
+PASS: gdb.base/setvar.exp: set variable unsigned char pointer="hi" (string) (#2)
+PASS: gdb.base/setvar.exp: set variable short pointer
+PASS: gdb.base/setvar.exp: set variable short pointer (#2)
+PASS: gdb.base/setvar.exp: set v_signed_short_pointer=v_signed_short_array
+PASS: gdb.base/setvar.exp: set variable *(v_signed_short_pointer)=123
+PASS: gdb.base/setvar.exp: set variable *(v_signed_short_pointer+1)=-456
+PASS: gdb.base/setvar.exp: set variable signed short pointer
+PASS: gdb.base/setvar.exp: print *(v_signed_short_pointer+1)
+PASS: gdb.base/setvar.exp: set v_unsigned_short_pointer=v_unsigned_short_array
+PASS: gdb.base/setvar.exp: set variable *(v_unsigned_short_pointer)=123
+PASS: gdb.base/setvar.exp: set variable *(v_unsigned_short_pointer+1)=-456
+PASS: gdb.base/setvar.exp: set variable unsigned short pointer
+PASS: gdb.base/setvar.exp: print *(v_unsigned_short_pointer+1)
+PASS: gdb.base/setvar.exp: set variable int pointer
+PASS: gdb.base/setvar.exp: set variable int pointer (#2)
+PASS: gdb.base/setvar.exp: set variable signed int pointer
+PASS: gdb.base/setvar.exp: set variable signed int pointer (#2)
+PASS: gdb.base/setvar.exp: set variable unsigned int pointer
+PASS: gdb.base/setvar.exp: print variable unsigned int pointer+1
+PASS: gdb.base/setvar.exp: set variable long pointer
+PASS: gdb.base/setvar.exp: set variable long pointer (#2)
+PASS: gdb.base/setvar.exp: set variable signed long pointer
+PASS: gdb.base/setvar.exp: set variable signed long pointer (#2)
+PASS: gdb.base/setvar.exp: set variable unsigned long pointer
+PASS: gdb.base/setvar.exp: set variable unsigned long pointer (#2)
+PASS: gdb.base/setvar.exp: set variable float pointer
+PASS: gdb.base/setvar.exp: set variable float pointer (#2)
+PASS: gdb.base/setvar.exp: set variable double pointer
+PASS: gdb.base/setvar.exp: set variable double pointer (#2)
+PASS: gdb.base/setvar.exp: set variable structure char member
+PASS: gdb.base/setvar.exp: set variable structure short member
+PASS: gdb.base/setvar.exp: set variable structure int member
+PASS: gdb.base/setvar.exp: set variable structure long member
+PASS: gdb.base/setvar.exp: set variable structure float member
+PASS: gdb.base/setvar.exp: set variable structure double member
+PASS: gdb.base/setvar.exp: set print structure #1
+PASS: gdb.base/setvar.exp: set print structure #2
+PASS: gdb.base/setvar.exp: set print structure #3
+PASS: gdb.base/setvar.exp: set print structure #4
+PASS: gdb.base/setvar.exp: print sef.field=sm1
+PASS: gdb.base/setvar.exp: print sef.field (sm1)
+PASS: gdb.base/setvar.exp: print sef.field=s1
+PASS: gdb.base/setvar.exp: print sef.field (s1)
+PASS: gdb.base/setvar.exp: print uef.field=u2
+PASS: gdb.base/setvar.exp: print uef.field (u2)
+PASS: gdb.base/setvar.exp: print uef.field=u1
+PASS: gdb.base/setvar.exp: print uef.field (u1)
+PASS: gdb.base/setvar.exp: print sef.field=7
+PASS: gdb.base/setvar.exp: print uef.field=6
+Running ./gdb.base/shell.exp ...
+PASS: gdb.base/shell.exp: shell echo foo
+PASS: gdb.base/shell.exp: ! echo foo
+PASS: gdb.base/shell.exp: !echo foo
+Running ./gdb.base/shlib-call.exp ...
+PASS: gdb.base/shlib-call.exp: set print sevenbit-strings
+PASS: gdb.base/shlib-call.exp: set print address off
+PASS: gdb.base/shlib-call.exp: set width 0
+PASS: gdb.base/shlib-call.exp: next to shr1
+PASS: gdb.base/shlib-call.exp: print g
+PASS: gdb.base/shlib-call.exp: print g
+PASS: gdb.base/shlib-call.exp: breakpoint function shr2
+PASS: gdb.base/shlib-call.exp: run until breakpoint set at a function
+PASS: gdb.base/shlib-call.exp: print mainshr1(1) from shlib func
+PASS: gdb.base/shlib-call.exp: step out of shr2 to main (stopped in shr2 epilogue)
+PASS: gdb.base/shlib-call.exp: step out of shr2 epilogue to main
+PASS: gdb.base/shlib-call.exp: print mainshr1(1)
+PASS: gdb.base/shlib-call.exp: step into mainshr1
+PASS: gdb.base/shlib-call.exp: set print sevenbit-strings
+PASS: gdb.base/shlib-call.exp: set print address off
+PASS: gdb.base/shlib-call.exp: set width 0
+Running ./gdb.base/shreloc.exp ...
+PASS: gdb.base/shreloc.exp: get address of fn_1
+PASS: gdb.base/shreloc.exp: get address of fn_2
+PASS: gdb.base/shreloc.exp: relocated extern functions have different addresses
+PASS: gdb.base/shreloc.exp: get address of extern_var_1
+PASS: gdb.base/shreloc.exp: get address of extern_var_2
+PASS: gdb.base/shreloc.exp: relocated extern variables have different addresses
+PASS: gdb.base/shreloc.exp: get address of static_var_1
+PASS: gdb.base/shreloc.exp: get address of static_var_2
+PASS: gdb.base/shreloc.exp: relocated static variables have different addresses
+PASS: gdb.base/shreloc.exp: get_msym_addrs static_var_[12]
+PASS: gdb.base/shreloc.exp: (msymbol) relocated static vars have different addresses
+PASS: gdb.base/shreloc.exp: get_msym_addrs extern_var_[12]
+PASS: gdb.base/shreloc.exp: (msymbol) relocated extern vars have different addresses
+PASS: gdb.base/shreloc.exp: get_msym_addrs fn_[12]
+PASS: gdb.base/shreloc.exp: (msymbol) relocated functions have different addresses
+Running ./gdb.base/sigall.exp ...
+PASS: gdb.base/sigall.exp: handle SIGABRT stop print
+PASS: gdb.base/sigall.exp: b handle_ABRT
+PASS: gdb.base/sigall.exp: b gen_HUP
+PASS: gdb.base/sigall.exp: get signal ABRT
+PASS: gdb.base/sigall.exp: send signal ABRT
+PASS: gdb.base/sigall.exp: advance to HUP
+PASS: gdb.base/sigall.exp: handle SIGHUP stop print
+PASS: gdb.base/sigall.exp: b handle_HUP
+PASS: gdb.base/sigall.exp: b gen_QUIT
+PASS: gdb.base/sigall.exp: get signal HUP
+PASS: gdb.base/sigall.exp: send signal HUP
+PASS: gdb.base/sigall.exp: advance to QUIT
+PASS: gdb.base/sigall.exp: handle SIGQUIT stop print
+PASS: gdb.base/sigall.exp: b handle_QUIT
+PASS: gdb.base/sigall.exp: b gen_ILL
+PASS: gdb.base/sigall.exp: get signal QUIT
+PASS: gdb.base/sigall.exp: send signal QUIT
+PASS: gdb.base/sigall.exp: advance to ILL
+PASS: gdb.base/sigall.exp: handle SIGILL stop print
+PASS: gdb.base/sigall.exp: b handle_ILL
+PASS: gdb.base/sigall.exp: b gen_EMT
+PASS: gdb.base/sigall.exp: get signal ILL
+PASS: gdb.base/sigall.exp: send signal ILL
+PASS: gdb.base/sigall.exp: advance to EMT
+PASS: gdb.base/sigall.exp: handle SIGEMT stop print
+PASS: gdb.base/sigall.exp: b handle_EMT
+PASS: gdb.base/sigall.exp: b gen_FPE
+PASS: gdb.base/sigall.exp: send signal EMT
+PASS: gdb.base/sigall.exp: advance to FPE
+PASS: gdb.base/sigall.exp: handle SIGFPE stop print
+PASS: gdb.base/sigall.exp: b handle_FPE
+PASS: gdb.base/sigall.exp: b gen_BUS
+PASS: gdb.base/sigall.exp: get signal FPE
+PASS: gdb.base/sigall.exp: send signal FPE
+PASS: gdb.base/sigall.exp: advance to BUS
+PASS: gdb.base/sigall.exp: handle SIGBUS stop print
+PASS: gdb.base/sigall.exp: b handle_BUS
+PASS: gdb.base/sigall.exp: b gen_SEGV
+PASS: gdb.base/sigall.exp: get signal BUS
+PASS: gdb.base/sigall.exp: send signal BUS
+PASS: gdb.base/sigall.exp: advance to SEGV
+PASS: gdb.base/sigall.exp: handle SIGSEGV stop print
+PASS: gdb.base/sigall.exp: b handle_SEGV
+PASS: gdb.base/sigall.exp: b gen_SYS
+PASS: gdb.base/sigall.exp: get signal SEGV
+PASS: gdb.base/sigall.exp: send signal SEGV
+PASS: gdb.base/sigall.exp: advance to SYS
+PASS: gdb.base/sigall.exp: handle SIGSYS stop print
+PASS: gdb.base/sigall.exp: b handle_SYS
+PASS: gdb.base/sigall.exp: b gen_PIPE
+PASS: gdb.base/sigall.exp: get signal SYS
+PASS: gdb.base/sigall.exp: send signal SYS
+PASS: gdb.base/sigall.exp: advance to PIPE
+PASS: gdb.base/sigall.exp: handle SIGPIPE stop print
+PASS: gdb.base/sigall.exp: b handle_PIPE
+PASS: gdb.base/sigall.exp: b gen_ALRM
+PASS: gdb.base/sigall.exp: get signal PIPE
+PASS: gdb.base/sigall.exp: send signal PIPE
+PASS: gdb.base/sigall.exp: advance to ALRM
+PASS: gdb.base/sigall.exp: handle SIGALRM stop print
+PASS: gdb.base/sigall.exp: b handle_ALRM
+PASS: gdb.base/sigall.exp: b gen_URG
+PASS: gdb.base/sigall.exp: get signal ALRM
+PASS: gdb.base/sigall.exp: send signal ALRM
+PASS: gdb.base/sigall.exp: advance to URG
+PASS: gdb.base/sigall.exp: handle SIGURG stop print
+PASS: gdb.base/sigall.exp: b handle_URG
+PASS: gdb.base/sigall.exp: b gen_TSTP
+PASS: gdb.base/sigall.exp: get signal URG
+PASS: gdb.base/sigall.exp: send signal URG
+PASS: gdb.base/sigall.exp: advance to TSTP
+PASS: gdb.base/sigall.exp: handle SIGTSTP stop print
+PASS: gdb.base/sigall.exp: b handle_TSTP
+PASS: gdb.base/sigall.exp: b gen_CONT
+PASS: gdb.base/sigall.exp: get signal TSTP
+PASS: gdb.base/sigall.exp: send signal TSTP
+PASS: gdb.base/sigall.exp: advance to CONT
+PASS: gdb.base/sigall.exp: handle SIGCONT stop print
+PASS: gdb.base/sigall.exp: b handle_CONT
+PASS: gdb.base/sigall.exp: b gen_CHLD
+PASS: gdb.base/sigall.exp: get signal CONT
+PASS: gdb.base/sigall.exp: send signal CONT
+PASS: gdb.base/sigall.exp: advance to CHLD
+PASS: gdb.base/sigall.exp: handle SIGCHLD stop print
+PASS: gdb.base/sigall.exp: b handle_CHLD
+PASS: gdb.base/sigall.exp: b gen_TTIN
+PASS: gdb.base/sigall.exp: get signal CHLD
+PASS: gdb.base/sigall.exp: send signal CHLD
+PASS: gdb.base/sigall.exp: advance to TTIN
+PASS: gdb.base/sigall.exp: handle SIGTTIN stop print
+PASS: gdb.base/sigall.exp: b handle_TTIN
+PASS: gdb.base/sigall.exp: b gen_TTOU
+PASS: gdb.base/sigall.exp: get signal TTIN
+PASS: gdb.base/sigall.exp: send signal TTIN
+PASS: gdb.base/sigall.exp: advance to TTOU
+PASS: gdb.base/sigall.exp: handle SIGTTOU stop print
+PASS: gdb.base/sigall.exp: b handle_TTOU
+PASS: gdb.base/sigall.exp: b gen_IO
+PASS: gdb.base/sigall.exp: get signal TTOU
+PASS: gdb.base/sigall.exp: send signal TTOU
+PASS: gdb.base/sigall.exp: advance to IO
+PASS: gdb.base/sigall.exp: handle SIGIO stop print
+PASS: gdb.base/sigall.exp: b handle_IO
+PASS: gdb.base/sigall.exp: b gen_XCPU
+PASS: gdb.base/sigall.exp: get signal IO
+PASS: gdb.base/sigall.exp: send signal IO
+PASS: gdb.base/sigall.exp: advance to XCPU
+PASS: gdb.base/sigall.exp: handle SIGXCPU stop print
+PASS: gdb.base/sigall.exp: b handle_XCPU
+PASS: gdb.base/sigall.exp: b gen_XFSZ
+PASS: gdb.base/sigall.exp: get signal XCPU
+PASS: gdb.base/sigall.exp: send signal XCPU
+PASS: gdb.base/sigall.exp: advance to XFSZ
+PASS: gdb.base/sigall.exp: handle SIGXFSZ stop print
+PASS: gdb.base/sigall.exp: b handle_XFSZ
+PASS: gdb.base/sigall.exp: b gen_VTALRM
+PASS: gdb.base/sigall.exp: get signal XFSZ
+PASS: gdb.base/sigall.exp: send signal XFSZ
+PASS: gdb.base/sigall.exp: advance to VTALRM
+PASS: gdb.base/sigall.exp: handle SIGVTALRM stop print
+PASS: gdb.base/sigall.exp: b handle_VTALRM
+PASS: gdb.base/sigall.exp: b gen_PROF
+PASS: gdb.base/sigall.exp: get signal VTALRM
+PASS: gdb.base/sigall.exp: send signal VTALRM
+PASS: gdb.base/sigall.exp: advance to PROF
+PASS: gdb.base/sigall.exp: handle SIGPROF stop print
+PASS: gdb.base/sigall.exp: b handle_PROF
+PASS: gdb.base/sigall.exp: b gen_WINCH
+PASS: gdb.base/sigall.exp: get signal PROF
+PASS: gdb.base/sigall.exp: send signal PROF
+PASS: gdb.base/sigall.exp: advance to WINCH
+PASS: gdb.base/sigall.exp: handle SIGWINCH stop print
+PASS: gdb.base/sigall.exp: b handle_WINCH
+PASS: gdb.base/sigall.exp: b gen_LOST
+PASS: gdb.base/sigall.exp: get signal WINCH
+PASS: gdb.base/sigall.exp: send signal WINCH
+PASS: gdb.base/sigall.exp: advance to LOST
+PASS: gdb.base/sigall.exp: handle SIGLOST stop print
+PASS: gdb.base/sigall.exp: b handle_LOST
+PASS: gdb.base/sigall.exp: b gen_USR1
+PASS: gdb.base/sigall.exp: send signal LOST
+PASS: gdb.base/sigall.exp: advance to USR1
+PASS: gdb.base/sigall.exp: handle SIGUSR1 stop print
+PASS: gdb.base/sigall.exp: b handle_USR1
+PASS: gdb.base/sigall.exp: b gen_USR2
+PASS: gdb.base/sigall.exp: get signal USR1
+PASS: gdb.base/sigall.exp: send signal USR1
+PASS: gdb.base/sigall.exp: advance to USR2
+PASS: gdb.base/sigall.exp: handle SIGUSR2 stop print
+PASS: gdb.base/sigall.exp: b handle_USR2
+PASS: gdb.base/sigall.exp: b gen_PWR
+PASS: gdb.base/sigall.exp: get signal USR2
+PASS: gdb.base/sigall.exp: send signal USR2
+PASS: gdb.base/sigall.exp: advance to PWR
+PASS: gdb.base/sigall.exp: handle SIGPWR stop print
+PASS: gdb.base/sigall.exp: b handle_PWR
+PASS: gdb.base/sigall.exp: b gen_POLL
+PASS: gdb.base/sigall.exp: get signal PWR
+PASS: gdb.base/sigall.exp: send signal PWR
+PASS: gdb.base/sigall.exp: advance to POLL
+PASS: gdb.base/sigall.exp: handle SIGPOLL stop print
+PASS: gdb.base/sigall.exp: b handle_POLL
+PASS: gdb.base/sigall.exp: b gen_WIND
+PASS: gdb.base/sigall.exp: send signal POLL
+PASS: gdb.base/sigall.exp: advance to WIND
+PASS: gdb.base/sigall.exp: handle SIGWIND stop print
+PASS: gdb.base/sigall.exp: b handle_WIND
+PASS: gdb.base/sigall.exp: b gen_PHONE
+PASS: gdb.base/sigall.exp: send signal WIND
+PASS: gdb.base/sigall.exp: advance to PHONE
+PASS: gdb.base/sigall.exp: handle SIGPHONE stop print
+PASS: gdb.base/sigall.exp: b handle_PHONE
+PASS: gdb.base/sigall.exp: b gen_WAITING
+PASS: gdb.base/sigall.exp: send signal PHONE
+PASS: gdb.base/sigall.exp: advance to WAITING
+PASS: gdb.base/sigall.exp: handle SIGWAITING stop print
+PASS: gdb.base/sigall.exp: b handle_WAITING
+PASS: gdb.base/sigall.exp: b gen_LWP
+PASS: gdb.base/sigall.exp: send signal WAITING
+PASS: gdb.base/sigall.exp: advance to LWP
+PASS: gdb.base/sigall.exp: handle SIGLWP stop print
+PASS: gdb.base/sigall.exp: b handle_LWP
+PASS: gdb.base/sigall.exp: b gen_DANGER
+PASS: gdb.base/sigall.exp: send signal LWP
+PASS: gdb.base/sigall.exp: advance to DANGER
+PASS: gdb.base/sigall.exp: handle SIGDANGER stop print
+PASS: gdb.base/sigall.exp: b handle_DANGER
+PASS: gdb.base/sigall.exp: b gen_GRANT
+PASS: gdb.base/sigall.exp: send signal DANGER
+PASS: gdb.base/sigall.exp: advance to GRANT
+PASS: gdb.base/sigall.exp: handle SIGGRANT stop print
+PASS: gdb.base/sigall.exp: b handle_GRANT
+PASS: gdb.base/sigall.exp: b gen_RETRACT
+PASS: gdb.base/sigall.exp: send signal GRANT
+PASS: gdb.base/sigall.exp: advance to RETRACT
+PASS: gdb.base/sigall.exp: handle SIGRETRACT stop print
+PASS: gdb.base/sigall.exp: b handle_RETRACT
+PASS: gdb.base/sigall.exp: b gen_MSG
+PASS: gdb.base/sigall.exp: send signal RETRACT
+PASS: gdb.base/sigall.exp: advance to MSG
+PASS: gdb.base/sigall.exp: handle SIGMSG stop print
+PASS: gdb.base/sigall.exp: b handle_MSG
+PASS: gdb.base/sigall.exp: b gen_SOUND
+PASS: gdb.base/sigall.exp: send signal MSG
+PASS: gdb.base/sigall.exp: advance to SOUND
+PASS: gdb.base/sigall.exp: handle SIGSOUND stop print
+PASS: gdb.base/sigall.exp: b handle_SOUND
+PASS: gdb.base/sigall.exp: b gen_SAK
+PASS: gdb.base/sigall.exp: send signal SOUND
+PASS: gdb.base/sigall.exp: advance to SAK
+PASS: gdb.base/sigall.exp: handle SIGSAK stop print
+PASS: gdb.base/sigall.exp: b handle_SAK
+PASS: gdb.base/sigall.exp: b gen_PRIO
+PASS: gdb.base/sigall.exp: send signal SAK
+PASS: gdb.base/sigall.exp: advance to PRIO
+PASS: gdb.base/sigall.exp: handle SIGPRIO stop print
+PASS: gdb.base/sigall.exp: b handle_PRIO
+PASS: gdb.base/sigall.exp: b gen_33
+PASS: gdb.base/sigall.exp: send signal PRIO
+PASS: gdb.base/sigall.exp: advance to 33
+PASS: gdb.base/sigall.exp: handle SIG33 stop print
+PASS: gdb.base/sigall.exp: b handle_33
+PASS: gdb.base/sigall.exp: b gen_34
+PASS: gdb.base/sigall.exp: send signal 33
+PASS: gdb.base/sigall.exp: advance to 34
+PASS: gdb.base/sigall.exp: handle SIG34 stop print
+PASS: gdb.base/sigall.exp: b handle_34
+PASS: gdb.base/sigall.exp: b gen_35
+PASS: gdb.base/sigall.exp: send signal 34
+PASS: gdb.base/sigall.exp: advance to 35
+PASS: gdb.base/sigall.exp: handle SIG35 stop print
+PASS: gdb.base/sigall.exp: b handle_35
+PASS: gdb.base/sigall.exp: b gen_36
+PASS: gdb.base/sigall.exp: send signal 35
+PASS: gdb.base/sigall.exp: advance to 36
+PASS: gdb.base/sigall.exp: handle SIG36 stop print
+PASS: gdb.base/sigall.exp: b handle_36
+PASS: gdb.base/sigall.exp: b gen_37
+PASS: gdb.base/sigall.exp: send signal 36
+PASS: gdb.base/sigall.exp: advance to 37
+PASS: gdb.base/sigall.exp: handle SIG37 stop print
+PASS: gdb.base/sigall.exp: b handle_37
+PASS: gdb.base/sigall.exp: b gen_38
+PASS: gdb.base/sigall.exp: send signal 37
+PASS: gdb.base/sigall.exp: advance to 38
+PASS: gdb.base/sigall.exp: handle SIG38 stop print
+PASS: gdb.base/sigall.exp: b handle_38
+PASS: gdb.base/sigall.exp: b gen_39
+PASS: gdb.base/sigall.exp: send signal 38
+PASS: gdb.base/sigall.exp: advance to 39
+PASS: gdb.base/sigall.exp: handle SIG39 stop print
+PASS: gdb.base/sigall.exp: b handle_39
+PASS: gdb.base/sigall.exp: b gen_40
+PASS: gdb.base/sigall.exp: send signal 39
+PASS: gdb.base/sigall.exp: advance to 40
+PASS: gdb.base/sigall.exp: handle SIG40 stop print
+PASS: gdb.base/sigall.exp: b handle_40
+PASS: gdb.base/sigall.exp: b gen_41
+PASS: gdb.base/sigall.exp: send signal 40
+PASS: gdb.base/sigall.exp: advance to 41
+PASS: gdb.base/sigall.exp: handle SIG41 stop print
+PASS: gdb.base/sigall.exp: b handle_41
+PASS: gdb.base/sigall.exp: b gen_42
+PASS: gdb.base/sigall.exp: send signal 41
+PASS: gdb.base/sigall.exp: advance to 42
+PASS: gdb.base/sigall.exp: handle SIG42 stop print
+PASS: gdb.base/sigall.exp: b handle_42
+PASS: gdb.base/sigall.exp: b gen_43
+PASS: gdb.base/sigall.exp: send signal 42
+PASS: gdb.base/sigall.exp: advance to 43
+PASS: gdb.base/sigall.exp: handle SIG43 stop print
+PASS: gdb.base/sigall.exp: b handle_43
+PASS: gdb.base/sigall.exp: b gen_44
+PASS: gdb.base/sigall.exp: send signal 43
+PASS: gdb.base/sigall.exp: advance to 44
+PASS: gdb.base/sigall.exp: handle SIG44 stop print
+PASS: gdb.base/sigall.exp: b handle_44
+PASS: gdb.base/sigall.exp: b gen_45
+PASS: gdb.base/sigall.exp: send signal 44
+PASS: gdb.base/sigall.exp: advance to 45
+PASS: gdb.base/sigall.exp: handle SIG45 stop print
+PASS: gdb.base/sigall.exp: b handle_45
+PASS: gdb.base/sigall.exp: b gen_46
+PASS: gdb.base/sigall.exp: send signal 45
+PASS: gdb.base/sigall.exp: advance to 46
+PASS: gdb.base/sigall.exp: handle SIG46 stop print
+PASS: gdb.base/sigall.exp: b handle_46
+PASS: gdb.base/sigall.exp: b gen_47
+PASS: gdb.base/sigall.exp: send signal 46
+PASS: gdb.base/sigall.exp: advance to 47
+PASS: gdb.base/sigall.exp: handle SIG47 stop print
+PASS: gdb.base/sigall.exp: b handle_47
+PASS: gdb.base/sigall.exp: b gen_48
+PASS: gdb.base/sigall.exp: send signal 47
+PASS: gdb.base/sigall.exp: advance to 48
+PASS: gdb.base/sigall.exp: handle SIG48 stop print
+PASS: gdb.base/sigall.exp: b handle_48
+PASS: gdb.base/sigall.exp: b gen_49
+PASS: gdb.base/sigall.exp: send signal 48
+PASS: gdb.base/sigall.exp: advance to 49
+PASS: gdb.base/sigall.exp: handle SIG49 stop print
+PASS: gdb.base/sigall.exp: b handle_49
+PASS: gdb.base/sigall.exp: b gen_50
+PASS: gdb.base/sigall.exp: send signal 49
+PASS: gdb.base/sigall.exp: advance to 50
+PASS: gdb.base/sigall.exp: handle SIG50 stop print
+PASS: gdb.base/sigall.exp: b handle_50
+PASS: gdb.base/sigall.exp: b gen_51
+PASS: gdb.base/sigall.exp: send signal 50
+PASS: gdb.base/sigall.exp: advance to 51
+PASS: gdb.base/sigall.exp: handle SIG51 stop print
+PASS: gdb.base/sigall.exp: b handle_51
+PASS: gdb.base/sigall.exp: b gen_52
+PASS: gdb.base/sigall.exp: send signal 51
+PASS: gdb.base/sigall.exp: advance to 52
+PASS: gdb.base/sigall.exp: handle SIG52 stop print
+PASS: gdb.base/sigall.exp: b handle_52
+PASS: gdb.base/sigall.exp: b gen_53
+PASS: gdb.base/sigall.exp: send signal 52
+PASS: gdb.base/sigall.exp: advance to 53
+PASS: gdb.base/sigall.exp: handle SIG53 stop print
+PASS: gdb.base/sigall.exp: b handle_53
+PASS: gdb.base/sigall.exp: b gen_54
+PASS: gdb.base/sigall.exp: send signal 53
+PASS: gdb.base/sigall.exp: advance to 54
+PASS: gdb.base/sigall.exp: handle SIG54 stop print
+PASS: gdb.base/sigall.exp: b handle_54
+PASS: gdb.base/sigall.exp: b gen_55
+PASS: gdb.base/sigall.exp: send signal 54
+PASS: gdb.base/sigall.exp: advance to 55
+PASS: gdb.base/sigall.exp: handle SIG55 stop print
+PASS: gdb.base/sigall.exp: b handle_55
+PASS: gdb.base/sigall.exp: b gen_56
+PASS: gdb.base/sigall.exp: send signal 55
+PASS: gdb.base/sigall.exp: advance to 56
+PASS: gdb.base/sigall.exp: handle SIG56 stop print
+PASS: gdb.base/sigall.exp: b handle_56
+PASS: gdb.base/sigall.exp: b gen_57
+PASS: gdb.base/sigall.exp: send signal 56
+PASS: gdb.base/sigall.exp: advance to 57
+PASS: gdb.base/sigall.exp: handle SIG57 stop print
+PASS: gdb.base/sigall.exp: b handle_57
+PASS: gdb.base/sigall.exp: b gen_58
+PASS: gdb.base/sigall.exp: send signal 57
+PASS: gdb.base/sigall.exp: advance to 58
+PASS: gdb.base/sigall.exp: handle SIG58 stop print
+PASS: gdb.base/sigall.exp: b handle_58
+PASS: gdb.base/sigall.exp: b gen_59
+PASS: gdb.base/sigall.exp: send signal 58
+PASS: gdb.base/sigall.exp: advance to 59
+PASS: gdb.base/sigall.exp: handle SIG59 stop print
+PASS: gdb.base/sigall.exp: b handle_59
+PASS: gdb.base/sigall.exp: b gen_60
+PASS: gdb.base/sigall.exp: send signal 59
+PASS: gdb.base/sigall.exp: advance to 60
+PASS: gdb.base/sigall.exp: handle SIG60 stop print
+PASS: gdb.base/sigall.exp: b handle_60
+PASS: gdb.base/sigall.exp: b gen_61
+PASS: gdb.base/sigall.exp: send signal 60
+PASS: gdb.base/sigall.exp: advance to 61
+PASS: gdb.base/sigall.exp: handle SIG61 stop print
+PASS: gdb.base/sigall.exp: b handle_61
+PASS: gdb.base/sigall.exp: b gen_62
+PASS: gdb.base/sigall.exp: send signal 61
+PASS: gdb.base/sigall.exp: advance to 62
+PASS: gdb.base/sigall.exp: handle SIG62 stop print
+PASS: gdb.base/sigall.exp: b handle_62
+PASS: gdb.base/sigall.exp: b gen_63
+PASS: gdb.base/sigall.exp: send signal 62
+PASS: gdb.base/sigall.exp: advance to 63
+PASS: gdb.base/sigall.exp: handle SIG63 stop print
+PASS: gdb.base/sigall.exp: b handle_63
+PASS: gdb.base/sigall.exp: b gen_TERM
+PASS: gdb.base/sigall.exp: send signal 63
+PASS: gdb.base/sigall.exp: advance to TERM
+PASS: gdb.base/sigall.exp: handle SIGTERM stop print
+PASS: gdb.base/sigall.exp: b handle_TERM
+PASS: gdb.base/sigall.exp: get signal TERM
+PASS: gdb.base/sigall.exp: send signal TERM
+PASS: gdb.base/sigall.exp: continue until exit at continue to sigall exit
+Running ./gdb.base/sigaltstack.exp ...
+PASS: gdb.base/sigaltstack.exp: handle SIGALRM print pass nostop
+PASS: gdb.base/sigaltstack.exp: handle SIGVTALRM print pass nostop
+PASS: gdb.base/sigaltstack.exp: handle SIGPROF print pass nostop
+PASS: gdb.base/sigaltstack.exp: break catcher if level == INNER
+PASS: gdb.base/sigaltstack.exp: continue to catch
+PASS: gdb.base/sigaltstack.exp: next
+PASS: gdb.base/sigaltstack.exp: backtrace
+PASS: gdb.base/sigaltstack.exp: finish from catch LEAF
+PASS: gdb.base/sigaltstack.exp: finish to throw INNER
+PASS: gdb.base/sigaltstack.exp: finish to catch INNER
+PASS: gdb.base/sigaltstack.exp: finish from catch INNER
+PASS: gdb.base/sigaltstack.exp: finish to OUTER
+PASS: gdb.base/sigaltstack.exp: finish to catch MAIN
+PASS: gdb.base/sigaltstack.exp: finish to MAIN
+Running ./gdb.base/sigbpt.exp ...
+PASS: gdb.base/sigbpt.exp: break keeper
+PASS: gdb.base/sigbpt.exp: display/i $pc
+PASS: gdb.base/sigbpt.exp: advance to the bowler
+PASS: gdb.base/sigbpt.exp: stepping to fault
+PASS: gdb.base/sigbpt.exp: get insn after fault
+PASS: gdb.base/sigbpt.exp: Verify that SIGSEGV occurs at the last STEPI insn
+PASS: gdb.base/sigbpt.exp: rerun to main
+PASS: gdb.base/sigbpt.exp: stepi; pass SIGSEGV
+PASS: gdb.base/sigbpt.exp: stepi; continue to keeper
+PASS: gdb.base/sigbpt.exp: stepi; nopass SIGSEGV
+KFAIL: gdb.base/sigbpt.exp: stepi; stepi out of handler (corrupt pc) (PRMS: gdb/1702)
+PASS: gdb.base/sigbpt.exp: rerun to main
+PASS: gdb.base/sigbpt.exp: stepi bp before segv; pass SIGSEGV
+PASS: gdb.base/sigbpt.exp: stepi bp before segv; continue to keeper
+PASS: gdb.base/sigbpt.exp: stepi bp before segv; nopass SIGSEGV
+PASS: gdb.base/sigbpt.exp: stepi bp before segv; set breakpoint 0 of 1
+KFAIL: gdb.base/sigbpt.exp: stepi bp before segv; stepi out of handler (corrupt pc) (PRMS: gdb/1702)
+PASS: gdb.base/sigbpt.exp: stepi bp before segv; clear breakpoint 0 of 1
+PASS: gdb.base/sigbpt.exp: rerun to main
+PASS: gdb.base/sigbpt.exp: stepi bp at segv; pass SIGSEGV
+PASS: gdb.base/sigbpt.exp: stepi bp at segv; continue to keeper
+PASS: gdb.base/sigbpt.exp: stepi bp at segv; nopass SIGSEGV
+PASS: gdb.base/sigbpt.exp: stepi bp at segv; set breakpoint 0 of 1
+KFAIL: gdb.base/sigbpt.exp: stepi bp at segv; stepi out of handler (corrupt pc) (PRMS: gdb/1702)
+PASS: gdb.base/sigbpt.exp: stepi bp at segv; clear breakpoint 0 of 1
+PASS: gdb.base/sigbpt.exp: rerun to main
+PASS: gdb.base/sigbpt.exp: stepi bp before and at segv; pass SIGSEGV
+PASS: gdb.base/sigbpt.exp: stepi bp before and at segv; continue to keeper
+PASS: gdb.base/sigbpt.exp: stepi bp before and at segv; nopass SIGSEGV
+PASS: gdb.base/sigbpt.exp: stepi bp before and at segv; set breakpoint 0 of 2
+PASS: gdb.base/sigbpt.exp: stepi bp before and at segv; set breakpoint 1 of 2
+KFAIL: gdb.base/sigbpt.exp: stepi bp before and at segv; stepi out of handler (corrupt pc) (PRMS: gdb/1702)
+PASS: gdb.base/sigbpt.exp: stepi bp before and at segv; clear breakpoint 0 of 2
+PASS: gdb.base/sigbpt.exp: stepi bp before and at segv; clear breakpoint 1 of 2
+PASS: gdb.base/sigbpt.exp: rerun to main
+PASS: gdb.base/sigbpt.exp: cont; pass SIGSEGV
+PASS: gdb.base/sigbpt.exp: cont; continue to keeper
+PASS: gdb.base/sigbpt.exp: cont; nopass SIGSEGV
+PASS: gdb.base/sigbpt.exp: cont; set breakpoint 0 of 1
+PASS: gdb.base/sigbpt.exp: cont; continue to breakpoint at fault
+PASS: gdb.base/sigbpt.exp: cont; stepi fault
+PASS: gdb.base/sigbpt.exp: cont; clear breakpoint 0 of 1
+PASS: gdb.base/sigbpt.exp: rerun to main
+PASS: gdb.base/sigbpt.exp: cont bp after segv; pass SIGSEGV
+PASS: gdb.base/sigbpt.exp: cont bp after segv; continue to keeper
+PASS: gdb.base/sigbpt.exp: cont bp after segv; nopass SIGSEGV
+PASS: gdb.base/sigbpt.exp: cont bp after segv; set breakpoint 0 of 2
+PASS: gdb.base/sigbpt.exp: cont bp after segv; set breakpoint 1 of 2
+PASS: gdb.base/sigbpt.exp: cont bp after segv; continue to breakpoint at fault
+PASS: gdb.base/sigbpt.exp: cont bp after segv; stepi fault
+PASS: gdb.base/sigbpt.exp: cont bp after segv; clear breakpoint 0 of 2
+PASS: gdb.base/sigbpt.exp: cont bp after segv; clear breakpoint 1 of 2
+PASS: gdb.base/sigbpt.exp: rerun to main
+PASS: gdb.base/sigbpt.exp: cont bp before and after segv; pass SIGSEGV
+PASS: gdb.base/sigbpt.exp: cont bp before and after segv; continue to keeper
+PASS: gdb.base/sigbpt.exp: cont bp before and after segv; nopass SIGSEGV
+PASS: gdb.base/sigbpt.exp: cont bp before and after segv; set breakpoint 0 of 3
+PASS: gdb.base/sigbpt.exp: cont bp before and after segv; set breakpoint 1 of 3
+PASS: gdb.base/sigbpt.exp: cont bp before and after segv; set breakpoint 2 of 3
+PASS: gdb.base/sigbpt.exp: cont bp before and after segv; continue to breakpoint at fault
+PASS: gdb.base/sigbpt.exp: cont bp before and after segv; stepi fault
+PASS: gdb.base/sigbpt.exp: cont bp before and after segv; clear breakpoint 0 of 3
+PASS: gdb.base/sigbpt.exp: cont bp before and after segv; clear breakpoint 1 of 3
+PASS: gdb.base/sigbpt.exp: cont bp before and after segv; clear breakpoint 2 of 3
+Running ./gdb.base/sigchld.exp ...
+PASS: gdb.base/sigchld.exp: set breakpoint at success exit
+PASS: gdb.base/sigchld.exp: set breakpoint at failure exit
+PASS: gdb.base/sigchld.exp: SIGCHLD blocked in inferior
+Running ./gdb.base/siginfo-addr.exp ...
+Running ./gdb.base/siginfo.exp ...
+PASS: gdb.base/siginfo.exp: display/i $pc
+PASS: gdb.base/siginfo.exp: break handler
+PASS: gdb.base/siginfo.exp: continue to stepi handler
+PASS: gdb.base/siginfo.exp: backtrace for nexti
+PASS: gdb.base/siginfo.exp: step out of handler
+Running ./gdb.base/siginfo-infcall.exp ...
+PASS: gdb.base/siginfo-infcall.exp: continue to SIGUSR1
+PASS: gdb.base/siginfo-infcall.exp: p callme ()
+PASS: gdb.base/siginfo-infcall.exp: continue to the handler
+Running ./gdb.base/siginfo-obj.exp ...
+PASS: gdb.base/siginfo-obj.exp: continue to signal
+PASS: gdb.base/siginfo-obj.exp: save a core file
+PASS: gdb.base/siginfo-obj.exp: Extract si_addr
+PASS: gdb.base/siginfo-obj.exp: Extract si_errno
+PASS: gdb.base/siginfo-obj.exp: Extract si_code
+PASS: gdb.base/siginfo-obj.exp: Extract si_signo
+PASS: gdb.base/siginfo-obj.exp: break 38
+PASS: gdb.base/siginfo-obj.exp: continue to handler
+PASS: gdb.base/siginfo-obj.exp: p ssi_addr
+PASS: gdb.base/siginfo-obj.exp: p ssi_errno
+PASS: gdb.base/siginfo-obj.exp: p ssi_code
+PASS: gdb.base/siginfo-obj.exp: p ssi_signo
+PASS: gdb.base/siginfo-obj.exp: continue to signal
+PASS: gdb.base/siginfo-obj.exp: p $_siginfo._sifields._sigfault.si_addr = 0x666
+PASS: gdb.base/siginfo-obj.exp: p $_siginfo.si_errno = 666
+PASS: gdb.base/siginfo-obj.exp: p $_siginfo.si_code = 999
+PASS: gdb.base/siginfo-obj.exp: p $_siginfo.si_signo = 11
+PASS: gdb.base/siginfo-obj.exp: break 38
+PASS: gdb.base/siginfo-obj.exp: continue to handler
+PASS: gdb.base/siginfo-obj.exp: p ssi_addr
+PASS: gdb.base/siginfo-obj.exp: p ssi_errno
+PASS: gdb.base/siginfo-obj.exp: p ssi_code
+PASS: gdb.base/siginfo-obj.exp: p ssi_signo
+FAIL: gdb.base/siginfo-obj.exp: core siginfo-obj.gcore
+FAIL: gdb.base/siginfo-obj.exp: p $_siginfo.si_signo from core file
+FAIL: gdb.base/siginfo-obj.exp: p $_siginfo.si_errno from core file
+FAIL: gdb.base/siginfo-obj.exp: p $_siginfo.si_code from core file
+FAIL: gdb.base/siginfo-obj.exp: p $_siginfo._sifields._sigfault.si_addr from core file
+Running ./gdb.base/siginfo-thread.exp ...
+PASS: gdb.base/siginfo-thread.exp: successfully compiled posix threads test case
+PASS: gdb.base/siginfo-thread.exp: continue to signal
+PASS: gdb.base/siginfo-thread.exp: save a core file
+PASS: gdb.base/siginfo-thread.exp: Extract si_addr
+PASS: gdb.base/siginfo-thread.exp: Extract si_errno
+PASS: gdb.base/siginfo-thread.exp: Extract si_code
+PASS: gdb.base/siginfo-thread.exp: Extract si_signo
+PASS: gdb.base/siginfo-thread.exp: break 39
+PASS: gdb.base/siginfo-thread.exp: continue to handler
+PASS: gdb.base/siginfo-thread.exp: p ssi_addr
+PASS: gdb.base/siginfo-thread.exp: p ssi_errno
+PASS: gdb.base/siginfo-thread.exp: p ssi_code
+PASS: gdb.base/siginfo-thread.exp: p ssi_signo
+PASS: gdb.base/siginfo-thread.exp: thread 1
+PASS: gdb.base/siginfo-thread.exp: test signal in main thread
+FAIL: gdb.base/siginfo-thread.exp: core siginfo-thread.gcore
+FAIL: gdb.base/siginfo-thread.exp: p $_siginfo.si_signo from core file
+FAIL: gdb.base/siginfo-thread.exp: p $_siginfo.si_errno from core file
+FAIL: gdb.base/siginfo-thread.exp: p $_siginfo.si_code from core file
+FAIL: gdb.base/siginfo-thread.exp: p $_siginfo._sifields._sigfault.si_addr from core file
+PASS: gdb.base/siginfo-thread.exp: set variable $count = 0
+PASS: gdb.base/siginfo-thread.exp: select thread 1 with core file
+FAIL: gdb.base/siginfo-thread.exp: update counter in thread 1
+PASS: gdb.base/siginfo-thread.exp: select thread 2 with core file
+FAIL: gdb.base/siginfo-thread.exp: update counter in thread 2
+FAIL: gdb.base/siginfo-thread.exp: print $count
+Running ./gdb.base/signals.exp ...
+PASS: gdb.base/signals.exp: handle all print
+PASS: gdb.base/signals.exp: set variable count = 0
+PASS: gdb.base/signals.exp: break handler if 0
+PASS: gdb.base/signals.exp: set $handler_breakpoint_number = $bpnum
+PASS: gdb.base/signals.exp: next to signal
+PASS: gdb.base/signals.exp: next to alarm #1
+PASS: gdb.base/signals.exp: next to ++count #1
+PASS: gdb.base/signals.exp: p func1 () #1
+PASS: gdb.base/signals.exp: p count #1
+PASS: gdb.base/signals.exp: condition $handler_breakpoint_number
+PASS: gdb.base/signals.exp: next to alarm #2
+PASS: gdb.base/signals.exp: next to ++count #2
+PASS: gdb.base/signals.exp: p func1 () #2
+PASS: gdb.base/signals.exp: backtrace from handler when calling func1
+PASS: gdb.base/signals.exp: continue
+PASS: gdb.base/signals.exp: p count #2
+PASS: gdb.base/signals.exp: info signals
+PASS: gdb.base/signals.exp: info signal SIGTRAP
+PASS: gdb.base/signals.exp: info signal 5
+PASS: gdb.base/signals.exp: handle without arguments
+PASS: gdb.base/signals.exp: handle with bogus SIG
+PASS: gdb.base/signals.exp: handle SIG with bogus action
+PASS: gdb.base/signals.exp: handle SIG with multiple conflicting actions
+PASS: gdb.base/signals.exp: handle SIG parses all legal actions
+PASS: gdb.base/signals.exp: handle multiple SIGs
+PASS: gdb.base/signals.exp: override SIGTRAP
+PASS: gdb.base/signals.exp: invalid signal number rejected
+PASS: gdb.base/signals.exp: handle multiple SIGs via integer range
+PASS: gdb.base/signals.exp: handle multiple SIGs via reverse integer range
+PASS: gdb.base/signals.exp: override SIGINT
+PASS: gdb.base/signals.exp: signal without arguments disallowed
+PASS: gdb.base/signals.exp: signal SIGUSR1
+PASS: gdb.base/signals.exp: backtrace for SIGUSR1
+Running ./gdb.base/signest.exp ...
+PASS: gdb.base/signest.exp: continue to fault
+PASS: gdb.base/signest.exp: set conditional breakpoint
+PASS: gdb.base/signest.exp: pass SIGSEGV
+PASS: gdb.base/signest.exp: pass SIGBUS
+PASS: gdb.base/signest.exp: run through nested faults
+Running ./gdb.base/signull.exp ...
+PASS: gdb.base/signull.exp: set for function pointer probe
+PASS: gdb.base/signull.exp: probe function pointer (function entry-point)
+PASS: gdb.base/signull.exp: rerun to main
+PASS: gdb.base/signull.exp: break bowler
+PASS: gdb.base/signull.exp: break keeper
+PASS: gdb.base/signull.exp: handle SIGSEGV
+PASS: gdb.base/signull.exp: handle SIGBUS
+PASS: gdb.base/signull.exp: data read; start with the bowler
+PASS: gdb.base/signull.exp: data read; select the pointer type
+PASS: gdb.base/signull.exp: data read; take the SIGSEGV
+PASS: gdb.base/signull.exp: data read; backtrace from SIGSEGV
+PASS: gdb.base/signull.exp: data read; continue to the keeper
+PASS: gdb.base/signull.exp: data read; backtrace from keeper through SIGSEGV
+PASS: gdb.base/signull.exp: data write; start with the bowler
+PASS: gdb.base/signull.exp: data write; select the pointer type
+PASS: gdb.base/signull.exp: data write; take the SIGSEGV
+PASS: gdb.base/signull.exp: data write; backtrace from SIGSEGV
+PASS: gdb.base/signull.exp: data write; continue to the keeper
+PASS: gdb.base/signull.exp: data write; backtrace from keeper through SIGSEGV
+PASS: gdb.base/signull.exp: code; start with the bowler
+PASS: gdb.base/signull.exp: code; select the pointer type
+PASS: gdb.base/signull.exp: code; take the SIGSEGV
+PASS: gdb.base/signull.exp: code; backtrace from SIGSEGV
+PASS: gdb.base/signull.exp: code; continue to the keeper
+PASS: gdb.base/signull.exp: code; backtrace from keeper through SIGSEGV
+Running ./gdb.base/sigrepeat.exp ...
+PASS: gdb.base/sigrepeat.exp: advance to infinite loop
+PASS: gdb.base/sigrepeat.exp: next
+Running ./gdb.base/sigstep.exp ...
+PASS: gdb.base/sigstep.exp: display/i $pc
+PASS: gdb.base/sigstep.exp: break handler
+PASS: gdb.base/sigstep.exp: continue to stepi handler
+PASS: gdb.base/sigstep.exp: backtrace for nexti
+PASS: gdb.base/sigstep.exp: step from handler; continue to handler
+PASS: gdb.base/sigstep.exp: step from handler; leave handler
+PASS: gdb.base/sigstep.exp: stepi from handleri; continue to handler
+PASS: gdb.base/sigstep.exp: stepi from handleri; leave handler
+PASS: gdb.base/sigstep.exp: stepi from handleri; leave signal trampoline (in main)
+PASS: gdb.base/sigstep.exp: next from handler; continue to handler
+PASS: gdb.base/sigstep.exp: next from handler; leave handler
+PASS: gdb.base/sigstep.exp: nexti from handleri; continue to handler
+PASS: gdb.base/sigstep.exp: nexti from handleri; leave handler
+PASS: gdb.base/sigstep.exp: nexti from handleri; leave signal trampoline (in main)
+PASS: gdb.base/sigstep.exp: finish from handleri; continue to handler
+PASS: gdb.base/sigstep.exp: finish from handleri; leave handler
+PASS: gdb.base/sigstep.exp: finish from handleri; leave signal trampoline (in main)
+PASS: gdb.base/sigstep.exp: return from handleri; continue to handler
+PASS: gdb.base/sigstep.exp: return from handleri; leave handler
+PASS: gdb.base/sigstep.exp: return from handleri; leave signal trampoline (in main)
+PASS: gdb.base/sigstep.exp: Set done as return will have skipped it
+PASS: gdb.base/sigstep.exp: set itimer = itimer_real
+PASS: gdb.base/sigstep.exp: break 79
+PASS: gdb.base/sigstep.exp: step to handler; resync
+PASS: gdb.base/sigstep.exp: step to handler; advance to infinite loop
+PASS: gdb.base/sigstep.exp: step to handler; break handler
+PASS: gdb.base/sigstep.exp: step to handler; performing step
+PASS: gdb.base/sigstep.exp: step to handler; clear handler
+PASS: gdb.base/sigstep.exp: next to handler; resync
+PASS: gdb.base/sigstep.exp: next to handler; advance to infinite loop
+PASS: gdb.base/sigstep.exp: next to handler; break handler
+PASS: gdb.base/sigstep.exp: next to handler; performing next
+PASS: gdb.base/sigstep.exp: next to handler; clear handler
+PASS: gdb.base/sigstep.exp: continue to handler; resync
+PASS: gdb.base/sigstep.exp: continue to handler; advance to infinite loop
+PASS: gdb.base/sigstep.exp: continue to handler; break handler
+PASS: gdb.base/sigstep.exp: continue to handler; performing continue
+PASS: gdb.base/sigstep.exp: continue to handler; clear handler
+PASS: gdb.base/sigstep.exp: step to handler entry; resync
+PASS: gdb.base/sigstep.exp: step to handler entry; advance to infinite loop
+PASS: gdb.base/sigstep.exp: step to handler entry; break handler
+PASS: gdb.base/sigstep.exp: step to handler entry; performing step
+PASS: gdb.base/sigstep.exp: step to handler entry; clear handler
+PASS: gdb.base/sigstep.exp: next to handler entry; resync
+PASS: gdb.base/sigstep.exp: next to handler entry; advance to infinite loop
+PASS: gdb.base/sigstep.exp: next to handler entry; break handler
+PASS: gdb.base/sigstep.exp: next to handler entry; performing next
+PASS: gdb.base/sigstep.exp: next to handler entry; clear handler
+PASS: gdb.base/sigstep.exp: continue to handler entry; resync
+PASS: gdb.base/sigstep.exp: continue to handler entry; advance to infinite loop
+PASS: gdb.base/sigstep.exp: continue to handler entry; break handler
+PASS: gdb.base/sigstep.exp: continue to handler entry; performing continue
+PASS: gdb.base/sigstep.exp: continue to handler entry; clear handler
+PASS: gdb.base/sigstep.exp: step over handler; resync
+PASS: gdb.base/sigstep.exp: step over handler; advance to infinite loop
+PASS: gdb.base/sigstep.exp: step over handler; performing step
+PASS: gdb.base/sigstep.exp: next over handler; resync
+PASS: gdb.base/sigstep.exp: next over handler; advance to infinite loop
+PASS: gdb.base/sigstep.exp: next over handler; performing next
+PASS: gdb.base/sigstep.exp: continue over handler; resync
+PASS: gdb.base/sigstep.exp: continue over handler; advance to infinite loop
+PASS: gdb.base/sigstep.exp: continue over handler; performing continue
+PASS: gdb.base/sigstep.exp: step on breakpoint, to handler; resync
+PASS: gdb.base/sigstep.exp: step on breakpoint, to handler; break infinite loop
+PASS: gdb.base/sigstep.exp: step on breakpoint, to handler; break handler
+PASS: gdb.base/sigstep.exp: step on breakpoint, to handler; continue to infinite loop
+PASS: gdb.base/sigstep.exp: step on breakpoint, to handler; performing step
+PASS: gdb.base/sigstep.exp: step on breakpoint, to handler; clear infinite loop
+PASS: gdb.base/sigstep.exp: step on breakpoint, to handler; clear handler
+PASS: gdb.base/sigstep.exp: next on breakpoint, to handler; resync
+PASS: gdb.base/sigstep.exp: next on breakpoint, to handler; break infinite loop
+PASS: gdb.base/sigstep.exp: next on breakpoint, to handler; break handler
+PASS: gdb.base/sigstep.exp: next on breakpoint, to handler; continue to infinite loop
+PASS: gdb.base/sigstep.exp: next on breakpoint, to handler; performing next
+PASS: gdb.base/sigstep.exp: next on breakpoint, to handler; clear infinite loop
+PASS: gdb.base/sigstep.exp: next on breakpoint, to handler; clear handler
+PASS: gdb.base/sigstep.exp: continue on breakpoint, to handler; resync
+PASS: gdb.base/sigstep.exp: continue on breakpoint, to handler; break infinite loop
+PASS: gdb.base/sigstep.exp: continue on breakpoint, to handler; break handler
+PASS: gdb.base/sigstep.exp: continue on breakpoint, to handler; continue to infinite loop
+PASS: gdb.base/sigstep.exp: continue on breakpoint, to handler; performing continue
+PASS: gdb.base/sigstep.exp: continue on breakpoint, to handler; clear infinite loop
+PASS: gdb.base/sigstep.exp: continue on breakpoint, to handler; clear handler
+PASS: gdb.base/sigstep.exp: step on breakpoint, to handler entry; resync
+PASS: gdb.base/sigstep.exp: step on breakpoint, to handler entry; break infinite loop
+PASS: gdb.base/sigstep.exp: step on breakpoint, to handler entry; break handler
+PASS: gdb.base/sigstep.exp: step on breakpoint, to handler entry; continue to infinite loop
+PASS: gdb.base/sigstep.exp: step on breakpoint, to handler entry; performing step
+PASS: gdb.base/sigstep.exp: step on breakpoint, to handler entry; clear infinite loop
+PASS: gdb.base/sigstep.exp: step on breakpoint, to handler entry; clear handler
+PASS: gdb.base/sigstep.exp: next on breakpoint, to handler entry; resync
+PASS: gdb.base/sigstep.exp: next on breakpoint, to handler entry; break infinite loop
+PASS: gdb.base/sigstep.exp: next on breakpoint, to handler entry; break handler
+PASS: gdb.base/sigstep.exp: next on breakpoint, to handler entry; continue to infinite loop
+PASS: gdb.base/sigstep.exp: next on breakpoint, to handler entry; performing next
+PASS: gdb.base/sigstep.exp: next on breakpoint, to handler entry; clear infinite loop
+PASS: gdb.base/sigstep.exp: next on breakpoint, to handler entry; clear handler
+PASS: gdb.base/sigstep.exp: continue on breakpoint, to handler entry; resync
+PASS: gdb.base/sigstep.exp: continue on breakpoint, to handler entry; break infinite loop
+PASS: gdb.base/sigstep.exp: continue on breakpoint, to handler entry; break handler
+PASS: gdb.base/sigstep.exp: continue on breakpoint, to handler entry; continue to infinite loop
+PASS: gdb.base/sigstep.exp: continue on breakpoint, to handler entry; performing continue
+PASS: gdb.base/sigstep.exp: continue on breakpoint, to handler entry; clear infinite loop
+PASS: gdb.base/sigstep.exp: continue on breakpoint, to handler entry; clear handler
+PASS: gdb.base/sigstep.exp: step on breakpoint, skip handler; resync
+PASS: gdb.base/sigstep.exp: step on breakpoint, skip handler; break infinite loop
+PASS: gdb.base/sigstep.exp: step on breakpoint, skip handler; continue to infinite loop
+PASS: gdb.base/sigstep.exp: step on breakpoint, skip handler; performing step
+PASS: gdb.base/sigstep.exp: step on breakpoint, skip handler; clear infinite loop
+PASS: gdb.base/sigstep.exp: next on breakpoint, skip handler; resync
+PASS: gdb.base/sigstep.exp: next on breakpoint, skip handler; break infinite loop
+PASS: gdb.base/sigstep.exp: next on breakpoint, skip handler; continue to infinite loop
+PASS: gdb.base/sigstep.exp: next on breakpoint, skip handler; performing next
+PASS: gdb.base/sigstep.exp: next on breakpoint, skip handler; clear infinite loop
+PASS: gdb.base/sigstep.exp: continue on breakpoint, skip handler; resync
+PASS: gdb.base/sigstep.exp: continue on breakpoint, skip handler; break infinite loop
+PASS: gdb.base/sigstep.exp: continue on breakpoint, skip handler; continue to infinite loop
+PASS: gdb.base/sigstep.exp: continue on breakpoint, skip handler; performing continue
+PASS: gdb.base/sigstep.exp: continue on breakpoint, skip handler; clear infinite loop
+Running ./gdb.base/sizeof.exp ...
+Running ./gdb.base/skip.exp ...
+PASS: gdb.base/skip.exp: skip file (no default file)
+PASS: gdb.base/skip.exp: skip function
+PASS: gdb.base/skip.exp: skip (no default function)
+PASS: gdb.base/skip.exp: info skip empty
+PASS: gdb.base/skip.exp: skip file (skip.c)
+PASS: gdb.base/skip.exp: skip (main)
+PASS: gdb.base/skip.exp: skip file skip1.c
+PASS: gdb.base/skip.exp: skip function baz
+PASS: gdb.base/skip.exp: skip enable 999
+PASS: gdb.base/skip.exp: skip disable 999
+PASS: gdb.base/skip.exp: skip delete 999
+PASS: gdb.base/skip.exp: skip enable a
+PASS: gdb.base/skip.exp: skip disable a
+PASS: gdb.base/skip.exp: skip delete a
+PASS: gdb.base/skip.exp: info skip 999
+PASS: gdb.base/skip.exp: info skip
+PASS: gdb.base/skip.exp: step in the main
+PASS: gdb.base/skip.exp: step after all ignored
+PASS: gdb.base/skip.exp: skip delete 1
+PASS: gdb.base/skip.exp: info skip (delete 1)
+PASS: gdb.base/skip.exp: step after deleting 1 (1)
+PASS: gdb.base/skip.exp: step after deleting 1 (2)
+PASS: gdb.base/skip.exp: step after deleting 1 (3)
+PASS: gdb.base/skip.exp: skip disable 3
+PASS: gdb.base/skip.exp: info skip shows entry as disabled
+PASS: gdb.base/skip.exp: step after disabling 3 (1)
+PASS: gdb.base/skip.exp: step after disabling 3 (2)
+PASS: gdb.base/skip.exp: step after disabling 3 (3)
+PASS: gdb.base/skip.exp: step after disabling 3 (4)
+PASS: gdb.base/skip.exp: step after disabling 3 (5)
+PASS: gdb.base/skip.exp: skip enable 3
+PASS: gdb.base/skip.exp: info skip shows entry as enabled
+PASS: gdb.base/skip.exp: step after enable 3 (1)
+PASS: gdb.base/skip.exp: step after enable 3 (2)
+PASS: gdb.base/skip.exp: step after enable 3 (3)
+PASS: gdb.base/skip.exp: skip disable
+PASS: gdb.base/skip.exp: info skip after disabling all
+PASS: gdb.base/skip.exp: skip enable
+PASS: gdb.base/skip.exp: info skip after enabling all
+PASS: gdb.base/skip.exp: skip disable 4 2-3
+PASS: gdb.base/skip.exp: info skip after disabling 4 2-3
+PASS: gdb.base/skip.exp: skip enable 2-3
+PASS: gdb.base/skip.exp: info skip after enabling 2-3
+PASS: gdb.base/skip.exp: info skip 2-3
+PASS: gdb.base/skip.exp: skip delete 2 3
+PASS: gdb.base/skip.exp: info skip after deleting 2 3
+PASS: gdb.base/skip.exp: skip delete
+PASS: gdb.base/skip.exp: info skip after deleting all
+Running ./gdb.base/skip-solib.exp ...
+Running ./gdb.base/so-impl-ld.exp ...
+PASS: gdb.base/so-impl-ld.exp: step over solib call
+PASS: gdb.base/so-impl-ld.exp: step into solib call
+PASS: gdb.base/so-impl-ld.exp: step in solib call
+PASS: gdb.base/so-impl-ld.exp: step out of solib call
+Running ./gdb.base/so-indr-cl.exp ...
+Running ./gdb.base/solib-corrupted.exp ...
+Running ./gdb.base/solib-disc.exp ...
+PASS: gdb.base/solib-disc.exp: set stop-on-solib-events 1
+PASS: gdb.base/solib-disc.exp: continue to load
+PASS: gdb.base/solib-disc.exp: save $pc after load
+PASS: gdb.base/solib-disc.exp: disconnect after load
+PASS: gdb.base/solib-disc.exp: reconnect after load
+PASS: gdb.base/solib-disc.exp: check $pc after load
+PASS: gdb.base/solib-disc.exp: continue to unload
+PASS: gdb.base/solib-disc.exp: save $pc after unload
+PASS: gdb.base/solib-disc.exp: disconnect after unload
+PASS: gdb.base/solib-disc.exp: reconnect after unload
+PASS: gdb.base/solib-disc.exp: check $pc after unload
+Running ./gdb.base/solib-display.exp ...
+Running ./gdb.base/solib.exp ...
+Running ./gdb.base/solib-nodir.exp ...
+Running ./gdb.base/solib-overlap.exp ...
+Running ./gdb.base/solib-symbol.exp ...
+PASS: gdb.base/solib-symbol.exp: foo2 in main
+PASS: gdb.base/solib-symbol.exp: foo in libmd
+PASS: gdb.base/solib-symbol.exp: continue
+PASS: gdb.base/solib-symbol.exp: foo2 in mdlib
+Running ./gdb.base/solib-weak.exp ...
+PASS: gdb.base/solib-weak.exp: run to breakpoint - lib1 nodebug, lib2 nodebug, lib1 first
+PASS: gdb.base/solib-weak.exp: run to breakpoint - lib1 nodebug, lib2 nodebug, lib2 first
+PASS: gdb.base/solib-weak.exp: run to breakpoint - lib1 nodebug, lib2 debug, lib1 first
+PASS: gdb.base/solib-weak.exp: run to breakpoint - lib1 nodebug, lib2 debug, lib2 first
+PASS: gdb.base/solib-weak.exp: run to breakpoint - lib1 debug, lib2 nodebug, lib1 first
+PASS: gdb.base/solib-weak.exp: run to breakpoint - lib1 debug, lib2 nodebug, lib2 first
+PASS: gdb.base/solib-weak.exp: run to breakpoint - lib1 debug, lib2 debug, lib1 first
+PASS: gdb.base/solib-weak.exp: run to breakpoint - lib1 debug, lib2 debug, lib2 first
+Running ./gdb.base/source.exp ...
+PASS: gdb.base/source.exp: script contains error
+PASS: gdb.base/source.exp: source -v
+PASS: gdb.base/source.exp: source after -v
+PASS: gdb.base/source.exp: set search directories
+PASS: gdb.base/source.exp: source -s
+PASS: gdb.base/source.exp: source -s -v
+PASS: gdb.base/source.exp: source -v -s
+Running ./gdb.base/stack-checking.exp ...
+PASS: gdb.base/stack-checking.exp: continue to breakpoint: breakpoint for small frame
+PASS: gdb.base/stack-checking.exp: bt
+PASS: gdb.base/stack-checking.exp: continue to breakpoint: breakpoint for medium frame
+PASS: gdb.base/stack-checking.exp: bt
+PASS: gdb.base/stack-checking.exp: continue to breakpoint: breakpoint for big frame
+PASS: gdb.base/stack-checking.exp: bt
+Running ./gdb.base/stale-infcall.exp ...
+PASS: gdb.base/stale-infcall.exp: continue to breakpoint: test-next
+PASS: gdb.base/stale-infcall.exp: set $test_fail_bpnum=$bpnum
+XFAIL: gdb.base/stale-infcall.exp: test system longjmp tracking support
+UNTESTED: gdb.base/stale-infcall.exp: System lacks support for tracking longjmps
+Running ./gdb.base/stap-probe.exp ...
+gdb compile failed, ./gdb.base/stap-probe.c:39:21: fatal error: sys/sdt.h: No such file or directory
+ #include <sys/sdt.h>
+ ^
+compilation terminated.
+UNTESTED: gdb.base/stap-probe.exp: without semaphore, not optimized: stap-probe.exp
+UNTESTED: gdb.base/stap-probe.exp: without semaphore, not optimized: stap-probe.exp
+Running ./gdb.base/start.exp ...
+UNTESTED: gdb.base/start.exp: start
+Running ./gdb.base/step-break.exp ...
+PASS: gdb.base/step-break.exp: breakpoint line number
+PASS: gdb.base/step-break.exp: run until breakpoint set at a line number
+PASS: gdb.base/step-break.exp: next 2 (1)
+PASS: gdb.base/step-break.exp: next 2 (2)
+PASS: gdb.base/step-break.exp: next 2 (3)
+PASS: gdb.base/step-break.exp: next 2 (4)
+PASS: gdb.base/step-break.exp: next 2 (5)
+PASS: gdb.base/step-break.exp: next 2 (6)
+Running ./gdb.base/step-bt.exp ...
+PASS: gdb.base/step-bt.exp: breakpoint at first instruction of hello()
+PASS: gdb.base/step-bt.exp: run to hello()
+PASS: gdb.base/step-bt.exp: step first instruction
+PASS: gdb.base/step-bt.exp: backtrace after first instruction step
+PASS: gdb.base/step-bt.exp: step second instruction
+PASS: gdb.base/step-bt.exp: backtrace after second instruction step
+Running ./gdb.base/step-line.exp ...
+PASS: gdb.base/step-line.exp: break f1
+PASS: gdb.base/step-line.exp: continue to f1
+PASS: gdb.base/step-line.exp: next over dummy 1
+PASS: gdb.base/step-line.exp: next to dummy 2
+PASS: gdb.base/step-line.exp: next over dummy 2
+PASS: gdb.base/step-line.exp: step into f2
+PASS: gdb.base/step-line.exp: next over dummy 4
+PASS: gdb.base/step-line.exp: next to dummy 5
+PASS: gdb.base/step-line.exp: next to dummy 6
+PASS: gdb.base/step-line.exp: next over dummy 6
+PASS: gdb.base/step-line.exp: next to dummy 7
+PASS: gdb.base/step-line.exp: next to dummy 8
+PASS: gdb.base/step-line.exp: next over dummy 8
+PASS: gdb.base/step-line.exp: next to dummy 9
+PASS: gdb.base/step-line.exp: next to dummy 10
+PASS: gdb.base/step-line.exp: next over dummy 10
+Running ./gdb.base/step-resume-infcall.exp ...
+PASS: gdb.base/step-resume-infcall.exp: step
+PASS: gdb.base/step-resume-infcall.exp: up
+PASS: gdb.base/step-resume-infcall.exp: set $b=$pc
+PASS: gdb.base/step-resume-infcall.exp: print $bpnum
+PASS: gdb.base/step-resume-infcall.exp: disass/m
+PASS: gdb.base/step-resume-infcall.exp: info breakpoints
+PASS: gdb.base/step-resume-infcall.exp: next
+PASS: gdb.base/step-resume-infcall.exp: p cond_hit
+Running ./gdb.base/step-symless.exp ...
+PASS: gdb.base/step-symless.exp: strip stub symbols
+PASS: gdb.base/step-symless.exp: step
+Running ./gdb.base/step-test.exp ...
+PASS: gdb.base/step-test.exp: next 1
+PASS: gdb.base/step-test.exp: step 1
+PASS: gdb.base/step-test.exp: next 2
+PASS: gdb.base/step-test.exp: step 3
+PASS: gdb.base/step-test.exp: next 3
+PASS: gdb.base/step-test.exp: next over
+PASS: gdb.base/step-test.exp: step into
+PASS: gdb.base/step-test.exp: step out
+PASS: gdb.base/step-test.exp: stepi to next line
+PASS: gdb.base/step-test.exp: stepi into function
+PASS: gdb.base/step-test.exp: stepi into function's first source line
+PASS: gdb.base/step-test.exp: stepi: finish call
+PASS: gdb.base/step-test.exp: nexti over function
+PASS: gdb.base/step-test.exp: set breakpoint at call to large_struct_by_value
+PASS: gdb.base/step-test.exp: run to pass large struct
+PASS: gdb.base/step-test.exp: large struct by value
+PASS: gdb.base/step-test.exp: continue until exit at step-test.exp
+Running ./gdb.base/store.exp ...
+PASS: gdb.base/store.exp: tbreak wack_charest
+PASS: gdb.base/store.exp: continue to wack_charest
+PASS: gdb.base/store.exp: var charest l; print old l, expecting -1 .*
+PASS: gdb.base/store.exp: var charest l; print old r, expecting -2 .*
+PASS: gdb.base/store.exp: var charest l; setting l to 4
+PASS: gdb.base/store.exp: var charest l; print new l, expecting 4 ..004.
+PASS: gdb.base/store.exp: var charest l; next over add call
+PASS: gdb.base/store.exp: var charest l; print incremented l, expecting 2 ..002.
+PASS: gdb.base/store.exp: tbreak wack_short
+PASS: gdb.base/store.exp: continue to wack_short
+PASS: gdb.base/store.exp: var short l; print old l, expecting -1
+PASS: gdb.base/store.exp: var short l; print old r, expecting -2
+PASS: gdb.base/store.exp: var short l; setting l to 4
+PASS: gdb.base/store.exp: var short l; print new l, expecting 4
+PASS: gdb.base/store.exp: var short l; next over add call
+PASS: gdb.base/store.exp: var short l; print incremented l, expecting 2
+PASS: gdb.base/store.exp: tbreak wack_int
+PASS: gdb.base/store.exp: continue to wack_int
+PASS: gdb.base/store.exp: var int l; print old l, expecting -1
+PASS: gdb.base/store.exp: var int l; print old r, expecting -2
+PASS: gdb.base/store.exp: var int l; setting l to 4
+PASS: gdb.base/store.exp: var int l; print new l, expecting 4
+PASS: gdb.base/store.exp: var int l; next over add call
+PASS: gdb.base/store.exp: var int l; print incremented l, expecting 2
+PASS: gdb.base/store.exp: tbreak wack_long
+PASS: gdb.base/store.exp: continue to wack_long
+PASS: gdb.base/store.exp: var long l; print old l, expecting -1
+PASS: gdb.base/store.exp: var long l; print old r, expecting -2
+PASS: gdb.base/store.exp: var long l; setting l to 4
+PASS: gdb.base/store.exp: var long l; print new l, expecting 4
+PASS: gdb.base/store.exp: var long l; next over add call
+PASS: gdb.base/store.exp: var long l; print incremented l, expecting 2
+PASS: gdb.base/store.exp: tbreak wack_longest
+PASS: gdb.base/store.exp: continue to wack_longest
+PASS: gdb.base/store.exp: var longest l; print old l, expecting -1
+PASS: gdb.base/store.exp: var longest l; print old r, expecting -2
+PASS: gdb.base/store.exp: var longest l; setting l to 4
+PASS: gdb.base/store.exp: var longest l; print new l, expecting 4
+PASS: gdb.base/store.exp: var longest l; next over add call
+PASS: gdb.base/store.exp: var longest l; print incremented l, expecting 2
+PASS: gdb.base/store.exp: tbreak wack_float
+PASS: gdb.base/store.exp: continue to wack_float
+PASS: gdb.base/store.exp: var float l; print old l, expecting -1
+PASS: gdb.base/store.exp: var float l; print old r, expecting -2
+PASS: gdb.base/store.exp: var float l; setting l to 4
+PASS: gdb.base/store.exp: var float l; print new l, expecting 4
+PASS: gdb.base/store.exp: var float l; next over add call
+PASS: gdb.base/store.exp: var float l; print incremented l, expecting 2
+PASS: gdb.base/store.exp: tbreak wack_double
+PASS: gdb.base/store.exp: continue to wack_double
+PASS: gdb.base/store.exp: var double l; print old l, expecting -1
+PASS: gdb.base/store.exp: var double l; print old r, expecting -2
+PASS: gdb.base/store.exp: var double l; setting l to 4
+PASS: gdb.base/store.exp: var double l; print new l, expecting 4
+PASS: gdb.base/store.exp: var double l; next over add call
+PASS: gdb.base/store.exp: var double l; print incremented l, expecting 2
+PASS: gdb.base/store.exp: tbreak wack_doublest
+PASS: gdb.base/store.exp: continue to wack_doublest
+FAIL: gdb.base/store.exp: var doublest l; print old l, expecting -1
+FAIL: gdb.base/store.exp: var doublest l; print old r, expecting -2
+FAIL: gdb.base/store.exp: var doublest l; setting l to 4
+FAIL: gdb.base/store.exp: var doublest l; print new l, expecting 4
+PASS: gdb.base/store.exp: var doublest l; next over add call
+FAIL: gdb.base/store.exp: var doublest l; print incremented l, expecting 2
+PASS: gdb.base/store.exp: tbreak add_charest
+PASS: gdb.base/store.exp: continue to add_charest
+PASS: gdb.base/store.exp: upvar charest l; up
+PASS: gdb.base/store.exp: upvar charest l; print old l, expecting -1 .*
+PASS: gdb.base/store.exp: upvar charest l; print old r, expecting -2 .*
+PASS: gdb.base/store.exp: upvar charest l; set l to 4
+PASS: gdb.base/store.exp: upvar charest l; print new l, expecting 4 ..004.
+PASS: gdb.base/store.exp: tbreak add_short
+PASS: gdb.base/store.exp: continue to add_short
+PASS: gdb.base/store.exp: upvar short l; up
+PASS: gdb.base/store.exp: upvar short l; print old l, expecting -1
+PASS: gdb.base/store.exp: upvar short l; print old r, expecting -2
+PASS: gdb.base/store.exp: upvar short l; set l to 4
+PASS: gdb.base/store.exp: upvar short l; print new l, expecting 4
+PASS: gdb.base/store.exp: tbreak add_int
+PASS: gdb.base/store.exp: continue to add_int
+PASS: gdb.base/store.exp: upvar int l; up
+PASS: gdb.base/store.exp: upvar int l; print old l, expecting -1
+PASS: gdb.base/store.exp: upvar int l; print old r, expecting -2
+PASS: gdb.base/store.exp: upvar int l; set l to 4
+PASS: gdb.base/store.exp: upvar int l; print new l, expecting 4
+PASS: gdb.base/store.exp: tbreak add_long
+PASS: gdb.base/store.exp: continue to add_long
+PASS: gdb.base/store.exp: upvar long l; up
+PASS: gdb.base/store.exp: upvar long l; print old l, expecting -1
+PASS: gdb.base/store.exp: upvar long l; print old r, expecting -2
+PASS: gdb.base/store.exp: upvar long l; set l to 4
+PASS: gdb.base/store.exp: upvar long l; print new l, expecting 4
+PASS: gdb.base/store.exp: tbreak add_longest
+PASS: gdb.base/store.exp: continue to add_longest
+PASS: gdb.base/store.exp: upvar longest l; up
+PASS: gdb.base/store.exp: upvar longest l; print old l, expecting -1
+PASS: gdb.base/store.exp: upvar longest l; print old r, expecting -2
+PASS: gdb.base/store.exp: upvar longest l; set l to 4
+PASS: gdb.base/store.exp: upvar longest l; print new l, expecting 4
+PASS: gdb.base/store.exp: tbreak add_float
+PASS: gdb.base/store.exp: continue to add_float
+PASS: gdb.base/store.exp: upvar float l; up
+PASS: gdb.base/store.exp: upvar float l; print old l, expecting -1
+PASS: gdb.base/store.exp: upvar float l; print old r, expecting -2
+PASS: gdb.base/store.exp: upvar float l; set l to 4
+PASS: gdb.base/store.exp: upvar float l; print new l, expecting 4
+PASS: gdb.base/store.exp: tbreak add_double
+PASS: gdb.base/store.exp: continue to add_double
+PASS: gdb.base/store.exp: upvar double l; up
+PASS: gdb.base/store.exp: upvar double l; print old l, expecting -1
+PASS: gdb.base/store.exp: upvar double l; print old r, expecting -2
+PASS: gdb.base/store.exp: upvar double l; set l to 4
+PASS: gdb.base/store.exp: upvar double l; print new l, expecting 4
+PASS: gdb.base/store.exp: tbreak add_doublest
+PASS: gdb.base/store.exp: continue to add_doublest
+PASS: gdb.base/store.exp: upvar doublest l; up
+FAIL: gdb.base/store.exp: upvar doublest l; print old l, expecting -1
+FAIL: gdb.base/store.exp: upvar doublest l; print old r, expecting -2
+FAIL: gdb.base/store.exp: upvar doublest l; set l to 4
+FAIL: gdb.base/store.exp: upvar doublest l; print new l, expecting 4
+PASS: gdb.base/store.exp: tbreak wack_struct_1
+PASS: gdb.base/store.exp: continue to wack_struct_1
+PASS: gdb.base/store.exp: var struct 1 u; next to add_struct_1 call
+PASS: gdb.base/store.exp: var struct 1 u; print old u, expecting {s = \{0}}
+PASS: gdb.base/store.exp: var struct 1 u; set u to s_1
+PASS: gdb.base/store.exp: var struct 1 u; print new u, expecting {s = \{1}}
+PASS: gdb.base/store.exp: tbreak wack_struct_2
+PASS: gdb.base/store.exp: continue to wack_struct_2
+PASS: gdb.base/store.exp: var struct 2 u; next to add_struct_2 call
+PASS: gdb.base/store.exp: var struct 2 u; print old u, expecting {s = \{0, 0}}
+PASS: gdb.base/store.exp: var struct 2 u; set u to s_2
+PASS: gdb.base/store.exp: var struct 2 u; print new u, expecting {s = \{1, 2}}
+PASS: gdb.base/store.exp: tbreak wack_struct_3
+PASS: gdb.base/store.exp: continue to wack_struct_3
+PASS: gdb.base/store.exp: var struct 3 u; next to add_struct_3 call
+PASS: gdb.base/store.exp: var struct 3 u; print old u, expecting {s = \{0, 0, 0}}
+PASS: gdb.base/store.exp: var struct 3 u; set u to s_3
+PASS: gdb.base/store.exp: var struct 3 u; print new u, expecting {s = \{1, 2, 3}}
+PASS: gdb.base/store.exp: tbreak wack_struct_4
+PASS: gdb.base/store.exp: continue to wack_struct_4
+PASS: gdb.base/store.exp: var struct 4 u; next to add_struct_4 call
+PASS: gdb.base/store.exp: var struct 4 u; print old u, expecting {s = \{0, 0, 0, 0}}
+PASS: gdb.base/store.exp: var struct 4 u; set u to s_4
+PASS: gdb.base/store.exp: var struct 4 u; print new u, expecting {s = \{1, 2, 3, 4}}
+PASS: gdb.base/store.exp: tbreak add_struct_1
+PASS: gdb.base/store.exp: continue to add_struct_1
+PASS: gdb.base/store.exp: up struct 1 u; up
+PASS: gdb.base/store.exp: up struct 1 u; print old u, expecting {s = \{0}}
+PASS: gdb.base/store.exp: up struct 1 u; set u to s_1
+PASS: gdb.base/store.exp: up struct 1 u; print new u, expecting {s = \{1}}
+PASS: gdb.base/store.exp: tbreak add_struct_2
+PASS: gdb.base/store.exp: continue to add_struct_2
+PASS: gdb.base/store.exp: up struct 2 u; up
+PASS: gdb.base/store.exp: up struct 2 u; print old u, expecting {s = \{0, 0}}
+PASS: gdb.base/store.exp: up struct 2 u; set u to s_2
+PASS: gdb.base/store.exp: up struct 2 u; print new u, expecting {s = \{1, 2}}
+PASS: gdb.base/store.exp: tbreak add_struct_3
+PASS: gdb.base/store.exp: continue to add_struct_3
+PASS: gdb.base/store.exp: up struct 3 u; up
+PASS: gdb.base/store.exp: up struct 3 u; print old u, expecting {s = \{0, 0, 0}}
+PASS: gdb.base/store.exp: up struct 3 u; set u to s_3
+PASS: gdb.base/store.exp: up struct 3 u; print new u, expecting {s = \{1, 2, 3}}
+PASS: gdb.base/store.exp: tbreak add_struct_4
+PASS: gdb.base/store.exp: continue to add_struct_4
+PASS: gdb.base/store.exp: up struct 4 u; up
+PASS: gdb.base/store.exp: up struct 4 u; print old u, expecting {s = \{0, 0, 0, 0}}
+PASS: gdb.base/store.exp: up struct 4 u; set u to s_4
+PASS: gdb.base/store.exp: up struct 4 u; print new u, expecting {s = \{1, 2, 3, 4}}
+PASS: gdb.base/store.exp: tbreak wack_field_1
+PASS: gdb.base/store.exp: continue field 1
+PASS: gdb.base/store.exp: next field 1
+PASS: gdb.base/store.exp: old field 1
+PASS: gdb.base/store.exp: set variable u = F_1
+PASS: gdb.base/store.exp: new field 1
+PASS: gdb.base/store.exp: set variable u = F_1, u.i = f_1.i
+PASS: gdb.base/store.exp: f_1.i
+PASS: gdb.base/store.exp: set variable u = F_1, u.j = f_1.j
+PASS: gdb.base/store.exp: f_1.j
+PASS: gdb.base/store.exp: set variable u = F_1, u.k = f_1.k
+PASS: gdb.base/store.exp: f_1.k
+PASS: gdb.base/store.exp: set variable u = f_1, u.i = F_1.i
+PASS: gdb.base/store.exp: F_1.i
+PASS: gdb.base/store.exp: set variable u = f_1, u.j = F_1.j
+PASS: gdb.base/store.exp: F_1.j
+PASS: gdb.base/store.exp: set variable u = f_1, u.k = F_1.k
+PASS: gdb.base/store.exp: F_1.k
+PASS: gdb.base/store.exp: tbreak wack_field_2
+PASS: gdb.base/store.exp: continue field 2
+PASS: gdb.base/store.exp: next field 2
+PASS: gdb.base/store.exp: old field 2
+PASS: gdb.base/store.exp: set variable u = F_2
+PASS: gdb.base/store.exp: new field 2
+PASS: gdb.base/store.exp: set variable u = F_2, u.i = f_2.i
+PASS: gdb.base/store.exp: f_2.i
+PASS: gdb.base/store.exp: set variable u = F_2, u.j = f_2.j
+PASS: gdb.base/store.exp: f_2.j
+PASS: gdb.base/store.exp: set variable u = F_2, u.k = f_2.k
+PASS: gdb.base/store.exp: f_2.k
+PASS: gdb.base/store.exp: set variable u = f_2, u.i = F_2.i
+PASS: gdb.base/store.exp: F_2.i
+PASS: gdb.base/store.exp: set variable u = f_2, u.j = F_2.j
+PASS: gdb.base/store.exp: F_2.j
+PASS: gdb.base/store.exp: set variable u = f_2, u.k = F_2.k
+PASS: gdb.base/store.exp: F_2.k
+PASS: gdb.base/store.exp: tbreak wack_field_3
+PASS: gdb.base/store.exp: continue field 3
+PASS: gdb.base/store.exp: next field 3
+PASS: gdb.base/store.exp: old field 3
+PASS: gdb.base/store.exp: set variable u = F_3
+PASS: gdb.base/store.exp: new field 3
+PASS: gdb.base/store.exp: set variable u = F_3, u.i = f_3.i
+PASS: gdb.base/store.exp: f_3.i
+PASS: gdb.base/store.exp: set variable u = F_3, u.j = f_3.j
+PASS: gdb.base/store.exp: f_3.j
+PASS: gdb.base/store.exp: set variable u = F_3, u.k = f_3.k
+PASS: gdb.base/store.exp: f_3.k
+PASS: gdb.base/store.exp: set variable u = f_3, u.i = F_3.i
+PASS: gdb.base/store.exp: F_3.i
+PASS: gdb.base/store.exp: set variable u = f_3, u.j = F_3.j
+PASS: gdb.base/store.exp: F_3.j
+PASS: gdb.base/store.exp: set variable u = f_3, u.k = F_3.k
+PASS: gdb.base/store.exp: F_3.k
+PASS: gdb.base/store.exp: tbreak wack_field_4
+PASS: gdb.base/store.exp: continue field 4
+PASS: gdb.base/store.exp: next field 4
+PASS: gdb.base/store.exp: old field 4
+PASS: gdb.base/store.exp: set variable u = F_4
+PASS: gdb.base/store.exp: new field 4
+PASS: gdb.base/store.exp: set variable u = F_4, u.i = f_4.i
+PASS: gdb.base/store.exp: f_4.i
+PASS: gdb.base/store.exp: set variable u = F_4, u.j = f_4.j
+PASS: gdb.base/store.exp: f_4.j
+PASS: gdb.base/store.exp: set variable u = F_4, u.k = f_4.k
+PASS: gdb.base/store.exp: f_4.k
+PASS: gdb.base/store.exp: set variable u = f_4, u.i = F_4.i
+PASS: gdb.base/store.exp: F_4.i
+PASS: gdb.base/store.exp: set variable u = f_4, u.j = F_4.j
+PASS: gdb.base/store.exp: F_4.j
+PASS: gdb.base/store.exp: set variable u = f_4, u.k = F_4.k
+PASS: gdb.base/store.exp: F_4.k
+Running ./gdb.base/structs2.exp ...
+PASS: gdb.base/structs2.exp: set width 0
+PASS: gdb.base/structs2.exp: structs2 sanity check
+PASS: gdb.base/structs2.exp: structs2 breakpoint set
+PASS: gdb.base/structs2.exp: structs2 continue1
+PASS: gdb.base/structs2.exp: structs2 continue2
+Running ./gdb.base/structs3.exp ...
+PASS: gdb.base/structs3.exp: print two
+PASS: gdb.base/structs3.exp: print *twop
+PASS: gdb.base/structs3.exp: print *(struct Two *)onep
+PASS: gdb.base/structs3.exp: print *(tTwo *)onep
+Running ./gdb.base/structs.exp ...
+PASS: gdb.base/structs.exp: set print sevenbit-strings
+PASS: gdb.base/structs.exp: set print address off
+PASS: gdb.base/structs.exp: set width 0
+PASS: gdb.base/structs.exp: set print elements 300
+PASS: gdb.base/structs.exp: continue to breakpoint: chartest-done
+PASS: gdb.base/structs.exp: p chartest
+PASS: gdb.base/structs.exp: ptype foo1; structs-tc
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 1 structs-tc
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 1 structs-tc
+PASS: gdb.base/structs.exp: p/c L<n>; call 1 structs-tc
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 2 structs-tc
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 2 structs-tc
+PASS: gdb.base/structs.exp: p/c L<n>; call 2 structs-tc
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 3 structs-tc
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 3 structs-tc
+PASS: gdb.base/structs.exp: p/c L<n>; call 3 structs-tc
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 4 structs-tc
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 4 structs-tc
+PASS: gdb.base/structs.exp: p/c L<n>; call 4 structs-tc
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 5 structs-tc
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 5 structs-tc
+PASS: gdb.base/structs.exp: p/c L<n>; call 5 structs-tc
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 6 structs-tc
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 6 structs-tc
+PASS: gdb.base/structs.exp: p/c L<n>; call 6 structs-tc
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 7 structs-tc
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 7 structs-tc
+PASS: gdb.base/structs.exp: p/c L<n>; call 7 structs-tc
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 8 structs-tc
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 8 structs-tc
+PASS: gdb.base/structs.exp: p/c L<n>; call 8 structs-tc
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 9 structs-tc
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 9 structs-tc
+PASS: gdb.base/structs.exp: p/c L<n>; call 9 structs-tc
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 10 structs-tc
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 10 structs-tc
+PASS: gdb.base/structs.exp: p/c L<n>; call 10 structs-tc
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 11 structs-tc
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 11 structs-tc
+PASS: gdb.base/structs.exp: p/c L<n>; call 11 structs-tc
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 12 structs-tc
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 12 structs-tc
+PASS: gdb.base/structs.exp: p/c L<n>; call 12 structs-tc
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 13 structs-tc
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 13 structs-tc
+PASS: gdb.base/structs.exp: p/c L<n>; call 13 structs-tc
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 14 structs-tc
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 14 structs-tc
+PASS: gdb.base/structs.exp: p/c L<n>; call 14 structs-tc
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 15 structs-tc
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 15 structs-tc
+PASS: gdb.base/structs.exp: p/c L<n>; call 15 structs-tc
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 16 structs-tc
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 16 structs-tc
+PASS: gdb.base/structs.exp: p/c L<n>; call 16 structs-tc
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 17 structs-tc
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 17 structs-tc
+PASS: gdb.base/structs.exp: p/c L<n>; call 17 structs-tc
+PASS: gdb.base/structs.exp: advance to fun<n> for return; return 1 structs-tc
+PASS: gdb.base/structs.exp: zed L<n> for return; return 1 structs-tc
+PASS: gdb.base/structs.exp: return foo<n>; return 1 structs-tc
+PASS: gdb.base/structs.exp: value foo<n> returned; return 1 structs-tc
+PASS: gdb.base/structs.exp: advance to fun<n> for finish; return 1 structs-tc
+PASS: gdb.base/structs.exp: zed L<n> for finish; return 1 structs-tc
+PASS: gdb.base/structs.exp: finish foo<n>; return 1 structs-tc
+PASS: gdb.base/structs.exp: value foo<n> finished; return 1 structs-tc
+PASS: gdb.base/structs.exp: return value known implies finish value known; return 1 structs-tc
+PASS: gdb.base/structs.exp: advance to fun<n> for return; return 2 structs-tc
+PASS: gdb.base/structs.exp: zed L<n> for return; return 2 structs-tc
+PASS: gdb.base/structs.exp: return foo<n>; return 2 structs-tc
+PASS: gdb.base/structs.exp: value foo<n> returned; return 2 structs-tc
+PASS: gdb.base/structs.exp: advance to fun<n> for finish; return 2 structs-tc
+PASS: gdb.base/structs.exp: zed L<n> for finish; return 2 structs-tc
+PASS: gdb.base/structs.exp: finish foo<n>; return 2 structs-tc
+PASS: gdb.base/structs.exp: value foo<n> finished; return 2 structs-tc
+PASS: gdb.base/structs.exp: return value known implies finish value known; return 2 structs-tc
+PASS: gdb.base/structs.exp: advance to fun<n> for return; return 3 structs-tc
+PASS: gdb.base/structs.exp: zed L<n> for return; return 3 structs-tc
+PASS: gdb.base/structs.exp: return foo<n>; return 3 structs-tc
+PASS: gdb.base/structs.exp: value foo<n> returned; return 3 structs-tc
+PASS: gdb.base/structs.exp: advance to fun<n> for finish; return 3 structs-tc
+PASS: gdb.base/structs.exp: zed L<n> for finish; return 3 structs-tc
+PASS: gdb.base/structs.exp: finish foo<n>; return 3 structs-tc
+PASS: gdb.base/structs.exp: value foo<n> finished; return 3 structs-tc
+PASS: gdb.base/structs.exp: return value known implies finish value known; return 3 structs-tc
+PASS: gdb.base/structs.exp: advance to fun<n> for return; return 4 structs-tc
+PASS: gdb.base/structs.exp: zed L<n> for return; return 4 structs-tc
+PASS: gdb.base/structs.exp: return foo<n>; return 4 structs-tc
+PASS: gdb.base/structs.exp: value foo<n> returned; return 4 structs-tc
+PASS: gdb.base/structs.exp: advance to fun<n> for finish; return 4 structs-tc
+PASS: gdb.base/structs.exp: zed L<n> for finish; return 4 structs-tc
+PASS: gdb.base/structs.exp: finish foo<n>; return 4 structs-tc
+PASS: gdb.base/structs.exp: value foo<n> finished; return 4 structs-tc
+PASS: gdb.base/structs.exp: return value known implies finish value known; return 4 structs-tc
+PASS: gdb.base/structs.exp: advance to fun<n> for return; return 5 structs-tc
+PASS: gdb.base/structs.exp: zed L<n> for return; return 5 structs-tc
+PASS: gdb.base/structs.exp: return foo<n>; return 5 structs-tc
+PASS: gdb.base/structs.exp: value foo<n> returned; return 5 structs-tc
+PASS: gdb.base/structs.exp: advance to fun<n> for finish; return 5 structs-tc
+PASS: gdb.base/structs.exp: zed L<n> for finish; return 5 structs-tc
+PASS: gdb.base/structs.exp: finish foo<n>; return 5 structs-tc
+PASS: gdb.base/structs.exp: value foo<n> finished; return 5 structs-tc
+PASS: gdb.base/structs.exp: return value known implies finish value known; return 5 structs-tc
+PASS: gdb.base/structs.exp: advance to fun<n> for return; return 6 structs-tc
+PASS: gdb.base/structs.exp: zed L<n> for return; return 6 structs-tc
+PASS: gdb.base/structs.exp: return foo<n>; return 6 structs-tc
+PASS: gdb.base/structs.exp: value foo<n> returned; return 6 structs-tc
+PASS: gdb.base/structs.exp: advance to fun<n> for finish; return 6 structs-tc
+PASS: gdb.base/structs.exp: zed L<n> for finish; return 6 structs-tc
+PASS: gdb.base/structs.exp: finish foo<n>; return 6 structs-tc
+PASS: gdb.base/structs.exp: value foo<n> finished; return 6 structs-tc
+PASS: gdb.base/structs.exp: return value known implies finish value known; return 6 structs-tc
+PASS: gdb.base/structs.exp: advance to fun<n> for return; return 7 structs-tc
+PASS: gdb.base/structs.exp: zed L<n> for return; return 7 structs-tc
+PASS: gdb.base/structs.exp: return foo<n>; return 7 structs-tc
+PASS: gdb.base/structs.exp: value foo<n> returned; return 7 structs-tc
+PASS: gdb.base/structs.exp: advance to fun<n> for finish; return 7 structs-tc
+PASS: gdb.base/structs.exp: zed L<n> for finish; return 7 structs-tc
+PASS: gdb.base/structs.exp: finish foo<n>; return 7 structs-tc
+PASS: gdb.base/structs.exp: value foo<n> finished; return 7 structs-tc
+PASS: gdb.base/structs.exp: return value known implies finish value known; return 7 structs-tc
+PASS: gdb.base/structs.exp: advance to fun<n> for return; return 8 structs-tc
+PASS: gdb.base/structs.exp: zed L<n> for return; return 8 structs-tc
+PASS: gdb.base/structs.exp: return foo<n>; return 8 structs-tc
+PASS: gdb.base/structs.exp: value foo<n> returned; return 8 structs-tc
+PASS: gdb.base/structs.exp: advance to fun<n> for finish; return 8 structs-tc
+PASS: gdb.base/structs.exp: zed L<n> for finish; return 8 structs-tc
+PASS: gdb.base/structs.exp: finish foo<n>; return 8 structs-tc
+PASS: gdb.base/structs.exp: value foo<n> finished; return 8 structs-tc
+PASS: gdb.base/structs.exp: return value known implies finish value known; return 8 structs-tc
+PASS: gdb.base/structs.exp: set print sevenbit-strings
+PASS: gdb.base/structs.exp: set print address off
+PASS: gdb.base/structs.exp: set width 0
+PASS: gdb.base/structs.exp: set print elements 300
+PASS: gdb.base/structs.exp: ptype foo1; structs-ts
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 1 structs-ts
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 1 structs-ts
+PASS: gdb.base/structs.exp: p/c L<n>; call 1 structs-ts
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 2 structs-ts
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 2 structs-ts
+PASS: gdb.base/structs.exp: p/c L<n>; call 2 structs-ts
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 3 structs-ts
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 3 structs-ts
+PASS: gdb.base/structs.exp: p/c L<n>; call 3 structs-ts
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 4 structs-ts
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 4 structs-ts
+PASS: gdb.base/structs.exp: p/c L<n>; call 4 structs-ts
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 5 structs-ts
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 5 structs-ts
+PASS: gdb.base/structs.exp: p/c L<n>; call 5 structs-ts
+PASS: gdb.base/structs.exp: advance to fun<n> for return; return 1 structs-ts
+PASS: gdb.base/structs.exp: zed L<n> for return; return 1 structs-ts
+PASS: gdb.base/structs.exp: return foo<n>; return 1 structs-ts
+PASS: gdb.base/structs.exp: value foo<n> returned; return 1 structs-ts
+PASS: gdb.base/structs.exp: advance to fun<n> for finish; return 1 structs-ts
+PASS: gdb.base/structs.exp: zed L<n> for finish; return 1 structs-ts
+PASS: gdb.base/structs.exp: finish foo<n>; return 1 structs-ts
+PASS: gdb.base/structs.exp: value foo<n> finished; return 1 structs-ts
+PASS: gdb.base/structs.exp: return value known implies finish value known; return 1 structs-ts
+PASS: gdb.base/structs.exp: advance to fun<n> for return; return 2 structs-ts
+PASS: gdb.base/structs.exp: zed L<n> for return; return 2 structs-ts
+PASS: gdb.base/structs.exp: return foo<n>; return 2 structs-ts
+PASS: gdb.base/structs.exp: value foo<n> returned; return 2 structs-ts
+PASS: gdb.base/structs.exp: advance to fun<n> for finish; return 2 structs-ts
+PASS: gdb.base/structs.exp: zed L<n> for finish; return 2 structs-ts
+PASS: gdb.base/structs.exp: finish foo<n>; return 2 structs-ts
+PASS: gdb.base/structs.exp: value foo<n> finished; return 2 structs-ts
+PASS: gdb.base/structs.exp: return value known implies finish value known; return 2 structs-ts
+PASS: gdb.base/structs.exp: advance to fun<n> for return; return 3 structs-ts
+PASS: gdb.base/structs.exp: zed L<n> for return; return 3 structs-ts
+PASS: gdb.base/structs.exp: return foo<n>; return 3 structs-ts
+PASS: gdb.base/structs.exp: value foo<n> returned; return 3 structs-ts
+PASS: gdb.base/structs.exp: advance to fun<n> for finish; return 3 structs-ts
+PASS: gdb.base/structs.exp: zed L<n> for finish; return 3 structs-ts
+PASS: gdb.base/structs.exp: finish foo<n>; return 3 structs-ts
+PASS: gdb.base/structs.exp: value foo<n> finished; return 3 structs-ts
+PASS: gdb.base/structs.exp: return value known implies finish value known; return 3 structs-ts
+PASS: gdb.base/structs.exp: advance to fun<n> for return; return 4 structs-ts
+PASS: gdb.base/structs.exp: zed L<n> for return; return 4 structs-ts
+PASS: gdb.base/structs.exp: return foo<n>; return 4 structs-ts
+PASS: gdb.base/structs.exp: value foo<n> returned; return 4 structs-ts
+PASS: gdb.base/structs.exp: advance to fun<n> for finish; return 4 structs-ts
+PASS: gdb.base/structs.exp: zed L<n> for finish; return 4 structs-ts
+PASS: gdb.base/structs.exp: finish foo<n>; return 4 structs-ts
+PASS: gdb.base/structs.exp: value foo<n> finished; return 4 structs-ts
+PASS: gdb.base/structs.exp: return value known implies finish value known; return 4 structs-ts
+PASS: gdb.base/structs.exp: set print sevenbit-strings
+PASS: gdb.base/structs.exp: set print address off
+PASS: gdb.base/structs.exp: set width 0
+PASS: gdb.base/structs.exp: set print elements 300
+PASS: gdb.base/structs.exp: ptype foo1; structs-ti
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 1 structs-ti
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 1 structs-ti
+PASS: gdb.base/structs.exp: p/c L<n>; call 1 structs-ti
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 2 structs-ti
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 2 structs-ti
+PASS: gdb.base/structs.exp: p/c L<n>; call 2 structs-ti
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 3 structs-ti
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 3 structs-ti
+PASS: gdb.base/structs.exp: p/c L<n>; call 3 structs-ti
+PASS: gdb.base/structs.exp: advance to fun<n> for return; return 1 structs-ti
+PASS: gdb.base/structs.exp: zed L<n> for return; return 1 structs-ti
+PASS: gdb.base/structs.exp: return foo<n>; return 1 structs-ti
+PASS: gdb.base/structs.exp: value foo<n> returned; return 1 structs-ti
+PASS: gdb.base/structs.exp: advance to fun<n> for finish; return 1 structs-ti
+PASS: gdb.base/structs.exp: zed L<n> for finish; return 1 structs-ti
+PASS: gdb.base/structs.exp: finish foo<n>; return 1 structs-ti
+PASS: gdb.base/structs.exp: value foo<n> finished; return 1 structs-ti
+PASS: gdb.base/structs.exp: return value known implies finish value known; return 1 structs-ti
+PASS: gdb.base/structs.exp: advance to fun<n> for return; return 2 structs-ti
+PASS: gdb.base/structs.exp: zed L<n> for return; return 2 structs-ti
+PASS: gdb.base/structs.exp: return foo<n>; return 2 structs-ti
+PASS: gdb.base/structs.exp: value foo<n> returned; return 2 structs-ti
+PASS: gdb.base/structs.exp: advance to fun<n> for finish; return 2 structs-ti
+PASS: gdb.base/structs.exp: zed L<n> for finish; return 2 structs-ti
+PASS: gdb.base/structs.exp: finish foo<n>; return 2 structs-ti
+PASS: gdb.base/structs.exp: value foo<n> finished; return 2 structs-ti
+PASS: gdb.base/structs.exp: return value known implies finish value known; return 2 structs-ti
+PASS: gdb.base/structs.exp: set print sevenbit-strings
+PASS: gdb.base/structs.exp: set print address off
+PASS: gdb.base/structs.exp: set width 0
+PASS: gdb.base/structs.exp: set print elements 300
+PASS: gdb.base/structs.exp: ptype foo1; structs-tl
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 1 structs-tl
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 1 structs-tl
+PASS: gdb.base/structs.exp: p/c L<n>; call 1 structs-tl
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 2 structs-tl
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 2 structs-tl
+PASS: gdb.base/structs.exp: p/c L<n>; call 2 structs-tl
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 3 structs-tl
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 3 structs-tl
+PASS: gdb.base/structs.exp: p/c L<n>; call 3 structs-tl
+PASS: gdb.base/structs.exp: advance to fun<n> for return; return 1 structs-tl
+PASS: gdb.base/structs.exp: zed L<n> for return; return 1 structs-tl
+PASS: gdb.base/structs.exp: return foo<n>; return 1 structs-tl
+PASS: gdb.base/structs.exp: value foo<n> returned; return 1 structs-tl
+PASS: gdb.base/structs.exp: advance to fun<n> for finish; return 1 structs-tl
+PASS: gdb.base/structs.exp: zed L<n> for finish; return 1 structs-tl
+PASS: gdb.base/structs.exp: finish foo<n>; return 1 structs-tl
+PASS: gdb.base/structs.exp: value foo<n> finished; return 1 structs-tl
+PASS: gdb.base/structs.exp: return value known implies finish value known; return 1 structs-tl
+PASS: gdb.base/structs.exp: advance to fun<n> for return; return 2 structs-tl
+PASS: gdb.base/structs.exp: zed L<n> for return; return 2 structs-tl
+PASS: gdb.base/structs.exp: return foo<n>; return 2 structs-tl
+PASS: gdb.base/structs.exp: value foo<n> returned; return 2 structs-tl
+PASS: gdb.base/structs.exp: advance to fun<n> for finish; return 2 structs-tl
+PASS: gdb.base/structs.exp: zed L<n> for finish; return 2 structs-tl
+PASS: gdb.base/structs.exp: finish foo<n>; return 2 structs-tl
+PASS: gdb.base/structs.exp: value foo<n> finished; return 2 structs-tl
+PASS: gdb.base/structs.exp: return value known implies finish value known; return 2 structs-tl
+PASS: gdb.base/structs.exp: set print sevenbit-strings
+PASS: gdb.base/structs.exp: set print address off
+PASS: gdb.base/structs.exp: set width 0
+PASS: gdb.base/structs.exp: set print elements 300
+PASS: gdb.base/structs.exp: ptype foo1; structs-tll
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 1 structs-tll
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 1 structs-tll
+PASS: gdb.base/structs.exp: p/c L<n>; call 1 structs-tll
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 2 structs-tll
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 2 structs-tll
+PASS: gdb.base/structs.exp: p/c L<n>; call 2 structs-tll
+PASS: gdb.base/structs.exp: advance to fun<n> for return; return 1 structs-tll
+PASS: gdb.base/structs.exp: zed L<n> for return; return 1 structs-tll
+PASS: gdb.base/structs.exp: return foo<n>; return 1 structs-tll
+PASS: gdb.base/structs.exp: value foo<n> returned; return 1 structs-tll
+PASS: gdb.base/structs.exp: advance to fun<n> for finish; return 1 structs-tll
+PASS: gdb.base/structs.exp: zed L<n> for finish; return 1 structs-tll
+PASS: gdb.base/structs.exp: finish foo<n>; return 1 structs-tll
+PASS: gdb.base/structs.exp: value foo<n> finished; return 1 structs-tll
+PASS: gdb.base/structs.exp: return value known implies finish value known; return 1 structs-tll
+PASS: gdb.base/structs.exp: set print sevenbit-strings
+PASS: gdb.base/structs.exp: set print address off
+PASS: gdb.base/structs.exp: set width 0
+PASS: gdb.base/structs.exp: set print elements 300
+PASS: gdb.base/structs.exp: ptype foo1; structs-tf
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 1 structs-tf
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 1 structs-tf
+PASS: gdb.base/structs.exp: p/c L<n>; call 1 structs-tf
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 2 structs-tf
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 2 structs-tf
+PASS: gdb.base/structs.exp: p/c L<n>; call 2 structs-tf
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 3 structs-tf
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 3 structs-tf
+PASS: gdb.base/structs.exp: p/c L<n>; call 3 structs-tf
+PASS: gdb.base/structs.exp: advance to fun<n> for return; return 1 structs-tf
+PASS: gdb.base/structs.exp: zed L<n> for return; return 1 structs-tf
+PASS: gdb.base/structs.exp: return foo<n>; return 1 structs-tf
+PASS: gdb.base/structs.exp: value foo<n> returned; return 1 structs-tf
+PASS: gdb.base/structs.exp: advance to fun<n> for finish; return 1 structs-tf
+PASS: gdb.base/structs.exp: zed L<n> for finish; return 1 structs-tf
+PASS: gdb.base/structs.exp: finish foo<n>; return 1 structs-tf
+PASS: gdb.base/structs.exp: value foo<n> finished; return 1 structs-tf
+PASS: gdb.base/structs.exp: return value known implies finish value known; return 1 structs-tf
+PASS: gdb.base/structs.exp: advance to fun<n> for return; return 2 structs-tf
+PASS: gdb.base/structs.exp: zed L<n> for return; return 2 structs-tf
+PASS: gdb.base/structs.exp: return foo<n>; return 2 structs-tf
+PASS: gdb.base/structs.exp: value foo<n> returned; return 2 structs-tf
+PASS: gdb.base/structs.exp: advance to fun<n> for finish; return 2 structs-tf
+PASS: gdb.base/structs.exp: zed L<n> for finish; return 2 structs-tf
+PASS: gdb.base/structs.exp: finish foo<n>; return 2 structs-tf
+PASS: gdb.base/structs.exp: value foo<n> finished; return 2 structs-tf
+PASS: gdb.base/structs.exp: return value known implies finish value known; return 2 structs-tf
+PASS: gdb.base/structs.exp: set print sevenbit-strings
+PASS: gdb.base/structs.exp: set print address off
+PASS: gdb.base/structs.exp: set width 0
+PASS: gdb.base/structs.exp: set print elements 300
+PASS: gdb.base/structs.exp: ptype foo1; structs-td
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 1 structs-td
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 1 structs-td
+PASS: gdb.base/structs.exp: p/c L<n>; call 1 structs-td
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 2 structs-td
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 2 structs-td
+PASS: gdb.base/structs.exp: p/c L<n>; call 2 structs-td
+PASS: gdb.base/structs.exp: advance to fun<n> for return; return 1 structs-td
+PASS: gdb.base/structs.exp: zed L<n> for return; return 1 structs-td
+PASS: gdb.base/structs.exp: return foo<n>; return 1 structs-td
+PASS: gdb.base/structs.exp: value foo<n> returned; return 1 structs-td
+PASS: gdb.base/structs.exp: advance to fun<n> for finish; return 1 structs-td
+PASS: gdb.base/structs.exp: zed L<n> for finish; return 1 structs-td
+PASS: gdb.base/structs.exp: finish foo<n>; return 1 structs-td
+PASS: gdb.base/structs.exp: value foo<n> finished; return 1 structs-td
+PASS: gdb.base/structs.exp: return value known implies finish value known; return 1 structs-td
+PASS: gdb.base/structs.exp: set print sevenbit-strings
+PASS: gdb.base/structs.exp: set print address off
+PASS: gdb.base/structs.exp: set width 0
+PASS: gdb.base/structs.exp: set print elements 300
+PASS: gdb.base/structs.exp: ptype foo1; structs-tld
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 1 structs-tld
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 1 structs-tld
+PASS: gdb.base/structs.exp: p/c L<n>; call 1 structs-tld
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 2 structs-tld
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 2 structs-tld
+PASS: gdb.base/structs.exp: p/c L<n>; call 2 structs-tld
+PASS: gdb.base/structs.exp: advance to fun<n> for return; return 1 structs-tld
+PASS: gdb.base/structs.exp: zed L<n> for return; return 1 structs-tld
+PASS: gdb.base/structs.exp: return foo<n>; return 1 structs-tld
+PASS: gdb.base/structs.exp: value foo<n> returned; return 1 structs-tld
+PASS: gdb.base/structs.exp: advance to fun<n> for finish; return 1 structs-tld
+PASS: gdb.base/structs.exp: zed L<n> for finish; return 1 structs-tld
+PASS: gdb.base/structs.exp: finish foo<n>; return 1 structs-tld
+PASS: gdb.base/structs.exp: value foo<n> finished; return 1 structs-tld
+PASS: gdb.base/structs.exp: return value known implies finish value known; return 1 structs-tld
+PASS: gdb.base/structs.exp: set print sevenbit-strings
+PASS: gdb.base/structs.exp: set print address off
+PASS: gdb.base/structs.exp: set width 0
+PASS: gdb.base/structs.exp: set print elements 300
+PASS: gdb.base/structs.exp: ptype foo2; structs-ts-tc
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 2 structs-ts-tc
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 2 structs-ts-tc
+PASS: gdb.base/structs.exp: p/c L<n>; call 2 structs-ts-tc
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 3 structs-ts-tc
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 3 structs-ts-tc
+PASS: gdb.base/structs.exp: p/c L<n>; call 3 structs-ts-tc
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 4 structs-ts-tc
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 4 structs-ts-tc
+PASS: gdb.base/structs.exp: p/c L<n>; call 4 structs-ts-tc
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 5 structs-ts-tc
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 5 structs-ts-tc
+PASS: gdb.base/structs.exp: p/c L<n>; call 5 structs-ts-tc
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 6 structs-ts-tc
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 6 structs-ts-tc
+PASS: gdb.base/structs.exp: p/c L<n>; call 6 structs-ts-tc
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 7 structs-ts-tc
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 7 structs-ts-tc
+PASS: gdb.base/structs.exp: p/c L<n>; call 7 structs-ts-tc
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 8 structs-ts-tc
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 8 structs-ts-tc
+PASS: gdb.base/structs.exp: p/c L<n>; call 8 structs-ts-tc
+PASS: gdb.base/structs.exp: advance to fun<n> for return; return 2 structs-ts-tc
+PASS: gdb.base/structs.exp: zed L<n> for return; return 2 structs-ts-tc
+PASS: gdb.base/structs.exp: return foo<n>; return 2 structs-ts-tc
+PASS: gdb.base/structs.exp: value foo<n> returned; return 2 structs-ts-tc
+PASS: gdb.base/structs.exp: advance to fun<n> for finish; return 2 structs-ts-tc
+PASS: gdb.base/structs.exp: zed L<n> for finish; return 2 structs-ts-tc
+PASS: gdb.base/structs.exp: finish foo<n>; return 2 structs-ts-tc
+PASS: gdb.base/structs.exp: value foo<n> finished; return 2 structs-ts-tc
+PASS: gdb.base/structs.exp: return value known implies finish value known; return 2 structs-ts-tc
+PASS: gdb.base/structs.exp: set print sevenbit-strings
+PASS: gdb.base/structs.exp: set print address off
+PASS: gdb.base/structs.exp: set width 0
+PASS: gdb.base/structs.exp: set print elements 300
+PASS: gdb.base/structs.exp: ptype foo2; structs-ti-tc
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 2 structs-ti-tc
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 2 structs-ti-tc
+PASS: gdb.base/structs.exp: p/c L<n>; call 2 structs-ti-tc
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 3 structs-ti-tc
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 3 structs-ti-tc
+PASS: gdb.base/structs.exp: p/c L<n>; call 3 structs-ti-tc
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 4 structs-ti-tc
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 4 structs-ti-tc
+PASS: gdb.base/structs.exp: p/c L<n>; call 4 structs-ti-tc
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 5 structs-ti-tc
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 5 structs-ti-tc
+PASS: gdb.base/structs.exp: p/c L<n>; call 5 structs-ti-tc
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 6 structs-ti-tc
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 6 structs-ti-tc
+PASS: gdb.base/structs.exp: p/c L<n>; call 6 structs-ti-tc
+PASS: gdb.base/structs.exp: advance to fun<n> for return; return 2 structs-ti-tc
+PASS: gdb.base/structs.exp: zed L<n> for return; return 2 structs-ti-tc
+PASS: gdb.base/structs.exp: return foo<n>; return 2 structs-ti-tc
+PASS: gdb.base/structs.exp: value foo<n> returned; return 2 structs-ti-tc
+PASS: gdb.base/structs.exp: advance to fun<n> for finish; return 2 structs-ti-tc
+PASS: gdb.base/structs.exp: zed L<n> for finish; return 2 structs-ti-tc
+PASS: gdb.base/structs.exp: finish foo<n>; return 2 structs-ti-tc
+PASS: gdb.base/structs.exp: value foo<n> finished; return 2 structs-ti-tc
+PASS: gdb.base/structs.exp: return value known implies finish value known; return 2 structs-ti-tc
+PASS: gdb.base/structs.exp: set print sevenbit-strings
+PASS: gdb.base/structs.exp: set print address off
+PASS: gdb.base/structs.exp: set width 0
+PASS: gdb.base/structs.exp: set print elements 300
+PASS: gdb.base/structs.exp: ptype foo2; structs-tl-tc
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 2 structs-tl-tc
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 2 structs-tl-tc
+PASS: gdb.base/structs.exp: p/c L<n>; call 2 structs-tl-tc
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 3 structs-tl-tc
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 3 structs-tl-tc
+PASS: gdb.base/structs.exp: p/c L<n>; call 3 structs-tl-tc
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 4 structs-tl-tc
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 4 structs-tl-tc
+PASS: gdb.base/structs.exp: p/c L<n>; call 4 structs-tl-tc
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 5 structs-tl-tc
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 5 structs-tl-tc
+PASS: gdb.base/structs.exp: p/c L<n>; call 5 structs-tl-tc
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 6 structs-tl-tc
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 6 structs-tl-tc
+PASS: gdb.base/structs.exp: p/c L<n>; call 6 structs-tl-tc
+PASS: gdb.base/structs.exp: advance to fun<n> for return; return 2 structs-tl-tc
+PASS: gdb.base/structs.exp: zed L<n> for return; return 2 structs-tl-tc
+PASS: gdb.base/structs.exp: return foo<n>; return 2 structs-tl-tc
+PASS: gdb.base/structs.exp: value foo<n> returned; return 2 structs-tl-tc
+PASS: gdb.base/structs.exp: advance to fun<n> for finish; return 2 structs-tl-tc
+PASS: gdb.base/structs.exp: zed L<n> for finish; return 2 structs-tl-tc
+PASS: gdb.base/structs.exp: finish foo<n>; return 2 structs-tl-tc
+PASS: gdb.base/structs.exp: value foo<n> finished; return 2 structs-tl-tc
+PASS: gdb.base/structs.exp: return value known implies finish value known; return 2 structs-tl-tc
+PASS: gdb.base/structs.exp: set print sevenbit-strings
+PASS: gdb.base/structs.exp: set print address off
+PASS: gdb.base/structs.exp: set width 0
+PASS: gdb.base/structs.exp: set print elements 300
+PASS: gdb.base/structs.exp: ptype foo2; structs-tll-tc
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 2 structs-tll-tc
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 2 structs-tll-tc
+PASS: gdb.base/structs.exp: p/c L<n>; call 2 structs-tll-tc
+PASS: gdb.base/structs.exp: set print sevenbit-strings
+PASS: gdb.base/structs.exp: set print address off
+PASS: gdb.base/structs.exp: set width 0
+PASS: gdb.base/structs.exp: set print elements 300
+PASS: gdb.base/structs.exp: ptype foo2; structs-tf-tc
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 2 structs-tf-tc
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 2 structs-tf-tc
+PASS: gdb.base/structs.exp: p/c L<n>; call 2 structs-tf-tc
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 3 structs-tf-tc
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 3 structs-tf-tc
+PASS: gdb.base/structs.exp: p/c L<n>; call 3 structs-tf-tc
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 4 structs-tf-tc
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 4 structs-tf-tc
+PASS: gdb.base/structs.exp: p/c L<n>; call 4 structs-tf-tc
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 5 structs-tf-tc
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 5 structs-tf-tc
+PASS: gdb.base/structs.exp: p/c L<n>; call 5 structs-tf-tc
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 6 structs-tf-tc
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 6 structs-tf-tc
+PASS: gdb.base/structs.exp: p/c L<n>; call 6 structs-tf-tc
+PASS: gdb.base/structs.exp: advance to fun<n> for return; return 2 structs-tf-tc
+PASS: gdb.base/structs.exp: zed L<n> for return; return 2 structs-tf-tc
+PASS: gdb.base/structs.exp: return foo<n>; return 2 structs-tf-tc
+PASS: gdb.base/structs.exp: value foo<n> returned; return 2 structs-tf-tc
+PASS: gdb.base/structs.exp: advance to fun<n> for finish; return 2 structs-tf-tc
+PASS: gdb.base/structs.exp: zed L<n> for finish; return 2 structs-tf-tc
+PASS: gdb.base/structs.exp: finish foo<n>; return 2 structs-tf-tc
+PASS: gdb.base/structs.exp: value foo<n> finished; return 2 structs-tf-tc
+PASS: gdb.base/structs.exp: return value known implies finish value known; return 2 structs-tf-tc
+PASS: gdb.base/structs.exp: set print sevenbit-strings
+PASS: gdb.base/structs.exp: set print address off
+PASS: gdb.base/structs.exp: set width 0
+PASS: gdb.base/structs.exp: set print elements 300
+PASS: gdb.base/structs.exp: ptype foo2; structs-td-tc
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 2 structs-td-tc
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 2 structs-td-tc
+PASS: gdb.base/structs.exp: p/c L<n>; call 2 structs-td-tc
+PASS: gdb.base/structs.exp: set print sevenbit-strings
+PASS: gdb.base/structs.exp: set print address off
+PASS: gdb.base/structs.exp: set width 0
+PASS: gdb.base/structs.exp: set print elements 300
+PASS: gdb.base/structs.exp: ptype foo2; structs-tld-tc
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 2 structs-tld-tc
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 2 structs-tld-tc
+PASS: gdb.base/structs.exp: p/c L<n>; call 2 structs-tld-tc
+PASS: gdb.base/structs.exp: set print sevenbit-strings
+PASS: gdb.base/structs.exp: set print address off
+PASS: gdb.base/structs.exp: set width 0
+PASS: gdb.base/structs.exp: set print elements 300
+PASS: gdb.base/structs.exp: ptype foo2; structs-tc-ts
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 2 structs-tc-ts
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 2 structs-tc-ts
+PASS: gdb.base/structs.exp: p/c L<n>; call 2 structs-tc-ts
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 3 structs-tc-ts
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 3 structs-tc-ts
+PASS: gdb.base/structs.exp: p/c L<n>; call 3 structs-tc-ts
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 4 structs-tc-ts
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 4 structs-tc-ts
+PASS: gdb.base/structs.exp: p/c L<n>; call 4 structs-tc-ts
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 5 structs-tc-ts
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 5 structs-tc-ts
+PASS: gdb.base/structs.exp: p/c L<n>; call 5 structs-tc-ts
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 6 structs-tc-ts
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 6 structs-tc-ts
+PASS: gdb.base/structs.exp: p/c L<n>; call 6 structs-tc-ts
+PASS: gdb.base/structs.exp: advance to fun<n> for return; return 2 structs-tc-ts
+PASS: gdb.base/structs.exp: zed L<n> for return; return 2 structs-tc-ts
+PASS: gdb.base/structs.exp: return foo<n>; return 2 structs-tc-ts
+PASS: gdb.base/structs.exp: value foo<n> returned; return 2 structs-tc-ts
+PASS: gdb.base/structs.exp: advance to fun<n> for finish; return 2 structs-tc-ts
+PASS: gdb.base/structs.exp: zed L<n> for finish; return 2 structs-tc-ts
+PASS: gdb.base/structs.exp: finish foo<n>; return 2 structs-tc-ts
+PASS: gdb.base/structs.exp: value foo<n> finished; return 2 structs-tc-ts
+PASS: gdb.base/structs.exp: return value known implies finish value known; return 2 structs-tc-ts
+PASS: gdb.base/structs.exp: set print sevenbit-strings
+PASS: gdb.base/structs.exp: set print address off
+PASS: gdb.base/structs.exp: set width 0
+PASS: gdb.base/structs.exp: set print elements 300
+PASS: gdb.base/structs.exp: ptype foo2; structs-tc-ti
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 2 structs-tc-ti
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 2 structs-tc-ti
+PASS: gdb.base/structs.exp: p/c L<n>; call 2 structs-tc-ti
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 3 structs-tc-ti
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 3 structs-tc-ti
+PASS: gdb.base/structs.exp: p/c L<n>; call 3 structs-tc-ti
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 4 structs-tc-ti
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 4 structs-tc-ti
+PASS: gdb.base/structs.exp: p/c L<n>; call 4 structs-tc-ti
+PASS: gdb.base/structs.exp: advance to fun<n> for return; return 2 structs-tc-ti
+PASS: gdb.base/structs.exp: zed L<n> for return; return 2 structs-tc-ti
+PASS: gdb.base/structs.exp: return foo<n>; return 2 structs-tc-ti
+PASS: gdb.base/structs.exp: value foo<n> returned; return 2 structs-tc-ti
+PASS: gdb.base/structs.exp: advance to fun<n> for finish; return 2 structs-tc-ti
+PASS: gdb.base/structs.exp: zed L<n> for finish; return 2 structs-tc-ti
+PASS: gdb.base/structs.exp: finish foo<n>; return 2 structs-tc-ti
+PASS: gdb.base/structs.exp: value foo<n> finished; return 2 structs-tc-ti
+PASS: gdb.base/structs.exp: return value known implies finish value known; return 2 structs-tc-ti
+PASS: gdb.base/structs.exp: set print sevenbit-strings
+PASS: gdb.base/structs.exp: set print address off
+PASS: gdb.base/structs.exp: set width 0
+PASS: gdb.base/structs.exp: set print elements 300
+PASS: gdb.base/structs.exp: ptype foo2; structs-tc-tl
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 2 structs-tc-tl
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 2 structs-tc-tl
+PASS: gdb.base/structs.exp: p/c L<n>; call 2 structs-tc-tl
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 3 structs-tc-tl
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 3 structs-tc-tl
+PASS: gdb.base/structs.exp: p/c L<n>; call 3 structs-tc-tl
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 4 structs-tc-tl
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 4 structs-tc-tl
+PASS: gdb.base/structs.exp: p/c L<n>; call 4 structs-tc-tl
+PASS: gdb.base/structs.exp: advance to fun<n> for return; return 2 structs-tc-tl
+PASS: gdb.base/structs.exp: zed L<n> for return; return 2 structs-tc-tl
+PASS: gdb.base/structs.exp: return foo<n>; return 2 structs-tc-tl
+PASS: gdb.base/structs.exp: value foo<n> returned; return 2 structs-tc-tl
+PASS: gdb.base/structs.exp: advance to fun<n> for finish; return 2 structs-tc-tl
+PASS: gdb.base/structs.exp: zed L<n> for finish; return 2 structs-tc-tl
+PASS: gdb.base/structs.exp: finish foo<n>; return 2 structs-tc-tl
+PASS: gdb.base/structs.exp: value foo<n> finished; return 2 structs-tc-tl
+PASS: gdb.base/structs.exp: return value known implies finish value known; return 2 structs-tc-tl
+PASS: gdb.base/structs.exp: set print sevenbit-strings
+PASS: gdb.base/structs.exp: set print address off
+PASS: gdb.base/structs.exp: set width 0
+PASS: gdb.base/structs.exp: set print elements 300
+PASS: gdb.base/structs.exp: ptype foo2; structs-tc-tll
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 2 structs-tc-tll
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 2 structs-tc-tll
+PASS: gdb.base/structs.exp: p/c L<n>; call 2 structs-tc-tll
+PASS: gdb.base/structs.exp: set print sevenbit-strings
+PASS: gdb.base/structs.exp: set print address off
+PASS: gdb.base/structs.exp: set width 0
+PASS: gdb.base/structs.exp: set print elements 300
+PASS: gdb.base/structs.exp: ptype foo2; structs-tc-tf
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 2 structs-tc-tf
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 2 structs-tc-tf
+PASS: gdb.base/structs.exp: p/c L<n>; call 2 structs-tc-tf
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 3 structs-tc-tf
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 3 structs-tc-tf
+PASS: gdb.base/structs.exp: p/c L<n>; call 3 structs-tc-tf
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 4 structs-tc-tf
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 4 structs-tc-tf
+PASS: gdb.base/structs.exp: p/c L<n>; call 4 structs-tc-tf
+PASS: gdb.base/structs.exp: set print sevenbit-strings
+PASS: gdb.base/structs.exp: set print address off
+PASS: gdb.base/structs.exp: set width 0
+PASS: gdb.base/structs.exp: set print elements 300
+PASS: gdb.base/structs.exp: ptype foo2; structs-tc-td
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 2 structs-tc-td
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 2 structs-tc-td
+PASS: gdb.base/structs.exp: p/c L<n>; call 2 structs-tc-td
+PASS: gdb.base/structs.exp: set print sevenbit-strings
+PASS: gdb.base/structs.exp: set print address off
+PASS: gdb.base/structs.exp: set width 0
+PASS: gdb.base/structs.exp: set print elements 300
+PASS: gdb.base/structs.exp: ptype foo2; structs-tc-tld
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 2 structs-tc-tld
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 2 structs-tc-tld
+PASS: gdb.base/structs.exp: p/c L<n>; call 2 structs-tc-tld
+PASS: gdb.base/structs.exp: set print sevenbit-strings
+PASS: gdb.base/structs.exp: set print address off
+PASS: gdb.base/structs.exp: set width 0
+PASS: gdb.base/structs.exp: set print elements 300
+PASS: gdb.base/structs.exp: ptype foo2; structs-td-tf
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 2 structs-td-tf
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 2 structs-td-tf
+PASS: gdb.base/structs.exp: p/c L<n>; call 2 structs-td-tf
+PASS: gdb.base/structs.exp: advance to fun<n> for return; return 2 structs-td-tf
+PASS: gdb.base/structs.exp: zed L<n> for return; return 2 structs-td-tf
+PASS: gdb.base/structs.exp: return foo<n>; return 2 structs-td-tf
+PASS: gdb.base/structs.exp: value foo<n> returned; return 2 structs-td-tf
+PASS: gdb.base/structs.exp: advance to fun<n> for finish; return 2 structs-td-tf
+PASS: gdb.base/structs.exp: zed L<n> for finish; return 2 structs-td-tf
+PASS: gdb.base/structs.exp: finish foo<n>; return 2 structs-td-tf
+PASS: gdb.base/structs.exp: value foo<n> finished; return 2 structs-td-tf
+PASS: gdb.base/structs.exp: return value known implies finish value known; return 2 structs-td-tf
+PASS: gdb.base/structs.exp: set print sevenbit-strings
+PASS: gdb.base/structs.exp: set print address off
+PASS: gdb.base/structs.exp: set width 0
+PASS: gdb.base/structs.exp: set print elements 300
+PASS: gdb.base/structs.exp: ptype foo2; structs-tf-td
+PASS: gdb.base/structs.exp: p/c fun<n>(); call 2 structs-tf-td
+PASS: gdb.base/structs.exp: call Fun<n>(foo<n>); call 2 structs-tf-td
+PASS: gdb.base/structs.exp: p/c L<n>; call 2 structs-tf-td
+PASS: gdb.base/structs.exp: advance to fun<n> for return; return 2 structs-tf-td
+PASS: gdb.base/structs.exp: zed L<n> for return; return 2 structs-tf-td
+PASS: gdb.base/structs.exp: return foo<n>; return 2 structs-tf-td
+PASS: gdb.base/structs.exp: value foo<n> returned; return 2 structs-tf-td
+PASS: gdb.base/structs.exp: advance to fun<n> for finish; return 2 structs-tf-td
+PASS: gdb.base/structs.exp: zed L<n> for finish; return 2 structs-tf-td
+PASS: gdb.base/structs.exp: finish foo<n>; return 2 structs-tf-td
+PASS: gdb.base/structs.exp: value foo<n> finished; return 2 structs-tf-td
+PASS: gdb.base/structs.exp: return value known implies finish value known; return 2 structs-tf-td
+Running ./gdb.base/subst.exp ...
+PASS: gdb.base/subst.exp: deactivate GDB's confirmation interface
+PASS: gdb.base/subst.exp: show substitute-path, no rule entered yet
+PASS: gdb.base/subst.exp: show substitute-path from, no rule entered yet
+PASS: gdb.base/subst.exp: show substitute-path, too many arguments
+PASS: gdb.base/subst.exp: unset substitute-path from, no rule entered yet
+PASS: gdb.base/subst.exp: unset substitute-path, no rule entered yet
+PASS: gdb.base/subst.exp: unset substitute-path from, no rule entered yet
+PASS: gdb.base/subst.exp: unset substitute-path, too many arguments
+PASS: gdb.base/subst.exp: set substitute-path, too many arguments
+PASS: gdb.base/subst.exp: set substitute-path, too few arguments
+PASS: gdb.base/subst.exp: set substitute-path, first argument is empty string
+PASS: gdb.base/subst.exp: add from -> to substitution rule
+PASS: gdb.base/subst.exp: add from1 -> to1 substitution rule
+PASS: gdb.base/subst.exp: add source -> destination substitution rule
+PASS: gdb.base/subst.exp: add depuis -> vers substitution rule
+PASS: gdb.base/subst.exp: add substitution rule to empty string
+PASS: gdb.base/subst.exp: show substitute-path after all paths added
+PASS: gdb.base/subst.exp: show substitute-path from, after all paths added
+PASS: gdb.base/subst.exp: show substitute-path depuis, after all paths added
+PASS: gdb.base/subst.exp: show substitute-path garbage, after all paths added
+PASS: gdb.base/subst.exp: unset substitute-path from
+PASS: gdb.base/subst.exp: show substitute-path from, after unsetting it
+PASS: gdb.base/subst.exp: show substitute-path after from rule removed
+PASS: gdb.base/subst.exp: unset substitute-path from after the rule was removed
+PASS: gdb.base/subst.exp: unset substitute-path depuis (middle of list)
+PASS: gdb.base/subst.exp: show substitute-path after depuis rule removed
+PASS: gdb.base/subst.exp: unset substitute-path empty (end of list)
+PASS: gdb.base/subst.exp: show substitute-path after empty rule removed
+PASS: gdb.base/subst.exp: remove all remaining substitution rules
+PASS: gdb.base/subst.exp: show substitute-path after all remaining rules removed
+Running ./gdb.base/symbol-without-target_section.exp ...
+PASS: gdb.base/symbol-without-target_section.exp: add-symbol-file
+PASS: gdb.base/symbol-without-target_section.exp: list main
+PASS: gdb.base/symbol-without-target_section.exp: print symbol_without_target_section
+Running ./gdb.base/term.exp ...
+Running ./gdb.base/testenv.exp ...
+Running ./gdb.base/trace-commands.exp ...
+PASS: gdb.base/trace-commands.exp: show trace-commands says off
+PASS: gdb.base/trace-commands.exp: source -v
+PASS: gdb.base/trace-commands.exp: set trace-commands
+PASS: gdb.base/trace-commands.exp: show trace-commands says on
+PASS: gdb.base/trace-commands.exp: simple trace-commands test
+PASS: gdb.base/trace-commands.exp: nested trace-commands test
+PASS: gdb.base/trace-commands.exp: define user command
+PASS: gdb.base/trace-commands.exp: nested trace-commands test with source
+PASS: gdb.base/trace-commands.exp: depth resets on error part 1
+PASS: gdb.base/trace-commands.exp: depth resets on error part 2
+Running ./gdb.base/tui-layout.exp ...
+PASS: gdb.base/tui-layout.exp: layout asm
+Running ./gdb.base/twice.exp ...
+PASS: gdb.base/twice.exp: step
+Running ./gdb.base/type-opaque.exp ...
+PASS: gdb.base/type-opaque.exp: opaque struct type resolving
+PASS: gdb.base/type-opaque.exp: empty struct type resolving
+PASS: gdb.base/type-opaque.exp: filled struct type resolving
+PASS: gdb.base/type-opaque.exp: opaque union type resolving
+PASS: gdb.base/type-opaque.exp: empty union type resolving
+PASS: gdb.base/type-opaque.exp: filled union type resolving
+Running ./gdb.base/ui-redirect.exp ...
+PASS: gdb.base/ui-redirect.exp: commands
+PASS: gdb.base/ui-redirect.exp: print 1
+PASS: gdb.base/ui-redirect.exp: end
+PASS: gdb.base/ui-redirect.exp: set logging file /dev/null
+PASS: gdb.base/ui-redirect.exp: set logging on
+PASS: gdb.base/ui-redirect.exp: save breakpoints /dev/null
+PASS: gdb.base/ui-redirect.exp: set logging off
+PASS: gdb.base/ui-redirect.exp: help
+Running ./gdb.base/unload.exp ...
+PASS: gdb.base/unload.exp: pending breakpoint info before run
+PASS: gdb.base/unload.exp: running program
+PASS: gdb.base/unload.exp: pending breakpoint info on first run at shrfunc1
+PASS: gdb.base/unload.exp: continuing to unloaded libfile
+PASS: gdb.base/unload.exp: print y from libfile
+PASS: gdb.base/unload.exp: rerun to shared library breakpoint
+PASS: gdb.base/unload.exp: pending breakpoint info on second run at shrfunc1
+PASS: gdb.base/unload.exp: continuing to unloaded libfile
+PASS: gdb.base/unload.exp: continue to shrfunc2
+PASS: gdb.base/unload.exp: pending breakpoint info on second run at shrfunc2
+PASS: gdb.base/unload.exp: continuing to unloaded libfile2
+PASS: gdb.base/unload.exp: print y from libfile2
+Running ./gdb.base/until.exp ...
+PASS: gdb.base/until.exp: until line number
+PASS: gdb.base/until.exp: malformed until
+PASS: gdb.base/until.exp: until factorial, recursive function
+PASS: gdb.base/until.exp: until func, not called by current frame
+Running ./gdb.base/unwindonsignal.exp ...
+Running ./gdb.base/valgrind-db-attach.exp ...
+Running ./gdb.base/valgrind-infcall.exp ...
+Running ./gdb.base/value-double-free.exp ...
+PASS: gdb.base/value-double-free.exp: watch var
+PASS: gdb.base/value-double-free.exp: continue
+PASS: gdb.base/value-double-free.exp: print empty()
+PASS: gdb.base/value-double-free.exp: help help
+Running ./gdb.base/varargs.exp ...
+PASS: gdb.base/varargs.exp: set print sevenbit-strings
+PASS: gdb.base/varargs.exp: set print address off
+PASS: gdb.base/varargs.exp: set width 0
+Running ./gdb.base/volatile.exp ...
+PASS: gdb.base/volatile.exp: continue to marker1
+PASS: gdb.base/volatile.exp: up from marker1
+PASS: gdb.base/volatile.exp: ptype vox
+PASS: gdb.base/volatile.exp: ptype victuals
+PASS: gdb.base/volatile.exp: ptype vixen
+PASS: gdb.base/volatile.exp: ptype vitriol
+PASS: gdb.base/volatile.exp: ptype vellum
+PASS: gdb.base/volatile.exp: ptype valve
+PASS: gdb.base/volatile.exp: ptype vacuity
+PASS: gdb.base/volatile.exp: ptype vertigo
+PASS: gdb.base/volatile.exp: ptype vampire
+PASS: gdb.base/volatile.exp: ptype viper
+PASS: gdb.base/volatile.exp: ptype vigour
+PASS: gdb.base/volatile.exp: ptype vapour
+PASS: gdb.base/volatile.exp: ptype ventricle
+PASS: gdb.base/volatile.exp: ptype vigintillion
+PASS: gdb.base/volatile.exp: ptype vocation
+PASS: gdb.base/volatile.exp: ptype veracity
+PASS: gdb.base/volatile.exp: ptype vapidity
+PASS: gdb.base/volatile.exp: ptype velocity
+PASS: gdb.base/volatile.exp: ptype veneer
+PASS: gdb.base/volatile.exp: ptype video
+PASS: gdb.base/volatile.exp: ptype vacuum
+PASS: gdb.base/volatile.exp: ptype veniality
+PASS: gdb.base/volatile.exp: ptype vitality
+PASS: gdb.base/volatile.exp: ptype voracity
+PASS: gdb.base/volatile.exp: ptype victor
+PASS: gdb.base/volatile.exp: ptype vicar
+PASS: gdb.base/volatile.exp: ptype victory
+PASS: gdb.base/volatile.exp: ptype vicarage
+PASS: gdb.base/volatile.exp: ptype vein
+PASS: gdb.base/volatile.exp: ptype vogue
+PASS: gdb.base/volatile.exp: ptype cavern
+PASS: gdb.base/volatile.exp: ptype coverlet
+PASS: gdb.base/volatile.exp: ptype caveat
+PASS: gdb.base/volatile.exp: ptype covenant
+PASS: gdb.base/volatile.exp: ptype vizier
+PASS: gdb.base/volatile.exp: ptype vanadium
+PASS: gdb.base/volatile.exp: ptype vane
+PASS: gdb.base/volatile.exp: ptype veldt
+PASS: gdb.base/volatile.exp: ptype cove
+PASS: gdb.base/volatile.exp: ptype cavity
+PASS: gdb.base/volatile.exp: ptype vagus
+PASS: gdb.base/volatile.exp: ptype vagrancy
+PASS: gdb.base/volatile.exp: ptype vagary
+PASS: gdb.base/volatile.exp: ptype vendor
+PASS: gdb.base/volatile.exp: ptype qux2
+Running ./gdb.base/watch-cond.exp ...
+PASS: gdb.base/watch-cond.exp: set write watchpoint on global variable, local condition
+PASS: gdb.base/watch-cond.exp: watchpoint with global expression, local condition evaluates in correct frame
+PASS: gdb.base/watch-cond.exp: set write watchpoint on local variable, local condition
+PASS: gdb.base/watch-cond.exp: watchpoint with local expression, local condition evaluates in correct frame
+PASS: gdb.base/watch-cond.exp: set write watchpoint on global2 variable
+PASS: gdb.base/watch-cond.exp: watchpoint on global2 variable triggers
+PASS: gdb.base/watch-cond.exp: condition of watchpoint 2 changes
+PASS: gdb.base/watch-cond.exp: watchpoint stops with untestable local expression
+Running ./gdb.base/watch-cond-infcall.exp ...
+PASS: gdb.base/watch-cond-infcall.exp: sw: watch var if return_1 ()
+PASS: gdb.base/watch-cond-infcall.exp: sw: continue
+Running ./gdb.base/watch-non-mem.exp ...
+PASS: gdb.base/watch-non-mem.exp: set write watchpoint on $pc
+PASS: gdb.base/watch-non-mem.exp: watchpoint on $pc works
+Running ./gdb.base/watchpoint-cond-gone.exp ...
+PASS: gdb.base/watchpoint-cond-gone.exp: set can-use-hw-watchpoints 0
+PASS: gdb.base/watchpoint-cond-gone.exp: continue to breakpoint: Place to set the watchpoint
+PASS: gdb.base/watchpoint-cond-gone.exp: Place the watchpoint
+PASS: gdb.base/watchpoint-cond-gone.exp: Catch the no longer valid watchpoint
+Running ./gdb.base/watchpoint-delete.exp ...
+PASS: gdb.base/watchpoint-delete.exp: set can-use-hw-watchpoints 0
+PASS: gdb.base/watchpoint-delete.exp: continue to breakpoint: break-here
+PASS: gdb.base/watchpoint-delete.exp: watch x
+PASS: gdb.base/watchpoint-delete.exp: delete $bpnum
+Running ./gdb.base/watchpoint.exp ...
+PASS: gdb.base/watchpoint.exp: disable fast watches
+PASS: gdb.base/watchpoint.exp: show disable fast watches
+PASS: gdb.base/watchpoint.exp: set slow conditional watch
+PASS: gdb.base/watchpoint.exp: trigger slow conditional watch
+PASS: gdb.base/watchpoint.exp: delete watch ival3
+PASS: gdb.base/watchpoint.exp: set slow condition watch w/thread
+PASS: gdb.base/watchpoint.exp: delete watch w/condition and thread
+PASS: gdb.base/watchpoint.exp: rwatch disallowed when can-set-hw-watchpoints cleared
+PASS: gdb.base/watchpoint.exp: set breakpoint at marker1
+PASS: gdb.base/watchpoint.exp: set breakpoint at marker2
+PASS: gdb.base/watchpoint.exp: info break in watchpoint.exp
+PASS: gdb.base/watchpoint.exp: set watchpoint on ival3
+PASS: gdb.base/watchpoint.exp: watchpoint found in watchpoint/breakpoint table
+PASS: gdb.base/watchpoint.exp: disable watchpoint
+PASS: gdb.base/watchpoint.exp: disable watchpoint in test_simple_watchpoint
+PASS: gdb.base/watchpoint.exp: run to marker1 in test_simple_watchpoint
+PASS: gdb.base/watchpoint.exp: enable watchpoint
+PASS: gdb.base/watchpoint.exp: break func1
+PASS: gdb.base/watchpoint.exp: set $func1_breakpoint_number = $bpnum
+PASS: gdb.base/watchpoint.exp: continue to breakpoint at func1
+PASS: gdb.base/watchpoint.exp: watchpoint hit, first time
+PASS: gdb.base/watchpoint.exp: Watchpoint hit count is 1
+PASS: gdb.base/watchpoint.exp: delete $func1_breakpoint_number
+PASS: gdb.base/watchpoint.exp: watchpoint hit, second time
+PASS: gdb.base/watchpoint.exp: Watchpoint hit count is 2
+PASS: gdb.base/watchpoint.exp: watchpoint hit, third time
+PASS: gdb.base/watchpoint.exp: Watchpoint hit count is 3
+PASS: gdb.base/watchpoint.exp: watchpoint hit, fourth time
+PASS: gdb.base/watchpoint.exp: Watchpoint hit count is 4
+PASS: gdb.base/watchpoint.exp: watchpoint hit, fifth time
+PASS: gdb.base/watchpoint.exp: Watchpoint hit count is 5
+PASS: gdb.base/watchpoint.exp: continue to marker2
+PASS: gdb.base/watchpoint.exp: watchpoint disabled
+PASS: gdb.base/watchpoint.exp: continue until exit at continue to exit in test_simple_watchpoint
+PASS: gdb.base/watchpoint.exp: watchpoints found in watchpoint/breakpoint table
+PASS: gdb.base/watchpoint.exp: disable watchpoint in test_disabling_watchpoints
+PASS: gdb.base/watchpoint.exp: run to marker1 in test_disabling_watchpoints
+PASS: gdb.base/watchpoint.exp: watchpoint enabled
+PASS: gdb.base/watchpoint.exp: watchpoint hit in test_disabling_watchpoints, first time
+PASS: gdb.base/watchpoint.exp: watchpoint hit in test_disabling_watchpoints, second time
+PASS: gdb.base/watchpoint.exp: disable watchpoint #2 in test_disabling_watchpoints
+PASS: gdb.base/watchpoint.exp: watchpoint disabled in table
+PASS: gdb.base/watchpoint.exp: disabled watchpoint skipped
+PASS: gdb.base/watchpoint.exp: continue until exit at continue to exit in test_disabling_watchpoints
+PASS: gdb.base/watchpoint.exp: watch ival2
+PASS: gdb.base/watchpoint.exp: break func2 if 0
+PASS: gdb.base/watchpoint.exp: p $func2_breakpoint_number = $bpnum
+PASS: gdb.base/watchpoint.exp: calling function with watchpoint enabled
+PASS: gdb.base/watchpoint.exp: finish from marker1
+PASS: gdb.base/watchpoint.exp: back at main from marker1
+PASS: gdb.base/watchpoint.exp: next to `for' in watchpoint.exp
+PASS: gdb.base/watchpoint.exp: until to ival1 assignment
+PASS: gdb.base/watchpoint.exp: until to ival3 assignment
+PASS: gdb.base/watchpoint.exp: until out of loop
+PASS: gdb.base/watchpoint.exp: step to ival2 assignment
+PASS: gdb.base/watchpoint.exp: watch ptr1->val
+PASS: gdb.base/watchpoint.exp: break marker5
+PASS: gdb.base/watchpoint.exp: Test complex watchpoint
+PASS: gdb.base/watchpoint.exp: did not trigger wrong watchpoint
+PASS: gdb.base/watchpoint.exp: disable in test_complex_watchpoint
+PASS: gdb.base/watchpoint.exp: break marker6
+PASS: gdb.base/watchpoint.exp: continue to marker6
+PASS: gdb.base/watchpoint.exp: continue to breakpoint: func2 breakpoint here
+PASS: gdb.base/watchpoint.exp: set local watch
+PASS: gdb.base/watchpoint.exp: trigger local watch
+PASS: gdb.base/watchpoint.exp: self-delete local watch
+PASS: gdb.base/watchpoint.exp: continue to breakpoint: func2 breakpoint here
+PASS: gdb.base/watchpoint.exp: set partially local watch
+PASS: gdb.base/watchpoint.exp: trigger1 partially local watch
+PASS: gdb.base/watchpoint.exp: trigger2 partially local watch
+PASS: gdb.base/watchpoint.exp: self-delete partially local watch
+PASS: gdb.base/watchpoint.exp: continue to breakpoint: func2 breakpoint here
+PASS: gdb.base/watchpoint.exp: set static local watch
+PASS: gdb.base/watchpoint.exp: trigger static local watch
+PASS: gdb.base/watchpoint.exp: continue after trigger static local watch
+PASS: gdb.base/watchpoint.exp: static local watch did not self-delete
+PASS: gdb.base/watchpoint.exp: tbreak recurser
+PASS: gdb.base/watchpoint.exp: cont
+PASS: gdb.base/watchpoint.exp: next past local_x initialization
+PASS: gdb.base/watchpoint.exp: set local watch in recursive call
+PASS: gdb.base/watchpoint.exp: trigger local watch in recursive call
+PASS: gdb.base/watchpoint.exp: self-delete local watch in recursive call
+PASS: gdb.base/watchpoint.exp: cont
+PASS: gdb.base/watchpoint.exp: tbreak recurser
+PASS: gdb.base/watchpoint.exp: cont
+PASS: gdb.base/watchpoint.exp: next past local_x initialization
+PASS: gdb.base/watchpoint.exp: set local watch in recursive call with explicit scope
+PASS: gdb.base/watchpoint.exp: trigger local watch with explicit scope in recursive call
+PASS: gdb.base/watchpoint.exp: self-delete local watch with explicit scope in recursive call (2)
+PASS: gdb.base/watchpoint.exp: disable in test_complex_watchpoint
+PASS: gdb.base/watchpoint.exp: continue until exit at continue to exit in test_complex_watchpoint
+PASS: gdb.base/watchpoint.exp: watchpoint refused to insert on nonexistent struct member
+PASS: gdb.base/watchpoint.exp: watch global_ptr
+PASS: gdb.base/watchpoint.exp: watch *(int *) 0
+PASS: gdb.base/watchpoint.exp: watch -location *global_ptr
+PASS: gdb.base/watchpoint.exp: watch *global_ptr
+PASS: gdb.base/watchpoint.exp: set $global_ptr_breakpoint_number = $bpnum
+PASS: gdb.base/watchpoint.exp: global_ptr next
+PASS: gdb.base/watchpoint.exp: next over ptr init
+PASS: gdb.base/watchpoint.exp: next over buffer set
+PASS: gdb.base/watchpoint.exp: delete $global_ptr_breakpoint_number
+PASS: gdb.base/watchpoint.exp: watch **global_ptr_ptr
+PASS: gdb.base/watchpoint.exp: set $global_ptr_ptr_breakpoint_number = $bpnum
+PASS: gdb.base/watchpoint.exp: global_ptr_ptr next
+PASS: gdb.base/watchpoint.exp: next over global_ptr_ptr init
+PASS: gdb.base/watchpoint.exp: next over global_ptr_ptr buffer set
+PASS: gdb.base/watchpoint.exp: next over global_ptr_ptr pointer advance
+PASS: gdb.base/watchpoint.exp: delete $global_ptr_ptr_breakpoint_number
+PASS: gdb.base/watchpoint.exp: continue to breakpoint: second x assignment
+PASS: gdb.base/watchpoint.exp: watch x
+PASS: gdb.base/watchpoint.exp: next after watch x
+PASS: gdb.base/watchpoint.exp: delete watch x
+PASS: gdb.base/watchpoint.exp: watch buf
+PASS: gdb.base/watchpoint.exp: watchpoint on buf hit
+PASS: gdb.base/watchpoint.exp: delete watch buf
+PASS: gdb.base/watchpoint.exp: number is constant
+PASS: gdb.base/watchpoint.exp: number with cast is constant
+PASS: gdb.base/watchpoint.exp: marker1 is constant
+PASS: gdb.base/watchpoint.exp: watch count + 6
+PASS: gdb.base/watchpoint.exp: delete watchpoint `count + 6'
+PASS: gdb.base/watchpoint.exp: watch 7 + count
+PASS: gdb.base/watchpoint.exp: delete watchpoint `7 + count'
+PASS: gdb.base/watchpoint.exp: watch $pc
+PASS: gdb.base/watchpoint.exp: disable watchpoint `$pc'
+PASS: gdb.base/watchpoint.exp: reenable watchpoint `$pc'
+PASS: gdb.base/watchpoint.exp: watchpoint `$pc' is enabled
+PASS: gdb.base/watchpoint.exp: delete watchpoint `$pc'
+PASS: gdb.base/watchpoint.exp: continue to breakpoint: func5 breakpoint here
+PASS: gdb.base/watchpoint.exp: watch -location .x
+PASS: gdb.base/watchpoint.exp: continue with watch -location
+PASS: gdb.base/watchpoint.exp: delete watch -location
+PASS: gdb.base/watchpoint.exp: continue to breakpoint: func6 breakpoint here
+PASS: gdb.base/watchpoint.exp: watch foo2
+PASS: gdb.base/watchpoint.exp: continue with watch foo2
+PASS: gdb.base/watchpoint.exp: delete watch foo2
+PASS: gdb.base/watchpoint.exp: continue to breakpoint: func7 breakpoint here
+PASS: gdb.base/watchpoint.exp: watch foo4
+PASS: gdb.base/watchpoint.exp: continue with watch foo4
+PASS: gdb.base/watchpoint.exp: delete watch foo4
+Running ./gdb.base/watchpoint-hw.exp ...
+Running ./gdb.base/watchpoint-hw-hit-once.exp ...
+Running ./gdb.base/watchpoints.exp ...
+PASS: gdb.base/watchpoints.exp: watchpoint hit, first time
+PASS: gdb.base/watchpoints.exp: watchpoint hit, first time
+PASS: gdb.base/watchpoints.exp: Watchpoint hit count is 1
+PASS: gdb.base/watchpoints.exp: watchpoint ival1 hit, second time
+PASS: gdb.base/watchpoints.exp: Watchpoint ival1 hit count is 2
+PASS: gdb.base/watchpoints.exp: watchpoint hit, second time
+PASS: gdb.base/watchpoints.exp: Watchpoint hit count is 2
+PASS: gdb.base/watchpoints.exp: watchpoint ival1 hit, third time
+PASS: gdb.base/watchpoints.exp: Watchpoint ival1 hit count is 3
+PASS: gdb.base/watchpoints.exp: watchpoint hit, third time
+PASS: gdb.base/watchpoints.exp: Watchpoint hit count is 3
+PASS: gdb.base/watchpoints.exp: watchpoint hit, fourth time
+PASS: gdb.base/watchpoints.exp: Watchpoint hit count is 4
+PASS: gdb.base/watchpoints.exp: watchpoint hit, fifth time
+PASS: gdb.base/watchpoints.exp: Watchpoint hit count is 5
+Running ./gdb.base/watchpoint-solib.exp ...
+PASS: gdb.base/watchpoint-solib.exp: set pending breakpoint
+PASS: gdb.base/watchpoint-solib.exp: continue to foo
+PASS: gdb.base/watchpoint-solib.exp: set watchpoint on g
+PASS: gdb.base/watchpoint-solib.exp: continue to watchpoint hit
+PASS: gdb.base/watchpoint-solib.exp: rerun to main
+PASS: gdb.base/watchpoint-solib.exp: continue to foo again
+PASS: gdb.base/watchpoint-solib.exp: continue to watchpoint hit again
+Running ./gdb.base/watch-read.exp ...
+Running ./gdb.base/watch_thread_num.exp ...
+Running ./gdb.base/watch-vfork.exp ...
+Running ./gdb.base/wchar.exp ...
+PASS: gdb.base/wchar.exp: print narrow
+PASS: gdb.base/wchar.exp: print single
+PASS: gdb.base/wchar.exp: print simple
+PASS: gdb.base/wchar.exp: print difficile
+PASS: gdb.base/wchar.exp: print simple[2]
+PASS: gdb.base/wchar.exp: print difficile[2]
+PASS: gdb.base/wchar.exp: print repeat
+PASS: gdb.base/wchar.exp: print repeat_p
+PASS: gdb.base/wchar.exp: set print null on
+PASS: gdb.base/wchar.exp: print repeat (print null on)
+PASS: gdb.base/wchar.exp: set print elements 3
+PASS: gdb.base/wchar.exp: print repeat (print elements 3)
+PASS: gdb.base/wchar.exp: print repeat_p (print elements 3)
+Running ./gdb.base/whatis.exp ...
+PASS: gdb.base/whatis.exp: whatis char
+PASS: gdb.base/whatis.exp: whatis signed char
+PASS: gdb.base/whatis.exp: whatis unsigned char
+PASS: gdb.base/whatis.exp: whatis short
+PASS: gdb.base/whatis.exp: whatis signed short
+PASS: gdb.base/whatis.exp: whatis unsigned short
+PASS: gdb.base/whatis.exp: whatis int
+PASS: gdb.base/whatis.exp: whatis signed int
+PASS: gdb.base/whatis.exp: whatis unsigned int
+PASS: gdb.base/whatis.exp: whatis long
+PASS: gdb.base/whatis.exp: whatis signed long
+PASS: gdb.base/whatis.exp: whatis unsigned long
+PASS: gdb.base/whatis.exp: whatis unsigned long long
+PASS: gdb.base/whatis.exp: whatis float
+PASS: gdb.base/whatis.exp: whatis double
+PASS: gdb.base/whatis.exp: whatis char array
+PASS: gdb.base/whatis.exp: whatis signed char array
+PASS: gdb.base/whatis.exp: whatis unsigned char array
+PASS: gdb.base/whatis.exp: whatis short array
+PASS: gdb.base/whatis.exp: whatis signed short array
+PASS: gdb.base/whatis.exp: whatis unsigned short array
+PASS: gdb.base/whatis.exp: whatis int array
+PASS: gdb.base/whatis.exp: whatis signed int array
+PASS: gdb.base/whatis.exp: whatis unsigned int array
+PASS: gdb.base/whatis.exp: whatis long array
+PASS: gdb.base/whatis.exp: whatis signed long array
+PASS: gdb.base/whatis.exp: whatis unsigned long array
+PASS: gdb.base/whatis.exp: whatis unsigned long array
+PASS: gdb.base/whatis.exp: whatis float array
+PASS: gdb.base/whatis.exp: whatis double array
+PASS: gdb.base/whatis.exp: whatis char pointer
+PASS: gdb.base/whatis.exp: whatis signed char pointer
+PASS: gdb.base/whatis.exp: whatis unsigned char pointer
+PASS: gdb.base/whatis.exp: whatis short pointer
+PASS: gdb.base/whatis.exp: whatis signed short pointer
+PASS: gdb.base/whatis.exp: whatis unsigned short pointer
+PASS: gdb.base/whatis.exp: whatis int pointer
+PASS: gdb.base/whatis.exp: whatis signed int pointer
+PASS: gdb.base/whatis.exp: whatis unsigned int pointer
+PASS: gdb.base/whatis.exp: whatis long pointer
+PASS: gdb.base/whatis.exp: whatis signed long pointer
+PASS: gdb.base/whatis.exp: whatis unsigned long pointer
+PASS: gdb.base/whatis.exp: whatis long long pointer
+PASS: gdb.base/whatis.exp: whatis signed long long pointer
+PASS: gdb.base/whatis.exp: whatis unsigned long long pointer
+PASS: gdb.base/whatis.exp: whatis float pointer
+PASS: gdb.base/whatis.exp: whatis double pointer
+PASS: gdb.base/whatis.exp: whatis named structure
+PASS: gdb.base/whatis.exp: whatis named structure using type name
+PASS: gdb.base/whatis.exp: whatis unnamed structure
+PASS: gdb.base/whatis.exp: whatis named union
+PASS: gdb.base/whatis.exp: whatis named union using type name
+PASS: gdb.base/whatis.exp: whatis unnamed union
+PASS: gdb.base/whatis.exp: whatis char function
+PASS: gdb.base/whatis.exp: whatis signed char function
+PASS: gdb.base/whatis.exp: whatis unsigned char function
+PASS: gdb.base/whatis.exp: whatis short function
+PASS: gdb.base/whatis.exp: whatis signed short function
+PASS: gdb.base/whatis.exp: whatis unsigned short function
+PASS: gdb.base/whatis.exp: whatis int function
+PASS: gdb.base/whatis.exp: whatis signed int function
+PASS: gdb.base/whatis.exp: whatis unsigned int function
+PASS: gdb.base/whatis.exp: whatis long function
+PASS: gdb.base/whatis.exp: whatis signed long function
+PASS: gdb.base/whatis.exp: whatis unsigned long function
+PASS: gdb.base/whatis.exp: whatis long long function
+PASS: gdb.base/whatis.exp: whatis signed long long function
+PASS: gdb.base/whatis.exp: whatis unsigned long long function
+PASS: gdb.base/whatis.exp: whatis float function
+PASS: gdb.base/whatis.exp: whatis double function
+PASS: gdb.base/whatis.exp: whatis complicated structure
+PASS: gdb.base/whatis.exp: whatis complicated union
+PASS: gdb.base/whatis.exp: whatis enumeration
+PASS: gdb.base/whatis.exp: whatis enumeration using type name
+PASS: gdb.base/whatis.exp: whatis outer structure
+PASS: gdb.base/whatis.exp: whatis outer structure member
+PASS: gdb.base/whatis.exp: whatis inner structure
+PASS: gdb.base/whatis.exp: whatis inner structure member
+PASS: gdb.base/whatis.exp: whatis inner union
+PASS: gdb.base/whatis.exp: whatis inner union member
+PASS: gdb.base/whatis.exp: whatis using typedef type name
+PASS: gdb.base/whatis.exp: whatis applied to variable defined by typedef
+PASS: gdb.base/whatis.exp: whatis applied to pointer to pointer to function
+PASS: gdb.base/whatis.exp: whatis applied to const pointer to pointer to function
+PASS: gdb.base/whatis.exp: whatis applied to pointer to const pointer to function
+PASS: gdb.base/whatis.exp: whatis applied to pointer to function returning pointer to int
+PASS: gdb.base/whatis.exp: whatis applied to pointer to pointer to function returning pointer to int
+PASS: gdb.base/whatis.exp: whatis applied to pointer to function returning pointer to array
+PASS: gdb.base/whatis.exp: whatis applied to pointer to function taking int,int and returning int
+PASS: gdb.base/whatis.exp: whatis applied to pointer to function taking const int ptr and varargs and returning int
+PASS: gdb.base/whatis.exp: whatis applied to function with types trailing 'void'
+PASS: gdb.base/whatis.exp: whatis applied to function with 'void' parameter type
+Running ./gdb.base/whatis-exp.exp ...
+PASS: gdb.base/whatis-exp.exp: set variable x=14
+PASS: gdb.base/whatis-exp.exp: set variable y=2
+PASS: gdb.base/whatis-exp.exp: set variable z=2
+PASS: gdb.base/whatis-exp.exp: set variable w=3
+PASS: gdb.base/whatis-exp.exp: print value of x
+PASS: gdb.base/whatis-exp.exp: print value of y
+PASS: gdb.base/whatis-exp.exp: print value of z
+PASS: gdb.base/whatis-exp.exp: print value of w
+PASS: gdb.base/whatis-exp.exp: whatis value of x+y
+PASS: gdb.base/whatis-exp.exp: whatis value of x-y
+PASS: gdb.base/whatis-exp.exp: whatis value of x*y
+PASS: gdb.base/whatis-exp.exp: whatis value of x/y
+PASS: gdb.base/whatis-exp.exp: whatis value of x%y
+PASS: gdb.base/whatis-exp.exp: whatis value of x=y
+PASS: gdb.base/whatis-exp.exp: whatis value of x+=2
+PASS: gdb.base/whatis-exp.exp: whatis value of ++x
+PASS: gdb.base/whatis-exp.exp: whatis value of --x
+PASS: gdb.base/whatis-exp.exp: whatis value of x++
+PASS: gdb.base/whatis-exp.exp: whatis value of x--
+Running ./gdb.btrace/enable.exp ...
+Running ./gdb.btrace/function_call_history.exp ...
+Running ./gdb.btrace/instruction_history.exp ...
+Running ./gdb.cell/arch.exp ...
+Running ./gdb.cell/break.exp ...
+Running ./gdb.cell/bt.exp ...
+Running ./gdb.cell/core.exp ...
+Running ./gdb.cell/data.exp ...
+Running ./gdb.cell/dwarfaddr.exp ...
+Running ./gdb.cell/ea-cache.exp ...
+Running ./gdb.cell/ea-standalone.exp ...
+Running ./gdb.cell/ea-test.exp ...
+Running ./gdb.cell/fork.exp ...
+Running ./gdb.cell/f-regs.exp ...
+Running ./gdb.cell/gcore.exp ...
+Running ./gdb.cell/mem-access.exp ...
+Running ./gdb.cell/ptype.exp ...
+Running ./gdb.cell/registers.exp ...
+Running ./gdb.cell/sizeof.exp ...
+Running ./gdb.cell/solib.exp ...
+Running ./gdb.cell/solib-symbol.exp ...
+Running ./gdb.cp/abstract-origin.exp ...
+PASS: gdb.cp/abstract-origin.exp: continue to breakpoint: break-here
+PASS: gdb.cp/abstract-origin.exp: p problem
+Running ./gdb.cp/ambiguous.exp ...
+Running ./gdb.cp/annota2.exp ...
+Running ./gdb.cp/annota3.exp ...
+Running ./gdb.cp/anon-ns.exp ...
+PASS: gdb.cp/anon-ns.exp: list (anonymous namespace)::doit1(void)
+PASS: gdb.cp/anon-ns.exp: list '(anonymous namespace)::doit1(void)'
+PASS: gdb.cp/anon-ns.exp: break (anonymous namespace)::doit1(void)
+PASS: gdb.cp/anon-ns.exp: break '(anonymous namespace)::doit1(void)'
+PASS: gdb.cp/anon-ns.exp: list (anonymous namespace)::one::one(void)
+PASS: gdb.cp/anon-ns.exp: list '(anonymous namespace)::one::one(void)'
+PASS: gdb.cp/anon-ns.exp: break (anonymous namespace)::one::one(void)
+PASS: gdb.cp/anon-ns.exp: break '(anonymous namespace)::one::one(void)'
+PASS: gdb.cp/anon-ns.exp: list (anonymous namespace)::A::doit2(void)
+PASS: gdb.cp/anon-ns.exp: list '(anonymous namespace)::A::doit2(void)'
+PASS: gdb.cp/anon-ns.exp: break (anonymous namespace)::A::doit2(void)
+PASS: gdb.cp/anon-ns.exp: break '(anonymous namespace)::A::doit2(void)'
+PASS: gdb.cp/anon-ns.exp: list (anonymous namespace)::A::two::two(void)
+PASS: gdb.cp/anon-ns.exp: list '(anonymous namespace)::A::two::two(void)'
+PASS: gdb.cp/anon-ns.exp: break (anonymous namespace)::A::two::two(void)
+PASS: gdb.cp/anon-ns.exp: break '(anonymous namespace)::A::two::two(void)'
+PASS: gdb.cp/anon-ns.exp: list (anonymous namespace)::A::(anonymous namespace)::(anonymous namespace)::doit3(void)
+PASS: gdb.cp/anon-ns.exp: list '(anonymous namespace)::A::(anonymous namespace)::(anonymous namespace)::doit3(void)'
+PASS: gdb.cp/anon-ns.exp: break (anonymous namespace)::A::(anonymous namespace)::(anonymous namespace)::doit3(void)
+PASS: gdb.cp/anon-ns.exp: break '(anonymous namespace)::A::(anonymous namespace)::(anonymous namespace)::doit3(void)'
+PASS: gdb.cp/anon-ns.exp: list (anonymous namespace)::A::(anonymous namespace)::(anonymous namespace)::three::three(void)
+PASS: gdb.cp/anon-ns.exp: list '(anonymous namespace)::A::(anonymous namespace)::(anonymous namespace)::three::three(void)'
+PASS: gdb.cp/anon-ns.exp: break (anonymous namespace)::A::(anonymous namespace)::(anonymous namespace)::three::three(void)
+PASS: gdb.cp/anon-ns.exp: break '(anonymous namespace)::A::(anonymous namespace)::(anonymous namespace)::three::three(void)'
+PASS: gdb.cp/anon-ns.exp: list (anonymous namespace)::doit1(int)
+PASS: gdb.cp/anon-ns.exp: list '(anonymous namespace)::doit1(int)'
+PASS: gdb.cp/anon-ns.exp: break (anonymous namespace)::doit1(int)
+PASS: gdb.cp/anon-ns.exp: break '(anonymous namespace)::doit1(int)'
+PASS: gdb.cp/anon-ns.exp: list (anonymous namespace)::one::one(int)
+PASS: gdb.cp/anon-ns.exp: list '(anonymous namespace)::one::one(int)'
+PASS: gdb.cp/anon-ns.exp: break (anonymous namespace)::one::one(int)
+PASS: gdb.cp/anon-ns.exp: break '(anonymous namespace)::one::one(int)'
+PASS: gdb.cp/anon-ns.exp: list (anonymous namespace)::A::doit2(int)
+PASS: gdb.cp/anon-ns.exp: list '(anonymous namespace)::A::doit2(int)'
+PASS: gdb.cp/anon-ns.exp: break (anonymous namespace)::A::doit2(int)
+PASS: gdb.cp/anon-ns.exp: break '(anonymous namespace)::A::doit2(int)'
+PASS: gdb.cp/anon-ns.exp: list (anonymous namespace)::A::two::two(int)
+PASS: gdb.cp/anon-ns.exp: list '(anonymous namespace)::A::two::two(int)'
+PASS: gdb.cp/anon-ns.exp: break (anonymous namespace)::A::two::two(int)
+PASS: gdb.cp/anon-ns.exp: break '(anonymous namespace)::A::two::two(int)'
+PASS: gdb.cp/anon-ns.exp: list (anonymous namespace)::A::(anonymous namespace)::(anonymous namespace)::doit3(int)
+PASS: gdb.cp/anon-ns.exp: list '(anonymous namespace)::A::(anonymous namespace)::(anonymous namespace)::doit3(int)'
+PASS: gdb.cp/anon-ns.exp: break (anonymous namespace)::A::(anonymous namespace)::(anonymous namespace)::doit3(int)
+PASS: gdb.cp/anon-ns.exp: break '(anonymous namespace)::A::(anonymous namespace)::(anonymous namespace)::doit3(int)'
+PASS: gdb.cp/anon-ns.exp: list (anonymous namespace)::A::(anonymous namespace)::(anonymous namespace)::three::three(int)
+PASS: gdb.cp/anon-ns.exp: list '(anonymous namespace)::A::(anonymous namespace)::(anonymous namespace)::three::three(int)'
+PASS: gdb.cp/anon-ns.exp: break (anonymous namespace)::A::(anonymous namespace)::(anonymous namespace)::three::three(int)
+PASS: gdb.cp/anon-ns.exp: break '(anonymous namespace)::A::(anonymous namespace)::(anonymous namespace)::three::three(int)'
+PASS: gdb.cp/anon-ns.exp: list (anonymous namespace)::doit1(char *)
+PASS: gdb.cp/anon-ns.exp: list '(anonymous namespace)::doit1(char *)'
+PASS: gdb.cp/anon-ns.exp: break (anonymous namespace)::doit1(char *)
+PASS: gdb.cp/anon-ns.exp: break '(anonymous namespace)::doit1(char *)'
+PASS: gdb.cp/anon-ns.exp: list (anonymous namespace)::one::one(char *)
+PASS: gdb.cp/anon-ns.exp: list '(anonymous namespace)::one::one(char *)'
+PASS: gdb.cp/anon-ns.exp: break (anonymous namespace)::one::one(char *)
+PASS: gdb.cp/anon-ns.exp: break '(anonymous namespace)::one::one(char *)'
+PASS: gdb.cp/anon-ns.exp: list (anonymous namespace)::A::doit2(char *)
+PASS: gdb.cp/anon-ns.exp: list '(anonymous namespace)::A::doit2(char *)'
+PASS: gdb.cp/anon-ns.exp: break (anonymous namespace)::A::doit2(char *)
+PASS: gdb.cp/anon-ns.exp: break '(anonymous namespace)::A::doit2(char *)'
+PASS: gdb.cp/anon-ns.exp: list (anonymous namespace)::A::two::two(char *)
+PASS: gdb.cp/anon-ns.exp: list '(anonymous namespace)::A::two::two(char *)'
+PASS: gdb.cp/anon-ns.exp: break (anonymous namespace)::A::two::two(char *)
+PASS: gdb.cp/anon-ns.exp: break '(anonymous namespace)::A::two::two(char *)'
+PASS: gdb.cp/anon-ns.exp: list (anonymous namespace)::A::(anonymous namespace)::(anonymous namespace)::doit3(char *)
+PASS: gdb.cp/anon-ns.exp: list '(anonymous namespace)::A::(anonymous namespace)::(anonymous namespace)::doit3(char *)'
+PASS: gdb.cp/anon-ns.exp: break (anonymous namespace)::A::(anonymous namespace)::(anonymous namespace)::doit3(char *)
+PASS: gdb.cp/anon-ns.exp: break '(anonymous namespace)::A::(anonymous namespace)::(anonymous namespace)::doit3(char *)'
+PASS: gdb.cp/anon-ns.exp: list (anonymous namespace)::A::(anonymous namespace)::(anonymous namespace)::three::three(char *)
+PASS: gdb.cp/anon-ns.exp: list '(anonymous namespace)::A::(anonymous namespace)::(anonymous namespace)::three::three(char *)'
+PASS: gdb.cp/anon-ns.exp: break (anonymous namespace)::A::(anonymous namespace)::(anonymous namespace)::three::three(char *)
+PASS: gdb.cp/anon-ns.exp: break '(anonymous namespace)::A::(anonymous namespace)::(anonymous namespace)::three::three(char *)'
+PASS: gdb.cp/anon-ns.exp: list (anonymous namespace)::one::doit(void)
+PASS: gdb.cp/anon-ns.exp: list '(anonymous namespace)::one::doit(void)'
+PASS: gdb.cp/anon-ns.exp: break (anonymous namespace)::one::doit(void)
+PASS: gdb.cp/anon-ns.exp: break '(anonymous namespace)::one::doit(void)'
+PASS: gdb.cp/anon-ns.exp: list (anonymous namespace)::A::two::doit(void)
+PASS: gdb.cp/anon-ns.exp: list '(anonymous namespace)::A::two::doit(void)'
+PASS: gdb.cp/anon-ns.exp: break (anonymous namespace)::A::two::doit(void)
+PASS: gdb.cp/anon-ns.exp: break '(anonymous namespace)::A::two::doit(void)'
+PASS: gdb.cp/anon-ns.exp: list (anonymous namespace)::A::(anonymous namespace)::(anonymous namespace)::three::doit(void)
+PASS: gdb.cp/anon-ns.exp: list '(anonymous namespace)::A::(anonymous namespace)::(anonymous namespace)::three::doit(void)'
+PASS: gdb.cp/anon-ns.exp: break (anonymous namespace)::A::(anonymous namespace)::(anonymous namespace)::three::doit(void)
+PASS: gdb.cp/anon-ns.exp: break '(anonymous namespace)::A::(anonymous namespace)::(anonymous namespace)::three::doit(void)'
+Running ./gdb.cp/anon-struct.exp ...
+FAIL: gdb.cp/anon-struct.exp: print type of t::t
+PASS: gdb.cp/anon-struct.exp: print type of X::t2
+FAIL: gdb.cp/anon-struct.exp: print type of X::t2::t2
+FAIL: gdb.cp/anon-struct.exp: print type of t3::~t3
+Running ./gdb.cp/anon-union.exp ...
+PASS: gdb.cp/anon-union.exp: set width 0
+PASS: gdb.cp/anon-union.exp: next 1
+PASS: gdb.cp/anon-union.exp: print foo 1
+PASS: gdb.cp/anon-union.exp: next 2
+PASS: gdb.cp/anon-union.exp: print foo 2
+PASS: gdb.cp/anon-union.exp: set var foo.cloth
+PASS: gdb.cp/anon-union.exp: print foo 3
+PASS: gdb.cp/anon-union.exp: next 3
+PASS: gdb.cp/anon-union.exp: print foo 4
+PASS: gdb.cp/anon-union.exp: set var foo.pebble
+PASS: gdb.cp/anon-union.exp: print foo 5
+PASS: gdb.cp/anon-union.exp: set var foo.qux
+PASS: gdb.cp/anon-union.exp: print foo 6
+PASS: gdb.cp/anon-union.exp: set var foo.mux
+PASS: gdb.cp/anon-union.exp: print foo 7
+PASS: gdb.cp/anon-union.exp: set var foo.x.rock
+PASS: gdb.cp/anon-union.exp: print foo 8
+PASS: gdb.cp/anon-union.exp: set var foo.x.rock2
+PASS: gdb.cp/anon-union.exp: print foo 9
+PASS: gdb.cp/anon-union.exp: next 4
+PASS: gdb.cp/anon-union.exp: print w 1
+PASS: gdb.cp/anon-union.exp: print z 1
+PASS: gdb.cp/anon-union.exp: next 5
+PASS: gdb.cp/anon-union.exp: print w 2
+PASS: gdb.cp/anon-union.exp: print z 2
+PASS: gdb.cp/anon-union.exp: set var z
+PASS: gdb.cp/anon-union.exp: print w 3
+PASS: gdb.cp/anon-union.exp: print z 3
+Running ./gdb.cp/arg-reference.exp ...
+PASS: gdb.cp/arg-reference.exp: No false reference
+Running ./gdb.cp/baseenum.exp ...
+PASS: gdb.cp/baseenum.exp: continue to breakpoint: breakpoint 1
+PASS: gdb.cp/baseenum.exp: Print enum constant X of class A
+PASS: gdb.cp/baseenum.exp: continue to breakpoint: breakpoint 2
+PASS: gdb.cp/baseenum.exp: Print enum constant X of class A in namespace N
+Running ./gdb.cp/bool.exp ...
+PASS: gdb.cp/bool.exp: print return_true()
+PASS: gdb.cp/bool.exp: print return_false()
+Running ./gdb.cp/breakpoint.exp ...
+PASS: gdb.cp/breakpoint.exp: continue to C1::Nested::foo
+PASS: gdb.cp/breakpoint.exp: conditional breakpoint in method
+PASS: gdb.cp/breakpoint.exp: conditional breakpoint in method 2
+PASS: gdb.cp/breakpoint.exp: continue to breakpoint
+PASS: gdb.cp/breakpoint.exp: check the member variable
+PASS: gdb.cp/breakpoint.exp: continue to breakpoint
+PASS: gdb.cp/breakpoint.exp: check the member variable
+Running ./gdb.cp/bs15503.exp ...
+PASS: gdb.cp/bs15503.exp: break StringTest<wchar_t>::testFunction
+PASS: gdb.cp/bs15503.exp: continue to StringTest<wchar_t>
+PASS: gdb.cp/bs15503.exp: continue to breakpoint: find position where blank needs to be inserted
+FAIL: gdb.cp/bs15503.exp: print s.length()
+FAIL: gdb.cp/bs15503.exp: print s[0]
+FAIL: gdb.cp/bs15503.exp: print s[s.length()-1]
+PASS: gdb.cp/bs15503.exp: print (const char *) s
+FAIL: gdb.cp/bs15503.exp: print (const char *) s.substr(0,4)
+FAIL: gdb.cp/bs15503.exp: print (const char *) (s=s.substr(0,4))
+Running ./gdb.cp/call-c.exp ...
+PASS: gdb.cp/call-c.exp: b 43
+PASS: gdb.cp/call-c.exp: print foo(1)
+PASS: gdb.cp/call-c.exp: continue to bp
+PASS: gdb.cp/call-c.exp: print rf->func()
+PASS: gdb.cp/call-c.exp: print handle->func()
+Running ./gdb.cp/casts.exp ...
+PASS: gdb.cp/casts.exp: cast base class pointer to derived class pointer
+PASS: gdb.cp/casts.exp: let compiler cast base class pointer to derived class pointer
+PASS: gdb.cp/casts.exp: cast derived class pointer to base class pointer
+PASS: gdb.cp/casts.exp: cast derived class reference to base class reference
+PASS: gdb.cp/casts.exp: cast base class reference to derived class reference
+PASS: gdb.cp/casts.exp: let compiler cast base class reference to derived class reference
+PASS: gdb.cp/casts.exp: basic test of const_cast
+PASS: gdb.cp/casts.exp: const_cast of 0
+PASS: gdb.cp/casts.exp: basic test of static_cast
+PASS: gdb.cp/casts.exp: static_cast to reference type
+PASS: gdb.cp/casts.exp: basic test of reinterpret_cast
+PASS: gdb.cp/casts.exp: test invalid reinterpret_cast
+PASS: gdb.cp/casts.exp: reinterpret_cast to reference type
+PASS: gdb.cp/casts.exp: whatis decltype(5)
+PASS: gdb.cp/casts.exp: old-style cast using __typeof__
+PASS: gdb.cp/casts.exp: static_cast using __typeof__
+PASS: gdb.cp/casts.exp: reinterpret_cast using __typeof__
+PASS: gdb.cp/casts.exp: old-style cast using __typeof
+PASS: gdb.cp/casts.exp: static_cast using __typeof
+PASS: gdb.cp/casts.exp: reinterpret_cast using __typeof
+PASS: gdb.cp/casts.exp: old-style cast using __decltype
+PASS: gdb.cp/casts.exp: static_cast using __decltype
+PASS: gdb.cp/casts.exp: reinterpret_cast using __decltype
+PASS: gdb.cp/casts.exp: whatis __decltype(*a)
+PASS: gdb.cp/casts.exp: invalid dynamic_cast
+PASS: gdb.cp/casts.exp: dynamic_cast of 0 to void*
+PASS: gdb.cp/casts.exp: dynamic_cast simple upcast
+PASS: gdb.cp/casts.exp: dynamic_cast upcast to unique base
+PASS: gdb.cp/casts.exp: dynamic_cast simple upcast to reference
+PASS: gdb.cp/casts.exp: dynamic_cast simple downcast
+PASS: gdb.cp/casts.exp: dynamic_cast simple downcast to intermediate class
+PASS: gdb.cp/casts.exp: dynamic_cast to non-existing base
+PASS: gdb.cp/casts.exp: dynamic_cast to reference to non-existing base
+PASS: gdb.cp/casts.exp: dynamic_cast unique downcast
+PASS: gdb.cp/casts.exp: dynamic_cast to sibling
+Running ./gdb.cp/class2.exp ...
+PASS: gdb.cp/class2.exp: set print object off
+PASS: gdb.cp/class2.exp: print alpha at marker return 0
+PASS: gdb.cp/class2.exp: print beta at marker return 0
+PASS: gdb.cp/class2.exp: print * aap at marker return 0
+PASS: gdb.cp/class2.exp: print * bbp at marker return 0
+PASS: gdb.cp/class2.exp: print * abp at marker return 0, s-p-o off
+PASS: gdb.cp/class2.exp: print * (B *) abp at marker return 0
+PASS: gdb.cp/class2.exp: print object with no data fields
+PASS: gdb.cp/class2.exp: set print object on
+PASS: gdb.cp/class2.exp: p acp
+PASS: gdb.cp/class2.exp: p acp->c1
+PASS: gdb.cp/class2.exp: p acp->c2
+Running ./gdb.cp/classes.exp ...
+PASS: gdb.cp/classes.exp: ptype struct default_public_struct
+PASS: gdb.cp/classes.exp: ptype struct explicit_public_struct
+PASS: gdb.cp/classes.exp: ptype struct protected_struct
+PASS: gdb.cp/classes.exp: ptype struct private_struct
+PASS: gdb.cp/classes.exp: ptype struct mixed_protection_struct
+PASS: gdb.cp/classes.exp: ptype class public_class
+PASS: gdb.cp/classes.exp: ptype class protected_class
+PASS: gdb.cp/classes.exp: ptype class default_private_class
+PASS: gdb.cp/classes.exp: ptype class explicit_private_class
+PASS: gdb.cp/classes.exp: ptype class mixed_protection_class
+PASS: gdb.cp/classes.exp: ptype class A
+PASS: gdb.cp/classes.exp: ptype class B
+PASS: gdb.cp/classes.exp: ptype class C
+PASS: gdb.cp/classes.exp: ptype class D
+PASS: gdb.cp/classes.exp: ptype class E
+PASS: gdb.cp/classes.exp: ptype class Static
+PASS: gdb.cp/classes.exp: ptype class vA
+PASS: gdb.cp/classes.exp: ptype class vB
+PASS: gdb.cp/classes.exp: ptype class vC
+PASS: gdb.cp/classes.exp: ptype class vD
+PASS: gdb.cp/classes.exp: ptype class vE
+PASS: gdb.cp/classes.exp: ptype class Base1
+PASS: gdb.cp/classes.exp: ptype class Foo
+PASS: gdb.cp/classes.exp: ptype class Bar
+PASS: gdb.cp/classes.exp: print g_A.a
+PASS: gdb.cp/classes.exp: print g_A.x
+PASS: gdb.cp/classes.exp: print g_B.b
+PASS: gdb.cp/classes.exp: print g_B.x
+PASS: gdb.cp/classes.exp: print g_C.c
+PASS: gdb.cp/classes.exp: print g_C.x
+PASS: gdb.cp/classes.exp: print g_D.d
+PASS: gdb.cp/classes.exp: print g_D.x
+PASS: gdb.cp/classes.exp: print g_E.e
+PASS: gdb.cp/classes.exp: print g_E.x
+PASS: gdb.cp/classes.exp: print g_A.b
+PASS: gdb.cp/classes.exp: print g_B.c
+PASS: gdb.cp/classes.exp: print g_B.d
+PASS: gdb.cp/classes.exp: print g_C.b
+PASS: gdb.cp/classes.exp: print g_C.d
+PASS: gdb.cp/classes.exp: print g_D.e
+PASS: gdb.cp/classes.exp: print g_A.y
+PASS: gdb.cp/classes.exp: print g_B.z
+PASS: gdb.cp/classes.exp: print g_C.q
+PASS: gdb.cp/classes.exp: print g_D.p
+PASS: gdb.cp/classes.exp: call class_param.Aptr_a (&g_A)
+PASS: gdb.cp/classes.exp: call class_param.Aptr_x (&g_A)
+PASS: gdb.cp/classes.exp: call class_param.Aptr_a (&g_B)
+PASS: gdb.cp/classes.exp: call class_param.Aptr_x (&g_B)
+PASS: gdb.cp/classes.exp: call class_param.Aref_a (g_A)
+PASS: gdb.cp/classes.exp: call class_param.Aref_x (g_A)
+PASS: gdb.cp/classes.exp: call class_param.Aref_a (g_B)
+PASS: gdb.cp/classes.exp: call class_param.Aref_x (g_B)
+PASS: gdb.cp/classes.exp: call class_param.Aval_a (g_A)
+PASS: gdb.cp/classes.exp: call class_param.Aval_x (g_A)
+PASS: gdb.cp/classes.exp: call class_param.Aval_a (g_B)
+PASS: gdb.cp/classes.exp: call class_param.Aval_x (g_B)
+PASS: gdb.cp/classes.exp: unrelated class *param
+PASS: gdb.cp/classes.exp: unrelated class &param
+PASS: gdb.cp/classes.exp: unrelated class param
+PASS: gdb.cp/classes.exp: continue to enums2(\(\)|)
+PASS: gdb.cp/classes.exp: print obj_with_enum (1)
+PASS: gdb.cp/classes.exp: next
+PASS: gdb.cp/classes.exp: print obj_with_enum (2)
+PASS: gdb.cp/classes.exp: print obj_with_enum.priv_enum
+PASS: gdb.cp/classes.exp: ptype obj_with_enum.priv_enum
+PASS: gdb.cp/classes.exp: ptype obj_with_enum
+PASS: gdb.cp/classes.exp: print (ClassWithEnum::PrivEnum) 42
+PASS: gdb.cp/classes.exp: print ('ClassWithEnum::PrivEnum') 42
+PASS: gdb.cp/classes.exp: print Bar::z
+PASS: gdb.cp/classes.exp: print &Foo::x
+PASS: gdb.cp/classes.exp: print (int)&Foo::x
+PASS: gdb.cp/classes.exp: print (int)&Bar::y == 2*sizeof(int)
+PASS: gdb.cp/classes.exp: ptype Bar::z
+PASS: gdb.cp/classes.exp: ptype &Bar::z
+PASS: gdb.cp/classes.exp: print (int)pmi == sizeof(int)
+PASS: gdb.cp/classes.exp: print Foo::st
+PASS: gdb.cp/classes.exp: print bar.st
+PASS: gdb.cp/classes.exp: print &foo.st
+PASS: gdb.cp/classes.exp: print &Bar::st
+PASS: gdb.cp/classes.exp: print *$
+PASS: gdb.cp/classes.exp: set print static-members off
+PASS: gdb.cp/classes.exp: print csi without static members
+PASS: gdb.cp/classes.exp: print cnsi without static members
+PASS: gdb.cp/classes.exp: set print static-members on
+PASS: gdb.cp/classes.exp: print csi with static members
+PASS: gdb.cp/classes.exp: print cnsi with static members
+PASS: gdb.cp/classes.exp: finish from marker_reg1
+PASS: gdb.cp/classes.exp: calling method for small class
+FAIL: gdb.cp/classes.exp: print ctor of typedef class
+FAIL: gdb.cp/classes.exp: print dtor of typedef class
+PASS: gdb.cp/classes.exp: list ByAnyOtherName::times
+Running ./gdb.cp/cmpd-minsyms.exp ...
+PASS: gdb.cp/cmpd-minsyms.exp: setting breakpoint at 'GDB<int>::a() const'
+PASS: gdb.cp/cmpd-minsyms.exp: setting breakpoint at 'GDB<int>::b() volatile'
+PASS: gdb.cp/cmpd-minsyms.exp: setting breakpoint at 'GDB<int>::c() const volatile'
+PASS: gdb.cp/cmpd-minsyms.exp: set language c++
+PASS: gdb.cp/cmpd-minsyms.exp: setting breakpoint at GDB<int>::operator ==
+PASS: gdb.cp/cmpd-minsyms.exp: setting breakpoint at GDB<int>::operator==(GDB<int> const&)
+PASS: gdb.cp/cmpd-minsyms.exp: setting breakpoint at GDB<char>::harder(char)
+PASS: gdb.cp/cmpd-minsyms.exp: setting breakpoint at GDB<int>::harder(int)
+PASS: gdb.cp/cmpd-minsyms.exp: setting breakpoint at "int GDB<char>::even_harder<int>(char)"
+PASS: gdb.cp/cmpd-minsyms.exp: setting breakpoint at GDB<int>::simple()
+Running ./gdb.cp/converts.exp ...
+PASS: gdb.cp/converts.exp: continue to breakpoint: end of main
+PASS: gdb.cp/converts.exp: typedef to another typedef
+PASS: gdb.cp/converts.exp: typedef to typedef of a typedef
+PASS: gdb.cp/converts.exp: Pointer-to-pointer-to-pointer derived to Pointer-to-pointer-to-pointer base.
+PASS: gdb.cp/converts.exp: pointer to pointer
+PASS: gdb.cp/converts.exp: pointer to array
+PASS: gdb.cp/converts.exp: pointer to pointer of wrong type
+PASS: gdb.cp/converts.exp: pointer to pointer of wrong type
+PASS: gdb.cp/converts.exp: pointer to ancestor pointer
+PASS: gdb.cp/converts.exp: pointer to void pointer
+PASS: gdb.cp/converts.exp: pointer to void pointer pointer
+PASS: gdb.cp/converts.exp: pointer to boolean
+PASS: gdb.cp/converts.exp: pointer to long int
+PASS: gdb.cp/converts.exp: pointer pointer to void pointer
+PASS: gdb.cp/converts.exp: pointer pointer to pointer pointer
+PASS: gdb.cp/converts.exp: pointer pointer to array of arrays
+PASS: gdb.cp/converts.exp: pointer pointer to array of pointers
+PASS: gdb.cp/converts.exp: pointer pointer to array of wrong pointers
+PASS: gdb.cp/converts.exp: check all parameters for badness
+PASS: gdb.cp/converts.exp: null pointer conversion
+PASS: gdb.cp/converts.exp: p foo3_1 (0, 1)
+PASS: gdb.cp/converts.exp: p foo3_1 (0, (const char**) 1)
+PASS: gdb.cp/converts.exp: p foo3_2 (0, 0)
+PASS: gdb.cp/converts.exp: p foo3_2 (0, (char const**) 0)
+PASS: gdb.cp/converts.exp: p foo1_7(0)
+PASS: gdb.cp/converts.exp: p foo1_7(integer)
+PASS: gdb.cp/converts.exp: p foo1_7(long_int)
+PASS: gdb.cp/converts.exp: p foo1_7(*a)
+PASS: gdb.cp/converts.exp: p foo1_7(MY_A)
+PASS: gdb.cp/converts.exp: p foo1_7(&foo1_7)
+PASS: gdb.cp/converts.exp: p foo1_7(&A::member_)
+PASS: gdb.cp/converts.exp: p foo1_7(a)
+PASS: gdb.cp/converts.exp: p foo1_7(fp)
+PASS: gdb.cp/converts.exp: p foo1_7(dp)
+PASS: gdb.cp/converts.exp: p foo1_7(-1.23)
+PASS: gdb.cp/converts.exp: p foo1_7(ta)
+PASS: gdb.cp/converts.exp: show check type
+PASS: gdb.cp/converts.exp: p foo1_type_check (123)
+PASS: gdb.cp/converts.exp: p foo2_type_check (0, 1)
+PASS: gdb.cp/converts.exp: p foo2_type_check (1, 0)
+PASS: gdb.cp/converts.exp: p foo2_type_check (1, 1)
+PASS: gdb.cp/converts.exp: p foo3_type_check (0, 0, 1)
+PASS: gdb.cp/converts.exp: p foo3_type_check (0, 1, 0)
+PASS: gdb.cp/converts.exp: p foo3_type_check (1, 0, 0)
+PASS: gdb.cp/converts.exp: p foo3_type_check (0, 1, 1)
+PASS: gdb.cp/converts.exp: p foo3_type_check (1, 1, 0)
+PASS: gdb.cp/converts.exp: p foo3_type_check (1, 1, 1)
+PASS: gdb.cp/converts.exp: set check type off
+PASS: gdb.cp/converts.exp: show check type
+PASS: gdb.cp/converts.exp: p foo1_type_check (123)
+PASS: gdb.cp/converts.exp: p foo2_type_check (0, 1)
+PASS: gdb.cp/converts.exp: p foo2_type_check (1, 0)
+PASS: gdb.cp/converts.exp: p foo2_type_check (1, 1)
+PASS: gdb.cp/converts.exp: p foo3_type_check (0, 0, 1)
+PASS: gdb.cp/converts.exp: p foo3_type_check (0, 1, 0)
+PASS: gdb.cp/converts.exp: p foo3_type_check (1, 0, 0)
+PASS: gdb.cp/converts.exp: p foo3_type_check (0, 1, 1)
+PASS: gdb.cp/converts.exp: p foo3_type_check (1, 1, 0)
+PASS: gdb.cp/converts.exp: p foo3_type_check (1, 1, 1)
+PASS: gdb.cp/converts.exp: p foo3_2 (1,1)
+Running ./gdb.cp/cpcompletion.exp ...
+PASS: gdb.cp/cpcompletion.exp: complete class methods
+PASS: gdb.cp/cpcompletion.exp: complete class methods beginning with F
+PASS: gdb.cp/cpcompletion.exp: complete p foo1.g
+PASS: gdb.cp/cpcompletion.exp: complete p foo1.base
+PASS: gdb.cp/cpcompletion.exp: complete p foo1.Fo
+PASS: gdb.cp/cpcompletion.exp: complete p a.g
+Running ./gdb.cp/cpexprs.exp ...
+PASS: gdb.cp/cpexprs.exp: set listsize 1
+PASS: gdb.cp/cpexprs.exp: print base1::a_function
+FAIL: gdb.cp/cpexprs.exp: print base1::base1(int)
+FAIL: gdb.cp/cpexprs.exp: print base1::base1(void)
+PASS: gdb.cp/cpexprs.exp: print base2::a_function
+FAIL: gdb.cp/cpexprs.exp: print base2::base2
+FAIL: gdb.cp/cpexprs.exp: print base::base(int)
+FAIL: gdb.cp/cpexprs.exp: print base::base(void)
+PASS: gdb.cp/cpexprs.exp: print base::operator char*
+PASS: gdb.cp/cpexprs.exp: print base::operator delete
+PASS: gdb.cp/cpexprs.exp: print base::operator delete[]
+PASS: gdb.cp/cpexprs.exp: print base::operator fluff*
+PASS: gdb.cp/cpexprs.exp: print base::operator fluff**
+PASS: gdb.cp/cpexprs.exp: print base::operator int
+PASS: gdb.cp/cpexprs.exp: print base::operator new
+PASS: gdb.cp/cpexprs.exp: print base::operator new[]
+PASS: gdb.cp/cpexprs.exp: print base::operator!
+PASS: gdb.cp/cpexprs.exp: print base::operator!=
+PASS: gdb.cp/cpexprs.exp: print base::operator%
+PASS: gdb.cp/cpexprs.exp: print base::operator%=
+PASS: gdb.cp/cpexprs.exp: print base::operator&
+PASS: gdb.cp/cpexprs.exp: print base::operator&&
+PASS: gdb.cp/cpexprs.exp: print base::operator&=
+PASS: gdb.cp/cpexprs.exp: print base::operator()
+PASS: gdb.cp/cpexprs.exp: print base::operator*
+PASS: gdb.cp/cpexprs.exp: print base::operator*=
+PASS: gdb.cp/cpexprs.exp: print base::operator+
+PASS: gdb.cp/cpexprs.exp: print base::operator++
+PASS: gdb.cp/cpexprs.exp: print base::operator+=
+PASS: gdb.cp/cpexprs.exp: print base::operator-
+PASS: gdb.cp/cpexprs.exp: print base::operator--
+PASS: gdb.cp/cpexprs.exp: print base::operator-=
+PASS: gdb.cp/cpexprs.exp: print base::operator/
+PASS: gdb.cp/cpexprs.exp: print base::operator/=
+PASS: gdb.cp/cpexprs.exp: print base::operator<
+PASS: gdb.cp/cpexprs.exp: print base::operator<<
+PASS: gdb.cp/cpexprs.exp: print base::operator<<=
+PASS: gdb.cp/cpexprs.exp: print base::operator<=
+PASS: gdb.cp/cpexprs.exp: print base::operator=
+PASS: gdb.cp/cpexprs.exp: print base::operator==
+PASS: gdb.cp/cpexprs.exp: print base::operator>
+PASS: gdb.cp/cpexprs.exp: print base::operator>=
+PASS: gdb.cp/cpexprs.exp: print base::operator>>
+PASS: gdb.cp/cpexprs.exp: print base::operator>>=
+PASS: gdb.cp/cpexprs.exp: print base::operator[]
+PASS: gdb.cp/cpexprs.exp: print base::operator^
+PASS: gdb.cp/cpexprs.exp: print base::operator^=
+PASS: gdb.cp/cpexprs.exp: print base::operator|
+PASS: gdb.cp/cpexprs.exp: print base::operator|=
+PASS: gdb.cp/cpexprs.exp: print base::operator||
+PASS: gdb.cp/cpexprs.exp: print base::operator~
+PASS: gdb.cp/cpexprs.exp: print base::overload(base&) const
+PASS: gdb.cp/cpexprs.exp: print base::overload(char*) const
+PASS: gdb.cp/cpexprs.exp: print base::overload(int) const
+PASS: gdb.cp/cpexprs.exp: print base::overload(long) const
+PASS: gdb.cp/cpexprs.exp: print base::overload(short) const
+PASS: gdb.cp/cpexprs.exp: print base::overload(void) const
+FAIL: gdb.cp/cpexprs.exp: print base::~base
+PASS: gdb.cp/cpexprs.exp: print derived::a_function
+FAIL: gdb.cp/cpexprs.exp: print derived::derived
+PASS: gdb.cp/cpexprs.exp: print flubber<int, int, int, char, char>
+PASS: gdb.cp/cpexprs.exp: print flubber<int, int, int, char, int>
+PASS: gdb.cp/cpexprs.exp: print flubber<int, int, int, char, long>
+PASS: gdb.cp/cpexprs.exp: print flubber<int, int, int, char, short>
+PASS: gdb.cp/cpexprs.exp: print flubber<int, int, int, int, char>
+PASS: gdb.cp/cpexprs.exp: print flubber<int, int, int, int, int>
+PASS: gdb.cp/cpexprs.exp: print flubber<int, int, int, int, long>
+PASS: gdb.cp/cpexprs.exp: print flubber<int, int, int, int, short>
+PASS: gdb.cp/cpexprs.exp: print flubber<int, int, int, long, char>
+PASS: gdb.cp/cpexprs.exp: print flubber<int, int, int, long, int>
+PASS: gdb.cp/cpexprs.exp: print flubber<int, int, int, long, long>
+PASS: gdb.cp/cpexprs.exp: print flubber<int, int, int, long, short>
+PASS: gdb.cp/cpexprs.exp: print flubber<int, int, int, short, char>
+PASS: gdb.cp/cpexprs.exp: print flubber<int, int, int, short, int>
+PASS: gdb.cp/cpexprs.exp: print flubber<int, int, int, short, long>
+PASS: gdb.cp/cpexprs.exp: print flubber<int, int, int, short, short>
+PASS: gdb.cp/cpexprs.exp: print flubber<int, int, short, int, char>
+PASS: gdb.cp/cpexprs.exp: print flubber<int, int, short, int, int>
+PASS: gdb.cp/cpexprs.exp: print flubber<int, int, short, int, long>
+PASS: gdb.cp/cpexprs.exp: print flubber<int, int, short, int, short>
+PASS: gdb.cp/cpexprs.exp: print flubber<int, int, short, short, int>
+PASS: gdb.cp/cpexprs.exp: print flubber<long, short, long, short, long>
+PASS: gdb.cp/cpexprs.exp: print flubber<short, int, short, int, short>
+PASS: gdb.cp/cpexprs.exp: print policy1::function
+FAIL: gdb.cp/cpexprs.exp: print policy1::policy
+PASS: gdb.cp/cpexprs.exp: print policy2::function
+FAIL: gdb.cp/cpexprs.exp: print policy2::policy
+PASS: gdb.cp/cpexprs.exp: print policy3::function
+FAIL: gdb.cp/cpexprs.exp: print policy3::policy
+PASS: gdb.cp/cpexprs.exp: print policy4::function
+FAIL: gdb.cp/cpexprs.exp: print policy4::policy
+PASS: gdb.cp/cpexprs.exp: print policyd1::function
+FAIL: gdb.cp/cpexprs.exp: print policyd1::policyd
+FAIL: gdb.cp/cpexprs.exp: print policyd1::~policyd
+PASS: gdb.cp/cpexprs.exp: print policyd2::function
+FAIL: gdb.cp/cpexprs.exp: print policyd2::policyd
+FAIL: gdb.cp/cpexprs.exp: print policyd2::~policyd
+PASS: gdb.cp/cpexprs.exp: print policyd3::function
+FAIL: gdb.cp/cpexprs.exp: print policyd3::policyd
+FAIL: gdb.cp/cpexprs.exp: print policyd3::~policyd
+PASS: gdb.cp/cpexprs.exp: print policyd4::function
+FAIL: gdb.cp/cpexprs.exp: print policyd4::policyd
+FAIL: gdb.cp/cpexprs.exp: print policyd4::~policyd
+PASS: gdb.cp/cpexprs.exp: print policyd5::function
+FAIL: gdb.cp/cpexprs.exp: print policyd5::policyd
+FAIL: gdb.cp/cpexprs.exp: print policyd5::~policyd
+PASS: gdb.cp/cpexprs.exp: print policyd<base, operation_1<base> >::function
+FAIL: gdb.cp/cpexprs.exp: print policyd<base, operation_1<base> >::policyd
+FAIL: gdb.cp/cpexprs.exp: print policyd<base, operation_1<base> >::~policyd
+PASS: gdb.cp/cpexprs.exp: print policyd<char, operation_1<char> >::function
+FAIL: gdb.cp/cpexprs.exp: print policyd<char, operation_1<char> >::policyd
+FAIL: gdb.cp/cpexprs.exp: print policyd<char, operation_1<char> >::~policyd
+PASS: gdb.cp/cpexprs.exp: print policyd<int, operation_1<int> >::function
+FAIL: gdb.cp/cpexprs.exp: print policyd<int, operation_1<int> >::policyd
+FAIL: gdb.cp/cpexprs.exp: print policyd<int, operation_1<int> >::~policyd
+FAIL: gdb.cp/cpexprs.exp: print policyd<long, operation_1<long> >::policyd
+FAIL: gdb.cp/cpexprs.exp: print policyd<long, operation_1<long> >::~policyd
+PASS: gdb.cp/cpexprs.exp: print policyd<tclass<int>, operation_1<tclass<int> > >::function
+FAIL: gdb.cp/cpexprs.exp: print policyd<tclass<int>, operation_1<tclass<int> > >::policyd
+FAIL: gdb.cp/cpexprs.exp: print policyd<tclass<int>, operation_1<tclass<int> > >::~policyd
+PASS: gdb.cp/cpexprs.exp: print tclass<base>::do_something
+PASS: gdb.cp/cpexprs.exp: print tclass<char>::do_something
+PASS: gdb.cp/cpexprs.exp: print tclass<int>::do_something
+PASS: gdb.cp/cpexprs.exp: print tclass<long>::do_something
+PASS: gdb.cp/cpexprs.exp: print tclass<short>::do_something
+PASS: gdb.cp/cpexprs.exp: print test_function
+PASS: gdb.cp/cpexprs.exp: list base1::a_function
+PASS: gdb.cp/cpexprs.exp: list base1::base1(int)
+PASS: gdb.cp/cpexprs.exp: list base1::base1(void)
+PASS: gdb.cp/cpexprs.exp: list base2::a_function
+PASS: gdb.cp/cpexprs.exp: list base2::base2
+PASS: gdb.cp/cpexprs.exp: list base::base(int)
+PASS: gdb.cp/cpexprs.exp: list base::base(void)
+PASS: gdb.cp/cpexprs.exp: list base::operator char*
+PASS: gdb.cp/cpexprs.exp: list base::operator delete
+PASS: gdb.cp/cpexprs.exp: list base::operator delete[]
+PASS: gdb.cp/cpexprs.exp: list base::operator fluff*
+PASS: gdb.cp/cpexprs.exp: list base::operator fluff**
+PASS: gdb.cp/cpexprs.exp: list base::operator int
+PASS: gdb.cp/cpexprs.exp: list base::operator new
+PASS: gdb.cp/cpexprs.exp: list base::operator new[]
+PASS: gdb.cp/cpexprs.exp: list base::operator!
+PASS: gdb.cp/cpexprs.exp: list base::operator!=
+PASS: gdb.cp/cpexprs.exp: list base::operator%
+PASS: gdb.cp/cpexprs.exp: list base::operator%=
+PASS: gdb.cp/cpexprs.exp: list base::operator&
+PASS: gdb.cp/cpexprs.exp: list base::operator&&
+PASS: gdb.cp/cpexprs.exp: list base::operator&=
+PASS: gdb.cp/cpexprs.exp: list base::operator()
+PASS: gdb.cp/cpexprs.exp: list base::operator*
+PASS: gdb.cp/cpexprs.exp: list base::operator*=
+PASS: gdb.cp/cpexprs.exp: list base::operator+
+PASS: gdb.cp/cpexprs.exp: list base::operator++
+PASS: gdb.cp/cpexprs.exp: list base::operator+=
+PASS: gdb.cp/cpexprs.exp: list base::operator-
+PASS: gdb.cp/cpexprs.exp: list base::operator--
+PASS: gdb.cp/cpexprs.exp: list base::operator-=
+PASS: gdb.cp/cpexprs.exp: list base::operator/
+PASS: gdb.cp/cpexprs.exp: list base::operator/=
+PASS: gdb.cp/cpexprs.exp: list base::operator<
+PASS: gdb.cp/cpexprs.exp: list base::operator<<
+PASS: gdb.cp/cpexprs.exp: list base::operator<<=
+PASS: gdb.cp/cpexprs.exp: list base::operator<=
+PASS: gdb.cp/cpexprs.exp: list base::operator=
+PASS: gdb.cp/cpexprs.exp: list base::operator==
+PASS: gdb.cp/cpexprs.exp: list base::operator>
+PASS: gdb.cp/cpexprs.exp: list base::operator>=
+PASS: gdb.cp/cpexprs.exp: list base::operator>>
+PASS: gdb.cp/cpexprs.exp: list base::operator>>=
+PASS: gdb.cp/cpexprs.exp: list base::operator[]
+PASS: gdb.cp/cpexprs.exp: list base::operator^
+PASS: gdb.cp/cpexprs.exp: list base::operator^=
+PASS: gdb.cp/cpexprs.exp: list base::operator|
+PASS: gdb.cp/cpexprs.exp: list base::operator|=
+PASS: gdb.cp/cpexprs.exp: list base::operator||
+PASS: gdb.cp/cpexprs.exp: list base::operator~
+PASS: gdb.cp/cpexprs.exp: list base::overload(base&) const
+PASS: gdb.cp/cpexprs.exp: list base::overload(char*) const
+PASS: gdb.cp/cpexprs.exp: list base::overload(int) const
+PASS: gdb.cp/cpexprs.exp: list base::overload(long) const
+PASS: gdb.cp/cpexprs.exp: list base::overload(short) const
+PASS: gdb.cp/cpexprs.exp: list base::overload(void) const
+PASS: gdb.cp/cpexprs.exp: list base::~base
+PASS: gdb.cp/cpexprs.exp: list derived::a_function
+PASS: gdb.cp/cpexprs.exp: list derived::derived
+PASS: gdb.cp/cpexprs.exp: list flubber<int, int, int, char, char>
+PASS: gdb.cp/cpexprs.exp: list flubber<int, int, int, char, int>
+PASS: gdb.cp/cpexprs.exp: list flubber<int, int, int, char, long>
+PASS: gdb.cp/cpexprs.exp: list flubber<int, int, int, char, short>
+PASS: gdb.cp/cpexprs.exp: list flubber<int, int, int, int, char>
+PASS: gdb.cp/cpexprs.exp: list flubber<int, int, int, int, int>
+PASS: gdb.cp/cpexprs.exp: list flubber<int, int, int, int, long>
+PASS: gdb.cp/cpexprs.exp: list flubber<int, int, int, int, short>
+PASS: gdb.cp/cpexprs.exp: list flubber<int, int, int, long, char>
+PASS: gdb.cp/cpexprs.exp: list flubber<int, int, int, long, int>
+PASS: gdb.cp/cpexprs.exp: list flubber<int, int, int, long, long>
+PASS: gdb.cp/cpexprs.exp: list flubber<int, int, int, long, short>
+PASS: gdb.cp/cpexprs.exp: list flubber<int, int, int, short, char>
+PASS: gdb.cp/cpexprs.exp: list flubber<int, int, int, short, int>
+PASS: gdb.cp/cpexprs.exp: list flubber<int, int, int, short, long>
+PASS: gdb.cp/cpexprs.exp: list flubber<int, int, int, short, short>
+PASS: gdb.cp/cpexprs.exp: list flubber<int, int, short, int, char>
+PASS: gdb.cp/cpexprs.exp: list flubber<int, int, short, int, int>
+PASS: gdb.cp/cpexprs.exp: list flubber<int, int, short, int, long>
+PASS: gdb.cp/cpexprs.exp: list flubber<int, int, short, int, short>
+PASS: gdb.cp/cpexprs.exp: list flubber<int, int, short, short, int>
+PASS: gdb.cp/cpexprs.exp: list flubber<long, short, long, short, long>
+PASS: gdb.cp/cpexprs.exp: list flubber<short, int, short, int, short>
+PASS: gdb.cp/cpexprs.exp: list policy1::function
+PASS: gdb.cp/cpexprs.exp: list policy1::policy
+PASS: gdb.cp/cpexprs.exp: list policy2::function
+PASS: gdb.cp/cpexprs.exp: list policy2::policy
+PASS: gdb.cp/cpexprs.exp: list policy3::function
+PASS: gdb.cp/cpexprs.exp: list policy3::policy
+PASS: gdb.cp/cpexprs.exp: list policy4::function
+PASS: gdb.cp/cpexprs.exp: list policy4::policy
+PASS: gdb.cp/cpexprs.exp: list policyd1::function
+PASS: gdb.cp/cpexprs.exp: list policyd1::policyd
+FAIL: gdb.cp/cpexprs.exp: list policyd1::~policyd
+PASS: gdb.cp/cpexprs.exp: list policyd2::function
+PASS: gdb.cp/cpexprs.exp: list policyd2::policyd
+FAIL: gdb.cp/cpexprs.exp: list policyd2::~policyd
+PASS: gdb.cp/cpexprs.exp: list policyd3::function
+PASS: gdb.cp/cpexprs.exp: list policyd3::policyd
+FAIL: gdb.cp/cpexprs.exp: list policyd3::~policyd
+PASS: gdb.cp/cpexprs.exp: list policyd4::function
+PASS: gdb.cp/cpexprs.exp: list policyd4::policyd
+FAIL: gdb.cp/cpexprs.exp: list policyd4::~policyd
+PASS: gdb.cp/cpexprs.exp: list policyd5::function
+PASS: gdb.cp/cpexprs.exp: list policyd5::policyd
+FAIL: gdb.cp/cpexprs.exp: list policyd5::~policyd
+PASS: gdb.cp/cpexprs.exp: list policyd<base, operation_1<base> >::function
+PASS: gdb.cp/cpexprs.exp: list policyd<base, operation_1<base> >::policyd
+PASS: gdb.cp/cpexprs.exp: list policyd<base, operation_1<base> >::~policyd
+PASS: gdb.cp/cpexprs.exp: list policyd<char, operation_1<char> >::function
+PASS: gdb.cp/cpexprs.exp: list policyd<char, operation_1<char> >::policyd
+PASS: gdb.cp/cpexprs.exp: list policyd<char, operation_1<char> >::~policyd
+PASS: gdb.cp/cpexprs.exp: list policyd<int, operation_1<int> >::function
+PASS: gdb.cp/cpexprs.exp: list policyd<int, operation_1<int> >::policyd
+PASS: gdb.cp/cpexprs.exp: list policyd<int, operation_1<int> >::~policyd
+PASS: gdb.cp/cpexprs.exp: list policyd<long, operation_1<long> >::policyd
+PASS: gdb.cp/cpexprs.exp: list policyd<long, operation_1<long> >::~policyd
+PASS: gdb.cp/cpexprs.exp: list policyd<tclass<int>, operation_1<tclass<int> > >::function
+PASS: gdb.cp/cpexprs.exp: list policyd<tclass<int>, operation_1<tclass<int> > >::policyd
+PASS: gdb.cp/cpexprs.exp: list policyd<tclass<int>, operation_1<tclass<int> > >::~policyd
+PASS: gdb.cp/cpexprs.exp: list tclass<base>::do_something
+PASS: gdb.cp/cpexprs.exp: list tclass<char>::do_something
+PASS: gdb.cp/cpexprs.exp: list tclass<int>::do_something
+PASS: gdb.cp/cpexprs.exp: list tclass<long>::do_something
+PASS: gdb.cp/cpexprs.exp: list tclass<short>::do_something
+PASS: gdb.cp/cpexprs.exp: list test_function
+PASS: gdb.cp/cpexprs.exp: continue to base1::a_function
+PASS: gdb.cp/cpexprs.exp: continue to base1::base1(int)
+PASS: gdb.cp/cpexprs.exp: continue to base1::base1(void)
+PASS: gdb.cp/cpexprs.exp: continue to base2::a_function
+PASS: gdb.cp/cpexprs.exp: continue to base2::base2
+PASS: gdb.cp/cpexprs.exp: continue to base::base(int)
+PASS: gdb.cp/cpexprs.exp: continue to base::base(void)
+PASS: gdb.cp/cpexprs.exp: continue to base::operator char*
+PASS: gdb.cp/cpexprs.exp: continue to base::operator delete
+PASS: gdb.cp/cpexprs.exp: continue to base::operator delete[]
+PASS: gdb.cp/cpexprs.exp: continue to base::operator fluff*
+PASS: gdb.cp/cpexprs.exp: continue to base::operator fluff**
+PASS: gdb.cp/cpexprs.exp: continue to base::operator int
+PASS: gdb.cp/cpexprs.exp: continue to base::operator new
+PASS: gdb.cp/cpexprs.exp: continue to base::operator new[]
+PASS: gdb.cp/cpexprs.exp: continue to base::operator!
+PASS: gdb.cp/cpexprs.exp: continue to base::operator!=
+PASS: gdb.cp/cpexprs.exp: continue to base::operator%
+PASS: gdb.cp/cpexprs.exp: continue to base::operator%=
+PASS: gdb.cp/cpexprs.exp: continue to base::operator&
+PASS: gdb.cp/cpexprs.exp: continue to base::operator&&
+PASS: gdb.cp/cpexprs.exp: continue to base::operator&=
+PASS: gdb.cp/cpexprs.exp: continue to base::operator()
+PASS: gdb.cp/cpexprs.exp: continue to base::operator*
+PASS: gdb.cp/cpexprs.exp: continue to base::operator*=
+PASS: gdb.cp/cpexprs.exp: continue to base::operator+
+PASS: gdb.cp/cpexprs.exp: continue to base::operator++
+PASS: gdb.cp/cpexprs.exp: continue to base::operator+=
+PASS: gdb.cp/cpexprs.exp: continue to base::operator-
+PASS: gdb.cp/cpexprs.exp: continue to base::operator--
+PASS: gdb.cp/cpexprs.exp: continue to base::operator-=
+PASS: gdb.cp/cpexprs.exp: continue to base::operator/
+PASS: gdb.cp/cpexprs.exp: continue to base::operator/=
+PASS: gdb.cp/cpexprs.exp: continue to base::operator<
+PASS: gdb.cp/cpexprs.exp: continue to base::operator<<
+PASS: gdb.cp/cpexprs.exp: continue to base::operator<<=
+PASS: gdb.cp/cpexprs.exp: continue to base::operator<=
+PASS: gdb.cp/cpexprs.exp: continue to base::operator=
+PASS: gdb.cp/cpexprs.exp: continue to base::operator==
+PASS: gdb.cp/cpexprs.exp: continue to base::operator>
+PASS: gdb.cp/cpexprs.exp: continue to base::operator>=
+PASS: gdb.cp/cpexprs.exp: continue to base::operator>>
+PASS: gdb.cp/cpexprs.exp: continue to base::operator>>=
+PASS: gdb.cp/cpexprs.exp: continue to base::operator[]
+PASS: gdb.cp/cpexprs.exp: continue to base::operator^
+PASS: gdb.cp/cpexprs.exp: continue to base::operator^=
+PASS: gdb.cp/cpexprs.exp: continue to base::operator|
+PASS: gdb.cp/cpexprs.exp: continue to base::operator|=
+PASS: gdb.cp/cpexprs.exp: continue to base::operator||
+PASS: gdb.cp/cpexprs.exp: continue to base::operator~
+PASS: gdb.cp/cpexprs.exp: continue to base::overload(base&) const
+PASS: gdb.cp/cpexprs.exp: continue to base::overload(char*) const
+PASS: gdb.cp/cpexprs.exp: continue to base::overload(int) const
+PASS: gdb.cp/cpexprs.exp: continue to base::overload(long) const
+PASS: gdb.cp/cpexprs.exp: continue to base::overload(short) const
+PASS: gdb.cp/cpexprs.exp: continue to base::overload(void) const
+PASS: gdb.cp/cpexprs.exp: continue to base::~base
+PASS: gdb.cp/cpexprs.exp: continue to derived::a_function
+PASS: gdb.cp/cpexprs.exp: continue to derived::derived
+PASS: gdb.cp/cpexprs.exp: continue to flubber<int, int, int, char, char>
+PASS: gdb.cp/cpexprs.exp: continue to flubber<int, int, int, char, int>
+PASS: gdb.cp/cpexprs.exp: continue to flubber<int, int, int, char, long>
+PASS: gdb.cp/cpexprs.exp: continue to flubber<int, int, int, char, short>
+PASS: gdb.cp/cpexprs.exp: continue to flubber<int, int, int, int, char>
+PASS: gdb.cp/cpexprs.exp: continue to flubber<int, int, int, int, int>
+PASS: gdb.cp/cpexprs.exp: continue to flubber<int, int, int, int, long>
+PASS: gdb.cp/cpexprs.exp: continue to flubber<int, int, int, int, short>
+PASS: gdb.cp/cpexprs.exp: continue to flubber<int, int, int, long, char>
+PASS: gdb.cp/cpexprs.exp: continue to flubber<int, int, int, long, int>
+PASS: gdb.cp/cpexprs.exp: continue to flubber<int, int, int, long, long>
+PASS: gdb.cp/cpexprs.exp: continue to flubber<int, int, int, long, short>
+PASS: gdb.cp/cpexprs.exp: continue to flubber<int, int, int, short, char>
+PASS: gdb.cp/cpexprs.exp: continue to flubber<int, int, int, short, int>
+PASS: gdb.cp/cpexprs.exp: continue to flubber<int, int, int, short, long>
+PASS: gdb.cp/cpexprs.exp: continue to flubber<int, int, int, short, short>
+PASS: gdb.cp/cpexprs.exp: continue to flubber<int, int, short, int, char>
+PASS: gdb.cp/cpexprs.exp: continue to flubber<int, int, short, int, int>
+PASS: gdb.cp/cpexprs.exp: continue to flubber<int, int, short, int, long>
+PASS: gdb.cp/cpexprs.exp: continue to flubber<int, int, short, int, short>
+PASS: gdb.cp/cpexprs.exp: continue to flubber<int, int, short, short, int>
+PASS: gdb.cp/cpexprs.exp: continue to flubber<long, short, long, short, long>
+PASS: gdb.cp/cpexprs.exp: continue to flubber<short, int, short, int, short>
+PASS: gdb.cp/cpexprs.exp: continue to policy1::function
+PASS: gdb.cp/cpexprs.exp: continue to policy1::policy
+PASS: gdb.cp/cpexprs.exp: continue to policy2::function
+PASS: gdb.cp/cpexprs.exp: continue to policy2::policy
+PASS: gdb.cp/cpexprs.exp: continue to policy3::function
+PASS: gdb.cp/cpexprs.exp: continue to policy3::policy
+PASS: gdb.cp/cpexprs.exp: continue to policy4::function
+PASS: gdb.cp/cpexprs.exp: continue to policy4::policy
+PASS: gdb.cp/cpexprs.exp: continue to policyd1::function
+PASS: gdb.cp/cpexprs.exp: continue to policyd1::policyd
+FAIL: gdb.cp/cpexprs.exp: setting breakpoint at policyd1::~policyd
+FAIL: gdb.cp/cpexprs.exp: continue to policyd1::~policyd
+PASS: gdb.cp/cpexprs.exp: continue to policyd2::function
+PASS: gdb.cp/cpexprs.exp: continue to policyd2::policyd
+FAIL: gdb.cp/cpexprs.exp: setting breakpoint at policyd2::~policyd
+FAIL: gdb.cp/cpexprs.exp: continue to policyd2::~policyd
+PASS: gdb.cp/cpexprs.exp: continue to policyd3::function
+PASS: gdb.cp/cpexprs.exp: continue to policyd3::policyd
+FAIL: gdb.cp/cpexprs.exp: setting breakpoint at policyd3::~policyd
+FAIL: gdb.cp/cpexprs.exp: continue to policyd3::~policyd
+PASS: gdb.cp/cpexprs.exp: continue to policyd4::function
+PASS: gdb.cp/cpexprs.exp: continue to policyd4::policyd
+FAIL: gdb.cp/cpexprs.exp: setting breakpoint at policyd4::~policyd
+FAIL: gdb.cp/cpexprs.exp: continue to policyd4::~policyd
+PASS: gdb.cp/cpexprs.exp: continue to policyd5::function
+PASS: gdb.cp/cpexprs.exp: continue to policyd5::policyd
+FAIL: gdb.cp/cpexprs.exp: setting breakpoint at policyd5::~policyd
+FAIL: gdb.cp/cpexprs.exp: continue to policyd5::~policyd
+PASS: gdb.cp/cpexprs.exp: continue to policyd<base, operation_1<base> >::function
+PASS: gdb.cp/cpexprs.exp: continue to policyd<base, operation_1<base> >::policyd
+PASS: gdb.cp/cpexprs.exp: continue to policyd<base, operation_1<base> >::~policyd
+PASS: gdb.cp/cpexprs.exp: continue to policyd<char, operation_1<char> >::function
+PASS: gdb.cp/cpexprs.exp: continue to policyd<char, operation_1<char> >::policyd
+PASS: gdb.cp/cpexprs.exp: continue to policyd<char, operation_1<char> >::~policyd
+PASS: gdb.cp/cpexprs.exp: continue to policyd<int, operation_1<int> >::function
+PASS: gdb.cp/cpexprs.exp: continue to policyd<int, operation_1<int> >::policyd
+PASS: gdb.cp/cpexprs.exp: continue to policyd<int, operation_1<int> >::~policyd
+PASS: gdb.cp/cpexprs.exp: continue to policyd<long, operation_1<long> >::policyd
+PASS: gdb.cp/cpexprs.exp: continue to policyd<long, operation_1<long> >::~policyd
+PASS: gdb.cp/cpexprs.exp: continue to policyd<tclass<int>, operation_1<tclass<int> > >::function
+PASS: gdb.cp/cpexprs.exp: continue to policyd<tclass<int>, operation_1<tclass<int> > >::policyd
+PASS: gdb.cp/cpexprs.exp: continue to policyd<tclass<int>, operation_1<tclass<int> > >::~policyd
+PASS: gdb.cp/cpexprs.exp: continue to tclass<base>::do_something
+PASS: gdb.cp/cpexprs.exp: continue to tclass<char>::do_something
+PASS: gdb.cp/cpexprs.exp: continue to tclass<int>::do_something
+PASS: gdb.cp/cpexprs.exp: continue to tclass<long>::do_something
+PASS: gdb.cp/cpexprs.exp: continue to tclass<short>::do_something
+PASS: gdb.cp/cpexprs.exp: p 'CV::m(int)'
+PASS: gdb.cp/cpexprs.exp: p CV::m(int)
+PASS: gdb.cp/cpexprs.exp: p 'CV::m(int) const'
+KFAIL: gdb.cp/cpexprs.exp: p CV::m(int) const (PRMS: c++/14186)
+PASS: gdb.cp/cpexprs.exp: p 'CV::m(int) volatile'
+KFAIL: gdb.cp/cpexprs.exp: p CV::m(int) volatile (PRMS: c++/14186)
+PASS: gdb.cp/cpexprs.exp: p 'CV::m(int) const volatile'
+KFAIL: gdb.cp/cpexprs.exp: p CV::m(int) const volatile (PRMS: c++/14186)
+PASS: gdb.cp/cpexprs.exp: p CV_f(int)
+PASS: gdb.cp/cpexprs.exp: p CV_f(CV::t)
+PASS: gdb.cp/cpexprs.exp: p CV_f(CV::i)
+Running ./gdb.cp/cplabel.exp ...
+PASS: gdb.cp/cplabel.exp: break foo::bar:to_the_top
+PASS: gdb.cp/cplabel.exp: break foo::bar:get_out_of_here
+PASS: gdb.cp/cplabel.exp: break foo::baz:to_the_top
+PASS: gdb.cp/cplabel.exp: break foo::baz:get_out_of_here
+Running ./gdb.cp/cplusfuncs.exp ...
+PASS: gdb.cp/cplusfuncs.exp: set width 0
+PASS: gdb.cp/cplusfuncs.exp: set language c++
+PASS: gdb.cp/cplusfuncs.exp: detect dm_operator_comma
+PASS: gdb.cp/cplusfuncs.exp: detect dm_operator_char_star
+PASS: gdb.cp/cplusfuncs.exp: detect dm_type_char_star
+PASS: gdb.cp/cplusfuncs.exp: detect dm_type_foo_ref
+PASS: gdb.cp/cplusfuncs.exp: detect dm_type_int_star
+PASS: gdb.cp/cplusfuncs.exp: detect dm_type_long_star
+PASS: gdb.cp/cplusfuncs.exp: detect dm_type_unsigned_int
+PASS: gdb.cp/cplusfuncs.exp: detect dm_type_void
+PASS: gdb.cp/cplusfuncs.exp: detect dm_type_void_star
+PASS: gdb.cp/cplusfuncs.exp: detect dm_type_short
+PASS: gdb.cp/cplusfuncs.exp: detect dm_type_unsigned_short
+PASS: gdb.cp/cplusfuncs.exp: detect dm_type_long
+PASS: gdb.cp/cplusfuncs.exp: detect dm_type_unsigned_long
+PASS: gdb.cp/cplusfuncs.exp: detect dm_type_typedef
+PASS: gdb.cp/cplusfuncs.exp: print &'overload1arg(void)'
+PASS: gdb.cp/cplusfuncs.exp: print &'overload1arg(char)'
+PASS: gdb.cp/cplusfuncs.exp: print &'overload1arg(signed char)'
+PASS: gdb.cp/cplusfuncs.exp: print &'overload1arg(unsigned char)'
+PASS: gdb.cp/cplusfuncs.exp: print &'overload1arg(short)'
+PASS: gdb.cp/cplusfuncs.exp: print &'overload1arg(unsigned short)'
+PASS: gdb.cp/cplusfuncs.exp: print &'overload1arg(int)'
+PASS: gdb.cp/cplusfuncs.exp: print &'overload1arg(unsigned int)'
+PASS: gdb.cp/cplusfuncs.exp: print &'overload1arg(long)'
+PASS: gdb.cp/cplusfuncs.exp: print &'overload1arg(unsigned long)'
+PASS: gdb.cp/cplusfuncs.exp: print &'overload1arg(float)'
+PASS: gdb.cp/cplusfuncs.exp: print &'overload1arg(double)'
+PASS: gdb.cp/cplusfuncs.exp: print &'overloadargs(int)'
+PASS: gdb.cp/cplusfuncs.exp: print &'overloadargs(int, int)'
+PASS: gdb.cp/cplusfuncs.exp: print &'overloadargs(int, int, int)'
+PASS: gdb.cp/cplusfuncs.exp: print &'overloadargs(int, int, int, int)'
+PASS: gdb.cp/cplusfuncs.exp: print &'overloadargs(int, int, int, int, int)'
+PASS: gdb.cp/cplusfuncs.exp: print &'overloadargs(int, int, int, int, int, int)'
+PASS: gdb.cp/cplusfuncs.exp: print &'overloadargs(int, int, int, int, int, int, int)'
+PASS: gdb.cp/cplusfuncs.exp: print &'overloadargs(int, int, int, int, int, int, int, int)'
+PASS: gdb.cp/cplusfuncs.exp: print &'overloadargs(int, int, int, int, int, int, int, int, int)'
+PASS: gdb.cp/cplusfuncs.exp: print &'overloadargs(int, int, int, int, int, int, int, int, int, int)'
+PASS: gdb.cp/cplusfuncs.exp: print &'overloadargs(int, int, int, int, int, int, int, int, int, int, int)'
+PASS: gdb.cp/cplusfuncs.exp: print &foo::operator*(foo&)
+PASS: gdb.cp/cplusfuncs.exp: print &foo::operator%(foo&)
+PASS: gdb.cp/cplusfuncs.exp: print &foo::operator-(foo&)
+PASS: gdb.cp/cplusfuncs.exp: print &foo::operator>>(foo&)
+PASS: gdb.cp/cplusfuncs.exp: print &foo::operator!=(foo&)
+PASS: gdb.cp/cplusfuncs.exp: print &foo::operator>(foo&)
+PASS: gdb.cp/cplusfuncs.exp: print &foo::operator>=(foo&)
+PASS: gdb.cp/cplusfuncs.exp: print &foo::operator|(foo&)
+PASS: gdb.cp/cplusfuncs.exp: print &foo::operator&&(foo&)
+PASS: gdb.cp/cplusfuncs.exp: print &foo::operator!(void)
+PASS: gdb.cp/cplusfuncs.exp: print &foo::operator++(int)
+PASS: gdb.cp/cplusfuncs.exp: print &foo::operator=(foo&)
+PASS: gdb.cp/cplusfuncs.exp: print &foo::operator+=(foo&)
+PASS: gdb.cp/cplusfuncs.exp: print &foo::operator*=(foo&)
+PASS: gdb.cp/cplusfuncs.exp: print &foo::operator%=(foo&)
+PASS: gdb.cp/cplusfuncs.exp: print &foo::operator>>=(foo&)
+PASS: gdb.cp/cplusfuncs.exp: print &foo::operator|=(foo&)
+PASS: gdb.cp/cplusfuncs.exp: print &foo::operator,(foo&)
+PASS: gdb.cp/cplusfuncs.exp: print &foo::operator/(foo&)
+PASS: gdb.cp/cplusfuncs.exp: print &foo::operator+(foo&)
+PASS: gdb.cp/cplusfuncs.exp: print &foo::operator<<(foo&)
+PASS: gdb.cp/cplusfuncs.exp: print &foo::operator==(foo&)
+PASS: gdb.cp/cplusfuncs.exp: print &foo::operator<(foo&)
+PASS: gdb.cp/cplusfuncs.exp: print &foo::operator<=(foo&)
+PASS: gdb.cp/cplusfuncs.exp: print &foo::operator&(foo&)
+PASS: gdb.cp/cplusfuncs.exp: print &foo::operator^(foo&)
+PASS: gdb.cp/cplusfuncs.exp: print &foo::operator||(foo&)
+PASS: gdb.cp/cplusfuncs.exp: print &foo::operator~(void)
+PASS: gdb.cp/cplusfuncs.exp: print &foo::operator--(int)
+PASS: gdb.cp/cplusfuncs.exp: print &foo::operator->(void)
+PASS: gdb.cp/cplusfuncs.exp: print &foo::operator-=(foo&)
+PASS: gdb.cp/cplusfuncs.exp: print &foo::operator/=(foo&)
+PASS: gdb.cp/cplusfuncs.exp: print &foo::operator<<=(foo&)
+PASS: gdb.cp/cplusfuncs.exp: print &foo::operator&=(foo&)
+PASS: gdb.cp/cplusfuncs.exp: print &foo::operator^=(foo&)
+PASS: gdb.cp/cplusfuncs.exp: print &foo::operator->*(foo&)
+PASS: gdb.cp/cplusfuncs.exp: print &foo::operator[](foo&)
+PASS: gdb.cp/cplusfuncs.exp: print &foo::operator()(foo&)
+PASS: gdb.cp/cplusfuncs.exp: print &foo::operator new
+PASS: gdb.cp/cplusfuncs.exp: print &foo::operator new[]
+PASS: gdb.cp/cplusfuncs.exp: print &foo::operator delete(void*)
+PASS: gdb.cp/cplusfuncs.exp: print &foo::operator delete(void*)
+PASS: gdb.cp/cplusfuncs.exp: print &foo::operator int(void)
+PASS: gdb.cp/cplusfuncs.exp: print &foo::operator char*(void)
+PASS: gdb.cp/cplusfuncs.exp: print &hairyfunc1
+PASS: gdb.cp/cplusfuncs.exp: print &hairyfunc2
+PASS: gdb.cp/cplusfuncs.exp: print &hairyfunc3
+PASS: gdb.cp/cplusfuncs.exp: print &hairyfunc4
+PASS: gdb.cp/cplusfuncs.exp: print &hairyfunc5
+PASS: gdb.cp/cplusfuncs.exp: print &hairyfunc6
+PASS: gdb.cp/cplusfuncs.exp: print &hairyfunc7
+PASS: gdb.cp/cplusfuncs.exp: info function for "operator\*("
+PASS: gdb.cp/cplusfuncs.exp: info function for "operator%("
+PASS: gdb.cp/cplusfuncs.exp: info function for "operator-("
+PASS: gdb.cp/cplusfuncs.exp: info function for "operator>>("
+PASS: gdb.cp/cplusfuncs.exp: info function for "operator!=("
+PASS: gdb.cp/cplusfuncs.exp: info function for "operator>("
+PASS: gdb.cp/cplusfuncs.exp: info function for "operator>=("
+PASS: gdb.cp/cplusfuncs.exp: info function for "operator|("
+PASS: gdb.cp/cplusfuncs.exp: info function for "operator&&("
+PASS: gdb.cp/cplusfuncs.exp: info function for "operator!("
+PASS: gdb.cp/cplusfuncs.exp: info function for "operator++("
+PASS: gdb.cp/cplusfuncs.exp: info function for "operator=("
+PASS: gdb.cp/cplusfuncs.exp: info function for "operator+=("
+PASS: gdb.cp/cplusfuncs.exp: info function for "operator\*=("
+PASS: gdb.cp/cplusfuncs.exp: info function for "operator%=("
+PASS: gdb.cp/cplusfuncs.exp: info function for "operator>>=("
+PASS: gdb.cp/cplusfuncs.exp: info function for "operator|=("
+PASS: gdb.cp/cplusfuncs.exp: info function for "operator,("
+PASS: gdb.cp/cplusfuncs.exp: info function for "operator/("
+PASS: gdb.cp/cplusfuncs.exp: info function for "operator+("
+PASS: gdb.cp/cplusfuncs.exp: info function for "operator<<("
+PASS: gdb.cp/cplusfuncs.exp: info function for "operator==("
+PASS: gdb.cp/cplusfuncs.exp: info function for "operator<("
+PASS: gdb.cp/cplusfuncs.exp: info function for "operator<=("
+PASS: gdb.cp/cplusfuncs.exp: info function for "operator&("
+PASS: gdb.cp/cplusfuncs.exp: info function for "operator^("
+PASS: gdb.cp/cplusfuncs.exp: info function for "operator||("
+PASS: gdb.cp/cplusfuncs.exp: info function for "operator~("
+PASS: gdb.cp/cplusfuncs.exp: info function for "operator--("
+PASS: gdb.cp/cplusfuncs.exp: info function for "operator->("
+PASS: gdb.cp/cplusfuncs.exp: info function for "operator-=("
+PASS: gdb.cp/cplusfuncs.exp: info function for "operator/=("
+PASS: gdb.cp/cplusfuncs.exp: info function for "operator<<=("
+PASS: gdb.cp/cplusfuncs.exp: info function for "operator&=("
+PASS: gdb.cp/cplusfuncs.exp: info function for "operator^=("
+PASS: gdb.cp/cplusfuncs.exp: info function for "operator->\*("
+PASS: gdb.cp/cplusfuncs.exp: info function for "operator\[\]("
+PASS: gdb.cp/cplusfuncs.exp: info function for "operator new("
+PASS: gdb.cp/cplusfuncs.exp: info function for "operator delete("
+PASS: gdb.cp/cplusfuncs.exp: info function for "operator int("
+PASS: gdb.cp/cplusfuncs.exp: info function for "operator()("
+PASS: gdb.cp/cplusfuncs.exp: info function for "operator char\*("
+PASS: gdb.cp/cplusfuncs.exp: list foo::operator int*
+Running ./gdb.cp/cp-relocate.exp ...
+PASS: gdb.cp/cp-relocate.exp: info functions
+PASS: gdb.cp/cp-relocate.exp: get address of func<1>(int)
+PASS: gdb.cp/cp-relocate.exp: get address of func<2>(int)
+PASS: gdb.cp/cp-relocate.exp: get address of caller
+PASS: gdb.cp/cp-relocate.exp: C++ functions have different addresses
+PASS: gdb.cp/cp-relocate.exp: info file
+PASS: gdb.cp/cp-relocate.exp: add-symbol-file cp-relocate.o
+PASS: gdb.cp/cp-relocate.exp: break *func<1>(int)
+PASS: gdb.cp/cp-relocate.exp: break *func<2>(int)
+Running ./gdb.cp/ctti.exp ...
+PASS: gdb.cp/ctti.exp: continue to breakpoint: marker add1
+PASS: gdb.cp/ctti.exp: print c
+PASS: gdb.cp/ctti.exp: print f
+PASS: gdb.cp/ctti.exp: print i
+Running ./gdb.cp/debug-expr.exp ...
+PASS: gdb.cp/debug-expr.exp: set language c++
+PASS: gdb.cp/debug-expr.exp: set debug expression 1
+PASS: gdb.cp/debug-expr.exp: print static_cast<void*>(0)
+PASS: gdb.cp/debug-expr.exp: print reinterpret_cast<void*>(0)
+PASS: gdb.cp/debug-expr.exp: print dynamic_cast<void*>(0)
+Running ./gdb.cp/demangle.exp ...
+PASS: gdb.cp/demangle.exp: set language c++
+PASS: gdb.cp/demangle.exp: set width 0
+PASS: gdb.cp/demangle.exp: lucid: set demangle-style
+PASS: gdb.cp/demangle.exp: lucid: check demangling style
+PASS: gdb.cp/demangle.exp: lucid: WS__FR7istream
+PASS: gdb.cp/demangle.exp: lucid: __aa__3fooFR3foo
+PASS: gdb.cp/demangle.exp: lucid: __aad__3fooFR3foo
+PASS: gdb.cp/demangle.exp: lucid: __ad__3fooFR3foo
+PASS: gdb.cp/demangle.exp: lucid: __adv__3fooFR3foo
+PASS: gdb.cp/demangle.exp: lucid: __adv__7complexF7complex
+PASS: gdb.cp/demangle.exp: lucid: __aer__3fooFR3foo
+PASS: gdb.cp/demangle.exp: lucid: __als__3fooFR3foo
+PASS: gdb.cp/demangle.exp: lucid: __amd__3fooFR3foo
+PASS: gdb.cp/demangle.exp: lucid: __ami__3fooFR3foo
+PASS: gdb.cp/demangle.exp: lucid: __amu__3fooFR3foo
+PASS: gdb.cp/demangle.exp: lucid: __amu__7complexF7complex
+PASS: gdb.cp/demangle.exp: lucid: __aor__3fooFR3foo
+PASS: gdb.cp/demangle.exp: lucid: __apl__3fooFR3foo
+PASS: gdb.cp/demangle.exp: lucid: __ars__3fooFR3foo
+PASS: gdb.cp/demangle.exp: lucid: __as__18istream_withassignFP9streambuf
+PASS: gdb.cp/demangle.exp: lucid: __as__18istream_withassignFR7istream
+PASS: gdb.cp/demangle.exp: lucid: __as__3fooFR3foo
+PASS: gdb.cp/demangle.exp: lucid: __as__3iosFR3ios
+PASS: gdb.cp/demangle.exp: lucid: __cl__3fooFR3foo
+PASS: gdb.cp/demangle.exp: lucid: __cm__3fooFR3foo
+PASS: gdb.cp/demangle.exp: lucid: __co__3fooFv
+PASS: gdb.cp/demangle.exp: lucid: __ct__10istrstreamFPc
+PASS: gdb.cp/demangle.exp: lucid: __ct__10istrstreamFPci
+PASS: gdb.cp/demangle.exp: lucid: __ct__10ostrstreamFPciT2
+PASS: gdb.cp/demangle.exp: lucid: __ct__10ostrstreamFv
+PASS: gdb.cp/demangle.exp: lucid: __ct__10smanip_intFPFR3iosi_R3iosi
+PASS: gdb.cp/demangle.exp: lucid: __ct__11c_exceptionFPcRC7complexT2
+PASS: gdb.cp/demangle.exp: lucid: __ct__11fstreambaseFPCciT2
+PASS: gdb.cp/demangle.exp: lucid: __ct__11fstreambaseFi
+PASS: gdb.cp/demangle.exp: lucid: __ct__11fstreambaseFiPcT1
+PASS: gdb.cp/demangle.exp: lucid: __ct__11fstreambaseFv
+PASS: gdb.cp/demangle.exp: lucid: __ct__11smanip_longFPFR3iosl_R3iosl
+PASS: gdb.cp/demangle.exp: lucid: __ct__11stdiostreamFP4FILE
+PASS: gdb.cp/demangle.exp: lucid: __ct__12strstreambufFPFl_PvPFPv_v
+PASS: gdb.cp/demangle.exp: lucid: __ct__12strstreambufFPUciT1
+PASS: gdb.cp/demangle.exp: lucid: __ct__12strstreambufFPciT1
+PASS: gdb.cp/demangle.exp: lucid: __ct__12strstreambufFi
+PASS: gdb.cp/demangle.exp: lucid: __ct__12strstreambufFv
+PASS: gdb.cp/demangle.exp: lucid: __ct__13strstreambaseFPciT1
+PASS: gdb.cp/demangle.exp: lucid: __ct__3fooFR3foo
+PASS: gdb.cp/demangle.exp: lucid: __ct__3fooFi
+PASS: gdb.cp/demangle.exp: lucid: __ct__3fooFiN31
+PASS: gdb.cp/demangle.exp: lucid: __ct__3fooFiPCc
+PASS: gdb.cp/demangle.exp: lucid: __ct__3fooFiR3fooT1T2T1T2
+PASS: gdb.cp/demangle.exp: lucid: __ct__3iosFP9streambuf
+PASS: gdb.cp/demangle.exp: lucid: __ct__7filebufFiPcT1
+PASS: gdb.cp/demangle.exp: lucid: __ct__7fstreamFPCciT2
+PASS: gdb.cp/demangle.exp: lucid: __ct__7fstreamFiPcT1
+PASS: gdb.cp/demangle.exp: lucid: __ct__7istreamFP9streambuf
+PASS: gdb.cp/demangle.exp: lucid: __ct__7istreamFP9streambufiP7ostream
+PASS: gdb.cp/demangle.exp: lucid: __ct__7istreamFiPcT1
+PASS: gdb.cp/demangle.exp: lucid: __ct__7istreamFiT1P7ostream
+PASS: gdb.cp/demangle.exp: lucid: __ct__7ostreamFP9streambuf
+PASS: gdb.cp/demangle.exp: lucid: __ct__7ostreamFiPc
+PASS: gdb.cp/demangle.exp: lucid: __ct__8ifstreamFPCciT2
+PASS: gdb.cp/demangle.exp: lucid: __ct__8ifstreamFiPcT1
+PASS: gdb.cp/demangle.exp: lucid: __ct__Q23foo3barFv
+PASS: gdb.cp/demangle.exp: lucid: __ct__Q33foo3bar4bellFv
+PASS: gdb.cp/demangle.exp: lucid: __dl__3fooSFPv
+PASS: gdb.cp/demangle.exp: lucid: __dl__FPv
+PASS: gdb.cp/demangle.exp: lucid: __dt__10istrstreamFv
+PASS: gdb.cp/demangle.exp: lucid: __dt__Q23foo3barFv
+PASS: gdb.cp/demangle.exp: lucid: __dt__Q33foo3bar4bellFv
+PASS: gdb.cp/demangle.exp: lucid: __dv__3fooFR3foo
+PASS: gdb.cp/demangle.exp: lucid: __dv__F7complexT1
+PASS: gdb.cp/demangle.exp: lucid: __eq__3fooFR3foo
+PASS: gdb.cp/demangle.exp: lucid: __er__3fooFR3foo
+PASS: gdb.cp/demangle.exp: lucid: __ge__3fooFR3foo
+PASS: gdb.cp/demangle.exp: lucid: __gt__3fooFR3foo
+PASS: gdb.cp/demangle.exp: lucid: __le__3fooFR3foo
+PASS: gdb.cp/demangle.exp: lucid: __ls__3fooFR3foo
+PASS: gdb.cp/demangle.exp: lucid: __ls__7ostreamFP9streambuf
+PASS: gdb.cp/demangle.exp: lucid: __ls__7ostreamFPCc
+PASS: gdb.cp/demangle.exp: lucid: __ls__7ostreamFPFR3ios_R3ios
+PASS: gdb.cp/demangle.exp: lucid: __ls__7ostreamFPv
+PASS: gdb.cp/demangle.exp: lucid: __ls__7ostreamFUi
+PASS: gdb.cp/demangle.exp: lucid: __ls__7ostreamFUl
+PASS: gdb.cp/demangle.exp: lucid: __ls__7ostreamFd
+PASS: gdb.cp/demangle.exp: lucid: __ls__7ostreamFf
+PASS: gdb.cp/demangle.exp: lucid: __ls__7ostreamFi
+PASS: gdb.cp/demangle.exp: lucid: __ls__7ostreamFl
+PASS: gdb.cp/demangle.exp: lucid: __ls__FR7ostream7complex
+PASS: gdb.cp/demangle.exp: lucid: __lt__3fooFR3foo
+PASS: gdb.cp/demangle.exp: lucid: __md__3fooFR3foo
+PASS: gdb.cp/demangle.exp: lucid: __mi__3fooFR3foo
+PASS: gdb.cp/demangle.exp: lucid: __ml__3fooFR3foo
+PASS: gdb.cp/demangle.exp: lucid: __ml__F7complexT1
+PASS: gdb.cp/demangle.exp: lucid: __mm__3fooFi
+PASS: gdb.cp/demangle.exp: lucid: __ne__3fooFR3foo
+PASS: gdb.cp/demangle.exp: lucid: __nt__3fooFv
+PASS: gdb.cp/demangle.exp: lucid: __nw__3fooSFi
+PASS: gdb.cp/demangle.exp: lucid: __nw__FUi
+PASS: gdb.cp/demangle.exp: lucid: __nw__FUiPv
+PASS: gdb.cp/demangle.exp: lucid: __oo__3fooFR3foo
+PASS: gdb.cp/demangle.exp: lucid: __opPc__3fooFv
+PASS: gdb.cp/demangle.exp: lucid: __opi__3fooFv
+PASS: gdb.cp/demangle.exp: lucid: __or__3fooFR3foo
+PASS: gdb.cp/demangle.exp: lucid: __pl__3fooFR3foo
+PASS: gdb.cp/demangle.exp: lucid: __pp__3fooFi
+PASS: gdb.cp/demangle.exp: lucid: __pt__3fooFv
+PASS: gdb.cp/demangle.exp: lucid: __rm__3fooFR3foo
+PASS: gdb.cp/demangle.exp: lucid: __rs__3fooFR3foo
+PASS: gdb.cp/demangle.exp: lucid: __rs__7istreamFP9streambuf
+PASS: gdb.cp/demangle.exp: lucid: __rs__7istreamFPFR3ios_R3ios
+PASS: gdb.cp/demangle.exp: lucid: __rs__7istreamFPFR7istream_R7istream
+PASS: gdb.cp/demangle.exp: lucid: __rs__7istreamFPUc
+PASS: gdb.cp/demangle.exp: lucid: __rs__7istreamFPc
+PASS: gdb.cp/demangle.exp: lucid: __rs__7istreamFRUi
+PASS: gdb.cp/demangle.exp: lucid: __rs__7istreamFRUl
+PASS: gdb.cp/demangle.exp: lucid: __rs__7istreamFRUs
+PASS: gdb.cp/demangle.exp: lucid: __rs__7istreamFRd
+PASS: gdb.cp/demangle.exp: lucid: __rs__7istreamFRf
+PASS: gdb.cp/demangle.exp: lucid: __rs__7istreamFRi
+PASS: gdb.cp/demangle.exp: lucid: __rs__7istreamFRl
+PASS: gdb.cp/demangle.exp: lucid: __rs__7istreamFRs
+PASS: gdb.cp/demangle.exp: lucid: __rs__FR7istreamR7complex
+PASS: gdb.cp/demangle.exp: lucid: __vc__3fooFR3foo
+PASS: gdb.cp/demangle.exp: lucid: __vtbl__10istrstream
+PASS: gdb.cp/demangle.exp: lucid: __vtbl__17ostream__iostream__19iostream_withassign
+PASS: gdb.cp/demangle.exp: lucid: __vtbl__3ios
+PASS: gdb.cp/demangle.exp: lucid: __vtbl__3ios__13strstreambase
+KFAIL: gdb.cp/demangle.exp: lucid: __vtbl__3foo__vt_cc_main_ (PRMS: gdb/945)
+PASS: gdb.cp/demangle.exp: lucid: abs__F7complex
+PASS: gdb.cp/demangle.exp: lucid: allocate__9streambufFv
+PASS: gdb.cp/demangle.exp: lucid: attach__11fstreambaseFi
+PASS: gdb.cp/demangle.exp: lucid: bitalloc__3iosSFv
+PASS: gdb.cp/demangle.exp: lucid: chr__FiT1
+PASS: gdb.cp/demangle.exp: lucid: complex_error__FR11c_exception
+PASS: gdb.cp/demangle.exp: lucid: complexfunc2__FPFPc_i
+PASS: gdb.cp/demangle.exp: lucid: complexfunc3__FPFPFPl_s_i
+PASS: gdb.cp/demangle.exp: lucid: complexfunc4__FPFPFPc_s_i
+PASS: gdb.cp/demangle.exp: lucid: complexfunc5__FPFPc_PFl_i
+PASS: gdb.cp/demangle.exp: lucid: complexfunc6__FPFPi_PFl_i
+PASS: gdb.cp/demangle.exp: lucid: complexfunc7__FPFPFPc_i_PFl_i
+PASS: gdb.cp/demangle.exp: lucid: complicated_put__7ostreamFc
+PASS: gdb.cp/demangle.exp: lucid: conv10__FlPc
+PASS: gdb.cp/demangle.exp: lucid: conv16__FUlPc
+PASS: gdb.cp/demangle.exp: lucid: dec__FR3ios
+PASS: gdb.cp/demangle.exp: lucid: dec__Fli
+PASS: gdb.cp/demangle.exp: lucid: dofield__FP7ostreamPciT2T3
+PASS: gdb.cp/demangle.exp: lucid: flags__3iosFl
+PASS: gdb.cp/demangle.exp: lucid: flags__3iosFv
+PASS: gdb.cp/demangle.exp: lucid: foo__FiN31
+PASS: gdb.cp/demangle.exp: lucid: foo__FiR3fooT1T2T1T2
+PASS: gdb.cp/demangle.exp: lucid: foo___3barFl
+PASS: gdb.cp/demangle.exp: lucid: form__FPCce
+PASS: gdb.cp/demangle.exp: lucid: get__7istreamFPcic
+PASS: gdb.cp/demangle.exp: lucid: get__7istreamFR9streambufc
+PASS: gdb.cp/demangle.exp: lucid: get_complicated__7istreamFRUc
+PASS: gdb.cp/demangle.exp: lucid: get_complicated__7istreamFRc
+PASS: gdb.cp/demangle.exp: lucid: getline__7istreamFPUcic
+PASS: gdb.cp/demangle.exp: lucid: getline__7istreamFPcic
+PASS: gdb.cp/demangle.exp: lucid: ignore__7istreamFiT1
+PASS: gdb.cp/demangle.exp: lucid: init__12strstreambufFPciT1
+PASS: gdb.cp/demangle.exp: lucid: init__3iosFP9streambuf
+PASS: gdb.cp/demangle.exp: lucid: initcount__13Iostream_init
+PASS: gdb.cp/demangle.exp: lucid: ipfx__7istreamFi
+PASS: gdb.cp/demangle.exp: lucid: ls_complicated__7ostreamFUc
+PASS: gdb.cp/demangle.exp: lucid: ls_complicated__7ostreamFc
+PASS: gdb.cp/demangle.exp: lucid: open__11fstreambaseFPCciT2
+PASS: gdb.cp/demangle.exp: lucid: open__7filebufFPCciT2
+PASS: gdb.cp/demangle.exp: lucid: overload1arg__FSc
+PASS: gdb.cp/demangle.exp: lucid: overload1arg__FUc
+PASS: gdb.cp/demangle.exp: lucid: overload1arg__FUi
+PASS: gdb.cp/demangle.exp: lucid: overload1arg__FUl
+PASS: gdb.cp/demangle.exp: lucid: overload1arg__FUs
+PASS: gdb.cp/demangle.exp: lucid: overload1arg__Fc
+PASS: gdb.cp/demangle.exp: lucid: overload1arg__Fd
+PASS: gdb.cp/demangle.exp: lucid: overload1arg__Ff
+PASS: gdb.cp/demangle.exp: lucid: overload1arg__Fi
+PASS: gdb.cp/demangle.exp: lucid: overload1arg__Fl
+PASS: gdb.cp/demangle.exp: lucid: overload1arg__Fs
+PASS: gdb.cp/demangle.exp: lucid: overload1arg__Fv
+PASS: gdb.cp/demangle.exp: lucid: overloadargs__FiN21
+PASS: gdb.cp/demangle.exp: lucid: overloadargs__FiN31
+PASS: gdb.cp/demangle.exp: lucid: overloadargs__FiN41
+PASS: gdb.cp/demangle.exp: lucid: overloadargs__FiN51
+PASS: gdb.cp/demangle.exp: lucid: overloadargs__FiN61
+PASS: gdb.cp/demangle.exp: lucid: overloadargs__FiN71
+PASS: gdb.cp/demangle.exp: lucid: overloadargs__FiN81
+PASS: gdb.cp/demangle.exp: lucid: overloadargs__FiN91
+PASS: gdb.cp/demangle.exp: lucid: overloadargs__FiN91N11
+PASS: gdb.cp/demangle.exp: lucid: overloadargs__FiT1
+PASS: gdb.cp/demangle.exp: lucid: polar__FdT1
+PASS: gdb.cp/demangle.exp: lucid: pow__F7complexT1
+PASS: gdb.cp/demangle.exp: lucid: pow__F7complexd
+PASS: gdb.cp/demangle.exp: lucid: pow__F7complexi
+PASS: gdb.cp/demangle.exp: lucid: pow__Fd7complex
+PASS: gdb.cp/demangle.exp: lucid: pstart__FPciT2
+PASS: gdb.cp/demangle.exp: lucid: put__7ostreamFc
+PASS: gdb.cp/demangle.exp: lucid: read__7istreamFPci
+PASS: gdb.cp/demangle.exp: lucid: resetiosflags__FR3iosl
+PASS: gdb.cp/demangle.exp: lucid: restore_errno__FRi
+PASS: gdb.cp/demangle.exp: lucid: rs_complicated__7istreamFRUc
+PASS: gdb.cp/demangle.exp: lucid: rs_complicated__7istreamFRc
+PASS: gdb.cp/demangle.exp: lucid: seekg__7istreamFl8seek_dir
+PASS: gdb.cp/demangle.exp: lucid: seekoff__12strstreambufFl8seek_diri
+PASS: gdb.cp/demangle.exp: lucid: seekoff__9streambufFlQ2_3ios12ios_seek_diri
+PASS: gdb.cp/demangle.exp: lucid: seekpos__9streambufFli
+PASS: gdb.cp/demangle.exp: lucid: set_new_handler__FPFv_v
+PASS: gdb.cp/demangle.exp: lucid: setb__9streambufFPcT1i
+PASS: gdb.cp/demangle.exp: lucid: setb__FR3iosi
+PASS: gdb.cp/demangle.exp: lucid: setbuf__11fstreambaseFPci
+PASS: gdb.cp/demangle.exp: lucid: setbuf__9streambufFPUci
+PASS: gdb.cp/demangle.exp: lucid: setbuf__9streambufFPciT2
+PASS: gdb.cp/demangle.exp: lucid: setf__3iosFlT1
+PASS: gdb.cp/demangle.exp: lucid: setfill__FR3iosi
+PASS: gdb.cp/demangle.exp: lucid: setg__9streambufFPcN21
+PASS: gdb.cp/demangle.exp: lucid: setp__9streambufFPcT1
+PASS: gdb.cp/demangle.exp: lucid: sputn__9streambufFPCci
+PASS: gdb.cp/demangle.exp: lucid: str__FPCci
+PASS: gdb.cp/demangle.exp: lucid: tie__3iosFP7ostream
+PASS: gdb.cp/demangle.exp: lucid: uconv10__FUlPc
+PASS: gdb.cp/demangle.exp: lucid: write__7ostreamFPCci
+PASS: gdb.cp/demangle.exp: lucid: xget__7istreamFPc
+PASS: gdb.cp/demangle.exp: lucid: xsgetn__9streambufFPci
+PASS: gdb.cp/demangle.exp: lucid: xsputn__9streambufFPCci
+PASS: gdb.cp/demangle.exp: lucid: _Utf390_1__1_9223372036854775807__9223372036854775
+PASS: gdb.cp/demangle.exp: gnu: set demangle-style
+PASS: gdb.cp/demangle.exp: gnu: check demangling style
+PASS: gdb.cp/demangle.exp: gnu: Abort__FP6EditoriPCc
+PASS: gdb.cp/demangle.exp: gnu: AddAlignment__9ivTSolverUiP12ivInteractorP7ivTGlue
+PASS: gdb.cp/demangle.exp: gnu: Append__15NameChooserViewPCc
+PASS: gdb.cp/demangle.exp: gnu: ArrowheadIntersects__9ArrowLineP9ArrowheadR6BoxObjP7Graphic
+PASS: gdb.cp/demangle.exp: gnu: AtEnd__13ivRubberGroup
+PASS: gdb.cp/demangle.exp: gnu: BgFilter__9ivTSolverP12ivInteractor
+PASS: gdb.cp/demangle.exp: gnu: BitPatterntoa__FRC10BitPatternccc
+PASS: gdb.cp/demangle.exp: gnu: Check__6UArrayi
+PASS: gdb.cp/demangle.exp: gnu: CoreConstDecls__8TextCodeR7ostream
+PASS: gdb.cp/demangle.exp: gnu: Detach__8StateVarP12StateVarView
+PASS: gdb.cp/demangle.exp: gnu: Done__9ComponentG8Iterator
+PASS: gdb.cp/demangle.exp: gnu: DrawDestinationTransformedImage__FP7_XImageiiT0iiUlUiiiUiUlUlP4_XGCRC13ivTransformeriiii
+PASS: gdb.cp/demangle.exp: gnu: Edit__12StringEditorPCcii
+PASS: gdb.cp/demangle.exp: gnu: Effect__11RelateManipR7ivEvent
+PASS: gdb.cp/demangle.exp: gnu: FilterName__FPCc
+PASS: gdb.cp/demangle.exp: gnu: Filter__6PSTextPCci
+PASS: gdb.cp/demangle.exp: gnu: FindColor__7CatalogPCciii
+PASS: gdb.cp/demangle.exp: gnu: FindFixed__FRP4CNetP4CNet
+PASS: gdb.cp/demangle.exp: gnu: FindFont__7CatalogPCcN21
+PASS: gdb.cp/demangle.exp: gnu: Fix48_abort__FR8twolongs
+PASS: gdb.cp/demangle.exp: gnu: GetBarInfo__15iv2_6_VScrollerP13ivPerspectiveRiT2
+PASS: gdb.cp/demangle.exp: gnu: GetBgColor__C9ivPainter
+PASS: gdb.cp/demangle.exp: gnu: Iisdouble__FPC6IntRep
+PASS: gdb.cp/demangle.exp: gnu: InsertBody__15H_PullrightMenuii
+PASS: gdb.cp/demangle.exp: gnu: InsertCharacter__9TextManipc
+PASS: gdb.cp/demangle.exp: gnu: InsertToplevel__7ivWorldP12ivInteractorT1
+PASS: gdb.cp/demangle.exp: gnu: InsertToplevel__7ivWorldP12ivInteractorT1iiUi
+PASS: gdb.cp/demangle.exp: gnu: IsADirectory__FPCcR4stat
+PASS: gdb.cp/demangle.exp: gnu: IsAGroup__FP11GraphicViewP11GraphicComp
+PASS: gdb.cp/demangle.exp: gnu: IsA__10ButtonCodeUl
+PASS: gdb.cp/demangle.exp: gnu: ReadName__FR7istreamPc
+PASS: gdb.cp/demangle.exp: gnu: Redraw__13StringBrowseriiii
+PASS: gdb.cp/demangle.exp: gnu: Rotate__13ivTransformerf
+PASS: gdb.cp/demangle.exp: gnu: Rotated__C13ivTransformerf
+PASS: gdb.cp/demangle.exp: gnu: Round__Ff
+PASS: gdb.cp/demangle.exp: gnu: SetExport__16MemberSharedNameUi
+PASS: gdb.cp/demangle.exp: gnu: Set__14ivControlState13ControlStatusUi
+PASS: gdb.cp/demangle.exp: gnu: Set__5DFacePcii
+PASS: gdb.cp/demangle.exp: gnu: VConvert__9ivTSolverP12ivInteractorRP8TElementT2
+PASS: gdb.cp/demangle.exp: gnu: VConvert__9ivTSolverP7ivTGlueRP8TElement
+PASS: gdb.cp/demangle.exp: gnu: VOrder__9ivTSolverUiRP12ivInteractorT2
+PASS: gdb.cp/demangle.exp: gnu: Valid__7CatalogPCcRP4Tool
+PASS: gdb.cp/demangle.exp: gnu: _10PageButton$__both
+PASS: gdb.cp/demangle.exp: gnu: _3RNG$singleMantissa
+PASS: gdb.cp/demangle.exp: gnu: _5IComp$_release
+PASS: gdb.cp/demangle.exp: gnu: _$_10BitmapComp
+PASS: gdb.cp/demangle.exp: gnu: _$_9__io_defs
+PASS: gdb.cp/demangle.exp: gnu: _$_Q23foo3bar
+PASS: gdb.cp/demangle.exp: gnu: _$_Q33foo3bar4bell
+PASS: gdb.cp/demangle.exp: gnu: __10ivTelltaleiP7ivGlyph
+PASS: gdb.cp/demangle.exp: gnu: __10ivViewportiP12ivInteractorUi
+PASS: gdb.cp/demangle.exp: gnu: __10ostrstream
+PASS: gdb.cp/demangle.exp: gnu: __10ostrstreamPcii
+PASS: gdb.cp/demangle.exp: gnu: __11BasicDialogiPCcP13ivButtonStateN22Ui
+PASS: gdb.cp/demangle.exp: gnu: __11BitmapTablei
+PASS: gdb.cp/demangle.exp: gnu: __12ViewportCodeP12ViewportComp
+PASS: gdb.cp/demangle.exp: gnu: __12iv2_6_BorderiPCci
+PASS: gdb.cp/demangle.exp: gnu: __12iv2_6_Borderii
+PASS: gdb.cp/demangle.exp: gnu: __12ivBackgroundiP7ivGlyphPC7ivColor
+PASS: gdb.cp/demangle.exp: gnu: __12ivBreak_Listl
+PASS: gdb.cp/demangle.exp: gnu: __14TextInteractoriPCcUi
+PASS: gdb.cp/demangle.exp: gnu: __14iv2_6_MenuItemiP12ivInteractor
+PASS: gdb.cp/demangle.exp: gnu: __14iv2_6_MenuItemiPCcP12ivInteractor
+PASS: gdb.cp/demangle.exp: gnu: __20DisplayList_IteratorR11DisplayList
+PASS: gdb.cp/demangle.exp: gnu: __3fooRT0
+PASS: gdb.cp/demangle.exp: gnu: __3fooiN31
+PASS: gdb.cp/demangle.exp: gnu: __3fooiPCc
+PASS: gdb.cp/demangle.exp: gnu: __3fooiRT0iT2iT2
+PASS: gdb.cp/demangle.exp: gnu: __6GetOptiPPcPCc
+PASS: gdb.cp/demangle.exp: gnu: __6KeyMapPT0
+PASS: gdb.cp/demangle.exp: gnu: __7ivWorldPCcRiPPcPC12ivOptionDescPC14ivPropertyData
+PASS: gdb.cp/demangle.exp: gnu: __7procbufPCci
+PASS: gdb.cp/demangle.exp: gnu: __8ArrowCmdP6EditorUiUi
+PASS: gdb.cp/demangle.exp: gnu: __9F_EllipseiiiiP7Graphic
+PASS: gdb.cp/demangle.exp: gnu: __9FrameDataP9FrameCompi
+PASS: gdb.cp/demangle.exp: gnu: __9HVGraphicP9CanvasVarP7Graphic
+PASS: gdb.cp/demangle.exp: gnu: __Q23foo3bar
+PASS: gdb.cp/demangle.exp: gnu: __Q33foo3bar4bell
+PASS: gdb.cp/demangle.exp: gnu: __aa__3fooRT0
+PASS: gdb.cp/demangle.exp: gnu: __aad__3fooRT0
+PASS: gdb.cp/demangle.exp: gnu: __ad__3fooRT0
+PASS: gdb.cp/demangle.exp: gnu: __adv__3fooRT0
+PASS: gdb.cp/demangle.exp: gnu: __aer__3fooRT0
+PASS: gdb.cp/demangle.exp: gnu: __als__3fooRT0
+PASS: gdb.cp/demangle.exp: gnu: __amd__3fooRT0
+PASS: gdb.cp/demangle.exp: gnu: __ami__3fooRT0
+PASS: gdb.cp/demangle.exp: gnu: __aml__3FixRT0
+PASS: gdb.cp/demangle.exp: gnu: __aml__5Fix16i
+PASS: gdb.cp/demangle.exp: gnu: __aml__5Fix32RT0
+PASS: gdb.cp/demangle.exp: gnu: __aor__3fooRT0
+PASS: gdb.cp/demangle.exp: gnu: __apl__3fooRT0
+PASS: gdb.cp/demangle.exp: gnu: __ars__3fooRT0
+PASS: gdb.cp/demangle.exp: gnu: __as__3fooRT0
+PASS: gdb.cp/demangle.exp: gnu: __cl__3fooRT0
+PASS: gdb.cp/demangle.exp: gnu: __cl__6Normal
+PASS: gdb.cp/demangle.exp: gnu: __cl__6Stringii
+PASS: gdb.cp/demangle.exp: gnu: __cm__3fooRT0
+PASS: gdb.cp/demangle.exp: gnu: __co__3foo
+PASS: gdb.cp/demangle.exp: gnu: __dl__3fooPv
+PASS: gdb.cp/demangle.exp: gnu: __dv__3fooRT0
+PASS: gdb.cp/demangle.exp: gnu: __eq__3fooRT0
+PASS: gdb.cp/demangle.exp: gnu: __er__3fooRT0
+PASS: gdb.cp/demangle.exp: gnu: __ge__3fooRT0
+PASS: gdb.cp/demangle.exp: gnu: __gt__3fooRT0
+PASS: gdb.cp/demangle.exp: gnu: __le__3fooRT0
+PASS: gdb.cp/demangle.exp: gnu: __ls__3fooRT0
+PASS: gdb.cp/demangle.exp: gnu: __ls__FR7ostreamPFR3ios_R3ios
+PASS: gdb.cp/demangle.exp: gnu: __ls__FR7ostreamR3Fix
+PASS: gdb.cp/demangle.exp: gnu: __lt__3fooRT0
+PASS: gdb.cp/demangle.exp: gnu: __md__3fooRT0
+PASS: gdb.cp/demangle.exp: gnu: __mi__3fooRT0
+PASS: gdb.cp/demangle.exp: gnu: __ml__3fooRT0
+PASS: gdb.cp/demangle.exp: gnu: __mm__3fooi
+PASS: gdb.cp/demangle.exp: gnu: __ne__3fooRT0
+PASS: gdb.cp/demangle.exp: gnu: __ne__FRC7ComplexT0
+PASS: gdb.cp/demangle.exp: gnu: __ne__FRC7Complexd
+PASS: gdb.cp/demangle.exp: gnu: __ne__FRC9SubStringRC6String
+PASS: gdb.cp/demangle.exp: gnu: __nt__3foo
+PASS: gdb.cp/demangle.exp: gnu: __nw__3fooi
+PASS: gdb.cp/demangle.exp: gnu: __oo__3fooRT0
+PASS: gdb.cp/demangle.exp: gnu: __opPc__3foo
+PASS: gdb.cp/demangle.exp: gnu: __opi__3foo
+PASS: gdb.cp/demangle.exp: gnu: __or__3fooRT0
+PASS: gdb.cp/demangle.exp: gnu: __pl__3fooRT0
+PASS: gdb.cp/demangle.exp: gnu: __pp__3fooi
+PASS: gdb.cp/demangle.exp: gnu: __rf__3foo
+PASS: gdb.cp/demangle.exp: gnu: __rm__3fooRT0
+PASS: gdb.cp/demangle.exp: gnu: __rs__3fooRT0
+PASS: gdb.cp/demangle.exp: gnu: __vc__3fooRT0
+PASS: gdb.cp/demangle.exp: gnu: _gsub__6StringRC5RegexPCci
+PASS: gdb.cp/demangle.exp: gnu: _new_Fix__FUs
+PASS: gdb.cp/demangle.exp: gnu: _vt.foo
+PASS: gdb.cp/demangle.exp: gnu: _vt.foo.bar
+PASS: gdb.cp/demangle.exp: gnu: _vt$foo
+PASS: gdb.cp/demangle.exp: gnu: _vt$foo$bar
+PASS: gdb.cp/demangle.exp: gnu: append__7ivGlyphPT0
+PASS: gdb.cp/demangle.exp: gnu: arg__FRC7Complex
+PASS: gdb.cp/demangle.exp: gnu: clearok__FP7_win_sti
+PASS: gdb.cp/demangle.exp: gnu: complexfunc2__FPFPc_i
+PASS: gdb.cp/demangle.exp: gnu: complexfunc3__FPFPFPl_s_i
+PASS: gdb.cp/demangle.exp: gnu: complexfunc4__FPFPFPc_s_i
+PASS: gdb.cp/demangle.exp: gnu: complexfunc5__FPFPc_PFl_i
+PASS: gdb.cp/demangle.exp: gnu: complexfunc6__FPFPi_PFl_i
+PASS: gdb.cp/demangle.exp: gnu: complexfunc7__FPFPFPc_i_PFl_i
+PASS: gdb.cp/demangle.exp: gnu: contains__C9BitStringRC10BitPattern
+PASS: gdb.cp/demangle.exp: gnu: contains__C9BitStringRC12BitSubStringi
+PASS: gdb.cp/demangle.exp: gnu: contains__C9BitStringRT0
+PASS: gdb.cp/demangle.exp: gnu: div__FPC6IntRepT0P6IntRep
+PASS: gdb.cp/demangle.exp: gnu: div__FPC6IntReplP6IntRep
+PASS: gdb.cp/demangle.exp: gnu: div__FRC8RationalT0R8Rational
+PASS: gdb.cp/demangle.exp: gnu: divide__FRC7IntegerT0R7IntegerT2
+PASS: gdb.cp/demangle.exp: gnu: divide__FRC7IntegerlR7IntegerRl
+PASS: gdb.cp/demangle.exp: gnu: enable__14DocumentViewerPCcUi
+PASS: gdb.cp/demangle.exp: gnu: foo__FiN30
+PASS: gdb.cp/demangle.exp: gnu: foo__FiR3fooiT1iT1
+PASS: gdb.cp/demangle.exp: gnu: foo___3barl
+PASS: gdb.cp/demangle.exp: gnu: insert__15ivClippingStacklRP8_XRegion
+PASS: gdb.cp/demangle.exp: gnu: insert__16ChooserInfo_ListlR11ChooserInfo
+PASS: gdb.cp/demangle.exp: gnu: insert__17FontFamilyRepListlRP15ivFontFamilyRep
+PASS: gdb.cp/demangle.exp: gnu: leaveok__FP7_win_stc
+PASS: gdb.cp/demangle.exp: gnu: left_mover__C7ivMFKitP12ivAdjustableP7ivStyle
+PASS: gdb.cp/demangle.exp: gnu: matches__C9BitStringRC10BitPatterni
+PASS: gdb.cp/demangle.exp: gnu: matches__C9SubStringRC5Regex
+PASS: gdb.cp/demangle.exp: gnu: overload1arg__FSc
+PASS: gdb.cp/demangle.exp: gnu: overload1arg__FUc
+PASS: gdb.cp/demangle.exp: gnu: overload1arg__FUi
+PASS: gdb.cp/demangle.exp: gnu: overload1arg__FUl
+PASS: gdb.cp/demangle.exp: gnu: overload1arg__FUs
+PASS: gdb.cp/demangle.exp: gnu: overload1arg__Fc
+PASS: gdb.cp/demangle.exp: gnu: overload1arg__Fd
+PASS: gdb.cp/demangle.exp: gnu: overload1arg__Ff
+PASS: gdb.cp/demangle.exp: gnu: overload1arg__Fi
+PASS: gdb.cp/demangle.exp: gnu: overload1arg__Fl
+PASS: gdb.cp/demangle.exp: gnu: overload1arg__Fs
+PASS: gdb.cp/demangle.exp: gnu: overload1arg__Fv
+PASS: gdb.cp/demangle.exp: gnu: overloadargs__Fi
+PASS: gdb.cp/demangle.exp: gnu: overloadargs__Fii
+PASS: gdb.cp/demangle.exp: gnu: overloadargs__Fiii
+PASS: gdb.cp/demangle.exp: gnu: overloadargs__Fiiii
+PASS: gdb.cp/demangle.exp: gnu: overloadargs__Fiiiii
+PASS: gdb.cp/demangle.exp: gnu: overloadargs__Fiiiiii
+PASS: gdb.cp/demangle.exp: gnu: overloadargs__Fiiiiiii
+PASS: gdb.cp/demangle.exp: gnu: overloadargs__Fiiiiiiii
+PASS: gdb.cp/demangle.exp: gnu: overloadargs__Fiiiiiiiii
+PASS: gdb.cp/demangle.exp: gnu: overloadargs__Fiiiiiiiiii
+PASS: gdb.cp/demangle.exp: gnu: overloadargs__Fiiiiiiiiiii
+PASS: gdb.cp/demangle.exp: gnu: pick__13ivCompositionP8ivCanvasRC12ivAllocationiR5ivHit
+PASS: gdb.cp/demangle.exp: gnu: pointer__C11ivHScrollerRC7ivEventRC12ivAllocation
+PASS: gdb.cp/demangle.exp: gnu: poke__8ivRasterUlUlffff
+PASS: gdb.cp/demangle.exp: gnu: polar__Fdd
+PASS: gdb.cp/demangle.exp: gnu: read__10osStdInputRPCc
+PASS: gdb.cp/demangle.exp: gnu: scale__13ivTransformerff
+PASS: gdb.cp/demangle.exp: gnu: scanw__12CursesWindowPCce
+PASS: gdb.cp/demangle.exp: gnu: scmp__FPCcT0
+PASS: gdb.cp/demangle.exp: gnu: sgetn__7filebufPci
+PASS: gdb.cp/demangle.exp: gnu: shift__FP5_FrepiT0
+PASS: gdb.cp/demangle.exp: gnu: test__C6BitSeti
+PASS: gdb.cp/demangle.exp: gnu: test__C6BitSetii
+PASS: gdb.cp/demangle.exp: gnu: testbit__FRC7Integerl
+PASS: gdb.cp/demangle.exp: gnu: text_source__8Documentl
+PASS: gdb.cp/demangle.exp: gnu: variance__6Erlangd
+PASS: gdb.cp/demangle.exp: gnu: vform__8iostreamPCcPc
+PASS: gdb.cp/demangle.exp: gnu: view__14DocumentViewerP8ItemViewP11TabularItem
+PASS: gdb.cp/demangle.exp: gnu: xy_extents__11ivExtensionffff
+PASS: gdb.cp/demangle.exp: gnu: zero__8osMemoryPvUi
+PASS: gdb.cp/demangle.exp: gnu: _2T4$N
+PASS: gdb.cp/demangle.exp: gnu: _Q22T42t1$N
+PASS: gdb.cp/demangle.exp: gnu: get__2T1
+PASS: gdb.cp/demangle.exp: gnu: get__Q22T11a
+PASS: gdb.cp/demangle.exp: gnu: get__Q32T11a1b
+PASS: gdb.cp/demangle.exp: gnu: get__Q42T11a1b1c
+PASS: gdb.cp/demangle.exp: gnu: get__Q52T11a1b1c1d
+PASS: gdb.cp/demangle.exp: gnu: put__2T1i
+PASS: gdb.cp/demangle.exp: gnu: put__Q22T11ai
+PASS: gdb.cp/demangle.exp: gnu: put__Q32T11a1bi
+PASS: gdb.cp/demangle.exp: gnu: put__Q42T11a1b1ci
+PASS: gdb.cp/demangle.exp: gnu: put__Q52T11a1b1c1di
+PASS: gdb.cp/demangle.exp: gnu: bar__3fooPv
+PASS: gdb.cp/demangle.exp: gnu: bar__3fooPCv
+PASS: gdb.cp/demangle.exp: gnu: bar__C3fooPv
+PASS: gdb.cp/demangle.exp: gnu: bar__C3fooPCv
+PASS: gdb.cp/demangle.exp: gnu: __eq__3fooRT0
+PASS: gdb.cp/demangle.exp: gnu: __eq__3fooRC3foo
+PASS: gdb.cp/demangle.exp: gnu: __eq__C3fooR3foo
+PASS: gdb.cp/demangle.exp: gnu: __eq__C3fooRT0
+PASS: gdb.cp/demangle.exp: gnu: elem__t6vector1Zdi
+PASS: gdb.cp/demangle.exp: gnu: elem__t6vector1Zii
+PASS: gdb.cp/demangle.exp: gnu: __t6vector1Zdi
+PASS: gdb.cp/demangle.exp: gnu: __t6vector1Zii
+PASS: gdb.cp/demangle.exp: gnu: _$_t6vector1Zdi
+PASS: gdb.cp/demangle.exp: gnu: _$_t6vector1Zii
+PASS: gdb.cp/demangle.exp: gnu: __nw__t2T11ZcUi
+PASS: gdb.cp/demangle.exp: gnu: __nw__t2T11Z1tUi
+PASS: gdb.cp/demangle.exp: gnu: __dl__t2T11ZcPv
+PASS: gdb.cp/demangle.exp: gnu: __dl__t2T11Z1tPv
+PASS: gdb.cp/demangle.exp: gnu: __t2T11Zci
+PASS: gdb.cp/demangle.exp: gnu: __t2T11Zc
+PASS: gdb.cp/demangle.exp: gnu: __t2T11Z1ti
+PASS: gdb.cp/demangle.exp: gnu: __t2T11Z1t
+PASS: gdb.cp/demangle.exp: gnu: __Q2t4List1Z10VHDLEntity3Pix
+PASS: gdb.cp/demangle.exp: gnu: __Q2t4List1Z10VHDLEntity3PixPQ2t4List1Z10VHDLEntity7element
+PASS: gdb.cp/demangle.exp: gnu: __Q2t4List1Z10VHDLEntity3PixRCQ2t4List1Z10VHDLEntity3Pix
+PASS: gdb.cp/demangle.exp: gnu: __Q2t4List1Z10VHDLEntity7elementRC10VHDLEntityPT0
+PASS: gdb.cp/demangle.exp: gnu: __Q2t4List1Z10VHDLEntity7elementRCQ2t4List1Z10VHDLEntity7element
+PASS: gdb.cp/demangle.exp: gnu: __cl__C11VHDLLibraryGt4PixX3Z11VHDLLibraryZ14VHDLLibraryRepZt4List1Z10VHDLEntity
+PASS: gdb.cp/demangle.exp: gnu: __cl__Ct4List1Z10VHDLEntityRCQ2t4List1Z10VHDLEntity3Pix
+PASS: gdb.cp/demangle.exp: gnu: __ne__FPvRCQ2t4List1Z10VHDLEntity3Pix
+PASS: gdb.cp/demangle.exp: gnu: __ne__FPvRCt4PixX3Z11VHDLLibraryZ14VHDLLibraryRepZt4List1Z10VHDLEntity
+PASS: gdb.cp/demangle.exp: gnu: __t4List1Z10VHDLEntityRCt4List1Z10VHDLEntity
+PASS: gdb.cp/demangle.exp: gnu: __t4PixX3Z11VHDLLibraryZ14VHDLLibraryRepZt4List1Z10VHDLEntity
+PASS: gdb.cp/demangle.exp: gnu: __t4PixX3Z11VHDLLibraryZ14VHDLLibraryRepZt4List1Z10VHDLEntityP14VHDLLibraryRepGQ2t4List1Z10VHDLEntity3Pix
+PASS: gdb.cp/demangle.exp: gnu: __t4PixX3Z11VHDLLibraryZ14VHDLLibraryRepZt4List1Z10VHDLEntityRCt4PixX3Z11VHDLLibraryZ14VHDLLibraryRepZt4List1Z10VHDLEntity
+PASS: gdb.cp/demangle.exp: gnu: nextE__C11VHDLLibraryRt4PixX3Z11VHDLLibraryZ14VHDLLibraryRepZt4List1Z10VHDLEntity
+PASS: gdb.cp/demangle.exp: gnu: next__Ct4List1Z10VHDLEntityRQ2t4List1Z10VHDLEntity3Pix
+PASS: gdb.cp/demangle.exp: gnu: _GLOBAL_$D$set
+PASS: gdb.cp/demangle.exp: gnu: _GLOBAL_$I$set
+PASS: gdb.cp/demangle.exp: gnu: __as__t5ListS1ZUiRCt5ListS1ZUi
+PASS: gdb.cp/demangle.exp: gnu: __cl__Ct5ListS1ZUiRCQ2t5ListS1ZUi3Vix
+PASS: gdb.cp/demangle.exp: gnu: __cl__Ct5SetLS1ZUiRCQ2t5SetLS1ZUi3Vix
+PASS: gdb.cp/demangle.exp: gnu: __t10ListS_link1ZUiRCUiPT0
+PASS: gdb.cp/demangle.exp: gnu: __t10ListS_link1ZUiRCt10ListS_link1ZUi
+PASS: gdb.cp/demangle.exp: gnu: __t5ListS1ZUiRCt5ListS1ZUi
+PASS: gdb.cp/demangle.exp: gnu: next__Ct5ListS1ZUiRQ2t5ListS1ZUi3Vix
+PASS: gdb.cp/demangle.exp: gnu: __ne__FPvRCQ2t5SetLS1ZUi3Vix
+PASS: gdb.cp/demangle.exp: gnu: __t8ListElem1Z5LabelRt4List1Z5Label
+PASS: gdb.cp/demangle.exp: gnu: __t8BDDHookV1ZPcRCPc
+PASS: gdb.cp/demangle.exp: gnu: _vt$t8BDDHookV1ZPc
+PASS: gdb.cp/demangle.exp: gnu: __ne__FPvRCQ211BDDFunction4VixB
+PASS: gdb.cp/demangle.exp: gnu: __eq__FPvRCQ211BDDFunction4VixB
+PASS: gdb.cp/demangle.exp: gnu: relativeId__CQ36T_phi210T_preserve8FPC_nextRCQ26T_phi210T_preserveRC10Parameters
+PASS: gdb.cp/demangle.exp: gnu: _Utf390_1__1_9223372036854775807__9223372036854775
+PASS: gdb.cp/demangle.exp: gnu: foo__I40
+PASS: gdb.cp/demangle.exp: gnu: foo__I_200_
+PASS: gdb.cp/demangle.exp: gnu: foo__I_200
+PASS: gdb.cp/demangle.exp: gnu: foo__I_4000000000000000000000000000000000000000000000000000000000000000000000000
+PASS: gdb.cp/demangle.exp: gnu: __thunk_64__0RL__list__Q29CosNaming20_proxy_NamingContextUlRPt25_CORBA_Unbounded_Sequence1ZQ29CosNaming7BindingRPQ29CosNaming15BindingIterator
+PASS: gdb.cp/demangle.exp: arm: set demangle-style
+PASS: gdb.cp/demangle.exp: arm: check demangling style
+PASS: gdb.cp/demangle.exp: arm: __dt__21T5__pt__11_PFiPPdPv_iFv
+PASS: gdb.cp/demangle.exp: arm: __ct__1cFi
+PASS: gdb.cp/demangle.exp: arm: __dt__11T5__pt__2_iFv
+PASS: gdb.cp/demangle.exp: arm: __dt__11T5__pt__2_cFv
+PASS: gdb.cp/demangle.exp: arm: __ct__2T2Fi
+PASS: gdb.cp/demangle.exp: arm: __dt__2T1Fv
+PASS: gdb.cp/demangle.exp: arm: __dt__12T5__pt__3_1xFv
+PASS: gdb.cp/demangle.exp: arm: __dt__17T5__pt__8_PFcPv_iFv
+PASS: gdb.cp/demangle.exp: arm: g__FP1cPC1cT1
+PASS: gdb.cp/demangle.exp: arm: g__FPUlPCUlT1
+PASS: gdb.cp/demangle.exp: arm: g__FPUiPCUiT1
+PASS: gdb.cp/demangle.exp: arm: g__FPUsPCUsT1
+PASS: gdb.cp/demangle.exp: arm: g__FPUcPCUcT1
+PASS: gdb.cp/demangle.exp: arm: g__F1TPlPClT2
+PASS: gdb.cp/demangle.exp: arm: g__F1RRlRClT2
+PASS: gdb.cp/demangle.exp: arm: g__F1TPiPCiT2
+PASS: gdb.cp/demangle.exp: arm: g__F1RRiRCiT2
+PASS: gdb.cp/demangle.exp: arm: g__F1TPsPCsT2
+PASS: gdb.cp/demangle.exp: arm: g__F1RRsRCsT2
+PASS: gdb.cp/demangle.exp: arm: g__F1TPcPCcT2
+PASS: gdb.cp/demangle.exp: arm: g__F1RRcRCcT2
+PASS: gdb.cp/demangle.exp: arm: __ct__21T5__pt__11_PFiPPdPv_iFi
+PASS: gdb.cp/demangle.exp: arm: __gt__FRC2T2c
+PASS: gdb.cp/demangle.exp: arm: __ge__FRC2T2c
+PASS: gdb.cp/demangle.exp: arm: __lt__FRC2T2c
+PASS: gdb.cp/demangle.exp: arm: __le__FRC2T2c
+PASS: gdb.cp/demangle.exp: arm: __ne__FRC2T2c
+PASS: gdb.cp/demangle.exp: arm: __eq__FRC2T2c
+PASS: gdb.cp/demangle.exp: arm: __amd__FR2T2i
+PASS: gdb.cp/demangle.exp: arm: __adv__FR2T2i
+PASS: gdb.cp/demangle.exp: arm: __amu__FR2T2i
+PASS: gdb.cp/demangle.exp: arm: __ami__FR2T2i
+PASS: gdb.cp/demangle.exp: arm: __apl__FR2T2i
+PASS: gdb.cp/demangle.exp: arm: __nw__2T1SFUi
+PASS: gdb.cp/demangle.exp: arm: __dl__2T1SFPv
+PASS: gdb.cp/demangle.exp: arm: put__2T7SFi
+PASS: gdb.cp/demangle.exp: arm: __dl__12T5__pt__3_1xSFPv
+PASS: gdb.cp/demangle.exp: arm: h__FUc
+PASS: gdb.cp/demangle.exp: arm: f__Fic
+PASS: gdb.cp/demangle.exp: arm: h__FUi
+PASS: gdb.cp/demangle.exp: arm: h__Fci
+PASS: gdb.cp/demangle.exp: arm: h__FUl
+PASS: gdb.cp/demangle.exp: arm: h__Fcl
+PASS: gdb.cp/demangle.exp: arm: h__FUs
+PASS: gdb.cp/demangle.exp: arm: h__Fcs
+PASS: gdb.cp/demangle.exp: arm: __amd__FR2T2RC2T2
+PASS: gdb.cp/demangle.exp: arm: __adv__FR2T2RC2T2
+PASS: gdb.cp/demangle.exp: arm: __amu__FR2T2RC2T2
+PASS: gdb.cp/demangle.exp: arm: __ami__FR2T2RC2T2
+PASS: gdb.cp/demangle.exp: arm: __apl__FR2T2RC2T2
+PASS: gdb.cp/demangle.exp: arm: g__F1SRPUlRPCUlT2
+PASS: gdb.cp/demangle.exp: arm: g__F1SRPUiRPCUiT2
+PASS: gdb.cp/demangle.exp: arm: g__F1SRPUsRPCUsT2
+PASS: gdb.cp/demangle.exp: arm: g__F1SRPUcRPCUcT2
+PASS: gdb.cp/demangle.exp: arm: g__F1T1SRPlRPClT3
+PASS: gdb.cp/demangle.exp: arm: g__F1T1SRPiRPCiT3
+PASS: gdb.cp/demangle.exp: arm: g__F1T1SRPcRPCcT3
+PASS: gdb.cp/demangle.exp: arm: X__12T5__pt__3_1x
+PASS: gdb.cp/demangle.exp: arm: __ct__11T5__pt__2_iFi
+PASS: gdb.cp/demangle.exp: arm: __ct__11T5__pt__2_cFi
+PASS: gdb.cp/demangle.exp: arm: __gt__FRC2T2T1
+PASS: gdb.cp/demangle.exp: arm: __ge__FRC2T2T1
+PASS: gdb.cp/demangle.exp: arm: __lt__FRC2T2T1
+PASS: gdb.cp/demangle.exp: arm: __le__FRC2T2T1
+PASS: gdb.cp/demangle.exp: arm: __ne__FRC2T2T1
+PASS: gdb.cp/demangle.exp: arm: __eq__FRC2T2T1
+PASS: gdb.cp/demangle.exp: arm: g__FcR1cRC1cT2
+PASS: gdb.cp/demangle.exp: arm: g__FcRPdRPCdT2
+PASS: gdb.cp/demangle.exp: arm: g__FcRPfRPCfT2
+PASS: gdb.cp/demangle.exp: arm: h__FcT1
+PASS: gdb.cp/demangle.exp: arm: f__Ficd
+PASS: gdb.cp/demangle.exp: arm: g__F1T1SdRPsRPCsT4
+PASS: gdb.cp/demangle.exp: arm: g__F1cC1cT1
+PASS: gdb.cp/demangle.exp: arm: g__FPdPCdT1
+PASS: gdb.cp/demangle.exp: arm: g__FPfPCfT1
+PASS: gdb.cp/demangle.exp: arm: g__FUlCUlT1
+PASS: gdb.cp/demangle.exp: arm: g__FPlPClT1
+PASS: gdb.cp/demangle.exp: arm: g__FUiCUiT1
+PASS: gdb.cp/demangle.exp: arm: g__FPiPCiT1
+PASS: gdb.cp/demangle.exp: arm: g__FUsCUsT1
+PASS: gdb.cp/demangle.exp: arm: g__FPsPCsT1
+PASS: gdb.cp/demangle.exp: arm: g__FUcCUcT1
+PASS: gdb.cp/demangle.exp: arm: g__FPcPCcT1
+PASS: gdb.cp/demangle.exp: arm: g__F1TlClT2
+PASS: gdb.cp/demangle.exp: arm: g__F1TiCiT2
+PASS: gdb.cp/demangle.exp: arm: g__F1TsCsT2
+PASS: gdb.cp/demangle.exp: arm: g__F1TcCcT2
+PASS: gdb.cp/demangle.exp: arm: __dl__17T5__pt__8_PFcPv_iSFPv
+PASS: gdb.cp/demangle.exp: arm: printf__FPCce
+PASS: gdb.cp/demangle.exp: arm: X__17T5__pt__8_PFcPv_i
+PASS: gdb.cp/demangle.exp: arm: __ct__12T5__pt__3_1xFi
+PASS: gdb.cp/demangle.exp: arm: g__F1SRUlRCUlT2
+PASS: gdb.cp/demangle.exp: arm: g__F1SRPlRPClT2
+PASS: gdb.cp/demangle.exp: arm: g__F1RRUiRCUiT2
+PASS: gdb.cp/demangle.exp: arm: g__F1SRPiRPCiT2
+PASS: gdb.cp/demangle.exp: arm: g__F1RRUsRCUsT2
+PASS: gdb.cp/demangle.exp: arm: g__F1SRPsRPCsT2
+PASS: gdb.cp/demangle.exp: arm: g__F1RRUcRCUcT2
+PASS: gdb.cp/demangle.exp: arm: g__F1SRPcRPCcT2
+PASS: gdb.cp/demangle.exp: arm: g__F1T1RRlRClT3
+PASS: gdb.cp/demangle.exp: arm: g__F1T1RRiRCiT3
+PASS: gdb.cp/demangle.exp: arm: g__F1T1RRsRCsT3
+PASS: gdb.cp/demangle.exp: arm: g__F1T1RRcRCcT3
+PASS: gdb.cp/demangle.exp: arm: __dl__21T5__pt__11_PFiPPdPv_iSFPv
+PASS: gdb.cp/demangle.exp: arm: __std__foo
+PASS: gdb.cp/demangle.exp: arm: __sti__bar
+PASS: gdb.cp/demangle.exp: arm: f__FicdPcPFci_v
+PASS: gdb.cp/demangle.exp: arm: f__FicdPcPFic_v
+PASS: gdb.cp/demangle.exp: arm: get__2T7SFv
+PASS: gdb.cp/demangle.exp: arm: X__21T5__pt__11_PFiPPdPv_i
+PASS: gdb.cp/demangle.exp: arm: g__FcRdRCdT2
+PASS: gdb.cp/demangle.exp: arm: g__FcRfRCfT2
+PASS: gdb.cp/demangle.exp: arm: __md__FC2T2i
+PASS: gdb.cp/demangle.exp: arm: __dv__FC2T2i
+PASS: gdb.cp/demangle.exp: arm: __ml__FC2T2i
+PASS: gdb.cp/demangle.exp: arm: __mi__FC2T2i
+PASS: gdb.cp/demangle.exp: arm: __pl__FC2T2i
+PASS: gdb.cp/demangle.exp: arm: __dl__11T5__pt__2_iSFPv
+PASS: gdb.cp/demangle.exp: arm: __dl__11T5__pt__2_cSFPv
+PASS: gdb.cp/demangle.exp: arm: h__Fc
+PASS: gdb.cp/demangle.exp: arm: h__Fd
+PASS: gdb.cp/demangle.exp: arm: h__Ff
+PASS: gdb.cp/demangle.exp: arm: h__Fi
+PASS: gdb.cp/demangle.exp: arm: f__Fi
+PASS: gdb.cp/demangle.exp: arm: h__Fl
+PASS: gdb.cp/demangle.exp: arm: h__Fs
+PASS: gdb.cp/demangle.exp: arm: __md__FC2T2RC2T2
+PASS: gdb.cp/demangle.exp: arm: __dv__FC2T2RC2T2
+PASS: gdb.cp/demangle.exp: arm: __ml__FC2T2RC2T2
+PASS: gdb.cp/demangle.exp: arm: __mi__FC2T2RC2T2
+PASS: gdb.cp/demangle.exp: arm: __pl__FC2T2RC2T2
+PASS: gdb.cp/demangle.exp: arm: g__FcRP1cRPC1cT2
+PASS: gdb.cp/demangle.exp: arm: X__11T5__pt__2_c
+PASS: gdb.cp/demangle.exp: arm: X__11T5__pt__2_i
+PASS: gdb.cp/demangle.exp: arm: g__FdCdT1
+PASS: gdb.cp/demangle.exp: arm: g__FfCfT1
+PASS: gdb.cp/demangle.exp: arm: g__FlClT1
+PASS: gdb.cp/demangle.exp: arm: g__FiCiT1
+PASS: gdb.cp/demangle.exp: arm: g__FsCsT1
+PASS: gdb.cp/demangle.exp: arm: g__FcCcT1
+PASS: gdb.cp/demangle.exp: arm: __ct__17T5__pt__8_PFcPv_iFi
+PASS: gdb.cp/demangle.exp: arm: f__FicdPc
+PASS: gdb.cp/demangle.exp: arm: __nw__FUi
+PASS: gdb.cp/demangle.exp: arm: __ct__Q3_2T11a1bSFi
+PASS: gdb.cp/demangle.exp: arm: __dt__Q3_2T11a1bSFi
+PASS: gdb.cp/demangle.exp: arm: put__Q3_2T11a1bSFi
+PASS: gdb.cp/demangle.exp: arm: get__Q2_2T11aSFv
+PASS: gdb.cp/demangle.exp: arm: put__2T1SFi
+PASS: gdb.cp/demangle.exp: arm: put__Q5_2T11a1b1c1dSFi
+PASS: gdb.cp/demangle.exp: arm: get__Q4_2T11a1b1cSFv
+PASS: gdb.cp/demangle.exp: arm: put__Q2_2T11aSFi
+PASS: gdb.cp/demangle.exp: arm: put__Q4_2T11a1b1cSFi
+PASS: gdb.cp/demangle.exp: arm: get__Q3_2T11a1bSFv
+PASS: gdb.cp/demangle.exp: arm: get__2T1SFv
+PASS: gdb.cp/demangle.exp: arm: get__Q5_2T11a1b1c1dSFv
+PASS: gdb.cp/demangle.exp: arm: __dt__11T1__pt__2_cFv
+PASS: gdb.cp/demangle.exp: arm: __dt__12T1__pt__3_1tFv
+PASS: gdb.cp/demangle.exp: arm: __dl__12T1__pt__3_1tSFPv
+PASS: gdb.cp/demangle.exp: arm: __ct__11T1__pt__2_cFi
+PASS: gdb.cp/demangle.exp: arm: __ct__11T1__pt__2_cFv
+PASS: gdb.cp/demangle.exp: arm: __ct__12T1__pt__3_1tFi
+PASS: gdb.cp/demangle.exp: arm: __ct__12T1__pt__3_1tFv
+PASS: gdb.cp/demangle.exp: arm: __dl__11T1__pt__2_cSFPv
+PASS: gdb.cp/demangle.exp: arm: bar__3fooFPv
+PASS: gdb.cp/demangle.exp: arm: bar__3fooFPCv
+PASS: gdb.cp/demangle.exp: arm: bar__3fooCFPv
+PASS: gdb.cp/demangle.exp: arm: bar__3fooCFPCv
+PASS: gdb.cp/demangle.exp: arm: __eq__3fooFR3foo
+PASS: gdb.cp/demangle.exp: arm: __eq__3fooFRC3foo
+PASS: gdb.cp/demangle.exp: arm: __eq__3fooCFR3foo
+PASS: gdb.cp/demangle.exp: arm: __eq__3fooCFRC3foo
+PASS: gdb.cp/demangle.exp: arm: elem__15vector__pt__2_dFi
+PASS: gdb.cp/demangle.exp: arm: elem__15vector__pt__2_iFi
+PASS: gdb.cp/demangle.exp: arm: __ct__15vector__pt__2_dFi
+PASS: gdb.cp/demangle.exp: arm: __ct__15vector__pt__2_iFi
+PASS: gdb.cp/demangle.exp: arm: __ct__25DListNode__pt__9_R6RLabelFR6RLabelP25DListNode__pt__9_R6RLabelT2
+PASS: gdb.cp/demangle.exp: arm: bar__3fooFiT16FooBar
+PASS: gdb.cp/demangle.exp: arm: bar__3fooFPiN51PdN37PcN211T1iN215
+PASS: gdb.cp/demangle.exp: arm: _Utf390_1__1_9223372036854775807__9223372036854775
+PASS: gdb.cp/demangle.exp: hp: set demangle-style
+PASS: gdb.cp/demangle.exp: hp: check demangling style
+PASS: gdb.cp/demangle.exp: hp: g__FP1cPC1cT1
+PASS: gdb.cp/demangle.exp: hp: g__FPUlPCUlT1
+PASS: gdb.cp/demangle.exp: hp: g__FPUiPCUiT1
+PASS: gdb.cp/demangle.exp: hp: g__FPUsPCUsT1
+PASS: gdb.cp/demangle.exp: hp: g__FPUcPCUcT1
+PASS: gdb.cp/demangle.exp: hp: g__F1TPlPClT2
+PASS: gdb.cp/demangle.exp: hp: g__F1RRlRClT2
+PASS: gdb.cp/demangle.exp: hp: g__F1TPiPCiT2
+PASS: gdb.cp/demangle.exp: hp: g__F1RRiRCiT2
+PASS: gdb.cp/demangle.exp: hp: g__F1TPsPCsT2
+PASS: gdb.cp/demangle.exp: hp: g__F1RRsRCsT2
+PASS: gdb.cp/demangle.exp: hp: g__F1TPcPCcT2
+PASS: gdb.cp/demangle.exp: hp: g__F1RRcRCcT2
+PASS: gdb.cp/demangle.exp: hp: __gt__FRC2T2c
+PASS: gdb.cp/demangle.exp: hp: __ge__FRC2T2c
+PASS: gdb.cp/demangle.exp: hp: __lt__FRC2T2c
+PASS: gdb.cp/demangle.exp: hp: __le__FRC2T2c
+PASS: gdb.cp/demangle.exp: hp: __ne__FRC2T2c
+PASS: gdb.cp/demangle.exp: hp: __eq__FRC2T2c
+PASS: gdb.cp/demangle.exp: hp: __amd__FR2T2i
+PASS: gdb.cp/demangle.exp: hp: __adv__FR2T2i
+PASS: gdb.cp/demangle.exp: hp: __amu__FR2T2i
+PASS: gdb.cp/demangle.exp: hp: __ami__FR2T2i
+PASS: gdb.cp/demangle.exp: hp: __apl__FR2T2i
+PASS: gdb.cp/demangle.exp: hp: __nw__2T1SFUi
+PASS: gdb.cp/demangle.exp: hp: __dl__2T1SFPv
+PASS: gdb.cp/demangle.exp: hp: put__2T7SFi
+PASS: gdb.cp/demangle.exp: hp: h__FUc
+PASS: gdb.cp/demangle.exp: hp: f__Fic
+PASS: gdb.cp/demangle.exp: hp: h__FUi
+PASS: gdb.cp/demangle.exp: hp: h__Fci
+PASS: gdb.cp/demangle.exp: hp: h__FUl
+PASS: gdb.cp/demangle.exp: hp: h__Fcl
+PASS: gdb.cp/demangle.exp: hp: h__FUs
+PASS: gdb.cp/demangle.exp: hp: h__Fcs
+PASS: gdb.cp/demangle.exp: hp: __amd__FR2T2RC2T2
+PASS: gdb.cp/demangle.exp: hp: __adv__FR2T2RC2T2
+PASS: gdb.cp/demangle.exp: hp: __amu__FR2T2RC2T2
+PASS: gdb.cp/demangle.exp: hp: __ami__FR2T2RC2T2
+PASS: gdb.cp/demangle.exp: hp: __apl__FR2T2RC2T2
+PASS: gdb.cp/demangle.exp: hp: g__F1SRPUlRPCUlT2
+PASS: gdb.cp/demangle.exp: hp: g__F1SRPUiRPCUiT2
+PASS: gdb.cp/demangle.exp: hp: g__F1SRPUsRPCUsT2
+PASS: gdb.cp/demangle.exp: hp: g__F1SRPUcRPCUcT2
+PASS: gdb.cp/demangle.exp: hp: g__F1T1SRPlRPClT3
+PASS: gdb.cp/demangle.exp: hp: g__F1T1SRPiRPCiT3
+PASS: gdb.cp/demangle.exp: hp: g__F1T1SRPcRPCcT3
+PASS: gdb.cp/demangle.exp: hp: __gt__FRC2T2T1
+PASS: gdb.cp/demangle.exp: hp: __ge__FRC2T2T1
+PASS: gdb.cp/demangle.exp: hp: __lt__FRC2T2T1
+PASS: gdb.cp/demangle.exp: hp: __le__FRC2T2T1
+PASS: gdb.cp/demangle.exp: hp: __ne__FRC2T2T1
+PASS: gdb.cp/demangle.exp: hp: __eq__FRC2T2T1
+PASS: gdb.cp/demangle.exp: hp: g__FcR1cRC1cT2
+PASS: gdb.cp/demangle.exp: hp: g__FcRPdRPCdT2
+PASS: gdb.cp/demangle.exp: hp: g__FcRPfRPCfT2
+PASS: gdb.cp/demangle.exp: hp: h__FcT1
+PASS: gdb.cp/demangle.exp: hp: f__Ficd
+PASS: gdb.cp/demangle.exp: hp: g__F1T1SdRPsRPCsT4
+PASS: gdb.cp/demangle.exp: hp: g__F1cC1cT1
+PASS: gdb.cp/demangle.exp: hp: g__FPdPCdT1
+PASS: gdb.cp/demangle.exp: hp: g__FPfPCfT1
+PASS: gdb.cp/demangle.exp: hp: g__FUlCUlT1
+PASS: gdb.cp/demangle.exp: hp: g__FPlPClT1
+PASS: gdb.cp/demangle.exp: hp: g__FUiCUiT1
+PASS: gdb.cp/demangle.exp: hp: g__FPiPCiT1
+PASS: gdb.cp/demangle.exp: hp: g__FUsCUsT1
+PASS: gdb.cp/demangle.exp: hp: g__FPsPCsT1
+PASS: gdb.cp/demangle.exp: hp: g__FUcCUcT1
+PASS: gdb.cp/demangle.exp: hp: g__FPcPCcT1
+PASS: gdb.cp/demangle.exp: hp: g__F1TlClT2
+PASS: gdb.cp/demangle.exp: hp: g__F1TiCiT2
+PASS: gdb.cp/demangle.exp: hp: g__F1TsCsT2
+PASS: gdb.cp/demangle.exp: hp: g__F1TcCcT2
+PASS: gdb.cp/demangle.exp: hp: printf__FPCce
+PASS: gdb.cp/demangle.exp: hp: g__F1SRUlRCUlT2
+PASS: gdb.cp/demangle.exp: hp: g__F1SRPlRPClT2
+PASS: gdb.cp/demangle.exp: hp: g__F1RRUiRCUiT2
+PASS: gdb.cp/demangle.exp: hp: g__F1SRPiRPCiT2
+PASS: gdb.cp/demangle.exp: hp: g__F1RRUsRCUsT2
+PASS: gdb.cp/demangle.exp: hp: g__F1SRPsRPCsT2
+PASS: gdb.cp/demangle.exp: hp: g__F1RRUcRCUcT2
+PASS: gdb.cp/demangle.exp: hp: g__F1SRPcRPCcT2
+PASS: gdb.cp/demangle.exp: hp: g__F1T1RRlRClT3
+PASS: gdb.cp/demangle.exp: hp: g__F1T1RRiRCiT3
+PASS: gdb.cp/demangle.exp: hp: g__F1T1RRsRCsT3
+PASS: gdb.cp/demangle.exp: hp: g__F1T1RRcRCcT3
+PASS: gdb.cp/demangle.exp: hp: f__FicdPcPFci_v
+PASS: gdb.cp/demangle.exp: hp: f__FicdPcPFic_v
+PASS: gdb.cp/demangle.exp: hp: get__2T7SFv
+PASS: gdb.cp/demangle.exp: hp: g__FcRdRCdT2
+PASS: gdb.cp/demangle.exp: hp: g__FcRfRCfT2
+PASS: gdb.cp/demangle.exp: hp: __md__FC2T2i
+PASS: gdb.cp/demangle.exp: hp: __dv__FC2T2i
+PASS: gdb.cp/demangle.exp: hp: __ml__FC2T2i
+PASS: gdb.cp/demangle.exp: hp: __mi__FC2T2i
+PASS: gdb.cp/demangle.exp: hp: __pl__FC2T2i
+PASS: gdb.cp/demangle.exp: hp: h__Fc
+PASS: gdb.cp/demangle.exp: hp: h__Fd
+PASS: gdb.cp/demangle.exp: hp: h__Ff
+PASS: gdb.cp/demangle.exp: hp: h__Fi
+PASS: gdb.cp/demangle.exp: hp: f__Fi
+PASS: gdb.cp/demangle.exp: hp: h__Fl
+PASS: gdb.cp/demangle.exp: hp: h__Fs
+PASS: gdb.cp/demangle.exp: hp: __md__FC2T2RC2T2
+PASS: gdb.cp/demangle.exp: hp: __dv__FC2T2RC2T2
+PASS: gdb.cp/demangle.exp: hp: __ml__FC2T2RC2T2
+PASS: gdb.cp/demangle.exp: hp: __mi__FC2T2RC2T2
+PASS: gdb.cp/demangle.exp: hp: __pl__FC2T2RC2T2
+PASS: gdb.cp/demangle.exp: hp: g__FcRP1cRPC1cT2
+PASS: gdb.cp/demangle.exp: hp: g__FdCdT1
+PASS: gdb.cp/demangle.exp: hp: g__FfCfT1
+PASS: gdb.cp/demangle.exp: hp: g__FlClT1
+PASS: gdb.cp/demangle.exp: hp: g__FiCiT1
+PASS: gdb.cp/demangle.exp: hp: g__FsCsT1
+PASS: gdb.cp/demangle.exp: hp: g__FcCcT1
+PASS: gdb.cp/demangle.exp: hp: f__FicdPc
+PASS: gdb.cp/demangle.exp: hp: __nw__FUi
+PASS: gdb.cp/demangle.exp: hp: __ct__Q3_2T11a1bSFi
+PASS: gdb.cp/demangle.exp: hp: __dt__Q3_2T11a1bSFi
+PASS: gdb.cp/demangle.exp: hp: put__Q3_2T11a1bSFi
+PASS: gdb.cp/demangle.exp: hp: get__Q2_2T11aSFv
+PASS: gdb.cp/demangle.exp: hp: put__2T1SFi
+PASS: gdb.cp/demangle.exp: hp: put__Q5_2T11a1b1c1dSFi
+PASS: gdb.cp/demangle.exp: hp: get__Q4_2T11a1b1cSFv
+PASS: gdb.cp/demangle.exp: hp: put__Q2_2T11aSFi
+PASS: gdb.cp/demangle.exp: hp: put__Q4_2T11a1b1cSFi
+PASS: gdb.cp/demangle.exp: hp: get__Q3_2T11a1bSFv
+PASS: gdb.cp/demangle.exp: hp: get__2T1SFv
+PASS: gdb.cp/demangle.exp: hp: get__Q5_2T11a1b1c1dSFv
+PASS: gdb.cp/demangle.exp: hp: bar__3fooFPv
+PASS: gdb.cp/demangle.exp: hp: bar__3fooFPCv
+PASS: gdb.cp/demangle.exp: hp: bar__3fooCFPv
+PASS: gdb.cp/demangle.exp: hp: bar__3fooCFPCv
+PASS: gdb.cp/demangle.exp: hp: __eq__3fooFR3foo
+PASS: gdb.cp/demangle.exp: hp: __eq__3fooFRC3foo
+PASS: gdb.cp/demangle.exp: hp: __eq__3fooCFR3foo
+PASS: gdb.cp/demangle.exp: hp: __eq__3fooCFRC3foo
+PASS: gdb.cp/demangle.exp: hp: bar__3fooFiT16FooBar
+PASS: gdb.cp/demangle.exp: hp: bar__3fooFPiN51PdN37PcN211T1iN215
+PASS: gdb.cp/demangle.exp: hp: __dt__2T5XTPFiPPdPv_i__Fv
+PASS: gdb.cp/demangle.exp: hp: __ct__1cFi
+PASS: gdb.cp/demangle.exp: hp: __dt__2T5XTi__Fv
+PASS: gdb.cp/demangle.exp: hp: __dt__2T5XTc__Fv
+PASS: gdb.cp/demangle.exp: hp: __ct__2T2Fi
+PASS: gdb.cp/demangle.exp: hp: __dt__2T1Fv
+PASS: gdb.cp/demangle.exp: hp: __dt__2T5XT1x__Fv
+PASS: gdb.cp/demangle.exp: hp: __dt__2T5XTPFcPv_i__Fv
+PASS: gdb.cp/demangle.exp: hp: __ct__2T5XTPFiPPdPv_i__Fi
+PASS: gdb.cp/demangle.exp: hp: __dl__2T5XT1x__SFPv
+PASS: gdb.cp/demangle.exp: hp: X__2T5XT1x
+PASS: gdb.cp/demangle.exp: hp: __ct__2T5XTi__Fi
+PASS: gdb.cp/demangle.exp: hp: __ct__2T5XTc__Fi
+PASS: gdb.cp/demangle.exp: hp: __dl__2T5XTPFcPv_i__SFPv
+PASS: gdb.cp/demangle.exp: hp: X__2T5XTPFcPv_i
+PASS: gdb.cp/demangle.exp: hp: __ct__2T5XT1x__Fi
+PASS: gdb.cp/demangle.exp: hp: __dl__2T5XTPFiPPdPv_i__SFPv
+PASS: gdb.cp/demangle.exp: hp: X__2T5XTPFiPPdPv_i
+PASS: gdb.cp/demangle.exp: hp: __dl__2T5XTi__SFPv
+PASS: gdb.cp/demangle.exp: hp: __dl__2T5XTc__SFPv
+PASS: gdb.cp/demangle.exp: hp: X__2T5XTc
+PASS: gdb.cp/demangle.exp: hp: X__2T5XTi
+PASS: gdb.cp/demangle.exp: hp: __ct__2T5XTPFcPv_i__Fi
+PASS: gdb.cp/demangle.exp: hp: __dt__2T1XTc__Fv
+PASS: gdb.cp/demangle.exp: hp: __dt__2T1XT1t__Fv
+PASS: gdb.cp/demangle.exp: hp: __dl__2T1XT1t__SFPv
+PASS: gdb.cp/demangle.exp: hp: __ct__2T1XTc__Fi
+PASS: gdb.cp/demangle.exp: hp: __ct__2T1XTc__Fv
+PASS: gdb.cp/demangle.exp: hp: __ct__2T1XT1t__Fi
+PASS: gdb.cp/demangle.exp: hp: __ct__2T1XT1t__Fv
+PASS: gdb.cp/demangle.exp: hp: __dl__2T1XTc__SFPv
+PASS: gdb.cp/demangle.exp: hp: elem__6vectorXTd__Fi
+PASS: gdb.cp/demangle.exp: hp: elem__6vectorXTi__Fi
+PASS: gdb.cp/demangle.exp: hp: __ct__6vectorXTd__Fi
+PASS: gdb.cp/demangle.exp: hp: __ct__6vectorXTi__Fi
+PASS: gdb.cp/demangle.exp: hp: __ct__9DListNodeXTR6RLabel__FR6RLabelP9DListNodeXTR6RLabel_T2
+PASS: gdb.cp/demangle.exp: hp: elem__6vectorXTiUP34__Fi
+PASS: gdb.cp/demangle.exp: hp: elem__6vectorXUP2701Td__Fi
+PASS: gdb.cp/demangle.exp: hp: elem__6vectorXTiSP334__Fi
+PASS: gdb.cp/demangle.exp: hp: elem__6vectorXTiSN67__Fi
+PASS: gdb.cp/demangle.exp: hp: elem__6vectorXTiSM__SCFPPd
+PASS: gdb.cp/demangle.exp: hp: elem__6vectorXTiSN67UP4000TRs__Fi
+PASS: gdb.cp/demangle.exp: hp: elem__6vectorXTiSN67TRdTFPv_i__Fi
+PASS: gdb.cp/demangle.exp: hp: X__6vectorXTiSN67TdTPvUP5TRs
+PASS: gdb.cp/demangle.exp: hp: elem__6vectorXTiA3foo__Fi
+PASS: gdb.cp/demangle.exp: hp: elem__6vectorXTiA3fooTPvA5Label__FiPPvT2
+PASS: gdb.cp/demangle.exp: hp: elem__6vectorXTiSN42A3foo__Fi
+PASS: gdb.cp/demangle.exp: hp: __ct__2T5XTPFcPv_i__Fi_2
+PASS: gdb.cp/demangle.exp: hp: __ct__2T5XTPFcPv_i__Fi_19
+PASS: gdb.cp/demangle.exp: hp: f__FicdPcPFci_v_34
+PASS: gdb.cp/demangle.exp: hp: spec__13Spec<%1,%1.*>XTiTPi_FPi
+PASS: gdb.cp/demangle.exp: hp: spec__16Spec<%1,%1.&,%1>XTiTRiTi_FPi
+PASS: gdb.cp/demangle.exp: hp: add__XTc_FcT1
+PASS: gdb.cp/demangle.exp: hp: add__XTcSP9A5label_FcPPlT1
+PASS: gdb.cp/demangle.exp: hp: add__XTPfTFPd_f_FcT1
+PASS: gdb.cp/demangle.exp: hp: unLink__12basic_stringXTcT18string_char_traitsXTc_T9allocator_Fv
+PASS: gdb.cp/demangle.exp: hp: _Utf390_1__1_9223372036854775807__9223372036854775
+Running ./gdb.cp/derivation.exp ...
+PASS: gdb.cp/derivation.exp: before run: ptype A::value_type
+PASS: gdb.cp/derivation.exp: before run: whatis A::value_type
+PASS: gdb.cp/derivation.exp: before run: p (A::value_type) 0
+PASS: gdb.cp/derivation.exp: before run: ptype D::value_type
+PASS: gdb.cp/derivation.exp: before run: whatis D::value_type
+PASS: gdb.cp/derivation.exp: before run: p (D::value_type) 0
+PASS: gdb.cp/derivation.exp: before run: ptype E::value_type
+PASS: gdb.cp/derivation.exp: before run: whatis E::value_type
+PASS: gdb.cp/derivation.exp: before run: p (E::value_type) 0
+PASS: gdb.cp/derivation.exp: before run: ptype F::value_type
+PASS: gdb.cp/derivation.exp: before run: whatis F::value_type
+PASS: gdb.cp/derivation.exp: before run: p (F::value_type) 0
+PASS: gdb.cp/derivation.exp: before run: ptype A2::value_type
+PASS: gdb.cp/derivation.exp: before run: whatis A2::value_type
+PASS: gdb.cp/derivation.exp: before run: p (A2::value_type) 0
+PASS: gdb.cp/derivation.exp: before run: ptype D2::value_type
+PASS: gdb.cp/derivation.exp: before run: whatis D2::value_type
+PASS: gdb.cp/derivation.exp: before run: p (D2::value_type) 0
+PASS: gdb.cp/derivation.exp: before run: ptype Z::value_type
+PASS: gdb.cp/derivation.exp: before run: whatis Z::value_type
+PASS: gdb.cp/derivation.exp: before run: p (Z::value_type) 0
+PASS: gdb.cp/derivation.exp: before run: ptype ZZ::value_type
+PASS: gdb.cp/derivation.exp: before run: whatis ZZ::value_type
+PASS: gdb.cp/derivation.exp: before run: p (ZZ::value_type) 0
+PASS: gdb.cp/derivation.exp: at marker1: ptype A::value_type
+PASS: gdb.cp/derivation.exp: at marker1: whatis A::value_type
+PASS: gdb.cp/derivation.exp: at marker1: p (A::value_type) 0
+PASS: gdb.cp/derivation.exp: at marker1: ptype D::value_type
+PASS: gdb.cp/derivation.exp: at marker1: whatis D::value_type
+PASS: gdb.cp/derivation.exp: at marker1: p (D::value_type) 0
+PASS: gdb.cp/derivation.exp: at marker1: ptype A2::value_type
+PASS: gdb.cp/derivation.exp: at marker1: whatis A2::value_type
+PASS: gdb.cp/derivation.exp: at marker1: p (A2::value_type) 0
+PASS: gdb.cp/derivation.exp: at marker1: ptype D2::value_type
+PASS: gdb.cp/derivation.exp: at marker1: whatis D2::value_type
+PASS: gdb.cp/derivation.exp: at marker1: p (D2::value_type) 0
+PASS: gdb.cp/derivation.exp: up from marker1
+PASS: gdb.cp/derivation.exp: print value of a_instance
+PASS: gdb.cp/derivation.exp: ptype a_instance
+PASS: gdb.cp/derivation.exp: print value of d_instance
+PASS: gdb.cp/derivation.exp: ptype d_instance
+PASS: gdb.cp/derivation.exp: print value of e_instance
+PASS: gdb.cp/derivation.exp: ptype e_instance
+PASS: gdb.cp/derivation.exp: print value of f_instance
+PASS: gdb.cp/derivation.exp: ptype f_instance
+PASS: gdb.cp/derivation.exp: ptype g_instance
+PASS: gdb.cp/derivation.exp: print value of d_instance.a
+PASS: gdb.cp/derivation.exp: print value of d_instance.aa
+PASS: gdb.cp/derivation.exp: print value of d_instance.b
+PASS: gdb.cp/derivation.exp: print value of d_instance.bb
+PASS: gdb.cp/derivation.exp: print value of d_instance.c
+PASS: gdb.cp/derivation.exp: print value of d_instance.cc
+PASS: gdb.cp/derivation.exp: print value of d_instance.d
+PASS: gdb.cp/derivation.exp: print value of d_instance.dd
+PASS: gdb.cp/derivation.exp: print value of g_instance.a
+PASS: gdb.cp/derivation.exp: print value of g_instance.b
+PASS: gdb.cp/derivation.exp: print value of g_instance.c
+PASS: gdb.cp/derivation.exp: print value of g_instance.afoo()
+PASS: gdb.cp/derivation.exp: re-selected 'main' frame after inferior call
+PASS: gdb.cp/derivation.exp: print value of g_instance.bfoo()
+PASS: gdb.cp/derivation.exp: print value of g_instance.cfoo()
+PASS: gdb.cp/derivation.exp: whatis c_instance.c
+PASS: gdb.cp/derivation.exp: ptype c_instance.c
+PASS: gdb.cp/derivation.exp: whatis g_instance.g
+PASS: gdb.cp/derivation.exp: ptype g_instance.g
+PASS: gdb.cp/derivation.exp: whatis a_instance.a
+PASS: gdb.cp/derivation.exp: ptype a_instance.a
+PASS: gdb.cp/derivation.exp: p (A::value_type) 0
+PASS: gdb.cp/derivation.exp: whatis b_instance.b
+PASS: gdb.cp/derivation.exp: ptype b_instance.b
+PASS: gdb.cp/derivation.exp: whatis d_instance.d
+PASS: gdb.cp/derivation.exp: ptype d_instance.d
+PASS: gdb.cp/derivation.exp: p (D::value_type) 0
+PASS: gdb.cp/derivation.exp: whatis e_instance.e
+PASS: gdb.cp/derivation.exp: ptype e_instance.e
+PASS: gdb.cp/derivation.exp: p (E::value_type) 0
+PASS: gdb.cp/derivation.exp: whatis f_instance.f
+PASS: gdb.cp/derivation.exp: ptype f_instance.f
+PASS: gdb.cp/derivation.exp: p (F::value_type) 0
+PASS: gdb.cp/derivation.exp: whatis z_instance.z
+PASS: gdb.cp/derivation.exp: ptype z_instance.z
+PASS: gdb.cp/derivation.exp: p (Z::value_type) 0
+PASS: gdb.cp/derivation.exp: whatis zz_instance.zz
+PASS: gdb.cp/derivation.exp: ptype zz_instance.zz
+PASS: gdb.cp/derivation.exp: p (ZZ::value_type) 0
+PASS: gdb.cp/derivation.exp: ptype vderived
+PASS: gdb.cp/derivation.exp: print vderived
+PASS: gdb.cp/derivation.exp: ptype N::value_type
+PASS: gdb.cp/derivation.exp: ptype N::Derived::value_type
+PASS: gdb.cp/derivation.exp: ptype value_type
+Running ./gdb.cp/destrprint.exp ...
+PASS: gdb.cp/destrprint.exp: continue to breakpoint: Break here
+PASS: gdb.cp/destrprint.exp: go up to ~Derived
+PASS: gdb.cp/destrprint.exp: set print object on
+PASS: gdb.cp/destrprint.exp: print *this with print object = on
+PASS: gdb.cp/destrprint.exp: set print object off
+PASS: gdb.cp/destrprint.exp: print *this with print object = off
+Running ./gdb.cp/dispcxx.exp ...
+PASS: gdb.cp/dispcxx.exp: continue to breakpoint: here
+PASS: gdb.cp/dispcxx.exp: display k
+Running ./gdb.cp/exception.exp ...
+PASS: gdb.cp/exception.exp: catch catch (before inferior run)
+PASS: gdb.cp/exception.exp: catch throw (before inferior run)
+PASS: gdb.cp/exception.exp: info breakpoints (before inferior run)
+PASS: gdb.cp/exception.exp: Set temporary breakpoint at main
+PASS: gdb.cp/exception.exp: Run to main
+PASS: gdb.cp/exception.exp: info breakpoints (after inferior run)
+PASS: gdb.cp/exception.exp: break catcher
+PASS: gdb.cp/exception.exp: continue to first throw
+PASS: gdb.cp/exception.exp: backtrace after first throw
+PASS: gdb.cp/exception.exp: continue to first catch
+PASS: gdb.cp/exception.exp: backtrace after first catch
+PASS: gdb.cp/exception.exp: continue to catcher for the first time
+PASS: gdb.cp/exception.exp: continue to second throw
+PASS: gdb.cp/exception.exp: backtrace after second throw
+PASS: gdb.cp/exception.exp: continue to second catch
+PASS: gdb.cp/exception.exp: backtrace after second catch
+PASS: gdb.cp/exception.exp: continue to catcher for the second time
+Running ./gdb.cp/expand-psymtabs-cxx.exp ...
+PASS: gdb.cp/expand-psymtabs-cxx.exp: set language c++
+PASS: gdb.cp/expand-psymtabs-cxx.exp: before expand
+PASS: gdb.cp/expand-psymtabs-cxx.exp: force expand
+PASS: gdb.cp/expand-psymtabs-cxx.exp: after expand
+Running ./gdb.cp/expand-sals.exp ...
+PASS: gdb.cp/expand-sals.exp: continue to breakpoint: func
+PASS: gdb.cp/expand-sals.exp: up
+PASS: gdb.cp/expand-sals.exp: break
+PASS: gdb.cp/expand-sals.exp: continue to breakpoint: caller
+PASS: gdb.cp/expand-sals.exp: bt from A
+PASS: gdb.cp/expand-sals.exp: continue to breakpoint: next caller func
+Running ./gdb.cp/extern-c.exp ...
+PASS: gdb.cp/extern-c.exp: setting breakpoint at c_func
+PASS: gdb.cp/extern-c.exp: continue to breakpoint: c_func
+PASS: gdb.cp/extern-c.exp: initialize counter
+PASS: gdb.cp/extern-c.exp: rbreak c_funcs
+PASS: gdb.cp/extern-c.exp: command details for multiple breakpoints
+PASS: gdb.cp/extern-c.exp: set commands on multiple breakpoints
+PASS: gdb.cp/extern-c.exp: continue to breakpoint: c_funcs_1
+PASS: gdb.cp/extern-c.exp: verify counter at first breakpoint
+PASS: gdb.cp/extern-c.exp: continue to breakpoint: c_funcs_2
+PASS: gdb.cp/extern-c.exp: verify counter at second breakpoint
+Running ./gdb.cp/formatted-ref.exp ...
+PASS: gdb.cp/formatted-ref.exp: print/x s
+PASS: gdb.cp/formatted-ref.exp: print/x e
+PASS: gdb.cp/formatted-ref.exp: print/x i
+PASS: gdb.cp/formatted-ref.exp: print/x &s
+PASS: gdb.cp/formatted-ref.exp: print/x &e
+PASS: gdb.cp/formatted-ref.exp: print/x &i
+PASS: gdb.cp/formatted-ref.exp: print/x *(&(&s))
+PASS: gdb.cp/formatted-ref.exp: print/x *(&(&i))
+PASS: gdb.cp/formatted-ref.exp: print/x *(&(&e))
+PASS: gdb.cp/formatted-ref.exp: print s.x == 13
+Running ./gdb.cp/fpointer.exp ...
+PASS: gdb.cp/fpointer.exp: p p1()
+PASS: gdb.cp/fpointer.exp: p p2()
+PASS: gdb.cp/fpointer.exp: p p[0]()
+PASS: gdb.cp/fpointer.exp: p p[1]()
+PASS: gdb.cp/fpointer.exp: p p3('a')
+PASS: gdb.cp/fpointer.exp: p p4(1)
+Running ./gdb.cp/gdb1355.exp ...
+PASS: gdb.cp/gdb1355.exp: ptype s1
+PASS: gdb.cp/gdb1355.exp: print s1
+Running ./gdb.cp/gdb2384.exp ...
+PASS: gdb.cp/gdb2384.exp: continue to breakpoint: set breakpoint here
+PASS: gdb.cp/gdb2384.exp: print d1.meth ()
+PASS: gdb.cp/gdb2384.exp: continue to breakpoint: set breakpoint here
+PASS: gdb.cp/gdb2384.exp: gdb2384
+PASS: gdb.cp/gdb2384.exp: continue to breakpoint: set breakpoint here (second)
+PASS: gdb.cp/gdb2384.exp: print d2.meth()
+PASS: gdb.cp/gdb2384.exp: continue to breakpoint: set breakpoint here (second)
+PASS: gdb.cp/gdb2384.exp: gdb2384 (second)
+Running ./gdb.cp/gdb2495.exp ...
+PASS: gdb.cp/gdb2495.exp: p exceptions.no_throw_function()
+PASS: gdb.cp/gdb2495.exp: p exceptions.throw_function_with_handler()
+FAIL: gdb.cp/gdb2495.exp: Call a function that raises an exception without a handler.
+FAIL: gdb.cp/gdb2495.exp: bt after returning from a popped frame
+PASS: gdb.cp/gdb2495.exp: info breakpoints
+PASS: gdb.cp/gdb2495.exp: set unwinn-on-terminating-exception off
+PASS: gdb.cp/gdb2495.exp: Turn off unwind on terminating exception flag
+PASS: gdb.cp/gdb2495.exp: Call a function that raises an exception with unwinding off..
+PASS: gdb.cp/gdb2495.exp: set unwindonsignal on
+PASS: gdb.cp/gdb2495.exp: Turn on unwind on signal
+PASS: gdb.cp/gdb2495.exp: p exceptions.raise_signal(1)
+PASS: gdb.cp/gdb2495.exp: set unwindonsignal off
+PASS: gdb.cp/gdb2495.exp: Turn off unwind on signal
+PASS: gdb.cp/gdb2495.exp: p exceptions.raise_signal(1)
+Running ./gdb.cp/hang.exp ...
+PASS: gdb.cp/hang.exp: doesn't overwrite struct type
+PASS: gdb.cp/hang.exp: doesn't corrupt cv_type chain
+Running ./gdb.cp/infcall-dlopen.exp ...
+PASS: gdb.cp/infcall-dlopen.exp: test 0
+PASS: gdb.cp/infcall-dlopen.exp: test 0 stub 1
+PASS: gdb.cp/infcall-dlopen.exp: test 0 stub 2
+PASS: gdb.cp/infcall-dlopen.exp: test 1
+PASS: gdb.cp/infcall-dlopen.exp: test 1 stub 1
+PASS: gdb.cp/infcall-dlopen.exp: test 1 stub 2
+PASS: gdb.cp/infcall-dlopen.exp: test 2
+PASS: gdb.cp/infcall-dlopen.exp: test 2 stub 1
+PASS: gdb.cp/infcall-dlopen.exp: test 2 stub 2
+PASS: gdb.cp/infcall-dlopen.exp: test 3
+PASS: gdb.cp/infcall-dlopen.exp: test 3 stub 1
+PASS: gdb.cp/infcall-dlopen.exp: test 3 stub 2
+PASS: gdb.cp/infcall-dlopen.exp: test 4
+PASS: gdb.cp/infcall-dlopen.exp: test 4 stub 1
+PASS: gdb.cp/infcall-dlopen.exp: test 4 stub 2
+PASS: gdb.cp/infcall-dlopen.exp: test 5
+PASS: gdb.cp/infcall-dlopen.exp: test 5 stub 1
+PASS: gdb.cp/infcall-dlopen.exp: test 5 stub 2
+PASS: gdb.cp/infcall-dlopen.exp: test 6
+PASS: gdb.cp/infcall-dlopen.exp: test 6 stub 1
+PASS: gdb.cp/infcall-dlopen.exp: test 6 stub 2
+PASS: gdb.cp/infcall-dlopen.exp: test 7
+PASS: gdb.cp/infcall-dlopen.exp: test 7 stub 1
+PASS: gdb.cp/infcall-dlopen.exp: test 7 stub 2
+PASS: gdb.cp/infcall-dlopen.exp: test 8
+PASS: gdb.cp/infcall-dlopen.exp: test 8 stub 1
+PASS: gdb.cp/infcall-dlopen.exp: test 8 stub 2
+PASS: gdb.cp/infcall-dlopen.exp: test 9
+PASS: gdb.cp/infcall-dlopen.exp: test 9 stub 1
+PASS: gdb.cp/infcall-dlopen.exp: test 9 stub 2
+Running ./gdb.cp/inherit.exp ...
+PASS: gdb.cp/inherit.exp: set width 0
+PASS: gdb.cp/inherit.exp: set language c++
+PASS: gdb.cp/inherit.exp: ptype A (FIXME)
+PASS: gdb.cp/inherit.exp: ptype class A (FIXME)
+PASS: gdb.cp/inherit.exp: ptype g_A (FIXME)
+PASS: gdb.cp/inherit.exp: ptype B
+PASS: gdb.cp/inherit.exp: ptype class B
+PASS: gdb.cp/inherit.exp: ptype g_B
+PASS: gdb.cp/inherit.exp: ptype C
+PASS: gdb.cp/inherit.exp: ptype class C
+PASS: gdb.cp/inherit.exp: ptype g_C
+PASS: gdb.cp/inherit.exp: ptype tagless struct
+PASS: gdb.cp/inherit.exp: ptype variable of type tagless struct
+PASS: gdb.cp/inherit.exp: ptype D
+PASS: gdb.cp/inherit.exp: ptype class D
+PASS: gdb.cp/inherit.exp: ptype g_D
+PASS: gdb.cp/inherit.exp: ptype E
+PASS: gdb.cp/inherit.exp: ptype class E
+PASS: gdb.cp/inherit.exp: ptype g_E
+PASS: gdb.cp/inherit.exp: ptype vA
+PASS: gdb.cp/inherit.exp: ptype class vA
+PASS: gdb.cp/inherit.exp: ptype g_vA
+PASS: gdb.cp/inherit.exp: ptype vB
+PASS: gdb.cp/inherit.exp: ptype class vB
+PASS: gdb.cp/inherit.exp: ptype g_vB
+PASS: gdb.cp/inherit.exp: ptype vC
+PASS: gdb.cp/inherit.exp: ptype class vC
+PASS: gdb.cp/inherit.exp: ptype g_vC
+PASS: gdb.cp/inherit.exp: ptype vD
+PASS: gdb.cp/inherit.exp: ptype class vD
+PASS: gdb.cp/inherit.exp: ptype g_vD
+PASS: gdb.cp/inherit.exp: ptype vE
+PASS: gdb.cp/inherit.exp: ptype class vE
+PASS: gdb.cp/inherit.exp: ptype g_vE
+PASS: gdb.cp/inherit.exp: print g_A.A::a
+PASS: gdb.cp/inherit.exp: print g_A.A::x
+PASS: gdb.cp/inherit.exp: print g_A.a
+PASS: gdb.cp/inherit.exp: print g_A.x
+PASS: gdb.cp/inherit.exp: print g_B.A::a
+PASS: gdb.cp/inherit.exp: print g_B.A::x
+PASS: gdb.cp/inherit.exp: print g_B.B::b
+PASS: gdb.cp/inherit.exp: print g_B.B::x
+PASS: gdb.cp/inherit.exp: print g_B.a
+PASS: gdb.cp/inherit.exp: print g_B.b
+PASS: gdb.cp/inherit.exp: print g_B.x
+PASS: gdb.cp/inherit.exp: print g_C.A::a
+PASS: gdb.cp/inherit.exp: print g_C.A::x
+PASS: gdb.cp/inherit.exp: print g_C.C::c
+PASS: gdb.cp/inherit.exp: print g_C.C::x
+PASS: gdb.cp/inherit.exp: print g_C.a
+PASS: gdb.cp/inherit.exp: print g_C.c
+PASS: gdb.cp/inherit.exp: print g_C.x
+PASS: gdb.cp/inherit.exp: print g_A
+PASS: gdb.cp/inherit.exp: print g_B
+PASS: gdb.cp/inherit.exp: print g_C
+PASS: gdb.cp/inherit.exp: print g_A.A::a
+PASS: gdb.cp/inherit.exp: print g_A.A::x
+PASS: gdb.cp/inherit.exp: print g_B.A::a
+PASS: gdb.cp/inherit.exp: print g_B.A::x
+PASS: gdb.cp/inherit.exp: print g_B.B::b
+PASS: gdb.cp/inherit.exp: print g_B.B::x
+PASS: gdb.cp/inherit.exp: print g_C.A::a
+PASS: gdb.cp/inherit.exp: print g_C.A::x
+PASS: gdb.cp/inherit.exp: print g_C.C::c
+PASS: gdb.cp/inherit.exp: print g_C.C::x
+PASS: gdb.cp/inherit.exp: print g_D.A::a
+PASS: gdb.cp/inherit.exp: print g_D.C::a
+PASS: gdb.cp/inherit.exp: print g_D.B::a
+PASS: gdb.cp/inherit.exp: print g_D.A::x
+PASS: gdb.cp/inherit.exp: print g_D.B::b
+PASS: gdb.cp/inherit.exp: print g_D.B::x
+PASS: gdb.cp/inherit.exp: print g_D.C::c
+PASS: gdb.cp/inherit.exp: print g_D.C::x
+PASS: gdb.cp/inherit.exp: print g_D.D::d
+PASS: gdb.cp/inherit.exp: print g_D.D::x
+PASS: gdb.cp/inherit.exp: print g_E.A::a
+PASS: gdb.cp/inherit.exp: print g_E.A::x
+PASS: gdb.cp/inherit.exp: print g_E.B::b
+PASS: gdb.cp/inherit.exp: print g_E.B::x
+PASS: gdb.cp/inherit.exp: print g_E.C::c
+PASS: gdb.cp/inherit.exp: print g_E.C::x
+PASS: gdb.cp/inherit.exp: print g_E.D::d
+PASS: gdb.cp/inherit.exp: print g_E.D::x
+PASS: gdb.cp/inherit.exp: print g_E.E::e
+PASS: gdb.cp/inherit.exp: print g_E.E::x
+PASS: gdb.cp/inherit.exp: ptype g_D.b
+PASS: gdb.cp/inherit.exp: ptype g_D.c
+PASS: gdb.cp/inherit.exp: ptype g_D.d
+PASS: gdb.cp/inherit.exp: ptype g_A.A::a
+PASS: gdb.cp/inherit.exp: ptype g_A.A::x
+PASS: gdb.cp/inherit.exp: ptype g_B.A::a
+PASS: gdb.cp/inherit.exp: ptype g_B.A::x
+PASS: gdb.cp/inherit.exp: ptype g_B.B::b
+PASS: gdb.cp/inherit.exp: ptype g_B.B::x
+PASS: gdb.cp/inherit.exp: ptype g_C.A::a
+PASS: gdb.cp/inherit.exp: ptype g_C.A::x
+PASS: gdb.cp/inherit.exp: ptype g_C.C::c
+PASS: gdb.cp/inherit.exp: ptype g_C.C::x
+PASS: gdb.cp/inherit.exp: ptype g_D.A::a
+PASS: gdb.cp/inherit.exp: ptype g_D.A::x
+PASS: gdb.cp/inherit.exp: ptype g_D.B::b
+PASS: gdb.cp/inherit.exp: ptype g_D.B::x
+PASS: gdb.cp/inherit.exp: ptype g_D.C::c
+PASS: gdb.cp/inherit.exp: ptype g_D.C::x
+PASS: gdb.cp/inherit.exp: ptype g_D.D::d
+PASS: gdb.cp/inherit.exp: ptype g_D.D::x
+PASS: gdb.cp/inherit.exp: ptype g_E.A::a
+PASS: gdb.cp/inherit.exp: ptype g_E.A::x
+PASS: gdb.cp/inherit.exp: ptype g_E.B::b
+PASS: gdb.cp/inherit.exp: ptype g_E.B::x
+PASS: gdb.cp/inherit.exp: ptype g_E.C::c
+PASS: gdb.cp/inherit.exp: ptype g_E.C::x
+PASS: gdb.cp/inherit.exp: ptype g_E.D::d
+PASS: gdb.cp/inherit.exp: ptype g_E.D::x
+PASS: gdb.cp/inherit.exp: ptype g_E.E::e
+PASS: gdb.cp/inherit.exp: ptype g_E.E::x
+PASS: gdb.cp/inherit.exp: print g_D
+PASS: gdb.cp/inherit.exp: print g_E
+PASS: gdb.cp/inherit.exp: print anonymous union member
+PASS: gdb.cp/inherit.exp: print variable of type anonymous union
+PASS: gdb.cp/inherit.exp: print type of anonymous union
+PASS: gdb.cp/inherit.exp: print g_vA.vA::va
+PASS: gdb.cp/inherit.exp: print g_vA.vA::vx
+PASS: gdb.cp/inherit.exp: print g_vA.va
+PASS: gdb.cp/inherit.exp: print g_vA.vx
+PASS: gdb.cp/inherit.exp: print g_vB.vA::va
+PASS: gdb.cp/inherit.exp: print g_vB.vA::vx
+PASS: gdb.cp/inherit.exp: print g_vB.vB::vb
+PASS: gdb.cp/inherit.exp: print g_vB.vB::vx
+PASS: gdb.cp/inherit.exp: print g_vB.va
+PASS: gdb.cp/inherit.exp: print g_vB.vb
+PASS: gdb.cp/inherit.exp: print g_vB.vx
+PASS: gdb.cp/inherit.exp: print g_vC.vA::va
+PASS: gdb.cp/inherit.exp: print g_vC.vA::vx
+PASS: gdb.cp/inherit.exp: print g_vC.vC::vc
+PASS: gdb.cp/inherit.exp: print g_vC.vC::vx
+PASS: gdb.cp/inherit.exp: print g_vC.va
+PASS: gdb.cp/inherit.exp: print g_vC.vc
+PASS: gdb.cp/inherit.exp: print g_vC.vx
+PASS: gdb.cp/inherit.exp: print g_vA
+PASS: gdb.cp/inherit.exp: print g_vB
+PASS: gdb.cp/inherit.exp: print g_vC
+PASS: gdb.cp/inherit.exp: print g_vD.vA::va
+PASS: gdb.cp/inherit.exp: print g_vD.vA::vx
+PASS: gdb.cp/inherit.exp: print g_vD.vB::vb
+PASS: gdb.cp/inherit.exp: print g_vD.vB::vx
+PASS: gdb.cp/inherit.exp: print g_vD.vC::vc
+PASS: gdb.cp/inherit.exp: print g_vD.vC::vx
+PASS: gdb.cp/inherit.exp: print g_vD.vD::vd
+PASS: gdb.cp/inherit.exp: print g_vD.vD::vx
+PASS: gdb.cp/inherit.exp: print g_vE.vA::va
+PASS: gdb.cp/inherit.exp: print g_vE.vA::vx
+PASS: gdb.cp/inherit.exp: print g_vE.vB::vb
+PASS: gdb.cp/inherit.exp: print g_vE.vB::vx
+PASS: gdb.cp/inherit.exp: print g_vE.vC::vc
+PASS: gdb.cp/inherit.exp: print g_vE.vC::vx
+PASS: gdb.cp/inherit.exp: print g_vE.vD::vd
+PASS: gdb.cp/inherit.exp: print g_vE.vD::vx
+PASS: gdb.cp/inherit.exp: print g_vE.vE::ve
+PASS: gdb.cp/inherit.exp: print g_vE.vE::vx
+PASS: gdb.cp/inherit.exp: print g_vD (FIXME v3 vtbl ptr)
+PASS: gdb.cp/inherit.exp: print g_vE (FIXME v3 vtbl ptr)
+Running ./gdb.cp/koenig.exp ...
+PASS: gdb.cp/koenig.exp: p first(c)
+PASS: gdb.cp/koenig.exp: p second(0,0,c,0,0)
+PASS: gdb.cp/koenig.exp: p entry (c)
+PASS: gdb.cp/koenig.exp: p first(0,c)
+PASS: gdb.cp/koenig.exp: p first(b.c)
+PASS: gdb.cp/koenig.exp: p foo(eo)
+PASS: gdb.cp/koenig.exp: p foo(eo, eo)
+PASS: gdb.cp/koenig.exp: p foo(eo, eo, 1)
+PASS: gdb.cp/koenig.exp: p foo(fo, eo)
+PASS: gdb.cp/koenig.exp: p foo(1 ,fo, eo)
+PASS: gdb.cp/koenig.exp: p foo(go, fo, eo)
+PASS: gdb.cp/koenig.exp: p fake(eo)
+PASS: gdb.cp/koenig.exp: p foo (fake)
+PASS: gdb.cp/koenig.exp: p foo(io)
+PASS: gdb.cp/koenig.exp: p foo(ix)
+PASS: gdb.cp/koenig.exp: p foo(ju)
+PASS: gdb.cp/koenig.exp: p foo(js)
+PASS: gdb.cp/koenig.exp: p foo(je)
+XFAIL: gdb.cp/koenig.exp: p foo(jab)
+PASS: gdb.cp/koenig.exp: p foo(jap)
+PASS: gdb.cp/koenig.exp: p foo(japp)
+PASS: gdb.cp/koenig.exp: p foo(jca)
+PASS: gdb.cp/koenig.exp: p foo(ko,1)
+PASS: gdb.cp/koenig.exp: p foo(ko,1.0f)
+XFAIL: gdb.cp/koenig.exp: p bar(ko,1)
+PASS: gdb.cp/koenig.exp: p foo(labo)
+PASS: gdb.cp/koenig.exp: p ma.foo('a')
+PASS: gdb.cp/koenig.exp: p foo(ma,'a')
+PASS: gdb.cp/koenig.exp: p M::N::foo(ma,'a')
+PASS: gdb.cp/koenig.exp: p M::FAKE::foo(ma,'a')
+PASS: gdb.cp/koenig.exp: p M::N::fake(ma,'a')
+PASS: gdb.cp/koenig.exp: p M::bar('a')
+PASS: gdb.cp/koenig.exp: p M::N::bar('a')
+PASS: gdb.cp/koenig.exp: p foo(ttoa, 'a')
+PASS: gdb.cp/koenig.exp: p foo (p_union)
+PASS: gdb.cp/koenig.exp: p q == 5
+PASS: gdb.cp/koenig.exp: p q == 5.0f
+PASS: gdb.cp/koenig.exp: p q != 5
+PASS: gdb.cp/koenig.exp: p q != 5.0f
+PASS: gdb.cp/koenig.exp: p q + 5.0f
+PASS: gdb.cp/koenig.exp: p q + 5
+PASS: gdb.cp/koenig.exp: p ++q
+PASS: gdb.cp/koenig.exp: p r.rfoo()
+PASS: gdb.cp/koenig.exp: continue to breakpoint: marker1
+PASS: gdb.cp/koenig.exp: p rfoo()
+PASS: gdb.cp/koenig.exp: p this->rfoo()
+Running ./gdb.cp/local.exp ...
+PASS: gdb.cp/local.exp: up from marker1
+PASS: gdb.cp/local.exp: ptype l
+PASS: gdb.cp/local.exp: ptype Local
+PASS: gdb.cp/local.exp: break marker2
+PASS: gdb.cp/local.exp: continuing to marker2
+PASS: gdb.cp/local.exp: up from marker2
+PASS: gdb.cp/local.exp: Local out of scope
+PASS: gdb.cp/local.exp: ptype InnerLocal (pattern 1)
+PASS: gdb.cp/local.exp: ptype NestedInnerLocal
+KFAIL: gdb.cp/local.exp: ptype InnerLocal::NestedInnerLocal (PRMS: gdb/482)
+Running ./gdb.cp/maint.exp ...
+PASS: gdb.cp/maint.exp: help maintenance cplus
+PASS: gdb.cp/maint.exp: help maint cp
+PASS: gdb.cp/maint.exp: maint cp
+PASS: gdb.cp/maint.exp: help maint cp first_component
+PASS: gdb.cp/maint.exp: help maint cp namespace
+PASS: gdb.cp/maint.exp: set complaints 1000
+PASS: gdb.cp/maint.exp: maint cp first_component foo
+PASS: gdb.cp/maint.exp: maint cp first_component operator<<
+PASS: gdb.cp/maint.exp: maint cp first_component operator>>
+PASS: gdb.cp/maint.exp: maint cp first_component operator ->
+PASS: gdb.cp/maint.exp: maint cp first_component operator()
+PASS: gdb.cp/maint.exp: maint cp first_component operator>
+PASS: gdb.cp/maint.exp: maint cp first_component operator<
+PASS: gdb.cp/maint.exp: maint cp first_component operator ->
+PASS: gdb.cp/maint.exp: maint cp first_component operator ->
+PASS: gdb.cp/maint.exp: maint cp first_component foo()
+PASS: gdb.cp/maint.exp: maint cp first_component foo(int)
+PASS: gdb.cp/maint.exp: maint cp first_component foo(X::Y)
+PASS: gdb.cp/maint.exp: maint cp first_component foo(X::Y, A::B)
+PASS: gdb.cp/maint.exp: maint cp first_component foo(std::basic_streambuf<wchar_t,std::char_traits<wchar_t> >)
+PASS: gdb.cp/maint.exp: maint cp first_component operator>(X::Y)
+PASS: gdb.cp/maint.exp: maint cp first_component int operator<< <char>()
+PASS: gdb.cp/maint.exp: maint cp first_component T<Cooperator>
+PASS: gdb.cp/maint.exp: maint cp first_component int foo<&(operator<<(C, C))>()
+PASS: gdb.cp/maint.exp: maint cp first_component int foo<&operator<<(C, C)>()
+PASS: gdb.cp/maint.exp: maint cp first_component int foo<operator<<(C, C)>()
+PASS: gdb.cp/maint.exp: maint cp first_component foo::bar
+PASS: gdb.cp/maint.exp: maint cp first_component foo::bar::baz
+PASS: gdb.cp/maint.exp: maint cp first_component C<A>::bar
+PASS: gdb.cp/maint.exp: maint cp first_component C<std::basic_streambuf<wchar_t,std::char_traits<wchar_t> > >::bar
+PASS: gdb.cp/maint.exp: maint cp first_component foo<
+PASS: gdb.cp/maint.exp: maint cp first_component foo(
+PASS: gdb.cp/maint.exp: maint cp first_component bool operator<<char>
+PASS: gdb.cp/maint.exp: maint cp namespace
+Running ./gdb.cp/mb-ctor.exp ...
+PASS: gdb.cp/mb-ctor.exp: set-breakpoint at ctor
+PASS: gdb.cp/mb-ctor.exp: set-breakpoint at dtor
+PASS: gdb.cp/mb-ctor.exp: run to breakpoint 1 v1
+PASS: gdb.cp/mb-ctor.exp: continue to breakpoint: set breakpoint here
+PASS: gdb.cp/mb-ctor.exp: run to breakpoint 1 v2
+PASS: gdb.cp/mb-ctor.exp: continue to breakpoint: set breakpoint here
+PASS: gdb.cp/mb-ctor.exp: run to breakpoint 3 v1
+PASS: gdb.cp/mb-ctor.exp: run to breakpoint 3 v2
+PASS: gdb.cp/mb-ctor.exp: run to exit
+Running ./gdb.cp/mb-inline.exp ...
+PASS: gdb.cp/mb-inline.exp: set breakpoint
+PASS: gdb.cp/mb-inline.exp: info break
+PASS: gdb.cp/mb-inline.exp: run to breakpoint
+PASS: gdb.cp/mb-inline.exp: run to breakpoint 2
+PASS: gdb.cp/mb-inline.exp: disabling location: disable
+PASS: gdb.cp/mb-inline.exp: disabling location: run to breakpoint
+PASS: gdb.cp/mb-inline.exp: disabled breakpoint 1.2
+PASS: gdb.cp/mb-inline.exp: set multi_line_foo breakpoint
+PASS: gdb.cp/mb-inline.exp: run to multi_line_foo breakpoint 4 afn
+PASS: gdb.cp/mb-inline.exp: run to multi_line_foo breakpoint 4 bfn
+Running ./gdb.cp/mb-templates.exp ...
+PASS: gdb.cp/mb-templates.exp: initial condition: set breakpoint
+PASS: gdb.cp/mb-templates.exp: initial condition: run to breakpoint
+PASS: gdb.cp/mb-templates.exp: initial condition: run to breakpoint 2
+PASS: gdb.cp/mb-templates.exp: kill
+PASS: gdb.cp/mb-templates.exp: separate condition: set breakpoint
+PASS: gdb.cp/mb-templates.exp: separate condition: set condition
+PASS: gdb.cp/mb-templates.exp: separate condition: run to breakpoint
+PASS: gdb.cp/mb-templates.exp: separate condition: run to breakpoint 2
+PASS: gdb.cp/mb-templates.exp: disabling location: disable
+PASS: gdb.cp/mb-templates.exp: disabling location: run to breakpoint
+PASS: gdb.cp/mb-templates.exp: disabling location: enable
+PASS: gdb.cp/mb-templates.exp: disable breakpoint: disable
+PASS: gdb.cp/mb-templates.exp: disable breakpoint: run to breakpoint
+PASS: gdb.cp/mb-templates.exp: instantiation: set breakpoint
+PASS: gdb.cp/mb-templates.exp: instantiation: run to breakpoint
+PASS: gdb.cp/mb-templates.exp: instantiation: run to breakpoint 2
+PASS: gdb.cp/mb-templates.exp: set multi_line_foo breakpoint
+PASS: gdb.cp/mb-templates.exp: run to multi_line_foo breakpoint 2 <int>
+PASS: gdb.cp/mb-templates.exp: run to multi_line_foo breakpoint 2 <double>
+Running ./gdb.cp/m-data.exp ...
+PASS: gdb.cp/m-data.exp: continue to breakpoint: end of first constructors
+PASS: gdb.cp/m-data.exp: simple object, const bool
+PASS: gdb.cp/m-data.exp: simple object, const int
+PASS: gdb.cp/m-data.exp: simple object, long
+PASS: gdb.cp/m-data.exp: simple object, enum
+PASS: gdb.cp/m-data.exp: derived template object, base const bool
+PASS: gdb.cp/m-data.exp: derived template object, base const int
+PASS: gdb.cp/m-data.exp: derived template object, base long
+PASS: gdb.cp/m-data.exp: derived template object, base enum
+PASS: gdb.cp/m-data.exp: derived template object, derived enum
+PASS: gdb.cp/m-data.exp: template object, const bool
+PASS: gdb.cp/m-data.exp: template object, const int
+PASS: gdb.cp/m-data.exp: template object, long
+PASS: gdb.cp/m-data.exp: template object, base enum
+PASS: gdb.cp/m-data.exp: template object, derived enum
+PASS: gdb.cp/m-data.exp: continue to breakpoint: continue to shadow breakpoint
+PASS: gdb.cp/m-data.exp: shadowing member
+PASS: gdb.cp/m-data.exp: shadowed global variable
+Running ./gdb.cp/member-name.exp ...
+PASS: gdb.cp/member-name.exp: continue to breakpoint: continue to first breakpoint
+PASS: gdb.cp/member-name.exp: print C::x from first breakpoint
+PASS: gdb.cp/member-name.exp: print B::b from first breakpoint
+PASS: gdb.cp/member-name.exp: print inner::z from first breakpoint
+PASS: gdb.cp/member-name.exp: continue to breakpoint: continue to second breakpoint
+PASS: gdb.cp/member-name.exp: print C::x from second breakpoint
+PASS: gdb.cp/member-name.exp: print B::b from second breakpoint
+PASS: gdb.cp/member-name.exp: print inner::z from second breakpoint
+PASS: gdb.cp/member-name.exp: continue to breakpoint: continue to third breakpoint
+PASS: gdb.cp/member-name.exp: print Templ::y from third breakpoint
+Running ./gdb.cp/member-ptr.exp ...
+PASS: gdb.cp/member-ptr.exp: continue to breakpoint: continue to pmi = NULL
+PASS: gdb.cp/member-ptr.exp: ptype pmi (A::j)
+PASS: gdb.cp/member-ptr.exp: print pmi (A::j)
+PASS: gdb.cp/member-ptr.exp: print a.*pmi (A::j)
+PASS: gdb.cp/member-ptr.exp: print a_p->*pmi (A::j)
+PASS: gdb.cp/member-ptr.exp: set var pmi = &A::jj
+PASS: gdb.cp/member-ptr.exp: print pmi (A::jj)
+PASS: gdb.cp/member-ptr.exp: print a.*pmi (A::jj)
+PASS: gdb.cp/member-ptr.exp: set var pmi = &A::j
+PASS: gdb.cp/member-ptr.exp: print a.*pmi (A::j) (again)
+PASS: gdb.cp/member-ptr.exp: print a.*pmi = 33
+PASS: gdb.cp/member-ptr.exp: print a.*pmi (A::j) (33)
+PASS: gdb.cp/member-ptr.exp: print a (j = 33)
+PASS: gdb.cp/member-ptr.exp: print a_p->*pmi = 44
+PASS: gdb.cp/member-ptr.exp: print a_p->*pmi (44)
+PASS: gdb.cp/member-ptr.exp: print a (j = 44)
+PASS: gdb.cp/member-ptr.exp: ptype a.*pmi
+PASS: gdb.cp/member-ptr.exp: print *pmi
+PASS: gdb.cp/member-ptr.exp: ptype *pmi
+PASS: gdb.cp/member-ptr.exp: print (int) pmi
+PASS: gdb.cp/member-ptr.exp: print ((int) pmi) == ((char *) &a.j - (char *) &a)
+PASS: gdb.cp/member-ptr.exp: ptype diamond_pfunc_ptr
+PASS: gdb.cp/member-ptr.exp: ptype diamond.*diamond_pfunc_ptr
+PASS: gdb.cp/member-ptr.exp: print diamond.*diamond_pfunc_ptr (20)
+PASS: gdb.cp/member-ptr.exp: print (diamond.*diamond_pfunc_ptr) (20)
+PASS: gdb.cp/member-ptr.exp: print diamond.func_ptr (20)
+PASS: gdb.cp/member-ptr.exp: ptype pmf
+PASS: gdb.cp/member-ptr.exp: print pmf
+PASS: gdb.cp/member-ptr.exp: ptype pmf_p
+PASS: gdb.cp/member-ptr.exp: gdb/NNNN
+PASS: gdb.cp/member-ptr.exp: print a.*pmf
+PASS: gdb.cp/member-ptr.exp: print a_p->*pmf
+PASS: gdb.cp/member-ptr.exp: set var pmf = &A::foo
+PASS: gdb.cp/member-ptr.exp: print *pmf
+PASS: gdb.cp/member-ptr.exp: ptype *pmf
+PASS: gdb.cp/member-ptr.exp: print (a.*pmf)(3)
+PASS: gdb.cp/member-ptr.exp: ptype a.*pmf
+PASS: gdb.cp/member-ptr.exp: ptype (a.*pmf)(3)
+PASS: gdb.cp/member-ptr.exp: print diamond_pmi
+PASS: gdb.cp/member-ptr.exp: print diamond.*diamond_pmi
+PASS: gdb.cp/member-ptr.exp: print diamond.*left_pmf
+PASS: gdb.cp/member-ptr.exp: print diamond.*right_pmf
+PASS: gdb.cp/member-ptr.exp: print (diamond.*left_pmf) ()
+PASS: gdb.cp/member-ptr.exp: print (diamond.*right_pmf) ()
+PASS: gdb.cp/member-ptr.exp: print diamond.*left_vpmf
+PASS: gdb.cp/member-ptr.exp: print diamond.*right_vpmf
+PASS: gdb.cp/member-ptr.exp: print (diamond.*left_vpmf) ()
+PASS: gdb.cp/member-ptr.exp: print (diamond.*left_base_vpmf) ()
+PASS: gdb.cp/member-ptr.exp: print (diamond.*right_vpmf) ()
+PASS: gdb.cp/member-ptr.exp: print left_vpmf
+PASS: gdb.cp/member-ptr.exp: print right_vpmf
+PASS: gdb.cp/member-ptr.exp: print base_vpmf
+PASS: gdb.cp/member-ptr.exp: print diamond.*left_vpmf ()
+PASS: gdb.cp/member-ptr.exp: print null_pmi
+PASS: gdb.cp/member-ptr.exp: print null_pmi = &A::j
+PASS: gdb.cp/member-ptr.exp: print null_pmi = 0
+PASS: gdb.cp/member-ptr.exp: print null_pmf
+PASS: gdb.cp/member-ptr.exp: print null_pmf = &A::foo
+PASS: gdb.cp/member-ptr.exp: print null_pmf = 0
+Running ./gdb.cp/method2.exp ...
+PASS: gdb.cp/method2.exp: set multiple-symbols ask
+PASS: gdb.cp/method2.exp: setting language c
+PASS: gdb.cp/method2.exp: breaking in method (c)
+PASS: gdb.cp/method2.exp: setting language c++
+PASS: gdb.cp/method2.exp: breaking in method (c++)
+PASS: gdb.cp/method2.exp: continue until exit at continue to end
+Running ./gdb.cp/method.exp ...
+PASS: gdb.cp/method.exp: break A::foo
+PASS: gdb.cp/method.exp: continue to A::foo
+PASS: gdb.cp/method.exp: print x in A::foo
+PASS: gdb.cp/method.exp: print this in A::foo
+PASS: gdb.cp/method.exp: break A::bar
+PASS: gdb.cp/method.exp: continue to A::bar
+PASS: gdb.cp/method.exp: print x in A::bar
+PASS: gdb.cp/method.exp: print this in A::bar
+PASS: gdb.cp/method.exp: break 21
+PASS: gdb.cp/method.exp: continue to 21
+PASS: gdb.cp/method.exp: print data_ in funk::getFunky
+PASS: gdb.cp/method.exp: print this in funk::getFunky
+PASS: gdb.cp/method.exp: print res in funk::getFunky
+PASS: gdb.cp/method.exp: ptype A
+PASS: gdb.cp/method.exp: finish program
+Running ./gdb.cp/meth-typedefs.exp ...
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(my_other_type)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(my_other_type)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(my_other_type)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(my_other_type)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(my_type)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(my_type)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(my_type)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(my_type)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(const char* const*)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(const char* const*)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(const char* const*)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(const char* const*)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(my_other_type_2)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(my_other_type_2)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(my_other_type_2)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(my_other_type_2)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(my_type_2)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(my_type_2)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(my_type_2)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(my_type_2)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(int)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(int)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(int)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(int)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(my_other_type)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(my_other_type)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(my_other_type)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(my_other_type)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(my_type)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(my_type)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(my_type)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(my_type)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(const char* const*)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(const char* const*)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(const char* const*)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(const char* const*)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(my_other_type_2)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(my_other_type_2)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(my_other_type_2)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(my_other_type_2)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(my_type_2)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(my_type_2)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(my_type_2)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(my_type_2)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(int)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(int)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(int)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(int)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(my_other_type_2, const my_other_type)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(my_other_type_2, const my_other_type)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(my_other_type_2, const my_other_type)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(my_other_type_2, const my_other_type)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(my_other_type_2, my_other_type)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(my_other_type_2, my_other_type)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(my_other_type_2, my_other_type)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(my_other_type_2, my_other_type)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(my_other_type_2, const my_type)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(my_other_type_2, const my_type)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(my_other_type_2, const my_type)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(my_other_type_2, const my_type)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(my_other_type_2, my_type)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(my_other_type_2, my_type)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(my_other_type_2, my_type)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(my_other_type_2, my_type)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(my_other_type_2, const const char* const*)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(my_other_type_2, const const char* const*)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(my_other_type_2, const const char* const*)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(my_other_type_2, const const char* const*)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(my_other_type_2, const char* const*)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(my_other_type_2, const char* const*)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(my_other_type_2, const char* const*)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(my_other_type_2, const char* const*)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(my_type_2, const my_other_type)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(my_type_2, const my_other_type)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(my_type_2, const my_other_type)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(my_type_2, const my_other_type)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(my_type_2, my_other_type)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(my_type_2, my_other_type)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(my_type_2, my_other_type)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(my_type_2, my_other_type)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(my_type_2, const my_type)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(my_type_2, const my_type)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(my_type_2, const my_type)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(my_type_2, const my_type)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(my_type_2, my_type)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(my_type_2, my_type)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(my_type_2, my_type)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(my_type_2, my_type)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(my_type_2, const const char* const*)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(my_type_2, const const char* const*)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(my_type_2, const const char* const*)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(my_type_2, const const char* const*)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(my_type_2, const char* const*)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(my_type_2, const char* const*)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(my_type_2, const char* const*)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(my_type_2, const char* const*)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(int, const my_other_type)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(int, const my_other_type)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(int, const my_other_type)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(int, const my_other_type)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(int, my_other_type)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(int, my_other_type)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(int, my_other_type)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(int, my_other_type)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(int, const my_type)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(int, const my_type)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(int, const my_type)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(int, const my_type)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(int, my_type)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(int, my_type)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(int, my_type)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(int, my_type)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(int, const const char* const*)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(int, const const char* const*)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(int, const const char* const*)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(int, const const char* const*)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(int, const char* const*)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(int, const char* const*)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(int, const char* const*)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(int, const char* const*)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(my_other_type_2, const my_other_type)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(my_other_type_2, const my_other_type)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(my_other_type_2, const my_other_type)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(my_other_type_2, const my_other_type)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(my_other_type_2, my_other_type)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(my_other_type_2, my_other_type)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(my_other_type_2, my_other_type)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(my_other_type_2, my_other_type)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(my_other_type_2, const my_type)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(my_other_type_2, const my_type)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(my_other_type_2, const my_type)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(my_other_type_2, const my_type)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(my_other_type_2, my_type)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(my_other_type_2, my_type)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(my_other_type_2, my_type)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(my_other_type_2, my_type)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(my_other_type_2, const const char* const*)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(my_other_type_2, const const char* const*)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(my_other_type_2, const const char* const*)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(my_other_type_2, const const char* const*)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(my_other_type_2, const char* const*)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(my_other_type_2, const char* const*)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(my_other_type_2, const char* const*)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(my_other_type_2, const char* const*)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(my_type_2, const my_other_type)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(my_type_2, const my_other_type)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(my_type_2, const my_other_type)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(my_type_2, const my_other_type)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(my_type_2, my_other_type)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(my_type_2, my_other_type)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(my_type_2, my_other_type)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(my_type_2, my_other_type)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(my_type_2, const my_type)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(my_type_2, const my_type)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(my_type_2, const my_type)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(my_type_2, const my_type)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(my_type_2, my_type)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(my_type_2, my_type)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(my_type_2, my_type)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(my_type_2, my_type)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(my_type_2, const const char* const*)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(my_type_2, const const char* const*)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(my_type_2, const const char* const*)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(my_type_2, const const char* const*)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(my_type_2, const char* const*)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(my_type_2, const char* const*)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(my_type_2, const char* const*)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(my_type_2, const char* const*)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(int, const my_other_type)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(int, const my_other_type)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(int, const my_other_type)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(int, const my_other_type)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(int, my_other_type)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(int, my_other_type)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(int, my_other_type)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(int, my_other_type)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(int, const my_type)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(int, const my_type)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(int, const my_type)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(int, const my_type)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(int, my_type)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(int, my_type)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(int, my_type)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(int, my_type)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(int, const const char* const*)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(int, const const char* const*)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(int, const const char* const*)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(int, const const char* const*)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(int, const char* const*)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(int, const char* const*)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(int, const char* const*)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(int, const char* const*)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(aenum, astruct const&, aunion const***)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(aenum, astruct const&, aunion const***)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(aenum, astruct const&, aunion const***)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(aenum, astruct const&, aunion const***)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(aenum, astruct const&, anon_union const***)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(aenum, astruct const&, anon_union const***)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(aenum, astruct const&, anon_union const***)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(aenum, astruct const&, anon_union const***)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(aenum, anon_struct const&, aunion const***)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(aenum, anon_struct const&, aunion const***)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(aenum, anon_struct const&, aunion const***)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(aenum, anon_struct const&, aunion const***)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(aenum, anon_struct const&, anon_union const***)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(aenum, anon_struct const&, anon_union const***)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(aenum, anon_struct const&, anon_union const***)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(aenum, anon_struct const&, anon_union const***)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(anon_enum, astruct const&, aunion const***)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(anon_enum, astruct const&, aunion const***)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(anon_enum, astruct const&, aunion const***)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(anon_enum, astruct const&, aunion const***)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(anon_enum, astruct const&, anon_union const***)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(anon_enum, astruct const&, anon_union const***)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(anon_enum, astruct const&, anon_union const***)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(anon_enum, astruct const&, anon_union const***)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(anon_enum, anon_struct const&, aunion const***)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(anon_enum, anon_struct const&, aunion const***)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(anon_enum, anon_struct const&, aunion const***)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(anon_enum, anon_struct const&, aunion const***)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(anon_enum, anon_struct const&, anon_union const***)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(anon_enum, anon_struct const&, anon_union const***)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(anon_enum, anon_struct const&, anon_union const***)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(anon_enum, anon_struct const&, anon_union const***)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(aenum, astruct const&, aunion const***)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(aenum, astruct const&, aunion const***)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(aenum, astruct const&, aunion const***)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(aenum, astruct const&, aunion const***)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(aenum, astruct const&, anon_union const***)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(aenum, astruct const&, anon_union const***)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(aenum, astruct const&, anon_union const***)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(aenum, astruct const&, anon_union const***)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(aenum, anon_struct const&, aunion const***)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(aenum, anon_struct const&, aunion const***)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(aenum, anon_struct const&, aunion const***)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(aenum, anon_struct const&, aunion const***)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(aenum, anon_struct const&, anon_union const***)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(aenum, anon_struct const&, anon_union const***)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(aenum, anon_struct const&, anon_union const***)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(aenum, anon_struct const&, anon_union const***)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(anon_enum, astruct const&, aunion const***)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(anon_enum, astruct const&, aunion const***)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(anon_enum, astruct const&, aunion const***)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(anon_enum, astruct const&, aunion const***)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(anon_enum, astruct const&, anon_union const***)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(anon_enum, astruct const&, anon_union const***)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(anon_enum, astruct const&, anon_union const***)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(anon_enum, astruct const&, anon_union const***)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(anon_enum, anon_struct const&, aunion const***)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(anon_enum, anon_struct const&, aunion const***)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(anon_enum, anon_struct const&, aunion const***)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(anon_enum, anon_struct const&, aunion const***)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(anon_enum, anon_struct const&, anon_union const***)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(anon_enum, anon_struct const&, anon_union const***)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(anon_enum, anon_struct const&, anon_union const***)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(anon_enum, anon_struct const&, anon_union const***)'
+PASS: gdb.cp/meth-typedefs.exp: list B::test(aenum, astruct const&, aunion const***)
+PASS: gdb.cp/meth-typedefs.exp: list 'B::test(aenum, astruct const&, aunion const***)'
+PASS: gdb.cp/meth-typedefs.exp: break B::test(aenum, astruct const&, aunion const***)
+PASS: gdb.cp/meth-typedefs.exp: break 'B::test(aenum, astruct const&, aunion const***)'
+PASS: gdb.cp/meth-typedefs.exp: list B::test(aenum, astruct const&, anon_union const***)
+PASS: gdb.cp/meth-typedefs.exp: list 'B::test(aenum, astruct const&, anon_union const***)'
+PASS: gdb.cp/meth-typedefs.exp: break B::test(aenum, astruct const&, anon_union const***)
+PASS: gdb.cp/meth-typedefs.exp: break 'B::test(aenum, astruct const&, anon_union const***)'
+PASS: gdb.cp/meth-typedefs.exp: list B::test(aenum, anon_struct const&, aunion const***)
+PASS: gdb.cp/meth-typedefs.exp: list 'B::test(aenum, anon_struct const&, aunion const***)'
+PASS: gdb.cp/meth-typedefs.exp: break B::test(aenum, anon_struct const&, aunion const***)
+PASS: gdb.cp/meth-typedefs.exp: break 'B::test(aenum, anon_struct const&, aunion const***)'
+PASS: gdb.cp/meth-typedefs.exp: list B::test(aenum, anon_struct const&, anon_union const***)
+PASS: gdb.cp/meth-typedefs.exp: list 'B::test(aenum, anon_struct const&, anon_union const***)'
+PASS: gdb.cp/meth-typedefs.exp: break B::test(aenum, anon_struct const&, anon_union const***)
+PASS: gdb.cp/meth-typedefs.exp: break 'B::test(aenum, anon_struct const&, anon_union const***)'
+PASS: gdb.cp/meth-typedefs.exp: list B::test(anon_enum, astruct const&, aunion const***)
+PASS: gdb.cp/meth-typedefs.exp: list 'B::test(anon_enum, astruct const&, aunion const***)'
+PASS: gdb.cp/meth-typedefs.exp: break B::test(anon_enum, astruct const&, aunion const***)
+PASS: gdb.cp/meth-typedefs.exp: break 'B::test(anon_enum, astruct const&, aunion const***)'
+PASS: gdb.cp/meth-typedefs.exp: list B::test(anon_enum, astruct const&, anon_union const***)
+PASS: gdb.cp/meth-typedefs.exp: list 'B::test(anon_enum, astruct const&, anon_union const***)'
+PASS: gdb.cp/meth-typedefs.exp: break B::test(anon_enum, astruct const&, anon_union const***)
+PASS: gdb.cp/meth-typedefs.exp: break 'B::test(anon_enum, astruct const&, anon_union const***)'
+PASS: gdb.cp/meth-typedefs.exp: list B::test(anon_enum, anon_struct const&, aunion const***)
+PASS: gdb.cp/meth-typedefs.exp: list 'B::test(anon_enum, anon_struct const&, aunion const***)'
+PASS: gdb.cp/meth-typedefs.exp: break B::test(anon_enum, anon_struct const&, aunion const***)
+PASS: gdb.cp/meth-typedefs.exp: break 'B::test(anon_enum, anon_struct const&, aunion const***)'
+PASS: gdb.cp/meth-typedefs.exp: list B::test(anon_enum, anon_struct const&, anon_union const***)
+PASS: gdb.cp/meth-typedefs.exp: list 'B::test(anon_enum, anon_struct const&, anon_union const***)'
+PASS: gdb.cp/meth-typedefs.exp: break B::test(anon_enum, anon_struct const&, anon_union const***)
+PASS: gdb.cp/meth-typedefs.exp: break 'B::test(anon_enum, anon_struct const&, anon_union const***)'
+PASS: gdb.cp/meth-typedefs.exp: list test(aenum, astruct const&, aunion const***)
+PASS: gdb.cp/meth-typedefs.exp: list 'test(aenum, astruct const&, aunion const***)'
+PASS: gdb.cp/meth-typedefs.exp: break test(aenum, astruct const&, aunion const***)
+PASS: gdb.cp/meth-typedefs.exp: break 'test(aenum, astruct const&, aunion const***)'
+PASS: gdb.cp/meth-typedefs.exp: list test(aenum, astruct const&, anon_union const***)
+PASS: gdb.cp/meth-typedefs.exp: list 'test(aenum, astruct const&, anon_union const***)'
+PASS: gdb.cp/meth-typedefs.exp: break test(aenum, astruct const&, anon_union const***)
+PASS: gdb.cp/meth-typedefs.exp: break 'test(aenum, astruct const&, anon_union const***)'
+PASS: gdb.cp/meth-typedefs.exp: list test(aenum, anon_struct const&, aunion const***)
+PASS: gdb.cp/meth-typedefs.exp: list 'test(aenum, anon_struct const&, aunion const***)'
+PASS: gdb.cp/meth-typedefs.exp: break test(aenum, anon_struct const&, aunion const***)
+PASS: gdb.cp/meth-typedefs.exp: break 'test(aenum, anon_struct const&, aunion const***)'
+PASS: gdb.cp/meth-typedefs.exp: list test(aenum, anon_struct const&, anon_union const***)
+PASS: gdb.cp/meth-typedefs.exp: list 'test(aenum, anon_struct const&, anon_union const***)'
+PASS: gdb.cp/meth-typedefs.exp: break test(aenum, anon_struct const&, anon_union const***)
+PASS: gdb.cp/meth-typedefs.exp: break 'test(aenum, anon_struct const&, anon_union const***)'
+PASS: gdb.cp/meth-typedefs.exp: list test(anon_enum, astruct const&, aunion const***)
+PASS: gdb.cp/meth-typedefs.exp: list 'test(anon_enum, astruct const&, aunion const***)'
+PASS: gdb.cp/meth-typedefs.exp: break test(anon_enum, astruct const&, aunion const***)
+PASS: gdb.cp/meth-typedefs.exp: break 'test(anon_enum, astruct const&, aunion const***)'
+PASS: gdb.cp/meth-typedefs.exp: list test(anon_enum, astruct const&, anon_union const***)
+PASS: gdb.cp/meth-typedefs.exp: list 'test(anon_enum, astruct const&, anon_union const***)'
+PASS: gdb.cp/meth-typedefs.exp: break test(anon_enum, astruct const&, anon_union const***)
+PASS: gdb.cp/meth-typedefs.exp: break 'test(anon_enum, astruct const&, anon_union const***)'
+PASS: gdb.cp/meth-typedefs.exp: list test(anon_enum, anon_struct const&, aunion const***)
+PASS: gdb.cp/meth-typedefs.exp: list 'test(anon_enum, anon_struct const&, aunion const***)'
+PASS: gdb.cp/meth-typedefs.exp: break test(anon_enum, anon_struct const&, aunion const***)
+PASS: gdb.cp/meth-typedefs.exp: break 'test(anon_enum, anon_struct const&, aunion const***)'
+PASS: gdb.cp/meth-typedefs.exp: list test(anon_enum, anon_struct const&, anon_union const***)
+PASS: gdb.cp/meth-typedefs.exp: list 'test(anon_enum, anon_struct const&, anon_union const***)'
+PASS: gdb.cp/meth-typedefs.exp: break test(anon_enum, anon_struct const&, anon_union const***)
+PASS: gdb.cp/meth-typedefs.exp: break 'test(anon_enum, anon_struct const&, anon_union const***)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(fptr1*)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(fptr1*)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(fptr1*)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(fptr1*)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(void (**) (my_other_type))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(void (**) (my_other_type))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(void (**) (my_other_type))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(void (**) (my_other_type))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(void (**) (my_type))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(void (**) (my_type))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(void (**) (my_type))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(void (**) (my_type))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(void (**) (const char* const*))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(void (**) (const char* const*))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(void (**) (const char* const*))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(void (**) (const char* const*))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(fptr1*)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(fptr1*)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(fptr1*)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(fptr1*)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(void (**) (my_other_type))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(void (**) (my_other_type))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(void (**) (my_other_type))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(void (**) (my_other_type))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(void (**) (my_type))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(void (**) (my_type))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(void (**) (my_type))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(void (**) (my_type))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(void (**) (const char* const*))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(void (**) (const char* const*))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(void (**) (const char* const*))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(void (**) (const char* const*))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(fptr3)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(fptr3)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(fptr3)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(fptr3)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(void (*)(fptr2, my_other_type))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(void (*)(fptr2, my_other_type))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(void (*)(fptr2, my_other_type))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(void (*)(fptr2, my_other_type))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(void (*)(void (*)(fptr1, my_other_type_2), my_other_type))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(void (*)(void (*)(fptr1, my_other_type_2), my_other_type))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(void (*)(void (*)(fptr1, my_other_type_2), my_other_type))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(void (*)(void (*)(fptr1, my_other_type_2), my_other_type))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(void (*)(void (*)(void (*) (my_other_type), my_other_type_2), my_other_type))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(void (*)(void (*)(void (*) (my_other_type), my_other_type_2), my_other_type))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(void (*)(void (*)(void (*) (my_other_type), my_other_type_2), my_other_type))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(void (*)(void (*)(void (*) (my_other_type), my_other_type_2), my_other_type))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(void (*)(void (*)(void (*) (my_type), my_other_type_2), my_other_type))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(void (*)(void (*)(void (*) (my_type), my_other_type_2), my_other_type))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(void (*)(void (*)(void (*) (my_type), my_other_type_2), my_other_type))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(void (*)(void (*)(void (*) (my_type), my_other_type_2), my_other_type))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(void (*)(void (*)(void (*) (const char* const*), my_other_type_2), my_other_type))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(void (*)(void (*)(void (*) (const char* const*), my_other_type_2), my_other_type))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(void (*)(void (*)(void (*) (const char* const*), my_other_type_2), my_other_type))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(void (*)(void (*)(void (*) (const char* const*), my_other_type_2), my_other_type))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(void (*)(void (*)(fptr1, my_type_2), my_other_type))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(void (*)(void (*)(fptr1, my_type_2), my_other_type))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(void (*)(void (*)(fptr1, my_type_2), my_other_type))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(void (*)(void (*)(fptr1, my_type_2), my_other_type))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(void (*)(void (*)(void (*) (my_other_type), my_type_2), my_other_type))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(void (*)(void (*)(void (*) (my_other_type), my_type_2), my_other_type))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(void (*)(void (*)(void (*) (my_other_type), my_type_2), my_other_type))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(void (*)(void (*)(void (*) (my_other_type), my_type_2), my_other_type))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(void (*)(void (*)(void (*) (my_type), my_type_2), my_other_type))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(void (*)(void (*)(void (*) (my_type), my_type_2), my_other_type))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(void (*)(void (*)(void (*) (my_type), my_type_2), my_other_type))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(void (*)(void (*)(void (*) (my_type), my_type_2), my_other_type))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(void (*)(void (*)(void (*) (const char* const*), my_type_2), my_other_type))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(void (*)(void (*)(void (*) (const char* const*), my_type_2), my_other_type))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(void (*)(void (*)(void (*) (const char* const*), my_type_2), my_other_type))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(void (*)(void (*)(void (*) (const char* const*), my_type_2), my_other_type))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(void (*)(void (*)(fptr1, int), my_other_type))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(void (*)(void (*)(fptr1, int), my_other_type))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(void (*)(void (*)(fptr1, int), my_other_type))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(void (*)(void (*)(fptr1, int), my_other_type))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(void (*)(void (*)(void (*) (my_other_type), int), my_other_type))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(void (*)(void (*)(void (*) (my_other_type), int), my_other_type))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(void (*)(void (*)(void (*) (my_other_type), int), my_other_type))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(void (*)(void (*)(void (*) (my_other_type), int), my_other_type))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(void (*)(void (*)(void (*) (my_type), int), my_other_type))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(void (*)(void (*)(void (*) (my_type), int), my_other_type))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(void (*)(void (*)(void (*) (my_type), int), my_other_type))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(void (*)(void (*)(void (*) (my_type), int), my_other_type))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(void (*)(void (*)(void (*) (const char* const*), int), my_other_type))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(void (*)(void (*)(void (*) (const char* const*), int), my_other_type))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(void (*)(void (*)(void (*) (const char* const*), int), my_other_type))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(void (*)(void (*)(void (*) (const char* const*), int), my_other_type))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(void (*)(fptr2, my_type))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(void (*)(fptr2, my_type))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(void (*)(fptr2, my_type))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(void (*)(fptr2, my_type))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(void (*)(void (*)(fptr1, my_other_type_2), my_type))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(void (*)(void (*)(fptr1, my_other_type_2), my_type))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(void (*)(void (*)(fptr1, my_other_type_2), my_type))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(void (*)(void (*)(fptr1, my_other_type_2), my_type))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(void (*)(void (*)(void (*) (my_other_type), my_other_type_2), my_type))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(void (*)(void (*)(void (*) (my_other_type), my_other_type_2), my_type))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(void (*)(void (*)(void (*) (my_other_type), my_other_type_2), my_type))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(void (*)(void (*)(void (*) (my_other_type), my_other_type_2), my_type))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(void (*)(void (*)(void (*) (my_type), my_other_type_2), my_type))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(void (*)(void (*)(void (*) (my_type), my_other_type_2), my_type))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(void (*)(void (*)(void (*) (my_type), my_other_type_2), my_type))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(void (*)(void (*)(void (*) (my_type), my_other_type_2), my_type))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(void (*)(void (*)(void (*) (const char* const*), my_other_type_2), my_type))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(void (*)(void (*)(void (*) (const char* const*), my_other_type_2), my_type))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(void (*)(void (*)(void (*) (const char* const*), my_other_type_2), my_type))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(void (*)(void (*)(void (*) (const char* const*), my_other_type_2), my_type))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(void (*)(void (*)(fptr1, my_type_2), my_type))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(void (*)(void (*)(fptr1, my_type_2), my_type))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(void (*)(void (*)(fptr1, my_type_2), my_type))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(void (*)(void (*)(fptr1, my_type_2), my_type))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(void (*)(void (*)(void (*) (my_other_type), my_type_2), my_type))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(void (*)(void (*)(void (*) (my_other_type), my_type_2), my_type))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(void (*)(void (*)(void (*) (my_other_type), my_type_2), my_type))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(void (*)(void (*)(void (*) (my_other_type), my_type_2), my_type))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(void (*)(void (*)(void (*) (my_type), my_type_2), my_type))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(void (*)(void (*)(void (*) (my_type), my_type_2), my_type))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(void (*)(void (*)(void (*) (my_type), my_type_2), my_type))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(void (*)(void (*)(void (*) (my_type), my_type_2), my_type))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(void (*)(void (*)(void (*) (const char* const*), my_type_2), my_type))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(void (*)(void (*)(void (*) (const char* const*), my_type_2), my_type))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(void (*)(void (*)(void (*) (const char* const*), my_type_2), my_type))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(void (*)(void (*)(void (*) (const char* const*), my_type_2), my_type))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(void (*)(void (*)(fptr1, int), my_type))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(void (*)(void (*)(fptr1, int), my_type))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(void (*)(void (*)(fptr1, int), my_type))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(void (*)(void (*)(fptr1, int), my_type))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(void (*)(void (*)(void (*) (my_other_type), int), my_type))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(void (*)(void (*)(void (*) (my_other_type), int), my_type))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(void (*)(void (*)(void (*) (my_other_type), int), my_type))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(void (*)(void (*)(void (*) (my_other_type), int), my_type))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(void (*)(void (*)(void (*) (my_type), int), my_type))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(void (*)(void (*)(void (*) (my_type), int), my_type))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(void (*)(void (*)(void (*) (my_type), int), my_type))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(void (*)(void (*)(void (*) (my_type), int), my_type))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(void (*)(void (*)(void (*) (const char* const*), int), my_type))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(void (*)(void (*)(void (*) (const char* const*), int), my_type))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(void (*)(void (*)(void (*) (const char* const*), int), my_type))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(void (*)(void (*)(void (*) (const char* const*), int), my_type))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(void (*)(fptr2, const char* const*))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(void (*)(fptr2, const char* const*))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(void (*)(fptr2, const char* const*))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(void (*)(fptr2, const char* const*))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(void (*)(void (*)(fptr1, my_other_type_2), const char* const*))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(void (*)(void (*)(fptr1, my_other_type_2), const char* const*))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(void (*)(void (*)(fptr1, my_other_type_2), const char* const*))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(void (*)(void (*)(fptr1, my_other_type_2), const char* const*))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(void (*)(void (*)(void (*) (my_other_type), my_other_type_2), const char* const*))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(void (*)(void (*)(void (*) (my_other_type), my_other_type_2), const char* const*))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(void (*)(void (*)(void (*) (my_other_type), my_other_type_2), const char* const*))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(void (*)(void (*)(void (*) (my_other_type), my_other_type_2), const char* const*))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(void (*)(void (*)(void (*) (my_type), my_other_type_2), const char* const*))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(void (*)(void (*)(void (*) (my_type), my_other_type_2), const char* const*))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(void (*)(void (*)(void (*) (my_type), my_other_type_2), const char* const*))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(void (*)(void (*)(void (*) (my_type), my_other_type_2), const char* const*))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(void (*)(void (*)(void (*) (const char* const*), my_other_type_2), const char* const*))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(void (*)(void (*)(void (*) (const char* const*), my_other_type_2), const char* const*))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(void (*)(void (*)(void (*) (const char* const*), my_other_type_2), const char* const*))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(void (*)(void (*)(void (*) (const char* const*), my_other_type_2), const char* const*))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(void (*)(void (*)(fptr1, my_type_2), const char* const*))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(void (*)(void (*)(fptr1, my_type_2), const char* const*))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(void (*)(void (*)(fptr1, my_type_2), const char* const*))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(void (*)(void (*)(fptr1, my_type_2), const char* const*))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(void (*)(void (*)(void (*) (my_other_type), my_type_2), const char* const*))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(void (*)(void (*)(void (*) (my_other_type), my_type_2), const char* const*))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(void (*)(void (*)(void (*) (my_other_type), my_type_2), const char* const*))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(void (*)(void (*)(void (*) (my_other_type), my_type_2), const char* const*))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(void (*)(void (*)(void (*) (my_type), my_type_2), const char* const*))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(void (*)(void (*)(void (*) (my_type), my_type_2), const char* const*))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(void (*)(void (*)(void (*) (my_type), my_type_2), const char* const*))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(void (*)(void (*)(void (*) (my_type), my_type_2), const char* const*))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(void (*)(void (*)(void (*) (const char* const*), my_type_2), const char* const*))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(void (*)(void (*)(void (*) (const char* const*), my_type_2), const char* const*))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(void (*)(void (*)(void (*) (const char* const*), my_type_2), const char* const*))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(void (*)(void (*)(void (*) (const char* const*), my_type_2), const char* const*))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(void (*)(void (*)(fptr1, int), const char* const*))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(void (*)(void (*)(fptr1, int), const char* const*))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(void (*)(void (*)(fptr1, int), const char* const*))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(void (*)(void (*)(fptr1, int), const char* const*))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(void (*)(void (*)(void (*) (my_other_type), int), const char* const*))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(void (*)(void (*)(void (*) (my_other_type), int), const char* const*))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(void (*)(void (*)(void (*) (my_other_type), int), const char* const*))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(void (*)(void (*)(void (*) (my_other_type), int), const char* const*))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(void (*)(void (*)(void (*) (my_type), int), const char* const*))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(void (*)(void (*)(void (*) (my_type), int), const char* const*))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(void (*)(void (*)(void (*) (my_type), int), const char* const*))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(void (*)(void (*)(void (*) (my_type), int), const char* const*))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(void (*)(void (*)(void (*) (const char* const*), int), const char* const*))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(void (*)(void (*)(void (*) (const char* const*), int), const char* const*))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(void (*)(void (*)(void (*) (const char* const*), int), const char* const*))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(void (*)(void (*)(void (*) (const char* const*), int), const char* const*))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(fptr3)
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(fptr3)'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(fptr3)
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(fptr3)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(void (*)(fptr2, my_other_type))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(void (*)(fptr2, my_other_type))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(void (*)(fptr2, my_other_type))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(void (*)(fptr2, my_other_type))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(void (*)(void (*)(fptr1, my_other_type_2), my_other_type))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(void (*)(void (*)(fptr1, my_other_type_2), my_other_type))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(void (*)(void (*)(fptr1, my_other_type_2), my_other_type))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(void (*)(void (*)(fptr1, my_other_type_2), my_other_type))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(void (*)(void (*)(void (*) (my_other_type), my_other_type_2), my_other_type))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(void (*)(void (*)(void (*) (my_other_type), my_other_type_2), my_other_type))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(void (*)(void (*)(void (*) (my_other_type), my_other_type_2), my_other_type))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(void (*)(void (*)(void (*) (my_other_type), my_other_type_2), my_other_type))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(void (*)(void (*)(void (*) (my_type), my_other_type_2), my_other_type))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(void (*)(void (*)(void (*) (my_type), my_other_type_2), my_other_type))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(void (*)(void (*)(void (*) (my_type), my_other_type_2), my_other_type))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(void (*)(void (*)(void (*) (my_type), my_other_type_2), my_other_type))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(void (*)(void (*)(void (*) (const char* const*), my_other_type_2), my_other_type))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(void (*)(void (*)(void (*) (const char* const*), my_other_type_2), my_other_type))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(void (*)(void (*)(void (*) (const char* const*), my_other_type_2), my_other_type))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(void (*)(void (*)(void (*) (const char* const*), my_other_type_2), my_other_type))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(void (*)(void (*)(fptr1, my_type_2), my_other_type))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(void (*)(void (*)(fptr1, my_type_2), my_other_type))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(void (*)(void (*)(fptr1, my_type_2), my_other_type))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(void (*)(void (*)(fptr1, my_type_2), my_other_type))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(void (*)(void (*)(void (*) (my_other_type), my_type_2), my_other_type))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(void (*)(void (*)(void (*) (my_other_type), my_type_2), my_other_type))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(void (*)(void (*)(void (*) (my_other_type), my_type_2), my_other_type))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(void (*)(void (*)(void (*) (my_other_type), my_type_2), my_other_type))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(void (*)(void (*)(void (*) (my_type), my_type_2), my_other_type))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(void (*)(void (*)(void (*) (my_type), my_type_2), my_other_type))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(void (*)(void (*)(void (*) (my_type), my_type_2), my_other_type))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(void (*)(void (*)(void (*) (my_type), my_type_2), my_other_type))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(void (*)(void (*)(void (*) (const char* const*), my_type_2), my_other_type))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(void (*)(void (*)(void (*) (const char* const*), my_type_2), my_other_type))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(void (*)(void (*)(void (*) (const char* const*), my_type_2), my_other_type))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(void (*)(void (*)(void (*) (const char* const*), my_type_2), my_other_type))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(void (*)(void (*)(fptr1, int), my_other_type))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(void (*)(void (*)(fptr1, int), my_other_type))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(void (*)(void (*)(fptr1, int), my_other_type))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(void (*)(void (*)(fptr1, int), my_other_type))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(void (*)(void (*)(void (*) (my_other_type), int), my_other_type))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(void (*)(void (*)(void (*) (my_other_type), int), my_other_type))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(void (*)(void (*)(void (*) (my_other_type), int), my_other_type))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(void (*)(void (*)(void (*) (my_other_type), int), my_other_type))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(void (*)(void (*)(void (*) (my_type), int), my_other_type))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(void (*)(void (*)(void (*) (my_type), int), my_other_type))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(void (*)(void (*)(void (*) (my_type), int), my_other_type))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(void (*)(void (*)(void (*) (my_type), int), my_other_type))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(void (*)(void (*)(void (*) (const char* const*), int), my_other_type))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(void (*)(void (*)(void (*) (const char* const*), int), my_other_type))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(void (*)(void (*)(void (*) (const char* const*), int), my_other_type))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(void (*)(void (*)(void (*) (const char* const*), int), my_other_type))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(void (*)(fptr2, my_type))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(void (*)(fptr2, my_type))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(void (*)(fptr2, my_type))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(void (*)(fptr2, my_type))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(void (*)(void (*)(fptr1, my_other_type_2), my_type))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(void (*)(void (*)(fptr1, my_other_type_2), my_type))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(void (*)(void (*)(fptr1, my_other_type_2), my_type))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(void (*)(void (*)(fptr1, my_other_type_2), my_type))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(void (*)(void (*)(void (*) (my_other_type), my_other_type_2), my_type))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(void (*)(void (*)(void (*) (my_other_type), my_other_type_2), my_type))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(void (*)(void (*)(void (*) (my_other_type), my_other_type_2), my_type))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(void (*)(void (*)(void (*) (my_other_type), my_other_type_2), my_type))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(void (*)(void (*)(void (*) (my_type), my_other_type_2), my_type))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(void (*)(void (*)(void (*) (my_type), my_other_type_2), my_type))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(void (*)(void (*)(void (*) (my_type), my_other_type_2), my_type))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(void (*)(void (*)(void (*) (my_type), my_other_type_2), my_type))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(void (*)(void (*)(void (*) (const char* const*), my_other_type_2), my_type))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(void (*)(void (*)(void (*) (const char* const*), my_other_type_2), my_type))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(void (*)(void (*)(void (*) (const char* const*), my_other_type_2), my_type))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(void (*)(void (*)(void (*) (const char* const*), my_other_type_2), my_type))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(void (*)(void (*)(fptr1, my_type_2), my_type))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(void (*)(void (*)(fptr1, my_type_2), my_type))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(void (*)(void (*)(fptr1, my_type_2), my_type))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(void (*)(void (*)(fptr1, my_type_2), my_type))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(void (*)(void (*)(void (*) (my_other_type), my_type_2), my_type))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(void (*)(void (*)(void (*) (my_other_type), my_type_2), my_type))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(void (*)(void (*)(void (*) (my_other_type), my_type_2), my_type))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(void (*)(void (*)(void (*) (my_other_type), my_type_2), my_type))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(void (*)(void (*)(void (*) (my_type), my_type_2), my_type))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(void (*)(void (*)(void (*) (my_type), my_type_2), my_type))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(void (*)(void (*)(void (*) (my_type), my_type_2), my_type))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(void (*)(void (*)(void (*) (my_type), my_type_2), my_type))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(void (*)(void (*)(void (*) (const char* const*), my_type_2), my_type))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(void (*)(void (*)(void (*) (const char* const*), my_type_2), my_type))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(void (*)(void (*)(void (*) (const char* const*), my_type_2), my_type))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(void (*)(void (*)(void (*) (const char* const*), my_type_2), my_type))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(void (*)(void (*)(fptr1, int), my_type))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(void (*)(void (*)(fptr1, int), my_type))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(void (*)(void (*)(fptr1, int), my_type))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(void (*)(void (*)(fptr1, int), my_type))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(void (*)(void (*)(void (*) (my_other_type), int), my_type))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(void (*)(void (*)(void (*) (my_other_type), int), my_type))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(void (*)(void (*)(void (*) (my_other_type), int), my_type))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(void (*)(void (*)(void (*) (my_other_type), int), my_type))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(void (*)(void (*)(void (*) (my_type), int), my_type))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(void (*)(void (*)(void (*) (my_type), int), my_type))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(void (*)(void (*)(void (*) (my_type), int), my_type))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(void (*)(void (*)(void (*) (my_type), int), my_type))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(void (*)(void (*)(void (*) (const char* const*), int), my_type))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(void (*)(void (*)(void (*) (const char* const*), int), my_type))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(void (*)(void (*)(void (*) (const char* const*), int), my_type))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(void (*)(void (*)(void (*) (const char* const*), int), my_type))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(void (*)(fptr2, const char* const*))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(void (*)(fptr2, const char* const*))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(void (*)(fptr2, const char* const*))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(void (*)(fptr2, const char* const*))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(void (*)(void (*)(fptr1, my_other_type_2), const char* const*))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(void (*)(void (*)(fptr1, my_other_type_2), const char* const*))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(void (*)(void (*)(fptr1, my_other_type_2), const char* const*))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(void (*)(void (*)(fptr1, my_other_type_2), const char* const*))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(void (*)(void (*)(void (*) (my_other_type), my_other_type_2), const char* const*))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(void (*)(void (*)(void (*) (my_other_type), my_other_type_2), const char* const*))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(void (*)(void (*)(void (*) (my_other_type), my_other_type_2), const char* const*))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(void (*)(void (*)(void (*) (my_other_type), my_other_type_2), const char* const*))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(void (*)(void (*)(void (*) (my_type), my_other_type_2), const char* const*))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(void (*)(void (*)(void (*) (my_type), my_other_type_2), const char* const*))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(void (*)(void (*)(void (*) (my_type), my_other_type_2), const char* const*))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(void (*)(void (*)(void (*) (my_type), my_other_type_2), const char* const*))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(void (*)(void (*)(void (*) (const char* const*), my_other_type_2), const char* const*))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(void (*)(void (*)(void (*) (const char* const*), my_other_type_2), const char* const*))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(void (*)(void (*)(void (*) (const char* const*), my_other_type_2), const char* const*))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(void (*)(void (*)(void (*) (const char* const*), my_other_type_2), const char* const*))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(void (*)(void (*)(fptr1, my_type_2), const char* const*))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(void (*)(void (*)(fptr1, my_type_2), const char* const*))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(void (*)(void (*)(fptr1, my_type_2), const char* const*))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(void (*)(void (*)(fptr1, my_type_2), const char* const*))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(void (*)(void (*)(void (*) (my_other_type), my_type_2), const char* const*))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(void (*)(void (*)(void (*) (my_other_type), my_type_2), const char* const*))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(void (*)(void (*)(void (*) (my_other_type), my_type_2), const char* const*))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(void (*)(void (*)(void (*) (my_other_type), my_type_2), const char* const*))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(void (*)(void (*)(void (*) (my_type), my_type_2), const char* const*))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(void (*)(void (*)(void (*) (my_type), my_type_2), const char* const*))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(void (*)(void (*)(void (*) (my_type), my_type_2), const char* const*))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(void (*)(void (*)(void (*) (my_type), my_type_2), const char* const*))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(void (*)(void (*)(void (*) (const char* const*), my_type_2), const char* const*))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(void (*)(void (*)(void (*) (const char* const*), my_type_2), const char* const*))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(void (*)(void (*)(void (*) (const char* const*), my_type_2), const char* const*))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(void (*)(void (*)(void (*) (const char* const*), my_type_2), const char* const*))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(void (*)(void (*)(fptr1, int), const char* const*))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(void (*)(void (*)(fptr1, int), const char* const*))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(void (*)(void (*)(fptr1, int), const char* const*))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(void (*)(void (*)(fptr1, int), const char* const*))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(void (*)(void (*)(void (*) (my_other_type), int), const char* const*))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(void (*)(void (*)(void (*) (my_other_type), int), const char* const*))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(void (*)(void (*)(void (*) (my_other_type), int), const char* const*))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(void (*)(void (*)(void (*) (my_other_type), int), const char* const*))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(void (*)(void (*)(void (*) (my_type), int), const char* const*))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(void (*)(void (*)(void (*) (my_type), int), const char* const*))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(void (*)(void (*)(void (*) (my_type), int), const char* const*))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(void (*)(void (*)(void (*) (my_type), int), const char* const*))'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(void (*)(void (*)(void (*) (const char* const*), int), const char* const*))
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(void (*)(void (*)(void (*) (const char* const*), int), const char* const*))'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(void (*)(void (*)(void (*) (const char* const*), int), const char* const*))
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(void (*)(void (*)(void (*) (const char* const*), int), const char* const*))'
+PASS: gdb.cp/meth-typedefs.exp: list test(my_other_type)
+PASS: gdb.cp/meth-typedefs.exp: list 'test(my_other_type)'
+PASS: gdb.cp/meth-typedefs.exp: break test(my_other_type)
+PASS: gdb.cp/meth-typedefs.exp: break 'test(my_other_type)'
+PASS: gdb.cp/meth-typedefs.exp: list test<my_other_type, my_other_type_2>(my_other_type, my_other_type_2)
+PASS: gdb.cp/meth-typedefs.exp: list 'test<my_other_type, my_other_type_2>(my_other_type, my_other_type_2)'
+PASS: gdb.cp/meth-typedefs.exp: break test<my_other_type, my_other_type_2>(my_other_type, my_other_type_2)
+PASS: gdb.cp/meth-typedefs.exp: break 'test<my_other_type, my_other_type_2>(my_other_type, my_other_type_2)'
+PASS: gdb.cp/meth-typedefs.exp: list test<my_other_type, my_other_type_2>(my_other_type, my_type_2)
+PASS: gdb.cp/meth-typedefs.exp: list 'test<my_other_type, my_other_type_2>(my_other_type, my_type_2)'
+PASS: gdb.cp/meth-typedefs.exp: break test<my_other_type, my_other_type_2>(my_other_type, my_type_2)
+PASS: gdb.cp/meth-typedefs.exp: break 'test<my_other_type, my_other_type_2>(my_other_type, my_type_2)'
+PASS: gdb.cp/meth-typedefs.exp: list test<my_other_type, my_other_type_2>(my_other_type, int)
+PASS: gdb.cp/meth-typedefs.exp: list 'test<my_other_type, my_other_type_2>(my_other_type, int)'
+PASS: gdb.cp/meth-typedefs.exp: break test<my_other_type, my_other_type_2>(my_other_type, int)
+PASS: gdb.cp/meth-typedefs.exp: break 'test<my_other_type, my_other_type_2>(my_other_type, int)'
+PASS: gdb.cp/meth-typedefs.exp: list test(my_type)
+PASS: gdb.cp/meth-typedefs.exp: list 'test(my_type)'
+PASS: gdb.cp/meth-typedefs.exp: break test(my_type)
+PASS: gdb.cp/meth-typedefs.exp: break 'test(my_type)'
+PASS: gdb.cp/meth-typedefs.exp: list test<my_other_type, my_other_type_2>(my_type, my_other_type_2)
+PASS: gdb.cp/meth-typedefs.exp: list 'test<my_other_type, my_other_type_2>(my_type, my_other_type_2)'
+PASS: gdb.cp/meth-typedefs.exp: break test<my_other_type, my_other_type_2>(my_type, my_other_type_2)
+PASS: gdb.cp/meth-typedefs.exp: break 'test<my_other_type, my_other_type_2>(my_type, my_other_type_2)'
+PASS: gdb.cp/meth-typedefs.exp: list test<my_other_type, my_other_type_2>(my_type, my_type_2)
+PASS: gdb.cp/meth-typedefs.exp: list 'test<my_other_type, my_other_type_2>(my_type, my_type_2)'
+PASS: gdb.cp/meth-typedefs.exp: break test<my_other_type, my_other_type_2>(my_type, my_type_2)
+PASS: gdb.cp/meth-typedefs.exp: break 'test<my_other_type, my_other_type_2>(my_type, my_type_2)'
+PASS: gdb.cp/meth-typedefs.exp: list test<my_other_type, my_other_type_2>(my_type, int)
+PASS: gdb.cp/meth-typedefs.exp: list 'test<my_other_type, my_other_type_2>(my_type, int)'
+PASS: gdb.cp/meth-typedefs.exp: break test<my_other_type, my_other_type_2>(my_type, int)
+PASS: gdb.cp/meth-typedefs.exp: break 'test<my_other_type, my_other_type_2>(my_type, int)'
+PASS: gdb.cp/meth-typedefs.exp: list test(const char* const*)
+PASS: gdb.cp/meth-typedefs.exp: list 'test(const char* const*)'
+PASS: gdb.cp/meth-typedefs.exp: break test(const char* const*)
+PASS: gdb.cp/meth-typedefs.exp: break 'test(const char* const*)'
+PASS: gdb.cp/meth-typedefs.exp: list test<my_other_type, my_other_type_2>(const char* const*, my_other_type_2)
+PASS: gdb.cp/meth-typedefs.exp: list 'test<my_other_type, my_other_type_2>(const char* const*, my_other_type_2)'
+PASS: gdb.cp/meth-typedefs.exp: break test<my_other_type, my_other_type_2>(const char* const*, my_other_type_2)
+PASS: gdb.cp/meth-typedefs.exp: break 'test<my_other_type, my_other_type_2>(const char* const*, my_other_type_2)'
+PASS: gdb.cp/meth-typedefs.exp: list test<my_other_type, my_other_type_2>(const char* const*, my_type_2)
+PASS: gdb.cp/meth-typedefs.exp: list 'test<my_other_type, my_other_type_2>(const char* const*, my_type_2)'
+PASS: gdb.cp/meth-typedefs.exp: break test<my_other_type, my_other_type_2>(const char* const*, my_type_2)
+PASS: gdb.cp/meth-typedefs.exp: break 'test<my_other_type, my_other_type_2>(const char* const*, my_type_2)'
+PASS: gdb.cp/meth-typedefs.exp: list test<my_other_type, my_other_type_2>(const char* const*, int)
+PASS: gdb.cp/meth-typedefs.exp: list 'test<my_other_type, my_other_type_2>(const char* const*, int)'
+PASS: gdb.cp/meth-typedefs.exp: break test<my_other_type, my_other_type_2>(const char* const*, int)
+PASS: gdb.cp/meth-typedefs.exp: break 'test<my_other_type, my_other_type_2>(const char* const*, int)'
+PASS: gdb.cp/meth-typedefs.exp: list B::test(my_other_type)
+PASS: gdb.cp/meth-typedefs.exp: list 'B::test(my_other_type)'
+PASS: gdb.cp/meth-typedefs.exp: break B::test(my_other_type)
+PASS: gdb.cp/meth-typedefs.exp: break 'B::test(my_other_type)'
+PASS: gdb.cp/meth-typedefs.exp: list B::test<my_other_type, my_other_type_2>(my_other_type, my_other_type_2)
+PASS: gdb.cp/meth-typedefs.exp: list 'B::test<my_other_type, my_other_type_2>(my_other_type, my_other_type_2)'
+PASS: gdb.cp/meth-typedefs.exp: break B::test<my_other_type, my_other_type_2>(my_other_type, my_other_type_2)
+PASS: gdb.cp/meth-typedefs.exp: break 'B::test<my_other_type, my_other_type_2>(my_other_type, my_other_type_2)'
+PASS: gdb.cp/meth-typedefs.exp: list B::test<my_other_type, my_other_type_2>(my_other_type, my_type_2)
+PASS: gdb.cp/meth-typedefs.exp: list 'B::test<my_other_type, my_other_type_2>(my_other_type, my_type_2)'
+PASS: gdb.cp/meth-typedefs.exp: break B::test<my_other_type, my_other_type_2>(my_other_type, my_type_2)
+PASS: gdb.cp/meth-typedefs.exp: break 'B::test<my_other_type, my_other_type_2>(my_other_type, my_type_2)'
+PASS: gdb.cp/meth-typedefs.exp: list B::test<my_other_type, my_other_type_2>(my_other_type, int)
+PASS: gdb.cp/meth-typedefs.exp: list 'B::test<my_other_type, my_other_type_2>(my_other_type, int)'
+PASS: gdb.cp/meth-typedefs.exp: break B::test<my_other_type, my_other_type_2>(my_other_type, int)
+PASS: gdb.cp/meth-typedefs.exp: break 'B::test<my_other_type, my_other_type_2>(my_other_type, int)'
+PASS: gdb.cp/meth-typedefs.exp: list B::test(my_type)
+PASS: gdb.cp/meth-typedefs.exp: list 'B::test(my_type)'
+PASS: gdb.cp/meth-typedefs.exp: break B::test(my_type)
+PASS: gdb.cp/meth-typedefs.exp: break 'B::test(my_type)'
+PASS: gdb.cp/meth-typedefs.exp: list B::test<my_other_type, my_other_type_2>(my_type, my_other_type_2)
+PASS: gdb.cp/meth-typedefs.exp: list 'B::test<my_other_type, my_other_type_2>(my_type, my_other_type_2)'
+PASS: gdb.cp/meth-typedefs.exp: break B::test<my_other_type, my_other_type_2>(my_type, my_other_type_2)
+PASS: gdb.cp/meth-typedefs.exp: break 'B::test<my_other_type, my_other_type_2>(my_type, my_other_type_2)'
+PASS: gdb.cp/meth-typedefs.exp: list B::test<my_other_type, my_other_type_2>(my_type, my_type_2)
+PASS: gdb.cp/meth-typedefs.exp: list 'B::test<my_other_type, my_other_type_2>(my_type, my_type_2)'
+PASS: gdb.cp/meth-typedefs.exp: break B::test<my_other_type, my_other_type_2>(my_type, my_type_2)
+PASS: gdb.cp/meth-typedefs.exp: break 'B::test<my_other_type, my_other_type_2>(my_type, my_type_2)'
+PASS: gdb.cp/meth-typedefs.exp: list B::test<my_other_type, my_other_type_2>(my_type, int)
+PASS: gdb.cp/meth-typedefs.exp: list 'B::test<my_other_type, my_other_type_2>(my_type, int)'
+PASS: gdb.cp/meth-typedefs.exp: break B::test<my_other_type, my_other_type_2>(my_type, int)
+PASS: gdb.cp/meth-typedefs.exp: break 'B::test<my_other_type, my_other_type_2>(my_type, int)'
+PASS: gdb.cp/meth-typedefs.exp: list B::test(const char* const*)
+PASS: gdb.cp/meth-typedefs.exp: list 'B::test(const char* const*)'
+PASS: gdb.cp/meth-typedefs.exp: break B::test(const char* const*)
+PASS: gdb.cp/meth-typedefs.exp: break 'B::test(const char* const*)'
+PASS: gdb.cp/meth-typedefs.exp: list B::test<my_other_type, my_other_type_2>(const char* const*, my_other_type_2)
+PASS: gdb.cp/meth-typedefs.exp: list 'B::test<my_other_type, my_other_type_2>(const char* const*, my_other_type_2)'
+PASS: gdb.cp/meth-typedefs.exp: break B::test<my_other_type, my_other_type_2>(const char* const*, my_other_type_2)
+PASS: gdb.cp/meth-typedefs.exp: break 'B::test<my_other_type, my_other_type_2>(const char* const*, my_other_type_2)'
+PASS: gdb.cp/meth-typedefs.exp: list B::test<my_other_type, my_other_type_2>(const char* const*, my_type_2)
+PASS: gdb.cp/meth-typedefs.exp: list 'B::test<my_other_type, my_other_type_2>(const char* const*, my_type_2)'
+PASS: gdb.cp/meth-typedefs.exp: break B::test<my_other_type, my_other_type_2>(const char* const*, my_type_2)
+PASS: gdb.cp/meth-typedefs.exp: break 'B::test<my_other_type, my_other_type_2>(const char* const*, my_type_2)'
+PASS: gdb.cp/meth-typedefs.exp: list B::test<my_other_type, my_other_type_2>(const char* const*, int)
+PASS: gdb.cp/meth-typedefs.exp: list 'B::test<my_other_type, my_other_type_2>(const char* const*, int)'
+PASS: gdb.cp/meth-typedefs.exp: break B::test<my_other_type, my_other_type_2>(const char* const*, int)
+PASS: gdb.cp/meth-typedefs.exp: break 'B::test<my_other_type, my_other_type_2>(const char* const*, int)'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(CORE_ADDR (*) [10])
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(CORE_ADDR (*) [10])'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(CORE_ADDR (*) [10])
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(CORE_ADDR (*) [10])'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::foo(unsigned long (*) [10])
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::foo(unsigned long (*) [10])'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::foo(unsigned long (*) [10])
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::foo(unsigned long (*) [10])'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(CORE_ADDR (*) [10])
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(CORE_ADDR (*) [10])'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(CORE_ADDR (*) [10])
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(CORE_ADDR (*) [10])'
+PASS: gdb.cp/meth-typedefs.exp: list A::FOO::test(unsigned long (*) [10])
+PASS: gdb.cp/meth-typedefs.exp: list 'A::FOO::test(unsigned long (*) [10])'
+PASS: gdb.cp/meth-typedefs.exp: break A::FOO::test(unsigned long (*) [10])
+PASS: gdb.cp/meth-typedefs.exp: break 'A::FOO::test(unsigned long (*) [10])'
+PASS: gdb.cp/meth-typedefs.exp: list test(_BAR_&)
+PASS: gdb.cp/meth-typedefs.exp: list 'test(_BAR_&)'
+PASS: gdb.cp/meth-typedefs.exp: break test(_BAR_&)
+PASS: gdb.cp/meth-typedefs.exp: break 'test(_BAR_&)'
+PASS: gdb.cp/meth-typedefs.exp: list test(a::b::BAR&)
+PASS: gdb.cp/meth-typedefs.exp: list 'test(a::b::BAR&)'
+PASS: gdb.cp/meth-typedefs.exp: break test(a::b::BAR&)
+PASS: gdb.cp/meth-typedefs.exp: break 'test(a::b::BAR&)'
+PASS: gdb.cp/meth-typedefs.exp: list test(a::b::c::d::bar&)
+PASS: gdb.cp/meth-typedefs.exp: list 'test(a::b::c::d::bar&)'
+PASS: gdb.cp/meth-typedefs.exp: break test(a::b::c::d::bar&)
+PASS: gdb.cp/meth-typedefs.exp: break 'test(a::b::c::d::bar&)'
+Running ./gdb.cp/minsym-fallback.exp ...
+PASS: gdb.cp/minsym-fallback.exp: set breakpoint pending off
+PASS: gdb.cp/minsym-fallback.exp: break C::f()
+PASS: gdb.cp/minsym-fallback.exp: break C::operator()()
+Running ./gdb.cp/misc.exp ...
+PASS: gdb.cp/misc.exp: deduced language is C++, before full symbols
+PASS: gdb.cp/misc.exp: deduced language is C++, after full symbols
+PASS: gdb.cp/misc.exp: print s.a for foo struct (known gcc 2.7.2 and earlier bug)
+PASS: gdb.cp/misc.exp: print as bool (setup)
+PASS: gdb.cp/misc.exp: print as bool (print 1 == 1)
+PASS: gdb.cp/misc.exp: print as bool (print 1 == 2)
+PASS: gdb.cp/misc.exp: print a bool var
+PASS: gdb.cp/misc.exp: set a bool var (setup)
+PASS: gdb.cp/misc.exp: set a bool var (print v_bool)
+PASS: gdb.cp/misc.exp: print a bool array
+PASS: gdb.cp/misc.exp: set a bool array elem (setup)
+PASS: gdb.cp/misc.exp: set a bool array elem (print v_bool_array)
+PASS: gdb.cp/misc.exp: print true
+PASS: gdb.cp/misc.exp: print false
+PASS: gdb.cp/misc.exp: 1 + true
+PASS: gdb.cp/misc.exp: 3 + false
+PASS: gdb.cp/misc.exp: 1 < 2 < 3
+PASS: gdb.cp/misc.exp: 2 < 1 > 4
+PASS: gdb.cp/misc.exp: (bool)43
+PASS: gdb.cp/misc.exp: (bool)0
+PASS: gdb.cp/misc.exp: (bool)17.93
+PASS: gdb.cp/misc.exp: (bool)0.0
+PASS: gdb.cp/misc.exp: (int)true
+PASS: gdb.cp/misc.exp: (int)false
+Running ./gdb.cp/m-static.exp ...
+PASS: gdb.cp/m-static.exp: continue to breakpoint: end of constructors
+PASS: gdb.cp/m-static.exp: simple object, static const int, accessing via 'class::method::variable
+PASS: gdb.cp/m-static.exp: simple object, static const bool
+PASS: gdb.cp/m-static.exp: simple object, static const int
+PASS: gdb.cp/m-static.exp: simple object, static long
+PASS: gdb.cp/m-static.exp: simple object, static enum
+FAIL: gdb.cp/m-static.exp: simple object instance, print quoted destructor
+FAIL: gdb.cp/m-static.exp: simple object class, ptype quoted destructor
+PASS: gdb.cp/m-static.exp: derived template object, base static const bool
+PASS: gdb.cp/m-static.exp: derived template object, base static const int
+PASS: gdb.cp/m-static.exp: derived template object, base static long
+PASS: gdb.cp/m-static.exp: derived template object, base static enum
+PASS: gdb.cp/m-static.exp: derived template object, static enum
+PASS: gdb.cp/m-static.exp: template object, static const bool
+PASS: gdb.cp/m-static.exp: template object, static const int
+PASS: gdb.cp/m-static.exp: template object, static long
+PASS: gdb.cp/m-static.exp: template object, static enum
+PASS: gdb.cp/m-static.exp: template object, static derived enum
+PASS: gdb.cp/m-static.exp: static const int initialized elsewhere
+PASS: gdb.cp/m-static.exp: static const int initialized nowhere
+PASS: gdb.cp/m-static.exp: static const int initialized in class definition
+PASS: gdb.cp/m-static.exp: static const float initialized in class definition
+PASS: gdb.cp/m-static.exp: info variable everywhere
+PASS: gdb.cp/m-static.exp: step
+PASS: gdb.cp/m-static.exp: print svar
+Running ./gdb.cp/namespace-enum.exp ...
+PASS: gdb.cp/namespace-enum.exp: print foo::B::B_B
+PASS: gdb.cp/namespace-enum.exp: print foo::B_B
+PASS: gdb.cp/namespace-enum.exp: print A_A
+Running ./gdb.cp/namespace.exp ...
+PASS: gdb.cp/namespace.exp: show lang
+PASS: gdb.cp/namespace.exp: up from marker1
+PASS: gdb.cp/namespace.exp: print 'AAA::c'
+PASS: gdb.cp/namespace.exp: print AAA::c
+PASS: gdb.cp/namespace.exp: print ina
+PASS: gdb.cp/namespace.exp: ptype ina
+PASS: gdb.cp/namespace.exp: info func xyzq
+PASS: gdb.cp/namespace.exp: print 'AAA::xyzq'('x')
+PASS: gdb.cp/namespace.exp: print AAA::xyzq('x')
+PASS: gdb.cp/namespace.exp: break AAA::xyzq
+PASS: gdb.cp/namespace.exp: break ::ensureOtherRefs
+PASS: gdb.cp/namespace.exp: print 'BBB::CCC::xyzq'('x')
+PASS: gdb.cp/namespace.exp: print BBB::CCC::xyzq('x')
+PASS: gdb.cp/namespace.exp: break BBB::CCC::xyzq
+PASS: gdb.cp/namespace.exp: break ::BBB::CCC::xyzq
+PASS: gdb.cp/namespace.exp: print 'BBB::Class::xyzq'
+PASS: gdb.cp/namespace.exp: print BBB::Class::xyzq
+PASS: gdb.cp/namespace.exp: break BBB::Class::xyzq
+PASS: gdb.cp/namespace.exp: whatis C::cOtherFileType
+PASS: gdb.cp/namespace.exp: whatis ::C::cOtherFileType
+PASS: gdb.cp/namespace.exp: whatis C::cOtherFileVar
+PASS: gdb.cp/namespace.exp: whatis ::C::cOtherFileVar
+PASS: gdb.cp/namespace.exp: print C::cOtherFileVar
+PASS: gdb.cp/namespace.exp: print ::C::cOtherFileVar
+PASS: gdb.cp/namespace.exp: whatis C::OtherFileClass::cOtherFileClassType
+PASS: gdb.cp/namespace.exp: whatis ::C::OtherFileClass::cOtherFileClassType
+PASS: gdb.cp/namespace.exp: print C::OtherFileClass::cOtherFileClassVar
+PASS: gdb.cp/namespace.exp: print ::cOtherFileClassVar
+PASS: gdb.cp/namespace.exp: print ::C::OtherFileClass::cOtherFileClassVar
+PASS: gdb.cp/namespace.exp: print c
+PASS: gdb.cp/namespace.exp: print cc
+PASS: gdb.cp/namespace.exp: print 'C::cc'
+PASS: gdb.cp/namespace.exp: print C::cc
+PASS: gdb.cp/namespace.exp: print cd
+PASS: gdb.cp/namespace.exp: print C::D::cd
+PASS: gdb.cp/namespace.exp: print 'E::cde'
+PASS: gdb.cp/namespace.exp: print E::cde
+PASS: gdb.cp/namespace.exp: print shadow
+PASS: gdb.cp/namespace.exp: print E::ce
+PASS: gdb.cp/namespace.exp: ptype C
+PASS: gdb.cp/namespace.exp: ptype E
+PASS: gdb.cp/namespace.exp: ptype CClass
+PASS: gdb.cp/namespace.exp: ptype CClass::NestedClass
+PASS: gdb.cp/namespace.exp: ptype NestedClass
+PASS: gdb.cp/namespace.exp: ptype ::C::CClass
+PASS: gdb.cp/namespace.exp: ptype ::C::CClass::NestedClass
+PASS: gdb.cp/namespace.exp: ptype ::C::NestedClass
+PASS: gdb.cp/namespace.exp: ptype C::CClass
+PASS: gdb.cp/namespace.exp: ptype C::CClass::NestedClass
+PASS: gdb.cp/namespace.exp: ptype C::NestedClass
+PASS: gdb.cp/namespace.exp: print cOtherFile
+PASS: gdb.cp/namespace.exp: ptype OtherFileClass
+PASS: gdb.cp/namespace.exp: ptype ::C::OtherFileClass
+PASS: gdb.cp/namespace.exp: ptype C::OtherFileClass
+PASS: gdb.cp/namespace.exp: ptype OtherFileClass typedefs
+PASS: gdb.cp/namespace.exp: ptype ::C::OtherFileClass typedefs
+PASS: gdb.cp/namespace.exp: print cX
+PASS: gdb.cp/namespace.exp: print 'F::cXf'
+PASS: gdb.cp/namespace.exp: print F::cXf
+PASS: gdb.cp/namespace.exp: print F::cXfX
+PASS: gdb.cp/namespace.exp: print X
+PASS: gdb.cp/namespace.exp: print 'G::Xg'
+PASS: gdb.cp/namespace.exp: print G::Xg
+PASS: gdb.cp/namespace.exp: print G::XgX
+PASS: gdb.cp/namespace.exp: print cXOtherFile
+PASS: gdb.cp/namespace.exp: print XOtherFile
+PASS: gdb.cp/namespace.exp: print AAA::ALPHA
+PASS: gdb.cp/namespace.exp: whatis ::C::CClass::NestedClass
+PASS: gdb.cp/namespace.exp: whatis ::C::CClass::NestedClass *
+Running ./gdb.cp/namespace-nested-import.exp ...
+PASS: gdb.cp/namespace-nested-import.exp: print C::x
+Running ./gdb.cp/nextoverthrow.exp ...
+UNSUPPORTED: gdb.cp/nextoverthrow.exp: nextoverthrow.exp could not find _Unwind_DebugHook
+Running ./gdb.cp/no-dmgl-verbose.exp ...
+PASS: gdb.cp/no-dmgl-verbose.exp: set breakpoint pending off
+PASS: gdb.cp/no-dmgl-verbose.exp: DMGL_VERBOSE-demangled f(std::string) is not defined
+Running ./gdb.cp/noparam.exp ...
+PASS: gdb.cp/noparam.exp: p C::m (int)
+Running ./gdb.cp/nsdecl.exp ...
+PASS: gdb.cp/nsdecl.exp: print fakex
+Running ./gdb.cp/nsimport.exp ...
+PASS: gdb.cp/nsimport.exp: print x
+PASS: gdb.cp/nsimport.exp: print xx
+PASS: gdb.cp/nsimport.exp: print xxx
+Running ./gdb.cp/nsnested.exp ...
+PASS: gdb.cp/nsnested.exp: print ab
+PASS: gdb.cp/nsnested.exp: continue to breakpoint: C::first
+PASS: gdb.cp/nsnested.exp: print ab
+PASS: gdb.cp/nsnested.exp: print C::D::ab
+PASS: gdb.cp/nsnested.exp: continue to breakpoint: C::D::second
+PASS: gdb.cp/nsnested.exp: print ab
+Running ./gdb.cp/nsnoimports.exp ...
+PASS: gdb.cp/nsnoimports.exp: print A::_a
+PASS: gdb.cp/nsnoimports.exp: print A::B::ab
+PASS: gdb.cp/nsnoimports.exp: print A::B::C::abc
+PASS: gdb.cp/nsnoimports.exp: print _a
+PASS: gdb.cp/nsnoimports.exp: print ab
+PASS: gdb.cp/nsnoimports.exp: print abc
+PASS: gdb.cp/nsnoimports.exp: continue to breakpoint: A::B::first
+PASS: gdb.cp/nsnoimports.exp: print A::_a
+PASS: gdb.cp/nsnoimports.exp: print A::B::ab
+PASS: gdb.cp/nsnoimports.exp: print A::B::C::abc
+PASS: gdb.cp/nsnoimports.exp: print _a
+PASS: gdb.cp/nsnoimports.exp: print ab
+PASS: gdb.cp/nsnoimports.exp: print C::abc
+PASS: gdb.cp/nsnoimports.exp: print abc
+PASS: gdb.cp/nsnoimports.exp: continue to breakpoint: A::B::C::second
+PASS: gdb.cp/nsnoimports.exp: print A::_a
+PASS: gdb.cp/nsnoimports.exp: print A::B::ab
+PASS: gdb.cp/nsnoimports.exp: print A::B::C::abc
+PASS: gdb.cp/nsnoimports.exp: print _a
+PASS: gdb.cp/nsnoimports.exp: print ab
+PASS: gdb.cp/nsnoimports.exp: print abc
+Running ./gdb.cp/nsrecurs.exp ...
+PASS: gdb.cp/nsrecurs.exp: print ax
+PASS: gdb.cp/nsrecurs.exp: print dx
+PASS: gdb.cp/nsrecurs.exp: print xx
+KFAIL: gdb.cp/nsrecurs.exp: ptype G::GF (PRMS: gdb/10541)
+KFAIL: gdb.cp/nsrecurs.exp: print G::GF::FE::ex (PRMS: gdb/10541)
+Running ./gdb.cp/nsstress.exp ...
+PASS: gdb.cp/nsstress.exp: print y
+Running ./gdb.cp/nsusing.exp ...
+PASS: gdb.cp/nsusing.exp: print _a
+PASS: gdb.cp/nsusing.exp: continue to breakpoint: marker3
+PASS: gdb.cp/nsusing.exp: Print _a without import
+PASS: gdb.cp/nsusing.exp: continue to breakpoint: marker1 stop
+PASS: gdb.cp/nsusing.exp: print _a in a nested scope
+PASS: gdb.cp/nsusing.exp: print cc
+PASS: gdb.cp/nsusing.exp: print B::_a
+PASS: gdb.cp/nsusing.exp: print _a in namespace alias scope
+PASS: gdb.cp/nsusing.exp: print x in namespace alias scope
+PASS: gdb.cp/nsusing.exp: Print _a without import
+PASS: gdb.cp/nsusing.exp: print dx
+PASS: gdb.cp/nsusing.exp: print efx
+PASS: gdb.cp/nsusing.exp: print ghx
+PASS: gdb.cp/nsusing.exp: print jx
+PASS: gdb.cp/nsusing.exp: continue to breakpoint: K::marker9
+PASS: gdb.cp/nsusing.exp: print jx
+PASS: gdb.cp/nsusing.exp: continue to breakpoint: marker10 stop
+PASS: gdb.cp/nsusing.exp: print x (from M::x)
+Running ./gdb.cp/operator.exp ...
+PASS: gdb.cp/operator.exp: global operator
+PASS: gdb.cp/operator.exp: global operator overload
+PASS: gdb.cp/operator.exp: ADL operator
+PASS: gdb.cp/operator.exp: ADL operator overload
+PASS: gdb.cp/operator.exp: Fully qualified explicit operator call
+PASS: gdb.cp/operator.exp: anonymous namespace operator
+PASS: gdb.cp/operator.exp: anonymous namespace operator overload
+PASS: gdb.cp/operator.exp: anonymous namespace operator overload float
+PASS: gdb.cp/operator.exp: imported operator
+PASS: gdb.cp/operator.exp: imported operator overload
+PASS: gdb.cp/operator.exp: imported operator overload float
+PASS: gdb.cp/operator.exp: member operator
+PASS: gdb.cp/operator.exp: member operator overload
+PASS: gdb.cp/operator.exp: namespace alias
+PASS: gdb.cp/operator.exp: imported declaration
+PASS: gdb.cp/operator.exp: p l == 1
+PASS: gdb.cp/operator.exp: p x[0]
+Running ./gdb.cp/oranking.exp ...
+PASS: gdb.cp/oranking.exp: continue to breakpoint: end of main
+KFAIL: gdb.cp/oranking.exp: p foo0(b) (PRMS: gdb/12096)
+PASS: gdb.cp/oranking.exp: p test1()
+PASS: gdb.cp/oranking.exp: p foo1(b)
+PASS: gdb.cp/oranking.exp: p test2()
+KFAIL: gdb.cp/oranking.exp: p foo2(b) (PRMS: gdb/12098)
+PASS: gdb.cp/oranking.exp: p test3()
+PASS: gdb.cp/oranking.exp: p foo3(1.0f)
+PASS: gdb.cp/oranking.exp: p test4()
+KFAIL: gdb.cp/oranking.exp: p foo4(&a) (PRMS: gdb/12098)
+PASS: gdb.cp/oranking.exp: p test5()
+PASS: gdb.cp/oranking.exp: p foo5(c)
+PASS: gdb.cp/oranking.exp: p test6()
+PASS: gdb.cp/oranking.exp: p foo6(bp)
+PASS: gdb.cp/oranking.exp: p test7()
+PASS: gdb.cp/oranking.exp: p foo7(cp)
+PASS: gdb.cp/oranking.exp: p test8()
+PASS: gdb.cp/oranking.exp: p foo8(co)
+PASS: gdb.cp/oranking.exp: p test9()
+PASS: gdb.cp/oranking.exp: p foo9(co)
+PASS: gdb.cp/oranking.exp: p test10()
+KFAIL: gdb.cp/oranking.exp: p foo10(amp) (PRMS: gdb/12098)
+PASS: gdb.cp/oranking.exp: p test101()
+KFAIL: gdb.cp/oranking.exp: p foo101("abc") (PRMS: gdb/12098)
+PASS: gdb.cp/oranking.exp: p test11()
+KFAIL: gdb.cp/oranking.exp: p foo11(d) (PRMS: gdb/12096)
+PASS: gdb.cp/oranking.exp: p test12()
+PASS: gdb.cp/oranking.exp: p foo12(1)
+PASS: gdb.cp/oranking.exp: p test13()
+KFAIL: gdb.cp/oranking.exp: p foo13(c) (PRMS: gdb/12098)
+PASS: gdb.cp/oranking.exp: p test14()
+KFAIL: gdb.cp/oranking.exp: p foo14(e) (PRMS: gdb/12096)
+Running ./gdb.cp/overload-const.exp ...
+PASS: gdb.cp/overload-const.exp: set language c++
+PASS: gdb.cp/overload-const.exp: setting breakpoint at myclass::func
+Running ./gdb.cp/overload.exp ...
+PASS: gdb.cp/overload.exp: up from marker1
+PASS: gdb.cp/overload.exp: print foo_instance1
+PASS: gdb.cp/overload.exp: ptype foo_instance1 (shorter match)
+PASS: gdb.cp/overload.exp: print foo_instance2
+PASS: gdb.cp/overload.exp: print foo_instance3
+PASS: gdb.cp/overload.exp: print call overloaded func 1 arg
+PASS: gdb.cp/overload.exp: re-selected 'main' frame after inferior call
+PASS: gdb.cp/overload.exp: print call overloaded func 2 args
+PASS: gdb.cp/overload.exp: print call overloaded func 3 args
+PASS: gdb.cp/overload.exp: print call overloaded func 4 args
+PASS: gdb.cp/overload.exp: print call overloaded func 5 args
+PASS: gdb.cp/overload.exp: print call overloaded func 6 args
+PASS: gdb.cp/overload.exp: print call overloaded func 7 args
+PASS: gdb.cp/overload.exp: print call overloaded func 8 args
+PASS: gdb.cp/overload.exp: print call overloaded func 9 args
+PASS: gdb.cp/overload.exp: print call overloaded func 10 args
+PASS: gdb.cp/overload.exp: print call overloaded func 11 args
+PASS: gdb.cp/overload.exp: print call overloaded func void arg
+PASS: gdb.cp/overload.exp: print call overloaded func char arg
+PASS: gdb.cp/overload.exp: print call overloaded func signed char arg
+PASS: gdb.cp/overload.exp: print call overloaded func unsigned char arg
+PASS: gdb.cp/overload.exp: print call overloaded func short arg
+PASS: gdb.cp/overload.exp: print call overloaded func unsigned short arg
+PASS: gdb.cp/overload.exp: print call overloaded func int arg
+PASS: gdb.cp/overload.exp: print call overloaded func unsigned int arg
+PASS: gdb.cp/overload.exp: print call overloaded func long arg
+PASS: gdb.cp/overload.exp: print call overloaded func unsigned long arg
+PASS: gdb.cp/overload.exp: print call overloaded func float arg
+PASS: gdb.cp/overload.exp: print call overloaded func double arg
+PASS: gdb.cp/overload.exp: print call overloaded func int\* arg
+PASS: gdb.cp/overload.exp: print call overloaded func char\* arg
+PASS: gdb.cp/overload.exp: print bar(a)
+PASS: gdb.cp/overload.exp: print bar(b)
+PASS: gdb.cp/overload.exp: print bar(c)
+PASS: gdb.cp/overload.exp: print bar(d)
+PASS: gdb.cp/overload.exp: list overloaded function with no args
+PASS: gdb.cp/overload.exp: list overloaded function with int arg
+PASS: gdb.cp/overload.exp: list overloaded function with function ptr args
+PASS: gdb.cp/overload.exp: list overloaded function with function ptr args - quotes around argument
+PASS: gdb.cp/overload.exp: list overload.cc:intToChar
+PASS: gdb.cp/overload.exp: list overload.cc:intToChar(char)
+PASS: gdb.cp/overload.exp: list overload.cc:'intToChar(char)'
+PASS: gdb.cp/overload.exp: list 'overload.cc:intToChar(char)'
+PASS: gdb.cp/overload.exp: list 'overload.cc':intToChar(char)
+PASS: gdb.cp/overload.exp: list 'overload.cc':'intToChar(char)'
+PASS: gdb.cp/overload.exp: list overload.cc:foo::overloadfnarg(int)
+PASS: gdb.cp/overload.exp: list overload.cc:'foo::overloadfnarg(int)'
+PASS: gdb.cp/overload.exp: print overloadNamespace(1)
+PASS: gdb.cp/overload.exp: print overloadNamespace('a')
+PASS: gdb.cp/overload.exp: print overloadNamespace(dummyInstance)
+PASS: gdb.cp/overload.exp: print K::staticoverload ()
+PASS: gdb.cp/overload.exp: print K::staticoverload (2)
+PASS: gdb.cp/overload.exp: print K::staticoverload (2, 3)
+PASS: gdb.cp/overload.exp: print N::nsoverload ()
+PASS: gdb.cp/overload.exp: print N::nsoverload (2)
+PASS: gdb.cp/overload.exp: print N::nsoverload (2, 3)
+PASS: gdb.cp/overload.exp: print overloadNamespace(1) in XXX
+PASS: gdb.cp/overload.exp: print overloadNamespace('a') in XXX
+PASS: gdb.cp/overload.exp: print overloadNamespace(dummyInstance) in XXX
+PASS: gdb.cp/overload.exp: print intToChar(1)
+PASS: gdb.cp/overload.exp: print foo::overload1arg
+PASS: gdb.cp/overload.exp: print foo::overload1arg(char***)
+PASS: gdb.cp/overload.exp: print foo::overload1arg(void)
+PASS: gdb.cp/overload.exp: print foo::overload1arg(char)
+PASS: gdb.cp/overload.exp: print foo::overload1arg(signed char)
+PASS: gdb.cp/overload.exp: print foo::overload1arg(unsigned char)
+PASS: gdb.cp/overload.exp: print foo::overload1arg(short)
+PASS: gdb.cp/overload.exp: print foo::overload1arg(unsigned short)
+PASS: gdb.cp/overload.exp: print foo::overload1arg(int)
+PASS: gdb.cp/overload.exp: print foo::overload1arg(unsigned int)
+PASS: gdb.cp/overload.exp: print foo::overload1arg(long)
+PASS: gdb.cp/overload.exp: print foo::overload1arg(unsigned long)
+PASS: gdb.cp/overload.exp: print foo::overload1arg(float)
+PASS: gdb.cp/overload.exp: print foo::overload1arg(double)
+Running ./gdb.cp/ovldbreak.exp ...
+PASS: gdb.cp/ovldbreak.exp: detect void
+PASS: gdb.cp/ovldbreak.exp: detect char
+PASS: gdb.cp/ovldbreak.exp: detect signed_char
+PASS: gdb.cp/ovldbreak.exp: detect unsigned_char
+PASS: gdb.cp/ovldbreak.exp: detect short_int
+PASS: gdb.cp/ovldbreak.exp: detect unsigned_short_int
+PASS: gdb.cp/ovldbreak.exp: detect int
+PASS: gdb.cp/ovldbreak.exp: detect unsigned_int
+PASS: gdb.cp/ovldbreak.exp: detect long_int
+PASS: gdb.cp/ovldbreak.exp: detect unsigned_long_int
+PASS: gdb.cp/ovldbreak.exp: detect float
+PASS: gdb.cp/ovldbreak.exp: detect double
+PASS: gdb.cp/ovldbreak.exp: set multiple-symbols ask
+PASS: gdb.cp/ovldbreak.exp: bp menu for foo::overload1arg choice 2
+PASS: gdb.cp/ovldbreak.exp: set bp 2 on foo::overload1arg 2 line 107
+PASS: gdb.cp/ovldbreak.exp: bp menu for foo::overload1arg choice 3
+PASS: gdb.cp/ovldbreak.exp: set bp 3 on foo::overload1arg 3 line 110
+PASS: gdb.cp/ovldbreak.exp: bp menu for foo::overload1arg choice 4
+PASS: gdb.cp/ovldbreak.exp: set bp 4 on foo::overload1arg 4 line 140
+PASS: gdb.cp/ovldbreak.exp: bp menu for foo::overload1arg choice 5
+PASS: gdb.cp/ovldbreak.exp: set bp 5 on foo::overload1arg 5 line 137
+PASS: gdb.cp/ovldbreak.exp: bp menu for foo::overload1arg choice 6
+PASS: gdb.cp/ovldbreak.exp: set bp 6 on foo::overload1arg 6 line 125
+PASS: gdb.cp/ovldbreak.exp: bp menu for foo::overload1arg choice 7
+PASS: gdb.cp/ovldbreak.exp: set bp 7 on foo::overload1arg 7 line 131
+PASS: gdb.cp/ovldbreak.exp: bp menu for foo::overload1arg choice 8
+PASS: gdb.cp/ovldbreak.exp: set bp 8 on foo::overload1arg 8 line 119
+PASS: gdb.cp/ovldbreak.exp: bp menu for foo::overload1arg choice 9
+PASS: gdb.cp/ovldbreak.exp: set bp 9 on foo::overload1arg 9 line 113
+PASS: gdb.cp/ovldbreak.exp: bp menu for foo::overload1arg choice 10
+PASS: gdb.cp/ovldbreak.exp: set bp 10 on foo::overload1arg 10 line 116
+PASS: gdb.cp/ovldbreak.exp: bp menu for foo::overload1arg choice 11
+PASS: gdb.cp/ovldbreak.exp: set bp 11 on foo::overload1arg 11 line 128
+PASS: gdb.cp/ovldbreak.exp: bp menu for foo::overload1arg choice 12
+PASS: gdb.cp/ovldbreak.exp: set bp 12 on foo::overload1arg 12 line 134
+PASS: gdb.cp/ovldbreak.exp: bp menu for foo::overload1arg choice 13
+PASS: gdb.cp/ovldbreak.exp: set bp 13 on foo::overload1arg 13 line 122
+PASS: gdb.cp/ovldbreak.exp: breakpoint info (after setting one-by-one)
+PASS: gdb.cp/ovldbreak.exp: bp menu for foo::overload1arg choice cancel
+PASS: gdb.cp/ovldbreak.exp: set bp on overload1arg canceled
+PASS: gdb.cp/ovldbreak.exp: breakpoint info (after cancel)
+PASS: gdb.cp/ovldbreak.exp: delete all breakpoints
+PASS: gdb.cp/ovldbreak.exp: breakpoint info (after delete)
+PASS: gdb.cp/ovldbreak.exp: bp menu for foo::overload1arg choice all
+PASS: gdb.cp/ovldbreak.exp: set bp on overload1arg all
+PASS: gdb.cp/ovldbreak.exp: breakpoint info (after setting on all)
+PASS: gdb.cp/ovldbreak.exp: continue to bp overloaded : void
+PASS: gdb.cp/ovldbreak.exp: continue to bp overloaded : char
+PASS: gdb.cp/ovldbreak.exp: continue to bp overloaded : signed_char
+PASS: gdb.cp/ovldbreak.exp: continue to bp overloaded : unsigned_char
+PASS: gdb.cp/ovldbreak.exp: continue to bp overloaded : short_int
+PASS: gdb.cp/ovldbreak.exp: continue to bp overloaded : unsigned_short_int
+PASS: gdb.cp/ovldbreak.exp: continue to bp overloaded : int
+PASS: gdb.cp/ovldbreak.exp: continue to bp overloaded : unsigned_int
+PASS: gdb.cp/ovldbreak.exp: continue to bp overloaded : long_int
+PASS: gdb.cp/ovldbreak.exp: continue to bp overloaded : unsigned_long_int
+PASS: gdb.cp/ovldbreak.exp: continue to bp overloaded : float
+PASS: gdb.cp/ovldbreak.exp: continue to bp overloaded : double
+PASS: gdb.cp/ovldbreak.exp: set multiple-symbols cancel
+PASS: gdb.cp/ovldbreak.exp: break foo::foofunc
+PASS: gdb.cp/ovldbreak.exp: set multiple-symbols all
+PASS: gdb.cp/ovldbreak.exp: break foo::foofunc
+PASS: gdb.cp/ovldbreak.exp: continue until exit at finish program
+Running ./gdb.cp/ovsrch.exp ...
+PASS: gdb.cp/ovsrch.exp: break A::stop_here
+PASS: gdb.cp/ovsrch.exp: break 'A::stop_here'
+PASS: gdb.cp/ovsrch.exp: continue to breakpoint: stop_here
+PASS: gdb.cp/ovsrch.exp: break A::outer::foo (char*) const
+PASS: gdb.cp/ovsrch.exp: break 'A::outer::foo (char*) const'
+PASS: gdb.cp/ovsrch.exp: break A::outer::foo (char*) const if (a_param == 3)
+PASS: gdb.cp/ovsrch.exp: break 'A::outer::foo (char*) const' if (a_param == 3)
+PASS: gdb.cp/ovsrch.exp: break A::outer::foo (char*) const if (A::outer::func ())
+PASS: gdb.cp/ovsrch.exp: break 'A::outer::foo (char*) const' if (A::outer::func ())
+PASS: gdb.cp/ovsrch.exp: break A::outer::foo (void) const
+PASS: gdb.cp/ovsrch.exp: break 'A::outer::foo (void) const'
+PASS: gdb.cp/ovsrch.exp: break A::outer::foo (int) const
+PASS: gdb.cp/ovsrch.exp: break 'A::outer::foo (int) const'
+PASS: gdb.cp/ovsrch.exp: break A::outer::foo (int) const if (a_param == 3)
+PASS: gdb.cp/ovsrch.exp: break 'A::outer::foo (int) const' if (a_param == 3)
+PASS: gdb.cp/ovsrch.exp: break A::outer::foo (int) const if (A::outer::func ())
+PASS: gdb.cp/ovsrch.exp: break 'A::outer::foo (int) const' if (A::outer::func ())
+PASS: gdb.cp/ovsrch.exp: break A::outer::hibob if (a_param == 3)
+PASS: gdb.cp/ovsrch.exp: break A::B::stop_here_too
+PASS: gdb.cp/ovsrch.exp: break 'A::B::stop_here_too'
+PASS: gdb.cp/ovsrch.exp: continue to breakpoint: stop_here_too
+PASS: gdb.cp/ovsrch.exp: break A::B::inner::foo (char*) const
+PASS: gdb.cp/ovsrch.exp: break 'A::B::inner::foo (char*) const'
+PASS: gdb.cp/ovsrch.exp: break A::B::inner::foo (char*) const if (a_param == 3)
+PASS: gdb.cp/ovsrch.exp: break 'A::B::inner::foo (char*) const' if (a_param == 3)
+PASS: gdb.cp/ovsrch.exp: break A::B::inner::foo (char*) const if (A::outer::func ())
+PASS: gdb.cp/ovsrch.exp: break 'A::B::inner::foo (char*) const' if (A::outer::func ())
+PASS: gdb.cp/ovsrch.exp: break A::B::inner::foo (void) const
+PASS: gdb.cp/ovsrch.exp: break 'A::B::inner::foo (void) const'
+PASS: gdb.cp/ovsrch.exp: break A::B::inner::foo (int) const
+PASS: gdb.cp/ovsrch.exp: break 'A::B::inner::foo (int) const'
+PASS: gdb.cp/ovsrch.exp: break A::B::inner::foo (int) const if (a_param == 3)
+PASS: gdb.cp/ovsrch.exp: break 'A::B::inner::foo (int) const' if (a_param == 3)
+PASS: gdb.cp/ovsrch.exp: break A::B::inner::foo (int) const if (A::outer::func ())
+PASS: gdb.cp/ovsrch.exp: break 'A::B::inner::foo (int) const' if (A::outer::func ())
+PASS: gdb.cp/ovsrch.exp: break A::B::inner::hibob if (a_param == 3)
+Running ./gdb.cp/paren-type.exp ...
+PASS: gdb.cp/paren-type.exp: set breakpoint pending off
+PASS: gdb.cp/paren-type.exp: break C::f(long)
+PASS: gdb.cp/paren-type.exp: break C::f(short)
+Running ./gdb.cp/parse-lang.exp ...
+PASS: gdb.cp/parse-lang.exp: breakpoint hit
+Running ./gdb.cp/pass-by-ref.exp ...
+PASS: gdb.cp/pass-by-ref.exp: call function in obj
+PASS: gdb.cp/pass-by-ref.exp: call function in derived
+PASS: gdb.cp/pass-by-ref.exp: call function in container
+Running ./gdb.cp/pr-1023.exp ...
+PASS: gdb.cp/pr-1023.exp: break myClass::performBlocking
+PASS: gdb.cp/pr-1023.exp: break myClass::performUnblocking
+Running ./gdb.cp/pr10687.exp ...
+PASS: gdb.cp/pr10687.exp: continue to breakpoint: marker
+PASS: gdb.cp/pr10687.exp: p a
+Running ./gdb.cp/pr10728.exp ...
+PASS: gdb.cp/pr10728.exp: continue to breakpoint: marker 1
+PASS: gdb.cp/pr10728.exp: print x->y2 - x->y1
+Running ./gdb.cp/pr12028.exp ...
+PASS: gdb.cp/pr12028.exp: p D::foo(b)
+Running ./gdb.cp/pr-1210.exp ...
+PASS: gdb.cp/pr-1210.exp: step past initialization
+PASS: gdb.cp/pr-1210.exp: print *obj
+PASS: gdb.cp/pr-1210.exp: print obj->myB
+Running ./gdb.cp/pr-574.exp ...
+PASS: gdb.cp/pr-574.exp: continue to breakpoint: end of constructors
+PASS: gdb.cp/pr-574.exp: PR gdb/574
+Running ./gdb.cp/pr9067.exp ...
+PASS: gdb.cp/pr9067.exp: print b
+Running ./gdb.cp/pr9167.exp ...
+PASS: gdb.cp/pr9167.exp: continue to breakpoint: marker
+PASS: gdb.cp/pr9167.exp: p b
+Running ./gdb.cp/pr9631.exp ...
+PASS: gdb.cp/pr9631.exp: continue to breakpoint: after bar tender is initialized
+PASS: gdb.cp/pr9631.exp: print tender
+Running ./gdb.cp/printmethod.exp ...
+PASS: gdb.cp/printmethod.exp: continue to breakpoint: end of constructors
+PASS: gdb.cp/printmethod.exp: print virtual method.
+PASS: gdb.cp/printmethod.exp: print nonvirtual method.
+Running ./gdb.cp/psmang.exp ...
+PASS: gdb.cp/psmang.exp: break s::method1
+PASS: gdb.cp/psmang.exp: break s::method2
+Running ./gdb.cp/psymtab-parameter.exp ...
+PASS: gdb.cp/psymtab-parameter.exp: set language c++
+PASS: gdb.cp/psymtab-parameter.exp: maintenance info symtabs
+PASS: gdb.cp/psymtab-parameter.exp: complete p 'func<short>(
+Running ./gdb.cp/ptype-cv-cp.exp ...
+PASS: gdb.cp/ptype-cv-cp.exp: whatis v_my_int
+PASS: gdb.cp/ptype-cv-cp.exp: ptype v_my_int
+PASS: gdb.cp/ptype-cv-cp.exp: whatis v_const_my_int
+PASS: gdb.cp/ptype-cv-cp.exp: ptype v_const_my_int
+PASS: gdb.cp/ptype-cv-cp.exp: whatis v_volatile_my_int
+PASS: gdb.cp/ptype-cv-cp.exp: ptype v_volatile_my_int
+PASS: gdb.cp/ptype-cv-cp.exp: whatis v_const_volatile_my_int
+PASS: gdb.cp/ptype-cv-cp.exp: ptype v_const_volatile_my_int
+PASS: gdb.cp/ptype-cv-cp.exp: whatis v_volatile_const_my_int
+PASS: gdb.cp/ptype-cv-cp.exp: ptype v_volatile_const_my_int
+Running ./gdb.cp/ptype-flags.exp ...
+PASS: gdb.cp/ptype-flags.exp: basic test
+PASS: gdb.cp/ptype-flags.exp: no methods
+PASS: gdb.cp/ptype-flags.exp: no typedefs
+PASS: gdb.cp/ptype-flags.exp: no methods or typedefs
+PASS: gdb.cp/ptype-flags.exp: raw
+PASS: gdb.cp/ptype-flags.exp: raw no methods
+PASS: gdb.cp/ptype-flags.exp: raw no typedefs
+PASS: gdb.cp/ptype-flags.exp: raw no methods or typedefs
+PASS: gdb.cp/ptype-flags.exp: set print type methods off
+PASS: gdb.cp/ptype-flags.exp: basic test, default methods off
+PASS: gdb.cp/ptype-flags.exp: methods, default methods off
+PASS: gdb.cp/ptype-flags.exp: no typedefs, default methods off
+PASS: gdb.cp/ptype-flags.exp: methods, no typedefs, default methods off
+PASS: gdb.cp/ptype-flags.exp: set print type typedefs off
+PASS: gdb.cp/ptype-flags.exp: basic test, default methods+typedefs off
+PASS: gdb.cp/ptype-flags.exp: methods, default methods+typedefs off
+PASS: gdb.cp/ptype-flags.exp: typedefs, default methods+typedefs off
+PASS: gdb.cp/ptype-flags.exp: methods typedefs, default methods+typedefs off
+Running ./gdb.cp/punctuator.exp ...
+PASS: gdb.cp/punctuator.exp: set lang c++
+PASS: gdb.cp/punctuator.exp: print (0x5a5a bitand 0xaaaa) == (0x5a5a & 0xaaaa)
+PASS: gdb.cp/punctuator.exp: print (0x5a5a bitor 0xaaaa) == (0x5a5a | 0xaaaa)
+PASS: gdb.cp/punctuator.exp: print (0x5a5a xor 0xaaaa) == (0x5a5a ^ 0xaaaa)
+PASS: gdb.cp/punctuator.exp: print (0x5a5a and 0xaaaa) == (0x5a5a && 0xaaaa)
+PASS: gdb.cp/punctuator.exp: print (0x5a5a or 0xaaaa) == (0x5a5a || 0xaaaa)
+PASS: gdb.cp/punctuator.exp: print (not not 0xaaaa) == (!!0xaaaa)
+PASS: gdb.cp/punctuator.exp: print (compl 0xaaaa) == (~0xaaaa)
+PASS: gdb.cp/punctuator.exp: set $u 1
+PASS: gdb.cp/punctuator.exp: set $v 1
+PASS: gdb.cp/punctuator.exp: print ($u not_eq 0xaaaa) == ($v != 0xaaaa)
+PASS: gdb.cp/punctuator.exp: print ($u and_eq 0xaaaa) == ($v &= 0xaaaa)
+PASS: gdb.cp/punctuator.exp: set $u 2
+PASS: gdb.cp/punctuator.exp: set $v 2
+PASS: gdb.cp/punctuator.exp: print ($u or_eq 0xaaaa) == ($v |= 0xaaaa)
+PASS: gdb.cp/punctuator.exp: set $u 3
+PASS: gdb.cp/punctuator.exp: set $v 3
+PASS: gdb.cp/punctuator.exp: print ($u xor_eq 0xaaaa) == ($v ^= 0xaaaa)
+Running ./gdb.cp/readnow-language.exp ...
+PASS: gdb.cp/readnow-language.exp: show language
+Running ./gdb.cp/ref-params.exp ...
+PASS: gdb.cp/ref-params.exp: print value of a Child in main
+PASS: gdb.cp/ref-params.exp: print value of f1 on Child in main
+PASS: gdb.cp/ref-params.exp: print value of f2 on Child in main
+PASS: gdb.cp/ref-params.exp: print value of f1 on (Child&) in main
+PASS: gdb.cp/ref-params.exp: print value of f2 on (Child&) in main
+PASS: gdb.cp/ref-params.exp: print value of Child& in f2
+PASS: gdb.cp/ref-params.exp: print value of f1 on Child& in f2
+PASS: gdb.cp/ref-params.exp: print value of Parent& in f1
+PASS: gdb.cp/ref-params.exp: print f1(MQ)
+PASS: gdb.cp/ref-params.exp: print mf1(MQ)
+PASS: gdb.cp/ref-params.exp: print mf2(MQ)
+PASS: gdb.cp/ref-params.exp: print f1(MQR)
+PASS: gdb.cp/ref-params.exp: print mf1(MQR)
+PASS: gdb.cp/ref-params.exp: print mf2(MQR)
+Running ./gdb.cp/ref-types.exp ...
+PASS: gdb.cp/ref-types.exp: up from marker1 1
+PASS: gdb.cp/ref-types.exp: print value of s
+PASS: gdb.cp/ref-types.exp: ptype s
+PASS: gdb.cp/ref-types.exp: print value of ps
+PASS: gdb.cp/ref-types.exp: ptype ps
+PASS: gdb.cp/ref-types.exp: print value of as[0]
+PASS: gdb.cp/ref-types.exp: ptype as
+PASS: gdb.cp/ref-types.exp: print value of as[1]
+PASS: gdb.cp/ref-types.exp: print value of as[2]
+PASS: gdb.cp/ref-types.exp: print value of as[3]
+PASS: gdb.cp/ref-types.exp: print value of rs
+PASS: gdb.cp/ref-types.exp: ptype rs
+PASS: gdb.cp/ref-types.exp: print value of *rps
+PASS: gdb.cp/ref-types.exp: examine value at rps
+PASS: gdb.cp/ref-types.exp: ptype rps
+PASS: gdb.cp/ref-types.exp: print value of ras[0]
+PASS: gdb.cp/ref-types.exp: ptype ras
+PASS: gdb.cp/ref-types.exp: print value of ras[1]
+PASS: gdb.cp/ref-types.exp: print value of ras[2]
+PASS: gdb.cp/ref-types.exp: print value of ras[3]
+PASS: gdb.cp/ref-types.exp: up from f
+PASS: gdb.cp/ref-types.exp: print value of C
+PASS: gdb.cp/ref-types.exp: ptype C
+PASS: gdb.cp/ref-types.exp: print value of UC
+PASS: gdb.cp/ref-types.exp: ptype UC
+PASS: gdb.cp/ref-types.exp: print value of S
+PASS: gdb.cp/ref-types.exp: ptype S
+PASS: gdb.cp/ref-types.exp: print value of US
+PASS: gdb.cp/ref-types.exp: ptype US
+PASS: gdb.cp/ref-types.exp: print value of I
+PASS: gdb.cp/ref-types.exp: ptype I
+PASS: gdb.cp/ref-types.exp: print value of UI
+PASS: gdb.cp/ref-types.exp: ptype UI
+PASS: gdb.cp/ref-types.exp: print value of L
+PASS: gdb.cp/ref-types.exp: ptype L
+PASS: gdb.cp/ref-types.exp: print value of UL
+PASS: gdb.cp/ref-types.exp: ptype UL
+PASS: gdb.cp/ref-types.exp: print value of F
+PASS: gdb.cp/ref-types.exp: ptype F
+PASS: gdb.cp/ref-types.exp: print value of D
+PASS: gdb.cp/ref-types.exp: ptype D
+PASS: gdb.cp/ref-types.exp: ptype rC
+PASS: gdb.cp/ref-types.exp: ptype rUC
+PASS: gdb.cp/ref-types.exp: ptype rS
+PASS: gdb.cp/ref-types.exp: ptype rUS
+PASS: gdb.cp/ref-types.exp: ptype rI
+PASS: gdb.cp/ref-types.exp: ptype rUI
+PASS: gdb.cp/ref-types.exp: ptype rL
+PASS: gdb.cp/ref-types.exp: ptype rUL
+PASS: gdb.cp/ref-types.exp: ptype rF
+PASS: gdb.cp/ref-types.exp: ptype rD
+PASS: gdb.cp/ref-types.exp: print value of rC
+PASS: gdb.cp/ref-types.exp: print value of rUC
+PASS: gdb.cp/ref-types.exp: print value of rS
+PASS: gdb.cp/ref-types.exp: print value of rUS
+PASS: gdb.cp/ref-types.exp: print value of rI
+PASS: gdb.cp/ref-types.exp: print value of UI
+PASS: gdb.cp/ref-types.exp: print value of rL
+PASS: gdb.cp/ref-types.exp: print value of rUL
+PASS: gdb.cp/ref-types.exp: print value of rF
+PASS: gdb.cp/ref-types.exp: print value of rD
+Running ./gdb.cp/re-set-overloaded.exp ...
+PASS: gdb.cp/re-set-overloaded.exp: set breakpoint pending yes
+PASS: gdb.cp/re-set-overloaded.exp: break C::C
+PASS: gdb.cp/re-set-overloaded.exp: set variable $brk = $bpnum
+PASS: gdb.cp/re-set-overloaded.exp: start
+PASS: gdb.cp/re-set-overloaded.exp: breakpoint resolved
+Running ./gdb.cp/rtti.exp ...
+PASS: gdb.cp/rtti.exp: continue to breakpoint: end of constructors in main
+PASS: gdb.cp/rtti.exp: print *e1
+PASS: gdb.cp/rtti.exp: print *e2
+PASS: gdb.cp/rtti.exp: continue to breakpoint: end of constructors in func
+PASS: gdb.cp/rtti.exp: print *obj
+PASS: gdb.cp/rtti.exp: continue to breakpoint: end of constructors in func3
+PASS: gdb.cp/rtti.exp: print *obj3
+Running ./gdb.cp/shadow.exp ...
+PASS: gdb.cp/shadow.exp: continue to breakpoint: marker1
+PASS: gdb.cp/shadow.exp: Print class x shadowing global x
+PASS: gdb.cp/shadow.exp: continue to breakpoint: marker2
+PASS: gdb.cp/shadow.exp: Print local x shadowing class x
+PASS: gdb.cp/shadow.exp: continue to breakpoint: marker3
+PASS: gdb.cp/shadow.exp: Print inner scope x
+PASS: gdb.cp/shadow.exp: continue to breakpoint: marker4
+PASS: gdb.cp/shadow.exp: Print local x not namespace x
+PASS: gdb.cp/shadow.exp: continue to breakpoint: marker5
+PASS: gdb.cp/shadow.exp: Print imported namespace x
+Running ./gdb.cp/smartp.exp ...
+PASS: gdb.cp/smartp.exp: continue to breakpoint: end of main
+PASS: gdb.cp/smartp.exp: p mp->foo()
+PASS: gdb.cp/smartp.exp: p mtp->foo()
+PASS: gdb.cp/smartp.exp: p mt1.foo()
+PASS: gdb.cp/smartp.exp: p mt4p.a
+PASS: gdb.cp/smartp.exp: p mt4->a
+PASS: gdb.cp/smartp.exp: p sp1->foo()
+PASS: gdb.cp/smartp.exp: p sp2->foo()
+PASS: gdb.cp/smartp.exp: p sp3->foo(1)
+PASS: gdb.cp/smartp.exp: p sp3->foo('a')
+PASS: gdb.cp/smartp.exp: p sp4->a
+PASS: gdb.cp/smartp.exp: p sp4->b
+PASS: gdb.cp/smartp.exp: p mt4p->a
+PASS: gdb.cp/smartp.exp: p mt4p->b
+PASS: gdb.cp/smartp.exp: p mt4->fake
+PASS: gdb.cp/smartp.exp: p mt4->fake()
+PASS: gdb.cp/smartp.exp: p b->foo()
+PASS: gdb.cp/smartp.exp: p c->foo()
+PASS: gdb.cp/smartp.exp: p c->inta
+KFAIL: gdb.cp/smartp.exp: p c2->inta (PRMS: gdb/11606)
+Running ./gdb.cp/static-method.exp ...
+PASS: gdb.cp/static-method.exp: info addr A::func()
+PASS: gdb.cp/static-method.exp: list static-method.cc:xxx::(anonymous namespace)::func
+PASS: gdb.cp/static-method.exp: list 'static-method.cc:xxx::(anonymous namespace)::func'
+PASS: gdb.cp/static-method.exp: list 'static-method.cc':'xxx::(anonymous namespace)::func'
+PASS: gdb.cp/static-method.exp: list static-method.cc:'xxx::(anonymous namespace)::func'
+PASS: gdb.cp/static-method.exp: continue to xxx::(anonymous namespace)::func
+PASS: gdb.cp/static-method.exp: continue to 'xxx::(anonymous namespace)::func'
+PASS: gdb.cp/static-method.exp: list static-method.cc:xxx::(anonymous namespace)::A::func
+PASS: gdb.cp/static-method.exp: list 'static-method.cc:xxx::(anonymous namespace)::A::func'
+PASS: gdb.cp/static-method.exp: list 'static-method.cc':'xxx::(anonymous namespace)::A::func'
+PASS: gdb.cp/static-method.exp: list static-method.cc:'xxx::(anonymous namespace)::A::func'
+PASS: gdb.cp/static-method.exp: continue to xxx::(anonymous namespace)::A::func
+PASS: gdb.cp/static-method.exp: continue to 'xxx::(anonymous namespace)::A::func'
+Running ./gdb.cp/static-print-quit.exp ...
+PASS: gdb.cp/static-print-quit.exp: set width 80
+PASS: gdb.cp/static-print-quit.exp: set height 2
+PASS: gdb.cp/static-print-quit.exp: print c - <return>
+PASS: gdb.cp/static-print-quit.exp: print c - q <return>
+PASS: gdb.cp/static-print-quit.exp: print c - to quit
+PASS: gdb.cp/static-print-quit.exp: q
+PASS: gdb.cp/static-print-quit.exp: set pagination off
+PASS: gdb.cp/static-print-quit.exp: first print
+PASS: gdb.cp/static-print-quit.exp: second print
+Running ./gdb.cp/temargs.exp ...
+PASS: gdb.cp/temargs.exp: set first breakpoint for temargs
+PASS: gdb.cp/temargs.exp: set second breakpoint for temargs
+PASS: gdb.cp/temargs.exp: set third breakpoint for temargs
+PASS: gdb.cp/temargs.exp: set fourth breakpoint for temargs
+PASS: gdb.cp/temargs.exp: set fifth breakpoint for temargs
+PASS: gdb.cp/temargs.exp: set sixth breakpoint for temargs
+PASS: gdb.cp/temargs.exp: continue to breakpoint: continue to first breakpoint for temargs
+PASS: gdb.cp/temargs.exp: test type of T in base_m
+PASS: gdb.cp/temargs.exp: test value of I in base_m
+PASS: gdb.cp/temargs.exp: test value of P in base_m
+PASS: gdb.cp/temargs.exp: test value of MP in base_m
+PASS: gdb.cp/temargs.exp: continue to breakpoint: continue to second breakpoint for temargs
+PASS: gdb.cp/temargs.exp: test type of T in inner_m
+PASS: gdb.cp/temargs.exp: test value of I in inner_m
+PASS: gdb.cp/temargs.exp: test value of P in inner_m
+PASS: gdb.cp/temargs.exp: test value of MP in inner_m
+PASS: gdb.cp/temargs.exp: test type of Z in inner_m
+PASS: gdb.cp/temargs.exp: continue to breakpoint: continue to third breakpoint for temargs
+PASS: gdb.cp/temargs.exp: test type of T in func
+PASS: gdb.cp/temargs.exp: test value of I in func
+PASS: gdb.cp/temargs.exp: test value of P in func
+PASS: gdb.cp/temargs.exp: test value of MP in func
+PASS: gdb.cp/temargs.exp: continue to breakpoint: continue to fourth breakpoint for temargs
+PASS: gdb.cp/temargs.exp: test type of T in templ_m
+PASS: gdb.cp/temargs.exp: test value of I in templ_m
+PASS: gdb.cp/temargs.exp: test value of P in templ_m
+PASS: gdb.cp/temargs.exp: test value of MP in templ_m
+PASS: gdb.cp/temargs.exp: test type of Q in templ_m
+PASS: gdb.cp/temargs.exp: continue to breakpoint: continue to fifth breakpoint for temargs
+PASS: gdb.cp/temargs.exp: test type of F in k2_m
+XFAIL: gdb.cp/temargs.exp: test value of F in k2_m (PRMS gcc/49366)
+PASS: gdb.cp/temargs.exp: continue to breakpoint: continue to sixth breakpoint for temargs
+XFAIL: gdb.cp/temargs.exp: test type of F in k3_m (PRMS gcc/49546)
+XFAIL: gdb.cp/temargs.exp: test value of F in k3_m (PRMS gcc/49546)
+Running ./gdb.cp/templates.exp ...
+PASS: gdb.cp/templates.exp: set multiple-symbols ask
+KFAIL: gdb.cp/templates.exp: ptype T5<int> (PRMS: gdb/8218)
+KFAIL: gdb.cp/templates.exp: ptype T5<int> (PRMS: gdb/8218)
+PASS: gdb.cp/templates.exp: constructor breakpoint
+PASS: gdb.cp/templates.exp: destructor breakpoint
+PASS: gdb.cp/templates.exp: value method breakpoint
+PASS: gdb.cp/templates.exp: breakpoint on a line with no real code
+PASS: gdb.cp/templates.exp: print method of template typedef
+XFAIL: gdb.cp/templates.exp: print destructor of template typedef (PRMS gcc/51668)
+PASS: gdb.cp/templates.exp: verify GCC PR debug/51668
+PASS: gdb.cp/templates.exp: ptype empty
+PASS: gdb.cp/templates.exp: ptype arg
+PASS: gdb.cp/templates.exp: print t5i.value()
+PASS: gdb.cp/templates.exp: b 770
+PASS: gdb.cp/templates.exp: continue to line 770
+PASS: gdb.cp/templates.exp: print fint
+PASS: gdb.cp/templates.exp: print fvpchar
+PASS: gdb.cp/templates.exp: ptype Foo
+PASS: gdb.cp/templates.exp: ptype fint
+PASS: gdb.cp/templates.exp: ptype fchar
+KFAIL: gdb.cp/templates.exp: ptype fvpchar (PRMS: gdb/1512)
+PASS: gdb.cp/templates.exp: print Foo<volatile char *>::foo
+PASS: gdb.cp/templates.exp: print Foo<volatile char*>::foo
+PASS: gdb.cp/templates.exp: ptype Bar
+PASS: gdb.cp/templates.exp: ptype bint
+PASS: gdb.cp/templates.exp: ptype bint2
+PASS: gdb.cp/templates.exp: ptype Baz
+PASS: gdb.cp/templates.exp: ptype bazint
+PASS: gdb.cp/templates.exp: ptype bazint2
+PASS: gdb.cp/templates.exp: ptype Qux
+PASS: gdb.cp/templates.exp: ptype quxint
+PASS: gdb.cp/templates.exp: ptype Spec
+PASS: gdb.cp/templates.exp: ptype siip
+PASS: gdb.cp/templates.exp: ptype Garply<int>
+PASS: gdb.cp/templates.exp: ptype Garply<Garply<char> >
+PASS: gdb.cp/templates.exp: print Garply<Garply<char> >::garply
+PASS: gdb.cp/templates.exp: break Garply<Garply<char> >::garply
+Running ./gdb.cp/try_catch.exp ...
+PASS: gdb.cp/try_catch.exp: continue to breakpoint: marker 1-throw
+PASS: gdb.cp/try_catch.exp: continue to breakpoint: marker 1-catch
+PASS: gdb.cp/try_catch.exp: continue to breakpoint: marker 2-start
+PASS: gdb.cp/try_catch.exp: continue to breakpoint: marker 2-next
+PASS: gdb.cp/try_catch.exp: continue to breakpoint: marker 2-throw
+PASS: gdb.cp/try_catch.exp: continue to breakpoint: marker 2-catch
+PASS: gdb.cp/try_catch.exp: continue to breakpoint: marker 3-throw
+PASS: gdb.cp/try_catch.exp: continue to breakpoint: marker 3-catch
+Running ./gdb.cp/typedef-operator.exp ...
+PASS: gdb.cp/typedef-operator.exp: set language c++
+PASS: gdb.cp/typedef-operator.exp: test crash
+PASS: gdb.cp/typedef-operator.exp: test typedef
+Running ./gdb.cp/userdef.exp ...
+PASS: gdb.cp/userdef.exp: break marker1
+PASS: gdb.cp/userdef.exp: continue to marker1
+PASS: gdb.cp/userdef.exp: up from marker1
+PASS: gdb.cp/userdef.exp: print one + two
+PASS: gdb.cp/userdef.exp: re-selected 'main' frame after inferior call
+PASS: gdb.cp/userdef.exp: print one - two
+PASS: gdb.cp/userdef.exp: print one * two
+PASS: gdb.cp/userdef.exp: print one / two
+PASS: gdb.cp/userdef.exp: print one % two
+PASS: gdb.cp/userdef.exp: print one && two
+PASS: gdb.cp/userdef.exp: print one || two
+PASS: gdb.cp/userdef.exp: print one & two
+PASS: gdb.cp/userdef.exp: print one | two
+PASS: gdb.cp/userdef.exp: print one ^ two
+PASS: gdb.cp/userdef.exp: print one < two
+PASS: gdb.cp/userdef.exp: print one <= two
+PASS: gdb.cp/userdef.exp: print one > two
+PASS: gdb.cp/userdef.exp: print one >= two
+PASS: gdb.cp/userdef.exp: print one == two
+PASS: gdb.cp/userdef.exp: print one.operator== (two)
+PASS: gdb.cp/userdef.exp: print one != two
+PASS: gdb.cp/userdef.exp: print one << 31
+PASS: gdb.cp/userdef.exp: print one >> 31
+PASS: gdb.cp/userdef.exp: print !one
+PASS: gdb.cp/userdef.exp: print +one
+PASS: gdb.cp/userdef.exp: print ~one
+PASS: gdb.cp/userdef.exp: print -one
+PASS: gdb.cp/userdef.exp: print one++
+PASS: gdb.cp/userdef.exp: print ++one
+PASS: gdb.cp/userdef.exp: print one--
+PASS: gdb.cp/userdef.exp: print --one
+PASS: gdb.cp/userdef.exp: print one += 7
+PASS: gdb.cp/userdef.exp: print two = one
+PASS: gdb.cp/userdef.exp: break A2::operator+
+PASS: gdb.cp/userdef.exp: break A2::operator +
+PASS: gdb.cp/userdef.exp: print c
+PASS: gdb.cp/userdef.exp: print *c
+PASS: gdb.cp/userdef.exp: print &*c
+PASS: gdb.cp/userdef.exp: ptype &*c
+PASS: gdb.cp/userdef.exp: print operator== (mem1, mem2)
+PASS: gdb.cp/userdef.exp: print operator== (mem1, mem1)
+Running ./gdb.cp/using-crash.exp ...
+PASS: gdb.cp/using-crash.exp: reload file
+Running ./gdb.cp/virtbase.exp ...
+PASS: gdb.cp/virtbase.exp: continue to breakpoint: first breakpoint
+PASS: gdb.cp/virtbase.exp: print *this
+PASS: gdb.cp/virtbase.exp: print x in get_y
+PASS: gdb.cp/virtbase.exp: continue to breakpoint: second breakpoint
+PASS: gdb.cp/virtbase.exp: print x in get_z
+PASS: gdb.cp/virtbase.exp: continue to breakpoint: third breakpoint
+PASS: gdb.cp/virtbase.exp: print *(D *) e
+PASS: gdb.cp/virtbase.exp: set print object on
+PASS: gdb.cp/virtbase.exp: print/x b->mA
+PASS: gdb.cp/virtbase.exp: print rtti_data
+PASS: gdb.cp/virtbase.exp: print pointer to virtual base at non-zero offset of larger object
+PASS: gdb.cp/virtbase.exp: print same pointer from history value
+PASS: gdb.cp/virtbase.exp: print whole pointed-to object, starting from the virtual base pointer
+Running ./gdb.cp/virtfunc2.exp ...
+PASS: gdb.cp/virtfunc2.exp: continue to breakpoint: marker 1
+PASS: gdb.cp/virtfunc2.exp: print o.do_print()
+PASS: gdb.cp/virtfunc2.exp: print o.do_print3()
+PASS: gdb.cp/virtfunc2.exp: print o2.do_print()
+PASS: gdb.cp/virtfunc2.exp: print o2.do_print2()
+PASS: gdb.cp/virtfunc2.exp: print o2.do_print3()
+PASS: gdb.cp/virtfunc2.exp: print o
+Running ./gdb.cp/virtfunc.exp ...
+PASS: gdb.cp/virtfunc.exp: ptype VA
+PASS: gdb.cp/virtfunc.exp: ptype VB
+PASS: gdb.cp/virtfunc.exp: ptype V
+PASS: gdb.cp/virtfunc.exp: ptype A
+PASS: gdb.cp/virtfunc.exp: ptype B
+PASS: gdb.cp/virtfunc.exp: ptype C
+PASS: gdb.cp/virtfunc.exp: ptype AD
+PASS: gdb.cp/virtfunc.exp: ptype D
+PASS: gdb.cp/virtfunc.exp: ptype E
+PASS: gdb.cp/virtfunc.exp: ptype dd
+PASS: gdb.cp/virtfunc.exp: ptype ppd
+PASS: gdb.cp/virtfunc.exp: ptype pAd
+PASS: gdb.cp/virtfunc.exp: ptype a
+PASS: gdb.cp/virtfunc.exp: ptype b
+PASS: gdb.cp/virtfunc.exp: ptype c
+PASS: gdb.cp/virtfunc.exp: ptype d
+PASS: gdb.cp/virtfunc.exp: ptype e
+PASS: gdb.cp/virtfunc.exp: ptype v
+PASS: gdb.cp/virtfunc.exp: ptype vb
+PASS: gdb.cp/virtfunc.exp: ptype pAa
+PASS: gdb.cp/virtfunc.exp: ptype pAe
+PASS: gdb.cp/virtfunc.exp: ptype pBe
+PASS: gdb.cp/virtfunc.exp: ptype pDd
+PASS: gdb.cp/virtfunc.exp: ptype pDe
+PASS: gdb.cp/virtfunc.exp: ptype pVa
+PASS: gdb.cp/virtfunc.exp: ptype pVv
+PASS: gdb.cp/virtfunc.exp: ptype pVe
+PASS: gdb.cp/virtfunc.exp: ptype pVd
+PASS: gdb.cp/virtfunc.exp: ptype pADe
+PASS: gdb.cp/virtfunc.exp: ptype pEe
+PASS: gdb.cp/virtfunc.exp: ptype pVB
+PASS: gdb.cp/virtfunc.exp: info vtbl a
+PASS: gdb.cp/virtfunc.exp: info vtbl b
+PASS: gdb.cp/virtfunc.exp: info vtbl c
+PASS: gdb.cp/virtfunc.exp: info vtbl d
+PASS: gdb.cp/virtfunc.exp: info vtbl e
+PASS: gdb.cp/virtfunc.exp: info vtbl pEe
+PASS: gdb.cp/virtfunc.exp: info vtbl
+PASS: gdb.cp/virtfunc.exp: info vtbl va
+PASS: gdb.cp/virtfunc.exp: info vtbl all_count
+PASS: gdb.cp/virtfunc.exp: print pAe->f()
+PASS: gdb.cp/virtfunc.exp: print pAa->f()
+PASS: gdb.cp/virtfunc.exp: print pDe->vg()
+PASS: gdb.cp/virtfunc.exp: print pADe->vg()
+PASS: gdb.cp/virtfunc.exp: print pDd->vg()
+PASS: gdb.cp/virtfunc.exp: print pEe->vvb()
+PASS: gdb.cp/virtfunc.exp: print pVB->vvb()
+PASS: gdb.cp/virtfunc.exp: print pBe->vvb()
+PASS: gdb.cp/virtfunc.exp: print pDe->vvb()
+PASS: gdb.cp/virtfunc.exp: print pEe->vd()
+PASS: gdb.cp/virtfunc.exp: print pEe->fvb()
+KFAIL: gdb.cp/virtfunc.exp: print pEe->D::vg() (PRMS: gdb/1064)
+PASS: gdb.cp/virtfunc.exp: next to pAa->f call
+PASS: gdb.cp/virtfunc.exp: next to pDe->vg call
+PASS: gdb.cp/virtfunc.exp: step through thunk into E::vg
+Running ./gdb.disasm/am33.exp ...
+Running ./gdb.disasm/h8300s.exp ...
+Running ./gdb.disasm/hppa.exp ...
+Running ./gdb.disasm/mn10300.exp ...
+Running ./gdb.disasm/sh3.exp ...
+Running ./gdb.disasm/t01_mov.exp ...
+Running ./gdb.disasm/t02_mova.exp ...
+Running ./gdb.disasm/t03_add.exp ...
+Running ./gdb.disasm/t04_sub.exp ...
+Running ./gdb.disasm/t05_cmp.exp ...
+Running ./gdb.disasm/t06_ari2.exp ...
+Running ./gdb.disasm/t07_ari3.exp ...
+Running ./gdb.disasm/t08_or.exp ...
+Running ./gdb.disasm/t09_xor.exp ...
+Running ./gdb.disasm/t10_and.exp ...
+Running ./gdb.disasm/t11_logs.exp ...
+Running ./gdb.disasm/t12_bit.exp ...
+Running ./gdb.disasm/t13_otr.exp ...
+Running ./gdb.dwarf2/callframecfa.exp ...
+Running ./gdb.dwarf2/clztest.exp ...
+PASS: gdb.dwarf2/clztest.exp: set breakpoint at clztest.c:12
+PASS: gdb.dwarf2/clztest.exp: continue to breakpoint: continue to clztest.c:12
+PASS: gdb.dwarf2/clztest.exp: check value of g at clztest.c:12
+PASS: gdb.dwarf2/clztest.exp: check value of f at clztest.c:12
+PASS: gdb.dwarf2/clztest.exp: set breakpoint at clztest.c:22
+PASS: gdb.dwarf2/clztest.exp: continue to breakpoint: continue to clztest.c:22
+PASS: gdb.dwarf2/clztest.exp: check value of g at clztest.c:22
+PASS: gdb.dwarf2/clztest.exp: check value of f at clztest.c:22
+Running ./gdb.dwarf2/dup-psym.exp ...
+PASS: gdb.dwarf2/dup-psym.exp: info sources should contain only one reference to file1.txt
+Running ./gdb.dwarf2/dw2-ada-ffffffff.exp ...
+PASS: gdb.dwarf2/dw2-ada-ffffffff.exp: p sizeof (t)
+PASS: gdb.dwarf2/dw2-ada-ffffffff.exp: ptype t
+Running ./gdb.dwarf2/dw2-anon-mptr.exp ...
+PASS: gdb.dwarf2/dw2-anon-mptr.exp: set cp-abi gnu-v3
+PASS: gdb.dwarf2/dw2-anon-mptr.exp: show cp-abi
+PASS: gdb.dwarf2/dw2-anon-mptr.exp: ptype crash
+Running ./gdb.dwarf2/dw2-anonymous-func.exp ...
+PASS: gdb.dwarf2/dw2-anonymous-func.exp: list file1.txt
+Running ./gdb.dwarf2/dw2-bad-parameter-type.exp ...
+PASS: gdb.dwarf2/dw2-bad-parameter-type.exp: ptype f
+PASS: gdb.dwarf2/dw2-bad-parameter-type.exp: ptype f
+PASS: gdb.dwarf2/dw2-bad-parameter-type.exp: is alive
+Running ./gdb.dwarf2/dw2-basic.exp ...
+PASS: gdb.dwarf2/dw2-basic.exp: set listsize 1
+PASS: gdb.dwarf2/dw2-basic.exp: list func_cu1
+PASS: gdb.dwarf2/dw2-basic.exp: ptype func_cu1
+Running ./gdb.dwarf2/dw2-canonicalize-type.exp ...
+PASS: gdb.dwarf2/dw2-canonicalize-type.exp: ptype f
+Running ./gdb.dwarf2/dw2-case-insensitive.exp ...
+PASS: gdb.dwarf2/dw2-case-insensitive.exp: show case-sensitive
+PASS: gdb.dwarf2/dw2-case-insensitive.exp: regexp case-sensitive on
+PASS: gdb.dwarf2/dw2-case-insensitive.exp: set case-sensitive off
+PASS: gdb.dwarf2/dw2-case-insensitive.exp: regexp case-sensitive off
+PASS: gdb.dwarf2/dw2-case-insensitive.exp: p fuNC_lang
+PASS: gdb.dwarf2/dw2-case-insensitive.exp: p fuNC_symtab
+PASS: gdb.dwarf2/dw2-case-insensitive.exp: setting breakpoint at fuNC_lang
+PASS: gdb.dwarf2/dw2-case-insensitive.exp: setting breakpoint at fuNC_symtab
+Running ./gdb.dwarf2/dw2-common-block.exp ...
+gdb compile failed, default_target_compile: Can't find x86_64-cros-linux-gnu-gfortran.
+UNTESTED: gdb.dwarf2/dw2-common-block.exp: dw2-common-block.exp
+Running ./gdb.dwarf2/dw2-compdir-oldgcc.exp ...
+PASS: gdb.dwarf2/dw2-compdir-oldgcc.exp: list gcc42
+PASS: gdb.dwarf2/dw2-compdir-oldgcc.exp: info source gcc42
+PASS: gdb.dwarf2/dw2-compdir-oldgcc.exp: list gcc43
+PASS: gdb.dwarf2/dw2-compdir-oldgcc.exp: info source gcc43
+Running ./gdb.dwarf2/dw2-compressed.exp ...
+PASS: gdb.dwarf2/dw2-compressed.exp: set listsize 1
+PASS: gdb.dwarf2/dw2-compressed.exp: list func_cu1
+PASS: gdb.dwarf2/dw2-compressed.exp: ptype func_cu1
+Running ./gdb.dwarf2/dw2-const.exp ...
+PASS: gdb.dwarf2/dw2-const.exp: print twelve
+PASS: gdb.dwarf2/dw2-const.exp: print/x val8
+Running ./gdb.dwarf2/dw2-cp-infcall-ref-static.exp ...
+gdb compile failed, /usr/x86_64-pc-linux-gnu/x86_64-cros-linux-gnu/binutils-bin/2.22/ld.gold.real: internal error in output_address, at /var/tmp/portage/cross-x86_64-cros-linux-gnu/binutils-2.22-r20/work/binutils-2.22/gold/output.cc:3019
+collect2: error: ld returned 1 exit status
+UNTESTED: gdb.dwarf2/dw2-cp-infcall-ref-static.exp: dw2-cp-infcall-ref-static.exp
+Running ./gdb.dwarf2/dw2-cu-size.exp ...
+PASS: gdb.dwarf2/dw2-cu-size.exp: ptype noloc
+Running ./gdb.dwarf2/dw2-dir-file-name.exp ...
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: cd .../rdir
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_missing__file_basename: continue to breakpoint: compdir_missing__ldir_missing__file_basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_missing__file_basename: set filename-display absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_missing__file_basename: absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_missing__file_basename: set filename-display basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_missing__file_basename: basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_missing__file_basename: set filename-display relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_missing__file_basename: relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_missing__file_relative: continue to breakpoint: compdir_missing__ldir_missing__file_relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_missing__file_relative: set filename-display absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_missing__file_relative: absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_missing__file_relative: set filename-display basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_missing__file_relative: basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_missing__file_relative: set filename-display relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_missing__file_relative: relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_missing__file_absolute: continue to breakpoint: compdir_missing__ldir_missing__file_absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_missing__file_absolute: set filename-display absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_missing__file_absolute: absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_missing__file_absolute: set filename-display basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_missing__file_absolute: basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_missing__file_absolute: set filename-display relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_missing__file_absolute: relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_relative_file_basename: continue to breakpoint: compdir_missing__ldir_relative_file_basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_relative_file_basename: set filename-display absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_relative_file_basename: absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_relative_file_basename: set filename-display basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_relative_file_basename: basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_relative_file_basename: set filename-display relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_relative_file_basename: relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_relative_file_relative: continue to breakpoint: compdir_missing__ldir_relative_file_relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_relative_file_relative: set filename-display absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_relative_file_relative: absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_relative_file_relative: set filename-display basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_relative_file_relative: basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_relative_file_relative: set filename-display relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_relative_file_relative: relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_relative_file_absolute: continue to breakpoint: compdir_missing__ldir_relative_file_absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_relative_file_absolute: set filename-display absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_relative_file_absolute: absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_relative_file_absolute: set filename-display basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_relative_file_absolute: basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_relative_file_absolute: set filename-display relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_relative_file_absolute: relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_absolute_file_basename: continue to breakpoint: compdir_missing__ldir_absolute_file_basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_absolute_file_basename: set filename-display absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_absolute_file_basename: absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_absolute_file_basename: set filename-display basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_absolute_file_basename: basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_absolute_file_basename: set filename-display relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_absolute_file_basename: relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_absolute_file_relative: continue to breakpoint: compdir_missing__ldir_absolute_file_relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_absolute_file_relative: set filename-display absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_absolute_file_relative: absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_absolute_file_relative: set filename-display basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_absolute_file_relative: basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_absolute_file_relative: set filename-display relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_absolute_file_relative: relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_absolute_file_absolute_same: continue to breakpoint: compdir_missing__ldir_absolute_file_absolute_same
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_absolute_file_absolute_same: set filename-display absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_absolute_file_absolute_same: absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_absolute_file_absolute_same: set filename-display basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_absolute_file_absolute_same: basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_absolute_file_absolute_same: set filename-display relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_absolute_file_absolute_same: relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_absolute_file_absolute_different: continue to breakpoint: compdir_missing__ldir_absolute_file_absolute_different
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_absolute_file_absolute_different: set filename-display absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_absolute_file_absolute_different: absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_absolute_file_absolute_different: set filename-display basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_absolute_file_absolute_different: basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_absolute_file_absolute_different: set filename-display relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_missing__ldir_absolute_file_absolute_different: relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_missing__file_basename: continue to breakpoint: compdir_relative_ldir_missing__file_basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_missing__file_basename: set filename-display absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_missing__file_basename: absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_missing__file_basename: set filename-display basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_missing__file_basename: basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_missing__file_basename: set filename-display relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_missing__file_basename: relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_missing__file_relative: continue to breakpoint: compdir_relative_ldir_missing__file_relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_missing__file_relative: set filename-display absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_missing__file_relative: absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_missing__file_relative: set filename-display basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_missing__file_relative: basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_missing__file_relative: set filename-display relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_missing__file_relative: relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_missing__file_absolute: continue to breakpoint: compdir_relative_ldir_missing__file_absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_missing__file_absolute: set filename-display absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_missing__file_absolute: absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_missing__file_absolute: set filename-display basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_missing__file_absolute: basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_missing__file_absolute: set filename-display relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_missing__file_absolute: relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_relative_file_basename: continue to breakpoint: compdir_relative_ldir_relative_file_basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_relative_file_basename: set filename-display absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_relative_file_basename: absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_relative_file_basename: set filename-display basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_relative_file_basename: basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_relative_file_basename: set filename-display relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_relative_file_basename: relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_relative_file_relative: continue to breakpoint: compdir_relative_ldir_relative_file_relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_relative_file_relative: set filename-display absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_relative_file_relative: absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_relative_file_relative: set filename-display basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_relative_file_relative: basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_relative_file_relative: set filename-display relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_relative_file_relative: relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_relative_file_absolute: continue to breakpoint: compdir_relative_ldir_relative_file_absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_relative_file_absolute: set filename-display absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_relative_file_absolute: absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_relative_file_absolute: set filename-display basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_relative_file_absolute: basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_relative_file_absolute: set filename-display relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_relative_file_absolute: relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_absolute_file_basename: continue to breakpoint: compdir_relative_ldir_absolute_file_basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_absolute_file_basename: set filename-display absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_absolute_file_basename: absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_absolute_file_basename: set filename-display basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_absolute_file_basename: basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_absolute_file_basename: set filename-display relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_absolute_file_basename: relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_absolute_file_relative: continue to breakpoint: compdir_relative_ldir_absolute_file_relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_absolute_file_relative: set filename-display absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_absolute_file_relative: absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_absolute_file_relative: set filename-display basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_absolute_file_relative: basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_absolute_file_relative: set filename-display relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_absolute_file_relative: relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_absolute_file_absolute_same: continue to breakpoint: compdir_relative_ldir_absolute_file_absolute_same
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_absolute_file_absolute_same: set filename-display absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_absolute_file_absolute_same: absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_absolute_file_absolute_same: set filename-display basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_absolute_file_absolute_same: basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_absolute_file_absolute_same: set filename-display relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_absolute_file_absolute_same: relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_absolute_file_absolute_different: continue to breakpoint: compdir_relative_ldir_absolute_file_absolute_different
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_absolute_file_absolute_different: set filename-display absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_absolute_file_absolute_different: absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_absolute_file_absolute_different: set filename-display basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_absolute_file_absolute_different: basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_absolute_file_absolute_different: set filename-display relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_relative_ldir_absolute_file_absolute_different: relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_missing__file_basename: continue to breakpoint: compdir_absolute_ldir_missing__file_basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_missing__file_basename: set filename-display absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_missing__file_basename: absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_missing__file_basename: set filename-display basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_missing__file_basename: basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_missing__file_basename: set filename-display relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_missing__file_basename: relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_missing__file_relative: continue to breakpoint: compdir_absolute_ldir_missing__file_relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_missing__file_relative: set filename-display absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_missing__file_relative: absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_missing__file_relative: set filename-display basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_missing__file_relative: basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_missing__file_relative: set filename-display relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_missing__file_relative: relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_missing__file_absolute_same: continue to breakpoint: compdir_absolute_ldir_missing__file_absolute_same
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_missing__file_absolute_same: set filename-display absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_missing__file_absolute_same: absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_missing__file_absolute_same: set filename-display basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_missing__file_absolute_same: basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_missing__file_absolute_same: set filename-display relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_missing__file_absolute_same: relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_missing__file_absolute_different: continue to breakpoint: compdir_absolute_ldir_missing__file_absolute_different
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_missing__file_absolute_different: set filename-display absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_missing__file_absolute_different: absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_missing__file_absolute_different: set filename-display basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_missing__file_absolute_different: basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_missing__file_absolute_different: set filename-display relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_missing__file_absolute_different: relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_relative_file_basename: continue to breakpoint: compdir_absolute_ldir_relative_file_basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_relative_file_basename: set filename-display absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_relative_file_basename: absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_relative_file_basename: set filename-display basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_relative_file_basename: basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_relative_file_basename: set filename-display relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_relative_file_basename: relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_relative_file_relative: continue to breakpoint: compdir_absolute_ldir_relative_file_relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_relative_file_relative: set filename-display absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_relative_file_relative: absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_relative_file_relative: set filename-display basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_relative_file_relative: basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_relative_file_relative: set filename-display relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_relative_file_relative: relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_relative_file_absolute_same: continue to breakpoint: compdir_absolute_ldir_relative_file_absolute_same
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_relative_file_absolute_same: set filename-display absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_relative_file_absolute_same: absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_relative_file_absolute_same: set filename-display basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_relative_file_absolute_same: basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_relative_file_absolute_same: set filename-display relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_relative_file_absolute_same: relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_relative_file_absolute_different: continue to breakpoint: compdir_absolute_ldir_relative_file_absolute_different
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_relative_file_absolute_different: set filename-display absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_relative_file_absolute_different: absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_relative_file_absolute_different: set filename-display basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_relative_file_absolute_different: basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_relative_file_absolute_different: set filename-display relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_relative_file_absolute_different: relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_absolute_file_basename_same: continue to breakpoint: compdir_absolute_ldir_absolute_file_basename_same
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_absolute_file_basename_same: set filename-display absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_absolute_file_basename_same: absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_absolute_file_basename_same: set filename-display basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_absolute_file_basename_same: basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_absolute_file_basename_same: set filename-display relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_absolute_file_basename_same: relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_absolute_file_relative_different: continue to breakpoint: compdir_absolute_ldir_absolute_file_relative_different
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_absolute_file_relative_different: set filename-display absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_absolute_file_relative_different: absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_absolute_file_relative_different: set filename-display basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_absolute_file_relative_different: basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_absolute_file_relative_different: set filename-display relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_absolute_file_relative_different: relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_absolute_file_absolute_same: continue to breakpoint: compdir_absolute_ldir_absolute_file_absolute_same
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_absolute_file_absolute_same: set filename-display absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_absolute_file_absolute_same: absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_absolute_file_absolute_same: set filename-display basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_absolute_file_absolute_same: basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_absolute_file_absolute_same: set filename-display relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_absolute_file_absolute_same: relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_absolute_file_absolute_different: continue to breakpoint: compdir_absolute_ldir_absolute_file_absolute_different
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_absolute_file_absolute_different: set filename-display absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_absolute_file_absolute_different: absolute
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_absolute_file_absolute_different: set filename-display basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_absolute_file_absolute_different: basename
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_absolute_file_absolute_different: set filename-display relative
+PASS: gdb.dwarf2/dw2-dir-file-name.exp: compdir_absolute_ldir_absolute_file_absolute_different: relative
+Running ./gdb.dwarf2/dw2-dos-drive.exp ...
+PASS: gdb.dwarf2/dw2-dos-drive.exp: set breakpoint pending off
+PASS: gdb.dwarf2/dw2-dos-drive.exp: break 'z:file.c':func
+UNSUPPORTED: gdb.dwarf2/dw2-dos-drive.exp: break file.c:func
+Running ./gdb.dwarf2/dw2-double-set-die-type.exp ...
+PASS: gdb.dwarf2/dw2-double-set-die-type.exp: ptype a
+Running ./gdb.dwarf2/dw2-empty-namespace.exp ...
+PASS: gdb.dwarf2/dw2-empty-namespace.exp: ptype var
+PASS: gdb.dwarf2/dw2-empty-namespace.exp: p var
+Running ./gdb.dwarf2/dw2-empty-pc-range.exp ...
+PASS: gdb.dwarf2/dw2-empty-pc-range.exp: empty range before CU load
+PASS: gdb.dwarf2/dw2-empty-pc-range.exp: valid range after CU load
+PASS: gdb.dwarf2/dw2-empty-pc-range.exp: empty range after CU load
+Running ./gdb.dwarf2/dw2-entry-value.exp ...
+gdb compile failed, /usr/x86_64-pc-linux-gnu/x86_64-cros-linux-gnu/binutils-bin/2.22/ld.gold.real: internal error in output_address, at /var/tmp/portage/cross-x86_64-cros-linux-gnu/binutils-2.22-r20/work/binutils-2.22/gold/output.cc:3019
+collect2: error: ld returned 1 exit status
+UNTESTED: gdb.dwarf2/dw2-entry-value.exp: dw2-entry-value.exp
+Running ./gdb.dwarf2/dw2-error.exp ...
+PASS: gdb.dwarf2/dw2-error.exp: set breakpoint pending off
+PASS: gdb.dwarf2/dw2-error.exp: file dw2-error
+PASS: gdb.dwarf2/dw2-error.exp: break main
+Running ./gdb.dwarf2/dw2-filename.exp ...
+PASS: gdb.dwarf2/dw2-filename.exp: interpreter-exec mi -file-list-exec-source-files
+PASS: gdb.dwarf2/dw2-filename.exp: info sources
+Running ./gdb.dwarf2/dw2-icc-opaque.exp ...
+PASS: gdb.dwarf2/dw2-icc-opaque.exp: ptype p_struct
+Running ./gdb.dwarf2/dw2-ifort-parameter.exp ...
+FAIL: gdb.dwarf2/dw2-ifort-parameter.exp: p/x param
+Running ./gdb.dwarf2/dw2-inheritance.exp ...
+PASS: gdb.dwarf2/dw2-inheritance.exp: ptype inherited
+Running ./gdb.dwarf2/dw2-inline-break.exp ...
+PASS: gdb.dwarf2/dw2-inline-break.exp: break func1
+PASS: gdb.dwarf2/dw2-inline-break.exp: break func2
+PASS: gdb.dwarf2/dw2-inline-break.exp: break func3b
+PASS: gdb.dwarf2/dw2-inline-break.exp: break func4b
+PASS: gdb.dwarf2/dw2-inline-break.exp: break func5b
+PASS: gdb.dwarf2/dw2-inline-break.exp: break func6b
+PASS: gdb.dwarf2/dw2-inline-break.exp: break func7b
+PASS: gdb.dwarf2/dw2-inline-break.exp: break func8b
+PASS: gdb.dwarf2/dw2-inline-break.exp: print func1
+PASS: gdb.dwarf2/dw2-inline-break.exp: print func2
+Running ./gdb.dwarf2/dw2-inline-param.exp ...
+gdb compile failed, /usr/x86_64-pc-linux-gnu/x86_64-cros-linux-gnu/binutils-bin/2.22/ld.gold.real: internal error in output_address, at /var/tmp/portage/cross-x86_64-cros-linux-gnu/binutils-2.22-r20/work/binutils-2.22/gold/output.cc:3019
+collect2: error: ld returned 1 exit status
+UNTESTED: gdb.dwarf2/dw2-inline-param.exp: dw2-inline-param.exp
+Running ./gdb.dwarf2/dw2-intercu.exp ...
+PASS: gdb.dwarf2/dw2-intercu.exp: ptype int2
+PASS: gdb.dwarf2/dw2-intercu.exp: set listsize 1
+PASS: gdb.dwarf2/dw2-intercu.exp: list func_cu1
+PASS: gdb.dwarf2/dw2-intercu.exp: ptype func_cu1
+Running ./gdb.dwarf2/dw2-intermix.exp ...
+PASS: gdb.dwarf2/dw2-intermix.exp: set listsize 1
+PASS: gdb.dwarf2/dw2-intermix.exp: list func_cu1
+PASS: gdb.dwarf2/dw2-intermix.exp: ptype func_cu1
+Running ./gdb.dwarf2/dw2-linkage-name-trust.exp ...
+PASS: gdb.dwarf2/dw2-linkage-name-trust.exp: set language c++
+PASS: gdb.dwarf2/dw2-linkage-name-trust.exp: set cp-abi gnu-v3
+PASS: gdb.dwarf2/dw2-linkage-name-trust.exp: p c.membername
+PASS: gdb.dwarf2/dw2-linkage-name-trust.exp: p c.membername ()
+Running ./gdb.dwarf2/dw2-minsym-in-cu.exp ...
+PASS: gdb.dwarf2/dw2-minsym-in-cu.exp: info fun func2
+Running ./gdb.dwarf2/dw2-modula2-self-type.exp ...
+PASS: gdb.dwarf2/dw2-modula2-self-type.exp: set language modula-2
+PASS: gdb.dwarf2/dw2-modula2-self-type.exp: ptype v
+PASS: gdb.dwarf2/dw2-modula2-self-type.exp: alive
+Running ./gdb.dwarf2/dw2-namespaceless-anonymous.exp ...
+PASS: gdb.dwarf2/dw2-namespaceless-anonymous.exp: ptype '(anonymous namespace)::v'
+PASS: gdb.dwarf2/dw2-namespaceless-anonymous.exp: p '(anonymous namespace)::v'
+Running ./gdb.dwarf2/dw2-noloc.exp ...
+gdb compile failed, /usr/x86_64-pc-linux-gnu/x86_64-cros-linux-gnu/binutils-bin/2.22/ld.gold.real: internal error in output_address, at /var/tmp/portage/cross-x86_64-cros-linux-gnu/binutils-2.22-r20/work/binutils-2.22/gold/output.cc:3019
+collect2: error: ld returned 1 exit status
+UNTESTED: gdb.dwarf2/dw2-noloc.exp: dw2-noloc.exp
+Running ./gdb.dwarf2/dw2-objfile-overlap.exp ...
+PASS: gdb.dwarf2/dw2-objfile-overlap.exp: add-symbol-file
+PASS: gdb.dwarf2/dw2-objfile-overlap.exp: info line inner
+Running ./gdb.dwarf2/dw2-op-call.exp ...
+PASS: gdb.dwarf2/dw2-op-call.exp: maintenance set dwarf2 max-cache-age 0
+PASS: gdb.dwarf2/dw2-op-call.exp: p array1
+PASS: gdb.dwarf2/dw2-op-call.exp: array2 using DW_OP_call2
+PASS: gdb.dwarf2/dw2-op-call.exp: array3 using DW_OP_call4
+PASS: gdb.dwarf2/dw2-op-call.exp: p arraynoloc
+PASS: gdb.dwarf2/dw2-op-call.exp: p arraycallnoloc
+Running ./gdb.dwarf2/dw2-op-out-param.exp ...
+PASS: gdb.dwarf2/dw2-op-out-param.exp: set output-radix 16
+PASS: gdb.dwarf2/dw2-op-out-param.exp: set print frame-arguments all
+PASS: gdb.dwarf2/dw2-op-out-param.exp: continue to breakpoint: Stop in breakpt for test int_param_single_reg_loc
+PASS: gdb.dwarf2/dw2-op-out-param.exp: Backtrace for test int_param_single_reg_loc
+PASS: gdb.dwarf2/dw2-op-out-param.exp: continue to breakpoint: Stop in breakpt for struct_param_single_reg_loc
+KFAIL: gdb.dwarf2/dw2-op-out-param.exp: Backtrace for test struct_param_single_reg_loc (PRMS: symtab/14604)
+PASS: gdb.dwarf2/dw2-op-out-param.exp: continue to breakpoint: Stop in breakpt for struct_param_two_reg_pieces
+KFAIL: gdb.dwarf2/dw2-op-out-param.exp: Backtrace for test struct_param_two_reg_pieces (PRMS: symtab/14605)
+PASS: gdb.dwarf2/dw2-op-out-param.exp: continue to breakpoint: Stop in breakpt for int_param_two_reg_pieces
+KFAIL: gdb.dwarf2/dw2-op-out-param.exp: Backtrace for test int_param_two_reg_pieces (PRMS: symtab/14605)
+Running ./gdb.dwarf2/dw2-op-stack-value.exp ...
+PASS: gdb.dwarf2/dw2-op-stack-value.exp: p/x stack2
+PASS: gdb.dwarf2/dw2-op-stack-value.exp: p/x stack8
+PASS: gdb.dwarf2/dw2-op-stack-value.exp: x/wx &aa551234
+PASS: gdb.dwarf2/dw2-op-stack-value.exp: p/x implicit4to2
+PASS: gdb.dwarf2/dw2-op-stack-value.exp: p/x implicit4to4
+Running ./gdb.dwarf2/dw2-param-error.exp ...
+gdb compile failed, /usr/x86_64-pc-linux-gnu/x86_64-cros-linux-gnu/binutils-bin/2.22/ld.gold.real: internal error in output_address, at /var/tmp/portage/cross-x86_64-cros-linux-gnu/binutils-2.22-r20/work/binutils-2.22/gold/output.cc:3019
+collect2: error: ld returned 1 exit status
+UNTESTED: gdb.dwarf2/dw2-param-error.exp: dw2-param-error.exp
+Running ./gdb.dwarf2/dw2-producer.exp ...
+PASS: gdb.dwarf2/dw2-producer.exp: set listsize 1
+PASS: gdb.dwarf2/dw2-producer.exp: list func_cu1
+PASS: gdb.dwarf2/dw2-producer.exp: ptype func_cu1
+Running ./gdb.dwarf2/dw2-ranges.exp ...
+PASS: gdb.dwarf2/dw2-ranges.exp: info line main
+PASS: gdb.dwarf2/dw2-ranges.exp: info line func
+PASS: gdb.dwarf2/dw2-ranges.exp: info line main2
+PASS: gdb.dwarf2/dw2-ranges.exp: info line func2
+KFAIL: gdb.dwarf2/dw2-ranges.exp: info line main3 (PRMS: symtab/12497)
+Running ./gdb.dwarf2/dw2-ref-missing-frame.exp ...
+PASS: gdb.dwarf2/dw2-ref-missing-frame.exp: func_loopfb print
+PASS: gdb.dwarf2/dw2-ref-missing-frame.exp: func_loopfb backtrace
+Running ./gdb.dwarf2/dw2-restore.exp ...
+PASS: gdb.dwarf2/dw2-restore.exp: continue
+PASS: gdb.dwarf2/dw2-restore.exp: where
+Running ./gdb.dwarf2/dw2-restrict.exp ...
+gdb compile failed, /usr/x86_64-pc-linux-gnu/x86_64-cros-linux-gnu/binutils-bin/2.22/ld.gold.real: error: /var/tmp/portage/cross-x86_64-cros-linux-gnu/gdb-7.6.1/work/gdb-7.6.1/gdb/testsuite/gdb.dwarf2/dw2-restrict0.o: requires unsupported dynamic reloc 11; recompile with -fPIC
+/usr/x86_64-pc-linux-gnu/x86_64-cros-linux-gnu/binutils-bin/2.22/ld.gold.real: error: /var/tmp/portage/cross-x86_64-cros-linux-gnu/gdb-7.6.1/work/gdb-7.6.1/gdb/testsuite/gdb.dwarf2/dw2-restrict0.o: requires dynamic R_X86_64_32 reloc which may overflow at runtime; recompile with -fPIC
+collect2: error: ld returned 1 exit status
+UNTESTED: gdb.dwarf2/dw2-restrict.exp: dw2-restrict.exp
+Running ./gdb.dwarf2/dw2-simple-locdesc.exp ...
+KFAIL: gdb.dwarf2/dw2-simple-locdesc.exp: p &s.shl (PRMS: symtab/13307)
+PASS: gdb.dwarf2/dw2-simple-locdesc.exp: p &s.data4
+Running ./gdb.dwarf2/dw2-skip-prologue.exp ...
+gdb compile failed, /usr/x86_64-pc-linux-gnu/x86_64-cros-linux-gnu/binutils-bin/2.22/ld.gold.real: internal error in output_address, at /var/tmp/portage/cross-x86_64-cros-linux-gnu/binutils-2.22-r20/work/binutils-2.22/gold/output.cc:3019
+collect2: error: ld returned 1 exit status
+UNTESTED: gdb.dwarf2/dw2-skip-prologue.exp: dw2-skip-prologue.exp
+Running ./gdb.dwarf2/dw2-stack-boundary.exp ...
+PASS: gdb.dwarf2/dw2-stack-boundary.exp: set complaints 100
+PASS: gdb.dwarf2/dw2-stack-boundary.exp: check partial symtab errors
+PASS: gdb.dwarf2/dw2-stack-boundary.exp: p underflow
+PASS: gdb.dwarf2/dw2-stack-boundary.exp: p overflow
+Running ./gdb.dwarf2/dw2-strp.exp ...
+PASS: gdb.dwarf2/dw2-strp.exp: p a_string
+PASS: gdb.dwarf2/dw2-strp.exp: ptype a_string
+PASS: gdb.dwarf2/dw2-strp.exp: p a_string2
+PASS: gdb.dwarf2/dw2-strp.exp: ptype a_string2
+Running ./gdb.dwarf2/dw2-unresolved.exp ...
+gdb compile failed, /usr/x86_64-pc-linux-gnu/x86_64-cros-linux-gnu/binutils-bin/2.22/ld.gold.real: internal error in output_address, at /var/tmp/portage/cross-x86_64-cros-linux-gnu/binutils-2.22-r20/work/binutils-2.22/gold/output.cc:3019
+collect2: error: ld returned 1 exit status
+UNTESTED: gdb.dwarf2/dw2-unresolved.exp: dw2-unresolved.exp
+Running ./gdb.dwarf2/dw2-var-zero-addr.exp ...
+PASS: gdb.dwarf2/dw2-var-zero-addr.exp: print &var
+Running ./gdb.dwarf2/dw4-sig-types.exp ...
+PASS: gdb.dwarf2/dw4-sig-types.exp: maint set dwarf2 max-cache-age 0
+PASS: gdb.dwarf2/dw4-sig-types.exp: p myset
+PASS: gdb.dwarf2/dw4-sig-types.exp: continue to foo
+Running ./gdb.dwarf2/dw4-sig-type-unused.exp ...
+PASS: gdb.dwarf2/dw4-sig-type-unused.exp: alive
+Running ./gdb.dwarf2/fission-base.exp ...
+PASS: gdb.dwarf2/fission-base.exp: ptype main
+PASS: gdb.dwarf2/fission-base.exp: ptype func
+PASS: gdb.dwarf2/fission-base.exp: frame in main
+PASS: gdb.dwarf2/fission-base.exp: break func
+PASS: gdb.dwarf2/fission-base.exp: continue to func
+PASS: gdb.dwarf2/fission-base.exp: frame in func
+Running ./gdb.dwarf2/fission-loclists.exp ...
+FAIL: gdb.dwarf2/fission-loclists.exp: p argc
+Running ./gdb.dwarf2/fission-reread.exp ...
+PASS: gdb.dwarf2/fission-reread.exp: break main
+PASS: gdb.dwarf2/fission-reread.exp: fission-reread
+PASS: gdb.dwarf2/fission-reread.exp: fission-reread - unload
+Running ./gdb.dwarf2/implptr-64bit.exp ...
+PASS: gdb.dwarf2/implptr-64bit.exp: d2o8a4r4t0
+PASS: gdb.dwarf2/implptr-64bit.exp: d2o4a8r8t0
+PASS: gdb.dwarf2/implptr-64bit.exp: d3o8a4r8t0
+PASS: gdb.dwarf2/implptr-64bit.exp: d3o4a8r4t0
+PASS: gdb.dwarf2/implptr-64bit.exp: d2o8a4r4t1
+PASS: gdb.dwarf2/implptr-64bit.exp: d2o4a8r8t1
+PASS: gdb.dwarf2/implptr-64bit.exp: d3o8a4r8t1
+PASS: gdb.dwarf2/implptr-64bit.exp: d3o4a8r4t1
+Running ./gdb.dwarf2/implptr.exp ...
+Running ./gdb.dwarf2/implptr-optimized-out.exp ...
+PASS: gdb.dwarf2/implptr-optimized-out.exp: p p->f
+Running ./gdb.dwarf2/mac-fileno.exp ...
+PASS: gdb.dwarf2/mac-fileno.exp: set listsize 1
+PASS: gdb.dwarf2/mac-fileno.exp: list func_cu1
+PASS: gdb.dwarf2/mac-fileno.exp: ptype func_cu1
+Running ./gdb.dwarf2/member-ptr-forwardref.exp ...
+PASS: gdb.dwarf2/member-ptr-forwardref.exp: set cp-abi gnu-v3
+PASS: gdb.dwarf2/member-ptr-forwardref.exp: show cp-abi
+PASS: gdb.dwarf2/member-ptr-forwardref.exp: ptype c
+Running ./gdb.dwarf2/method-ptr.exp ...
+PASS: gdb.dwarf2/method-ptr.exp: ptype the_typedef
+Running ./gdb.dwarf2/pieces.exp ...
+Running ./gdb.dwarf2/pr10770.exp ...
+PASS: gdb.dwarf2/pr10770.exp: set breakpoint for pr10770
+PASS: gdb.dwarf2/pr10770.exp: cont
+PASS: gdb.dwarf2/pr10770.exp: frame 2
+Running ./gdb.dwarf2/pr11465.exp ...
+PASS: gdb.dwarf2/pr11465.exp: p N::c.C
+Running ./gdb.dwarf2/pr13961.exp ...
+PASS: gdb.dwarf2/pr13961.exp: break main
+PASS: gdb.dwarf2/pr13961.exp: pr13961
+Running ./gdb.dwarf2/subrange.exp ...
+PASS: gdb.dwarf2/subrange.exp: set language pascal
+PASS: gdb.dwarf2/subrange.exp: ptype TByteArray
+Running ./gdb.dwarf2/trace-crash.exp ...
+PASS: gdb.dwarf2/trace-crash.exp: set tracepoint
+PASS: gdb.dwarf2/trace-crash.exp: set tracepoint actions
+Running ./gdb.dwarf2/typeddwarf.exp ...
+PASS: gdb.dwarf2/typeddwarf.exp: set breakpoint at typeddwarf.c:29
+PASS: gdb.dwarf2/typeddwarf.exp: continue to breakpoint: continue to typeddwarf.c:29
+PASS: gdb.dwarf2/typeddwarf.exp: check value of j at typeddwarf.c:29
+PASS: gdb.dwarf2/typeddwarf.exp: check value of l at typeddwarf.c:29
+PASS: gdb.dwarf2/typeddwarf.exp: check value of m at typeddwarf.c:29
+PASS: gdb.dwarf2/typeddwarf.exp: check value of n at typeddwarf.c:29
+PASS: gdb.dwarf2/typeddwarf.exp: check value of o at typeddwarf.c:29
+PASS: gdb.dwarf2/typeddwarf.exp: check value of p at typeddwarf.c:29
+PASS: gdb.dwarf2/typeddwarf.exp: check value of q at typeddwarf.c:29
+PASS: gdb.dwarf2/typeddwarf.exp: check value of r at typeddwarf.c:29
+PASS: gdb.dwarf2/typeddwarf.exp: check value of s at typeddwarf.c:29
+PASS: gdb.dwarf2/typeddwarf.exp: check value of t at typeddwarf.c:29
+PASS: gdb.dwarf2/typeddwarf.exp: check value of u at typeddwarf.c:29
+PASS: gdb.dwarf2/typeddwarf.exp: check value of v at typeddwarf.c:29
+PASS: gdb.dwarf2/typeddwarf.exp: check value of w at typeddwarf.c:29
+PASS: gdb.dwarf2/typeddwarf.exp: check value of x at typeddwarf.c:29
+PASS: gdb.dwarf2/typeddwarf.exp: check value of y at typeddwarf.c:29
+PASS: gdb.dwarf2/typeddwarf.exp: set breakpoint at typeddwarf.c:53
+PASS: gdb.dwarf2/typeddwarf.exp: continue to breakpoint: continue to typeddwarf.c:53
+PASS: gdb.dwarf2/typeddwarf.exp: check value of j at typeddwarf.c:53
+PASS: gdb.dwarf2/typeddwarf.exp: check value of l at typeddwarf.c:53
+PASS: gdb.dwarf2/typeddwarf.exp: check value of m at typeddwarf.c:53
+PASS: gdb.dwarf2/typeddwarf.exp: check value of p at typeddwarf.c:53
+PASS: gdb.dwarf2/typeddwarf.exp: check value of q at typeddwarf.c:53
+PASS: gdb.dwarf2/typeddwarf.exp: check value of r at typeddwarf.c:53
+PASS: gdb.dwarf2/typeddwarf.exp: check value of s at typeddwarf.c:53
+PASS: gdb.dwarf2/typeddwarf.exp: check value of t at typeddwarf.c:53
+PASS: gdb.dwarf2/typeddwarf.exp: check value of u at typeddwarf.c:53
+PASS: gdb.dwarf2/typeddwarf.exp: check value of v at typeddwarf.c:53
+PASS: gdb.dwarf2/typeddwarf.exp: check value of w at typeddwarf.c:53
+PASS: gdb.dwarf2/typeddwarf.exp: check value of x at typeddwarf.c:53
+PASS: gdb.dwarf2/typeddwarf.exp: check value of y at typeddwarf.c:53
+PASS: gdb.dwarf2/typeddwarf.exp: check value of z at typeddwarf.c:53
+PASS: gdb.dwarf2/typeddwarf.exp: set breakpoint at typeddwarf.c:73
+PASS: gdb.dwarf2/typeddwarf.exp: continue to breakpoint: continue to typeddwarf.c:73
+PASS: gdb.dwarf2/typeddwarf.exp: check value of w at typeddwarf.c:73
+PASS: gdb.dwarf2/typeddwarf.exp: check value of x at typeddwarf.c:73
+PASS: gdb.dwarf2/typeddwarf.exp: check value of y at typeddwarf.c:73
+PASS: gdb.dwarf2/typeddwarf.exp: check value of z at typeddwarf.c:73
+Running ./gdb.dwarf2/valop.exp ...
+Running ./gdb.dwarf2/watch-notconst.exp ...
+Running ./gdb.fortran/array-element.exp ...
+gdb compile failed, default_target_compile: Can't find x86_64-cros-linux-gnu-gfortran.
+UNTESTED: gdb.fortran/array-element.exp: array-element.exp
+Running ./gdb.fortran/charset.exp ...
+gdb compile failed, default_target_compile: Can't find x86_64-cros-linux-gnu-gfortran.
+UNTESTED: gdb.fortran/charset.exp: charset.exp
+Running ./gdb.fortran/common-block.exp ...
+UNTESTED: gdb.fortran/common-block.exp: common-block.exp
+Running ./gdb.fortran/complex.exp ...
+UNTESTED: gdb.fortran/complex.exp: complex.exp
+UNTESTED: gdb.fortran/complex.exp: Couldn't compile complex.f
+Running ./gdb.fortran/derived-type.exp ...
+gdb compile failed, default_target_compile: Can't find x86_64-cros-linux-gnu-gfortran.
+UNTESTED: gdb.fortran/derived-type.exp: derived-type.exp
+Running ./gdb.fortran/exprs.exp ...
+PASS: gdb.fortran/exprs.exp: set print sevenbit-strings
+PASS: gdb.fortran/exprs.exp: set language fortran
+PASS: gdb.fortran/exprs.exp: set language to "fortran"
+PASS: gdb.fortran/exprs.exp: Set value-history[1] using $1
+PASS: gdb.fortran/exprs.exp: Set value-history[2] using $2
+PASS: gdb.fortran/exprs.exp: Set value-history[3] using $3
+PASS: gdb.fortran/exprs.exp: Print value-history[MAX-1] using inplicit index $$
+PASS: gdb.fortran/exprs.exp: Print value-history[MAX-1] again using implicit index $$
+PASS: gdb.fortran/exprs.exp: Print value-history[MAX] using implicit index $
+PASS: gdb.fortran/exprs.exp: Print value-history[MAX-2] using explicit index $$2
+PASS: gdb.fortran/exprs.exp: Print value-history[MAX] using explicit index $0
+PASS: gdb.fortran/exprs.exp: Print value-history[MAX] using explicit index $$0
+PASS: gdb.fortran/exprs.exp: Print value-history[1] using explicit index $1
+PASS: gdb.fortran/exprs.exp: Print value-history[2] using explicit index $2
+PASS: gdb.fortran/exprs.exp: Print value-history[3] using explicit index $3
+PASS: gdb.fortran/exprs.exp: Print (value-history[MAX] - 3) using implicit index $
+PASS: gdb.fortran/exprs.exp: Use value-history element in arithmetic expression
+PASS: gdb.fortran/exprs.exp: Set a new convenience variable
+PASS: gdb.fortran/exprs.exp: Print contents of new convenience variable
+PASS: gdb.fortran/exprs.exp: Set convenience variable to a new value
+PASS: gdb.fortran/exprs.exp: Print new contents of convenience variable
+PASS: gdb.fortran/exprs.exp: Set convenience variable $_
+PASS: gdb.fortran/exprs.exp: Print contents of convenience variable $_
+PASS: gdb.fortran/exprs.exp: Use convenience variable in arithmetic expression
+PASS: gdb.fortran/exprs.exp: Use convenience variable assignment in arithmetic expression
+PASS: gdb.fortran/exprs.exp: Print contents of uninitialized convenience variable
+PASS: gdb.fortran/exprs.exp: p 123
+PASS: gdb.fortran/exprs.exp: p -123
+PASS: gdb.fortran/exprs.exp: reject p _
+PASS: gdb.fortran/exprs.exp: p .TRUE.
+PASS: gdb.fortran/exprs.exp: p .FALSE.
+PASS: gdb.fortran/exprs.exp: p 'a'
+PASS: gdb.fortran/exprs.exp: p 'abcdefg'(2:4)
+PASS: gdb.fortran/exprs.exp: p 'abcdefg'(:3)
+PASS: gdb.fortran/exprs.exp: p 'abcdefg'(5:)
+PASS: gdb.fortran/exprs.exp: p 'abcdefg'(:)
+PASS: gdb.fortran/exprs.exp: p .44 .LT. .45
+PASS: gdb.fortran/exprs.exp: p .44 .GT. .45
+PASS: gdb.fortran/exprs.exp: p 0.44 .LT. 0.45
+PASS: gdb.fortran/exprs.exp: p 0.44 .GT. 0.45
+PASS: gdb.fortran/exprs.exp: p 44. .LT. 45.
+PASS: gdb.fortran/exprs.exp: p 44. .GT. 45.
+PASS: gdb.fortran/exprs.exp: p 44.0 .LT. 45.0
+PASS: gdb.fortran/exprs.exp: p 44.0 .GT. 45.0
+PASS: gdb.fortran/exprs.exp: p 10D20 .LT. 10D21
+PASS: gdb.fortran/exprs.exp: p 10D20 .GT. 10D21
+PASS: gdb.fortran/exprs.exp: p 10d20 .LT. 10d21
+PASS: gdb.fortran/exprs.exp: p 10d20 .GT. 10d21
+PASS: gdb.fortran/exprs.exp: p 10E20 .LT. 10E21
+PASS: gdb.fortran/exprs.exp: p 10E20 .GT. 10E21
+PASS: gdb.fortran/exprs.exp: p 10e20 .LT. 10e21
+PASS: gdb.fortran/exprs.exp: p 10e20 .GT. 10e21
+PASS: gdb.fortran/exprs.exp: p 10.D20 .LT. 10.D21
+PASS: gdb.fortran/exprs.exp: p 10.D20 .GT. 10.D21
+PASS: gdb.fortran/exprs.exp: p 10.d20 .LT. 10.d21
+PASS: gdb.fortran/exprs.exp: p 10.d20 .GT. 10.d21
+PASS: gdb.fortran/exprs.exp: p 10.E20 .LT. 10.E21
+PASS: gdb.fortran/exprs.exp: p 10.E20 .GT. 10.E21
+PASS: gdb.fortran/exprs.exp: p 10.e20 .LT. 10.e21
+PASS: gdb.fortran/exprs.exp: p 10.e20 .GT. 10.e21
+PASS: gdb.fortran/exprs.exp: p 10.0D20 .LT. 10.0D21
+PASS: gdb.fortran/exprs.exp: p 10.0D20 .GT. 10.0D21
+PASS: gdb.fortran/exprs.exp: p 10.0d20 .LT. 10.0d21
+PASS: gdb.fortran/exprs.exp: p 10.0d20 .GT. 10.0d21
+PASS: gdb.fortran/exprs.exp: p 10.0E20 .LT. 10.0E21
+PASS: gdb.fortran/exprs.exp: p 10.0E20 .GT. 10.0E21
+PASS: gdb.fortran/exprs.exp: p 10.0e20 .LT. 10.0e21
+PASS: gdb.fortran/exprs.exp: p 10.0e20 .GT. 10.0e21
+PASS: gdb.fortran/exprs.exp: p 10.0D+20 .LT. 10.0D+21
+PASS: gdb.fortran/exprs.exp: p 10.0D+20 .GT. 10.0D+21
+PASS: gdb.fortran/exprs.exp: p 10.0d+20 .LT. 10.0d+21
+PASS: gdb.fortran/exprs.exp: p 10.0d+20 .GT. 10.0d+21
+PASS: gdb.fortran/exprs.exp: p 10.0E+20 .LT. 10.0E+21
+PASS: gdb.fortran/exprs.exp: p 10.0E+20 .GT. 10.0E+21
+PASS: gdb.fortran/exprs.exp: p 10.0e+20 .LT. 10.0e+21
+PASS: gdb.fortran/exprs.exp: p 10.0e+20 .GT. 10.0e+21
+PASS: gdb.fortran/exprs.exp: p 10.0D-11 .LT. 10.0D-10
+PASS: gdb.fortran/exprs.exp: p 10.0D-11 .GT. 10.0D-10
+PASS: gdb.fortran/exprs.exp: p 10.0d-11 .LT. 10.0d-10
+PASS: gdb.fortran/exprs.exp: p 10.0d-11 .GT. 10.0d-10
+PASS: gdb.fortran/exprs.exp: p 10.0E-11 .LT. 10.0E-10
+PASS: gdb.fortran/exprs.exp: p 10.0E-11 .GT. 10.0E-10
+PASS: gdb.fortran/exprs.exp: p 10.0e-11 .LT. 10.0e-10
+PASS: gdb.fortran/exprs.exp: p 10.0e-11 .GT. 10.0e-10
+PASS: gdb.fortran/exprs.exp: unary minus applied to int
+PASS: gdb.fortran/exprs.exp: unary minus applied to real
+PASS: gdb.fortran/exprs.exp: bool plus int
+PASS: gdb.fortran/exprs.exp: int plus int
+PASS: gdb.fortran/exprs.exp: real plus int
+PASS: gdb.fortran/exprs.exp: real plus real
+PASS: gdb.fortran/exprs.exp: bool minus int
+PASS: gdb.fortran/exprs.exp: int minus int
+PASS: gdb.fortran/exprs.exp: real minus int
+PASS: gdb.fortran/exprs.exp: real minus real
+PASS: gdb.fortran/exprs.exp: bool times int
+PASS: gdb.fortran/exprs.exp: int times int
+PASS: gdb.fortran/exprs.exp: real times int
+PASS: gdb.fortran/exprs.exp: real times real
+PASS: gdb.fortran/exprs.exp: bool divided by int
+PASS: gdb.fortran/exprs.exp: int divided by int
+PASS: gdb.fortran/exprs.exp: real divided by int
+PASS: gdb.fortran/exprs.exp: real divided by real
+PASS: gdb.fortran/exprs.exp: int powered by int
+PASS: gdb.fortran/exprs.exp: combined exponentiation expression
+PASS: gdb.fortran/exprs.exp: combined exponentiation expression in specified order
+PASS: gdb.fortran/exprs.exp: int powered by real
+PASS: gdb.fortran/exprs.exp: real powered by real
+Running ./gdb.fortran/library-module.exp ...
+gdb compile failed, default_target_compile: Can't find x86_64-cros-linux-gnu-gfortran.
+UNTESTED: gdb.fortran/library-module.exp: Couldn't compile library-module-lib.f90
+Running ./gdb.fortran/logical.exp ...
+UNTESTED: gdb.fortran/logical.exp: logical.exp
+Running ./gdb.fortran/module.exp ...
+gdb compile failed, default_target_compile: Can't find x86_64-cros-linux-gnu-gfortran.
+UNTESTED: gdb.fortran/module.exp: module.exp
+Running ./gdb.fortran/multi-dim.exp ...
+gdb compile failed, default_target_compile: Can't find x86_64-cros-linux-gnu-gfortran.
+UNTESTED: gdb.fortran/multi-dim.exp: multi-dim.exp
+Running ./gdb.fortran/subarray.exp ...
+gdb compile failed, default_target_compile: Can't find x86_64-cros-linux-gnu-gfortran.
+UNTESTED: gdb.fortran/subarray.exp: subarray.exp
+Running ./gdb.fortran/types.exp ...
+PASS: gdb.fortran/types.exp: set print sevenbit-strings
+PASS: gdb.fortran/types.exp: set language fortran
+PASS: gdb.fortran/types.exp: set language to "fortran"
+PASS: gdb.fortran/types.exp: pt 123
+PASS: gdb.fortran/types.exp: reject pt _
+PASS: gdb.fortran/types.exp: pt .TRUE.
+PASS: gdb.fortran/types.exp: pt .FALSE.
+PASS: gdb.fortran/types.exp: pt 'a'
+PASS: gdb.fortran/types.exp: pt .44
+PASS: gdb.fortran/types.exp: pt 44.0
+PASS: gdb.fortran/types.exp: pt 10D20
+PASS: gdb.fortran/types.exp: pt 10D20
+PASS: gdb.fortran/types.exp: pt 10d20
+PASS: gdb.fortran/types.exp: pt 10d20
+PASS: gdb.fortran/types.exp: pt 10E20
+PASS: gdb.fortran/types.exp: pt 10E20
+PASS: gdb.fortran/types.exp: pt 10e20
+PASS: gdb.fortran/types.exp: pt 10e20
+Running ./gdb.gdb/complaints.exp ...
+Running ./gdb.gdb/observer.exp ...
+Running ./gdb.gdb/selftest.exp ...
+Running ./gdb.gdb/xfullpath.exp ...
+Running ./gdb.go/basic-types.exp ...
+PASS: gdb.go/basic-types.exp: set language go
+PASS: gdb.go/basic-types.exp: set language to "go"
+PASS: gdb.go/basic-types.exp: pt 123
+PASS: gdb.go/basic-types.exp: pt void(42)
+PASS: gdb.go/basic-types.exp: pt byte(42)
+PASS: gdb.go/basic-types.exp: pt int(42)
+PASS: gdb.go/basic-types.exp: pt uint(42)
+PASS: gdb.go/basic-types.exp: pt uintptr(42)
+PASS: gdb.go/basic-types.exp: pt int8(42)
+PASS: gdb.go/basic-types.exp: pt int16(42)
+PASS: gdb.go/basic-types.exp: pt int32(42)
+PASS: gdb.go/basic-types.exp: pt int64(42)
+PASS: gdb.go/basic-types.exp: pt uint8(42)
+PASS: gdb.go/basic-types.exp: pt uint16(42)
+PASS: gdb.go/basic-types.exp: pt uint32(42)
+PASS: gdb.go/basic-types.exp: pt uint64(42)
+PASS: gdb.go/basic-types.exp: pt true
+PASS: gdb.go/basic-types.exp: pt false
+PASS: gdb.go/basic-types.exp: pt bool(0)
+PASS: gdb.go/basic-types.exp: pt bool(1)
+PASS: gdb.go/basic-types.exp: pt 'a'
+PASS: gdb.go/basic-types.exp: pt "a simple string"
+PASS: gdb.go/basic-types.exp: pt `a simple raw string`
+PASS: gdb.go/basic-types.exp: pt .44
+PASS: gdb.go/basic-types.exp: pt 44.0
+PASS: gdb.go/basic-types.exp: pt 10e20
+PASS: gdb.go/basic-types.exp: pt 10E20
+PASS: gdb.go/basic-types.exp: pt float32(.42)
+PASS: gdb.go/basic-types.exp: pt float64(.42)
+PASS: gdb.go/basic-types.exp: pt complex64(.42)
+XFAIL: gdb.go/basic-types.exp: pt complex64(.42i1.0)
+XFAIL: gdb.go/basic-types.exp: pt complex64(i1.0)
+PASS: gdb.go/basic-types.exp: pt complex128(.42)
+XFAIL: gdb.go/basic-types.exp: pt complex128(.42i1.0)
+XFAIL: gdb.go/basic-types.exp: pt complex128(i1.0)
+Running ./gdb.go/chan.exp ...
+gdb compile failed, default_target_compile: Can't find x86_64-cros-linux-gnu-gccgo.
+UNTESTED: gdb.go/chan.exp: chan.exp
+Running ./gdb.go/handcall.exp ...
+gdb compile failed, default_target_compile: Can't find x86_64-cros-linux-gnu-gccgo.
+UNTESTED: gdb.go/handcall.exp: handcall.exp
+Running ./gdb.go/hello.exp ...
+gdb compile failed, default_target_compile: Can't find x86_64-cros-linux-gnu-gccgo.
+UNTESTED: gdb.go/hello.exp: hello.exp
+Running ./gdb.go/integers.exp ...
+gdb compile failed, default_target_compile: Can't find x86_64-cros-linux-gnu-gccgo.
+UNTESTED: gdb.go/integers.exp: integers.exp
+Running ./gdb.go/methods.exp ...
+gdb compile failed, default_target_compile: Can't find x86_64-cros-linux-gnu-gccgo.
+UNTESTED: gdb.go/methods.exp: methods.exp
+Running ./gdb.go/package.exp ...
+gdb compile failed, default_target_compile: Can't find x86_64-cros-linux-gnu-gccgo.
+UNTESTED: gdb.go/package.exp: package
+Running ./gdb.go/print.exp ...
+PASS: gdb.go/print.exp: set language go
+PASS: gdb.go/print.exp: set language to "go"
+PASS: gdb.go/print.exp: check fp + text
+PASS: gdb.go/print.exp: p 1.
+PASS: gdb.go/print.exp: p 1.5
+PASS: gdb.go/print.exp: p 1.f
+PASS: gdb.go/print.exp: p 1.5f
+PASS: gdb.go/print.exp: p 1.l
+PASS: gdb.go/print.exp: p 1.5l
+PASS: gdb.go/print.exp: p 0x1.1
+PASS: gdb.go/print.exp: reject p 1.1x
+PASS: gdb.go/print.exp: reject p 1.1ff
+PASS: gdb.go/print.exp: reject p 1.1ll
+Running ./gdb.go/strings.exp ...
+gdb compile failed, default_target_compile: Can't find x86_64-cros-linux-gnu-gccgo.
+UNTESTED: gdb.go/strings.exp: strings.exp
+Running ./gdb.go/types.exp ...
+gdb compile failed, default_target_compile: Can't find x86_64-cros-linux-gnu-gccgo.
+UNTESTED: gdb.go/types.exp: types.exp
+Running ./gdb.go/unsafe.exp ...
+gdb compile failed, default_target_compile: Can't find x86_64-cros-linux-gnu-gccgo.
+UNTESTED: gdb.go/unsafe.exp: unsafe.exp
+Running ./gdb.java/jmain.exp ...
+UNSUPPORTED: gdb.java/jmain.exp: compilation jmain.java
+Running ./gdb.java/jmisc.exp ...
+UNSUPPORTED: gdb.java/jmisc.exp: compilation jmisc.java
+Running ./gdb.java/jnpe.exp ...
+UNSUPPORTED: gdb.java/jnpe.exp: compilation jnpe.java
+UNTESTED: gdb.java/jnpe.exp: Couldn't compile ./gdb.java/jnpe.java
+Running ./gdb.java/jprint.exp ...
+UNSUPPORTED: gdb.java/jprint.exp: compilation jprint.java
+Running ./gdb.java/jv-exp.exp ...
+PASS: gdb.java/jv-exp.exp: set print sevenbit-strings
+PASS: gdb.java/jv-exp.exp: set width 0
+PASS: gdb.java/jv-exp.exp: set language java
+PASS: gdb.java/jv-exp.exp: set language to "java"
+PASS: gdb.java/jv-exp.exp: p 1 > 2
+PASS: gdb.java/jv-exp.exp: p 1 < 2
+Running ./gdb.java/jv-print.exp ...
+PASS: gdb.java/jv-print.exp: print $pc
+PASS: gdb.java/jv-print.exp: set print sevenbit-strings
+PASS: gdb.java/jv-print.exp: set width 0
+PASS: gdb.java/jv-print.exp: set language java
+PASS: gdb.java/jv-print.exp: set language to "java"
+PASS: gdb.java/jv-print.exp: p 123
+PASS: gdb.java/jv-print.exp: p -123
+PASS: gdb.java/jv-print.exp: p/d 123
+PASS: gdb.java/jv-print.exp: p 0123
+PASS: gdb.java/jv-print.exp: p 00123
+PASS: gdb.java/jv-print.exp: p -0123
+PASS: gdb.java/jv-print.exp: p/o 0123
+PASS: gdb.java/jv-print.exp: p 0x123
+PASS: gdb.java/jv-print.exp: p -0x123
+PASS: gdb.java/jv-print.exp: p 0x0123
+PASS: gdb.java/jv-print.exp: p -0x0123
+PASS: gdb.java/jv-print.exp: p 0xABCDEF
+PASS: gdb.java/jv-print.exp: p 0xabcdef
+PASS: gdb.java/jv-print.exp: p 0xAbCdEf
+PASS: gdb.java/jv-print.exp: p/x 0x123
+PASS: gdb.java/jv-print.exp: p 'a'
+PASS: gdb.java/jv-print.exp: p/c 'a'
+PASS: gdb.java/jv-print.exp: p/c 70
+PASS: gdb.java/jv-print.exp: p/x 'a'
+PASS: gdb.java/jv-print.exp: p/d 'a'
+PASS: gdb.java/jv-print.exp: p/t 'a'
+PASS: gdb.java/jv-print.exp: p/x '\377'
+PASS: gdb.java/jv-print.exp: p '\''
+PASS: gdb.java/jv-print.exp: p '\\'
+PASS: gdb.java/jv-print.exp: reject p 0x
+PASS: gdb.java/jv-print.exp: p ''
+PASS: gdb.java/jv-print.exp: p '''
+PASS: gdb.java/jv-print.exp: reject p '\'
+PASS: gdb.java/jv-print.exp: reject p '\\\'
+PASS: gdb.java/jv-print.exp: reject p DEADBEEF
+PASS: gdb.java/jv-print.exp: reject p 123DEADBEEF
+PASS: gdb.java/jv-print.exp: reject p 123foobar.bazfoo3
+PASS: gdb.java/jv-print.exp: reject p 123EEEEEEEEEEEEEEEEE33333k333
+PASS: gdb.java/jv-print.exp: check for floating addition
+PASS: gdb.java/jv-print.exp: reject p 09
+PASS: gdb.java/jv-print.exp: reject p 079
+PASS: gdb.java/jv-print.exp: reject p 0xG
+PASS: gdb.java/jv-print.exp: reject p 0xAG
+PASS: gdb.java/jv-print.exp: check fp + text
+PASS: gdb.java/jv-print.exp: p 1.
+PASS: gdb.java/jv-print.exp: p 1.5
+PASS: gdb.java/jv-print.exp: p 1.f
+PASS: gdb.java/jv-print.exp: p 1.5f
+PASS: gdb.java/jv-print.exp: p 1.d
+PASS: gdb.java/jv-print.exp: p 1.5d
+PASS: gdb.java/jv-print.exp: p 0x1.1
+PASS: gdb.java/jv-print.exp: reject p 1.1x
+PASS: gdb.java/jv-print.exp: reject p 1.1ff
+PASS: gdb.java/jv-print.exp: reject p 1.1dd
+Running ./gdb.linespec/break-ask.exp ...
+PASS: gdb.linespec/break-ask.exp: set multiple-symbols ask
+PASS: gdb.linespec/break-ask.exp: set filename-display absolute
+PASS: gdb.linespec/break-ask.exp: break twodup absolute
+PASS: gdb.linespec/break-ask.exp: 0
+PASS: gdb.linespec/break-ask.exp: set filename-display relative
+PASS: gdb.linespec/break-ask.exp: break twodup relative
+PASS: gdb.linespec/break-ask.exp: 2
+PASS: gdb.linespec/break-ask.exp: expect breakpoint
+PASS: gdb.linespec/break-ask.exp: info source
+PASS: gdb.linespec/break-ask.exp: continue to breakpoint: body_elsewhere
+PASS: gdb.linespec/break-ask.exp: break twodup relative other
+PASS: gdb.linespec/break-ask.exp: 3
+PASS: gdb.linespec/break-ask.exp: expect breakpoint other
+PASS: gdb.linespec/break-ask.exp: info source other
+PASS: gdb.linespec/break-ask.exp: continue to breakpoint: body_elsewhere other
+Running ./gdb.linespec/linespec.exp ...
+PASS: gdb.linespec/linespec.exp: set multiple-symbols to all for linespec tests
+PASS: gdb.linespec/linespec.exp: single-location break using dir/file:line
+PASS: gdb.linespec/linespec.exp: clear breakpoint using dir/file:line
+PASS: gdb.linespec/linespec.exp: multi-location break using file:line
+PASS: gdb.linespec/linespec.exp: multi-location break using duplicate function name
+PASS: gdb.linespec/linespec.exp: multi-location break using duplicate function name and label
+PASS: gdb.linespec/linespec.exp: complete condition
+PASS: gdb.linespec/linespec.exp: disable pending breakpoints for linespec tests
+PASS: gdb.linespec/linespec.exp: set breakpoint on non-existent function
+PASS: gdb.linespec/linespec.exp: set breakpoint at all instances of NameSpace::overload
+PASS: gdb.linespec/linespec.exp: set breakpoint at lspec.cc instance of NameSpace::overload
+PASS: gdb.linespec/linespec.exp: set breakpoint at non-existent lspec.cc instance of NameSpace::overload
+PASS: gdb.linespec/linespec.exp: set breakpoint at specific instance of NameSpace::overload
+PASS: gdb.linespec/linespec.exp: set breakpoint in body.h
+PASS: gdb.linespec/linespec.exp: set breakpoint in f1
+PASS: gdb.linespec/linespec.exp: add inferior for linespec tests
+PASS: gdb.linespec/linespec.exp: switch to inferior 2 for linespec tests
+PASS: gdb.linespec/linespec.exp: set the new inferior file for linespec tests
+PASS: gdb.linespec/linespec.exp: set breakpoint at main in both inferiors
+Running ./gdb.linespec/ls-dollar.exp ...
+PASS: gdb.linespec/ls-dollar.exp: set listsize 1
+PASS: gdb.linespec/ls-dollar.exp: list $dollar_var
+PASS: gdb.linespec/ls-dollar.exp: break $dollar_func
+Running ./gdb.linespec/ls-errs.exp ...
+PASS: gdb.linespec/ls-errs.exp: set breakpoint pending off
+PASS: gdb.linespec/ls-errs.exp: break :
+PASS: gdb.linespec/ls-errs.exp: break :
+PASS: gdb.linespec/ls-errs.exp: break :
+PASS: gdb.linespec/ls-errs.exp: break :
+PASS: gdb.linespec/ls-errs.exp: break :
+PASS: gdb.linespec/ls-errs.exp: break :
+PASS: gdb.linespec/ls-errs.exp: break :
+PASS: gdb.linespec/ls-errs.exp: break :
+PASS: gdb.linespec/ls-errs.exp: break :
+PASS: gdb.linespec/ls-errs.exp: break -100
+PASS: gdb.linespec/ls-errs.exp: break +500
+PASS: gdb.linespec/ls-errs.exp: break 1000
+PASS: gdb.linespec/ls-errs.exp: break 3:
+PASS: gdb.linespec/ls-errs.exp: break +10:
+PASS: gdb.linespec/ls-errs.exp: break -10:
+PASS: gdb.linespec/ls-errs.exp: break 3:
+PASS: gdb.linespec/ls-errs.exp: break +10:
+PASS: gdb.linespec/ls-errs.exp: break -10:
+PASS: gdb.linespec/ls-errs.exp: break 3 :
+PASS: gdb.linespec/ls-errs.exp: break +10 :
+PASS: gdb.linespec/ls-errs.exp: break -10 :
+PASS: gdb.linespec/ls-errs.exp: break 3 :
+PASS: gdb.linespec/ls-errs.exp: break +10 :
+PASS: gdb.linespec/ls-errs.exp: break -10 :
+PASS: gdb.linespec/ls-errs.exp: break 3 :
+PASS: gdb.linespec/ls-errs.exp: break +10 :
+PASS: gdb.linespec/ls-errs.exp: break -10 :
+PASS: gdb.linespec/ls-errs.exp: break 3 :
+PASS: gdb.linespec/ls-errs.exp: break +10 :
+PASS: gdb.linespec/ls-errs.exp: break -10 :
+PASS: gdb.linespec/ls-errs.exp: break 3 :
+PASS: gdb.linespec/ls-errs.exp: break +10 :
+PASS: gdb.linespec/ls-errs.exp: break -10 :
+PASS: gdb.linespec/ls-errs.exp: break 3 :
+PASS: gdb.linespec/ls-errs.exp: break +10 :
+PASS: gdb.linespec/ls-errs.exp: break -10 :
+PASS: gdb.linespec/ls-errs.exp: break 3 :
+PASS: gdb.linespec/ls-errs.exp: break +10 :
+PASS: gdb.linespec/ls-errs.exp: break -10 :
+PASS: gdb.linespec/ls-errs.exp: break 3 1
+PASS: gdb.linespec/ls-errs.exp: break +10 1
+PASS: gdb.linespec/ls-errs.exp: break -10 1
+PASS: gdb.linespec/ls-errs.exp: break 3 +1
+PASS: gdb.linespec/ls-errs.exp: break +10 +1
+PASS: gdb.linespec/ls-errs.exp: break -10 +1
+PASS: gdb.linespec/ls-errs.exp: break 3 +100
+PASS: gdb.linespec/ls-errs.exp: break +10 +100
+PASS: gdb.linespec/ls-errs.exp: break -10 +100
+PASS: gdb.linespec/ls-errs.exp: break 3 -10
+PASS: gdb.linespec/ls-errs.exp: break +10 -10
+PASS: gdb.linespec/ls-errs.exp: break -10 -10
+PASS: gdb.linespec/ls-errs.exp: break 3 foo
+PASS: gdb.linespec/ls-errs.exp: break +10 foo
+PASS: gdb.linespec/ls-errs.exp: break -10 foo
+PASS: gdb.linespec/ls-errs.exp: break this_file_doesn't_exist.c:3
+PASS: gdb.linespec/ls-errs.exp: break this file has spaces.c:3
+PASS: gdb.linespec/ls-errs.exp: break "file::colons.c":3
+PASS: gdb.linespec/ls-errs.exp: break 'file::colons.c':3
+PASS: gdb.linespec/ls-errs.exp: break "this "file" has quotes.c":3
+PASS: gdb.linespec/ls-errs.exp: break 'this "file" has quotes.c':3
+PASS: gdb.linespec/ls-errs.exp: break 'this 'file' has quotes.c':3
+PASS: gdb.linespec/ls-errs.exp: break "this 'file' has quotes.c":3
+PASS: gdb.linespec/ls-errs.exp: break "spaces: and :colons.c":3
+PASS: gdb.linespec/ls-errs.exp: break 'more: :spaces: :and colons::.c':3
+PASS: gdb.linespec/ls-errs.exp: break "src-file.c':3
+PASS: gdb.linespec/ls-errs.exp: break 'src-file.c:3
+PASS: gdb.linespec/ls-errs.exp: break ls-errs.c
+PASS: gdb.linespec/ls-errs.exp: break ls-errs.c:foo
+PASS: gdb.linespec/ls-errs.exp: break ls-errs.c:main:foo
+PASS: gdb.linespec/ls-errs.exp: break ls-errs.c: foo
+PASS: gdb.linespec/ls-errs.exp: break ls-errs.c:main: foo
+PASS: gdb.linespec/ls-errs.exp: break ls-errs.c: foo
+PASS: gdb.linespec/ls-errs.exp: break ls-errs.c:main: foo
+PASS: gdb.linespec/ls-errs.exp: break ls-errs.c:
+PASS: gdb.linespec/ls-errs.exp: break ls-errs.c:main:
+PASS: gdb.linespec/ls-errs.exp: break ls-errs.c:
+PASS: gdb.linespec/ls-errs.exp: break ls-errs.c:main:
+PASS: gdb.linespec/ls-errs.exp: break ls-errs.c :
+PASS: gdb.linespec/ls-errs.exp: break ls-errs.c:main :
+PASS: gdb.linespec/ls-errs.exp: break ls-errs.c :
+PASS: gdb.linespec/ls-errs.exp: break ls-errs.c:main :
+PASS: gdb.linespec/ls-errs.exp: break ls-errs.c :
+PASS: gdb.linespec/ls-errs.exp: break ls-errs.c:main :
+PASS: gdb.linespec/ls-errs.exp: break ls-errs.c :
+PASS: gdb.linespec/ls-errs.exp: break ls-errs.c:main :
+PASS: gdb.linespec/ls-errs.exp: break ls-errs.c :
+PASS: gdb.linespec/ls-errs.exp: break ls-errs.c:main :
+PASS: gdb.linespec/ls-errs.exp: break ls-errs.c :
+PASS: gdb.linespec/ls-errs.exp: break ls-errs.c:main :
+PASS: gdb.linespec/ls-errs.exp: break ls-errs.c :
+PASS: gdb.linespec/ls-errs.exp: break ls-errs.c:main :
+PASS: gdb.linespec/ls-errs.exp: break ls-errs.c::
+PASS: gdb.linespec/ls-errs.exp: break ls-errs.c:3 1
+PASS: gdb.linespec/ls-errs.exp: break ls-errs.c:3 +100
+PASS: gdb.linespec/ls-errs.exp: break ls-errs.c:3 -100
+PASS: gdb.linespec/ls-errs.exp: break ls-errs.c:3 foo
+PASS: gdb.linespec/ls-errs.exp: break ls-errs.c:-100
+PASS: gdb.linespec/ls-errs.exp: break "ls-errs.c:-100"
+PASS: gdb.linespec/ls-errs.exp: break 'ls-errs.c:-100'
+PASS: gdb.linespec/ls-errs.exp: break ls-errs.c:+500
+PASS: gdb.linespec/ls-errs.exp: break "ls-errs.c:+500"
+PASS: gdb.linespec/ls-errs.exp: break 'ls-errs.c:+500'
+PASS: gdb.linespec/ls-errs.exp: break ls-errs.c:1000
+PASS: gdb.linespec/ls-errs.exp: break "ls-errs.c:1000"
+PASS: gdb.linespec/ls-errs.exp: break 'ls-errs.c:1000'
+PASS: gdb.linespec/ls-errs.exp: break foobar
+PASS: gdb.linespec/ls-errs.exp: break foo::bar
+PASS: gdb.linespec/ls-errs.exp: break foo.bar
+PASS: gdb.linespec/ls-errs.exp: break foo .
+PASS: gdb.linespec/ls-errs.exp: break foo bar
+PASS: gdb.linespec/ls-errs.exp: break foo 1
+PASS: gdb.linespec/ls-errs.exp: break foo 0
+PASS: gdb.linespec/ls-errs.exp: break foo +10
+PASS: gdb.linespec/ls-errs.exp: break foo -10
+PASS: gdb.linespec/ls-errs.exp: break foo +100
+PASS: gdb.linespec/ls-errs.exp: break foo -100
+PASS: gdb.linespec/ls-errs.exp: break main:there
+PASS: gdb.linespec/ls-errs.exp: break main:here:
+PASS: gdb.linespec/ls-errs.exp: break main: there
+PASS: gdb.linespec/ls-errs.exp: break main:here:
+PASS: gdb.linespec/ls-errs.exp: break main :there
+PASS: gdb.linespec/ls-errs.exp: break main:here :
+PASS: gdb.linespec/ls-errs.exp: break main : there
+PASS: gdb.linespec/ls-errs.exp: break main:here :
+PASS: gdb.linespec/ls-errs.exp: break main : there
+PASS: gdb.linespec/ls-errs.exp: break main:here :
+PASS: gdb.linespec/ls-errs.exp: break main : there
+PASS: gdb.linespec/ls-errs.exp: break main:here :
+PASS: gdb.linespec/ls-errs.exp: break main : there
+PASS: gdb.linespec/ls-errs.exp: break main:here :
+PASS: gdb.linespec/ls-errs.exp: break main : there
+PASS: gdb.linespec/ls-errs.exp: break main:here :
+PASS: gdb.linespec/ls-errs.exp: break main : there
+PASS: gdb.linespec/ls-errs.exp: break main:here :
+PASS: gdb.linespec/ls-errs.exp: break main 3
+PASS: gdb.linespec/ls-errs.exp: break main +100
+PASS: gdb.linespec/ls-errs.exp: break main -100
+PASS: gdb.linespec/ls-errs.exp: break main foo
+PASS: gdb.linespec/ls-errs.exp: break main:here 3
+PASS: gdb.linespec/ls-errs.exp: break main:here +100
+PASS: gdb.linespec/ls-errs.exp: break main:here -100
+PASS: gdb.linespec/ls-errs.exp: break main:here foo
+PASS: gdb.linespec/ls-errs.exp: break if
+PASS: gdb.linespec/ls-errs.exp: break task
+PASS: gdb.linespec/ls-errs.exp: break thread
+PASS: gdb.linespec/ls-errs.exp: break 'main.c'flubber
+PASS: gdb.linespec/ls-errs.exp: break 'main.c',21
+PASS: gdb.linespec/ls-errs.exp: break 'main.c'
+PASS: gdb.linespec/ls-errs.exp: break 'main.c'3
+PASS: gdb.linespec/ls-errs.exp: break 'main.c'+3
+PASS: gdb.linespec/ls-errs.exp: break $zippo
+PASS: gdb.linespec/ls-errs.exp: break ls-errs.c:$zippo
+Running ./gdb.linespec/macro-relative.exp ...
+FAIL: gdb.linespec/macro-relative.exp: info macro HEADER
+Running ./gdb.linespec/skip-two.exp ...
+PASS: gdb.linespec/skip-two.exp: skip function dupname
+PASS: gdb.linespec/skip-two.exp: dupname ignored from main
+PASS: gdb.linespec/skip-two.exp: continue to breakpoint: n
+PASS: gdb.linespec/skip-two.exp: dupname ignored from n
+PASS: gdb.linespec/skip-two.exp: skip delete 1
+PASS: gdb.linespec/skip-two.exp: skip file thefile.cc
+PASS: gdb.linespec/skip-two.exp: step into dupname
+PASS: gdb.linespec/skip-two.exp: finish from dupname
+PASS: gdb.linespec/skip-two.exp: dupname ignored for thefile.cc
+Running ./gdb.linespec/thread.exp ...
+PASS: gdb.linespec/thread.exp: breakpoint line number in file
+PASS: gdb.linespec/thread.exp: continue to breakpoint: 29
+PASS: gdb.linespec/thread.exp: setting breakpoint at thread
+PASS: gdb.linespec/thread.exp: continue to breakpoint: thread function
+Running ./gdb.mi/dw2-ref-missing-frame.exp ...
+gdb compile failed, /usr/x86_64-pc-linux-gnu/x86_64-cros-linux-gnu/binutils-bin/2.22/ld.gold.real: internal error in output_address, at /var/tmp/portage/cross-x86_64-cros-linux-gnu/binutils-2.22-r20/work/binutils-2.22/gold/output.cc:3019
+collect2: error: ld returned 1 exit status
+Running ./gdb.mi/gdb2549.exp ...
+PASS: gdb.mi/gdb2549.exp: wrong arguments
+PASS: gdb.mi/gdb2549.exp: no executable
+PASS: gdb.mi/gdb2549.exp: breakpoint at main
+PASS: gdb.mi/gdb2549.exp: mi runto main
+PASS: gdb.mi/gdb2549.exp: register values x
+PASS: gdb.mi/gdb2549.exp: register values f
+PASS: gdb.mi/gdb2549.exp: register values d
+PASS: gdb.mi/gdb2549.exp: register values o
+PASS: gdb.mi/gdb2549.exp: register values t
+Running ./gdb.mi/gdb669.exp ...
+PASS: gdb.mi/gdb669.exp: successfully compiled posix threads test case
+PASS: gdb.mi/gdb669.exp: breakpoint at main
+PASS: gdb.mi/gdb669.exp: mi runto main
+PASS: gdb.mi/gdb669.exp: -thread-list-ids (at main)
+PASS: gdb.mi/gdb669.exp: info threads (at main)
+PASS: gdb.mi/gdb669.exp: finding MI result string (at main)
+PASS: gdb.mi/gdb669.exp: finding number of threads in MI output (at main)
+PASS: gdb.mi/gdb669.exp: got number of threads from MI (at main)
+PASS: gdb.mi/gdb669.exp: console and MI have same number of threads (at main)
+PASS: gdb.mi/gdb669.exp: -thread_list_ids (at main)
+PASS: gdb.mi/gdb669.exp: finding threads in MI output (at main)
+PASS: gdb.mi/gdb669.exp: MI and console have same threads (at main)
+PASS: gdb.mi/gdb669.exp: next, try 0
+PASS: gdb.mi/gdb669.exp: -thread-list-ids (try 0)
+PASS: gdb.mi/gdb669.exp: info threads (try 0)
+PASS: gdb.mi/gdb669.exp: finding MI result string (try 0)
+PASS: gdb.mi/gdb669.exp: finding number of threads in MI output (try 0)
+PASS: gdb.mi/gdb669.exp: got number of threads from MI (try 0)
+PASS: gdb.mi/gdb669.exp: console and MI have same number of threads (try 0)
+PASS: gdb.mi/gdb669.exp: -thread_list_ids (try 0)
+PASS: gdb.mi/gdb669.exp: finding threads in MI output (try 0)
+PASS: gdb.mi/gdb669.exp: MI and console have same threads (try 0)
+PASS: gdb.mi/gdb669.exp: next, try 1
+PASS: gdb.mi/gdb669.exp: -thread-list-ids (try 1)
+PASS: gdb.mi/gdb669.exp: info threads (try 1)
+PASS: gdb.mi/gdb669.exp: finding MI result string (try 1)
+PASS: gdb.mi/gdb669.exp: finding number of threads in MI output (try 1)
+PASS: gdb.mi/gdb669.exp: got number of threads from MI (try 1)
+PASS: gdb.mi/gdb669.exp: console and MI have same number of threads (try 1)
+PASS: gdb.mi/gdb669.exp: -thread_list_ids (try 1)
+PASS: gdb.mi/gdb669.exp: finding threads in MI output (try 1)
+PASS: gdb.mi/gdb669.exp: MI and console have same threads (try 1)
+PASS: gdb.mi/gdb669.exp: next, try 2
+PASS: gdb.mi/gdb669.exp: -thread-list-ids (try 2)
+PASS: gdb.mi/gdb669.exp: info threads (try 2)
+PASS: gdb.mi/gdb669.exp: finding MI result string (try 2)
+PASS: gdb.mi/gdb669.exp: finding number of threads in MI output (try 2)
+PASS: gdb.mi/gdb669.exp: got number of threads from MI (try 2)
+PASS: gdb.mi/gdb669.exp: console and MI have same number of threads (try 2)
+PASS: gdb.mi/gdb669.exp: -thread_list_ids (try 2)
+PASS: gdb.mi/gdb669.exp: finding threads in MI output (try 2)
+PASS: gdb.mi/gdb669.exp: MI and console have same threads (try 2)
+PASS: gdb.mi/gdb669.exp: next, try 3
+PASS: gdb.mi/gdb669.exp: -thread-list-ids (try 3)
+PASS: gdb.mi/gdb669.exp: info threads (try 3)
+PASS: gdb.mi/gdb669.exp: finding MI result string (try 3)
+PASS: gdb.mi/gdb669.exp: finding number of threads in MI output (try 3)
+PASS: gdb.mi/gdb669.exp: got number of threads from MI (try 3)
+PASS: gdb.mi/gdb669.exp: console and MI have same number of threads (try 3)
+PASS: gdb.mi/gdb669.exp: -thread_list_ids (try 3)
+PASS: gdb.mi/gdb669.exp: finding threads in MI output (try 3)
+PASS: gdb.mi/gdb669.exp: MI and console have same threads (try 3)
+Running ./gdb.mi/gdb680.exp ...
+PASS: gdb.mi/gdb680.exp: -data-list-register-names -1, try 0
+PASS: gdb.mi/gdb680.exp: -data-list-register-names -1, try 1
+PASS: gdb.mi/gdb680.exp: -data-list-register-names -1, try 2
+PASS: gdb.mi/gdb680.exp: -data-list-register-names -1, try 3
+PASS: gdb.mi/gdb680.exp: -data-list-register-names -1, try 4
+Running ./gdb.mi/gdb701.exp ...
+PASS: gdb.mi/gdb701.exp: breakpoint at main
+PASS: gdb.mi/gdb701.exp: mi runto main
+PASS: gdb.mi/gdb701.exp: step over "foo = 0"
+PASS: gdb.mi/gdb701.exp: create fooPtr
+PASS: gdb.mi/gdb701.exp: list children of fooPtr
+PASS: gdb.mi/gdb701.exp: list children of fooPtr.x
+PASS: gdb.mi/gdb701.exp: list children of fooPtr.y
+PASS: gdb.mi/gdb701.exp: list children of fooPtr.z
+Running ./gdb.mi/gdb792.exp ...
+PASS: gdb.mi/gdb792.exp: breakpoint at main
+PASS: gdb.mi/gdb792.exp: mi runto main
+PASS: gdb.mi/gdb792.exp: create var for class A
+PASS: gdb.mi/gdb792.exp: list children of class A
+PASS: gdb.mi/gdb792.exp: list children of A.public
+PASS: gdb.mi/gdb792.exp: list children of A.private
+PASS: gdb.mi/gdb792.exp: list children of A.protected
+PASS: gdb.mi/gdb792.exp: list children of A.protected.b
+PASS: gdb.mi/gdb792.exp: list children of A.protected.b.public
+PASS: gdb.mi/gdb792.exp: list children of A.protected.b.private
+PASS: gdb.mi/gdb792.exp: create var for class C which has baseclass A
+PASS: gdb.mi/gdb792.exp: list children of class C
+Running ./gdb.mi/mi2-amd64-entry-value.exp ...
+PASS: gdb.mi/mi2-amd64-entry-value.exp: break different
+PASS: gdb.mi/mi2-amd64-entry-value.exp: break breakhere_different
+PASS: gdb.mi/mi2-amd64-entry-value.exp: break breakhere_validity
+PASS: gdb.mi/mi2-amd64-entry-value.exp: break breakhere_invalid
+PASS: gdb.mi/mi2-amd64-entry-value.exp: breakpoint at main
+PASS: gdb.mi/mi2-amd64-entry-value.exp: mi runto main
+PASS: gdb.mi/mi2-amd64-entry-value.exp: no: set print entry-values
+PASS: gdb.mi/mi2-amd64-entry-value.exp: no: entry_equal: stop
+PASS: gdb.mi/mi2-amd64-entry-value.exp: no: entry_equal: -stack-list-variables
+PASS: gdb.mi/mi2-amd64-entry-value.exp: no: entry_different: stop
+PASS: gdb.mi/mi2-amd64-entry-value.exp: no: entry_different: -stack-list-variables
+PASS: gdb.mi/mi2-amd64-entry-value.exp: no: validity: stop
+PASS: gdb.mi/mi2-amd64-entry-value.exp: no: validity: -stack-list-variables
+PASS: gdb.mi/mi2-amd64-entry-value.exp: no: invalid: stop
+PASS: gdb.mi/mi2-amd64-entry-value.exp: no: invalid: -stack-list-variables
+PASS: gdb.mi/mi2-amd64-entry-value.exp: breakpoint at main
+PASS: gdb.mi/mi2-amd64-entry-value.exp: mi runto main
+PASS: gdb.mi/mi2-amd64-entry-value.exp: only: set print entry-values
+FAIL: gdb.mi/mi2-amd64-entry-value.exp: only: entry_equal: stop (stopped at wrong place)
+FAIL: gdb.mi/mi2-amd64-entry-value.exp: only: entry_equal: -stack-list-variables
+FAIL: gdb.mi/mi2-amd64-entry-value.exp: only: entry_different: stop (stopped at wrong place)
+FAIL: gdb.mi/mi2-amd64-entry-value.exp: only: entry_different: -stack-list-variables
+FAIL: gdb.mi/mi2-amd64-entry-value.exp: only: validity: stop (stopped at wrong place)
+FAIL: gdb.mi/mi2-amd64-entry-value.exp: only: validity: -stack-list-variables
+PASS: gdb.mi/mi2-amd64-entry-value.exp: only: invalid: stop
+PASS: gdb.mi/mi2-amd64-entry-value.exp: only: invalid: -stack-list-variables
+PASS: gdb.mi/mi2-amd64-entry-value.exp: breakpoint at main
+PASS: gdb.mi/mi2-amd64-entry-value.exp: mi runto main
+PASS: gdb.mi/mi2-amd64-entry-value.exp: preferred: set print entry-values
+FAIL: gdb.mi/mi2-amd64-entry-value.exp: preferred: entry_equal: stop (stopped at wrong place)
+FAIL: gdb.mi/mi2-amd64-entry-value.exp: preferred: entry_equal: -stack-list-variables
+FAIL: gdb.mi/mi2-amd64-entry-value.exp: preferred: entry_different: stop (stopped at wrong place)
+FAIL: gdb.mi/mi2-amd64-entry-value.exp: preferred: entry_different: -stack-list-variables
+FAIL: gdb.mi/mi2-amd64-entry-value.exp: preferred: validity: stop (stopped at wrong place)
+FAIL: gdb.mi/mi2-amd64-entry-value.exp: preferred: validity: -stack-list-variables
+PASS: gdb.mi/mi2-amd64-entry-value.exp: preferred: invalid: stop
+PASS: gdb.mi/mi2-amd64-entry-value.exp: preferred: invalid: -stack-list-variables
+PASS: gdb.mi/mi2-amd64-entry-value.exp: breakpoint at main
+PASS: gdb.mi/mi2-amd64-entry-value.exp: mi runto main
+PASS: gdb.mi/mi2-amd64-entry-value.exp: if-needed: set print entry-values
+PASS: gdb.mi/mi2-amd64-entry-value.exp: if-needed: entry_equal: stop
+PASS: gdb.mi/mi2-amd64-entry-value.exp: if-needed: entry_equal: -stack-list-variables
+PASS: gdb.mi/mi2-amd64-entry-value.exp: if-needed: entry_different: stop
+PASS: gdb.mi/mi2-amd64-entry-value.exp: if-needed: entry_different: -stack-list-variables
+FAIL: gdb.mi/mi2-amd64-entry-value.exp: if-needed: validity: stop (stopped at wrong place)
+FAIL: gdb.mi/mi2-amd64-entry-value.exp: if-needed: validity: -stack-list-variables
+PASS: gdb.mi/mi2-amd64-entry-value.exp: if-needed: invalid: stop
+PASS: gdb.mi/mi2-amd64-entry-value.exp: if-needed: invalid: -stack-list-variables
+PASS: gdb.mi/mi2-amd64-entry-value.exp: breakpoint at main
+PASS: gdb.mi/mi2-amd64-entry-value.exp: mi runto main
+PASS: gdb.mi/mi2-amd64-entry-value.exp: both: set print entry-values
+FAIL: gdb.mi/mi2-amd64-entry-value.exp: both: entry_equal: stop (stopped at wrong place)
+FAIL: gdb.mi/mi2-amd64-entry-value.exp: both: entry_equal: -stack-list-variables
+FAIL: gdb.mi/mi2-amd64-entry-value.exp: both: entry_different: stop (stopped at wrong place)
+FAIL: gdb.mi/mi2-amd64-entry-value.exp: both: entry_different: -stack-list-variables
+FAIL: gdb.mi/mi2-amd64-entry-value.exp: both: validity: stop (stopped at wrong place)
+FAIL: gdb.mi/mi2-amd64-entry-value.exp: both: validity: -stack-list-variables
+PASS: gdb.mi/mi2-amd64-entry-value.exp: both: invalid: stop
+PASS: gdb.mi/mi2-amd64-entry-value.exp: both: invalid: -stack-list-variables
+PASS: gdb.mi/mi2-amd64-entry-value.exp: breakpoint at main
+PASS: gdb.mi/mi2-amd64-entry-value.exp: mi runto main
+PASS: gdb.mi/mi2-amd64-entry-value.exp: compact: set print entry-values
+FAIL: gdb.mi/mi2-amd64-entry-value.exp: compact: entry_equal: stop (stopped at wrong place)
+FAIL: gdb.mi/mi2-amd64-entry-value.exp: compact: entry_equal: -stack-list-variables
+FAIL: gdb.mi/mi2-amd64-entry-value.exp: compact: entry_different: stop (stopped at wrong place)
+FAIL: gdb.mi/mi2-amd64-entry-value.exp: compact: entry_different: -stack-list-variables
+FAIL: gdb.mi/mi2-amd64-entry-value.exp: compact: validity: stop (stopped at wrong place)
+FAIL: gdb.mi/mi2-amd64-entry-value.exp: compact: validity: -stack-list-variables
+PASS: gdb.mi/mi2-amd64-entry-value.exp: compact: invalid: stop
+PASS: gdb.mi/mi2-amd64-entry-value.exp: compact: invalid: -stack-list-variables
+PASS: gdb.mi/mi2-amd64-entry-value.exp: breakpoint at main
+PASS: gdb.mi/mi2-amd64-entry-value.exp: mi runto main
+PASS: gdb.mi/mi2-amd64-entry-value.exp: default: set print entry-values
+FAIL: gdb.mi/mi2-amd64-entry-value.exp: default: entry_equal: stop (stopped at wrong place)
+FAIL: gdb.mi/mi2-amd64-entry-value.exp: default: entry_equal: -stack-list-variables
+FAIL: gdb.mi/mi2-amd64-entry-value.exp: default: entry_different: stop (stopped at wrong place)
+FAIL: gdb.mi/mi2-amd64-entry-value.exp: default: entry_different: -stack-list-variables
+FAIL: gdb.mi/mi2-amd64-entry-value.exp: default: validity: stop (stopped at wrong place)
+FAIL: gdb.mi/mi2-amd64-entry-value.exp: default: validity: -stack-list-variables
+PASS: gdb.mi/mi2-amd64-entry-value.exp: default: invalid: stop
+PASS: gdb.mi/mi2-amd64-entry-value.exp: default: invalid: -stack-list-variables
+Running ./gdb.mi/mi2-prompt.exp ...
+PASS: gdb.mi/mi2-prompt.exp: console set prompt
+PASS: gdb.mi/mi2-prompt.exp: -break-list
+PASS: gdb.mi/mi2-prompt.exp: set prompt (banana)
+PASS: gdb.mi/mi2-prompt.exp: interpreter-exec mi -break-list
+Running ./gdb.mi/mi2-var-child.exp ...
+PASS: gdb.mi/mi2-var-child.exp: breakpoint at do_children_tests
+PASS: gdb.mi/mi2-var-child.exp: mi runto do_children_tests
+PASS: gdb.mi/mi2-var-child.exp: run to 237 (set breakpoint)
+PASS: gdb.mi/mi2-var-child.exp: create local variable struct_declarations
+PASS: gdb.mi/mi2-var-child.exp: get children of struct_declarations
+PASS: gdb.mi/mi2-var-child.exp: get number of children of struct_declarations
+PASS: gdb.mi/mi2-var-child.exp: get children of struct_declarations.integer
+PASS: gdb.mi/mi2-var-child.exp: get number of children of struct_declarations.integer
+PASS: gdb.mi/mi2-var-child.exp: get children of struct_declarations.character
+PASS: gdb.mi/mi2-var-child.exp: get number of children of struct_declarations.character
+PASS: gdb.mi/mi2-var-child.exp: get children of struct_declarations.char_ptr
+PASS: gdb.mi/mi2-var-child.exp: get number of children of struct_declarations.char_ptr
+PASS: gdb.mi/mi2-var-child.exp: get children of struct_declarations.long_int
+PASS: gdb.mi/mi2-var-child.exp: get number of children of struct_declarations.long_int
+PASS: gdb.mi/mi2-var-child.exp: get children of struct_declarations.int_ptr_ptr
+PASS: gdb.mi/mi2-var-child.exp: get number of children of struct_declarations.int_ptr_ptr
+PASS: gdb.mi/mi2-var-child.exp: get children of struct_declarations.long_array
+PASS: gdb.mi/mi2-var-child.exp: get number of children of struct_declarations.long_array
+PASS: gdb.mi/mi2-var-child.exp: get children of struct_declarations.func_ptr
+PASS: gdb.mi/mi2-var-child.exp: get number of children of struct_declarations.func_ptr
+PASS: gdb.mi/mi2-var-child.exp: get children of struct_declarations.func_ptr_struct
+PASS: gdb.mi/mi2-var-child.exp: get number of children of struct_declarations.func_ptr_struct
+PASS: gdb.mi/mi2-var-child.exp: get children of struct_declarations.func_ptr_ptr
+PASS: gdb.mi/mi2-var-child.exp: get number of children of struct_declarations.func_ptr_ptr
+PASS: gdb.mi/mi2-var-child.exp: get children of struct_declarations.u1
+PASS: gdb.mi/mi2-var-child.exp: get number of children of struct_declarations.u1
+PASS: gdb.mi/mi2-var-child.exp: get children of struct_declarations.s2
+PASS: gdb.mi/mi2-var-child.exp: get number of children of struct_declarations.s2
+PASS: gdb.mi/mi2-var-child.exp: get children of struct_declarations.long_array.1
+PASS: gdb.mi/mi2-var-child.exp: get number of children of struct_declarations.long_array.1
+PASS: gdb.mi/mi2-var-child.exp: get children of struct_declarations.long_array.2
+PASS: gdb.mi/mi2-var-child.exp: get number of children of struct_declarations.long_array.2
+PASS: gdb.mi/mi2-var-child.exp: get children of struct_declarations.long_array.3
+PASS: gdb.mi/mi2-var-child.exp: get number of children of struct_declarations.long_array.3
+PASS: gdb.mi/mi2-var-child.exp: get children of struct_declarations.long_array.4
+PASS: gdb.mi/mi2-var-child.exp: get number of children of struct_declarations.long_array.4
+PASS: gdb.mi/mi2-var-child.exp: get children of struct_declarations.long_array.5
+PASS: gdb.mi/mi2-var-child.exp: get number of children of struct_declarations.long_array.5
+PASS: gdb.mi/mi2-var-child.exp: get children of struct_declarations.long_array.6
+PASS: gdb.mi/mi2-var-child.exp: get number of children of struct_declarations.long_array.6
+PASS: gdb.mi/mi2-var-child.exp: get children of struct_declarations.long_array.7
+PASS: gdb.mi/mi2-var-child.exp: get number of children of struct_declarations.long_array.7
+PASS: gdb.mi/mi2-var-child.exp: get children of struct_declarations.long_array.8
+PASS: gdb.mi/mi2-var-child.exp: get number of children of struct_declarations.long_array.8
+PASS: gdb.mi/mi2-var-child.exp: get children of struct_declarations.long_array.9
+PASS: gdb.mi/mi2-var-child.exp: get number of children of struct_declarations.long_array.9
+PASS: gdb.mi/mi2-var-child.exp: get children of struct_declarations.u1.a
+PASS: gdb.mi/mi2-var-child.exp: get number of children of struct_declarations.u1.a
+PASS: gdb.mi/mi2-var-child.exp: get children of struct_declarations.u1.b
+PASS: gdb.mi/mi2-var-child.exp: get number of children of struct_declarations.u1.b
+PASS: gdb.mi/mi2-var-child.exp: get children of struct_declarations.u1.c
+PASS: gdb.mi/mi2-var-child.exp: get number of children of struct_declarations.u1.c
+PASS: gdb.mi/mi2-var-child.exp: get children of struct_declarations.u1.d
+PASS: gdb.mi/mi2-var-child.exp: get number of children of struct_declarations.u1.d
+PASS: gdb.mi/mi2-var-child.exp: get children of struct_declarations.s2.u2
+PASS: gdb.mi/mi2-var-child.exp: get number of children of struct_declarations.s2.u2
+PASS: gdb.mi/mi2-var-child.exp: get children of struct_declarations.s2.g
+PASS: gdb.mi/mi2-var-child.exp: get number of children of struct_declarations.s2.g
+PASS: gdb.mi/mi2-var-child.exp: get children of struct_declarations.s2.h
+PASS: gdb.mi/mi2-var-child.exp: get number of children of struct_declarations.s2.h
+PASS: gdb.mi/mi2-var-child.exp: get children of struct_declarations.s2.i
+PASS: gdb.mi/mi2-var-child.exp: get number of children of struct_declarations.s2.i
+PASS: gdb.mi/mi2-var-child.exp: get children of struct_declarations.s2.u2.u1s1
+PASS: gdb.mi/mi2-var-child.exp: get number of children of struct_declarations.s2.u2.u1s1
+PASS: gdb.mi/mi2-var-child.exp: get children of struct_declarations.s2.u2.f
+PASS: gdb.mi/mi2-var-child.exp: get number of children of struct_declarations.s2.u2.f
+PASS: gdb.mi/mi2-var-child.exp: get children of struct_declarations.s2.u2.u1s2
+PASS: gdb.mi/mi2-var-child.exp: get number of children of struct_declarations.s2.u2.u1s2
+PASS: gdb.mi/mi2-var-child.exp: get children of struct_declarations.s2.u2.u1s1.d
+PASS: gdb.mi/mi2-var-child.exp: get number of children of struct_declarations.s2.u2.u1s1.d
+PASS: gdb.mi/mi2-var-child.exp: get children of struct_declarations.s2.u2.u1s1.e
+PASS: gdb.mi/mi2-var-child.exp: get number of children of struct_declarations.s2.u2.u1s1.e
+PASS: gdb.mi/mi2-var-child.exp: get children of struct_declarations.s2.u2.u1s1.func
+PASS: gdb.mi/mi2-var-child.exp: get number of children of struct_declarations.s2.u2.u1s1.func
+PASS: gdb.mi/mi2-var-child.exp: get children of struct_declarations.s2.u2.u1s1.foo
+PASS: gdb.mi/mi2-var-child.exp: get number of children of struct_declarations.s2.u2.u1s1.foo
+PASS: gdb.mi/mi2-var-child.exp: get children of struct_declarations.s2.u2.u1s2.array_ptr
+PASS: gdb.mi/mi2-var-child.exp: get number of children of struct_declarations.s2.u2.u1s2.array_ptr
+PASS: gdb.mi/mi2-var-child.exp: get children of struct_declarations.s2.u2.u1s2.func
+PASS: gdb.mi/mi2-var-child.exp: get number of children of struct_declarations.s2.u2.u1s2.func
+PASS: gdb.mi/mi2-var-child.exp: get children of struct_declarations.int_ptr_ptr.*int_ptr_ptr
+PASS: gdb.mi/mi2-var-child.exp: get number of children of struct_declarations.int_ptr_ptr.*int_ptr_ptr
+PASS: gdb.mi/mi2-var-child.exp: step to line $line_dct_123
+PASS: gdb.mi/mi2-var-child.exp: create local variable weird
+PASS: gdb.mi/mi2-var-child.exp: get children of weird
+PASS: gdb.mi/mi2-var-child.exp: get number of children of weird
+PASS: gdb.mi/mi2-var-child.exp: get children of weird.long_array
+PASS: gdb.mi/mi2-var-child.exp: get number of children of weird.long_array
+PASS: gdb.mi/mi2-var-child.exp: get children of weird.int_ptr_ptr
+PASS: gdb.mi/mi2-var-child.exp: get number of children of weird.int_ptr_ptr
+PASS: gdb.mi/mi2-var-child.exp: get children of weird.int_ptr_ptr.*int_ptr_ptr
+PASS: gdb.mi/mi2-var-child.exp: get number of children of weird.int_ptr_ptr.*int_ptr_ptr
+PASS: gdb.mi/mi2-var-child.exp: create local variable weird->int_ptr_ptr
+PASS: gdb.mi/mi2-var-child.exp: get children of weird->int_ptr_ptr
+PASS: gdb.mi/mi2-var-child.exp: get number of children of weird->int_ptr_ptr
+PASS: gdb.mi/mi2-var-child.exp: get children of weird->int_ptr_ptr.*weird->int_ptr_ptr
+PASS: gdb.mi/mi2-var-child.exp: get number of children of weird->int_ptr_ptr.*weird->int_ptr_ptr
+PASS: gdb.mi/mi2-var-child.exp: get children of weird->int_ptr_ptr.*weird->int_ptr_ptr.**weird->int_ptr_ptr
+PASS: gdb.mi/mi2-var-child.exp: get number of children of weird->int_ptr_ptr.*weird->int_ptr_ptr.**weird->int_ptr_ptr
+PASS: gdb.mi/mi2-var-child.exp: is weird editable
+PASS: gdb.mi/mi2-var-child.exp: is weird->int_ptr_ptr editable
+PASS: gdb.mi/mi2-var-child.exp: is weird.int_ptr_ptr.*int_ptr_ptr editable
+PASS: gdb.mi/mi2-var-child.exp: is weird.int_ptr_ptr.*int_ptr_ptr.**int_ptr_ptr editable
+PASS: gdb.mi/mi2-var-child.exp: is weird.u1 editable
+PASS: gdb.mi/mi2-var-child.exp: is weird.s2 editable
+PASS: gdb.mi/mi2-var-child.exp: is struct_declarations.u1.a editable
+PASS: gdb.mi/mi2-var-child.exp: is struct_declarations.u1.b editable
+PASS: gdb.mi/mi2-var-child.exp: is struct_declarations.u1.c editable
+PASS: gdb.mi/mi2-var-child.exp: is struct_declarations.long_array editable
+PASS: gdb.mi/mi2-var-child.exp: is struct_declarations.long_array.0 editable
+PASS: gdb.mi/mi2-var-child.exp: is struct_declarations editable
+PASS: gdb.mi/mi2-var-child.exp: delete var weird
+PASS: gdb.mi/mi2-var-child.exp: update all vars. None changed
+PASS: gdb.mi/mi2-var-child.exp: step $line_dct_123 + 1
+PASS: gdb.mi/mi2-var-child.exp: update all vars struct_declarations.integer
+PASS: gdb.mi/mi2-var-child.exp: step $line_dct_123 + 4
+PASS: gdb.mi/mi2-var-child.exp: update all vars struct_declarations.char_ptr
+PASS: gdb.mi/mi2-var-child.exp: step $line_dct_123 + 5
+PASS: gdb.mi/mi2-var-child.exp: update all vars int_ptr_ptr and children changed
+PASS: gdb.mi/mi2-var-child.exp: step $line_dct_123 + 6
+PASS: gdb.mi/mi2-var-child.exp: update all vars struct_declarations.long_array.0 changed
+PASS: gdb.mi/mi2-var-child.exp: step $line_dct_123 + 7
+PASS: gdb.mi/mi2-var-child.exp: update all vars struct_declarations.long_array.1 changed
+PASS: gdb.mi/mi2-var-child.exp: step $line_dct_123 + 8
+PASS: gdb.mi/mi2-var-child.exp: update all vars struct_declarations.long_array.2 changed
+PASS: gdb.mi/mi2-var-child.exp: step $line_dct_nothing
+PASS: gdb.mi/mi2-var-child.exp: update all vars struct_declarations.long_array.3-9 changed
+PASS: gdb.mi/mi2-var-child.exp: step $line_dct_a0_0
+PASS: gdb.mi/mi2-var-child.exp: update all vars struct_declarations.func_ptr changed
+PASS: gdb.mi/mi2-var-child.exp: delete var struct_declarations
+PASS: gdb.mi/mi2-var-child.exp: delete var weird->int_ptr_ptr
+PASS: gdb.mi/mi2-var-child.exp: step $line_dct_snp0 + 1
+PASS: gdb.mi/mi2-var-child.exp: create local variable psnp->char_ptr
+PASS: gdb.mi/mi2-var-child.exp: get children of psnp->char_ptr
+PASS: gdb.mi/mi2-var-child.exp: get number of children of psnp->char_ptr
+PASS: gdb.mi/mi2-var-child.exp: get children of psnp->char_ptr.*psnp->char_ptr
+PASS: gdb.mi/mi2-var-child.exp: get number of children of psnp->char_ptr.*psnp->char_ptr
+PASS: gdb.mi/mi2-var-child.exp: get children of psnp->char_ptr.*psnp->char_ptr.**psnp->char_ptr
+PASS: gdb.mi/mi2-var-child.exp: get children of psnp->char_ptr.*psnp->char_ptr.**psnp->char_ptr.***psnp->char_ptr
+PASS: gdb.mi/mi2-var-child.exp: get number of children of psnp->char_ptr.*psnp->char_ptr.**psnp->char_ptr
+PASS: gdb.mi/mi2-var-child.exp: get children of psnp->char_ptr.*psnp->char_ptr.**psnp->char_ptr.***psnp->char_ptr
+PASS: gdb.mi/mi2-var-child.exp: get number of children of psnp->char_ptr.*psnp->char_ptr.**psnp->char_ptr.***psnp->char_ptr
+PASS: gdb.mi/mi2-var-child.exp: get children of psnp->char_ptr.*psnp->char_ptr.**psnp->char_ptr.***psnp->char_ptr.****psnp->char_ptr
+PASS: gdb.mi/mi2-var-child.exp: get number of children of psnp->char_ptr.*psnp->char_ptr.**psnp->char_ptr.***psnp->char_ptr.****psnp->char_ptr
+PASS: gdb.mi/mi2-var-child.exp: create local variable psnp->long_ptr
+PASS: gdb.mi/mi2-var-child.exp: get children of psnp->long_ptr
+PASS: gdb.mi/mi2-var-child.exp: get number of children of psnp->long_ptr
+PASS: gdb.mi/mi2-var-child.exp: get children of psnp->long_ptr.*psnp->long_ptr
+PASS: gdb.mi/mi2-var-child.exp: get number of children of psnp->long_ptr.*psnp->long_ptr
+PASS: gdb.mi/mi2-var-child.exp: get children of psnp->long_ptr.*psnp->long_ptr.**psnp->long_ptr
+PASS: gdb.mi/mi2-var-child.exp: get number of children of psnp->long_ptr.*psnp->long_ptr.**psnp->long_ptr
+PASS: gdb.mi/mi2-var-child.exp: get children of psnp->long_ptr.*psnp->long_ptr.**psnp->long_ptr.***psnp->long_ptr
+PASS: gdb.mi/mi2-var-child.exp: get number of children of psnp->long_ptr.*psnp->long_ptr.**psnp->long_ptr.***psnp->long_ptr
+PASS: gdb.mi/mi2-var-child.exp: get children of psnp->long_ptr.*psnp->long_ptr.**psnp->long_ptr.***psnp->long_ptr.****psnp->long_ptr
+PASS: gdb.mi/mi2-var-child.exp: get number of children of psnp->long_ptr.*psnp->long_ptr.**psnp->long_ptr.***psnp->long_ptr.****psnp->long_ptr
+PASS: gdb.mi/mi2-var-child.exp: create local variable psnp->ptrs
+PASS: gdb.mi/mi2-var-child.exp: get children of psnp->ptrs
+PASS: gdb.mi/mi2-var-child.exp: get number of children of psnp->ptrs
+PASS: gdb.mi/mi2-var-child.exp: get children of psnp->ptrs.0
+PASS: gdb.mi/mi2-var-child.exp: get number of children of psnp->ptrs.0
+PASS: gdb.mi/mi2-var-child.exp: get children of psnp->ptrs.0.next
+PASS: gdb.mi/mi2-var-child.exp: get number of children of psnp->ptrs.0.next
+PASS: gdb.mi/mi2-var-child.exp: get children of psnp->ptrs.0.next.char_ptr
+PASS: gdb.mi/mi2-var-child.exp: get number of children of psnp->ptrs.0.next.char_ptr
+PASS: gdb.mi/mi2-var-child.exp: get children of psnp->ptrs.0.next.char_ptr.*char_ptr
+PASS: gdb.mi/mi2-var-child.exp: get number of children of psnp->ptrs.0.next.char_ptr.*char_ptr
+PASS: gdb.mi/mi2-var-child.exp: get children of psnp->ptrs.0.next.char_ptr.*char_ptr.**char_ptr
+PASS: gdb.mi/mi2-var-child.exp: get children of psnp->ptrs.0.next.char_ptr.*char_ptr.**char_ptr
+PASS: gdb.mi/mi2-var-child.exp: get number of children of psnp->ptrs.0.next.char_ptr.*char_ptr.**char_ptr
+PASS: gdb.mi/mi2-var-child.exp: get children of psnp->ptrs.0.next.char_ptr.*char_ptr.**char_ptr.***char_ptr
+PASS: gdb.mi/mi2-var-child.exp: get number of children of psnp->ptrs.0.next.char_ptr.*char_ptr.**char_ptr.***char_ptr
+PASS: gdb.mi/mi2-var-child.exp: get children of psnp->ptrs.0.next.char_ptr.*char_ptr.**char_ptr.***char_ptr
+PASS: gdb.mi/mi2-var-child.exp: get number of children of psnp->ptrs.0.next.char_ptr.*char_ptr.**char_ptr.***char_ptr
+PASS: gdb.mi/mi2-var-child.exp: get children of psnp->ptrs.0.next.next
+PASS: gdb.mi/mi2-var-child.exp: get children of psnp->ptrs.0.next.next.ptrs
+PASS: gdb.mi/mi2-var-child.exp: step $line_dct_snp0 + 2
+PASS: gdb.mi/mi2-var-child.exp: update all vars psnp->char_ptr (and 0.char_ptr) changed
+PASS: gdb.mi/mi2-var-child.exp: step $line_dct_snp0 + 3
+PASS: gdb.mi/mi2-var-child.exp: update all vars psnp->next->char_ptr (and 1.char_ptr) changed
+PASS: gdb.mi/mi2-var-child.exp: step $line_dct_snp0 + 4
+PASS: gdb.mi/mi2-var-child.exp: update all vars psnp->next->next->char_ptr (and 2.char_ptr) changed
+PASS: gdb.mi/mi2-var-child.exp: step $line_dct_snp0 + 5
+PASS: gdb.mi/mi2-var-child.exp: update all vars psnp->long_ptr (and 0.long_ptr) changed
+PASS: gdb.mi/mi2-var-child.exp: step $line_dct_snp0 + 6
+XFAIL: gdb.mi/mi2-var-child.exp: update all vars psnp->next->long_ptr (and 1.long_ptr) changed
+PASS: gdb.mi/mi2-var-child.exp: step $line_dct_snp0 + 7
+PASS: gdb.mi/mi2-var-child.exp: update all vars psnp->next->next->long_ptr (and 2.long_ptr) changed
+PASS: gdb.mi/mi2-var-child.exp: break in do_anonymous_type_tests
+PASS: gdb.mi/mi2-var-child.exp: continue to do_anonymous_type_tests breakpoint
+PASS: gdb.mi/mi2-var-child.exp: VT: create root varobj for ptr
+PASS: gdb.mi/mi2-var-child.exp: VT: list children of ptr2
+PASS: gdb.mi/mi2-var-child.exp: path expression for ptr2
+PASS: gdb.mi/mi2-var-child.exp: expression for ptr2
+PASS: gdb.mi/mi2-var-child.exp: VT: list children of ptr2.*ptr
+PASS: gdb.mi/mi2-var-child.exp: path expression for ptr2.*ptr
+PASS: gdb.mi/mi2-var-child.exp: expression for ptr2.*ptr
+PASS: gdb.mi/mi2-var-child.exp: path expression for ptr2.*ptr.a
+PASS: gdb.mi/mi2-var-child.exp: expression for ptr2.*ptr.a
+PASS: gdb.mi/mi2-var-child.exp: VT: list children of ptr2.*ptr.1_anonymous
+PASS: gdb.mi/mi2-var-child.exp: path expression for ptr2.*ptr.1_anonymous
+PASS: gdb.mi/mi2-var-child.exp: expression for ptr2.*ptr.1_anonymous
+PASS: gdb.mi/mi2-var-child.exp: path expression for ptr2.*ptr.1_anonymous.b
+PASS: gdb.mi/mi2-var-child.exp: expression for ptr2.*ptr.1_anonymous.b
+PASS: gdb.mi/mi2-var-child.exp: VT: list children of ptr2.*ptr.1_anonymous.c
+PASS: gdb.mi/mi2-var-child.exp: path expression for ptr2.*ptr.1_anonymous.c
+PASS: gdb.mi/mi2-var-child.exp: expression for ptr2.*ptr.1_anonymous.c
+PASS: gdb.mi/mi2-var-child.exp: VT: list children of ptr2.*ptr.1_anonymous.2_anonymous
+PASS: gdb.mi/mi2-var-child.exp: path expression for ptr2.*ptr.1_anonymous.2_anonymous
+PASS: gdb.mi/mi2-var-child.exp: expression for ptr2.*ptr.1_anonymous.2_anonymous
+PASS: gdb.mi/mi2-var-child.exp: path expression for ptr2.*ptr.1_anonymous.c.*c
+PASS: gdb.mi/mi2-var-child.exp: expression for ptr2.*ptr.1_anonymous.c.*c
+PASS: gdb.mi/mi2-var-child.exp: path expression for ptr2.*ptr.1_anonymous.2_anonymous.d
+PASS: gdb.mi/mi2-var-child.exp: expression for ptr2.*ptr.1_anonymous.2_anonymous.d
+PASS: gdb.mi/mi2-var-child.exp: path expression for ptr2.*ptr.1_anonymous.2_anonymous.e
+PASS: gdb.mi/mi2-var-child.exp: expression for ptr2.*ptr.1_anonymous.2_anonymous.e
+PASS: gdb.mi/mi2-var-child.exp: path expression for ptr2.*ptr.1_anonymous.2_anonymous.f
+PASS: gdb.mi/mi2-var-child.exp: expression for ptr2.*ptr.1_anonymous.2_anonymous.f
+PASS: gdb.mi/mi2-var-child.exp: VT: list children of ptr2.*ptr.1_anonymous.2_anonymous.3_anonymous
+PASS: gdb.mi/mi2-var-child.exp: path expression for ptr2.*ptr.1_anonymous.2_anonymous.3_anonymous
+PASS: gdb.mi/mi2-var-child.exp: expression for ptr2.*ptr.1_anonymous.2_anonymous.3_anonymous
+PASS: gdb.mi/mi2-var-child.exp: path expression for ptr2.*ptr.1_anonymous.2_anonymous.3_anonymous.g
+PASS: gdb.mi/mi2-var-child.exp: expression for ptr2.*ptr.1_anonymous.2_anonymous.3_anonymous.g
+PASS: gdb.mi/mi2-var-child.exp: VT: list children of ptr2.*ptr.1_anonymous.2_anonymous.3_anonymous.h
+PASS: gdb.mi/mi2-var-child.exp: path expression for ptr2.*ptr.1_anonymous.2_anonymous.3_anonymous.h
+PASS: gdb.mi/mi2-var-child.exp: expression for ptr2.*ptr.1_anonymous.2_anonymous.3_anonymous.h
+PASS: gdb.mi/mi2-var-child.exp: VT: list children of ptr2.*ptr.1_anonymous.2_anonymous.3_anonymous.simple
+PASS: gdb.mi/mi2-var-child.exp: path expression for ptr2.*ptr.1_anonymous.2_anonymous.3_anonymous.simple
+PASS: gdb.mi/mi2-var-child.exp: expression for ptr2.*ptr.1_anonymous.2_anonymous.3_anonymous.simple
+PASS: gdb.mi/mi2-var-child.exp: VT: list children of ptr2.*ptr.1_anonymous.2_anonymous.3_anonymous.h.*h
+PASS: gdb.mi/mi2-var-child.exp: path expression for ptr2.*ptr.1_anonymous.2_anonymous.3_anonymous.h.*h
+PASS: gdb.mi/mi2-var-child.exp: expression for ptr2.*ptr.1_anonymous.2_anonymous.3_anonymous.h.*h
+PASS: gdb.mi/mi2-var-child.exp: VT: list children of ptr2.*ptr.1_anonymous.2_anonymous.3_anonymous.simple.*simple
+PASS: gdb.mi/mi2-var-child.exp: path expression for ptr2.*ptr.1_anonymous.2_anonymous.3_anonymous.simple.*simple
+PASS: gdb.mi/mi2-var-child.exp: expression for ptr2.*ptr.1_anonymous.2_anonymous.3_anonymous.simple.*simple
+PASS: gdb.mi/mi2-var-child.exp: path expression for ptr2.*ptr.1_anonymous.2_anonymous.3_anonymous.h.*h.**h
+PASS: gdb.mi/mi2-var-child.exp: expression for ptr2.*ptr.1_anonymous.2_anonymous.3_anonymous.h.*h.**h
+PASS: gdb.mi/mi2-var-child.exp: VT: list children of ptr2.*ptr.1_anonymous.2_anonymous.3_anonymous.simple.*simple.**simple
+PASS: gdb.mi/mi2-var-child.exp: path expression for ptr2.*ptr.1_anonymous.2_anonymous.3_anonymous.simple.*simple.**simple
+PASS: gdb.mi/mi2-var-child.exp: expression for ptr2.*ptr.1_anonymous.2_anonymous.3_anonymous.simple.*simple.**simple
+PASS: gdb.mi/mi2-var-child.exp: path expression for ptr2.*ptr.1_anonymous.2_anonymous.3_anonymous.simple.*simple.**simple.integer
+PASS: gdb.mi/mi2-var-child.exp: expression for ptr2.*ptr.1_anonymous.2_anonymous.3_anonymous.simple.*simple.**simple.integer
+PASS: gdb.mi/mi2-var-child.exp: path expression for ptr2.*ptr.1_anonymous.2_anonymous.3_anonymous.simple.*simple.**simple.unsigned_integer
+PASS: gdb.mi/mi2-var-child.exp: expression for ptr2.*ptr.1_anonymous.2_anonymous.3_anonymous.simple.*simple.**simple.unsigned_integer
+PASS: gdb.mi/mi2-var-child.exp: path expression for ptr2.*ptr.1_anonymous.2_anonymous.3_anonymous.simple.*simple.**simple.character
+PASS: gdb.mi/mi2-var-child.exp: expression for ptr2.*ptr.1_anonymous.2_anonymous.3_anonymous.simple.*simple.**simple.character
+PASS: gdb.mi/mi2-var-child.exp: path expression for ptr2.*ptr.1_anonymous.2_anonymous.3_anonymous.simple.*simple.**simple.signed_character
+PASS: gdb.mi/mi2-var-child.exp: expression for ptr2.*ptr.1_anonymous.2_anonymous.3_anonymous.simple.*simple.**simple.signed_character
+PASS: gdb.mi/mi2-var-child.exp: VT: list children of ptr2.*ptr.1_anonymous.2_anonymous.3_anonymous.simple.*simple.**simple.char_ptr
+PASS: gdb.mi/mi2-var-child.exp: path expression for ptr2.*ptr.1_anonymous.2_anonymous.3_anonymous.simple.*simple.**simple.char_ptr
+PASS: gdb.mi/mi2-var-child.exp: expression for ptr2.*ptr.1_anonymous.2_anonymous.3_anonymous.simple.*simple.**simple.char_ptr
+PASS: gdb.mi/mi2-var-child.exp: VT: list children of ptr2.*ptr.1_anonymous.2_anonymous.3_anonymous.simple.*simple.**simple.array_of_10
+PASS: gdb.mi/mi2-var-child.exp: path expression for ptr2.*ptr.1_anonymous.2_anonymous.3_anonymous.simple.*simple.**simple.array_of_10
+PASS: gdb.mi/mi2-var-child.exp: expression for ptr2.*ptr.1_anonymous.2_anonymous.3_anonymous.simple.*simple.**simple.array_of_10
+PASS: gdb.mi/mi2-var-child.exp: path expression for ptr2.*ptr.1_anonymous.2_anonymous.3_anonymous.simple.*simple.**simple.char_ptr.*char_ptr
+PASS: gdb.mi/mi2-var-child.exp: expression for ptr2.*ptr.1_anonymous.2_anonymous.3_anonymous.simple.*simple.**simple.char_ptr.*char_ptr
+PASS: gdb.mi/mi2-var-child.exp: path expression for ptr2.*ptr.1_anonymous.2_anonymous.3_anonymous.simple.*simple.**simple.array_of_10.0
+PASS: gdb.mi/mi2-var-child.exp: expression for ptr2.*ptr.1_anonymous.2_anonymous.3_anonymous.simple.*simple.**simple.array_of_10.0
+PASS: gdb.mi/mi2-var-child.exp: path expression for ptr2.*ptr.1_anonymous.2_anonymous.3_anonymous.simple.*simple.**simple.array_of_10.1
+PASS: gdb.mi/mi2-var-child.exp: expression for ptr2.*ptr.1_anonymous.2_anonymous.3_anonymous.simple.*simple.**simple.array_of_10.1
+PASS: gdb.mi/mi2-var-child.exp: path expression for ptr2.*ptr.1_anonymous.2_anonymous.3_anonymous.simple.*simple.**simple.array_of_10.2
+PASS: gdb.mi/mi2-var-child.exp: expression for ptr2.*ptr.1_anonymous.2_anonymous.3_anonymous.simple.*simple.**simple.array_of_10.2
+PASS: gdb.mi/mi2-var-child.exp: path expression for ptr2.*ptr.1_anonymous.2_anonymous.3_anonymous.simple.*simple.**simple.array_of_10.3
+PASS: gdb.mi/mi2-var-child.exp: expression for ptr2.*ptr.1_anonymous.2_anonymous.3_anonymous.simple.*simple.**simple.array_of_10.3
+PASS: gdb.mi/mi2-var-child.exp: path expression for ptr2.*ptr.1_anonymous.2_anonymous.3_anonymous.simple.*simple.**simple.array_of_10.4
+PASS: gdb.mi/mi2-var-child.exp: expression for ptr2.*ptr.1_anonymous.2_anonymous.3_anonymous.simple.*simple.**simple.array_of_10.4
+PASS: gdb.mi/mi2-var-child.exp: path expression for ptr2.*ptr.1_anonymous.2_anonymous.3_anonymous.simple.*simple.**simple.array_of_10.5
+PASS: gdb.mi/mi2-var-child.exp: expression for ptr2.*ptr.1_anonymous.2_anonymous.3_anonymous.simple.*simple.**simple.array_of_10.5
+PASS: gdb.mi/mi2-var-child.exp: path expression for ptr2.*ptr.1_anonymous.2_anonymous.3_anonymous.simple.*simple.**simple.array_of_10.6
+PASS: gdb.mi/mi2-var-child.exp: expression for ptr2.*ptr.1_anonymous.2_anonymous.3_anonymous.simple.*simple.**simple.array_of_10.6
+PASS: gdb.mi/mi2-var-child.exp: path expression for ptr2.*ptr.1_anonymous.2_anonymous.3_anonymous.simple.*simple.**simple.array_of_10.7
+PASS: gdb.mi/mi2-var-child.exp: expression for ptr2.*ptr.1_anonymous.2_anonymous.3_anonymous.simple.*simple.**simple.array_of_10.7
+PASS: gdb.mi/mi2-var-child.exp: path expression for ptr2.*ptr.1_anonymous.2_anonymous.3_anonymous.simple.*simple.**simple.array_of_10.8
+PASS: gdb.mi/mi2-var-child.exp: expression for ptr2.*ptr.1_anonymous.2_anonymous.3_anonymous.simple.*simple.**simple.array_of_10.8
+PASS: gdb.mi/mi2-var-child.exp: path expression for ptr2.*ptr.1_anonymous.2_anonymous.3_anonymous.simple.*simple.**simple.array_of_10.9
+PASS: gdb.mi/mi2-var-child.exp: expression for ptr2.*ptr.1_anonymous.2_anonymous.3_anonymous.simple.*simple.**simple.array_of_10.9
+PASS: gdb.mi/mi2-var-child.exp: VT: create root varobj for v
+PASS: gdb.mi/mi2-var-child.exp: VT: list children of v3
+PASS: gdb.mi/mi2-var-child.exp: path expression for v3
+PASS: gdb.mi/mi2-var-child.exp: expression for v3
+PASS: gdb.mi/mi2-var-child.exp: path expression for v3.x
+PASS: gdb.mi/mi2-var-child.exp: expression for v3.x
+PASS: gdb.mi/mi2-var-child.exp: VT: list children of v3.1_anonymous
+PASS: gdb.mi/mi2-var-child.exp: path expression for v3.1_anonymous
+PASS: gdb.mi/mi2-var-child.exp: expression for v3.1_anonymous
+PASS: gdb.mi/mi2-var-child.exp: VT: list children of v3.2_anonymous
+PASS: gdb.mi/mi2-var-child.exp: path expression for v3.2_anonymous
+PASS: gdb.mi/mi2-var-child.exp: expression for v3.2_anonymous
+PASS: gdb.mi/mi2-var-child.exp: path expression for v3.1_anonymous.a
+PASS: gdb.mi/mi2-var-child.exp: expression for v3.1_anonymous.a
+PASS: gdb.mi/mi2-var-child.exp: path expression for v3.2_anonymous.b
+PASS: gdb.mi/mi2-var-child.exp: expression for v3.2_anonymous.b
+Running ./gdb.mi/mi-async.exp ...
+Running ./gdb.mi/mi-basics.exp ...
+PASS: gdb.mi/mi-basics.exp: acceptance of MI operations
+PASS: gdb.mi/mi-basics.exp: file-exec-and-symbols operation
+PASS: gdb.mi/mi-basics.exp: file-exec-file operation
+PASS: gdb.mi/mi-basics.exp: file-symbol-file operation
+PASS: gdb.mi/mi-basics.exp: break-delete (all) operation
+PASS: gdb.mi/mi-basics.exp: all breakpoints removed
+PASS: gdb.mi/mi-basics.exp: environment-directory arg operation
+PASS: gdb.mi/mi-basics.exp: environment-directory empty-string operation
+PASS: gdb.mi/mi-basics.exp: environment-directory operation
+PASS: gdb.mi/mi-basics.exp: environment-cd arg operation
+PASS: gdb.mi/mi-basics.exp: environment-pwd operation
+PASS: gdb.mi/mi-basics.exp: environment-path
+PASS: gdb.mi/mi-basics.exp: environment-path no-args operation
+PASS: gdb.mi/mi-basics.exp: environment-path dir1 dir2 operation
+PASS: gdb.mi/mi-basics.exp: environment-path -r dir operation
+PASS: gdb.mi/mi-basics.exp: environment-path -r operation
+PASS: gdb.mi/mi-basics.exp: initial tty is mi_inferior_tty_name
+PASS: gdb.mi/mi-basics.exp: set tty to /dev/pts/1
+PASS: gdb.mi/mi-basics.exp: tty was set correctly
+PASS: gdb.mi/mi-basics.exp: set tty to the empty string
+PASS: gdb.mi/mi-basics.exp: make sure tty is empty
+PASS: gdb.mi/mi-basics.exp: set tty to mi_inferior_tty_name (the way it was)
+PASS: gdb.mi/mi-basics.exp: verify tty is correct
+Running ./gdb.mi/mi-break.exp ...
+PASS: gdb.mi/mi-break.exp: break-insert -t operation
+PASS: gdb.mi/mi-break.exp: insert temp breakpoint at basics.c:callee2
+PASS: gdb.mi/mi-break.exp: insert temp breakpoint at basics.c:$line_callee3_head
+PASS: gdb.mi/mi-break.exp: insert temp breakpoint at "<fullfilename>":$line_callee4_head
+PASS: gdb.mi/mi-break.exp: list of breakpoints
+PASS: gdb.mi/mi-break.exp: delete temp breakpoints
+KFAIL: gdb.mi/mi-break.exp: break-insert -r operation (PRMS: mi/14270)
+KFAIL: gdb.mi/mi-break.exp: insert breakpoint with regexp callee2 (PRMS: mi/14270)
+KFAIL: gdb.mi/mi-break.exp: insert breakpoint with regexp callee (PRMS: mi/14270)
+KFAIL: gdb.mi/mi-break.exp: insert breakpoint with regexp .*llee (PRMS: mi/14270)
+KFAIL: gdb.mi/mi-break.exp: list of breakpoints (PRMS: mi/14270)
+PASS: gdb.mi/mi-break.exp: delete temp breakpoints
+PASS: gdb.mi/mi-break.exp: insert breakpoint with ignore count at callme
+PASS: gdb.mi/mi-break.exp: run to breakpoint with ignore count
+PASS: gdb.mi/mi-break.exp: breakpoint at nonexistent function
+PASS: gdb.mi/mi-break.exp: create varobj for function call
+PASS: gdb.mi/mi-break.exp: update varobj for function call
+PASS: gdb.mi/mi-break.exp: test disabled creation
+PASS: gdb.mi/mi-break.exp: test disabled creation: cleanup
+PASS: gdb.mi/mi-break.exp: breakpoint commands: insert breakpoint at basics.c:callee2
+PASS: gdb.mi/mi-break.exp: breakpoint commands: set commands
+PASS: gdb.mi/mi-break.exp: breakpoint commands: check that commands are set
+PASS: gdb.mi/mi-break.exp: breakpoint commands: clear commands
+PASS: gdb.mi/mi-break.exp: breakpoint commands: check that commands are cleared
+ERROR: couldn't load /var/tmp/portage/cross-x86_64-cros-linux-gnu/gdb-7.6.1/work/gdb-7.6.1/gdb/testsuite/gdb.mi/mi-break into /var/tmp/portage/cross-x86_64-cros-linux-gnu/gdb-7.6.1/work/gdb-7.6.1/gdb/testsuite/../../gdb/gdb (timed out).
+UNRESOLVED: gdb.mi/mi-break.exp: breakpoint at main
+FAIL: gdb.mi/mi-break.exp: mi runto main (unknown output after running)
+FAIL: gdb.mi/mi-break.exp: breakpoint commands: insert breakpoint at basics.c:callee2, again
+FAIL: gdb.mi/mi-break.exp: breakpoint commands: set commands
+FAIL: gdb.mi/mi-break.exp: breakpoint commands: continue (MI error)
+FAIL: gdb.mi/mi-break.exp: intermediate stop and continue
+FAIL: gdb.mi/mi-break.exp: test hitting breakpoint with commands (unknown output after running)
+PASS: gdb.mi/mi-break.exp: create local variable tpnum
+PASS: gdb.mi/mi-break.exp: eval tpnum before tracepoint
+FAIL: gdb.mi/mi-break.exp: break-insert -a operation
+PASS: gdb.mi/mi-break.exp: update tpnum
+FAIL: gdb.mi/mi-break.exp: eval tpnum after tracepoint
+Running ./gdb.mi/mi-breakpoint-changed.exp ...
+PASS: gdb.mi/mi-breakpoint-changed.exp: breakpoint at main
+FAIL: gdb.mi/mi-breakpoint-changed.exp: mi runto main (unknown output after running)
+PASS: gdb.mi/mi-breakpoint-changed.exp: change command
+PASS: gdb.mi/mi-breakpoint-changed.exp: watch watch
+PASS: gdb.mi/mi-breakpoint-changed.exp: trace marker
+PASS: gdb.mi/mi-breakpoint-changed.exp: catch syscall
+PASS: gdb.mi/mi-breakpoint-changed.exp: dprintf marker, "arg" "
+PASS: gdb.mi/mi-breakpoint-changed.exp: condition 2 main > 0x0
+PASS: gdb.mi/mi-breakpoint-changed.exp: disable 3
+PASS: gdb.mi/mi-breakpoint-changed.exp: enable 3
+PASS: gdb.mi/mi-breakpoint-changed.exp: ignore 5 1
+PASS: gdb.mi/mi-breakpoint-changed.exp: passcount 1 4
+PASS: gdb.mi/mi-breakpoint-changed.exp: delete 3
+PASS: gdb.mi/mi-breakpoint-changed.exp: delete 4
+PASS: gdb.mi/mi-breakpoint-changed.exp: delete 5
+PASS: gdb.mi/mi-breakpoint-changed.exp: delete 6
+PASS: gdb.mi/mi-breakpoint-changed.exp: pending resolved: insert breakpoint on pendfunc1
+PASS: gdb.mi/mi-breakpoint-changed.exp: pending resolved: breakpoint on pendfunc1 resolved
+PASS: gdb.mi/mi-breakpoint-changed.exp: pending resolved: breakpoint on pendfunc1 resolved: hit_count is updated
+PASS: gdb.mi/mi-breakpoint-changed.exp: pending resolved: continue to pendfunc1 breakpoint
+PASS: gdb.mi/mi-breakpoint-changed.exp: pending resolved: delete breakpoint on pendfunc1
+PASS: gdb.mi/mi-breakpoint-changed.exp: pending resolved: insert breakpoint on marker
+PASS: gdb.mi/mi-breakpoint-changed.exp: pending resolved: insert breakpoint on pendfunc3
+PASS: gdb.mi/mi-breakpoint-changed.exp: pending resolved: continue to marker 1
+PASS: gdb.mi/mi-breakpoint-changed.exp: pending resolved: breakpoint on pendfunc3 resolved
+PASS: gdb.mi/mi-breakpoint-changed.exp: pending resolved: continue to marker 2
+PASS: gdb.mi/mi-breakpoint-changed.exp: pending resolved: breakpoint on pendfunc3 pending again
+PASS: gdb.mi/mi-breakpoint-changed.exp: pending resolved:
+Running ./gdb.mi/mi-catch-load.exp ...
+PASS: gdb.mi/mi-catch-load.exp: breakpoint at main
+PASS: gdb.mi/mi-catch-load.exp: mi runto main
+PASS: gdb.mi/mi-catch-load.exp: catch-load: auto-solib-add on
+PASS: gdb.mi/mi-catch-load.exp: catch-load: catch load
+FAIL: gdb.mi/mi-catch-load.exp: catch-load: solib-event stop
+PASS: gdb.mi/mi-catch-load.exp: breakpoint at main
+PASS: gdb.mi/mi-catch-load.exp: mi runto main
+PASS: gdb.mi/mi-catch-load.exp: catch-unload: auto-solib-add on
+PASS: gdb.mi/mi-catch-load.exp: catch-unload: catch unload
+FAIL: gdb.mi/mi-catch-load.exp: catch-unload: solib-event stop
+Running ./gdb.mi/mi-cli.exp ...
+PASS: gdb.mi/mi-cli.exp: -interpreter-exec with no arguments
+PASS: gdb.mi/mi-cli.exp: -interpreter-exec with one argument
+PASS: gdb.mi/mi-cli.exp: -interpreter-exec with bogus interpreter
+PASS: gdb.mi/mi-cli.exp: -interpreter-exec console bogus
+PASS: gdb.mi/mi-cli.exp: -interpreter-exec console "file $binfile"
+PASS: gdb.mi/mi-cli.exp: breakpoint at main
+PASS: gdb.mi/mi-cli.exp: mi runto main
+PASS: gdb.mi/mi-cli.exp: -interpreter-exec console "set args foobar"
+PASS: gdb.mi/mi-cli.exp: -interpreter-exec console "show args"
+PASS: gdb.mi/mi-cli.exp: -interpreter-exec console "break callee4"
+PASS: gdb.mi/mi-cli.exp: -interpreter-exec console "info break"
+PASS: gdb.mi/mi-cli.exp: -interpreter-exec console "set listsize 1"
+PASS: gdb.mi/mi-cli.exp: -interpreter-exec console "list"
+PASS: gdb.mi/mi-cli.exp: continue to callee4
+PASS: gdb.mi/mi-cli.exp: -interpreter-exec console "delete 2"
+PASS: gdb.mi/mi-cli.exp: -interpreter-exec console "up"
+PASS: gdb.mi/mi-cli.exp: -interpreter-exec console "down"
+PASS: gdb.mi/mi-cli.exp: -interpreter-exec console "frame 2"
+PASS: gdb.mi/mi-cli.exp: -stack-select-frame 0
+PASS: gdb.mi/mi-cli.exp: check *stopped from CLI command
+PASS: gdb.mi/mi-cli.exp: -break-insert -t basics.c:$line_main_hello
+PASS: gdb.mi/mi-cli.exp: -exec-continue to line $line_main_hello
+PASS: gdb.mi/mi-cli.exp: 34 next: run
+PASS: gdb.mi/mi-cli.exp: 34 next: stop
+PASS: gdb.mi/mi-cli.exp: -interpreter-exec console "list" at basics.c:$line_main_return
+PASS: gdb.mi/mi-cli.exp: -interpreter-exec console "help set args"
+PASS: gdb.mi/mi-cli.exp: -interpreter-exec console "set $pc=0x0"
+Running ./gdb.mi/mi-cmd-param-changed.exp ...
+PASS: gdb.mi/mi-cmd-param-changed.exp: cmd param: breakpoint at main
+PASS: gdb.mi/mi-cmd-param-changed.exp: cmd param: mi runto main
+PASS: gdb.mi/mi-cmd-param-changed.exp: cmd param: "set scheduler-locking on"
+PASS: gdb.mi/mi-cmd-param-changed.exp: cmd param: "set scheduler-locking off"
+PASS: gdb.mi/mi-cmd-param-changed.exp: cmd param: "set scheduler-locking step"
+PASS: gdb.mi/mi-cmd-param-changed.exp: cmd param: interpreter-exec "set scheduler-locking on"
+PASS: gdb.mi/mi-cmd-param-changed.exp: cmd param: interpreter-exec "set scheduler-locking off"
+PASS: gdb.mi/mi-cmd-param-changed.exp: cmd param: interpreter-exec "set scheduler-locking step"
+PASS: gdb.mi/mi-cmd-param-changed.exp: cmd param: "set scheduler-locking on" no event (requested by MI)
+PASS: gdb.mi/mi-cmd-param-changed.exp: cmd param: "set scheduler-locking step" no event (requested by MI interp)
+PASS: gdb.mi/mi-cmd-param-changed.exp: cmd param: "set scheduler-locking stepr" no event
+PASS: gdb.mi/mi-cmd-param-changed.exp: cmd param: "set remotecache" warmup
+PASS: gdb.mi/mi-cmd-param-changed.exp: cmd param: "set remotecache on"
+PASS: gdb.mi/mi-cmd-param-changed.exp: cmd param: "set remotecache off"
+PASS: gdb.mi/mi-cmd-param-changed.exp: cmd param: "set remotecache" no event
+PASS: gdb.mi/mi-cmd-param-changed.exp: cmd param: "set check type" warmup
+PASS: gdb.mi/mi-cmd-param-changed.exp: cmd param: "set check type on"
+PASS: gdb.mi/mi-cmd-param-changed.exp: cmd param: "set check type off"
+PASS: gdb.mi/mi-cmd-param-changed.exp: cmd param: "set check type" no event
+PASS: gdb.mi/mi-cmd-param-changed.exp: cmd param: "set trace-notes foo"
+PASS: gdb.mi/mi-cmd-param-changed.exp: cmd param: "set trace-notes bar"
+PASS: gdb.mi/mi-cmd-param-changed.exp: cmd param: "set trace-notes bar" no event
+PASS: gdb.mi/mi-cmd-param-changed.exp: cmd param: "set remote exec-file foo"
+PASS: gdb.mi/mi-cmd-param-changed.exp: cmd param: "set remote exec-file bar"
+PASS: gdb.mi/mi-cmd-param-changed.exp: cmd param: "set remote exec-file bar" no event
+PASS: gdb.mi/mi-cmd-param-changed.exp: cmd param: "maint set profile on"
+PASS: gdb.mi/mi-cmd-param-changed.exp: cmd param: "maint set profile off"
+PASS: gdb.mi/mi-cmd-param-changed.exp: cmd param: "set ch type on"
+Running ./gdb.mi/mi-console.exp ...
+PASS: gdb.mi/mi-console.exp: breakpoint at main
+PASS: gdb.mi/mi-console.exp: mi runto main
+PASS: gdb.mi/mi-console.exp: Testing console output
+UNSUPPORTED: gdb.mi/mi-console.exp: Testing console output inferior output
+PASS: gdb.mi/mi-console.exp: finished step over hello
+Running ./gdb.mi/mi-disassemble.exp ...
+PASS: gdb.mi/mi-disassemble.exp: breakpoint at main
+PASS: gdb.mi/mi-disassemble.exp: mi runto main
+PASS: gdb.mi/mi-disassemble.exp: data-disassemble from pc to pc+12 assembly only
+PASS: gdb.mi/mi-disassemble.exp: data-disassemble file & line, assembly only
+PASS: gdb.mi/mi-disassemble.exp: data-disassemble from pc to pc+12 assembly with opcodes
+PASS: gdb.mi/mi-disassemble.exp: data-disassemble file & line, assembly with opcodes
+PASS: gdb.mi/mi-disassemble.exp: data-disassemble file, line assembly mixed
+PASS: gdb.mi/mi-disassemble.exp: data-disassemble range assembly mixed
+PASS: gdb.mi/mi-disassemble.exp: data-disassemble file, line assembly mixed with opcodes
+PASS: gdb.mi/mi-disassemble.exp: data-disassemble range assembly mixed with opcodes
+PASS: gdb.mi/mi-disassemble.exp: data-disassemble bogus filename
+PASS: gdb.mi/mi-disassemble.exp: data-disassemble bogus address
+PASS: gdb.mi/mi-disassemble.exp: data-disassemble mix different args
+PASS: gdb.mi/mi-disassemble.exp: data-disassemble wrong mode arg
+PASS: gdb.mi/mi-disassemble.exp: data-disassemble file, line, number assembly only
+PASS: gdb.mi/mi-disassemble.exp: data-disassemble file, line, number (zero lines) assembly only
+PASS: gdb.mi/mi-disassemble.exp: data-disassemble file, line, number (more than main lines) assembly only
+PASS: gdb.mi/mi-disassemble.exp: data-disassemble file, line, number assembly mixed
+PASS: gdb.mi/mi-disassemble.exp: data-disassemble file, line, number (zero lines) assembly mixed
+PASS: gdb.mi/mi-disassemble.exp: data-disassemble file, line, number (more than main lines) assembly mixed
+Running ./gdb.mi/mi-eval.exp ...
+PASS: gdb.mi/mi-eval.exp: breakpoint at callee4
+PASS: gdb.mi/mi-eval.exp: mi runto callee4
+PASS: gdb.mi/mi-eval.exp: next at callee4
+PASS: gdb.mi/mi-eval.exp: eval A
+PASS: gdb.mi/mi-eval.exp: eval &A
+PASS: gdb.mi/mi-eval.exp: eval A+3
+PASS: gdb.mi/mi-eval.exp: eval A + 3
+Running ./gdb.mi/mi-file.exp ...
+PASS: gdb.mi/mi-file.exp: request path info of current source file (basics.c)
+PASS: gdb.mi/mi-file.exp: Getting a list of source files.
+Running ./gdb.mi/mi-file-transfer.exp ...
+FAIL: gdb.mi/mi-file-transfer.exp: put binary file
+FAIL: gdb.mi/mi-file-transfer.exp: get binary file
+FAIL: gdb.mi/mi-file-transfer.exp: compare binary file
+FAIL: gdb.mi/mi-file-transfer.exp: deleted binary file
+Running ./gdb.mi/mi-fill-memory.exp ...
+PASS: gdb.mi/mi-fill-memory.exp: breakpoint at main
+PASS: gdb.mi/mi-fill-memory.exp: mi runto main
+PASS: gdb.mi/mi-fill-memory.exp: next at main
+PASS: gdb.mi/mi-fill-memory.exp: no arguments
+PASS: gdb.mi/mi-fill-memory.exp: one argument missing
+PASS: gdb.mi/mi-fill-memory.exp: memory successfully written
+PASS: gdb.mi/mi-fill-memory.exp: memory successfully filled (8 bytes)
+PASS: gdb.mi/mi-fill-memory.exp: pattern correctly read from memory
+Running ./gdb.mi/mi-fullname-deleted.exp ...
+PASS: gdb.mi/mi-fullname-deleted.exp: set substitute-path
+PASS: gdb.mi/mi-fullname-deleted.exp: fullname present
+PASS: gdb.mi/mi-fullname-deleted.exp: substituted fullname
+PASS: gdb.mi/mi-fullname-deleted.exp: compare_filenames_for_search does not match
+PASS: gdb.mi/mi-fullname-deleted.exp: compare_filenames_for_search does match
+Running ./gdb.mi/mi-hack-cli.exp ...
+PASS: gdb.mi/mi-hack-cli.exp: show architecture
+PASS: gdb.mi/mi-hack-cli.exp: 47show architecture
+Running ./gdb.mi/mi-info-os.exp ...
+FAIL: gdb.mi/mi-info-os.exp: -info-os
+Running ./gdb.mi/mi-inheritance-syntax-error.exp ...
+PASS: gdb.mi/mi-inheritance-syntax-error.exp: breakpoint at C::testLocation
+PASS: gdb.mi/mi-inheritance-syntax-error.exp: mi runto C::testLocation
+PASS: gdb.mi/mi-inheritance-syntax-error.exp: create var for THIS
+PASS: gdb.mi/mi-inheritance-syntax-error.exp: list children of THIS
+PASS: gdb.mi/mi-inheritance-syntax-error.exp: -var-info-path-expression var1.A
+PASS: gdb.mi/mi-inheritance-syntax-error.exp: -data-evaluate-expression (*(class A*) this)
+Running ./gdb.mi/mi-logging.exp ...
+PASS: gdb.mi/mi-logging.exp: breakpoint at main
+PASS: gdb.mi/mi-logging.exp: mi runto main
+PASS: gdb.mi/mi-logging.exp: logging on
+PASS: gdb.mi/mi-logging.exp: logged step
+PASS: gdb.mi/mi-logging.exp: logged next
+PASS: gdb.mi/mi-logging.exp: logging off
+PASS: gdb.mi/mi-logging.exp: Log file contents
+PASS: gdb.mi/mi-logging.exp: redirect logging on
+PASS: gdb.mi/mi-logging.exp: redirect logging off
+PASS: gdb.mi/mi-logging.exp: Redirect log file contents
+Running ./gdb.mi/mi-memory-changed.exp ...
+PASS: gdb.mi/mi-memory-changed.exp: insert breakpoint
+PASS: gdb.mi/mi-memory-changed.exp: continue to callee4
+PASS: gdb.mi/mi-memory-changed.exp: set var C = 4
+PASS: gdb.mi/mi-memory-changed.exp: create objvar for C
+PASS: gdb.mi/mi-memory-changed.exp: change C thru. varobj
+PASS: gdb.mi/mi-memory-changed.exp: change C thru. -data-write-memory-bytes
+PASS: gdb.mi/mi-memory-changed.exp: get address of main
+Running ./gdb.mi/mi-nonstop-exit.exp ...
+PASS: gdb.mi/mi-nonstop-exit.exp: successfully compiled posix threads test case
+PASS: gdb.mi/mi-nonstop-exit.exp: breakpoint at main
+PASS: gdb.mi/mi-nonstop-exit.exp: mi runto main
+PASS: gdb.mi/mi-nonstop-exit.exp: finished exec continue
+PASS: gdb.mi/mi-nonstop-exit.exp: breakpoint at main
+PASS: gdb.mi/mi-nonstop-exit.exp: mi runto main
+PASS: gdb.mi/mi-nonstop-exit.exp: finished exec continue (2)
+Running ./gdb.mi/mi-nonstop.exp ...
+PASS: gdb.mi/mi-nonstop.exp: successfully compiled posix threads test case
+PASS: gdb.mi/mi-nonstop.exp: breakpoint at main
+PASS: gdb.mi/mi-nonstop.exp: mi runto main
+PASS: gdb.mi/mi-nonstop.exp: breakpoint at marker
+PASS: gdb.mi/mi-nonstop.exp: w0,i0 stop
+PASS: gdb.mi/mi-nonstop.exp: w1,i0 stop
+PASS: gdb.mi/mi-nonstop.exp: thread state, stop 1
+PASS: gdb.mi/mi-nonstop.exp: select thread 2
+PASS: gdb.mi/mi-nonstop.exp: create varobj in first thread
+PASS: gdb.mi/mi-nonstop.exp: select thread 3
+PASS: gdb.mi/mi-nonstop.exp: create varobj in second thread
+PASS: gdb.mi/mi-nonstop.exp: thread state, resume 1
+PASS: gdb.mi/mi-nonstop.exp: w0,i1 stop
+PASS: gdb.mi/mi-nonstop.exp: thread state, stop 2
+PASS: gdb.mi/mi-nonstop.exp: thread state, resume 2
+PASS: gdb.mi/mi-nonstop.exp: w1,i1 stop
+PASS: gdb.mi/mi-nonstop.exp: thread state, stop 3
+PASS: gdb.mi/mi-nonstop.exp: update varobj, 1
+PASS: gdb.mi/mi-nonstop.exp: check varobj, w0, 1
+PASS: gdb.mi/mi-nonstop.exp: check varobj, w1, 1
+PASS: gdb.mi/mi-nonstop.exp: interrupted
+PASS: gdb.mi/mi-nonstop.exp: got interrupt
+PASS: gdb.mi/mi-nonstop.exp: thread state, stop 4
+PASS: gdb.mi/mi-nonstop.exp: resume all
+PASS: gdb.mi/mi-nonstop.exp: w0,i2 stop
+PASS: gdb.mi/mi-nonstop.exp: w1,i2 stop
+PASS: gdb.mi/mi-nonstop.exp: set condition, 1
+PASS: gdb.mi/mi-nonstop.exp: w0,i3 stop
+PASS: gdb.mi/mi-nonstop.exp: thread state, stop on cond breakpoint
+PASS: gdb.mi/mi-nonstop.exp: update varobj, 2
+PASS: gdb.mi/mi-nonstop.exp: check varobj, w1, 1
+PASS: gdb.mi/mi-nonstop.exp: stacktrace of running thread
+PASS: gdb.mi/mi-nonstop.exp: stacktrace of stopped thread
+PASS: gdb.mi/mi-nonstop.exp: select first worker thread
+PASS: gdb.mi/mi-nonstop.exp: ask the second thread to exit
+UNSUPPORTED: gdb.mi/mi-nonstop.exp: wait for thread exit
+PASS: gdb.mi/mi-nonstop.exp: stacktrace of stopped thread
+Running ./gdb.mi/mi-nsintrall.exp ...
+PASS: gdb.mi/mi-nsintrall.exp: successfully compiled posix threads test case
+PASS: gdb.mi/mi-nsintrall.exp: breakpoint at main
+PASS: gdb.mi/mi-nsintrall.exp: mi runto main
+PASS: gdb.mi/mi-nsintrall.exp: breakpoint at thread_function
+PASS: gdb.mi/mi-nsintrall.exp: stop 0
+PASS: gdb.mi/mi-nsintrall.exp: stop 1
+PASS: gdb.mi/mi-nsintrall.exp: stop 2
+PASS: gdb.mi/mi-nsintrall.exp: stop 3
+PASS: gdb.mi/mi-nsintrall.exp: stop 4
+PASS: gdb.mi/mi-nsintrall.exp: stop 5
+PASS: gdb.mi/mi-nsintrall.exp: thread state, all stopped
+PASS: gdb.mi/mi-nsintrall.exp: resume all, no breakpoint
+PASS: gdb.mi/mi-nsintrall.exp: thread state, resume all
+PASS: gdb.mi/mi-nsintrall.exp: interrupt all threads
+PASS: gdb.mi/mi-nsintrall.exp: interrupt 0
+PASS: gdb.mi/mi-nsintrall.exp: interrupt 1
+PASS: gdb.mi/mi-nsintrall.exp: interrupt 2
+PASS: gdb.mi/mi-nsintrall.exp: interrupt 3
+PASS: gdb.mi/mi-nsintrall.exp: interrupt 4
+PASS: gdb.mi/mi-nsintrall.exp: interrupt 5
+PASS: gdb.mi/mi-nsintrall.exp: thread state, all interrupted
+PASS: gdb.mi/mi-nsintrall.exp: resume all after interrupting
+PASS: gdb.mi/mi-nsintrall.exp: thread state, resume all after interrupting
+Running ./gdb.mi/mi-nsmoribund.exp ...
+PASS: gdb.mi/mi-nsmoribund.exp: successfully compiled posix threads test case
+PASS: gdb.mi/mi-nsmoribund.exp: breakpoint at main
+PASS: gdb.mi/mi-nsmoribund.exp: mi runto main
+PASS: gdb.mi/mi-nsmoribund.exp: breakpoint at thread_function
+PASS: gdb.mi/mi-nsmoribund.exp: stop 0
+PASS: gdb.mi/mi-nsmoribund.exp: stop 1
+PASS: gdb.mi/mi-nsmoribund.exp: stop 2
+PASS: gdb.mi/mi-nsmoribund.exp: stop 3
+PASS: gdb.mi/mi-nsmoribund.exp: stop 4
+PASS: gdb.mi/mi-nsmoribund.exp: stop 5
+PASS: gdb.mi/mi-nsmoribund.exp: stop 6
+PASS: gdb.mi/mi-nsmoribund.exp: stop 7
+PASS: gdb.mi/mi-nsmoribund.exp: stop 8
+PASS: gdb.mi/mi-nsmoribund.exp: stop 9
+PASS: gdb.mi/mi-nsmoribund.exp: thread state: all stopped except the main thread
+PASS: gdb.mi/mi-nsmoribund.exp: select thread 5
+PASS: gdb.mi/mi-nsmoribund.exp: thread specific breakpoint at thread_function
+PASS: gdb.mi/mi-nsmoribund.exp: resume all, thread specific breakpoint
+PASS: gdb.mi/mi-nsmoribund.exp: hit thread specific breakpoint
+PASS: gdb.mi/mi-nsmoribund.exp: thread state: all running except the breakpoint thread
+PASS: gdb.mi/mi-nsmoribund.exp: resume all, program exited normally
+Running ./gdb.mi/mi-ns-stale-regcache.exp ...
+PASS: gdb.mi/mi-ns-stale-regcache.exp: breakpoint at main
+PASS: gdb.mi/mi-ns-stale-regcache.exp: mi runto main
+PASS: gdb.mi/mi-ns-stale-regcache.exp: no stale register cache of resumed thread
+PASS: gdb.mi/mi-ns-stale-regcache.exp: no stale frame info of resumed thread
+PASS: gdb.mi/mi-ns-stale-regcache.exp: main thread still running
+Running ./gdb.mi/mi-nsthrexec.exp ...
+Running ./gdb.mi/mi-pending.exp ...
+PASS: gdb.mi/mi-pending.exp: MI pending breakpoint on pendfunc1
+PASS: gdb.mi/mi-pending.exp: MI pending breakpoint on mi-pendshr.c:pendfunc2 if x==4
+PASS: gdb.mi/mi-pending.exp: Run till MI pending breakpoint on pendfunc1
+PASS: gdb.mi/mi-pending.exp: Run till MI pending breakpoint on pendfunc1 a second time
+PASS: gdb.mi/mi-pending.exp: Run till MI pending breakpoint on pendfunc2 with x==4
+Running ./gdb.mi/mi-pthreads.exp ...
+PASS: gdb.mi/mi-pthreads.exp: successfully compiled posix threads test case
+PASS: gdb.mi/mi-pthreads.exp: breakpoint at done_making_threads
+PASS: gdb.mi/mi-pthreads.exp: mi runto done_making_threads
+PASS: gdb.mi/mi-pthreads.exp: -thread_list_ids (in check_mi_thread_command_set)
+PASS: gdb.mi/mi-pthreads.exp: finding threads in MI output (in check_mi_thread_command_set)
+PASS: gdb.mi/mi-pthreads.exp: check_mi_thread_command_set: -thread-select
+PASS: gdb.mi/mi-pthreads.exp: check_mi_thread_command_set: -thread-select 123456789
+PASS: gdb.mi/mi-pthreads.exp: check_mi_thread_command_set: -thread-select 6
+PASS: gdb.mi/mi-pthreads.exp: check_mi_thread_command_set: -thread-select 5
+PASS: gdb.mi/mi-pthreads.exp: check_mi_thread_command_set: -thread-select 4
+PASS: gdb.mi/mi-pthreads.exp: check_mi_thread_command_set: -thread-select 3
+PASS: gdb.mi/mi-pthreads.exp: check_mi_thread_command_set: -thread-select 2
+PASS: gdb.mi/mi-pthreads.exp: check_mi_thread_command_set: -thread-select 1
+PASS: gdb.mi/mi-pthreads.exp: check =thread-selected: thread 6
+PASS: gdb.mi/mi-pthreads.exp: check =thread-selected: thread 5
+PASS: gdb.mi/mi-pthreads.exp: check =thread-selected: thread 4
+PASS: gdb.mi/mi-pthreads.exp: check =thread-selected: thread 3
+PASS: gdb.mi/mi-pthreads.exp: check =thread-selected: thread 2
+PASS: gdb.mi/mi-pthreads.exp: check =thread-selected: thread 1
+Running ./gdb.mi/mi-read-memory.exp ...
+PASS: gdb.mi/mi-read-memory.exp: breakpoint at main
+PASS: gdb.mi/mi-read-memory.exp: mi runto main
+PASS: gdb.mi/mi-read-memory.exp: next at main
+PASS: gdb.mi/mi-read-memory.exp: no arguments
+PASS: gdb.mi/mi-read-memory.exp: 3x2, one byte
+PASS: gdb.mi/mi-read-memory.exp: 3x2, one byte offset by -6
+PASS: gdb.mi/mi-read-memory.exp: expression in quotes
+PASS: gdb.mi/mi-read-memory.exp: ascii and data
+PASS: gdb.mi/mi-read-memory.exp: decimal
+PASS: gdb.mi/mi-read-memory.exp: octal
+Running ./gdb.mi/mi-record-changed.exp ...
+Running ./gdb.mi/mi-regs.exp ...
+Running ./gdb.mi/mi-return.exp ...
+PASS: gdb.mi/mi-return.exp: breakpoint at callee4
+PASS: gdb.mi/mi-return.exp: mi runto callee4
+PASS: gdb.mi/mi-return.exp: delete all breakpoints
+PASS: gdb.mi/mi-return.exp: return from callee4 now
+Running ./gdb.mi/mi-reverse.exp ...
+Running ./gdb.mi/mi-simplerun.exp ...
+PASS: gdb.mi/mi-simplerun.exp: break-insert operation
+PASS: gdb.mi/mi-simplerun.exp: insert breakpoint at basics.c:callee2
+PASS: gdb.mi/mi-simplerun.exp: insert breakpoint at basics.c:$line_callee3_head
+PASS: gdb.mi/mi-simplerun.exp: insert breakpoint at "<fullfilename>":$line_callee4_head
+PASS: gdb.mi/mi-simplerun.exp: list of breakpoints
+PASS: gdb.mi/mi-simplerun.exp: disabling of breakpoints
+PASS: gdb.mi/mi-simplerun.exp: list of breakpoints, 16 disabled
+PASS: gdb.mi/mi-simplerun.exp: run to main
+PASS: gdb.mi/mi-simplerun.exp: next at main
+PASS: gdb.mi/mi-simplerun.exp: step at main
+PASS: gdb.mi/mi-simplerun.exp: step to callee4
+PASS: gdb.mi/mi-simplerun.exp: exec-finish
+PASS: gdb.mi/mi-simplerun.exp: continue to end
+Running ./gdb.mi/mi-solib.exp ...
+PASS: gdb.mi/mi-solib.exp: set stop-on-solib-events
+PASS: gdb.mi/mi-solib.exp: check for solib event
+Running ./gdb.mi/mi-stack.exp ...
+PASS: gdb.mi/mi-stack.exp: breakpoint at callee4
+PASS: gdb.mi/mi-stack.exp: mi runto callee4
+PASS: gdb.mi/mi-stack.exp: stack frame listing
+PASS: gdb.mi/mi-stack.exp: stack frame listing 1 1
+PASS: gdb.mi/mi-stack.exp: stack frame listing 1 3
+PASS: gdb.mi/mi-stack.exp: stack frame listing wrong
+PASS: gdb.mi/mi-stack.exp: selected frame listing
+PASS: gdb.mi/mi-stack.exp: stack frame listing 1 300
+PASS: gdb.mi/mi-stack.exp: stack args listing 0
+PASS: gdb.mi/mi-stack.exp: stack args listing 0 1 1
+PASS: gdb.mi/mi-stack.exp: stack args listing 0 1 3
+PASS: gdb.mi/mi-stack.exp: stack args listing 1
+PASS: gdb.mi/mi-stack.exp: stack args listing 1 1 1
+PASS: gdb.mi/mi-stack.exp: stack args listing 1 1 3
+PASS: gdb.mi/mi-stack.exp: stack args listing wrong
+PASS: gdb.mi/mi-stack.exp: stack args listing 1 1 300
+PASS: gdb.mi/mi-stack.exp: stack locals listing of names
+PASS: gdb.mi/mi-stack.exp: next's in callee4
+PASS: gdb.mi/mi-stack.exp: stack locals listing of names and values
+PASS: gdb.mi/mi-stack.exp: stack locals listing, simple types: names and values, complex type: names and types
+PASS: gdb.mi/mi-stack.exp: stack locals listing wrong
+PASS: gdb.mi/mi-stack.exp: stack select frame 1
+PASS: gdb.mi/mi-stack.exp: stack locals listing for new frame
+PASS: gdb.mi/mi-stack.exp: stack locals for same frame (level 1)
+PASS: gdb.mi/mi-stack.exp: stack info-depth
+PASS: gdb.mi/mi-stack.exp: stack info-depth 3
+PASS: gdb.mi/mi-stack.exp: stack info-depth 99
+PASS: gdb.mi/mi-stack.exp: stack info-depth wrong usage
+Running ./gdb.mi/mi-stepi.exp ...
+PASS: gdb.mi/mi-stepi.exp: breakpoint at main
+PASS: gdb.mi/mi-stepi.exp: mi runto main
+PASS: gdb.mi/mi-stepi.exp: step-instruction at main
+PASS: gdb.mi/mi-stepi.exp: step-instruction at main (line check)
+PASS: gdb.mi/mi-stepi.exp: next-instruction at main
+PASS: gdb.mi/mi-stepi.exp: next-instruction at main (line check)
+PASS: gdb.mi/mi-stepi.exp: next-instruction at main 2
+PASS: gdb.mi/mi-stepi.exp: next-instruction at main 2 (line check)
+Running ./gdb.mi/mi-stepn.exp ...
+PASS: gdb.mi/mi-stepn.exp: breakpoint at main
+PASS: gdb.mi/mi-stepn.exp: mi runto main
+PASS: gdb.mi/mi-stepn.exp: breakpoint at do_nothing
+PASS: gdb.mi/mi-stepn.exp: breakpoint-hit reported
+Running ./gdb.mi/mi-syn-frame.exp ...
+PASS: gdb.mi/mi-syn-frame.exp: breakpoint at main
+PASS: gdb.mi/mi-syn-frame.exp: mi runto main
+PASS: gdb.mi/mi-syn-frame.exp: insert breakpoint foo
+PASS: gdb.mi/mi-syn-frame.exp: call inferior's function with a breakpoint set in it
+PASS: gdb.mi/mi-syn-frame.exp: backtrace from inferior function stopped at bp, showing gdb dummy frame
+PASS: gdb.mi/mi-syn-frame.exp: finished exec continue
+PASS: gdb.mi/mi-syn-frame.exp: list stack frames
+PASS: gdb.mi/mi-syn-frame.exp: insert breakpoint subroutine
+PASS: gdb.mi/mi-syn-frame.exp: data evaluate expression
+PASS: gdb.mi/mi-syn-frame.exp: list stack frames
+PASS: gdb.mi/mi-syn-frame.exp: finished exec continue
+PASS: gdb.mi/mi-syn-frame.exp: list stack frames
+PASS: gdb.mi/mi-syn-frame.exp: call inferior function which raises exception
+PASS: gdb.mi/mi-syn-frame.exp: backtrace from inferior function at exception
+Running ./gdb.mi/mi-until.exp ...
+PASS: gdb.mi/mi-until.exp: break-insert operation
+PASS: gdb.mi/mi-until.exp: run to main
+PASS: gdb.mi/mi-until.exp: break-delete 1
+KFAIL: gdb.mi/mi-until.exp: until after while loop (stopped at wrong place) (PRMS: gdb/2104)
+PASS: gdb.mi/mi-until.exp: until line number
+PASS: gdb.mi/mi-until.exp: until line number:file
+PASS: gdb.mi/mi-until.exp: until after current function
+Running ./gdb.mi/mi-var-block.exp ...
+PASS: gdb.mi/mi-var-block.exp: breakpoint at do_block_tests
+PASS: gdb.mi/mi-var-block.exp: mi runto do_block_tests
+PASS: gdb.mi/mi-var-block.exp: create local variable cb
+PASS: gdb.mi/mi-var-block.exp: try to create local variable foo
+PASS: gdb.mi/mi-var-block.exp: step at do_block_test 1
+PASS: gdb.mi/mi-var-block.exp: delete var foo 1
+PASS: gdb.mi/mi-var-block.exp: create local variable foo
+PASS: gdb.mi/mi-var-block.exp: step at do_block_test 2
+PASS: gdb.mi/mi-var-block.exp: update all vars: cb foo changed
+PASS: gdb.mi/mi-var-block.exp: step at do_block_test 3
+PASS: gdb.mi/mi-var-block.exp: create local variable inner_foo
+PASS: gdb.mi/mi-var-block.exp: step at do_block_test 4
+PASS: gdb.mi/mi-var-block.exp: create local variable foo2
+XFAIL: gdb.mi/mi-var-block.exp: update inner_foo: should be out of scope: KNOWN PROBLEM
+XFAIL: gdb.mi/mi-var-block.exp: evaluate inner_foo: should be out of scope: KNOWN PROBLEM
+PASS: gdb.mi/mi-var-block.exp: update foo: did not change
+PASS: gdb.mi/mi-var-block.exp: delete var inner_foo
+PASS: gdb.mi/mi-var-block.exp: step at do_block_test 5
+XFAIL: gdb.mi/mi-var-block.exp: update foo2: should be out of scope: KNOWN PROBLEM
+PASS: gdb.mi/mi-var-block.exp: step at do_block_test 6
+XFAIL: gdb.mi/mi-var-block.exp: update foo2 should be out of scope: KNOWN PROBLEM
+XFAIL: gdb.mi/mi-var-block.exp: update foo should be out of scope: KNOWN PROBLEM
+PASS: gdb.mi/mi-var-block.exp: update cb
+PASS: gdb.mi/mi-var-block.exp: delete var foo 2
+PASS: gdb.mi/mi-var-block.exp: delete var foo2
+PASS: gdb.mi/mi-var-block.exp: delete var cb
+Running ./gdb.mi/mi-var-child.exp ...
+PASS: gdb.mi/mi-var-child.exp: breakpoint at do_children_tests
+PASS: gdb.mi/mi-var-child.exp: mi runto do_children_tests
+PASS: gdb.mi/mi-var-child.exp: run to 215 (set breakpoint)
+PASS: gdb.mi/mi-var-child.exp: create local variable struct_declarations
+PASS: gdb.mi/mi-var-child.exp: get children of struct_declarations
+PASS: gdb.mi/mi-var-child.exp: get number of children of struct_declarations
+PASS: gdb.mi/mi-var-child.exp: get children of struct_declarations.integer
+PASS: gdb.mi/mi-var-child.exp: get number of children of struct_declarations.integer
+PASS: gdb.mi/mi-var-child.exp: get children of struct_declarations.character
+PASS: gdb.mi/mi-var-child.exp: get number of children of struct_declarations.character
+PASS: gdb.mi/mi-var-child.exp: get children of struct_declarations.char_ptr
+PASS: gdb.mi/mi-var-child.exp: get number of children of struct_declarations.char_ptr
+PASS: gdb.mi/mi-var-child.exp: get children of struct_declarations.long_int
+PASS: gdb.mi/mi-var-child.exp: get number of children of struct_declarations.long_int
+PASS: gdb.mi/mi-var-child.exp: get children of struct_declarations.int_ptr_ptr
+PASS: gdb.mi/mi-var-child.exp: get number of children of struct_declarations.int_ptr_ptr
+PASS: gdb.mi/mi-var-child.exp: get children of struct_declarations.long_array
+PASS: gdb.mi/mi-var-child.exp: get number of children of struct_declarations.long_array
+PASS: gdb.mi/mi-var-child.exp: get children of struct_declarations.func_ptr
+PASS: gdb.mi/mi-var-child.exp: get number of children of struct_declarations.func_ptr
+PASS: gdb.mi/mi-var-child.exp: get children of struct_declarations.func_ptr_struct
+PASS: gdb.mi/mi-var-child.exp: get number of children of struct_declarations.func_ptr_struct
+PASS: gdb.mi/mi-var-child.exp: get children of struct_declarations.func_ptr_ptr
+PASS: gdb.mi/mi-var-child.exp: get number of children of struct_declarations.func_ptr_ptr
+PASS: gdb.mi/mi-var-child.exp: get children of struct_declarations.u1
+PASS: gdb.mi/mi-var-child.exp: get number of children of struct_declarations.u1
+PASS: gdb.mi/mi-var-child.exp: get children of struct_declarations.s2
+PASS: gdb.mi/mi-var-child.exp: get number of children of struct_declarations.s2
+PASS: gdb.mi/mi-var-child.exp: get children of struct_declarations.long_array.1
+PASS: gdb.mi/mi-var-child.exp: get number of children of struct_declarations.long_array.1
+PASS: gdb.mi/mi-var-child.exp: get children of struct_declarations.long_array.2
+PASS: gdb.mi/mi-var-child.exp: get number of children of struct_declarations.long_array.2
+PASS: gdb.mi/mi-var-child.exp: get children of struct_declarations.long_array.3
+PASS: gdb.mi/mi-var-child.exp: get number of children of struct_declarations.long_array.3
+PASS: gdb.mi/mi-var-child.exp: get children of struct_declarations.long_array.4
+PASS: gdb.mi/mi-var-child.exp: get number of children of struct_declarations.long_array.4
+PASS: gdb.mi/mi-var-child.exp: get children of struct_declarations.long_array.5
+PASS: gdb.mi/mi-var-child.exp: get number of children of struct_declarations.long_array.5
+PASS: gdb.mi/mi-var-child.exp: get children of struct_declarations.long_array.6
+PASS: gdb.mi/mi-var-child.exp: get number of children of struct_declarations.long_array.6
+PASS: gdb.mi/mi-var-child.exp: get children of struct_declarations.long_array.7
+PASS: gdb.mi/mi-var-child.exp: get number of children of struct_declarations.long_array.7
+PASS: gdb.mi/mi-var-child.exp: get children of struct_declarations.long_array.8
+PASS: gdb.mi/mi-var-child.exp: get number of children of struct_declarations.long_array.8
+PASS: gdb.mi/mi-var-child.exp: get children of struct_declarations.long_array.9
+PASS: gdb.mi/mi-var-child.exp: get number of children of struct_declarations.long_array.9
+PASS: gdb.mi/mi-var-child.exp: get children of struct_declarations.u1.a
+PASS: gdb.mi/mi-var-child.exp: get number of children of struct_declarations.u1.a
+PASS: gdb.mi/mi-var-child.exp: get children of struct_declarations.u1.b
+PASS: gdb.mi/mi-var-child.exp: get number of children of struct_declarations.u1.b
+PASS: gdb.mi/mi-var-child.exp: get children of struct_declarations.u1.c
+PASS: gdb.mi/mi-var-child.exp: get number of children of struct_declarations.u1.c
+PASS: gdb.mi/mi-var-child.exp: get children of struct_declarations.u1.d
+PASS: gdb.mi/mi-var-child.exp: get number of children of struct_declarations.u1.d
+PASS: gdb.mi/mi-var-child.exp: get children of struct_declarations.s2.u2
+PASS: gdb.mi/mi-var-child.exp: get number of children of struct_declarations.s2.u2
+PASS: gdb.mi/mi-var-child.exp: get children of struct_declarations.s2.g
+PASS: gdb.mi/mi-var-child.exp: get number of children of struct_declarations.s2.g
+PASS: gdb.mi/mi-var-child.exp: get children of struct_declarations.s2.h
+PASS: gdb.mi/mi-var-child.exp: get number of children of struct_declarations.s2.h
+PASS: gdb.mi/mi-var-child.exp: get children of struct_declarations.s2.i
+PASS: gdb.mi/mi-var-child.exp: get number of children of struct_declarations.s2.i
+PASS: gdb.mi/mi-var-child.exp: get children of struct_declarations.s2.u2.u1s1
+PASS: gdb.mi/mi-var-child.exp: get number of children of struct_declarations.s2.u2.u1s1
+PASS: gdb.mi/mi-var-child.exp: get children of struct_declarations.s2.u2.f
+PASS: gdb.mi/mi-var-child.exp: get number of children of struct_declarations.s2.u2.f
+PASS: gdb.mi/mi-var-child.exp: get children of struct_declarations.s2.u2.u1s2
+PASS: gdb.mi/mi-var-child.exp: get number of children of struct_declarations.s2.u2.u1s2
+PASS: gdb.mi/mi-var-child.exp: get children of struct_declarations.s2.u2.u1s1.d
+PASS: gdb.mi/mi-var-child.exp: get number of children of struct_declarations.s2.u2.u1s1.d
+PASS: gdb.mi/mi-var-child.exp: get children of struct_declarations.s2.u2.u1s1.e
+PASS: gdb.mi/mi-var-child.exp: get number of children of struct_declarations.s2.u2.u1s1.e
+PASS: gdb.mi/mi-var-child.exp: get children of struct_declarations.s2.u2.u1s1.func
+PASS: gdb.mi/mi-var-child.exp: get number of children of struct_declarations.s2.u2.u1s1.func
+PASS: gdb.mi/mi-var-child.exp: get children of struct_declarations.s2.u2.u1s1.foo
+PASS: gdb.mi/mi-var-child.exp: get number of children of struct_declarations.s2.u2.u1s1.foo
+PASS: gdb.mi/mi-var-child.exp: get children of struct_declarations.s2.u2.u1s2.array_ptr
+PASS: gdb.mi/mi-var-child.exp: get number of children of struct_declarations.s2.u2.u1s2.array_ptr
+PASS: gdb.mi/mi-var-child.exp: get children of struct_declarations.s2.u2.u1s2.func
+PASS: gdb.mi/mi-var-child.exp: get number of children of struct_declarations.s2.u2.u1s2.func
+PASS: gdb.mi/mi-var-child.exp: get children of struct_declarations.int_ptr_ptr.*int_ptr_ptr
+PASS: gdb.mi/mi-var-child.exp: get number of children of struct_declarations.int_ptr_ptr.*int_ptr_ptr
+PASS: gdb.mi/mi-var-child.exp: step to line $line_dct_123
+PASS: gdb.mi/mi-var-child.exp: create local variable weird
+PASS: gdb.mi/mi-var-child.exp: get children of weird
+PASS: gdb.mi/mi-var-child.exp: get number of children of weird
+PASS: gdb.mi/mi-var-child.exp: get children of weird.long_array
+PASS: gdb.mi/mi-var-child.exp: get number of children of weird.long_array
+PASS: gdb.mi/mi-var-child.exp: get children of weird.int_ptr_ptr
+PASS: gdb.mi/mi-var-child.exp: get number of children of weird.int_ptr_ptr
+PASS: gdb.mi/mi-var-child.exp: get children of weird.int_ptr_ptr.*int_ptr_ptr
+PASS: gdb.mi/mi-var-child.exp: get number of children of weird.int_ptr_ptr.*int_ptr_ptr
+PASS: gdb.mi/mi-var-child.exp: create local variable weird->int_ptr_ptr
+PASS: gdb.mi/mi-var-child.exp: get children of weird->int_ptr_ptr
+PASS: gdb.mi/mi-var-child.exp: get number of children of weird->int_ptr_ptr
+PASS: gdb.mi/mi-var-child.exp: get children of weird->int_ptr_ptr.*weird->int_ptr_ptr
+PASS: gdb.mi/mi-var-child.exp: get number of children of weird->int_ptr_ptr.*weird->int_ptr_ptr
+PASS: gdb.mi/mi-var-child.exp: get children of weird->int_ptr_ptr.*weird->int_ptr_ptr.**weird->int_ptr_ptr
+PASS: gdb.mi/mi-var-child.exp: get number of children of weird->int_ptr_ptr.*weird->int_ptr_ptr.**weird->int_ptr_ptr
+PASS: gdb.mi/mi-var-child.exp: is weird editable
+PASS: gdb.mi/mi-var-child.exp: is weird->int_ptr_ptr editable
+PASS: gdb.mi/mi-var-child.exp: is weird.int_ptr_ptr.*int_ptr_ptr editable
+PASS: gdb.mi/mi-var-child.exp: is weird.int_ptr_ptr.*int_ptr_ptr.**int_ptr_ptr editable
+PASS: gdb.mi/mi-var-child.exp: is weird.u1 editable
+PASS: gdb.mi/mi-var-child.exp: is weird.s2 editable
+PASS: gdb.mi/mi-var-child.exp: is struct_declarations.u1.a editable
+PASS: gdb.mi/mi-var-child.exp: is struct_declarations.u1.b editable
+PASS: gdb.mi/mi-var-child.exp: is struct_declarations.u1.c editable
+PASS: gdb.mi/mi-var-child.exp: is struct_declarations.long_array editable
+PASS: gdb.mi/mi-var-child.exp: is struct_declarations.long_array.0 editable
+PASS: gdb.mi/mi-var-child.exp: is struct_declarations editable
+PASS: gdb.mi/mi-var-child.exp: delete var weird
+PASS: gdb.mi/mi-var-child.exp: update all vars. None changed
+PASS: gdb.mi/mi-var-child.exp: step $line_dct_123 + 1
+PASS: gdb.mi/mi-var-child.exp: update all vars struct_declarations.integer
+PASS: gdb.mi/mi-var-child.exp: step $line_dct_123 + 4
+PASS: gdb.mi/mi-var-child.exp: update all vars struct_declarations.char_ptr
+PASS: gdb.mi/mi-var-child.exp: step $line_dct_123 + 5
+PASS: gdb.mi/mi-var-child.exp: update all vars int_ptr_ptr and children changed
+PASS: gdb.mi/mi-var-child.exp: step $line_dct_123 + 6
+PASS: gdb.mi/mi-var-child.exp: update all vars struct_declarations.long_array.0 changed
+PASS: gdb.mi/mi-var-child.exp: step $line_dct_123 + 7
+PASS: gdb.mi/mi-var-child.exp: update all vars struct_declarations.long_array.1 changed
+PASS: gdb.mi/mi-var-child.exp: step $line_dct_123 + 8
+PASS: gdb.mi/mi-var-child.exp: update all vars struct_declarations.long_array.2 changed
+PASS: gdb.mi/mi-var-child.exp: step $line_dct_nothing
+PASS: gdb.mi/mi-var-child.exp: update all vars struct_declarations.long_array.3-9 changed
+PASS: gdb.mi/mi-var-child.exp: step $line_dct_nothing + 1
+PASS: gdb.mi/mi-var-child.exp: update all vars struct_declarations.func_ptr changed
+PASS: gdb.mi/mi-var-child.exp: step $line_dct_nothing + 2
+PASS: gdb.mi/mi-var-child.exp: update all vars struct_declarations.long_array.10 changed, don't print values.
+PASS: gdb.mi/mi-var-child.exp: step $line_dct_a0_0
+PASS: gdb.mi/mi-var-child.exp: update all vars struct_declarations.long_array.11 changed, print values.
+PASS: gdb.mi/mi-var-child.exp: listing of names and values of children
+PASS: gdb.mi/mi-var-child.exp: listing of children, simple types: names, type and values, complex types: names and types
+PASS: gdb.mi/mi-var-child.exp: delete var struct_declarations
+PASS: gdb.mi/mi-var-child.exp: delete var weird->int_ptr_ptr
+PASS: gdb.mi/mi-var-child.exp: step $line_dct_snp0 + 1
+PASS: gdb.mi/mi-var-child.exp: create local variable psnp->char_ptr
+PASS: gdb.mi/mi-var-child.exp: get children of psnp->char_ptr
+PASS: gdb.mi/mi-var-child.exp: get number of children of psnp->char_ptr
+PASS: gdb.mi/mi-var-child.exp: get children of psnp->char_ptr.*psnp->char_ptr
+PASS: gdb.mi/mi-var-child.exp: get number of children of psnp->char_ptr.*psnp->char_ptr
+PASS: gdb.mi/mi-var-child.exp: get children of psnp->char_ptr.*psnp->char_ptr.**psnp->char_ptr
+PASS: gdb.mi/mi-var-child.exp: get children of psnp->char_ptr.*psnp->char_ptr.**psnp->char_ptr.***psnp->char_ptr
+PASS: gdb.mi/mi-var-child.exp: get number of children of psnp->char_ptr.*psnp->char_ptr.**psnp->char_ptr
+PASS: gdb.mi/mi-var-child.exp: get children of psnp->char_ptr.*psnp->char_ptr.**psnp->char_ptr.***psnp->char_ptr
+PASS: gdb.mi/mi-var-child.exp: get number of children of psnp->char_ptr.*psnp->char_ptr.**psnp->char_ptr.***psnp->char_ptr
+PASS: gdb.mi/mi-var-child.exp: get children of psnp->char_ptr.*psnp->char_ptr.**psnp->char_ptr.***psnp->char_ptr.****psnp->char_ptr
+PASS: gdb.mi/mi-var-child.exp: get number of children of psnp->char_ptr.*psnp->char_ptr.**psnp->char_ptr.***psnp->char_ptr.****psnp->char_ptr
+PASS: gdb.mi/mi-var-child.exp: create local variable psnp->long_ptr
+PASS: gdb.mi/mi-var-child.exp: get children of psnp->long_ptr
+PASS: gdb.mi/mi-var-child.exp: get number of children of psnp->long_ptr
+PASS: gdb.mi/mi-var-child.exp: get children of psnp->long_ptr.*psnp->long_ptr
+PASS: gdb.mi/mi-var-child.exp: get number of children of psnp->long_ptr.*psnp->long_ptr
+PASS: gdb.mi/mi-var-child.exp: get children of psnp->long_ptr.*psnp->long_ptr.**psnp->long_ptr
+PASS: gdb.mi/mi-var-child.exp: get number of children of psnp->long_ptr.*psnp->long_ptr.**psnp->long_ptr
+PASS: gdb.mi/mi-var-child.exp: get children of psnp->long_ptr.*psnp->long_ptr.**psnp->long_ptr.***psnp->long_ptr
+PASS: gdb.mi/mi-var-child.exp: get number of children of psnp->long_ptr.*psnp->long_ptr.**psnp->long_ptr.***psnp->long_ptr
+PASS: gdb.mi/mi-var-child.exp: get children of psnp->long_ptr.*psnp->long_ptr.**psnp->long_ptr.***psnp->long_ptr.****psnp->long_ptr
+PASS: gdb.mi/mi-var-child.exp: get number of children of psnp->long_ptr.*psnp->long_ptr.**psnp->long_ptr.***psnp->long_ptr.****psnp->long_ptr
+PASS: gdb.mi/mi-var-child.exp: create local variable psnp->ptrs
+PASS: gdb.mi/mi-var-child.exp: get children of psnp->ptrs
+PASS: gdb.mi/mi-var-child.exp: get number of children of psnp->ptrs
+PASS: gdb.mi/mi-var-child.exp: get children of psnp->ptrs.0
+PASS: gdb.mi/mi-var-child.exp: get number of children of psnp->ptrs.0
+PASS: gdb.mi/mi-var-child.exp: get children of psnp->ptrs.0.next
+PASS: gdb.mi/mi-var-child.exp: get number of children of psnp->ptrs.0.next
+PASS: gdb.mi/mi-var-child.exp: get children of psnp->ptrs.0.next.char_ptr
+PASS: gdb.mi/mi-var-child.exp: get number of children of psnp->ptrs.0.next.char_ptr
+PASS: gdb.mi/mi-var-child.exp: get children of psnp->ptrs.0.next.char_ptr.*char_ptr
+PASS: gdb.mi/mi-var-child.exp: get number of children of psnp->ptrs.0.next.char_ptr.*char_ptr
+PASS: gdb.mi/mi-var-child.exp: get children of psnp->ptrs.0.next.char_ptr.*char_ptr.**char_ptr
+PASS: gdb.mi/mi-var-child.exp: get children of psnp->ptrs.0.next.char_ptr.*char_ptr.**char_ptr
+PASS: gdb.mi/mi-var-child.exp: get number of children of psnp->ptrs.0.next.char_ptr.*char_ptr.**char_ptr
+PASS: gdb.mi/mi-var-child.exp: get children of psnp->ptrs.0.next.char_ptr.*char_ptr.**char_ptr.***char_ptr
+PASS: gdb.mi/mi-var-child.exp: get number of children of psnp->ptrs.0.next.char_ptr.*char_ptr.**char_ptr.***char_ptr
+PASS: gdb.mi/mi-var-child.exp: get children of psnp->ptrs.0.next.char_ptr.*char_ptr.**char_ptr.***char_ptr
+PASS: gdb.mi/mi-var-child.exp: get number of children of psnp->ptrs.0.next.char_ptr.*char_ptr.**char_ptr.***char_ptr
+PASS: gdb.mi/mi-var-child.exp: get children of psnp->ptrs.0.next.next
+PASS: gdb.mi/mi-var-child.exp: get children of psnp->ptrs.0.next.next.ptrs
+PASS: gdb.mi/mi-var-child.exp: step $line_dct_snp0 + 2
+PASS: gdb.mi/mi-var-child.exp: update all vars psnp->char_ptr (and 0.char_ptr) changed
+PASS: gdb.mi/mi-var-child.exp: step $line_dct_snp0 + 3
+PASS: gdb.mi/mi-var-child.exp: update all vars psnp->next->char_ptr (and 1.char_ptr) changed
+PASS: gdb.mi/mi-var-child.exp: step $line_dct_snp0 + 4
+PASS: gdb.mi/mi-var-child.exp: update all vars psnp->next->next->char_ptr (and 2.char_ptr) changed
+PASS: gdb.mi/mi-var-child.exp: step $line_dct_snp0 + 5
+PASS: gdb.mi/mi-var-child.exp: update all vars psnp->long_ptr (and 0.long_ptr) changed
+PASS: gdb.mi/mi-var-child.exp: step $line_dct_snp0 + 6
+XFAIL: gdb.mi/mi-var-child.exp: update all vars psnp->next->long_ptr (and 1.long_ptr) changed
+PASS: gdb.mi/mi-var-child.exp: step $line_dct_snp0 + 7
+PASS: gdb.mi/mi-var-child.exp: update all vars psnp->next->next->long_ptr (and 2.long_ptr) changed
+PASS: gdb.mi/mi-var-child.exp: run to mi-var-child.c:323 (set breakpoint)
+PASS: gdb.mi/mi-var-child.exp: create varobj for s
+PASS: gdb.mi/mi-var-child.exp: list children of S
+PASS: gdb.mi/mi-var-child.exp: delete S.a
+PASS: gdb.mi/mi-var-child.exp: delete S.b
+PASS: gdb.mi/mi-var-child.exp: delete S
+Running ./gdb.mi/mi-var-child-f.exp ...
+UNSUPPORTED: gdb.mi/mi-var-child-f.exp: compilation array.f
+Running ./gdb.mi/mi-var-cmd.exp ...
+PASS: gdb.mi/mi-var-cmd.exp: create global variable
+PASS: gdb.mi/mi-var-cmd.exp: create non-existent variable
+PASS: gdb.mi/mi-var-cmd.exp: create out of scope variable
+PASS: gdb.mi/mi-var-cmd.exp: breakpoint at do_locals_tests
+PASS: gdb.mi/mi-var-cmd.exp: mi runto do_locals_tests
+PASS: gdb.mi/mi-var-cmd.exp: run to 148 (set breakpoint)
+PASS: gdb.mi/mi-var-cmd.exp: create local variable linteger
+PASS: gdb.mi/mi-var-cmd.exp: create local variable lpinteger
+PASS: gdb.mi/mi-var-cmd.exp: create local variable lcharacter
+PASS: gdb.mi/mi-var-cmd.exp: create local variable lpcharacter
+PASS: gdb.mi/mi-var-cmd.exp: create local variable llong
+PASS: gdb.mi/mi-var-cmd.exp: create local variable lplong
+PASS: gdb.mi/mi-var-cmd.exp: create local variable lfloat
+PASS: gdb.mi/mi-var-cmd.exp: create local variable lpfloat
+PASS: gdb.mi/mi-var-cmd.exp: create local variable ldouble
+PASS: gdb.mi/mi-var-cmd.exp: create local variable lpdouble
+PASS: gdb.mi/mi-var-cmd.exp: create local variable lsimple
+PASS: gdb.mi/mi-var-cmd.exp: create local variable lpsimple
+PASS: gdb.mi/mi-var-cmd.exp: create local variable func
+PASS: gdb.mi/mi-var-cmd.exp: create lsimple.character
+PASS: gdb.mi/mi-var-cmd.exp: create lsimple->integer
+PASS: gdb.mi/mi-var-cmd.exp: create lsimple.integer
+PASS: gdb.mi/mi-var-cmd.exp: create int
+PASS: gdb.mi/mi-var-cmd.exp: update all vars
+PASS: gdb.mi/mi-var-cmd.exp: step at do_locals_test
+PASS: gdb.mi/mi-var-cmd.exp: update all vars: linteger changed
+PASS: gdb.mi/mi-var-cmd.exp: step at do_locals_tests (2)
+PASS: gdb.mi/mi-var-cmd.exp: update all vars: lpinteger changed
+PASS: gdb.mi/mi-var-cmd.exp: step at do_locals_tests (3)
+PASS: gdb.mi/mi-var-cmd.exp: update all vars: lcharacter changed
+PASS: gdb.mi/mi-var-cmd.exp: step at do_locals_tests (4)
+PASS: gdb.mi/mi-var-cmd.exp: update all vars: lpcharacter changed
+PASS: gdb.mi/mi-var-cmd.exp: step at do_locals_tests (5)
+PASS: gdb.mi/mi-var-cmd.exp: update all vars: many changed
+PASS: gdb.mi/mi-var-cmd.exp: step at do_locals_tests (6)
+PASS: gdb.mi/mi-var-cmd.exp: update all vars: func and lpsimple changed
+PASS: gdb.mi/mi-var-cmd.exp: step at do_locals_tests (7)
+PASS: gdb.mi/mi-var-cmd.exp: update all vars: lsimple and others changed
+PASS: gdb.mi/mi-var-cmd.exp: assign to global_simple
+PASS: gdb.mi/mi-var-cmd.exp: assign to linteger
+PASS: gdb.mi/mi-var-cmd.exp: update all vars: linteger changed after assign
+PASS: gdb.mi/mi-var-cmd.exp: assign to linteger again, same value
+PASS: gdb.mi/mi-var-cmd.exp: update all vars: linteger not changed after same assign
+PASS: gdb.mi/mi-var-cmd.exp: eval linteger
+PASS: gdb.mi/mi-var-cmd.exp: assign to lpinteger
+PASS: gdb.mi/mi-var-cmd.exp: update all vars: lpinteger changed after assign
+PASS: gdb.mi/mi-var-cmd.exp: update all vars: no changes on second update
+PASS: gdb.mi/mi-var-cmd.exp: eval lpinteger
+PASS: gdb.mi/mi-var-cmd.exp: assign to linteger
+PASS: gdb.mi/mi-var-cmd.exp: assign to lpinteger
+PASS: gdb.mi/mi-var-cmd.exp: assign to lcharacter
+PASS: gdb.mi/mi-var-cmd.exp: eval lcharacter
+PASS: gdb.mi/mi-var-cmd.exp: assign to llong
+PASS: gdb.mi/mi-var-cmd.exp: eval llong
+PASS: gdb.mi/mi-var-cmd.exp: assign to llong
+PASS: gdb.mi/mi-var-cmd.exp: assign to lplong
+PASS: gdb.mi/mi-var-cmd.exp: eval lplong
+PASS: gdb.mi/mi-var-cmd.exp: assign to lplong
+PASS: gdb.mi/mi-var-cmd.exp: assign to lfloat
+PASS: gdb.mi/mi-var-cmd.exp: eval lfloat
+PASS: gdb.mi/mi-var-cmd.exp: assign to lfloat
+PASS: gdb.mi/mi-var-cmd.exp: assign to lpfloat
+PASS: gdb.mi/mi-var-cmd.exp: assign to ldouble
+PASS: gdb.mi/mi-var-cmd.exp: assign to func
+PASS: gdb.mi/mi-var-cmd.exp: assign to lsimple.character
+PASS: gdb.mi/mi-var-cmd.exp: assign to lsimple->integer
+PASS: gdb.mi/mi-var-cmd.exp: assign to lsimple.integer
+PASS: gdb.mi/mi-var-cmd.exp: var update
+PASS: gdb.mi/mi-var-cmd.exp: assign same value to func
+PASS: gdb.mi/mi-var-cmd.exp: assign same value to func (update)
+PASS: gdb.mi/mi-var-cmd.exp: create global variable array_ptr
+PASS: gdb.mi/mi-var-cmd.exp: assign array to pointer
+PASS: gdb.mi/mi-var-cmd.exp: assign array to pointer (update)
+PASS: gdb.mi/mi-var-cmd.exp: assign same array to pointer
+PASS: gdb.mi/mi-var-cmd.exp: assign same array to pointer (update)
+PASS: gdb.mi/mi-var-cmd.exp: breakpoint at subroutine1
+PASS: gdb.mi/mi-var-cmd.exp: mi runto subroutine1
+PASS: gdb.mi/mi-var-cmd.exp: create i
+PASS: gdb.mi/mi-var-cmd.exp: create l
+PASS: gdb.mi/mi-var-cmd.exp: create linteger
+PASS: gdb.mi/mi-var-cmd.exp: step at subroutine1
+XFAIL: gdb.mi/mi-var-cmd.exp: update all vars: changed FIXME
+PASS: gdb.mi/mi-var-cmd.exp: step at subroutine1 (2)
+PASS: gdb.mi/mi-var-cmd.exp: update all vars: i changed
+PASS: gdb.mi/mi-var-cmd.exp: step at subroutine1 (3)
+PASS: gdb.mi/mi-var-cmd.exp: update all vars: llong changed
+PASS: gdb.mi/mi-var-cmd.exp: next out of subroutine1
+PASS: gdb.mi/mi-var-cmd.exp: update all vars: all now out of scope
+PASS: gdb.mi/mi-var-cmd.exp: delete var
+PASS: gdb.mi/mi-var-cmd.exp: delete var linteger
+PASS: gdb.mi/mi-var-cmd.exp: delete var lpinteger
+PASS: gdb.mi/mi-var-cmd.exp: delete var lcharacter
+PASS: gdb.mi/mi-var-cmd.exp: delete var lpcharacter
+PASS: gdb.mi/mi-var-cmd.exp: delete var llong
+PASS: gdb.mi/mi-var-cmd.exp: delete var lplong
+PASS: gdb.mi/mi-var-cmd.exp: delete var lfloat
+PASS: gdb.mi/mi-var-cmd.exp: delete var lpfloat
+PASS: gdb.mi/mi-var-cmd.exp: delete var ldouble
+PASS: gdb.mi/mi-var-cmd.exp: delete var lpdouble
+PASS: gdb.mi/mi-var-cmd.exp: delete var lsimple
+PASS: gdb.mi/mi-var-cmd.exp: delete var lpsimple
+PASS: gdb.mi/mi-var-cmd.exp: delete var func
+PASS: gdb.mi/mi-var-cmd.exp: delete var lsimple.character
+PASS: gdb.mi/mi-var-cmd.exp: delete var lsimple->integer
+PASS: gdb.mi/mi-var-cmd.exp: delete var lsimple.integer
+PASS: gdb.mi/mi-var-cmd.exp: delete var i
+PASS: gdb.mi/mi-var-cmd.exp: delete var l
+PASS: gdb.mi/mi-var-cmd.exp: breakpoint at do_special_tests
+PASS: gdb.mi/mi-var-cmd.exp: mi runto do_special_tests
+PASS: gdb.mi/mi-var-cmd.exp: create selected_a
+PASS: gdb.mi/mi-var-cmd.exp: breakpoint at incr_a
+PASS: gdb.mi/mi-var-cmd.exp: mi runto incr_a
+PASS: gdb.mi/mi-var-cmd.exp: update selected_a in incr_a
+PASS: gdb.mi/mi-var-cmd.exp: step a line in incr_a
+PASS: gdb.mi/mi-var-cmd.exp: return from incr_a to do_special_tests
+PASS: gdb.mi/mi-var-cmd.exp: update selected_a in do_special_tests
+PASS: gdb.mi/mi-var-cmd.exp: floating varobj invalidation
+PASS: gdb.mi/mi-var-cmd.exp: delete selected_a
+PASS: gdb.mi/mi-var-cmd.exp: delete array_ptr
+FAIL: gdb.mi/mi-var-cmd.exp: run to var-cmd.c:351 (set breakpoint)
+FAIL: gdb.mi/mi-var-cmd.exp: wait for stop (frozen: step to 351)
+FAIL: gdb.mi/mi-var-cmd.exp: frozen: go to line 351
+FAIL: gdb.mi/mi-var-cmd.exp: frozen: step over 351 (MI error)
+PASS: gdb.mi/mi-var-cmd.exp: run to var-cmd.c:510 (set breakpoint)
+PASS: gdb.mi/mi-var-cmd.exp: create varobj for Data
+PASS: gdb.mi/mi-var-cmd.exp: list children of Data
+PASS: gdb.mi/mi-var-cmd.exp: access bitfield
+PASS: gdb.mi/mi-var-cmd.exp: run to var-cmd.c:453 (set breakpoint)
+PASS: gdb.mi/mi-var-cmd.exp: create floating varobj
+PASS: gdb.mi/mi-var-cmd.exp: update F (1)
+PASS: gdb.mi/mi-var-cmd.exp: check F (1)
+PASS: gdb.mi/mi-var-cmd.exp: run to var-cmd.c:464 (set breakpoint)
+PASS: gdb.mi/mi-var-cmd.exp: update F (2)
+PASS: gdb.mi/mi-var-cmd.exp: check F (2)
+PASS: gdb.mi/mi-var-cmd.exp: run to var-cmd.c:472 (set breakpoint)
+PASS: gdb.mi/mi-var-cmd.exp: update F (--all-values)
+PASS: gdb.mi/mi-var-cmd.exp: run to var-cmd.c:478 (set breakpoint)
+PASS: gdb.mi/mi-var-cmd.exp: update F (3)
+PASS: gdb.mi/mi-var-cmd.exp: check F (3)
+PASS: gdb.mi/mi-var-cmd.exp: inside breakpoint inside callee
+PASS: gdb.mi/mi-var-cmd.exp: continue to where i is initialized
+PASS: gdb.mi/mi-var-cmd.exp: update F inside callee
+PASS: gdb.mi/mi-var-cmd.exp: check F inside callee
+PASS: gdb.mi/mi-var-cmd.exp: create null_ptr
+PASS: gdb.mi/mi-var-cmd.exp: update null_ptr
+PASS: gdb.mi/mi-var-cmd.exp: delete null_ptr
+PASS: gdb.mi/mi-var-cmd.exp: kill program before endvar
+PASS: gdb.mi/mi-var-cmd.exp: create endvar
+PASS: gdb.mi/mi-var-cmd.exp: update endvar
+PASS: gdb.mi/mi-var-cmd.exp: delete endvar
+PASS: gdb.mi/mi-var-cmd.exp: breakpoint at do_locals_tests
+PASS: gdb.mi/mi-var-cmd.exp: mi runto do_locals_tests
+PASS: gdb.mi/mi-var-cmd.exp: in-and-out-of-scope: create varobj
+PASS: gdb.mi/mi-var-cmd.exp: in-and-out-of-scope: check initial value
+PASS: gdb.mi/mi-var-cmd.exp: breakpoint at main
+PASS: gdb.mi/mi-var-cmd.exp: mi runto main
+PASS: gdb.mi/mi-var-cmd.exp: in-and-out-of-scope: out of scope now
+PASS: gdb.mi/mi-var-cmd.exp: in-and-out-of-scope: out of scope now, not changed
+PASS: gdb.mi/mi-var-cmd.exp: breakpoint at do_locals_tests
+PASS: gdb.mi/mi-var-cmd.exp: mi runto do_locals_tests
+PASS: gdb.mi/mi-var-cmd.exp: in-and-out-of-scope: in scope now
+PASS: gdb.mi/mi-var-cmd.exp: in-and-out-of-scope: in scope now, not changed
+Running ./gdb.mi/mi-var-cp.exp ...
+PASS: gdb.mi/mi-var-cp.exp: run to mi-var-cp.cc:20 (set breakpoint)
+PASS: gdb.mi/mi-var-cp.exp: create varobj for rx
+PASS: gdb.mi/mi-var-cp.exp: update RX (1)
+PASS: gdb.mi/mi-var-cp.exp: check RX: expect 167
+PASS: gdb.mi/mi-var-cp.exp: update RX (2)
+PASS: gdb.mi/mi-var-cp.exp: check RX: expect 567
+PASS: gdb.mi/mi-var-cp.exp: update RX (3)
+PASS: gdb.mi/mi-var-cp.exp: delete RX
+PASS: gdb.mi/mi-var-cp.exp: run to mi-var-cp.cc:46 (set breakpoint)
+PASS: gdb.mi/mi-var-cp.exp: create varobj for s2
+PASS: gdb.mi/mi-var-cp.exp: list children of s2
+PASS: gdb.mi/mi-var-cp.exp: list children of s2.s
+PASS: gdb.mi/mi-var-cp.exp: list children of s2.s.public
+PASS: gdb.mi/mi-var-cp.exp: check S2.S.public.i
+PASS: gdb.mi/mi-var-cp.exp: check S2.S.public.j
+PASS: gdb.mi/mi-var-cp.exp: delete S2
+PASS: gdb.mi/mi-var-cp.exp: run to mi-var-cp.cc:82 (set breakpoint)
+PASS: gdb.mi/mi-var-cp.exp: create varobj for rptr_s
+PASS: gdb.mi/mi-var-cp.exp: list public child of RPTR
+PASS: gdb.mi/mi-var-cp.exp: list children of reference to pointer
+PASS: gdb.mi/mi-var-cp.exp: check i member
+PASS: gdb.mi/mi-var-cp.exp: check j member
+PASS: gdb.mi/mi-var-cp.exp: delete RPTR
+PASS: gdb.mi/mi-var-cp.exp: run to mi-var-cp.cc:105 (set breakpoint)
+PASS: gdb.mi/mi-var-cp.exp: create varobj for s
+PASS: gdb.mi/mi-var-cp.exp: create varobj for s
+PASS: gdb.mi/mi-var-cp.exp: check attributes of S
+PASS: gdb.mi/mi-var-cp.exp: check attributes of R
+PASS: gdb.mi/mi-var-cp.exp: -var-update should not list structure varobjs
+PASS: gdb.mi/mi-var-cp.exp: run to mi-var-cp.cc:145 (set breakpoint)
+PASS: gdb.mi/mi-var-cp.exp: create varobj for ip
+PASS: gdb.mi/mi-var-cp.exp: list children of IP
+PASS: gdb.mi/mi-var-cp.exp: -var-info-path-expression IP.*ip
+PASS: gdb.mi/mi-var-cp.exp: create varobj for dp
+PASS: gdb.mi/mi-var-cp.exp: list children of DP
+PASS: gdb.mi/mi-var-cp.exp: -var-info-path-expression DP.Base1
+PASS: gdb.mi/mi-var-cp.exp: list children of DP.public
+PASS: gdb.mi/mi-var-cp.exp: -var-info-path-expression DP.public.i
+PASS: gdb.mi/mi-var-cp.exp: list children of DP.Base1
+PASS: gdb.mi/mi-var-cp.exp: list children of DP.Base1.public
+PASS: gdb.mi/mi-var-cp.exp: -var-info-path-expression DP.Base1.public.i
+PASS: gdb.mi/mi-var-cp.exp: -var-info-path-expression DP.public
+PASS: gdb.mi/mi-var-cp.exp: create varobj for d
+PASS: gdb.mi/mi-var-cp.exp: list children of D
+PASS: gdb.mi/mi-var-cp.exp: -var-info-path-expression D.Base1
+PASS: gdb.mi/mi-var-cp.exp: run to mi-var-cp.cc:192 (set breakpoint)
+PASS: gdb.mi/mi-var-cp.exp: create varobj for array
+PASS: gdb.mi/mi-var-cp.exp: list children of A
+PASS: gdb.mi/mi-var-cp.exp: -var-info-path-expression A.2
+PASS: gdb.mi/mi-var-cp.exp: break in anonymous_structs_and_unions
+PASS: gdb.mi/mi-var-cp.exp: continue to anonymous_structs breakpoint
+PASS: gdb.mi/mi-var-cp.exp: VT: create root varobj for a
+PASS: gdb.mi/mi-var-cp.exp: VT: list children of a1
+PASS: gdb.mi/mi-var-cp.exp: path expression for a1
+PASS: gdb.mi/mi-var-cp.exp: expression for a1
+PASS: gdb.mi/mi-var-cp.exp: VT: list children of a1.public
+PASS: gdb.mi/mi-var-cp.exp: path expression for a1.public
+PASS: gdb.mi/mi-var-cp.exp: expression for a1.public
+PASS: gdb.mi/mi-var-cp.exp: VT: list children of a1.public.0_anonymous
+PASS: gdb.mi/mi-var-cp.exp: path expression for a1.public.0_anonymous
+PASS: gdb.mi/mi-var-cp.exp: expression for a1.public.0_anonymous
+PASS: gdb.mi/mi-var-cp.exp: VT: list children of a1.public.1_anonymous
+PASS: gdb.mi/mi-var-cp.exp: path expression for a1.public.1_anonymous
+PASS: gdb.mi/mi-var-cp.exp: expression for a1.public.1_anonymous
+PASS: gdb.mi/mi-var-cp.exp: VT: list children of a1.public.2_anonymous
+PASS: gdb.mi/mi-var-cp.exp: path expression for a1.public.2_anonymous
+PASS: gdb.mi/mi-var-cp.exp: expression for a1.public.2_anonymous
+PASS: gdb.mi/mi-var-cp.exp: VT: list children of a1.public.0_anonymous.public
+PASS: gdb.mi/mi-var-cp.exp: path expression for a1.public.0_anonymous.public
+PASS: gdb.mi/mi-var-cp.exp: expression for a1.public.0_anonymous.public
+PASS: gdb.mi/mi-var-cp.exp: VT: list children of a1.public.1_anonymous.public
+PASS: gdb.mi/mi-var-cp.exp: path expression for a1.public.1_anonymous.public
+PASS: gdb.mi/mi-var-cp.exp: expression for a1.public.1_anonymous.public
+PASS: gdb.mi/mi-var-cp.exp: VT: list children of a1.public.2_anonymous.public
+PASS: gdb.mi/mi-var-cp.exp: path expression for a1.public.2_anonymous.public
+PASS: gdb.mi/mi-var-cp.exp: expression for a1.public.2_anonymous.public
+PASS: gdb.mi/mi-var-cp.exp: path expression for a1.public.0_anonymous.public.b
+PASS: gdb.mi/mi-var-cp.exp: expression for a1.public.0_anonymous.public.b
+PASS: gdb.mi/mi-var-cp.exp: path expression for a1.public.1_anonymous.public.c
+PASS: gdb.mi/mi-var-cp.exp: expression for a1.public.1_anonymous.public.c
+PASS: gdb.mi/mi-var-cp.exp: path expression for a1.public.2_anonymous.public.d
+PASS: gdb.mi/mi-var-cp.exp: expression for a1.public.2_anonymous.public.d
+PASS: gdb.mi/mi-var-cp.exp: VT: list children of a1.public.2_anonymous.public.1_anonymous
+PASS: gdb.mi/mi-var-cp.exp: path expression for a1.public.2_anonymous.public.1_anonymous
+PASS: gdb.mi/mi-var-cp.exp: expression for a1.public.2_anonymous.public.1_anonymous
+PASS: gdb.mi/mi-var-cp.exp: VT: list children of a1.public.2_anonymous.public.1_anonymous.public
+PASS: gdb.mi/mi-var-cp.exp: path expression for a1.public.2_anonymous.public.1_anonymous.public
+PASS: gdb.mi/mi-var-cp.exp: expression for a1.public.2_anonymous.public.1_anonymous.public
+PASS: gdb.mi/mi-var-cp.exp: path expression for a1.public.2_anonymous.public.1_anonymous.public.e
+PASS: gdb.mi/mi-var-cp.exp: expression for a1.public.2_anonymous.public.1_anonymous.public.e
+PASS: gdb.mi/mi-var-cp.exp: VT: list children of a1.public.2_anonymous.public.1_anonymous.public.1_anonymous
+PASS: gdb.mi/mi-var-cp.exp: path expression for a1.public.2_anonymous.public.1_anonymous.public.1_anonymous
+PASS: gdb.mi/mi-var-cp.exp: expression for a1.public.2_anonymous.public.1_anonymous.public.1_anonymous
+PASS: gdb.mi/mi-var-cp.exp: VT: list children of a1.public.2_anonymous.public.1_anonymous.public.2_anonymous
+PASS: gdb.mi/mi-var-cp.exp: path expression for a1.public.2_anonymous.public.1_anonymous.public.2_anonymous
+PASS: gdb.mi/mi-var-cp.exp: expression for a1.public.2_anonymous.public.1_anonymous.public.2_anonymous
+PASS: gdb.mi/mi-var-cp.exp: VT: list children of a1.public.2_anonymous.public.1_anonymous.public.1_anonymous.public
+PASS: gdb.mi/mi-var-cp.exp: path expression for a1.public.2_anonymous.public.1_anonymous.public.1_anonymous.public
+PASS: gdb.mi/mi-var-cp.exp: expression for a1.public.2_anonymous.public.1_anonymous.public.1_anonymous.public
+PASS: gdb.mi/mi-var-cp.exp: VT: list children of a1.public.2_anonymous.public.1_anonymous.public.2_anonymous.public
+PASS: gdb.mi/mi-var-cp.exp: path expression for a1.public.2_anonymous.public.1_anonymous.public.2_anonymous.public
+PASS: gdb.mi/mi-var-cp.exp: expression for a1.public.2_anonymous.public.1_anonymous.public.2_anonymous.public
+PASS: gdb.mi/mi-var-cp.exp: path expression for a1.public.2_anonymous.public.1_anonymous.public.1_anonymous.public.f
+PASS: gdb.mi/mi-var-cp.exp: expression for a1.public.2_anonymous.public.1_anonymous.public.1_anonymous.public.f
+PASS: gdb.mi/mi-var-cp.exp: VT: list children of a1.public.2_anonymous.public.1_anonymous.public.1_anonymous.public.1_anonymous
+PASS: gdb.mi/mi-var-cp.exp: path expression for a1.public.2_anonymous.public.1_anonymous.public.1_anonymous.public.1_anonymous
+PASS: gdb.mi/mi-var-cp.exp: expression for a1.public.2_anonymous.public.1_anonymous.public.1_anonymous.public.1_anonymous
+PASS: gdb.mi/mi-var-cp.exp: path expression for a1.public.2_anonymous.public.1_anonymous.public.2_anonymous.public.i
+PASS: gdb.mi/mi-var-cp.exp: expression for a1.public.2_anonymous.public.1_anonymous.public.2_anonymous.public.i
+PASS: gdb.mi/mi-var-cp.exp: path expression for a1.public.2_anonymous.public.1_anonymous.public.2_anonymous.public.j
+PASS: gdb.mi/mi-var-cp.exp: expression for a1.public.2_anonymous.public.1_anonymous.public.2_anonymous.public.j
+PASS: gdb.mi/mi-var-cp.exp: VT: list children of a1.public.2_anonymous.public.1_anonymous.public.1_anonymous.public.1_anonymous.public
+PASS: gdb.mi/mi-var-cp.exp: path expression for a1.public.2_anonymous.public.1_anonymous.public.1_anonymous.public.1_anonymous.public
+PASS: gdb.mi/mi-var-cp.exp: expression for a1.public.2_anonymous.public.1_anonymous.public.1_anonymous.public.1_anonymous.public
+PASS: gdb.mi/mi-var-cp.exp: path expression for a1.public.2_anonymous.public.1_anonymous.public.1_anonymous.public.1_anonymous.public.g
+PASS: gdb.mi/mi-var-cp.exp: expression for a1.public.2_anonymous.public.1_anonymous.public.1_anonymous.public.1_anonymous.public.g
+PASS: gdb.mi/mi-var-cp.exp: path expression for a1.public.2_anonymous.public.1_anonymous.public.1_anonymous.public.1_anonymous.public.h
+PASS: gdb.mi/mi-var-cp.exp: expression for a1.public.2_anonymous.public.1_anonymous.public.1_anonymous.public.1_anonymous.public.h
+Running ./gdb.mi/mi-var-create-rtti.exp ...
+PASS: gdb.mi/mi-var-create-rtti.exp: breakpoint at main
+PASS: gdb.mi/mi-var-create-rtti.exp: mi runto main
+PASS: gdb.mi/mi-var-create-rtti.exp: -var-create sp1 * $sp
+Running ./gdb.mi/mi-var-display.exp ...
+PASS: gdb.mi/mi-var-display.exp: break-insert operation
+PASS: gdb.mi/mi-var-display.exp: run to main
+PASS: gdb.mi/mi-var-display.exp: create local variable bar
+PASS: gdb.mi/mi-var-display.exp: info type variable bar
+PASS: gdb.mi/mi-var-display.exp: show format variable bar
+PASS: gdb.mi/mi-var-display.exp: eval variable bar
+PASS: gdb.mi/mi-var-display.exp: set format variable bar
+PASS: gdb.mi/mi-var-display.exp: eval variable bar with new format
+PASS: gdb.mi/mi-var-display.exp: assing to variable bar
+PASS: gdb.mi/mi-var-display.exp: set format variable bar
+PASS: gdb.mi/mi-var-display.exp: eval variable bar with new value
+PASS: gdb.mi/mi-var-display.exp: delete var bar
+PASS: gdb.mi/mi-var-display.exp: create local variable foo
+PASS: gdb.mi/mi-var-display.exp: info type variable foo
+PASS: gdb.mi/mi-var-display.exp: show format variable foo
+PASS: gdb.mi/mi-var-display.exp: eval variable foo
+PASS: gdb.mi/mi-var-display.exp: set format variable foo
+PASS: gdb.mi/mi-var-display.exp: show format variable foo
+PASS: gdb.mi/mi-var-display.exp: eval variable foo
+PASS: gdb.mi/mi-var-display.exp: assing to variable foo
+PASS: gdb.mi/mi-var-display.exp: set format variable foo
+PASS: gdb.mi/mi-var-display.exp: eval variable foo
+PASS: gdb.mi/mi-var-display.exp: eval variable foo in hex
+PASS: gdb.mi/mi-var-display.exp: show format variable foo after eval in hex
+PASS: gdb.mi/mi-var-display.exp: eval variable foo in octal
+PASS: gdb.mi/mi-var-display.exp: show format variable foo after eval in octal
+PASS: gdb.mi/mi-var-display.exp: eval variable foo in decimal
+PASS: gdb.mi/mi-var-display.exp: show format variable foo after eval in decimal
+PASS: gdb.mi/mi-var-display.exp: eval variable foo in natural
+PASS: gdb.mi/mi-var-display.exp: show format variable foo after eval in natural
+PASS: gdb.mi/mi-var-display.exp: eval variable foo in binary
+PASS: gdb.mi/mi-var-display.exp: show format variable foo after eval in binary
+PASS: gdb.mi/mi-var-display.exp: delete var foo
+PASS: gdb.mi/mi-var-display.exp: create local variable weird
+PASS: gdb.mi/mi-var-display.exp: get children local variable weird
+PASS: gdb.mi/mi-var-display.exp: set format variable weird.func_ptr
+PASS: gdb.mi/mi-var-display.exp: show format variable weird.func_ptr
+PASS: gdb.mi/mi-var-display.exp: set format variable weird.func_ptr_ptr
+PASS: gdb.mi/mi-var-display.exp: show format variable weird.func_ptr_ptr
+PASS: gdb.mi/mi-var-display.exp: set format variable weird
+PASS: gdb.mi/mi-var-display.exp: set format variable weird.integer
+PASS: gdb.mi/mi-var-display.exp: set format variable weird.character
+PASS: gdb.mi/mi-var-display.exp: set format variable weird.char_ptr
+PASS: gdb.mi/mi-var-display.exp: set format variable weird.long_int
+PASS: gdb.mi/mi-var-display.exp: set format variable weird.int_ptr_ptr
+PASS: gdb.mi/mi-var-display.exp: set format variable weird.long_array
+PASS: gdb.mi/mi-var-display.exp: set format variable weird.func_ptr
+PASS: gdb.mi/mi-var-display.exp: set format variable weird.func_ptr_struct
+PASS: gdb.mi/mi-var-display.exp: set format variable weird.func_ptr_ptr
+PASS: gdb.mi/mi-var-display.exp: set format variable weird.u1
+PASS: gdb.mi/mi-var-display.exp: set format variable weird.s2
+PASS: gdb.mi/mi-var-display.exp: delete var weird
+PASS: gdb.mi/mi-var-display.exp: break-insert operation 2
+PASS: gdb.mi/mi-var-display.exp: continue to do_special_tests
+PASS: gdb.mi/mi-var-display.exp: create local variable u
+PASS: gdb.mi/mi-var-display.exp: eval variable u
+PASS: gdb.mi/mi-var-display.exp: info type variable u
+PASS: gdb.mi/mi-var-display.exp: is u editable
+PASS: gdb.mi/mi-var-display.exp: get number of children of u
+PASS: gdb.mi/mi-var-display.exp: get children of u
+PASS: gdb.mi/mi-var-display.exp: create local variable anonu
+PASS: gdb.mi/mi-var-display.exp: eval variable anonu
+PASS: gdb.mi/mi-var-display.exp: info type variable anonu
+PASS: gdb.mi/mi-var-display.exp: is anonu editable
+PASS: gdb.mi/mi-var-display.exp: get number of children of anonu
+PASS: gdb.mi/mi-var-display.exp: get children of anonu
+PASS: gdb.mi/mi-var-display.exp: create local variable s
+PASS: gdb.mi/mi-var-display.exp: eval variable s
+PASS: gdb.mi/mi-var-display.exp: info type variable s
+PASS: gdb.mi/mi-var-display.exp: is s editable
+PASS: gdb.mi/mi-var-display.exp: get number of children of s
+PASS: gdb.mi/mi-var-display.exp: get children of s
+PASS: gdb.mi/mi-var-display.exp: create local variable anons
+PASS: gdb.mi/mi-var-display.exp: eval variable anons
+PASS: gdb.mi/mi-var-display.exp: info type variable anons
+PASS: gdb.mi/mi-var-display.exp: is anons editable
+PASS: gdb.mi/mi-var-display.exp: get number of children of anons
+PASS: gdb.mi/mi-var-display.exp: get children of anons
+PASS: gdb.mi/mi-var-display.exp: create local variable e
+PASS: gdb.mi/mi-var-display.exp: eval variable e
+PASS: gdb.mi/mi-var-display.exp: info type variable e
+PASS: gdb.mi/mi-var-display.exp: is e editable
+PASS: gdb.mi/mi-var-display.exp: get number of children of e
+PASS: gdb.mi/mi-var-display.exp: get children of e
+PASS: gdb.mi/mi-var-display.exp: create local variable anone
+PASS: gdb.mi/mi-var-display.exp: eval variable anone
+PASS: gdb.mi/mi-var-display.exp: create duplicate local variable anone
+PASS: gdb.mi/mi-var-display.exp: info type variable anone
+PASS: gdb.mi/mi-var-display.exp: is anone editable
+PASS: gdb.mi/mi-var-display.exp: get number of children of anone
+PASS: gdb.mi/mi-var-display.exp: get children of anone
+PASS: gdb.mi/mi-var-display.exp: print FP register
+PASS: gdb.mi/mi-var-display.exp: breakpoint at incr_a
+PASS: gdb.mi/mi-var-display.exp: mi runto incr_a
+PASS: gdb.mi/mi-var-display.exp: create local variable a1
+PASS: gdb.mi/mi-var-display.exp: create variable a2 in different scope
+Running ./gdb.mi/mi-var-invalidate.exp ...
+PASS: gdb.mi/mi-var-invalidate.exp: create global variable
+PASS: gdb.mi/mi-var-invalidate.exp: breakpoint at do_locals_tests
+PASS: gdb.mi/mi-var-invalidate.exp: mi runto do_locals_tests
+PASS: gdb.mi/mi-var-invalidate.exp: create local variable linteger
+PASS: gdb.mi/mi-var-invalidate.exp: create floating variable
+FAIL: gdb.mi/mi-var-invalidate.exp: breakpoint at main
+FAIL: gdb.mi/mi-var-invalidate.exp: mi runto main (unknown output after running)
+PASS: gdb.mi/mi-var-invalidate.exp: set format variable float_simple
+PASS: gdb.mi/mi-var-invalidate.exp: linteger not anymore in scope due to binary changes
+PASS: gdb.mi/mi-var-invalidate.exp: no type for invalid variable linteger (1)
+PASS: gdb.mi/mi-var-invalidate.exp: global_simple still alive
+PASS: gdb.mi/mi-var-invalidate.exp: type simpleton for valid variable global_simple
+PASS: gdb.mi/mi-var-invalidate.exp: linteger not valid anymore due to binary changes
+PASS: gdb.mi/mi-var-invalidate.exp: no type for invalid variable linteger (2)
+PASS: gdb.mi/mi-var-invalidate.exp: global_simple not anymore in scope due to binary changes
+PASS: gdb.mi/mi-var-invalidate.exp: no type for invalid variable global_simple
+Running ./gdb.mi/mi-var-rtti.exp ...
+PASS: gdb.mi/mi-var-rtti.exp: run to mi-var-rtti.cc:37 (set breakpoint)
+PASS: gdb.mi/mi-var-rtti.exp: -interpreter-exec console "set print object off" in use_rtti_for_ptr
+PASS: gdb.mi/mi-var-rtti.exp: create varobj for ptr (without RTTI) in use_rtti_for_ptr
+PASS: gdb.mi/mi-var-rtti.exp: list children of ptr (without RTTI) in use_rtti_for_ptr
+PASS: gdb.mi/mi-var-rtti.exp: list children of ptr.public (without RTTI) in use_rtti_for_ptr
+PASS: gdb.mi/mi-var-rtti.exp: check ptr->A (without RTTI) in use_rtti_for_ptr
+PASS: gdb.mi/mi-var-rtti.exp: delete varobj for ptr (without RTTI) in use_rtti_for_ptr
+PASS: gdb.mi/mi-var-rtti.exp: create varobj for constPtr (without RTTI) in use_rtti_for_ptr
+PASS: gdb.mi/mi-var-rtti.exp: list children of constPtr (without RTTI) in use_rtti_for_ptr
+PASS: gdb.mi/mi-var-rtti.exp: list children of constPtr.public (without RTTI) in use_rtti_for_ptr
+PASS: gdb.mi/mi-var-rtti.exp: check constPtr->A (without RTTI) in use_rtti_for_ptr
+PASS: gdb.mi/mi-var-rtti.exp: delete varobj for constPtr (without RTTI) in use_rtti_for_ptr
+PASS: gdb.mi/mi-var-rtti.exp: create varobj for ptrConst (without RTTI) in use_rtti_for_ptr
+PASS: gdb.mi/mi-var-rtti.exp: list children of ptrConst (without RTTI) in use_rtti_for_ptr
+PASS: gdb.mi/mi-var-rtti.exp: list children of ptrConst.public (without RTTI) in use_rtti_for_ptr
+PASS: gdb.mi/mi-var-rtti.exp: check ptrConst->A (without RTTI) in use_rtti_for_ptr
+PASS: gdb.mi/mi-var-rtti.exp: delete varobj for ptrConst (without RTTI) in use_rtti_for_ptr
+PASS: gdb.mi/mi-var-rtti.exp: create varobj for constPtrConst (without RTTI) in use_rtti_for_ptr
+PASS: gdb.mi/mi-var-rtti.exp: list children of constPtrConst (without RTTI) in use_rtti_for_ptr
+PASS: gdb.mi/mi-var-rtti.exp: list children of constPtrConst.public (without RTTI) in use_rtti_for_ptr
+PASS: gdb.mi/mi-var-rtti.exp: check constPtrConst->A (without RTTI) in use_rtti_for_ptr
+PASS: gdb.mi/mi-var-rtti.exp: delete varobj for constPtrConst (without RTTI) in use_rtti_for_ptr
+PASS: gdb.mi/mi-var-rtti.exp: -interpreter-exec console "set print object on" in use_rtti_for_ptr
+PASS: gdb.mi/mi-var-rtti.exp: create varobj for ptr (with RTTI) in use_rtti_for_ptr
+PASS: gdb.mi/mi-var-rtti.exp: list children of ptr (with RTTI) in use_rtti_for_ptr
+PASS: gdb.mi/mi-var-rtti.exp: list children of ptr.Base (with RTTI) in use_rtti_for_ptr
+PASS: gdb.mi/mi-var-rtti.exp: list children of ptr.Base.public (with RTTI) in use_rtti_for_ptr
+PASS: gdb.mi/mi-var-rtti.exp: list children of ptr.public (with RTTI) in use_rtti_for_ptr
+PASS: gdb.mi/mi-var-rtti.exp: check ptr->A (with RTTI) in use_rtti_for_ptr
+PASS: gdb.mi/mi-var-rtti.exp: check ptr->B (with RTTI) in use_rtti_for_ptr
+PASS: gdb.mi/mi-var-rtti.exp: check ptr->C (with RTTI) in use_rtti_for_ptr
+PASS: gdb.mi/mi-var-rtti.exp: delete varobj for ptr (with RTTI) in use_rtti_for_ptr
+PASS: gdb.mi/mi-var-rtti.exp: create varobj for constPtr (with RTTI) in use_rtti_for_ptr
+PASS: gdb.mi/mi-var-rtti.exp: list children of constPtr (with RTTI) in use_rtti_for_ptr
+PASS: gdb.mi/mi-var-rtti.exp: list children of constPtr.Base (with RTTI) in use_rtti_for_ptr
+PASS: gdb.mi/mi-var-rtti.exp: list children of constPtr.Base.public (with RTTI) in use_rtti_for_ptr
+PASS: gdb.mi/mi-var-rtti.exp: list children of constPtr.public (with RTTI) in use_rtti_for_ptr
+PASS: gdb.mi/mi-var-rtti.exp: check constPtr->A (with RTTI) in use_rtti_for_ptr
+PASS: gdb.mi/mi-var-rtti.exp: check constPtr->B (with RTTI) in use_rtti_for_ptr
+PASS: gdb.mi/mi-var-rtti.exp: check constPtr->C (with RTTI) in use_rtti_for_ptr
+PASS: gdb.mi/mi-var-rtti.exp: delete varobj for constPtr (with RTTI) in use_rtti_for_ptr
+PASS: gdb.mi/mi-var-rtti.exp: create varobj for ptrConst (with RTTI) in use_rtti_for_ptr
+PASS: gdb.mi/mi-var-rtti.exp: list children of ptrConst (with RTTI) in use_rtti_for_ptr
+PASS: gdb.mi/mi-var-rtti.exp: list children of ptrConst.Base (with RTTI) in use_rtti_for_ptr
+PASS: gdb.mi/mi-var-rtti.exp: list children of ptrConst.Base.public (with RTTI) in use_rtti_for_ptr
+PASS: gdb.mi/mi-var-rtti.exp: list children of ptrConst.public (with RTTI) in use_rtti_for_ptr
+PASS: gdb.mi/mi-var-rtti.exp: check ptrConst->A (with RTTI) in use_rtti_for_ptr
+PASS: gdb.mi/mi-var-rtti.exp: check ptrConst->B (with RTTI) in use_rtti_for_ptr
+PASS: gdb.mi/mi-var-rtti.exp: check ptrConst->C (with RTTI) in use_rtti_for_ptr
+PASS: gdb.mi/mi-var-rtti.exp: delete varobj for ptrConst (with RTTI) in use_rtti_for_ptr
+PASS: gdb.mi/mi-var-rtti.exp: create varobj for constPtrConst (with RTTI) in use_rtti_for_ptr
+PASS: gdb.mi/mi-var-rtti.exp: list children of constPtrConst (with RTTI) in use_rtti_for_ptr
+PASS: gdb.mi/mi-var-rtti.exp: list children of constPtrConst.Base (with RTTI) in use_rtti_for_ptr
+PASS: gdb.mi/mi-var-rtti.exp: list children of constPtrConst.Base.public (with RTTI) in use_rtti_for_ptr
+PASS: gdb.mi/mi-var-rtti.exp: list children of constPtrConst.public (with RTTI) in use_rtti_for_ptr
+PASS: gdb.mi/mi-var-rtti.exp: check constPtrConst->A (with RTTI) in use_rtti_for_ptr
+PASS: gdb.mi/mi-var-rtti.exp: check constPtrConst->B (with RTTI) in use_rtti_for_ptr
+PASS: gdb.mi/mi-var-rtti.exp: check constPtrConst->C (with RTTI) in use_rtti_for_ptr
+PASS: gdb.mi/mi-var-rtti.exp: delete varobj for constPtrConst (with RTTI) in use_rtti_for_ptr
+PASS: gdb.mi/mi-var-rtti.exp: run to mi-var-rtti.cc:64 (set breakpoint)
+PASS: gdb.mi/mi-var-rtti.exp: -interpreter-exec console "set print object off" in use_rtti_for_ref
+PASS: gdb.mi/mi-var-rtti.exp: create varobj for ref (without RTTI) in use_rtti_for_ref
+PASS: gdb.mi/mi-var-rtti.exp: list children of ref (without RTTI) in use_rtti_for_ref
+PASS: gdb.mi/mi-var-rtti.exp: list children of ref.public (without RTTI) in use_rtti_for_ref
+PASS: gdb.mi/mi-var-rtti.exp: check ref->A (without RTTI) in use_rtti_for_ref
+PASS: gdb.mi/mi-var-rtti.exp: delete varobj for ref (without RTTI) in use_rtti_for_ref
+PASS: gdb.mi/mi-var-rtti.exp: create varobj for constRef (without RTTI) in use_rtti_for_ref
+PASS: gdb.mi/mi-var-rtti.exp: list children of constRef (without RTTI) in use_rtti_for_ref
+PASS: gdb.mi/mi-var-rtti.exp: list children of constRef.public (without RTTI) in use_rtti_for_ref
+PASS: gdb.mi/mi-var-rtti.exp: check constRef->A (without RTTI) in use_rtti_for_ref
+PASS: gdb.mi/mi-var-rtti.exp: delete varobj for constRef (without RTTI) in use_rtti_for_ref
+PASS: gdb.mi/mi-var-rtti.exp: -interpreter-exec console "set print object on" in use_rtti_for_ref
+PASS: gdb.mi/mi-var-rtti.exp: create varobj for ref (with RTTI) in use_rtti_for_ref
+PASS: gdb.mi/mi-var-rtti.exp: list children of ref (with RTTI) in use_rtti_for_ref
+PASS: gdb.mi/mi-var-rtti.exp: list children of ref.Base (with RTTI) in use_rtti_for_ref
+PASS: gdb.mi/mi-var-rtti.exp: list children of ref.Base.public (with RTTI) in use_rtti_for_ref
+PASS: gdb.mi/mi-var-rtti.exp: list children of ref.public (with RTTI) in use_rtti_for_ref
+PASS: gdb.mi/mi-var-rtti.exp: check ref->A (with RTTI) in use_rtti_for_ref
+PASS: gdb.mi/mi-var-rtti.exp: check ref->B (with RTTI) in use_rtti_for_ref
+PASS: gdb.mi/mi-var-rtti.exp: check ref->C (with RTTI) in use_rtti_for_ref
+PASS: gdb.mi/mi-var-rtti.exp: delete varobj for ref (with RTTI) in use_rtti_for_ref
+PASS: gdb.mi/mi-var-rtti.exp: create varobj for constRef (with RTTI) in use_rtti_for_ref
+PASS: gdb.mi/mi-var-rtti.exp: list children of constRef (with RTTI) in use_rtti_for_ref
+PASS: gdb.mi/mi-var-rtti.exp: list children of constRef.Base (with RTTI) in use_rtti_for_ref
+PASS: gdb.mi/mi-var-rtti.exp: list children of constRef.Base.public (with RTTI) in use_rtti_for_ref
+PASS: gdb.mi/mi-var-rtti.exp: list children of constRef.public (with RTTI) in use_rtti_for_ref
+PASS: gdb.mi/mi-var-rtti.exp: check constRef->A (with RTTI) in use_rtti_for_ref
+PASS: gdb.mi/mi-var-rtti.exp: check constRef->B (with RTTI) in use_rtti_for_ref
+PASS: gdb.mi/mi-var-rtti.exp: check constRef->C (with RTTI) in use_rtti_for_ref
+PASS: gdb.mi/mi-var-rtti.exp: delete varobj for constRef (with RTTI) in use_rtti_for_ref
+PASS: gdb.mi/mi-var-rtti.exp: run to mi-var-rtti.cc:94 (set breakpoint)
+PASS: gdb.mi/mi-var-rtti.exp: -interpreter-exec console "set print object off" in use_rtti_for_ptr_child
+PASS: gdb.mi/mi-var-rtti.exp: create varobj for s (without RTTI) in use_rtti_for_ptr_child
+PASS: gdb.mi/mi-var-rtti.exp: list children of s (without RTTI) in use_rtti_for_ptr_child
+PASS: gdb.mi/mi-var-rtti.exp: list children of s.public (without RTTI) in use_rtti_for_ptr_child
+PASS: gdb.mi/mi-var-rtti.exp: list children of s.ptr (without RTTI) in use_rtti_for_ptr_child
+PASS: gdb.mi/mi-var-rtti.exp: list children of s.ptr.public (without RTTI) in use_rtti_for_ptr_child
+PASS: gdb.mi/mi-var-rtti.exp: check s.ptr->A (without RTTI) in use_rtti_for_ptr_child
+PASS: gdb.mi/mi-var-rtti.exp: list children of s.constPtr (without RTTI) in use_rtti_for_ptr_child
+PASS: gdb.mi/mi-var-rtti.exp: list children of s.constPtr.public (without RTTI) in use_rtti_for_ptr_child
+PASS: gdb.mi/mi-var-rtti.exp: check s.constPtr->A (without RTTI) in use_rtti_for_ptr_child
+PASS: gdb.mi/mi-var-rtti.exp: list children of s.ptrConst (without RTTI) in use_rtti_for_ptr_child
+PASS: gdb.mi/mi-var-rtti.exp: list children of s.ptrConst.public (without RTTI) in use_rtti_for_ptr_child
+PASS: gdb.mi/mi-var-rtti.exp: check s.ptrConst->A (without RTTI) in use_rtti_for_ptr_child
+PASS: gdb.mi/mi-var-rtti.exp: list children of s.constPtrConst (without RTTI) in use_rtti_for_ptr_child
+PASS: gdb.mi/mi-var-rtti.exp: list children of s.constPtrConst.public (without RTTI) in use_rtti_for_ptr_child
+PASS: gdb.mi/mi-var-rtti.exp: check s.constPtrConst->A (without RTTI) in use_rtti_for_ptr_child
+PASS: gdb.mi/mi-var-rtti.exp: delete varobj for s (without RTTI) in use_rtti_for_ptr_child
+PASS: gdb.mi/mi-var-rtti.exp: -interpreter-exec console "set print object on" in use_rtti_for_ptr_child
+PASS: gdb.mi/mi-var-rtti.exp: create varobj for s (with RTTI) in use_rtti_for_ptr_child
+PASS: gdb.mi/mi-var-rtti.exp: list children of s (with RTTI) in use_rtti_for_ptr_child
+PASS: gdb.mi/mi-var-rtti.exp: list children of s.public (with RTTI) in use_rtti_for_ptr_child
+PASS: gdb.mi/mi-var-rtti.exp: list children of s.ptr (with RTTI) in use_rtti_for_ptr_child
+PASS: gdb.mi/mi-var-rtti.exp: list children of s.ptr.Base (with RTTI) in use_rtti_for_ptr_child
+PASS: gdb.mi/mi-var-rtti.exp: list children of s.ptr.Base.public (with RTTI) in use_rtti_for_ptr_child
+PASS: gdb.mi/mi-var-rtti.exp: list children of s.ptr.public (with RTTI) in use_rtti_for_ptr_child
+PASS: gdb.mi/mi-var-rtti.exp: check s.ptr->A (with RTTI) in use_rtti_for_ptr_child
+PASS: gdb.mi/mi-var-rtti.exp: check s.ptr->B (with RTTI) in use_rtti_for_ptr_child
+PASS: gdb.mi/mi-var-rtti.exp: check s.ptr->C (with RTTI) in use_rtti_for_ptr_child
+PASS: gdb.mi/mi-var-rtti.exp: list children of s.constPtr (with RTTI) in use_rtti_for_ptr_child
+PASS: gdb.mi/mi-var-rtti.exp: list children of s.constPtr.Base (with RTTI) in use_rtti_for_ptr_child
+PASS: gdb.mi/mi-var-rtti.exp: list children of s.constPtr.Base.public (with RTTI) in use_rtti_for_ptr_child
+PASS: gdb.mi/mi-var-rtti.exp: list children of s.constPtr.public (with RTTI) in use_rtti_for_ptr_child
+PASS: gdb.mi/mi-var-rtti.exp: check s.constPtr->A (with RTTI) in use_rtti_for_ptr_child
+PASS: gdb.mi/mi-var-rtti.exp: check s.constPtr->B (with RTTI) in use_rtti_for_ptr_child
+PASS: gdb.mi/mi-var-rtti.exp: check s.constPtr->C (with RTTI) in use_rtti_for_ptr_child
+PASS: gdb.mi/mi-var-rtti.exp: list children of s.ptrConst (with RTTI) in use_rtti_for_ptr_child
+PASS: gdb.mi/mi-var-rtti.exp: list children of s.ptrConst.Base (with RTTI) in use_rtti_for_ptr_child
+PASS: gdb.mi/mi-var-rtti.exp: list children of s.ptrConst.Base.public (with RTTI) in use_rtti_for_ptr_child
+PASS: gdb.mi/mi-var-rtti.exp: list children of s.ptrConst.public (with RTTI) in use_rtti_for_ptr_child
+PASS: gdb.mi/mi-var-rtti.exp: check s.ptrConst->A (with RTTI) in use_rtti_for_ptr_child
+PASS: gdb.mi/mi-var-rtti.exp: check s.ptrConst->B (with RTTI) in use_rtti_for_ptr_child
+PASS: gdb.mi/mi-var-rtti.exp: check s.ptrConst->C (with RTTI) in use_rtti_for_ptr_child
+PASS: gdb.mi/mi-var-rtti.exp: list children of s.constPtrConst (with RTTI) in use_rtti_for_ptr_child
+PASS: gdb.mi/mi-var-rtti.exp: list children of s.constPtrConst.Base (with RTTI) in use_rtti_for_ptr_child
+PASS: gdb.mi/mi-var-rtti.exp: list children of s.constPtrConst.Base.public (with RTTI) in use_rtti_for_ptr_child
+PASS: gdb.mi/mi-var-rtti.exp: list children of s.constPtrConst.public (with RTTI) in use_rtti_for_ptr_child
+PASS: gdb.mi/mi-var-rtti.exp: check s.constPtrConst->A (with RTTI) in use_rtti_for_ptr_child
+PASS: gdb.mi/mi-var-rtti.exp: check s.constPtrConst->B (with RTTI) in use_rtti_for_ptr_child
+PASS: gdb.mi/mi-var-rtti.exp: check s.constPtrConst->C (with RTTI) in use_rtti_for_ptr_child
+PASS: gdb.mi/mi-var-rtti.exp: delete varobj for s (with RTTI) in use_rtti_for_ptr_child
+PASS: gdb.mi/mi-var-rtti.exp: run to mi-var-rtti.cc:149 (set breakpoint)
+PASS: gdb.mi/mi-var-rtti.exp: -interpreter-exec console "set print object off" in use_rtti_for_ref_child
+PASS: gdb.mi/mi-var-rtti.exp: create varobj for s (without RTTI) in use_rtti_for_ref_child
+PASS: gdb.mi/mi-var-rtti.exp: list children of s (without RTTI) in use_rtti_for_ref_child
+PASS: gdb.mi/mi-var-rtti.exp: list children of s.public (without RTTI) in use_rtti_for_ref_child
+PASS: gdb.mi/mi-var-rtti.exp: list children of s.ref (without RTTI) in use_rtti_for_ref_child
+PASS: gdb.mi/mi-var-rtti.exp: list children of s.ref.public (without RTTI) in use_rtti_for_ref_child
+PASS: gdb.mi/mi-var-rtti.exp: check s.ref->A (without RTTI) in use_rtti_for_ref_child
+PASS: gdb.mi/mi-var-rtti.exp: list children of s.constRef (without RTTI) in use_rtti_for_ref_child
+PASS: gdb.mi/mi-var-rtti.exp: list children of s.constRef.public (without RTTI) in use_rtti_for_ref_child
+PASS: gdb.mi/mi-var-rtti.exp: check s.constRef->A (without RTTI) in use_rtti_for_ref_child
+PASS: gdb.mi/mi-var-rtti.exp: delete varobj for s (without RTTI) in use_rtti_for_ref_child
+PASS: gdb.mi/mi-var-rtti.exp: -interpreter-exec console "set print object on" in use_rtti_for_ref_child
+PASS: gdb.mi/mi-var-rtti.exp: create varobj for s (with RTTI) in use_rtti_for_ref_child
+PASS: gdb.mi/mi-var-rtti.exp: list children of s (with RTTI) in use_rtti_for_ref_child
+PASS: gdb.mi/mi-var-rtti.exp: list children of s.public (with RTTI) in use_rtti_for_ref_child
+PASS: gdb.mi/mi-var-rtti.exp: list children of s.ref (with RTTI) in use_rtti_for_ref_child
+PASS: gdb.mi/mi-var-rtti.exp: list children of s.ref.Base (with RTTI) in use_rtti_for_ref_child
+PASS: gdb.mi/mi-var-rtti.exp: list children of s.ref.Base.public (with RTTI) in use_rtti_for_ref_child
+PASS: gdb.mi/mi-var-rtti.exp: list children of s.ref.public (with RTTI) in use_rtti_for_ref_child
+PASS: gdb.mi/mi-var-rtti.exp: check s.ref->A (with RTTI) in use_rtti_for_ref_child
+PASS: gdb.mi/mi-var-rtti.exp: check s.ref->B (with RTTI) in use_rtti_for_ref_child
+PASS: gdb.mi/mi-var-rtti.exp: check s.ref->C (with RTTI) in use_rtti_for_ref_child
+PASS: gdb.mi/mi-var-rtti.exp: list children of s.constRef (with RTTI) in use_rtti_for_ref_child
+PASS: gdb.mi/mi-var-rtti.exp: list children of s.constRef.Base (with RTTI) in use_rtti_for_ref_child
+PASS: gdb.mi/mi-var-rtti.exp: list children of s.constRef.Base.public (with RTTI) in use_rtti_for_ref_child
+PASS: gdb.mi/mi-var-rtti.exp: list children of s.constRef.public (with RTTI) in use_rtti_for_ref_child
+PASS: gdb.mi/mi-var-rtti.exp: check s.constRef->A (with RTTI) in use_rtti_for_ref_child
+PASS: gdb.mi/mi-var-rtti.exp: check s.constRef->B (with RTTI) in use_rtti_for_ref_child
+PASS: gdb.mi/mi-var-rtti.exp: check s.constRef->C (with RTTI) in use_rtti_for_ref_child
+PASS: gdb.mi/mi-var-rtti.exp: delete varobj for s (with RTTI) in use_rtti_for_ref_child
+PASS: gdb.mi/mi-var-rtti.exp: run to mi-var-rtti.cc:202 (set breakpoint)
+PASS: gdb.mi/mi-var-rtti.exp: -interpreter-exec console "set print object off" in use_rtti_with_multiple_inheritence
+PASS: gdb.mi/mi-var-rtti.exp: create varobj for ptr (without RTTI) in use_rtti_with_multiple_inheritence
+PASS: gdb.mi/mi-var-rtti.exp: list children of ptr (without RTTI) in use_rtti_with_multiple_inheritence
+PASS: gdb.mi/mi-var-rtti.exp: list children of ptr.public (without RTTI) in use_rtti_with_multiple_inheritence
+PASS: gdb.mi/mi-var-rtti.exp: check ptr->A (without RTTI) in use_rtti_with_multiple_inheritence
+PASS: gdb.mi/mi-var-rtti.exp: delete varobj for ptr (without RTTI) in use_rtti_with_multiple_inheritence
+PASS: gdb.mi/mi-var-rtti.exp: create varobj for ref (without RTTI) in use_rtti_with_multiple_inheritence
+PASS: gdb.mi/mi-var-rtti.exp: list children of ref (without RTTI) in use_rtti_with_multiple_inheritence
+PASS: gdb.mi/mi-var-rtti.exp: list children of ref.public (without RTTI) in use_rtti_with_multiple_inheritence
+PASS: gdb.mi/mi-var-rtti.exp: check ref->A (without RTTI) in use_rtti_with_multiple_inheritence
+PASS: gdb.mi/mi-var-rtti.exp: delete varobj for ref (without RTTI) in use_rtti_with_multiple_inheritence
+PASS: gdb.mi/mi-var-rtti.exp: -interpreter-exec console "set print object on" in use_rtti_with_multiple_inheritence
+PASS: gdb.mi/mi-var-rtti.exp: create varobj for ptr (with RTTI) in use_rtti_with_multiple_inheritence
+PASS: gdb.mi/mi-var-rtti.exp: list children of ptr (with RTTI) in use_rtti_with_multiple_inheritence
+PASS: gdb.mi/mi-var-rtti.exp: list children of ptr.First (with RTTI) in use_rtti_with_multiple_inheritence
+PASS: gdb.mi/mi-var-rtti.exp: list children of ptr.Base.public (with RTTI) in use_rtti_with_multiple_inheritence
+PASS: gdb.mi/mi-var-rtti.exp: list children of ptr.Base (with RTTI) in use_rtti_with_multiple_inheritence
+PASS: gdb.mi/mi-var-rtti.exp: list children of ptr.Base.public (with RTTI) in use_rtti_with_multiple_inheritence
+PASS: gdb.mi/mi-var-rtti.exp: list children of ptr.public (with RTTI) in use_rtti_with_multiple_inheritence
+PASS: gdb.mi/mi-var-rtti.exp: delete varobj for ptr (with RTTI) in use_rtti_with_multiple_inheritence
+PASS: gdb.mi/mi-var-rtti.exp: run to mi-var-rtti.cc:245 (set breakpoint)
+PASS: gdb.mi/mi-var-rtti.exp: -interpreter-exec console "set print object on" in type_update_when_use_rtti
+PASS: gdb.mi/mi-var-rtti.exp: create varobj for ptr in type_update_when_use_rtti
+PASS: gdb.mi/mi-var-rtti.exp: list children of ptr (without RTTI) in type_update_when_use_rtti
+PASS: gdb.mi/mi-var-rtti.exp: list children of ptr.public (without RTTI) in type_update_when_use_rtti
+PASS: gdb.mi/mi-var-rtti.exp: create varobj for S in type_update_when_use_rtti
+PASS: gdb.mi/mi-var-rtti.exp: list children of s in type_update_when_use_rtti
+FAIL: gdb.mi/mi-var-rtti.exp: list children of s.public in type_update_when_use_rtti
+FAIL: gdb.mi/mi-var-rtti.exp: list children of s.ptr (without RTTI) in type_update_when_use_rtti
+FAIL: gdb.mi/mi-var-rtti.exp: list children of s.ptr.public (without RTTI) in type_update_when_use_rtti
+PASS: gdb.mi/mi-var-rtti.exp: run to mi-var-rtti.cc:269 (set breakpoint)
+PASS: gdb.mi/mi-var-rtti.exp: update ptr to derived in type_update_when_use_rtti
+PASS: gdb.mi/mi-var-rtti.exp: list children of ptr (with RTTI) in type_update_when_use_rtti
+PASS: gdb.mi/mi-var-rtti.exp: list children of ptr.Base (with RTTI) in type_update_when_use_rtti
+PASS: gdb.mi/mi-var-rtti.exp: list children of ptr.Base.public (with RTTI) in type_update_when_use_rtti
+PASS: gdb.mi/mi-var-rtti.exp: list children of ptr.public (with RTTI) in type_update_when_use_rtti
+PASS: gdb.mi/mi-var-rtti.exp: check ptr->A (with RTTI) in type_update_when_use_rtti
+PASS: gdb.mi/mi-var-rtti.exp: check ptr->B (with RTTI) in type_update_when_use_rtti
+PASS: gdb.mi/mi-var-rtti.exp: check ptr->C (with RTTI) in type_update_when_use_rtti
+PASS: gdb.mi/mi-var-rtti.exp: update s.ptr to derived in type_update_when_use_rtti
+PASS: gdb.mi/mi-var-rtti.exp: list children of s.ptr (with RTTI) in type_update_when_use_rtti
+PASS: gdb.mi/mi-var-rtti.exp: list children of s.ptr.Base (with RTTI) in type_update_when_use_rtti
+PASS: gdb.mi/mi-var-rtti.exp: list children of s.ptr.Base.public (with RTTI) in type_update_when_use_rtti
+PASS: gdb.mi/mi-var-rtti.exp: list children of s.ptr.public (with RTTI) in type_update_when_use_rtti
+PASS: gdb.mi/mi-var-rtti.exp: check s.ptr->A (with RTTI) in type_update_when_use_rtti
+PASS: gdb.mi/mi-var-rtti.exp: check s.ptr->B (with RTTI) in type_update_when_use_rtti
+PASS: gdb.mi/mi-var-rtti.exp: check s.ptr->C (with RTTI) in type_update_when_use_rtti
+PASS: gdb.mi/mi-var-rtti.exp: run to mi-var-rtti.cc:281 (set breakpoint)
+PASS: gdb.mi/mi-var-rtti.exp: update ptr back to base type in type_update_when_use_rtti
+PASS: gdb.mi/mi-var-rtti.exp: delete varobj for ptr in type_update_when_use_rtti
+PASS: gdb.mi/mi-var-rtti.exp: update s.ptr back to base type in type_update_when_use_rtti
+PASS: gdb.mi/mi-var-rtti.exp: delete varobj for s in type_update_when_use_rtti
+PASS: gdb.mi/mi-var-rtti.exp: run to mi-var-rtti.cc:299 (set breakpoint)
+PASS: gdb.mi/mi-var-rtti.exp: -interpreter-exec console "set print object off" in skip_type_update_when_not_use_rtti
+PASS: gdb.mi/mi-var-rtti.exp: create varobj for ptr in skip_type_update_when_not_use_rtti
+PASS: gdb.mi/mi-var-rtti.exp: list children of ptr (without RTTI) in skip_type_update_when_not_use_rtti
+PASS: gdb.mi/mi-var-rtti.exp: list children of ptr.public (without RTTI) in skip_type_update_when_not_use_rtti
+PASS: gdb.mi/mi-var-rtti.exp: create varobj for S in skip_type_update_when_not_use_rtti
+PASS: gdb.mi/mi-var-rtti.exp: list children of s in skip_type_update_when_not_use_rtti
+PASS: gdb.mi/mi-var-rtti.exp: list children of s.public in skip_type_update_when_not_use_rtti
+PASS: gdb.mi/mi-var-rtti.exp: list children of s.ptr (without RTTI) in skip_type_update_when_not_use_rtti
+PASS: gdb.mi/mi-var-rtti.exp: list children of s.ptr.public (without RTTI) in skip_type_update_when_not_use_rtti
+PASS: gdb.mi/mi-var-rtti.exp: run to mi-var-rtti.cc:323 (set breakpoint)
+PASS: gdb.mi/mi-var-rtti.exp: update ptr to derived type in skip_type_update_when_not_use_rtti
+PASS: gdb.mi/mi-var-rtti.exp: list children of ptr (without RTTI) in skip_type_update_when_not_use_rtti
+PASS: gdb.mi/mi-var-rtti.exp: list children of ptr.public (without RTTI) in skip_type_update_when_not_use_rtti
+PASS: gdb.mi/mi-var-rtti.exp: check ptr->A (without RTTI) in skip_type_update_when_not_use_rtti
+PASS: gdb.mi/mi-var-rtti.exp: update s to derived type in skip_type_update_when_not_use_rtti
+PASS: gdb.mi/mi-var-rtti.exp: list children of s.ptr (without RTTI) in skip_type_update_when_not_use_rtti
+PASS: gdb.mi/mi-var-rtti.exp: list children of s.ptr.public (without RTTI) in skip_type_update_when_not_use_rtti
+PASS: gdb.mi/mi-var-rtti.exp: check s.ptr->A (without RTTI) in skip_type_update_when_not_use_rtti
+PASS: gdb.mi/mi-var-rtti.exp: run to mi-var-rtti.cc:335 (set breakpoint)
+PASS: gdb.mi/mi-var-rtti.exp: update ptr back to base type in skip_type_update_when_not_use_rtti
+PASS: gdb.mi/mi-var-rtti.exp: delete varobj for ptr in skip_type_update_when_not_use_rtti
+PASS: gdb.mi/mi-var-rtti.exp: update s back to base type in skip_type_update_when_not_use_rtti
+PASS: gdb.mi/mi-var-rtti.exp: delete varobj for s in skip_type_update_when_not_use_rtti
+Running ./gdb.mi/mi-watch.exp ...
+PASS: gdb.mi/mi-watch.exp: hw watchpoints toggle (1)
+PASS: gdb.mi/mi-watch.exp: sw: breakpoint at callee4
+PASS: gdb.mi/mi-watch.exp: sw: mi runto callee4
+PASS: gdb.mi/mi-watch.exp: sw: break-watch operation
+PASS: gdb.mi/mi-watch.exp: sw: list of watchpoints
+PASS: gdb.mi/mi-watch.exp: sw: watchpoint trigger
+XPASS: gdb.mi/mi-watch.exp: sw: watchpoint trigger
+Running ./gdb.mi/mi-watch-nonstop.exp ...
+Running ./gdb.mi/pr11022.exp ...
+Running ./gdb.modula2/unbounded-array.exp ...
+PASS: gdb.modula2/unbounded-array.exp: switch to modula-2
+PASS: gdb.modula2/unbounded-array.exp: print the last legal element of array a
+PASS: gdb.modula2/unbounded-array.exp: print unbounded array contents
+PASS: gdb.modula2/unbounded-array.exp: print the 1st element of array a
+PASS: gdb.modula2/unbounded-array.exp: print the 2nd element of array a
+PASS: gdb.modula2/unbounded-array.exp: print the 3rd element of array a
+PASS: gdb.modula2/unbounded-array.exp: print the 4th element of array a
+PASS: gdb.modula2/unbounded-array.exp: print the 5th element of array a
+Running ./gdb.multi/base.exp ...
+PASS: gdb.multi/base.exp: add empty inferior 2
+PASS: gdb.multi/base.exp: switch to inferior 2
+PASS: gdb.multi/base.exp: load hangout file in inferior 2
+PASS: gdb.multi/base.exp: add inferior 3 with -exec goodbye
+PASS: gdb.multi/base.exp: info inferiors
+PASS: gdb.multi/base.exp: info inferior 2 3
+PASS: gdb.multi/base.exp: info inferior 1-2
+PASS: gdb.multi/base.exp: switch to inferior 1
+PASS: gdb.multi/base.exp: 'info functions commonfun' in inferior 1
+PASS: gdb.multi/base.exp: switch to inferior 3
+PASS: gdb.multi/base.exp: 'info functions commonfun' in inferior 3
+PASS: gdb.multi/base.exp: switch back to inferior 1
+PASS: gdb.multi/base.exp: set listsize 1
+PASS: gdb.multi/base.exp: list commonfun in hello
+PASS: gdb.multi/base.exp: print hglob
+PASS: gdb.multi/base.exp: print glob (hello)
+PASS: gdb.multi/base.exp: switch to inferior 3 to print globals
+PASS: gdb.multi/base.exp: print gglob
+PASS: gdb.multi/base.exp: print glob (goodbye)
+PASS: gdb.multi/base.exp: list commonfun in goodbye
+PASS: gdb.multi/base.exp: switch to inferior 1 to run it
+PASS: gdb.multi/base.exp: break hello
+PASS: gdb.multi/base.exp: continue
+PASS: gdb.multi/base.exp: remove-inferiors 2-3
+PASS: gdb.multi/base.exp: check remove-inferiors
+Running ./gdb.multi/bkpt-multi-exec.exp ...
+Running ./gdb.multi/multi-arch-exec.exp ...
+Running ./gdb.multi/multi-arch.exp ...
+Running ./gdb.multi/watchpoint-multi.exp ...
+UNTESTED: gdb.multi/watchpoint-multi.exp: watchpoint-multi.exp
+Running ./gdb.objc/basicclass.exp ...
+UNSUPPORTED: gdb.objc/basicclass.exp: Couldn't compile ./gdb.objc/basicclass.m: unrecognized error
+Running ./gdb.objc/nondebug.exp ...
+UNSUPPORTED: gdb.objc/nondebug.exp: Couldn't compile ./gdb.objc/nondebug.m: unrecognized error
+Running ./gdb.objc/objcdecode.exp ...
+UNSUPPORTED: gdb.objc/objcdecode.exp: Couldn't compile ./gdb.objc/objcdecode.m: unrecognized error
+Running ./gdb.objc/print.exp ...
+PASS: gdb.objc/print.exp: set language objective-c
+PASS: gdb.objc/print.exp: set language to "objective-c"
+PASS: gdb.objc/print.exp: check fp + text
+PASS: gdb.objc/print.exp: p 1.
+PASS: gdb.objc/print.exp: p 1.5
+PASS: gdb.objc/print.exp: p 1.f
+PASS: gdb.objc/print.exp: p 1.5f
+PASS: gdb.objc/print.exp: p 1.l
+PASS: gdb.objc/print.exp: p 1.5l
+PASS: gdb.objc/print.exp: p 0x1.1
+PASS: gdb.objc/print.exp: reject p 1.1x
+PASS: gdb.objc/print.exp: reject p 1.1ff
+PASS: gdb.objc/print.exp: reject p 1.1ll
+Running ./gdb.opencl/callfuncs.exp ...
+Running ./gdb.opencl/convs_casts.exp ...
+Running ./gdb.opencl/datatypes.exp ...
+Running ./gdb.opencl/operators.exp ...
+Running ./gdb.opencl/vec_comps.exp ...
+Running ./gdb.opt/clobbered-registers-O2.exp ...
+PASS: gdb.opt/clobbered-registers-O2.exp: Backtracing
+PASS: gdb.opt/clobbered-registers-O2.exp: print operand0
+PASS: gdb.opt/clobbered-registers-O2.exp: print operand1
+Running ./gdb.opt/inline-break.exp ...
+PASS: gdb.opt/inline-break.exp: break func1
+PASS: gdb.opt/inline-break.exp: break func2
+PASS: gdb.opt/inline-break.exp: break func3b
+PASS: gdb.opt/inline-break.exp: break func4b
+PASS: gdb.opt/inline-break.exp: break func5b
+PASS: gdb.opt/inline-break.exp: break func6b
+PASS: gdb.opt/inline-break.exp: break func7b
+PASS: gdb.opt/inline-break.exp: break func8b
+PASS: gdb.opt/inline-break.exp: print func1
+PASS: gdb.opt/inline-break.exp: print func2
+Running ./gdb.opt/inline-bt.exp ...
+PASS: gdb.opt/inline-bt.exp: continue to bar (1)
+PASS: gdb.opt/inline-bt.exp: backtrace from bar (1)
+PASS: gdb.opt/inline-bt.exp: bar not inlined
+PASS: gdb.opt/inline-bt.exp: continue to bar (2)
+PASS: gdb.opt/inline-bt.exp: backtrace from bar (2)
+PASS: gdb.opt/inline-bt.exp: up from bar (2)
+PASS: gdb.opt/inline-bt.exp: func1 inlined (2)
+PASS: gdb.opt/inline-bt.exp: continue to bar (3)
+PASS: gdb.opt/inline-bt.exp: backtrace from bar (3)
+PASS: gdb.opt/inline-bt.exp: up from bar (3)
+PASS: gdb.opt/inline-bt.exp: func1 inlined (3)
+PASS: gdb.opt/inline-bt.exp: up from func1 (3)
+PASS: gdb.opt/inline-bt.exp: func2 inlined (3)
+Running ./gdb.opt/inline-cmds.exp ...
+PASS: gdb.opt/inline-cmds.exp: set listsize 1
+PASS: gdb.opt/inline-cmds.exp: continue to bar (1)
+PASS: gdb.opt/inline-cmds.exp: backtrace from bar (1)
+PASS: gdb.opt/inline-cmds.exp: up from bar (1)
+PASS: gdb.opt/inline-cmds.exp: func1 inlined (1)
+PASS: gdb.opt/inline-cmds.exp: continue to bar (2)
+PASS: gdb.opt/inline-cmds.exp: backtrace from bar (2)
+PASS: gdb.opt/inline-cmds.exp: up from bar (2)
+PASS: gdb.opt/inline-cmds.exp: func1 inlined (2)
+PASS: gdb.opt/inline-cmds.exp: up from func1 (2)
+PASS: gdb.opt/inline-cmds.exp: func2 inlined (2)
+PASS: gdb.opt/inline-cmds.exp: continue to marker
+PASS: gdb.opt/inline-cmds.exp: backtrace from marker
+PASS: gdb.opt/inline-cmds.exp: marker not inlined
+PASS: gdb.opt/inline-cmds.exp: next over inlined functions
+PASS: gdb.opt/inline-cmds.exp: next past inlined func1
+PASS: gdb.opt/inline-cmds.exp: print x before func1
+PASS: gdb.opt/inline-cmds.exp: backtrace does not include func1
+PASS: gdb.opt/inline-cmds.exp: stepped over call to func1
+PASS: gdb.opt/inline-cmds.exp: step into func1
+PASS: gdb.opt/inline-cmds.exp: finish from func1
+PASS: gdb.opt/inline-cmds.exp: continue to breakpoint: consecutive func1
+PASS: gdb.opt/inline-cmds.exp: next to first func1
+KFAIL: gdb.opt/inline-cmds.exp: next to second func1 (PRMS: gdb/NNNN)
+PASS: gdb.opt/inline-cmds.exp: continue to breakpoint: func1 then func3
+PASS: gdb.opt/inline-cmds.exp: next to func1 before func3
+PASS: gdb.opt/inline-cmds.exp: next to func3
+PASS: gdb.opt/inline-cmds.exp: continue to breakpoint: finish into func1
+PASS: gdb.opt/inline-cmds.exp: next to finish marker
+PASS: gdb.opt/inline-cmds.exp: step into finish marker
+PASS: gdb.opt/inline-cmds.exp: finish from marker to func1
+PASS: gdb.opt/inline-cmds.exp: step into func1 for finish
+PASS: gdb.opt/inline-cmds.exp: finish from func1 to func3
+PASS: gdb.opt/inline-cmds.exp: continue to breakpoint: before the outer_inline call
+PASS: gdb.opt/inline-cmds.exp: reach 1 the outer_inline call
+PASS: gdb.opt/inline-cmds.exp: reach outer_inline2
+PASS: gdb.opt/inline-cmds.exp: backtrace at main of outer_inline
+PASS: gdb.opt/inline-cmds.exp: enter outer_inline2
+PASS: gdb.opt/inline-cmds.exp: backtrace at outer_inline2
+PASS: gdb.opt/inline-cmds.exp: enter outer_inline1 from outer_inline2
+PASS: gdb.opt/inline-cmds.exp: backtrace at outer_inline1
+PASS: gdb.opt/inline-cmds.exp: enter noinline from outer_inline1
+PASS: gdb.opt/inline-cmds.exp: backtrace at noinline from outer_inline1
+PASS: gdb.opt/inline-cmds.exp: enter inlined_fn from noinline
+PASS: gdb.opt/inline-cmds.exp: backtrace at inlined_fn from noinline
+PASS: gdb.opt/inline-cmds.exp: inlined_fn from noinline inlined
+PASS: gdb.opt/inline-cmds.exp: up to noinline
+PASS: gdb.opt/inline-cmds.exp: noinline from outer_inline1 not inlined
+PASS: gdb.opt/inline-cmds.exp: up to outer_inline1
+PASS: gdb.opt/inline-cmds.exp: outer_inline1 inlined
+PASS: gdb.opt/inline-cmds.exp: up to outer_inline2
+PASS: gdb.opt/inline-cmds.exp: outer_inline2 inlined
+PASS: gdb.opt/inline-cmds.exp: up from outer_inline2
+PASS: gdb.opt/inline-cmds.exp: main not inlined
+Running ./gdb.opt/inline-locals.exp ...
+PASS: gdb.opt/inline-locals.exp: continue to bar (1)
+PASS: gdb.opt/inline-locals.exp: continue to bar (2)
+PASS: gdb.opt/inline-locals.exp: backtrace from bar (2)
+PASS: gdb.opt/inline-locals.exp: up from bar (2)
+PASS: gdb.opt/inline-locals.exp: func1 inlined (2)
+PASS: gdb.opt/inline-locals.exp: info locals above bar (2)
+PASS: gdb.opt/inline-locals.exp: info args above bar (2)
+PASS: gdb.opt/inline-locals.exp: print local (2)
+PASS: gdb.opt/inline-locals.exp: print out of scope local
+PASS: gdb.opt/inline-locals.exp: continue to bar (3)
+PASS: gdb.opt/inline-locals.exp: backtrace from bar (3)
+PASS: gdb.opt/inline-locals.exp: up from bar (3)
+PASS: gdb.opt/inline-locals.exp: func1 inlined (3)
+PASS: gdb.opt/inline-locals.exp: info locals above bar (3)
+PASS: gdb.opt/inline-locals.exp: info args above bar (3)
+PASS: gdb.opt/inline-locals.exp: print local (3)
+Running ./gdb.pascal/floats.exp ...
+UNSUPPORTED: gdb.pascal/floats.exp: No pascal compiler found
+UNTESTED: gdb.pascal/floats.exp: floats.exp
+Running ./gdb.pascal/gdb11492.exp ...
+UNSUPPORTED: gdb.pascal/gdb11492.exp: No pascal compiler found
+UNTESTED: gdb.pascal/gdb11492.exp: gdb11492.exp
+Running ./gdb.pascal/hello.exp ...
+UNSUPPORTED: gdb.pascal/hello.exp: No pascal compiler found
+Running ./gdb.pascal/integers.exp ...
+UNSUPPORTED: gdb.pascal/integers.exp: No pascal compiler found
+Running ./gdb.pascal/print.exp ...
+PASS: gdb.pascal/print.exp: set language pascal
+PASS: gdb.pascal/print.exp: set language to "pascal"
+PASS: gdb.pascal/print.exp: check fp + text
+PASS: gdb.pascal/print.exp: p 1.
+PASS: gdb.pascal/print.exp: p 1.5
+PASS: gdb.pascal/print.exp: p 1.f
+PASS: gdb.pascal/print.exp: p 1.5f
+PASS: gdb.pascal/print.exp: p 1.l
+PASS: gdb.pascal/print.exp: p 1.5l
+PASS: gdb.pascal/print.exp: p 0x1.1
+PASS: gdb.pascal/print.exp: reject p 1.1x
+PASS: gdb.pascal/print.exp: reject p 1.1ff
+PASS: gdb.pascal/print.exp: reject p 1.1ll
+Running ./gdb.pascal/types.exp ...
+PASS: gdb.pascal/types.exp: set language pascal
+PASS: gdb.pascal/types.exp: set language to "pascal"
+PASS: gdb.pascal/types.exp: pt 123
+PASS: gdb.pascal/types.exp: pt TRUE
+PASS: gdb.pascal/types.exp: pt FALSE
+PASS: gdb.pascal/types.exp: pt 'a'
+KFAIL: gdb.pascal/types.exp: pt 'a simple string' (PRMS: gdb/2326)
+PASS: gdb.pascal/types.exp: pt .44
+PASS: gdb.pascal/types.exp: pt 44.0
+PASS: gdb.pascal/types.exp: pt 10e20
+PASS: gdb.pascal/types.exp: pt 10E20
+Running ./gdb.python/lib-types.exp ...
+PASS: gdb.python/lib-types.exp: python import gdb.types
+PASS: gdb.python/lib-types.exp: python const_class1_obj = gdb.parse_and_eval ('const_class1_obj')
+PASS: gdb.python/lib-types.exp: python basic_type_const_class1_obj = gdb.types.get_basic_type (const_class1_obj.type)
+PASS: gdb.python/lib-types.exp: python print (str (const_class1_obj.type))
+PASS: gdb.python/lib-types.exp: const stripping
+PASS: gdb.python/lib-types.exp: python volatile_class1_obj = gdb.parse_and_eval ('volatile_class1_obj')
+PASS: gdb.python/lib-types.exp: python basic_type_volatile_class1_obj = gdb.types.get_basic_type (volatile_class1_obj.type)
+PASS: gdb.python/lib-types.exp: python print (str (volatile_class1_obj.type))
+PASS: gdb.python/lib-types.exp: volatile stripping
+PASS: gdb.python/lib-types.exp: python const_volatile_class1_obj = gdb.parse_and_eval ('const_volatile_class1_obj')
+PASS: gdb.python/lib-types.exp: python basic_type_const_volatile_class1_obj = gdb.types.get_basic_type (const_volatile_class1_obj.type)
+PASS: gdb.python/lib-types.exp: python print (str (const_volatile_class1_obj.type))
+PASS: gdb.python/lib-types.exp: volatile+const stripping
+PASS: gdb.python/lib-types.exp: python typedef_class1_obj = gdb.parse_and_eval ('typedef_class1_obj')
+PASS: gdb.python/lib-types.exp: python basic_type_typedef_class1_obj = gdb.types.get_basic_type (typedef_class1_obj.type)
+PASS: gdb.python/lib-types.exp: python print (str (typedef_class1_obj.type))
+PASS: gdb.python/lib-types.exp: typedef stripping
+PASS: gdb.python/lib-types.exp: python class1_ref_obj = gdb.parse_and_eval ('class1_ref_obj')
+PASS: gdb.python/lib-types.exp: python basic_type_class1_ref_obj = gdb.types.get_basic_type (class1_ref_obj.type)
+PASS: gdb.python/lib-types.exp: python print (str (class1_ref_obj.type))
+PASS: gdb.python/lib-types.exp: reference stripping
+PASS: gdb.python/lib-types.exp: python typedef_const_typedef_class1_obj = gdb.parse_and_eval ('typedef_const_typedef_class1_obj')
+PASS: gdb.python/lib-types.exp: python basic_type_typedef_const_typedef_class1_obj = gdb.types.get_basic_type (typedef_const_typedef_class1_obj.type)
+PASS: gdb.python/lib-types.exp: python print (str (typedef_class1_obj.type))
+PASS: gdb.python/lib-types.exp: nested typedef stripping
+PASS: gdb.python/lib-types.exp: python typedef_const_typedef_class1_ref_obj = gdb.parse_and_eval ('typedef_const_typedef_class1_ref_obj')
+PASS: gdb.python/lib-types.exp: python basic_type_typedef_const_typedef_class1_ref_obj = gdb.types.get_basic_type (typedef_const_typedef_class1_ref_obj.type)
+PASS: gdb.python/lib-types.exp: python print (str (typedef_const_typedef_class1_ref_obj.type))
+PASS: gdb.python/lib-types.exp: nested typedef/ref stripping
+PASS: gdb.python/lib-types.exp: python class1_obj = gdb.parse_and_eval ('class1_obj')
+PASS: gdb.python/lib-types.exp: python print (gdb.types.has_field (class1_obj.type, 'x'))
+PASS: gdb.python/lib-types.exp: python print (gdb.types.has_field (class1_obj.type, 'nope'))
+PASS: gdb.python/lib-types.exp: python subclass1_obj = gdb.parse_and_eval ('subclass1_obj')
+PASS: gdb.python/lib-types.exp: python print (gdb.types.has_field (subclass1_obj.type, 'x'))
+PASS: gdb.python/lib-types.exp: python enum1_obj = gdb.parse_and_eval ('enum1_obj')
+PASS: gdb.python/lib-types.exp: python enum1_dict = gdb.types.make_enum_dict (enum1_obj.type)
+PASS: gdb.python/lib-types.exp: python enum1_list = sorted (enum1_dict.items ())
+PASS: gdb.python/lib-types.exp: python print (enum1_list)
+PASS: gdb.python/lib-types.exp: python struct_a = gdb.lookup_type ('struct A')
+PASS: gdb.python/lib-types.exp: python print (struct_a.keys ())
+PASS: gdb.python/lib-types.exp: python print ([k for k,v in gdb.types.deep_items(struct_a)])
+Running ./gdb.python/py-arch.exp ...
+PASS: gdb.python/py-arch.exp: test number of instructions 1
+PASS: gdb.python/py-arch.exp: test number of instructions 2
+PASS: gdb.python/py-arch.exp: test number of instructions 3
+PASS: gdb.python/py-arch.exp: test number of instructions 4
+PASS: gdb.python/py-arch.exp: test key addr
+PASS: gdb.python/py-arch.exp: test key asm
+PASS: gdb.python/py-arch.exp: test key length
+PASS: gdb.python/py-arch.exp: test exception
+Running ./gdb.python/py-block.exp ...
+PASS: gdb.python/py-block.exp: continue to breakpoint: Block break here.
+PASS: gdb.python/py-block.exp: Check block not None
+PASS: gdb.python/py-block.exp: First anonymous block
+PASS: gdb.python/py-block.exp: Check start not None
+PASS: gdb.python/py-block.exp: Check end not None
+PASS: gdb.python/py-block.exp: Not a global block
+PASS: gdb.python/py-block.exp: Not a static block
+PASS: gdb.python/py-block.exp: Get block
+PASS: gdb.python/py-block.exp: Get block
+PASS: gdb.python/py-block.exp: Is the global block
+PASS: gdb.python/py-block.exp: Is the static block
+PASS: gdb.python/py-block.exp: Get superblock
+PASS: gdb.python/py-block.exp: Second anonymous block
+PASS: gdb.python/py-block.exp: Get superblock 2
+PASS: gdb.python/py-block.exp: Print superblock 2 function
+PASS: gdb.python/py-block.exp: up
+PASS: gdb.python/py-block.exp: Check Frame 2's block not None
+PASS: gdb.python/py-block.exp: main block
+PASS: gdb.python/py-block.exp: Check block validity
+PASS: gdb.python/py-block.exp: Check block validity
+PASS: gdb.python/py-block.exp: Check block validity
+PASS: gdb.python/py-block.exp: Check block validity
+Running ./gdb.python/py-breakpoint.exp ...
+PASS: gdb.python/py-breakpoint.exp: Check obj exists
+PASS: gdb.python/py-breakpoint.exp: Check breakpoint location
+PASS: gdb.python/py-breakpoint.exp: continue to breakpoint: Break at multiply.
+PASS: gdb.python/py-breakpoint.exp: Check for two breakpoints
+PASS: gdb.python/py-breakpoint.exp: Check obj exists
+PASS: gdb.python/py-breakpoint.exp: Check breakpoint location
+PASS: gdb.python/py-breakpoint.exp: Check obj exists
+PASS: gdb.python/py-breakpoint.exp: Check breakpoint location
+PASS: gdb.python/py-breakpoint.exp: Check breakpoint hit count
+PASS: gdb.python/py-breakpoint.exp: continue to breakpoint: Break at multiply.
+PASS: gdb.python/py-breakpoint.exp: Check breakpoint hit count
+PASS: gdb.python/py-breakpoint.exp: Check expected variable result after 6 iterations
+PASS: gdb.python/py-breakpoint.exp: continue to breakpoint: Break at add.
+PASS: gdb.python/py-breakpoint.exp: Check breakpoint enabled.
+PASS: gdb.python/py-breakpoint.exp: continue to breakpoint: Break at add.
+PASS: gdb.python/py-breakpoint.exp: continue to breakpoint: Break at multiply.
+PASS: gdb.python/py-breakpoint.exp: Check breakpoint thread
+PASS: gdb.python/py-breakpoint.exp: Check breakpoint type
+PASS: gdb.python/py-breakpoint.exp: Check breakpoint number
+PASS: gdb.python/py-breakpoint.exp: Check breakpoint number
+PASS: gdb.python/py-breakpoint.exp: Check breakpoint number
+PASS: gdb.python/py-breakpoint.exp: Number of breakpoints before delete
+PASS: gdb.python/py-breakpoint.exp: continue to breakpoint: Break at multiply.
+PASS: gdb.python/py-breakpoint.exp: Check breakpoint invalidated
+PASS: gdb.python/py-breakpoint.exp: Number of breakpoints after delete
+PASS: gdb.python/py-breakpoint.exp: continue to breakpoint: Break at end.
+PASS: gdb.python/py-breakpoint.exp: continue to breakpoint: Break at multiply.
+PASS: gdb.python/py-breakpoint.exp: Test conditional has been set
+PASS: gdb.python/py-breakpoint.exp: continue to breakpoint: Break at multiply.
+PASS: gdb.python/py-breakpoint.exp: Test conditional breakpoint stopped after five iterations
+PASS: gdb.python/py-breakpoint.exp: Test conditional read
+PASS: gdb.python/py-breakpoint.exp: continue to breakpoint: Break at multiply.
+PASS: gdb.python/py-breakpoint.exp: Test breakpoint stopped after six iterations
+PASS: gdb.python/py-breakpoint.exp: commands $bpnum
+PASS: gdb.python/py-breakpoint.exp: print "Command for breakpoint has been executed."
+PASS: gdb.python/py-breakpoint.exp: print result
+PASS: gdb.python/py-breakpoint.exp: end
+PASS: gdb.python/py-breakpoint.exp: python print (blist[len(blist)-1].commands)
+PASS: gdb.python/py-breakpoint.exp: Check invisible bp obj exists
+PASS: gdb.python/py-breakpoint.exp: Check breakpoint location
+PASS: gdb.python/py-breakpoint.exp: Check breakpoint visibility
+PASS: gdb.python/py-breakpoint.exp: Check info breakpoints shows visible breakpoints
+PASS: gdb.python/py-breakpoint.exp: Check invisible bp obj exists
+PASS: gdb.python/py-breakpoint.exp: Check breakpoint location
+PASS: gdb.python/py-breakpoint.exp: Check breakpoint visibility
+PASS: gdb.python/py-breakpoint.exp: Check info breakpoints does not show invisible breakpoints
+PASS: gdb.python/py-breakpoint.exp: Check maint info breakpoints shows invisible breakpoints
+PASS: gdb.python/py-breakpoint.exp: Test watchpoint write
+PASS: gdb.python/py-breakpoint.exp: Check info breakpoints does not show invisible breakpoints
+PASS: gdb.python/py-breakpoint.exp: Check maint info breakpoints shows invisible breakpoints
+PASS: gdb.python/py-breakpoint.exp: Test watchpoint write
+PASS: gdb.python/py-breakpoint.exp: Sub-class a breakpoint - python
+PASS: gdb.python/py-breakpoint.exp: Sub-class a breakpoint - class bp_eval (gdb.Breakpoint):
+PASS: gdb.python/py-breakpoint.exp: Sub-class a breakpoint - inf_i = 0
+PASS: gdb.python/py-breakpoint.exp: Sub-class a breakpoint - count = 0
+PASS: gdb.python/py-breakpoint.exp: Sub-class a breakpoint - def stop (self):
+PASS: gdb.python/py-breakpoint.exp: Sub-class a breakpoint - self.count = self.count + 1
+PASS: gdb.python/py-breakpoint.exp: Sub-class a breakpoint - self.inf_i = gdb.parse_and_eval("i")
+PASS: gdb.python/py-breakpoint.exp: Sub-class a breakpoint - if self.inf_i == 3:
+PASS: gdb.python/py-breakpoint.exp: Sub-class a breakpoint - return True
+PASS: gdb.python/py-breakpoint.exp: Sub-class a breakpoint - return False
+PASS: gdb.python/py-breakpoint.exp: Sub-class a breakpoint - end
+PASS: gdb.python/py-breakpoint.exp: Sub-class a second breakpoint - python
+PASS: gdb.python/py-breakpoint.exp: Sub-class a second breakpoint - class bp_also_eval (gdb.Breakpoint):
+PASS: gdb.python/py-breakpoint.exp: Sub-class a second breakpoint - count = 0
+PASS: gdb.python/py-breakpoint.exp: Sub-class a second breakpoint - def stop (self):
+PASS: gdb.python/py-breakpoint.exp: Sub-class a second breakpoint - self.count = self.count + 1
+PASS: gdb.python/py-breakpoint.exp: Sub-class a second breakpoint - if self.count == 9:
+PASS: gdb.python/py-breakpoint.exp: Sub-class a second breakpoint - return True
+PASS: gdb.python/py-breakpoint.exp: Sub-class a second breakpoint - return False
+PASS: gdb.python/py-breakpoint.exp: Sub-class a second breakpoint - end
+PASS: gdb.python/py-breakpoint.exp: Sub-class a third breakpoint - python
+PASS: gdb.python/py-breakpoint.exp: Sub-class a third breakpoint - class basic (gdb.Breakpoint):
+PASS: gdb.python/py-breakpoint.exp: Sub-class a third breakpoint - count = 0
+PASS: gdb.python/py-breakpoint.exp: Sub-class a third breakpoint - end
+PASS: gdb.python/py-breakpoint.exp: continue to breakpoint: Break at multiply.
+PASS: gdb.python/py-breakpoint.exp: Check inferior value matches python accounting
+PASS: gdb.python/py-breakpoint.exp: Check python accounting matches inferior
+PASS: gdb.python/py-breakpoint.exp: Check non firing same-location breakpoint eval function was also called at each stop.
+PASS: gdb.python/py-breakpoint.exp: Check non firing same-location breakpoint eval function was also called at each stop.
+PASS: gdb.python/py-breakpoint.exp: Check you cannot add a CLI condition to a Python breakpoint that
+PASS: gdb.python/py-breakpoint.exp: Construct an eval function - python
+PASS: gdb.python/py-breakpoint.exp: Construct an eval function - def stop_func ():
+PASS: gdb.python/py-breakpoint.exp: Construct an eval function - return True
+PASS: gdb.python/py-breakpoint.exp: Construct an eval function - end
+PASS: gdb.python/py-breakpoint.exp: Assign stop function to a breakpoint that has a condition
+PASS: gdb.python/py-breakpoint.exp: Test that evaluate function has not been yet executed (ie count = 0)
+PASS: gdb.python/py-breakpoint.exp: continue to breakpoint: Break at multiply.
+PASS: gdb.python/py-breakpoint.exp: Test that evaluate function is run when location also has normal bp
+PASS: gdb.python/py-breakpoint.exp: Sub-class a watchpoint - python
+PASS: gdb.python/py-breakpoint.exp: Sub-class a watchpoint - class wp_eval (gdb.Breakpoint):
+PASS: gdb.python/py-breakpoint.exp: Sub-class a watchpoint - def stop (self):
+PASS: gdb.python/py-breakpoint.exp: Sub-class a watchpoint - self.result = gdb.parse_and_eval("result")
+PASS: gdb.python/py-breakpoint.exp: Sub-class a watchpoint - if self.result == 788:
+PASS: gdb.python/py-breakpoint.exp: Sub-class a watchpoint - return True
+PASS: gdb.python/py-breakpoint.exp: Sub-class a watchpoint - return False
+PASS: gdb.python/py-breakpoint.exp: Sub-class a watchpoint - end
+PASS: gdb.python/py-breakpoint.exp: Test watchpoint write
+PASS: gdb.python/py-breakpoint.exp: Check that this unrelated breakpoints eval function was never called.
+Running ./gdb.python/py-cmd.exp ...
+PASS: gdb.python/py-cmd.exp: input simple command - python
+PASS: gdb.python/py-cmd.exp: input simple command - class test_cmd (gdb.Command):
+PASS: gdb.python/py-cmd.exp: input simple command - def __init__ (self):
+PASS: gdb.python/py-cmd.exp: input simple command - super (test_cmd, self).__init__ ("test_cmd", gdb.COMMAND_OBSCURE)
+PASS: gdb.python/py-cmd.exp: input simple command - def invoke (self, arg, from_tty):
+PASS: gdb.python/py-cmd.exp: input simple command - print ("test_cmd output, arg = %s" % arg)
+PASS: gdb.python/py-cmd.exp: input simple command - test_cmd ()
+PASS: gdb.python/py-cmd.exp: input simple command - end
+PASS: gdb.python/py-cmd.exp: call simple command
+PASS: gdb.python/py-cmd.exp: input prefix command - python
+PASS: gdb.python/py-cmd.exp: input prefix command - class prefix_cmd (gdb.Command):
+PASS: gdb.python/py-cmd.exp: input prefix command - def __init__ (self):
+PASS: gdb.python/py-cmd.exp: input prefix command - super (prefix_cmd, self).__init__ ("prefix_cmd", gdb.COMMAND_OBSCURE, gdb.COMPLETE_NONE, True)
+PASS: gdb.python/py-cmd.exp: input prefix command - def invoke (self, arg, from_tty):
+PASS: gdb.python/py-cmd.exp: input prefix command - print ("prefix_cmd output, arg = %s" % arg)
+PASS: gdb.python/py-cmd.exp: input prefix command - prefix_cmd ()
+PASS: gdb.python/py-cmd.exp: input prefix command - end
+PASS: gdb.python/py-cmd.exp: call prefix command
+PASS: gdb.python/py-cmd.exp: input subcommand - python
+PASS: gdb.python/py-cmd.exp: input subcommand - class subcmd (gdb.Command):
+PASS: gdb.python/py-cmd.exp: input subcommand - def __init__ (self):
+PASS: gdb.python/py-cmd.exp: input subcommand - super (subcmd, self).__init__ ("prefix_cmd subcmd", gdb.COMMAND_OBSCURE)
+PASS: gdb.python/py-cmd.exp: input subcommand - def invoke (self, arg, from_tty):
+PASS: gdb.python/py-cmd.exp: input subcommand - print ("subcmd output, arg = %s" % arg)
+PASS: gdb.python/py-cmd.exp: input subcommand - subcmd ()
+PASS: gdb.python/py-cmd.exp: input subcommand - end
+PASS: gdb.python/py-cmd.exp: call subcmd
+PASS: gdb.python/py-cmd.exp: input prefix command, keyword arguments - python
+PASS: gdb.python/py-cmd.exp: input prefix command, keyword arguments - class prefix_cmd2 (gdb.Command):
+PASS: gdb.python/py-cmd.exp: input prefix command, keyword arguments - def __init__ (self):
+PASS: gdb.python/py-cmd.exp: input prefix command, keyword arguments - super (prefix_cmd2, self).__init__ ("prefix_cmd2", gdb.COMMAND_OBSCURE, prefix = True, completer_class = gdb.COMPLETE_FILENAME)
+PASS: gdb.python/py-cmd.exp: input prefix command, keyword arguments - def invoke (self, arg, from_tty):
+PASS: gdb.python/py-cmd.exp: input prefix command, keyword arguments - print ("prefix_cmd2 output, arg = %s" % arg)
+PASS: gdb.python/py-cmd.exp: input prefix command, keyword arguments - prefix_cmd2 ()
+PASS: gdb.python/py-cmd.exp: input prefix command, keyword arguments - end
+PASS: gdb.python/py-cmd.exp: call prefix command, keyword arguments
+PASS: gdb.python/py-cmd.exp: input subcommand under prefix_cmd2 - python
+PASS: gdb.python/py-cmd.exp: input subcommand under prefix_cmd2 - class subcmd (gdb.Command):
+PASS: gdb.python/py-cmd.exp: input subcommand under prefix_cmd2 - def __init__ (self):
+PASS: gdb.python/py-cmd.exp: input subcommand under prefix_cmd2 - super (subcmd, self).__init__ ("prefix_cmd2 subcmd", gdb.COMMAND_OBSCURE)
+PASS: gdb.python/py-cmd.exp: input subcommand under prefix_cmd2 - def invoke (self, arg, from_tty):
+PASS: gdb.python/py-cmd.exp: input subcommand under prefix_cmd2 - print ("subcmd output, arg = %s" % arg)
+PASS: gdb.python/py-cmd.exp: input subcommand under prefix_cmd2 - subcmd ()
+PASS: gdb.python/py-cmd.exp: input subcommand under prefix_cmd2 - end
+PASS: gdb.python/py-cmd.exp: call subcmd under prefix_cmd2
+PASS: gdb.python/py-cmd.exp: input new subcommand - python
+PASS: gdb.python/py-cmd.exp: input new subcommand - class newsubcmd (gdb.Command):
+PASS: gdb.python/py-cmd.exp: input new subcommand - def __init__ (self):
+PASS: gdb.python/py-cmd.exp: input new subcommand - super (newsubcmd, self).__init__ ("info newsubcmd", gdb.COMMAND_OBSCURE)
+PASS: gdb.python/py-cmd.exp: input new subcommand - def invoke (self, arg, from_tty):
+PASS: gdb.python/py-cmd.exp: input new subcommand - print ("newsubcmd output, arg = %s" % arg)
+PASS: gdb.python/py-cmd.exp: input new subcommand - newsubcmd ()
+PASS: gdb.python/py-cmd.exp: input new subcommand - end
+PASS: gdb.python/py-cmd.exp: call newsubcmd
+PASS: gdb.python/py-cmd.exp: input command to throw error - python
+PASS: gdb.python/py-cmd.exp: input command to throw error - class test_error_cmd (gdb.Command):
+PASS: gdb.python/py-cmd.exp: input command to throw error - def __init__ (self):
+PASS: gdb.python/py-cmd.exp: input command to throw error - super (test_error_cmd, self).__init__ ("test_error_cmd", gdb.COMMAND_OBSCURE)
+PASS: gdb.python/py-cmd.exp: input command to throw error - def invoke (self, arg, from_tty):
+PASS: gdb.python/py-cmd.exp: input command to throw error - raise gdb.GdbError ('you lose!')
+PASS: gdb.python/py-cmd.exp: input command to throw error - test_error_cmd ()
+PASS: gdb.python/py-cmd.exp: input command to throw error - end
+PASS: gdb.python/py-cmd.exp: call error command
+PASS: gdb.python/py-cmd.exp: string_to_argv ("1 2 3")
+PASS: gdb.python/py-cmd.exp: string_to_argv ("'1 2' 3")
+PASS: gdb.python/py-cmd.exp: string_to_argv ('"1 2" 3')
+PASS: gdb.python/py-cmd.exp: string_to_argv ('1\ 2 3')
+PASS: gdb.python/py-cmd.exp: input simple user-defined command - python
+PASS: gdb.python/py-cmd.exp: input simple user-defined command - class test_help (gdb.Command):
+PASS: gdb.python/py-cmd.exp: input simple user-defined command - """Docstring"""
+PASS: gdb.python/py-cmd.exp: input simple user-defined command - def __init__ (self):
+PASS: gdb.python/py-cmd.exp: input simple user-defined command - super (test_help, self).__init__ ("test_help", gdb.COMMAND_USER)
+PASS: gdb.python/py-cmd.exp: input simple user-defined command - def invoke (self, arg, from_tty):
+PASS: gdb.python/py-cmd.exp: input simple user-defined command - print ("test_cmd output, arg = %s" % arg)
+PASS: gdb.python/py-cmd.exp: input simple user-defined command - test_help ()
+PASS: gdb.python/py-cmd.exp: input simple user-defined command - end
+PASS: gdb.python/py-cmd.exp: call simple user-defined command
+PASS: gdb.python/py-cmd.exp: see user-defined command in `help user-defined`
+Running ./gdb.python/py-error.exp ...
+PASS: gdb.python/py-error.exp: set host-charset IBM1047
+PASS: gdb.python/py-error.exp: main reached
+PASS: gdb.python/py-error.exp: no delayed error
+Running ./gdb.python/py-events.exp ...
+Running ./gdb.python/py-evsignal.exp ...
+KFAIL: gdb.python/py-evsignal.exp: Signal Thread 3 (PRMS: python/12966)
+Running ./gdb.python/py-evthreads.exp ...
+KFAIL: gdb.python/py-evthreads.exp: Run to breakpoint 1 (PRMS: python/12966)
+Running ./gdb.python/py-explore-cc.exp ...
+PASS: gdb.python/py-explore-cc.exp: continue to breakpoint: Break here
+PASS: gdb.python/py-explore-cc.exp: explore A
+PASS: gdb.python/py-explore-cc.exp: explore a
+PASS: gdb.python/py-explore-cc.exp: explore int_ref
+PASS: gdb.python/py-explore-cc.exp: explore int_ptr_ref
+PASS: gdb.python/py-explore-cc.exp: explore_int_ptr_ref_as_single_value_pointer
+PASS: gdb.python/py-explore-cc.exp: explore b
+PASS: gdb.python/py-explore-cc.exp: explore_base_class_A
+PASS: gdb.python/py-explore-cc.exp: return_to_b_from_A
+PASS: gdb.python/py-explore-cc.exp: explore_field_i_of_b
+PASS: gdb.python/py-explore-cc.exp: return_to_b_from_i
+PASS: gdb.python/py-explore-cc.exp: explore_field_c_of_b
+PASS: gdb.python/py-explore-cc.exp: return_to_b_from_i
+PASS: gdb.python/py-explore-cc.exp: return_to_gdb_prompt_from_b
+PASS: gdb.python/py-explore-cc.exp: explore B
+PASS: gdb.python/py-explore-cc.exp: explore_base_class_A
+PASS: gdb.python/py-explore-cc.exp: return_to_B
+PASS: gdb.python/py-explore-cc.exp: explore_field_i_of_B
+PASS: gdb.python/py-explore-cc.exp: return_to_B_from_i
+PASS: gdb.python/py-explore-cc.exp: explore_field_c_of_B
+PASS: gdb.python/py-explore-cc.exp: return_to_B_from_c
+PASS: gdb.python/py-explore-cc.exp: return_to_gdb_prompt_from_B
+Running ./gdb.python/py-explore.exp ...
+PASS: gdb.python/py-explore.exp: continue to breakpoint: Break here
+PASS: gdb.python/py-explore.exp: explore i
+PASS: gdb.python/py-explore.exp: explore ss
+PASS: gdb.python/py-explore.exp: explore *ss_ptr
+PASS: gdb.python/py-explore.exp: explore ss_t
+PASS: gdb.python/py-explore.exp: explore ss_ptr
+PASS: gdb.python/py-explore.exp: explore ss_ptr as single value pointer
+PASS: gdb.python/py-explore.exp: explore darray_ref
+PASS: gdb.python/py-explore.exp: no_to_explore_as_pointer
+PASS: gdb.python/py-explore.exp: explore_as_array
+PASS: gdb.python/py-explore.exp: explore_as_array_index_2
+PASS: gdb.python/py-explore.exp: end explore_as_array_index_2
+PASS: gdb.python/py-explore.exp: end explore_as_array
+PASS: gdb.python/py-explore.exp: explore su
+PASS: gdb.python/py-explore.exp: explore su.d
+PASS: gdb.python/py-explore.exp: end su.d exploration
+PASS: gdb.python/py-explore.exp: end su exploration
+PASS: gdb.python/py-explore.exp: explore cs
+PASS: gdb.python/py-explore.exp: explore cs.s
+PASS: gdb.python/py-explore.exp: end cs.s exploration
+PASS: gdb.python/py-explore.exp: explore cs.u
+PASS: gdb.python/py-explore.exp: end cs.u exploration
+PASS: gdb.python/py-explore.exp: end cs exploration
+PASS: gdb.python/py-explore.exp: explore cu
+PASS: gdb.python/py-explore.exp: explore cu.sa
+PASS: gdb.python/py-explore.exp: explore cu.sa[0]
+PASS: gdb.python/py-explore.exp: end cu.sa[0] exploration
+PASS: gdb.python/py-explore.exp: end cu.sa exploration
+PASS: gdb.python/py-explore.exp: end cu exploration
+PASS: gdb.python/py-explore.exp: explore int
+PASS: gdb.python/py-explore.exp: explore struct SimpleStruct
+PASS: gdb.python/py-explore.exp: explore type struct SimpleStruct feild 0
+PASS: gdb.python/py-explore.exp: return to struct SimpleStruct from field 0
+PASS: gdb.python/py-explore.exp: explore type struct SimpleStruct feild 1
+PASS: gdb.python/py-explore.exp: return to struct SimpleStruct from field 1
+PASS: gdb.python/py-explore.exp: return to GDB prompt from struct SimpleStruct
+PASS: gdb.python/py-explore.exp: explore union SimpleUnion
+PASS: gdb.python/py-explore.exp: explore type union SimpleUnion feild 0
+PASS: gdb.python/py-explore.exp: return to union SimpleUnion from field 0
+PASS: gdb.python/py-explore.exp: explore type union SimpleUnion feild 1
+PASS: gdb.python/py-explore.exp: return to union SimpleUnion from field 1
+PASS: gdb.python/py-explore.exp: explore type union SimpleUnion feild 2
+PASS: gdb.python/py-explore.exp: return to union SimpleUnion from field 2
+PASS: gdb.python/py-explore.exp: explore type union SimpleUnion feild 3
+PASS: gdb.python/py-explore.exp: return to union SimpleUnion from field 3
+PASS: gdb.python/py-explore.exp: return to GDB prompt from union SimpleUnion
+PASS: gdb.python/py-explore.exp: explore SS
+PASS: gdb.python/py-explore.exp: explore type SS feild 0
+PASS: gdb.python/py-explore.exp: return to SS from field 0
+PASS: gdb.python/py-explore.exp: explore type SS feild 1
+PASS: gdb.python/py-explore.exp: return to SS field 1
+PASS: gdb.python/py-explore.exp: return to GDB prompt from SS
+PASS: gdb.python/py-explore.exp: explore type struct ComplexStruct
+PASS: gdb.python/py-explore.exp: explore type struct ComplexStruct field 0
+PASS: gdb.python/py-explore.exp: return to ComplexStruct from field 0
+PASS: gdb.python/py-explore.exp: explore type struct ComplexStruct field 1
+PASS: gdb.python/py-explore.exp: return to ComplexStruct from field 1
+PASS: gdb.python/py-explore.exp: explore type struct ComplexStruct field 2
+PASS: gdb.python/py-explore.exp: return to ComplexStruct from field 2
+PASS: gdb.python/py-explore.exp: return to GDB prompt from ComplexStruct type exploration
+PASS: gdb.python/py-explore.exp: explore type union ComplexUnion
+PASS: gdb.python/py-explore.exp: explore type union ComplexUnion field 0
+PASS: gdb.python/py-explore.exp: return to ComplexUnion from field 0
+PASS: gdb.python/py-explore.exp: explore type union ComplexUnion field 1
+PASS: gdb.python/py-explore.exp: return to ComplexUnion from field 1
+PASS: gdb.python/py-explore.exp: return to GDB prompt from ComplexUnion type exploration
+PASS: gdb.python/py-explore.exp: explore type union ComplexUnion
+PASS: gdb.python/py-explore.exp: explore type union ComplexUnion field 0
+PASS: gdb.python/py-explore.exp: return to ComplexUnion from field 0
+PASS: gdb.python/py-explore.exp: explore type union ComplexUnion field 1
+PASS: gdb.python/py-explore.exp: return to ComplexUnion from field 1
+PASS: gdb.python/py-explore.exp: return to GDB prompt from ComplexUnion type exploration
+Running ./gdb.python/py-finish-breakpoint2.exp ...
+PASS: gdb.python/py-finish-breakpoint2.exp: import python scripts
+PASS: gdb.python/py-finish-breakpoint2.exp: run to exception 1
+PASS: gdb.python/py-finish-breakpoint2.exp: check BP count
+PASS: gdb.python/py-finish-breakpoint2.exp: set FinishBP after the exception
+PASS: gdb.python/py-finish-breakpoint2.exp: check FinishBreakpoint in catch()
+PASS: gdb.python/py-finish-breakpoint2.exp: check finish BP removal
+PASS: gdb.python/py-finish-breakpoint2.exp: continue to second exception
+PASS: gdb.python/py-finish-breakpoint2.exp: set FinishBP after the exception
+PASS: gdb.python/py-finish-breakpoint2.exp: FinishBreakpoint with exception thrown not caught
+Running ./gdb.python/py-finish-breakpoint.exp ...
+PASS: gdb.python/py-finish-breakpoint.exp: disable confirmation
+PASS: gdb.python/py-finish-breakpoint.exp: import python scripts
+PASS: gdb.python/py-finish-breakpoint.exp: continue to the function to finish
+PASS: gdb.python/py-finish-breakpoint.exp: set FinishBreakpoint with default frame value
+PASS: gdb.python/py-finish-breakpoint.exp: set FinishBreakpoint
+PASS: gdb.python/py-finish-breakpoint.exp: check return_value at init
+PASS: gdb.python/py-finish-breakpoint.exp: check MyFinishBreakpoint hit
+PASS: gdb.python/py-finish-breakpoint.exp: check return_value
+PASS: gdb.python/py-finish-breakpoint.exp: check finishBP on default frame has been hit
+PASS: gdb.python/py-finish-breakpoint.exp: ensure that finish bp is invalid afer normal hit
+PASS: gdb.python/py-finish-breakpoint.exp: return to main()
+PASS: gdb.python/py-finish-breakpoint.exp: check FinishBP not allowed in main
+PASS: gdb.python/py-finish-breakpoint.exp: import python scripts
+PASS: gdb.python/py-finish-breakpoint.exp: ensure that shared lib has no debug info
+PASS: gdb.python/py-finish-breakpoint.exp: continue to do_nothing
+PASS: gdb.python/py-finish-breakpoint.exp: set finish breakpoint
+PASS: gdb.python/py-finish-breakpoint.exp: check FinishBreakpoint hit
+PASS: gdb.python/py-finish-breakpoint.exp: check return value without debug symbol
+PASS: gdb.python/py-finish-breakpoint.exp: import python scripts
+PASS: gdb.python/py-finish-breakpoint.exp: set finish breakpoint
+PASS: gdb.python/py-finish-breakpoint.exp: set BP after the jump
+PASS: gdb.python/py-finish-breakpoint.exp: check FinishBP out of scope notification
+PASS: gdb.python/py-finish-breakpoint.exp: ensure that finish bp is invalid afer out of scope notification
+PASS: gdb.python/py-finish-breakpoint.exp: import python scripts
+PASS: gdb.python/py-finish-breakpoint.exp: set a conditional BP
+PASS: gdb.python/py-finish-breakpoint.exp: set FinishBP in a breakpoint condition
+PASS: gdb.python/py-finish-breakpoint.exp: don't allow FinishBreakpoint on dummy frames
+PASS: gdb.python/py-finish-breakpoint.exp: check stopped location
+PASS: gdb.python/py-finish-breakpoint.exp: import python scripts
+PASS: gdb.python/py-finish-breakpoint.exp: set conditional BP
+PASS: gdb.python/py-finish-breakpoint.exp: set BP in condition
+PASS: gdb.python/py-finish-breakpoint.exp: stop in condition function
+PASS: gdb.python/py-finish-breakpoint.exp: finish condition evaluation
+PASS: gdb.python/py-finish-breakpoint.exp: stop at conditional breakpoint
+PASS: gdb.python/py-finish-breakpoint.exp: check stopped location
+PASS: gdb.python/py-finish-breakpoint.exp: import python scripts
+PASS: gdb.python/py-finish-breakpoint.exp: prepare TestExplicitBreakpoint
+PASS: gdb.python/py-finish-breakpoint.exp: don't allow FinishBreakpoint on dummy frames
+PASS: gdb.python/py-finish-breakpoint.exp: prepare TestExplicitBreakpoint
+PASS: gdb.python/py-finish-breakpoint.exp: FinishBP stop at during explicit function call
+PASS: gdb.python/py-finish-breakpoint.exp: switch to exit() test
+PASS: gdb.python/py-finish-breakpoint.exp: set FinishBP after the exit()
+PASS: gdb.python/py-finish-breakpoint.exp: catch out of scope after exit
+PASS: gdb.python/py-finish-breakpoint.exp: set FinishBP after the exec
+PASS: gdb.python/py-finish-breakpoint.exp: catch exec
+PASS: gdb.python/py-finish-breakpoint.exp: catch out of scope after exec
+Running ./gdb.python/py-frame.exp ...
+PASS: gdb.python/py-frame.exp: continue to breakpoint: Block break here.
+PASS: gdb.python/py-frame.exp: test Frame.architecture()
+PASS: gdb.python/py-frame.exp: test i
+PASS: gdb.python/py-frame.exp: test f
+PASS: gdb.python/py-frame.exp: test b
+PASS: gdb.python/py-frame.exp: test i = 1.1
+PASS: gdb.python/py-frame.exp: test double i
+PASS: gdb.python/py-frame.exp: test f = 2.2
+PASS: gdb.python/py-frame.exp: test double f
+PASS: gdb.python/py-frame.exp: test i = 99
+PASS: gdb.python/py-frame.exp: test int i
+PASS: gdb.python/py-frame.exp: continue to breakpoint: breakpoint at f2
+PASS: gdb.python/py-frame.exp: selected frame -vs- newest frame
+PASS: gdb.python/py-frame.exp: newest frame -vs- newest frame
+PASS: gdb.python/py-frame.exp: test equality comparison (false)
+PASS: gdb.python/py-frame.exp: test equality comparison (true)
+PASS: gdb.python/py-frame.exp: test inequality comparison (true)
+PASS: gdb.python/py-frame.exp: test inequality comparison (false)
+PASS: gdb.python/py-frame.exp: test Frame.is_valid
+PASS: gdb.python/py-frame.exp: test Frame.name
+PASS: gdb.python/py-frame.exp: test Frame.type
+PASS: gdb.python/py-frame.exp: test Frame.type
+PASS: gdb.python/py-frame.exp: test gdb.frame_stop_reason_string
+PASS: gdb.python/py-frame.exp: test Frame.pc
+PASS: gdb.python/py-frame.exp: test Frame.older
+PASS: gdb.python/py-frame.exp: test Frame.newer
+PASS: gdb.python/py-frame.exp: test Frame.read_var - error
+PASS: gdb.python/py-frame.exp: test Frame.read_var - success
+PASS: gdb.python/py-frame.exp: test gdb.selected_frame
+Running ./gdb.python/py-frame-inline.exp ...
+PASS: gdb.python/py-frame-inline.exp: continue to breakpoint: Block break here.
+PASS: gdb.python/py-frame-inline.exp: info frame
+PASS: gdb.python/py-frame-inline.exp: up
+PASS: gdb.python/py-frame-inline.exp: python print (gdb.selected_frame().read_var('l'))
+Running ./gdb.python/py-function.exp ...
+PASS: gdb.python/py-function.exp: input convenience function - python
+PASS: gdb.python/py-function.exp: input convenience function - class test_func (gdb.Function):
+PASS: gdb.python/py-function.exp: input convenience function - def __init__ (self):
+PASS: gdb.python/py-function.exp: input convenience function - super (test_func, self).__init__ ("test_func")
+PASS: gdb.python/py-function.exp: input convenience function - def invoke (self, arg):
+PASS: gdb.python/py-function.exp: input convenience function - return "test_func output, arg = %s" % arg.string ()
+PASS: gdb.python/py-function.exp: input convenience function - test_func ()
+PASS: gdb.python/py-function.exp: input convenience function - end
+PASS: gdb.python/py-function.exp: call function
+PASS: gdb.python/py-function.exp: input value-returning convenience function - python
+PASS: gdb.python/py-function.exp: input value-returning convenience function - class Double (gdb.Function):
+PASS: gdb.python/py-function.exp: input value-returning convenience function - def __init__ (self):
+PASS: gdb.python/py-function.exp: input value-returning convenience function - super (Double, self).__init__ ("double")
+PASS: gdb.python/py-function.exp: input value-returning convenience function - def invoke (self, n):
+PASS: gdb.python/py-function.exp: input value-returning convenience function - return n*2
+PASS: gdb.python/py-function.exp: input value-returning convenience function - Double ()
+PASS: gdb.python/py-function.exp: input value-returning convenience function - end
+PASS: gdb.python/py-function.exp: call value-returning function
+PASS: gdb.python/py-function.exp: input int-returning function - python
+PASS: gdb.python/py-function.exp: input int-returning function - class Yes(gdb.Function):
+PASS: gdb.python/py-function.exp: input int-returning function - def __init__(self):
+PASS: gdb.python/py-function.exp: input int-returning function - gdb.Function.__init__(self, 'yes')
+PASS: gdb.python/py-function.exp: input int-returning function - def invoke(self):
+PASS: gdb.python/py-function.exp: input int-returning function - return 1
+PASS: gdb.python/py-function.exp: input int-returning function - Yes ()
+PASS: gdb.python/py-function.exp: input int-returning function - end
+PASS: gdb.python/py-function.exp: call yes with &&
+PASS: gdb.python/py-function.exp: call yes with ||
+PASS: gdb.python/py-function.exp: Test GDBError - python
+PASS: gdb.python/py-function.exp: Test GDBError - class GDBError(gdb.Function):
+PASS: gdb.python/py-function.exp: Test GDBError - def __init__(self):
+PASS: gdb.python/py-function.exp: Test GDBError - gdb.Function.__init__(self, 'gdberror')
+PASS: gdb.python/py-function.exp: Test GDBError - def invoke(self):
+PASS: gdb.python/py-function.exp: Test GDBError - raise gdb.GdbError("This is a GdbError")
+PASS: gdb.python/py-function.exp: Test GDBError - GDBError ()
+PASS: gdb.python/py-function.exp: Test GDBError - end
+PASS: gdb.python/py-function.exp: Test GdbError. There should not be a stack trace
+PASS: gdb.python/py-function.exp: Test Normal Error - python
+PASS: gdb.python/py-function.exp: Test Normal Error - class NormalError(gdb.Function):
+PASS: gdb.python/py-function.exp: Test Normal Error - def __init__(self):
+PASS: gdb.python/py-function.exp: Test Normal Error - gdb.Function.__init__(self, 'normalerror')
+PASS: gdb.python/py-function.exp: Test Normal Error - def invoke(self):
+PASS: gdb.python/py-function.exp: Test Normal Error - raise RuntimeError("This is a Normal Error")
+PASS: gdb.python/py-function.exp: Test Normal Error - NormalError ()
+PASS: gdb.python/py-function.exp: Test Normal Error - end
+PASS: gdb.python/py-function.exp: set python print-stack full
+PASS: gdb.python/py-function.exp: Test a Runtime error. There should be a stack trace.
+PASS: gdb.python/py-function.exp: input command-calling function - python
+PASS: gdb.python/py-function.exp: input command-calling function - class CallCommand(gdb.Function):
+PASS: gdb.python/py-function.exp: input command-calling function - def __init__(self):
+PASS: gdb.python/py-function.exp: input command-calling function - gdb.Function.__init__(self, 'call_command')
+PASS: gdb.python/py-function.exp: input command-calling function - def invoke(self):
+PASS: gdb.python/py-function.exp: input command-calling function - return gdb.execute('print 1', to_string=True)
+PASS: gdb.python/py-function.exp: input command-calling function - CallCommand ()
+PASS: gdb.python/py-function.exp: input command-calling function - end
+PASS: gdb.python/py-function.exp: Setting a value from a function which executes a command.
+PASS: gdb.python/py-function.exp: Setting a value from a function which executes a command, again.
+Running ./gdb.python/py-inferior.exp ...
+PASS: gdb.python/py-inferior.exp: successfully compiled posix threads test case
+PASS: gdb.python/py-inferior.exp: get inferiors list
+PASS: gdb.python/py-inferior.exp: verify inferiors list
+PASS: gdb.python/py-inferior.exp: test equality comparison (true)
+PASS: gdb.python/py-inferior.exp: test Inferior.num
+PASS: gdb.python/py-inferior.exp: test Inferior.pid
+PASS: gdb.python/py-inferior.exp: test Inferior.was_attached
+PASS: gdb.python/py-inferior.exp: test Inferior.threads
+PASS: gdb.python/py-inferior.exp: continue to breakpoint: cont to check_threads
+PASS: gdb.python/py-inferior.exp: test Inferior.threads 2
+PASS: gdb.python/py-inferior.exp: continue to breakpoint: cont to Break here.
+PASS: gdb.python/py-inferior.exp: read str contents
+PASS: gdb.python/py-inferior.exp: write str
+PASS: gdb.python/py-inferior.exp: ensure str was changed in the inferior
+PASS: gdb.python/py-inferior.exp: py start_addr = search_buf.address
+PASS: gdb.python/py-inferior.exp: py length = search_buf.type.sizeof
+PASS: gdb.python/py-inferior.exp: find string pattern
+PASS: gdb.python/py-inferior.exp: pattern not found at end of range
+PASS: gdb.python/py-inferior.exp: pattern found at end of range
+PASS: gdb.python/py-inferior.exp: py from struct import *
+PASS: gdb.python/py-inferior.exp: set int16_search_buf[10] = 0x1234
+PASS: gdb.python/py-inferior.exp: py search_buf = gdb.selected_frame ().read_var ('int16_search_buf')
+PASS: gdb.python/py-inferior.exp: py start_addr = search_buf.address
+PASS: gdb.python/py-inferior.exp: py length = search_buf.type.sizeof
+PASS: gdb.python/py-inferior.exp: py pattern = pack('<H',0x1234)
+PASS: gdb.python/py-inferior.exp: find 16-bit pattern, with value pattern
+PASS: gdb.python/py-inferior.exp: set int32_search_buf[10] = 0x12345678
+PASS: gdb.python/py-inferior.exp: py search_buf = gdb.selected_frame ().read_var ('int32_search_buf')
+PASS: gdb.python/py-inferior.exp: py start_addr = search_buf.address
+PASS: gdb.python/py-inferior.exp: py length = search_buf.type.sizeof
+PASS: gdb.python/py-inferior.exp: py pattern = pack('<I',0x12345678)
+PASS: gdb.python/py-inferior.exp: find 32-bit pattern, with python pattern
+PASS: gdb.python/py-inferior.exp: set int64_search_buf[10] = 0xfedcba9876543210LL
+PASS: gdb.python/py-inferior.exp: py search_buf = gdb.selected_frame ().read_var ('int64_search_buf')
+PASS: gdb.python/py-inferior.exp: py start_addr = search_buf.address
+PASS: gdb.python/py-inferior.exp: py length = search_buf.type.sizeof
+PASS: gdb.python/py-inferior.exp: py pattern = pack('<Q', 0xfedcba9876543210)
+PASS: gdb.python/py-inferior.exp: find 64-bit pattern, with value pattern
+PASS: gdb.python/py-inferior.exp: set *(int8_t*) &search_buf[10] = 0x62
+PASS: gdb.python/py-inferior.exp: set *(int16_t*) &search_buf[11] = 0x6363
+PASS: gdb.python/py-inferior.exp: set *(int32_t*) &search_buf[13] = 0x64646464
+PASS: gdb.python/py-inferior.exp: py search_buf = gdb.selected_frame ().read_var ('search_buf')
+PASS: gdb.python/py-inferior.exp: py start_addr = search_buf[0].address
+PASS: gdb.python/py-inferior.exp: py pattern1 = pack('B', 0x62)
+PASS: gdb.python/py-inferior.exp: py pattern2 = pack('<H', 0x6363)
+PASS: gdb.python/py-inferior.exp: py pattern3 = pack('<I', 0x64646464)
+PASS: gdb.python/py-inferior.exp: find mixed-sized pattern
+PASS: gdb.python/py-inferior.exp: find mixed-sized pattern
+PASS: gdb.python/py-inferior.exp: find mixed-sized pattern
+PASS: gdb.python/py-inferior.exp: set *(int32_t*) &search_buf[0*16000+100] = 0x12345678
+PASS: gdb.python/py-inferior.exp: set *(int32_t*) &search_buf[1*16000+100] = 0x12345678
+PASS: gdb.python/py-inferior.exp: py start_addr = gdb.selected_frame ().read_var ('search_buf')
+PASS: gdb.python/py-inferior.exp: py end_addr = start_addr + gdb.selected_frame ().read_var ('search_buf_size')
+PASS: gdb.python/py-inferior.exp: py pattern = pack('<I', 0x12345678)
+PASS: gdb.python/py-inferior.exp: py first = gdb.inferiors()[0].search_memory (start_addr,end_addr - start_addr, pattern)
+PASS: gdb.python/py-inferior.exp: search spanning large range 1st result
+PASS: gdb.python/py-inferior.exp: py start_addr = first + 1
+PASS: gdb.python/py-inferior.exp: py second = gdb.inferiors()[0].search_memory (start_addr, end_addr - start_addr, pattern)
+PASS: gdb.python/py-inferior.exp: search spanning large range 2nd result
+PASS: gdb.python/py-inferior.exp: py start_addr = second + 1
+PASS: gdb.python/py-inferior.exp: py third = gdb.inferiors()[0].search_memory (start_addr, end_addr - start_addr, pattern)
+PASS: gdb.python/py-inferior.exp: search spanning large range 3rd result
+PASS: gdb.python/py-inferior.exp: get initial list
+PASS: gdb.python/py-inferior.exp: Get inferior list length
+PASS: gdb.python/py-inferior.exp: Check inferior validity
+PASS: gdb.python/py-inferior.exp: add empty inferior 2
+PASS: gdb.python/py-inferior.exp: get new list
+PASS: gdb.python/py-inferior.exp: Get inferior list length
+PASS: gdb.python/py-inferior.exp: Check inferior validity
+PASS: gdb.python/py-inferior.exp: Check inferior validity
+PASS: gdb.python/py-inferior.exp: remove-inferiors 3
+PASS: gdb.python/py-inferior.exp: Check inferior validity
+PASS: gdb.python/py-inferior.exp: Check inferior validity
+PASS: gdb.python/py-inferior.exp: Switch to first inferior
+PASS: gdb.python/py-inferior.exp: First inferior selected
+PASS: gdb.python/py-inferior.exp: Create new inferior
+PASS: gdb.python/py-inferior.exp: Switch to third inferior
+PASS: gdb.python/py-inferior.exp: Third inferior selected
+PASS: gdb.python/py-inferior.exp: Switch to first inferior
+PASS: gdb.python/py-inferior.exp: Remove second inferior
+Running ./gdb.python/py-infthread.exp ...
+PASS: gdb.python/py-infthread.exp: test gdb.selected_thread
+PASS: gdb.python/py-infthread.exp: verify InferiorThread object
+PASS: gdb.python/py-infthread.exp: test Inferior.num
+PASS: gdb.python/py-infthread.exp: test InferiorThread.ptid
+PASS: gdb.python/py-infthread.exp: get supplied name of current thread
+PASS: gdb.python/py-infthread.exp: set name of current thread
+PASS: gdb.python/py-infthread.exp: check name of current thread
+PASS: gdb.python/py-infthread.exp: reset name of current thread
+PASS: gdb.python/py-infthread.exp: check name of current thread again
+PASS: gdb.python/py-infthread.exp: test InferiorThread.is_stopped
+PASS: gdb.python/py-infthread.exp: test InferiorThread.is_running
+PASS: gdb.python/py-infthread.exp: test InferiorThread.is_exited
+PASS: gdb.python/py-infthread.exp: test InferiorThread.is_valid
+PASS: gdb.python/py-infthread.exp: kill inferior 1
+PASS: gdb.python/py-infthread.exp: test InferiorThread.is_valid
+Running ./gdb.python/py-mi.exp ...
+PASS: gdb.python/py-mi.exp: breakpoint at main
+PASS: gdb.python/py-mi.exp: mi runto main
+PASS: gdb.python/py-mi.exp: run to 328 (set breakpoint)
+PASS: gdb.python/py-mi.exp: create container varobj, no pretty-printing
+PASS: gdb.python/py-mi.exp: examine container children=0, no pretty-printing
+PASS: gdb.python/py-mi.exp: delete varobj
+PASS: gdb.python/py-mi.exp: create nscont varobj, no pretty-printing
+PASS: gdb.python/py-mi.exp: examine nscont children=0, no pretty-printing
+PASS: gdb.python/py-mi.exp: delete varobj
+PASS: gdb.python/py-mi.exp: create string_1 varobj
+PASS: gdb.python/py-mi.exp: create estring varobj
+PASS: gdb.python/py-mi.exp: assign string_1 from string_2
+PASS: gdb.python/py-mi.exp: update string varobj after assignment
+PASS: gdb.python/py-mi.exp: create container varobj
+PASS: gdb.python/py-mi.exp: examine container children=0
+PASS: gdb.python/py-mi.exp: next over update 1
+PASS: gdb.python/py-mi.exp: varobj update 1
+PASS: gdb.python/py-mi.exp: next over update 2
+PASS: gdb.python/py-mi.exp: varobj update 2
+PASS: gdb.python/py-mi.exp: clear visualizer
+PASS: gdb.python/py-mi.exp: varobj update after clearing
+PASS: gdb.python/py-mi.exp: choose default visualizer
+PASS: gdb.python/py-mi.exp: varobj update after choosing default
+PASS: gdb.python/py-mi.exp: choose visualizer using expression
+PASS: gdb.python/py-mi.exp: varobj update after choosing via expression
+PASS: gdb.python/py-mi.exp: list varobj children after selecting child range
+PASS: gdb.python/py-mi.exp: list varobj children after resetting child range
+PASS: gdb.python/py-mi.exp: next over update 3
+PASS: gdb.python/py-mi.exp: set update range
+PASS: gdb.python/py-mi.exp: list children after setting update range
+PASS: gdb.python/py-mi.exp: list selected children after setting range
+PASS: gdb.python/py-mi.exp: list children after listing selected range
+PASS: gdb.python/py-mi.exp: next over update 4
+PASS: gdb.python/py-mi.exp: update after next with restricted range
+PASS: gdb.python/py-mi.exp: set update range with non-zero start
+PASS: gdb.python/py-mi.exp: update varobj with change outside selected range
+PASS: gdb.python/py-mi.exp: next over update 5
+PASS: gdb.python/py-mi.exp: create second container varobj
+PASS: gdb.python/py-mi.exp: update varobj, no children requested
+PASS: gdb.python/py-mi.exp: next over update 6
+PASS: gdb.python/py-mi.exp: update varobj 2, no children requested
+PASS: gdb.python/py-mi.exp: run to 131 (set breakpoint)
+PASS: gdb.python/py-mi.exp: create outer varobj
+PASS: gdb.python/py-mi.exp: list children of outer
+PASS: gdb.python/py-mi.exp: list children of outer.s
+PASS: gdb.python/py-mi.exp: next over outer update
+PASS: gdb.python/py-mi.exp: update after updating element of outer
+PASS: gdb.python/py-mi.exp: run to 222 (set breakpoint)
+PASS: gdb.python/py-mi.exp: update after type change
+PASS: gdb.python/py-mi.exp: run to 351 (set breakpoint)
+PASS: gdb.python/py-mi.exp: create nstype varobj
+PASS: gdb.python/py-mi.exp: list children after setting update range
+PASS: gdb.python/py-mi.exp: clear visualizer
+PASS: gdb.python/py-mi.exp: varobj update after clearing
+PASS: gdb.python/py-mi.exp: choose default visualizer
+PASS: gdb.python/py-mi.exp: create nstype2 varobj
+PASS: gdb.python/py-mi.exp: list children after setting exception flag
+PASS: gdb.python/py-mi.exp: create me varobj
+PASS: gdb.python/py-mi.exp: evaluate me varobj
+PASS: gdb.python/py-mi.exp: printer whose children are returned as a list
+PASS: gdb.python/py-mi.exp: run to 254 (set breakpoint)
+PASS: gdb.python/py-mi.exp: create varobj for c
+PASS: gdb.python/py-mi.exp: choose array visualizer for c
+PASS: gdb.python/py-mi.exp: list children of c
+PASS: gdb.python/py-mi.exp: next over change of array element
+PASS: gdb.python/py-mi.exp: update varobj after element change
+PASS: gdb.python/py-mi.exp: breakpoint at main
+PASS: gdb.python/py-mi.exp: mi runto main
+PASS: gdb.python/py-mi.exp: run to 351 (set breakpoint)
+PASS: gdb.python/py-mi.exp: create fake varobj
+PASS: gdb.python/py-mi.exp: list children of fake
+PASS: gdb.python/py-mi.exp: list children fake.private
+PASS: gdb.python/py-mi.exp: Install visualizer on a cplus_fake_child
+Running ./gdb.python/py-objfile.exp ...
+PASS: gdb.python/py-objfile.exp: Find a symbol in objfile
+PASS: gdb.python/py-objfile.exp: Get backing object file
+PASS: gdb.python/py-objfile.exp: Get objfile validity
+PASS: gdb.python/py-objfile.exp: Get objfile validity
+PASS: gdb.python/py-objfile.exp: Get objfile validity after unload
+Running ./gdb.python/py-objfile-script.exp ...
+PASS: gdb.python/py-objfile-script.exp: set auto-load safe-path
+PASS: gdb.python/py-objfile-script.exp: info auto-load python-scripts
+PASS: gdb.python/py-objfile-script.exp: b 38
+PASS: gdb.python/py-objfile-script.exp: continue
+PASS: gdb.python/py-objfile-script.exp: print ss
+Running ./gdb.python/py-parameter.exp ...
+PASS: gdb.python/py-parameter.exp: python print (gdb.parameter ('directories'))
+PASS: gdb.python/py-parameter.exp: Simple gdb booleanparameter - python
+PASS: gdb.python/py-parameter.exp: Simple gdb booleanparameter - class TestParam (gdb.Parameter):
+PASS: gdb.python/py-parameter.exp: Simple gdb booleanparameter - """When enabled, test param does something useful. When disabled, does nothing."""
+PASS: gdb.python/py-parameter.exp: Simple gdb booleanparameter - show_doc = "Show the state of the boolean test-param"
+PASS: gdb.python/py-parameter.exp: Simple gdb booleanparameter - set_doc = "Set the state of the boolean test-param"
+PASS: gdb.python/py-parameter.exp: Simple gdb booleanparameter - def get_show_string (self, pvalue):
+PASS: gdb.python/py-parameter.exp: Simple gdb booleanparameter - return "The state of the Test Parameter is " + pvalue
+PASS: gdb.python/py-parameter.exp: Simple gdb booleanparameter - def get_set_string (self):
+PASS: gdb.python/py-parameter.exp: Simple gdb booleanparameter - val = "on"
+PASS: gdb.python/py-parameter.exp: Simple gdb booleanparameter - if (self.value == False):
+PASS: gdb.python/py-parameter.exp: Simple gdb booleanparameter - val = "off"
+PASS: gdb.python/py-parameter.exp: Simple gdb booleanparameter - return "Test Parameter has been set to " + val
+PASS: gdb.python/py-parameter.exp: Simple gdb booleanparameter - def __init__ (self, name):
+PASS: gdb.python/py-parameter.exp: Simple gdb booleanparameter - super (TestParam, self).__init__ (name, gdb.COMMAND_DATA, gdb.PARAM_BOOLEAN)
+PASS: gdb.python/py-parameter.exp: Simple gdb booleanparameter - self.value = True
+PASS: gdb.python/py-parameter.exp: Simple gdb booleanparameter - test_param = TestParam ('print test-param')
+PASS: gdb.python/py-parameter.exp: Simple gdb booleanparameter - end
+PASS: gdb.python/py-parameter.exp: Test parameter value
+PASS: gdb.python/py-parameter.exp: Show parameter on
+PASS: gdb.python/py-parameter.exp: Turn off parameter
+PASS: gdb.python/py-parameter.exp: Show parameter off
+PASS: gdb.python/py-parameter.exp: Test parameter value
+PASS: gdb.python/py-parameter.exp: Test show help
+PASS: gdb.python/py-parameter.exp: Test set help
+PASS: gdb.python/py-parameter.exp: Test general help
+PASS: gdb.python/py-parameter.exp: enum gdb parameter - python
+PASS: gdb.python/py-parameter.exp: enum gdb parameter - class TestEnumParam (gdb.Parameter):
+PASS: gdb.python/py-parameter.exp: enum gdb parameter - """When set, test param does something useful. When disabled, does nothing."""
+PASS: gdb.python/py-parameter.exp: enum gdb parameter - show_doc = "Show the state of the enum"
+PASS: gdb.python/py-parameter.exp: enum gdb parameter - set_doc = "Set the state of the enum"
+PASS: gdb.python/py-parameter.exp: enum gdb parameter - def get_show_string (self, pvalue):
+PASS: gdb.python/py-parameter.exp: enum gdb parameter - return "The state of the enum is " + pvalue
+PASS: gdb.python/py-parameter.exp: enum gdb parameter - def get_set_string (self):
+PASS: gdb.python/py-parameter.exp: enum gdb parameter - return "The state of the enum has been set to " + self.value
+PASS: gdb.python/py-parameter.exp: enum gdb parameter - def __init__ (self, name):
+PASS: gdb.python/py-parameter.exp: enum gdb parameter - super (TestEnumParam, self).__init__ (name, gdb.COMMAND_DATA, gdb.PARAM_ENUM, ["one", "two"])
+PASS: gdb.python/py-parameter.exp: enum gdb parameter - self.value = "one"
+PASS: gdb.python/py-parameter.exp: enum gdb parameter - test_enum_param = TestEnumParam ('print test-enum-param')
+PASS: gdb.python/py-parameter.exp: enum gdb parameter - end
+PASS: gdb.python/py-parameter.exp: Test enum parameter value
+PASS: gdb.python/py-parameter.exp: Show parameter is initial value
+PASS: gdb.python/py-parameter.exp: Set enum to two
+PASS: gdb.python/py-parameter.exp: Show parameter is new value
+PASS: gdb.python/py-parameter.exp: Test enum parameter value
+PASS: gdb.python/py-parameter.exp: Set invalid enum parameter
+PASS: gdb.python/py-parameter.exp: file gdb parameter - python
+PASS: gdb.python/py-parameter.exp: file gdb parameter - class TestFileParam (gdb.Parameter):
+PASS: gdb.python/py-parameter.exp: file gdb parameter - """When set, test param does something useful. When disabled, does nothing."""
+PASS: gdb.python/py-parameter.exp: file gdb parameter - show_doc = "Show the name of the file"
+PASS: gdb.python/py-parameter.exp: file gdb parameter - set_doc = "Set the name of the file"
+PASS: gdb.python/py-parameter.exp: file gdb parameter - def get_show_string (self, pvalue):
+PASS: gdb.python/py-parameter.exp: file gdb parameter - return "The name of the file is " + pvalue
+PASS: gdb.python/py-parameter.exp: file gdb parameter - def get_set_string (self):
+PASS: gdb.python/py-parameter.exp: file gdb parameter - return "The name of the file has been changed to " + self.value
+PASS: gdb.python/py-parameter.exp: file gdb parameter - def __init__ (self, name):
+PASS: gdb.python/py-parameter.exp: file gdb parameter - super (TestFileParam, self).__init__ (name, gdb.COMMAND_FILES, gdb.PARAM_FILENAME)
+PASS: gdb.python/py-parameter.exp: file gdb parameter - self.value = "foo.txt"
+PASS: gdb.python/py-parameter.exp: file gdb parameter - test_file_param = TestFileParam ('test-file-param')
+PASS: gdb.python/py-parameter.exp: file gdb parameter - end
+PASS: gdb.python/py-parameter.exp: Test file parameter value
+PASS: gdb.python/py-parameter.exp: Show initial file value
+PASS: gdb.python/py-parameter.exp: Set new file parameter
+PASS: gdb.python/py-parameter.exp: Show new file value
+PASS: gdb.python/py-parameter.exp: Test new file parameter value
+PASS: gdb.python/py-parameter.exp: set test-file-param
+PASS: gdb.python/py-parameter.exp: Simple gdb booleanparameter - python
+PASS: gdb.python/py-parameter.exp: Simple gdb booleanparameter - class TestUndocParam (gdb.Parameter):
+PASS: gdb.python/py-parameter.exp: Simple gdb booleanparameter - def get_show_string (self, pvalue):
+PASS: gdb.python/py-parameter.exp: Simple gdb booleanparameter - return "The state of the Test Parameter is " + pvalue
+PASS: gdb.python/py-parameter.exp: Simple gdb booleanparameter - def get_set_string (self):
+PASS: gdb.python/py-parameter.exp: Simple gdb booleanparameter - val = "on"
+PASS: gdb.python/py-parameter.exp: Simple gdb booleanparameter - if (self.value == False):
+PASS: gdb.python/py-parameter.exp: Simple gdb booleanparameter - val = "off"
+PASS: gdb.python/py-parameter.exp: Simple gdb booleanparameter - return "Test Parameter has been set to " + val
+PASS: gdb.python/py-parameter.exp: Simple gdb booleanparameter - def __init__ (self, name):
+PASS: gdb.python/py-parameter.exp: Simple gdb booleanparameter - super (TestUndocParam, self).__init__ (name, gdb.COMMAND_DATA, gdb.PARAM_BOOLEAN)
+PASS: gdb.python/py-parameter.exp: Simple gdb booleanparameter - self.value = True
+PASS: gdb.python/py-parameter.exp: Simple gdb booleanparameter - test_undoc_param = TestUndocParam ('print test-undoc-param')
+PASS: gdb.python/py-parameter.exp: Simple gdb booleanparameter - end
+PASS: gdb.python/py-parameter.exp: Show parameter on
+PASS: gdb.python/py-parameter.exp: Turn off parameter
+PASS: gdb.python/py-parameter.exp: Show parameter off
+PASS: gdb.python/py-parameter.exp: Test parameter value
+PASS: gdb.python/py-parameter.exp: Test show help
+PASS: gdb.python/py-parameter.exp: Test set help
+PASS: gdb.python/py-parameter.exp: Test general help
+PASS: gdb.python/py-parameter.exp: Simple gdb booleanparameter - python
+PASS: gdb.python/py-parameter.exp: Simple gdb booleanparameter - class TestNodocParam (gdb.Parameter):
+PASS: gdb.python/py-parameter.exp: Simple gdb booleanparameter - def __init__ (self, name):
+PASS: gdb.python/py-parameter.exp: Simple gdb booleanparameter - super (TestNodocParam, self).__init__ (name, gdb.COMMAND_DATA, gdb.PARAM_BOOLEAN)
+PASS: gdb.python/py-parameter.exp: Simple gdb booleanparameter - self.value = True
+PASS: gdb.python/py-parameter.exp: Simple gdb booleanparameter - test_nodoc_param = TestNodocParam ('print test-nodoc-param')
+PASS: gdb.python/py-parameter.exp: Simple gdb booleanparameter - end
+PASS: gdb.python/py-parameter.exp: Show parameter on
+PASS: gdb.python/py-parameter.exp: Turn off parameter
+PASS: gdb.python/py-parameter.exp: Show parameter off
+PASS: gdb.python/py-parameter.exp: Test parameter value
+PASS: gdb.python/py-parameter.exp: Test show help
+PASS: gdb.python/py-parameter.exp: Test set help
+PASS: gdb.python/py-parameter.exp: Test general help
+PASS: gdb.python/py-parameter.exp: Simple gdb booleanparameter - python
+PASS: gdb.python/py-parameter.exp: Simple gdb booleanparameter - class TestParam (gdb.Parameter):
+PASS: gdb.python/py-parameter.exp: Simple gdb booleanparameter - """When enabled, test param does something useful. When disabled, does nothing."""
+PASS: gdb.python/py-parameter.exp: Simple gdb booleanparameter - show_doc = "State of the Test Parameter"
+PASS: gdb.python/py-parameter.exp: Simple gdb booleanparameter - set_doc = "Set the state of the Test Parameter"
+PASS: gdb.python/py-parameter.exp: Simple gdb booleanparameter - def __init__ (self, name):
+PASS: gdb.python/py-parameter.exp: Simple gdb booleanparameter - super (TestParam, self).__init__ (name, gdb.COMMAND_DATA, gdb.PARAM_BOOLEAN)
+PASS: gdb.python/py-parameter.exp: Simple gdb booleanparameter - self.value = True
+PASS: gdb.python/py-parameter.exp: Simple gdb booleanparameter - test_param = TestParam ('print test-param')
+PASS: gdb.python/py-parameter.exp: Simple gdb booleanparameter - end
+PASS: gdb.python/py-parameter.exp: Test parameter value
+PASS: gdb.python/py-parameter.exp: Show parameter on
+PASS: gdb.python/py-parameter.exp: Turn off parameter
+PASS: gdb.python/py-parameter.exp: Show parameter off
+PASS: gdb.python/py-parameter.exp: Test parameter value
+PASS: gdb.python/py-parameter.exp: Test show help
+PASS: gdb.python/py-parameter.exp: Test set help
+PASS: gdb.python/py-parameter.exp: Test general help
+Running ./gdb.python/py-pp-maint.exp ...
+PASS: gdb.python/py-pp-maint.exp: b 77
+PASS: gdb.python/py-pp-maint.exp: continue
+PASS: gdb.python/py-pp-maint.exp: info pretty-printer
+PASS: gdb.python/py-pp-maint.exp: info pretty-printer global .*function
+PASS: gdb.python/py-pp-maint.exp: info pretty-printer .* pp-test
+PASS: gdb.python/py-pp-maint.exp: print flt enabled #1
+PASS: gdb.python/py-pp-maint.exp: print ss enabled #1
+PASS: gdb.python/py-pp-maint.exp: disable pretty-printer
+PASS: gdb.python/py-pp-maint.exp: enable pretty-printer
+PASS: gdb.python/py-pp-maint.exp: disable pretty-printer global
+PASS: gdb.python/py-pp-maint.exp: enable pretty-printer
+PASS: gdb.python/py-pp-maint.exp: disable pretty-printer global lookup_function_lookup_test
+PASS: gdb.python/py-pp-maint.exp: disable pretty-printer global pp-test;.*
+PASS: gdb.python/py-pp-maint.exp: info pretty-printer global .*function
+PASS: gdb.python/py-pp-maint.exp: info pretty-printer .* pp-test
+PASS: gdb.python/py-pp-maint.exp: print flt disabled
+PASS: gdb.python/py-pp-maint.exp: print ss disabled
+PASS: gdb.python/py-pp-maint.exp: enable pretty-printer global lookup_function_lookup_test
+PASS: gdb.python/py-pp-maint.exp: enable pretty-printer global pp-test
+PASS: gdb.python/py-pp-maint.exp: enable pretty-printer global pp-test;.*ss.*
+PASS: gdb.python/py-pp-maint.exp: enable pretty-printer global pp-test;.*s.*
+PASS: gdb.python/py-pp-maint.exp: enable pretty-printer global pp-test;.*
+PASS: gdb.python/py-pp-maint.exp: info pretty-printer
+PASS: gdb.python/py-pp-maint.exp: print flt re-enabled
+PASS: gdb.python/py-pp-maint.exp: print ss re-enabled
+PASS: gdb.python/py-pp-maint.exp: print FLAG_1
+PASS: gdb.python/py-pp-maint.exp: print FLAG_1 | FLAG_3
+PASS: gdb.python/py-pp-maint.exp: print FLAG_1 | 8
+Running ./gdb.python/py-prettyprint.exp ...
+PASS: gdb.python/py-prettyprint.exp: set print pretty on
+PASS: gdb.python/py-prettyprint.exp: b 351
+PASS: gdb.python/py-prettyprint.exp: continue
+PASS: gdb.python/py-prettyprint.exp: python exec (open ('py-prettyprint.py').read ())
+PASS: gdb.python/py-prettyprint.exp: print ss
+PASS: gdb.python/py-prettyprint.exp: print ssa[1]
+PASS: gdb.python/py-prettyprint.exp: print ssa
+PASS: gdb.python/py-prettyprint.exp: print arraystruct
+PASS: gdb.python/py-prettyprint.exp: print ns2
+PASS: gdb.python/py-prettyprint.exp: print x
+PASS: gdb.python/py-prettyprint.exp: print cstring
+PASS: gdb.python/py-prettyprint.exp: print estring
+PASS: gdb.python/py-prettyprint.exp: python pp_ls_encoding = 'UTF-8'
+PASS: gdb.python/py-prettyprint.exp: print estring2
+PASS: gdb.python/py-prettyprint.exp: set python print-stack full
+PASS: gdb.python/py-prettyprint.exp: print hint_error
+PASS: gdb.python/py-prettyprint.exp: print c
+PASS: gdb.python/py-prettyprint.exp: print nstype
+PASS: gdb.python/py-prettyprint.exp: set print pretty off
+PASS: gdb.python/py-prettyprint.exp: print nstype on one line
+PASS: gdb.python/py-prettyprint.exp: continue until exit
+PASS: gdb.python/py-prettyprint.exp: set print pretty on
+PASS: gdb.python/py-prettyprint.exp: b 351
+PASS: gdb.python/py-prettyprint.exp: continue
+PASS: gdb.python/py-prettyprint.exp: python exec (open ('py-prettyprint.py').read ())
+PASS: gdb.python/py-prettyprint.exp: print ss
+PASS: gdb.python/py-prettyprint.exp: print ssa[1]
+PASS: gdb.python/py-prettyprint.exp: print ssa
+PASS: gdb.python/py-prettyprint.exp: print arraystruct
+PASS: gdb.python/py-prettyprint.exp: print cps
+PASS: gdb.python/py-prettyprint.exp: print cpss
+PASS: gdb.python/py-prettyprint.exp: print cpssa[0]
+PASS: gdb.python/py-prettyprint.exp: print cpssa[1]
+PASS: gdb.python/py-prettyprint.exp: print cpssa
+PASS: gdb.python/py-prettyprint.exp: print sss
+PASS: gdb.python/py-prettyprint.exp: print ref
+PASS: gdb.python/py-prettyprint.exp: print derived
+PASS: gdb.python/py-prettyprint.exp: print ns
+PASS: gdb.python/py-prettyprint.exp:
+PASS: gdb.python/py-prettyprint.exp: print ns
+PASS: gdb.python/py-prettyprint.exp:
+PASS: gdb.python/py-prettyprint.exp: print ns
+PASS: gdb.python/py-prettyprint.exp:
+PASS: gdb.python/py-prettyprint.exp: print ns2
+PASS: gdb.python/py-prettyprint.exp: print x
+PASS: gdb.python/py-prettyprint.exp: print cstring
+PASS: gdb.python/py-prettyprint.exp: print estring
+PASS: gdb.python/py-prettyprint.exp: python pp_ls_encoding = 'UTF-8'
+PASS: gdb.python/py-prettyprint.exp: print estring2
+PASS: gdb.python/py-prettyprint.exp: set python print-stack full
+PASS: gdb.python/py-prettyprint.exp: print hint_error
+PASS: gdb.python/py-prettyprint.exp: print c
+PASS: gdb.python/py-prettyprint.exp: print nstype
+PASS: gdb.python/py-prettyprint.exp: set print pretty off
+PASS: gdb.python/py-prettyprint.exp: print nstype on one line
+PASS: gdb.python/py-prettyprint.exp: continue until exit
+PASS: gdb.python/py-prettyprint.exp: python exec (open ('py-prettyprint.py').read ())
+PASS: gdb.python/py-prettyprint.exp: continue to breakpoint: eval-break
+PASS: gdb.python/py-prettyprint.exp: info locals
+PASS: gdb.python/py-prettyprint.exp: b 351
+PASS: gdb.python/py-prettyprint.exp: continue
+PASS: gdb.python/py-prettyprint.exp: print ss enabled #1
+PASS: gdb.python/py-prettyprint.exp: python disable_lookup_function ()
+PASS: gdb.python/py-prettyprint.exp: print ss disabled
+PASS: gdb.python/py-prettyprint.exp: python enable_lookup_function ()
+PASS: gdb.python/py-prettyprint.exp: print ss enabled #2
+Running ./gdb.python/py-progspace.exp ...
+PASS: gdb.python/py-progspace.exp: current progspace filename (None)
+PASS: gdb.python/py-progspace.exp: python print (gdb.progspaces())
+PASS: gdb.python/py-progspace.exp: current progspace filename (py-progspace)
+Running ./gdb.python/py-prompt.exp ...
+Running ./gdb.python/py-section-script.exp ...
+PASS: gdb.python/py-section-script.exp: set auto-load safe-path
+PASS: gdb.python/py-section-script.exp: info auto-load python-scripts
+PASS: gdb.python/py-section-script.exp: info auto-load python-scripts py-section-script
+PASS: gdb.python/py-section-script.exp: info auto-load python-scripts no-script-matches-this
+PASS: gdb.python/py-section-script.exp: b 51
+PASS: gdb.python/py-section-script.exp: continue
+PASS: gdb.python/py-section-script.exp: print ss
+Running ./gdb.python/py-shared.exp ...
+PASS: gdb.python/py-shared.exp: func1 address
+PASS: gdb.python/py-shared.exp: Aquire func1 address
+PASS: gdb.python/py-shared.exp: test func1 solib location
+PASS: gdb.python/py-shared.exp: main address
+PASS: gdb.python/py-shared.exp: Aquire main address
+PASS: gdb.python/py-shared.exp: test main solib location
+Running ./gdb.python/py-strfns.exp ...
+PASS: gdb.python/py-strfns.exp: p $_streq (str1, str2)
+PASS: gdb.python/py-strfns.exp: p $_streq (str1, str3)
+PASS: gdb.python/py-strfns.exp: p $_strlen (str1)
+PASS: gdb.python/py-strfns.exp: p $_strlen (buf1)
+PASS: gdb.python/py-strfns.exp: p $_memeq (buf1, buf2, 4)
+PASS: gdb.python/py-strfns.exp: p $_memeq (buf1, buf3, 4)
+PASS: gdb.python/py-strfns.exp: p $_regex (str1, "Hello")
+PASS: gdb.python/py-strfns.exp: p $_regex (str1, "Help")
+PASS: gdb.python/py-strfns.exp: p $_regex (str1, "^Hello")
+PASS: gdb.python/py-strfns.exp: p $_regex (str1, "^Hello.$")
+PASS: gdb.python/py-strfns.exp: condition $bpnum $_streq (arg, "Goodbye.")
+PASS: gdb.python/py-strfns.exp: continue to breakpoint: Break func here.
+PASS: gdb.python/py-strfns.exp: p arg
+PASS: gdb.python/py-strfns.exp: condition $bpnum $_memeq (arg, buf3, 4)
+PASS: gdb.python/py-strfns.exp: continue to breakpoint: Break bfunc here.
+PASS: gdb.python/py-strfns.exp: p /d {char[4]} arg
+PASS: gdb.python/py-strfns.exp: save a corefile
+FAIL: gdb.python/py-strfns.exp: re-load generated corefile
+Running ./gdb.python/py-symbol.exp ...
+PASS: gdb.python/py-symbol.exp: Lookup main
+PASS: gdb.python/py-symbol.exp: Test main_func.is_function
+PASS: gdb.python/py-symbol.exp: Test lookup_global_symbol("junk")
+PASS: gdb.python/py-symbol.exp: print value of main
+PASS: gdb.python/py-symbol.exp: print line number of qq
+PASS: gdb.python/py-symbol.exp: print value of qq
+PASS: gdb.python/py-symbol.exp: print whether qq needs a frame
+PASS: gdb.python/py-symbol.exp: continue to breakpoint: Block break here.
+PASS: gdb.python/py-symbol.exp: Test arg.is_variable
+PASS: gdb.python/py-symbol.exp: Test arg.is_constant
+PASS: gdb.python/py-symbol.exp: Test arg.is_argument
+PASS: gdb.python/py-symbol.exp: Test arg.is_function
+PASS: gdb.python/py-symbol.exp: Test func.is_variable
+PASS: gdb.python/py-symbol.exp: Test func.is_constant
+PASS: gdb.python/py-symbol.exp: Test func.is_argument
+PASS: gdb.python/py-symbol.exp: Test func.is_function
+PASS: gdb.python/py-symbol.exp: Test func.name
+PASS: gdb.python/py-symbol.exp: Test func.print_name
+PASS: gdb.python/py-symbol.exp: Test func.linkage_name
+PASS: gdb.python/py-symbol.exp: Test func.addr_class
+PASS: gdb.python/py-symbol.exp: continue to breakpoint: Break at end.
+PASS: gdb.python/py-symbol.exp: Test a.is_variable
+PASS: gdb.python/py-symbol.exp: Test a.is_constant
+PASS: gdb.python/py-symbol.exp: Test a.is_argument
+PASS: gdb.python/py-symbol.exp: Test a.is_function
+PASS: gdb.python/py-symbol.exp: Test a.addr_class
+PASS: gdb.python/py-symbol.exp: try to print value of a without a frame
+PASS: gdb.python/py-symbol.exp: print value of a
+PASS: gdb.python/py-symbol.exp: print whether a needs a frame
+PASS: gdb.python/py-symbol.exp: Test t.is_variable
+PASS: gdb.python/py-symbol.exp: Test t.is_constant
+PASS: gdb.python/py-symbol.exp: Test t.is_argument
+PASS: gdb.python/py-symbol.exp: Test t.is_function
+PASS: gdb.python/py-symbol.exp: Test t.addr_class
+PASS: gdb.python/py-symbol.exp: Get type
+PASS: gdb.python/py-symbol.exp: Get symtab
+PASS: gdb.python/py-symbol.exp: continue to breakpoint: Break in class.
+PASS: gdb.python/py-symbol.exp: Test func.is_variable
+PASS: gdb.python/py-symbol.exp: Test func.is_constant
+PASS: gdb.python/py-symbol.exp: Test func.is_argument
+PASS: gdb.python/py-symbol.exp: Test func.is_function
+PASS: gdb.python/py-symbol.exp: Test func.name
+PASS: gdb.python/py-symbol.exp: Test func.print_name
+PASS: gdb.python/py-symbol.exp: Test func.linkage_name
+PASS: gdb.python/py-symbol.exp: Test func.addr_class
+PASS: gdb.python/py-symbol.exp: continue to breakpoint: Break at end.
+PASS: gdb.python/py-symbol.exp: Test symbol validity
+PASS: gdb.python/py-symbol.exp: Test symbol validity
+PASS: gdb.python/py-symbol.exp: Test symbol destructor
+Running ./gdb.python/py-symtab.exp ...
+PASS: gdb.python/py-symtab.exp: continue to breakpoint: Block break here.
+PASS: gdb.python/py-symtab.exp: Test symtab
+PASS: gdb.python/py-symtab.exp: Test sal.pc
+PASS: gdb.python/py-symtab.exp: Test sal.last
+PASS: gdb.python/py-symtab.exp: Test sal.line
+PASS: gdb.python/py-symtab.exp: Test sal.is_valid
+PASS: gdb.python/py-symtab.exp: Test symtab.filename
+PASS: gdb.python/py-symtab.exp: Test symtab.objfile
+PASS: gdb.python/py-symtab.exp: Test symtab.fullname
+PASS: gdb.python/py-symtab.exp: Test symtab.is_valid()
+PASS: gdb.python/py-symtab.exp: Test qq in global symbols
+PASS: gdb.python/py-symtab.exp: Test func in global symbols
+PASS: gdb.python/py-symtab.exp: Test main in global symbols
+PASS: gdb.python/py-symtab.exp: Test int in static symbols
+PASS: gdb.python/py-symtab.exp: Test char in static symbols
+PASS: gdb.python/py-symtab.exp: Test simple_struct in static symbols
+PASS: gdb.python/py-symtab.exp: Test sal.is_valid
+PASS: gdb.python/py-symtab.exp: Test symtab.is_valid()
+PASS: gdb.python/py-symtab.exp: Test sal destructor
+PASS: gdb.python/py-symtab.exp: Test symtab destructor
+Running ./gdb.python/py-template.exp ...
+PASS: gdb.python/py-template.exp: print (foo)
+PASS: gdb.python/py-template.exp: python foo = gdb.history(0)
+PASS: gdb.python/py-template.exp: const int
+PASS: gdb.python/py-template.exp: print (foo)
+PASS: gdb.python/py-template.exp: python foo = gdb.history(0)
+PASS: gdb.python/py-template.exp: volatile int
+PASS: gdb.python/py-template.exp: print (foo)
+PASS: gdb.python/py-template.exp: python foo = gdb.history(0)
+PASS: gdb.python/py-template.exp: const int &
+PASS: gdb.python/py-template.exp: print (foo)
+PASS: gdb.python/py-template.exp: python foo = gdb.history(0)
+PASS: gdb.python/py-template.exp: volatile int &
+PASS: gdb.python/py-template.exp: print (foo)
+PASS: gdb.python/py-template.exp: python foo = gdb.history(0)
+PASS: gdb.python/py-template.exp: volatile int * const
+PASS: gdb.python/py-template.exp: print (foo)
+PASS: gdb.python/py-template.exp: python foo = gdb.history(0)
+PASS: gdb.python/py-template.exp: volatile int * const *
+PASS: gdb.python/py-template.exp: print (foo)
+PASS: gdb.python/py-template.exp: python foo = gdb.history(0)
+PASS: gdb.python/py-template.exp: const int * volatile
+PASS: gdb.python/py-template.exp: print (foo)
+PASS: gdb.python/py-template.exp: python foo = gdb.history(0)
+PASS: gdb.python/py-template.exp: const int * volatile * const * volatile *
+Running ./gdb.python/python.exp ...
+PASS: gdb.python/python.exp: multi-line python command - python
+PASS: gdb.python/python.exp: multi-line python command - print (23)
+PASS: gdb.python/python.exp: multi-line python command - end
+PASS: gdb.python/python.exp: show python command - define zzq
+PASS: gdb.python/python.exp: show python command - python
+PASS: gdb.python/python.exp: show python command - print (23)
+PASS: gdb.python/python.exp: show python command - end
+PASS: gdb.python/python.exp: show python command - end
+PASS: gdb.python/python.exp: show python command - show user zzq
+PASS: gdb.python/python.exp: indented multi-line python command - python
+PASS: gdb.python/python.exp: indented multi-line python command - def foo ():
+PASS: gdb.python/python.exp: indented multi-line python command - print ('hello, world!')
+PASS: gdb.python/python.exp: indented multi-line python command - foo ()
+PASS: gdb.python/python.exp: indented multi-line python command - end
+PASS: gdb.python/python.exp: source source2.py
+PASS: gdb.python/python.exp: source -s source2.py
+PASS: gdb.python/python.exp: python print (gdb.current_objfile())
+PASS: gdb.python/python.exp: python print (gdb.objfiles())
+PASS: gdb.python/python.exp: pythonX.Y/lib-dynload/*.so
+PASS: gdb.python/python.exp: python x = gdb.execute('printf "%d", 23', to_string = True)
+PASS: gdb.python/python.exp: python print (x)
+PASS: gdb.python/python.exp: post event insertion - python
+PASS: gdb.python/python.exp: post event insertion - someVal = 0
+PASS: gdb.python/python.exp: post event insertion - class Foo(object):
+PASS: gdb.python/python.exp: post event insertion - def __call__(self):
+PASS: gdb.python/python.exp: post event insertion - global someVal
+PASS: gdb.python/python.exp: post event insertion - someVal += 1
+PASS: gdb.python/python.exp: post event insertion - gdb.post_event(Foo())
+PASS: gdb.python/python.exp: post event insertion - end
+PASS: gdb.python/python.exp: test post event execution
+PASS: gdb.python/python.exp: Test non callable class
+PASS: gdb.python/python.exp: show height
+PASS: gdb.python/python.exp: set height 10
+PASS: gdb.python/python.exp: verify pagination beforehand
+PASS: gdb.python/python.exp: verify pagination beforehand: q
+PASS: gdb.python/python.exp: gdb.execute does not page
+PASS: gdb.python/python.exp: verify pagination afterwards
+PASS: gdb.python/python.exp: verify pagination afterwards: q
+PASS: gdb.python/python.exp: set height 0
+PASS: gdb.python/python.exp: collect help from uiout
+PASS: gdb.python/python.exp: verify help to uiout
+PASS: gdb.python/python.exp: Attempt to aquire thread with no inferior
+PASS: gdb.python/python.exp: Ensure that no threads are returned
+PASS: gdb.python/python.exp: register atexit function - python
+PASS: gdb.python/python.exp: register atexit function - import atexit
+PASS: gdb.python/python.exp: register atexit function - def printit(arg):
+PASS: gdb.python/python.exp: register atexit function - print (arg)
+PASS: gdb.python/python.exp: register atexit function - atexit.register(printit, 'good bye world')
+PASS: gdb.python/python.exp: register atexit function - end
+PASS: gdb.python/python.exp: atexit handling
+PASS: gdb.python/python.exp: test decode_line no source named main
+PASS: gdb.python/python.exp: test decode_line current location
+PASS: gdb.python/python.exp: Test decode_line current location
+PASS: gdb.python/python.exp: Test decode_line expression parse
+PASS: gdb.python/python.exp: Test decode_line current location
+PASS: gdb.python/python.exp: Test decode_line current locationn filename
+PASS: gdb.python/python.exp: Test decode_line current location line number
+PASS: gdb.python/python.exp: test decode_line python.c:26
+PASS: gdb.python/python.exp: Test decode_line python.c:26 length
+PASS: gdb.python/python.exp: Test decode_line expression parse
+PASS: gdb.python/python.exp: Test decode_line python.c:26 length
+PASS: gdb.python/python.exp: Test decode_line python.c:26 filename
+PASS: gdb.python/python.exp: Test decode_line python.c:26 line number
+PASS: gdb.python/python.exp: test decode_line randomfunc
+PASS: gdb.python/python.exp: test decode_line func1()
+PASS: gdb.python/python.exp: Test decode_line func1 length
+PASS: gdb.python/python.exp: Test decode_line func1 length
+PASS: gdb.python/python.exp: Test decode_line func1 filename
+PASS: gdb.python/python.exp: Test decode_line func1 line number
+PASS: gdb.python/python.exp: test decode_line func1,func2
+PASS: gdb.python/python.exp: stop at comma in linespec
+PASS: gdb.python/python.exp: Test stderr location
+PASS: gdb.python/python.exp: Test stdout location
+PASS: gdb.python/python.exp: Test default write
+PASS: gdb.python/python.exp: Test stderr write
+PASS: gdb.python/python.exp: Test stdout write
+PASS: gdb.python/python.exp: Test stdlog write
+PASS: gdb.python/python.exp: Test print-backtrace show setting. Default is message.
+PASS: gdb.python/python.exp: Test print-backtrace set setting
+PASS: gdb.python/python.exp: Test print-backtrace show setting to full.
+PASS: gdb.python/python.exp: prompt substitution - python
+PASS: gdb.python/python.exp: prompt substitution - someCounter = 0
+PASS: gdb.python/python.exp: prompt substitution - def prompt(current):
+PASS: gdb.python/python.exp: prompt substitution - global someCounter
+PASS: gdb.python/python.exp: prompt substitution - if (current == "testfake "):
+PASS: gdb.python/python.exp: prompt substitution - return None
+PASS: gdb.python/python.exp: prompt substitution - someCounter = someCounter + 1
+PASS: gdb.python/python.exp: prompt substitution - return "py prompt " + str (someCounter) + " "
+PASS: gdb.python/python.exp: prompt substitution - end
+PASS: gdb.python/python.exp: prompt substitution readline - python
+PASS: gdb.python/python.exp: prompt substitution readline - pCounter = 0
+PASS: gdb.python/python.exp: prompt substitution readline - def program_prompt(current):
+PASS: gdb.python/python.exp: prompt substitution readline - global pCounter
+PASS: gdb.python/python.exp: prompt substitution readline - if (current == ">"):
+PASS: gdb.python/python.exp: prompt substitution readline - pCounter = pCounter + 1
+PASS: gdb.python/python.exp: prompt substitution readline - return "python line " + str (pCounter) + ": "
+PASS: gdb.python/python.exp: prompt substitution readline - return None
+PASS: gdb.python/python.exp: prompt substitution readline - end
+PASS: gdb.python/python.exp: set hook
+PASS: gdb.python/python.exp: set prompt testfake
+PASS: gdb.python/python.exp: show prompt shows guarded prompt
+PASS: gdb.python/python.exp: set prompt blah overriden
+PASS: gdb.python/python.exp: Delete old hook
+PASS: gdb.python/python.exp: set default prompt
+PASS: gdb.python/python.exp: set programming hook
+PASS: gdb.python/python.exp: readline secondary are not substituted
+PASS: gdb.python/python.exp: end programming
+PASS: gdb.python/python.exp: prompt substitution readline - python
+PASS: gdb.python/python.exp: prompt substitution readline - import gdb.command.prompt
+PASS: gdb.python/python.exp: prompt substitution readline - end
+PASS: gdb.python/python.exp: set basic extended prompt
+PASS: gdb.python/python.exp: set extended prompt working directory
+PASS: gdb.python/python.exp: set extended prompt parameter
+PASS: gdb.python/python.exp: Test print-backtrace show setting. Default is message.
+PASS: gdb.python/python.exp: Test print-backtrace set setting
+PASS: gdb.python/python.exp: Test print-backtrace show setting to full.
+PASS: gdb.python/python.exp: Test print-backtrace set setting
+PASS: gdb.python/python.exp: Test print-backtrace show setting to none.
+PASS: gdb.python/python.exp: Test print-backtrace set setting
+PASS: gdb.python/python.exp: prompt substitution readline - python
+PASS: gdb.python/python.exp: prompt substitution readline - pCounter = 0
+PASS: gdb.python/python.exp: prompt substitution readline - def error_prompt(current):
+PASS: gdb.python/python.exp: prompt substitution readline - raise RuntimeError("Python exception called")
+PASS: gdb.python/python.exp: prompt substitution readline - end
+PASS: gdb.python/python.exp: set hook
+PASS: gdb.python/python.exp: set the hook to default
+PASS: gdb.python/python.exp: Test print-backtrace set setting
+PASS: gdb.python/python.exp: set hook
+PASS: gdb.python/python.exp: set the hook to default
+PASS: gdb.python/python.exp: Get line number of func2 call site
+PASS: gdb.python/python.exp: Test find_pc_line at func2 call site
+PASS: gdb.python/python.exp: Step into func2
+PASS: gdb.python/python.exp: Step out of func2
+PASS: gdb.python/python.exp: Test find_pc_line with resume address
+Running ./gdb.python/py-type.exp ...
+PASS: gdb.python/py-type.exp: lang_c: continue to breakpoint: break to inspect struct and array.
+PASS: gdb.python/py-type.exp: lang_c: test_fields: c typedef field list
+PASS: gdb.python/py-type.exp: lang_c: test_fields: print value (st)
+PASS: gdb.python/py-type.exp: lang_c: test_fields: get value (st) from history
+PASS: gdb.python/py-type.exp: lang_c: test_fields: get fields from st.type
+PASS: gdb.python/py-type.exp: lang_c: test_fields: Check number of fields (st)
+PASS: gdb.python/py-type.exp: lang_c: test_fields: Check structure field a name
+PASS: gdb.python/py-type.exp: lang_c: test_fields: Check structure field b name
+PASS: gdb.python/py-type.exp: lang_c: test_fields: Check that dir includes name
+PASS: gdb.python/py-type.exp: lang_c: test_fields: Check number of fields (st.type)
+PASS: gdb.python/py-type.exp: lang_c: test_fields: Check fields lookup by name
+PASS: gdb.python/py-type.exp: lang_c: test_fields: Check fields iteration over values
+PASS: gdb.python/py-type.exp: lang_c: test_fields: Check fields items list
+PASS: gdb.python/py-type.exp: lang_c: test_fields: Check field name exists test
+PASS: gdb.python/py-type.exp: lang_c: test_fields: Check field name nonexists test
+PASS: gdb.python/py-type.exp: lang_c: test_fields: Check conversion to bool
+PASS: gdb.python/py-type.exp: lang_c: test_fields: python print (len (st.type['a'].type))
+PASS: gdb.python/py-type.exp: lang_c: test_fields: python print (st.type['a'].type.has_key ('x'))
+PASS: gdb.python/py-type.exp: lang_c: test_fields: python print (st.type['a'].type.keys ())
+PASS: gdb.python/py-type.exp: lang_c: test_fields: python print (st.type['a'].type['x'])
+PASS: gdb.python/py-type.exp: lang_c: test_fields: python print (not not st.type['a'].type)
+PASS: gdb.python/py-type.exp: lang_c: test_fields: print value (ar)
+PASS: gdb.python/py-type.exp: lang_c: test_fields: get value (ar) from history
+PASS: gdb.python/py-type.exp: lang_c: test_fields: python fields = ar.type.fields()
+PASS: gdb.python/py-type.exp: lang_c: test_fields: Check the number of fields
+PASS: gdb.python/py-type.exp: lang_c: test_fields: Check array field type
+PASS: gdb.python/py-type.exp: lang_c: test_fields: cast to array with one argument
+PASS: gdb.python/py-type.exp: lang_c: test_fields: cast to array with two arguments
+PASS: gdb.python/py-type.exp: lang_c: test_fields: python print (ar[0].type == ar[0].type)
+PASS: gdb.python/py-type.exp: lang_c: test_fields: print value (vec_data_1)
+PASS: gdb.python/py-type.exp: lang_c: test_fields: get value (vec_data_1) from history
+PASS: gdb.python/py-type.exp: lang_c: test_fields: print value (vec_data_2)
+PASS: gdb.python/py-type.exp: lang_c: test_fields: get value (vec_data_2) from history
+PASS: gdb.python/py-type.exp: lang_c: test_fields: set vec1
+PASS: gdb.python/py-type.exp: lang_c: test_fields: cast to vector with one argument
+PASS: gdb.python/py-type.exp: lang_c: test_fields: set vec2
+PASS: gdb.python/py-type.exp: lang_c: test_fields: cast to vector with two arguments
+PASS: gdb.python/py-type.exp: lang_c: test_fields: python print vec1 == vec2
+PASS: gdb.python/py-type.exp: lang_c: test_fields: set vec3
+PASS: gdb.python/py-type.exp: lang_c: test_fields: python print vec1 == vec3
+PASS: gdb.python/py-type.exp: lang_c: test_enum: print value (e)
+PASS: gdb.python/py-type.exp: lang_c: test_enum: get value (e) from history
+PASS: gdb.python/py-type.exp: lang_c: test_enum: extract type fields from e
+PASS: gdb.python/py-type.exp: lang_c: test_enum: Check the number of enum fields
+PASS: gdb.python/py-type.exp: lang_c: test_enum: Check enum field[0] name
+PASS: gdb.python/py-type.exp: lang_c: test_enum: Check enum field[1]name
+PASS: gdb.python/py-type.exp: lang_c: test_enum: Check the number of type fields
+PASS: gdb.python/py-type.exp: lang_c: test_enum: Check enum field lookup by name (v1)
+PASS: gdb.python/py-type.exp: lang_c: test_enum: Check enum field lookup by name (v2)
+PASS: gdb.python/py-type.exp: lang_c: test_enum: Check num fields iteration over values
+PASS: gdb.python/py-type.exp: lang_c: test_enum: Check enum fields items list
+PASS: gdb.python/py-type.exp: lang_cpp: continue to breakpoint: break to inspect struct and array.
+PASS: gdb.python/py-type.exp: lang_cpp: test_fields: c++ typedef field list
+PASS: gdb.python/py-type.exp: lang_cpp: test_fields: print value (c)
+PASS: gdb.python/py-type.exp: lang_cpp: test_fields: get value (c) from history
+PASS: gdb.python/py-type.exp: lang_cpp: test_fields: get fields from c.type
+PASS: gdb.python/py-type.exp: lang_cpp: test_fields: Check number of fields (c)
+PASS: gdb.python/py-type.exp: lang_cpp: test_fields: Check class field c name
+PASS: gdb.python/py-type.exp: lang_cpp: test_fields: Check class field d name
+PASS: gdb.python/py-type.exp: lang_cpp: test_fields: python print (c.type == gdb.parse_and_eval('d').type)
+PASS: gdb.python/py-type.exp: lang_cpp: test_fields: python print (c.type == gdb.parse_and_eval('d').type.fields()[0].type)
+PASS: gdb.python/py-type.exp: lang_cpp: test_fields: print value (st)
+PASS: gdb.python/py-type.exp: lang_cpp: test_fields: get value (st) from history
+PASS: gdb.python/py-type.exp: lang_cpp: test_fields: get fields from st.type
+PASS: gdb.python/py-type.exp: lang_cpp: test_fields: Check number of fields (st)
+PASS: gdb.python/py-type.exp: lang_cpp: test_fields: Check structure field a name
+PASS: gdb.python/py-type.exp: lang_cpp: test_fields: Check structure field b name
+PASS: gdb.python/py-type.exp: lang_cpp: test_fields: Check that dir includes name
+PASS: gdb.python/py-type.exp: lang_cpp: test_fields: Check number of fields (st.type)
+PASS: gdb.python/py-type.exp: lang_cpp: test_fields: Check fields lookup by name
+PASS: gdb.python/py-type.exp: lang_cpp: test_fields: Check fields iteration over values
+PASS: gdb.python/py-type.exp: lang_cpp: test_fields: Check fields items list
+PASS: gdb.python/py-type.exp: lang_cpp: test_fields: Check field name exists test
+PASS: gdb.python/py-type.exp: lang_cpp: test_fields: Check field name nonexists test
+PASS: gdb.python/py-type.exp: lang_cpp: test_fields: Check conversion to bool
+PASS: gdb.python/py-type.exp: lang_cpp: test_fields: python print (len (st.type['a'].type))
+PASS: gdb.python/py-type.exp: lang_cpp: test_fields: python print (st.type['a'].type.has_key ('x'))
+PASS: gdb.python/py-type.exp: lang_cpp: test_fields: python print (st.type['a'].type.keys ())
+PASS: gdb.python/py-type.exp: lang_cpp: test_fields: python print (st.type['a'].type['x'])
+PASS: gdb.python/py-type.exp: lang_cpp: test_fields: python print (not not st.type['a'].type)
+PASS: gdb.python/py-type.exp: lang_cpp: test_fields: print value (ar)
+PASS: gdb.python/py-type.exp: lang_cpp: test_fields: get value (ar) from history
+PASS: gdb.python/py-type.exp: lang_cpp: test_fields: python fields = ar.type.fields()
+PASS: gdb.python/py-type.exp: lang_cpp: test_fields: Check the number of fields
+PASS: gdb.python/py-type.exp: lang_cpp: test_fields: Check array field type
+PASS: gdb.python/py-type.exp: lang_cpp: test_fields: cast to array with one argument
+PASS: gdb.python/py-type.exp: lang_cpp: test_fields: cast to array with two arguments
+PASS: gdb.python/py-type.exp: lang_cpp: test_fields: python print (ar[0].type == ar[0].type)
+PASS: gdb.python/py-type.exp: lang_cpp: test_fields: print value (vec_data_1)
+PASS: gdb.python/py-type.exp: lang_cpp: test_fields: get value (vec_data_1) from history
+PASS: gdb.python/py-type.exp: lang_cpp: test_fields: print value (vec_data_2)
+PASS: gdb.python/py-type.exp: lang_cpp: test_fields: get value (vec_data_2) from history
+PASS: gdb.python/py-type.exp: lang_cpp: test_fields: set vec1
+PASS: gdb.python/py-type.exp: lang_cpp: test_fields: cast to vector with one argument
+PASS: gdb.python/py-type.exp: lang_cpp: test_fields: set vec2
+PASS: gdb.python/py-type.exp: lang_cpp: test_fields: cast to vector with two arguments
+PASS: gdb.python/py-type.exp: lang_cpp: test_fields: python print vec1 == vec2
+PASS: gdb.python/py-type.exp: lang_cpp: test_fields: set vec3
+PASS: gdb.python/py-type.exp: lang_cpp: test_fields: python print vec1 == vec3
+PASS: gdb.python/py-type.exp: lang_cpp: test_base_class: print value (d)
+PASS: gdb.python/py-type.exp: lang_cpp: test_base_class: get value (d) from history
+PASS: gdb.python/py-type.exp: lang_cpp: test_base_class: extract type fields from d
+PASS: gdb.python/py-type.exp: lang_cpp: test_base_class: Check the number of fields
+PASS: gdb.python/py-type.exp: lang_cpp: test_base_class: Check base class (fields[0])
+PASS: gdb.python/py-type.exp: lang_cpp: test_base_class: Check base class (fields[1])
+PASS: gdb.python/py-type.exp: lang_cpp: test_range: on ranged value: print value (ar)
+PASS: gdb.python/py-type.exp: lang_cpp: test_range: on ranged value: get value (ar) from history
+PASS: gdb.python/py-type.exp: lang_cpp: test_range: on ranged value: Check correct tuple length
+PASS: gdb.python/py-type.exp: lang_cpp: test_range: on ranged value: Check range low bound
+PASS: gdb.python/py-type.exp: lang_cpp: test_range: on ranged value: Check range high bound
+PASS: gdb.python/py-type.exp: lang_cpp: test_range: on ranged type: print value (ar)
+PASS: gdb.python/py-type.exp: lang_cpp: test_range: on ranged type: get value (ar) from history
+PASS: gdb.python/py-type.exp: lang_cpp: test_range: on ranged type: get fields
+PASS: gdb.python/py-type.exp: lang_cpp: test_range: on ranged type: Check range low bound
+PASS: gdb.python/py-type.exp: lang_cpp: test_range: on ranged type: Check range high bound
+PASS: gdb.python/py-type.exp: lang_cpp: test_range: on unranged value: print value (st)
+PASS: gdb.python/py-type.exp: lang_cpp: test_range: on unranged value: get value (st) from history
+PASS: gdb.python/py-type.exp: lang_cpp: test_range: on unranged value: Check range for non ranged type.
+PASS: gdb.python/py-type.exp: lang_cpp: get type of temvar
+PASS: gdb.python/py-type.exp: lang_cpp: python print (ttype.template_argument(0))
+PASS: gdb.python/py-type.exp: lang_cpp: python print (isinstance(ttype.template_argument(0), gdb.Type))
+PASS: gdb.python/py-type.exp: lang_cpp: python print (ttype.template_argument(1))
+PASS: gdb.python/py-type.exp: lang_cpp: python print (isinstance(ttype.template_argument(1), gdb.Value))
+PASS: gdb.python/py-type.exp: lang_cpp: python print (ttype.template_argument(2))
+PASS: gdb.python/py-type.exp: lang_cpp: test_enum: print value (e)
+PASS: gdb.python/py-type.exp: lang_cpp: test_enum: get value (e) from history
+PASS: gdb.python/py-type.exp: lang_cpp: test_enum: extract type fields from e
+PASS: gdb.python/py-type.exp: lang_cpp: test_enum: Check the number of enum fields
+PASS: gdb.python/py-type.exp: lang_cpp: test_enum: Check enum field[0] name
+PASS: gdb.python/py-type.exp: lang_cpp: test_enum: Check enum field[1]name
+PASS: gdb.python/py-type.exp: lang_cpp: test_enum: Check the number of type fields
+PASS: gdb.python/py-type.exp: lang_cpp: test_enum: Check enum field lookup by name (v1)
+PASS: gdb.python/py-type.exp: lang_cpp: test_enum: Check enum field lookup by name (v2)
+PASS: gdb.python/py-type.exp: lang_cpp: test_enum: Check num fields iteration over values
+PASS: gdb.python/py-type.exp: lang_cpp: test_enum: Check enum fields items list
+Running ./gdb.python/py-typeprint.exp ...
+PASS: gdb.python/py-typeprint.exp: python exec (open ('py-typeprint.py').read ())
+PASS: gdb.python/py-typeprint.exp: basic test
+PASS: gdb.python/py-typeprint.exp: raw test
+PASS: gdb.python/py-typeprint.exp: disable type-printer string
+PASS: gdb.python/py-typeprint.exp: whatis with disabled printer
+PASS: gdb.python/py-typeprint.exp: info type-printers
+PASS: gdb.python/py-typeprint.exp: enable type-printer string
+PASS: gdb.python/py-typeprint.exp: whatis with enabled printer
+PASS: gdb.python/py-typeprint.exp: whatis s
+Running ./gdb.python/py-value-cc.exp ...
+PASS: gdb.python/py-value-cc.exp: continue to breakpoint: Break here
+PASS: gdb.python/py-value-cc.exp: python print (str(gdb.parse_and_eval("a").type))
+PASS: gdb.python/py-value-cc.exp: python print (str(gdb.parse_and_eval("a").referenced_value().type))
+PASS: gdb.python/py-value-cc.exp: python print (str(gdb.parse_and_eval("int_ref").type))
+PASS: gdb.python/py-value-cc.exp: python print (str(gdb.parse_and_eval("int_ref").referenced_value().type))
+PASS: gdb.python/py-value-cc.exp: python print (str(gdb.parse_and_eval("int_ref").referenced_value()))
+PASS: gdb.python/py-value-cc.exp: python print (str(gdb.parse_and_eval("int_ptr_ref").dereference().type))
+PASS: gdb.python/py-value-cc.exp: python print (str(gdb.parse_and_eval("int_ptr_ref").referenced_value().type))
+PASS: gdb.python/py-value-cc.exp: python print (str(gdb.parse_and_eval("int_ptr_ref").referenced_value().dereference()))
+PASS: gdb.python/py-value-cc.exp: python print (str(gdb.parse_and_eval("int_ptr_ref").referenced_value().referenced_value()))
+Running ./gdb.python/py-value.exp ...
+PASS: gdb.python/py-value.exp: create boolean value
+PASS: gdb.python/py-value.exp: create integer value
+PASS: gdb.python/py-value.exp: create long value
+PASS: gdb.python/py-value.exp: create double value
+PASS: gdb.python/py-value.exp: create 8-bit string value
+PASS: gdb.python/py-value.exp: print 8-bit string
+PASS: gdb.python/py-value.exp: verify type of 8-bit string
+PASS: gdb.python/py-value.exp: create unicode value
+PASS: gdb.python/py-value.exp: print Unicode string
+PASS: gdb.python/py-value.exp: verify type of unicode string
+PASS: gdb.python/py-value.exp: Test address attribute in non-addressable value
+PASS: gdb.python/py-value.exp: add two integer values
+PASS: gdb.python/py-value.exp: verify type of integer add result
+PASS: gdb.python/py-value.exp: add two double values
+PASS: gdb.python/py-value.exp: subtract two integer values
+PASS: gdb.python/py-value.exp: subtract two double values
+PASS: gdb.python/py-value.exp: multiply two integer values
+PASS: gdb.python/py-value.exp: multiply two double values
+PASS: gdb.python/py-value.exp: divide two integer values
+PASS: gdb.python/py-value.exp: divide two double values
+PASS: gdb.python/py-value.exp: take remainder of two integer values
+PASS: gdb.python/py-value.exp: integer value raised to the power of another integer value
+PASS: gdb.python/py-value.exp: double value raised to the power of integer value
+PASS: gdb.python/py-value.exp: negated integer value
+PASS: gdb.python/py-value.exp: positive integer value
+PASS: gdb.python/py-value.exp: negated double value
+PASS: gdb.python/py-value.exp: positive double value
+PASS: gdb.python/py-value.exp: absolute of integer value
+PASS: gdb.python/py-value.exp: absolute of double value
+PASS: gdb.python/py-value.exp: subtract integer value from python integer
+PASS: gdb.python/py-value.exp: verify type of mixed integer subtraction result
+PASS: gdb.python/py-value.exp: add double value with python float
+PASS: gdb.python/py-value.exp: subtract python integer from integer value
+PASS: gdb.python/py-value.exp: add python float with double value
+PASS: gdb.python/py-value.exp: print evalue
+PASS: gdb.python/py-value.exp: python evalue = gdb.history (0)
+PASS: gdb.python/py-value.exp: python print (int (evalue))
+PASS: gdb.python/py-value.exp: add pointer value with python integer
+PASS: gdb.python/py-value.exp: subtract python integer from pointer value
+PASS: gdb.python/py-value.exp: subtract two pointer values
+PASS: gdb.python/py-value.exp: catch error in python type conversion
+PASS: gdb.python/py-value.exp: catch throw of GDB error
+PASS: gdb.python/py-value.exp: define function to test booleans - python
+PASS: gdb.python/py-value.exp: define function to test booleans - def test_bool (val):
+PASS: gdb.python/py-value.exp: define function to test booleans - if val:
+PASS: gdb.python/py-value.exp: define function to test booleans - print ('yay')
+PASS: gdb.python/py-value.exp: define function to test booleans - else:
+PASS: gdb.python/py-value.exp: define function to test booleans - print ('nay')
+PASS: gdb.python/py-value.exp: define function to test booleans - end
+PASS: gdb.python/py-value.exp: check evaluation of true boolean value in expression
+PASS: gdb.python/py-value.exp: check evaluation of false boolean value in expression
+PASS: gdb.python/py-value.exp: check evaluation of true integer value in expression
+PASS: gdb.python/py-value.exp: check evaluation of false integer value in expression
+PASS: gdb.python/py-value.exp: check evaluation of true integer value in expression
+PASS: gdb.python/py-value.exp: check evaluation of false integer value in expression
+PASS: gdb.python/py-value.exp: less than, equal
+PASS: gdb.python/py-value.exp: less than, less
+PASS: gdb.python/py-value.exp: less than, greater
+PASS: gdb.python/py-value.exp: less than, None
+PASS: gdb.python/py-value.exp: less or equal, equal
+PASS: gdb.python/py-value.exp: less or equal, less
+PASS: gdb.python/py-value.exp: less or equal, greater
+PASS: gdb.python/py-value.exp: less or equal, None
+PASS: gdb.python/py-value.exp: equality of gdb.Values
+PASS: gdb.python/py-value.exp: inequality of gdb.Values
+PASS: gdb.python/py-value.exp: equality of gdb.Value with Python value
+PASS: gdb.python/py-value.exp: inequality of gdb.Value with Python value
+PASS: gdb.python/py-value.exp: inequality of gdb.Value with None
+PASS: gdb.python/py-value.exp: inequality, false
+PASS: gdb.python/py-value.exp: inequality, true
+PASS: gdb.python/py-value.exp: inequality, None
+PASS: gdb.python/py-value.exp: greater than, equal
+PASS: gdb.python/py-value.exp: greater than, less
+PASS: gdb.python/py-value.exp: greater than, greater
+PASS: gdb.python/py-value.exp: greater than, None
+PASS: gdb.python/py-value.exp: greater or equal, equal
+PASS: gdb.python/py-value.exp: greater or equal, less
+PASS: gdb.python/py-value.exp: greater or equal, greater
+PASS: gdb.python/py-value.exp: greater or equal, None
+PASS: gdb.python/py-value.exp: py-value in file.filename
+PASS: gdb.python/py-value.exp: python print (gdb.objfiles()[0].pretty_printers)
+PASS: gdb.python/py-value.exp: python gdb.objfiles()[0].pretty_printers = 0
+PASS: gdb.python/py-value.exp: parse_and_eval constant test
+PASS: gdb.python/py-value.exp: parse_and_eval simple expression test
+PASS: gdb.python/py-value.exp: parse_and_eval type test
+PASS: gdb.python/py-value.exp: Simple Python value dictionary - python
+PASS: gdb.python/py-value.exp: Simple Python value dictionary - one = gdb.Value(1)
+PASS: gdb.python/py-value.exp: Simple Python value dictionary - two = gdb.Value(2)
+PASS: gdb.python/py-value.exp: Simple Python value dictionary - three = gdb.Value(3)
+PASS: gdb.python/py-value.exp: Simple Python value dictionary - vdict = {one:"one str",two:"two str",three:"three str"}
+PASS: gdb.python/py-value.exp: Simple Python value dictionary - end
+PASS: gdb.python/py-value.exp: Test dictionary hash
+PASS: gdb.python/py-value.exp: Test dictionary hash
+PASS: gdb.python/py-value.exp: Test dictionary hash
+PASS: gdb.python/py-value.exp: Test inbuilt hash
+PASS: gdb.python/py-value.exp: continue to breakpoint: break to inspect struct and union
+PASS: gdb.python/py-value.exp: get value from history
+PASS: gdb.python/py-value.exp: access element inside struct using 8-bit string name
+PASS: gdb.python/py-value.exp: access element inside struct using unicode name
+PASS: gdb.python/py-value.exp: dereference value
+PASS: gdb.python/py-value.exp: Test is_optimized_out attribute
+PASS: gdb.python/py-value.exp: Test address attribute
+PASS: gdb.python/py-value.exp: parse_and_eval with memory error
+PASS: gdb.python/py-value.exp: python inval = gdb.parse_and_eval('*(int*)0')
+PASS: gdb.python/py-value.exp: python print (inval.is_lazy)
+PASS: gdb.python/py-value.exp: memory error and lazy values
+PASS: gdb.python/py-value.exp: memory error and lazy values
+PASS: gdb.python/py-value.exp: python argc_lazy = gdb.parse_and_eval('argc')
+PASS: gdb.python/py-value.exp: python argc_notlazy = gdb.parse_and_eval('argc')
+PASS: gdb.python/py-value.exp: python argc_notlazy.fetch_lazy()
+PASS: gdb.python/py-value.exp: python print (argc_lazy.is_lazy)
+PASS: gdb.python/py-value.exp: python print (argc_notlazy.is_lazy)
+PASS: gdb.python/py-value.exp: sanity check argc
+PASS: gdb.python/py-value.exp: python print (argc_lazy.is_lazy)
+PASS: gdb.python/py-value.exp: set argc=2
+PASS: gdb.python/py-value.exp: python print (argc_notlazy)
+PASS: gdb.python/py-value.exp: python print (argc_lazy)
+PASS: gdb.python/py-value.exp: python print (argc_lazy.is_lazy)
+PASS: gdb.python/py-value.exp: print st
+PASS: gdb.python/py-value.exp: get value from history
+PASS: gdb.python/py-value.exp: Test string with no length
+PASS: gdb.python/py-value.exp: Test string (length = -1) is all of the string
+PASS: gdb.python/py-value.exp: python print (st.string (length = 6))
+PASS: gdb.python/py-value.exp: Test string (length = 0) is empty
+PASS: gdb.python/py-value.exp: Test length is 0
+PASS: gdb.python/py-value.exp: print nullst
+PASS: gdb.python/py-value.exp: get value from history
+PASS: gdb.python/py-value.exp: Test string to first null
+PASS: gdb.python/py-value.exp: get string beyond null
+PASS: gdb.python/py-value.exp: python print (repr(nullst))
+PASS: gdb.python/py-value.exp: p/x fp1
+PASS: gdb.python/py-value.exp: get value from history
+PASS: gdb.python/py-value.exp: python fp1 = fp1.dereference()
+PASS: gdb.python/py-value.exp: python result = fp1()
+PASS: gdb.python/py-value.exp: python print (result)
+PASS: gdb.python/py-value.exp: p/x fp2
+PASS: gdb.python/py-value.exp: get value from history
+PASS: gdb.python/py-value.exp: python fp2 = fp2.dereference()
+PASS: gdb.python/py-value.exp: python result2 = fp2(10,20)
+PASS: gdb.python/py-value.exp: python print (result2)
+PASS: gdb.python/py-value.exp: p i
+PASS: gdb.python/py-value.exp: get value from history
+PASS: gdb.python/py-value.exp: python result3 = i()
+PASS: gdb.python/py-value.exp: p/x fp2
+PASS: gdb.python/py-value.exp: get value from history
+PASS: gdb.python/py-value.exp: python fp3 = fp3.dereference()
+PASS: gdb.python/py-value.exp: python result2 = fp3(10)
+PASS: gdb.python/py-value.exp: print sptr
+PASS: gdb.python/py-value.exp: Get value from history
+PASS: gdb.python/py-value.exp: Aquire lazy string
+PASS: gdb.python/py-value.exp: Test type name equality
+PASS: gdb.python/py-value.exp: Test type name equality
+PASS: gdb.python/py-value.exp: print sn
+PASS: gdb.python/py-value.exp: Get value from history
+PASS: gdb.python/py-value.exp: Test lazy string
+PASS: gdb.python/py-value.exp: Succesfully create a lazy string
+PASS: gdb.python/py-value.exp: Test lazy string length
+PASS: gdb.python/py-value.exp: Test lazy string address
+PASS: gdb.python/py-value.exp: create PTR type
+PASS: gdb.python/py-value.exp: kill the inferior
+PASS: gdb.python/py-value.exp: Discard the symbols
+PASS: gdb.python/py-value.exp: cast arg0 to PTR
+PASS: gdb.python/py-value.exp: delete PTR type
+PASS: gdb.python/py-value.exp: print value's type
+PASS: gdb.python/py-value.exp: continue to breakpoint: break to inspect struct and union
+PASS: gdb.python/py-value.exp: Create a value for subscript test
+PASS: gdb.python/py-value.exp: Create a value for subscript test
+PASS: gdb.python/py-value.exp: Baseline print of a Python value
+PASS: gdb.python/py-value.exp: Attempt to access an integer with a subscript
+PASS: gdb.python/py-value.exp: Baseline print of a Python value
+PASS: gdb.python/py-value.exp: Attempt to access a string with a subscript
+PASS: gdb.python/py-value.exp: Build pointer to array
+PASS: gdb.python/py-value.exp:
+PASS: gdb.python/py-value.exp: Access array via pointer with int subscript
+PASS: gdb.python/py-value.exp: Access array via pointer with value subscript
+PASS: gdb.python/py-value.exp: Attempt to access an integer with a subscript
+PASS: gdb.python/py-value.exp: Build array
+PASS: gdb.python/py-value.exp:
+PASS: gdb.python/py-value.exp: Test multiple subscript
+PASS: gdb.python/py-value.exp: continue to breakpoint: break to inspect pointer by reference
+PASS: gdb.python/py-value.exp: Obtain address
+PASS: gdb.python/py-value.exp: Obtains value from GDB
+PASS: gdb.python/py-value.exp: Check pointer passed as reference
+PASS: gdb.python/py-value.exp: python print (bool(gdb.parse_and_eval('base').dynamic_cast(gdb.lookup_type('Derived').pointer())))
+PASS: gdb.python/py-value.exp: python print (gdb.parse_and_eval('base').dynamic_type)
+PASS: gdb.python/py-value.exp: python print (gdb.parse_and_eval('5').dynamic_type)
+PASS: gdb.python/py-value.exp: continue to breakpoint: break to inspect struct and union
+PASS: gdb.python/py-value.exp: Create a value for subscript test
+PASS: gdb.python/py-value.exp: Create a value for subscript test
+PASS: gdb.python/py-value.exp: Baseline print of a Python value
+PASS: gdb.python/py-value.exp: Attempt to access an integer with a subscript
+PASS: gdb.python/py-value.exp: Baseline print of a Python value
+PASS: gdb.python/py-value.exp: Attempt to access a string with a subscript
+PASS: gdb.python/py-value.exp: Build pointer to array
+PASS: gdb.python/py-value.exp:
+PASS: gdb.python/py-value.exp: Access array via pointer with int subscript
+PASS: gdb.python/py-value.exp: Access array via pointer with value subscript
+PASS: gdb.python/py-value.exp: Attempt to access an integer with a subscript
+PASS: gdb.python/py-value.exp: Build array
+PASS: gdb.python/py-value.exp:
+PASS: gdb.python/py-value.exp: Test multiple subscript
+Running ./gdb.reverse/amd64-tailcall-reverse.exp ...
+Running ./gdb.reverse/break-precsave.exp ...
+Running ./gdb.reverse/break-reverse.exp ...
+Running ./gdb.reverse/consecutive-precsave.exp ...
+Running ./gdb.reverse/consecutive-reverse.exp ...
+Running ./gdb.reverse/finish-precsave.exp ...
+Running ./gdb.reverse/finish-reverse-bkpt.exp ...
+Running ./gdb.reverse/finish-reverse.exp ...
+Running ./gdb.reverse/i386-precsave.exp ...
+Running ./gdb.reverse/i386-reverse.exp ...
+Running ./gdb.reverse/i386-sse-reverse.exp ...
+Running ./gdb.reverse/i387-env-reverse.exp ...
+Running ./gdb.reverse/i387-stack-reverse.exp ...
+Running ./gdb.reverse/machinestate.exp ...
+Running ./gdb.reverse/machinestate-precsave.exp ...
+Running ./gdb.reverse/next-reverse-bkpt-over-sr.exp ...
+Running ./gdb.reverse/sigall-precsave.exp ...
+Running ./gdb.reverse/sigall-reverse.exp ...
+Running ./gdb.reverse/singlejmp-reverse.exp ...
+Running ./gdb.reverse/solib-precsave.exp ...
+Running ./gdb.reverse/solib-reverse.exp ...
+Running ./gdb.reverse/step-precsave.exp ...
+Running ./gdb.reverse/step-reverse.exp ...
+Running ./gdb.reverse/until-precsave.exp ...
+Running ./gdb.reverse/until-reverse.exp ...
+Running ./gdb.reverse/watch-precsave.exp ...
+Running ./gdb.reverse/watch-reverse.exp ...
+Running ./gdb.server/ext-attach.exp ...
+Running ./gdb.server/ext-run.exp ...
+PASS: gdb.server/ext-run.exp: disconnect
+PASS: gdb.server/ext-run.exp: set remote exec-file
+PASS: gdb.server/ext-run.exp: continue to main
+PASS: gdb.server/ext-run.exp: get process list
+PASS: gdb.server/ext-run.exp: kill
+PASS: gdb.server/ext-run.exp: load new file without any gdbserver inferior
+PASS: gdb.server/ext-run.exp: monitor exit
+Running ./gdb.server/file-transfer.exp ...
+PASS: gdb.server/file-transfer.exp: disconnect
+FAIL: gdb.server/file-transfer.exp: put binary file
+FAIL: gdb.server/file-transfer.exp: get binary file
+FAIL: gdb.server/file-transfer.exp: compare binary file
+FAIL: gdb.server/file-transfer.exp: deleted binary file
+FAIL: gdb.server/file-transfer.exp: put text file
+FAIL: gdb.server/file-transfer.exp: get text file
+FAIL: gdb.server/file-transfer.exp: compare text file
+FAIL: gdb.server/file-transfer.exp: deleted text file
+Running ./gdb.server/no-thread-db.exp ...
+PASS: gdb.server/no-thread-db.exp: successfully compiled posix threads test case
+PASS: gdb.server/no-thread-db.exp: disconnect
+PASS: gdb.server/no-thread-db.exp: libthread-db is now unresolvable
+PASS: gdb.server/no-thread-db.exp: continue to breakpoint: after tls assignment
+PASS: gdb.server/no-thread-db.exp: print foo
+Running ./gdb.server/server-exec-info.exp ...
+PASS: gdb.server/server-exec-info.exp: file
+PASS: gdb.server/server-exec-info.exp: set sysroot remote:
+PASS: gdb.server/server-exec-info.exp: info files
+Running ./gdb.server/server-kill.exp ...
+PASS: gdb.server/server-kill.exp: disconnect
+FAIL: gdb.server/server-kill.exp: tstatus
+Running ./gdb.server/server-mon.exp ...
+PASS: gdb.server/server-mon.exp: disconnect
+PASS: gdb.server/server-mon.exp: monitor help
+PASS: gdb.server/server-mon.exp: monitor
+PASS: gdb.server/server-mon.exp: monitor set debug 1
+PASS: gdb.server/server-mon.exp: monitor set debug 0
+PASS: gdb.server/server-mon.exp: monitor set remote-debug 1
+PASS: gdb.server/server-mon.exp: monitor set remote-debug 0
+Running ./gdb.server/server-run.exp ...
+PASS: gdb.server/server-run.exp: disconnect
+PASS: gdb.server/server-run.exp: loaded dynamic linker
+PASS: gdb.server/server-run.exp: continue to main
+Running ./gdb.server/solib-list.exp ...
+Running ./gdb.stabs/exclfwd.exp ...
+PASS: gdb.stabs/exclfwd.exp: ptype v1
+PASS: gdb.stabs/exclfwd.exp: ptype v2
+PASS: gdb.stabs/exclfwd.exp: ptype v3
+Running ./gdb.stabs/gdb11479.exp ...
+PASS: gdb.stabs/gdb11479.exp: Set breakpoints forced_stabs
+PASS: gdb.stabs/gdb11479.exp: Stop at first breakpoint forced_stabs
+PASS: gdb.stabs/gdb11479.exp: Inspect t in test2 forced_stabs
+PASS: gdb.stabs/gdb11479.exp: sizeof (e) in test2 forced_stabs
+PASS: gdb.stabs/gdb11479.exp: Stop at first breakpoint forced_stabs
+PASS: gdb.stabs/gdb11479.exp: Inspect t in test forced_stabs
+PASS: gdb.stabs/gdb11479.exp: sizeof (e) in test forced_stabs
+PASS: gdb.stabs/gdb11479.exp: Set breakpoints natural_debug_format
+PASS: gdb.stabs/gdb11479.exp: Stop at first breakpoint natural_debug_format
+PASS: gdb.stabs/gdb11479.exp: Inspect t in test2 natural_debug_format
+PASS: gdb.stabs/gdb11479.exp: sizeof (e) in test2 natural_debug_format
+PASS: gdb.stabs/gdb11479.exp: Stop at first breakpoint natural_debug_format
+PASS: gdb.stabs/gdb11479.exp: Inspect t in test natural_debug_format
+PASS: gdb.stabs/gdb11479.exp: sizeof (e) in test natural_debug_format
+Running ./gdb.stabs/weird.exp ...
+PASS: gdb.stabs/weird.exp: weirdx.o read without error
+PASS: gdb.stabs/weird.exp: stabs found
+PASS: gdb.stabs/weird.exp: variable var0 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (var0)
+PASS: gdb.stabs/weird.exp: variable var1 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (var1)
+PASS: gdb.stabs/weird.exp: variable var2 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (var2)
+PASS: gdb.stabs/weird.exp: variable var3 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (var3)
+PASS: gdb.stabs/weird.exp: variable attr32 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr32)
+PASS: gdb.stabs/weird.exp: variable attr33 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr33)
+PASS: gdb.stabs/weird.exp: variable attr35 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr35)
+PASS: gdb.stabs/weird.exp: variable attr36 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr36)
+PASS: gdb.stabs/weird.exp: variable attr37 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr37)
+PASS: gdb.stabs/weird.exp: variable attr38 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr38)
+PASS: gdb.stabs/weird.exp: variable attr39 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr39)
+PASS: gdb.stabs/weird.exp: variable attr41 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr41)
+PASS: gdb.stabs/weird.exp: variable attr42 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr42)
+PASS: gdb.stabs/weird.exp: variable attr43 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr43)
+PASS: gdb.stabs/weird.exp: variable attr44 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr44)
+PASS: gdb.stabs/weird.exp: variable attr46 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr46)
+PASS: gdb.stabs/weird.exp: variable attr47 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr47)
+PASS: gdb.stabs/weird.exp: variable attr58 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr58)
+PASS: gdb.stabs/weird.exp: variable attr59 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr59)
+PASS: gdb.stabs/weird.exp: variable attr60 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr60)
+PASS: gdb.stabs/weird.exp: variable attr61 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr61)
+PASS: gdb.stabs/weird.exp: variable attr62 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr62)
+PASS: gdb.stabs/weird.exp: variable attr63 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr63)
+PASS: gdb.stabs/weird.exp: variable attr64 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr64)
+PASS: gdb.stabs/weird.exp: variable attr65 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr65)
+PASS: gdb.stabs/weird.exp: variable attr66 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr66)
+PASS: gdb.stabs/weird.exp: variable attr67 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr67)
+PASS: gdb.stabs/weird.exp: variable attr68 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr68)
+PASS: gdb.stabs/weird.exp: variable attr69 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr69)
+PASS: gdb.stabs/weird.exp: variable attr70 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr70)
+PASS: gdb.stabs/weird.exp: variable attr71 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr71)
+PASS: gdb.stabs/weird.exp: variable attr72 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr72)
+PASS: gdb.stabs/weird.exp: variable attr73 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr73)
+PASS: gdb.stabs/weird.exp: variable attr74 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr74)
+PASS: gdb.stabs/weird.exp: variable attr75 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr75)
+PASS: gdb.stabs/weird.exp: variable attr76 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr76)
+PASS: gdb.stabs/weird.exp: variable attr77 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr77)
+PASS: gdb.stabs/weird.exp: variable attr78 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr78)
+PASS: gdb.stabs/weird.exp: variable attr79 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr79)
+PASS: gdb.stabs/weird.exp: variable attr80 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr80)
+PASS: gdb.stabs/weird.exp: variable attr81 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr81)
+PASS: gdb.stabs/weird.exp: variable attr82 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr82)
+PASS: gdb.stabs/weird.exp: variable attr83 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr83)
+PASS: gdb.stabs/weird.exp: variable attr84 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr84)
+PASS: gdb.stabs/weird.exp: variable attr85 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr85)
+PASS: gdb.stabs/weird.exp: variable attr86 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr86)
+PASS: gdb.stabs/weird.exp: variable attr87 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr87)
+PASS: gdb.stabs/weird.exp: variable attr88 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr88)
+PASS: gdb.stabs/weird.exp: variable attr89 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr89)
+PASS: gdb.stabs/weird.exp: variable attr90 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr90)
+PASS: gdb.stabs/weird.exp: variable attr91 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr91)
+PASS: gdb.stabs/weird.exp: variable attr92 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr92)
+PASS: gdb.stabs/weird.exp: variable attr93 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr93)
+PASS: gdb.stabs/weird.exp: variable attr94 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr94)
+PASS: gdb.stabs/weird.exp: variable attr95 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr95)
+PASS: gdb.stabs/weird.exp: variable attr96 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr96)
+PASS: gdb.stabs/weird.exp: variable attr97 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr97)
+PASS: gdb.stabs/weird.exp: variable attr98 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr98)
+PASS: gdb.stabs/weird.exp: variable attr99 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr99)
+PASS: gdb.stabs/weird.exp: variable attr100 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr100)
+PASS: gdb.stabs/weird.exp: variable attr101 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr101)
+PASS: gdb.stabs/weird.exp: variable attr102 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr102)
+PASS: gdb.stabs/weird.exp: variable attr103 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr103)
+PASS: gdb.stabs/weird.exp: variable attr104 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr104)
+PASS: gdb.stabs/weird.exp: variable attr105 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr105)
+PASS: gdb.stabs/weird.exp: variable attr106 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr106)
+PASS: gdb.stabs/weird.exp: variable attr107 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr107)
+PASS: gdb.stabs/weird.exp: variable attr108 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr108)
+PASS: gdb.stabs/weird.exp: variable attr109 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr109)
+PASS: gdb.stabs/weird.exp: variable attr110 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr110)
+PASS: gdb.stabs/weird.exp: variable attr111 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr111)
+PASS: gdb.stabs/weird.exp: variable attr112 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr112)
+PASS: gdb.stabs/weird.exp: variable attr113 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr113)
+PASS: gdb.stabs/weird.exp: variable attr114 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr114)
+PASS: gdb.stabs/weird.exp: variable attr115 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr115)
+PASS: gdb.stabs/weird.exp: variable attr116 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr116)
+PASS: gdb.stabs/weird.exp: variable attr117 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr117)
+PASS: gdb.stabs/weird.exp: variable attr118 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr118)
+PASS: gdb.stabs/weird.exp: variable attr119 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr119)
+PASS: gdb.stabs/weird.exp: variable attr120 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr120)
+PASS: gdb.stabs/weird.exp: variable attr121 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr121)
+PASS: gdb.stabs/weird.exp: variable attr122 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr122)
+PASS: gdb.stabs/weird.exp: variable attr123 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr123)
+PASS: gdb.stabs/weird.exp: variable attr124 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr124)
+PASS: gdb.stabs/weird.exp: variable attr125 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr125)
+PASS: gdb.stabs/weird.exp: variable attr126 printed properly
+PASS: gdb.stabs/weird.exp: print sizeof (attr126)
+PASS: gdb.stabs/weird.exp: 'e' constant on non-enum type
+PASS: gdb.stabs/weird.exp: whatis const69
+PASS: gdb.stabs/weird.exp: 'e' constant with embedded type
+PASS: gdb.stabs/weird.exp: char constant
+PASS: gdb.stabs/weird.exp: String constant 1
+PASS: gdb.stabs/weird.exp: String constant 2
+PASS: gdb.stabs/weird.exp: String constant 3
+PASS: gdb.stabs/weird.exp: String constant 4
+PASS: gdb.stabs/weird.exp: p bad_neg0
+PASS: gdb.stabs/weird.exp: ptype on inttype
+PASS: gdb.stabs/weird.exp: unrecognized floating point type
+PASS: gdb.stabs/weird.exp: print very big integer
+PASS: gdb.stabs/weird.exp: whatis consth
+PASS: gdb.stabs/weird.exp: whatis consth2
+XFAIL: gdb.stabs/weird.exp: print struct constant
+PASS: gdb.stabs/weird.exp: print bad_type0
+PASS: gdb.stabs/weird.exp: print bad_type1
+XFAIL: gdb.stabs/weird.exp: array0 with strange index
+XFAIL: gdb.stabs/weird.exp: array1 with strange index
+PASS: gdb.stabs/weird.exp: whatis one_var (known failure in gdb 4.10)
+PASS: gdb.stabs/weird.exp: whatis one_var test 2
+PASS: gdb.stabs/weird.exp: whatis two_var (known failure in gdb 4.10)
+PASS: gdb.stabs/weird.exp: whatis two_var test 2
+XFAIL: gdb.stabs/weird.exp: whatis pointer_to_int_var
+XFAIL: gdb.stabs/weird.exp: whatis intp_var
+PASS: gdb.stabs/weird.exp: p common0var0
+XFAIL: gdb.stabs/weird.exp: p common0var1
+XFAIL: gdb.stabs/weird.exp: p common0var2
+Running ./gdb.threads/attach-into-signal.exp ...
+Running ./gdb.threads/attach-stopped.exp ...
+Running ./gdb.threads/bp_in_thread.exp ...
+PASS: gdb.threads/bp_in_thread.exp: successfully compiled posix threads test case
+PASS: gdb.threads/bp_in_thread.exp: breakpoint on noreturn
+PASS: gdb.threads/bp_in_thread.exp: run to noreturn
+Running ./gdb.threads/clone-new-thread-event.exp ...
+PASS: gdb.threads/clone-new-thread-event.exp: catch SIGUSR1
+Running ./gdb.threads/corethreads.exp ...
+Running ./gdb.threads/create-fail.exp ...
+PASS: gdb.threads/create-fail.exp: successfully compiled posix threads test case
+PASS: gdb.threads/create-fail.exp: iteration 1: run till end
+PASS: gdb.threads/create-fail.exp: iteration 2: run till end
+PASS: gdb.threads/create-fail.exp: iteration 3: run till end
+PASS: gdb.threads/create-fail.exp: iteration 4: run till end
+PASS: gdb.threads/create-fail.exp: iteration 5: run till end
+PASS: gdb.threads/create-fail.exp: iteration 6: run till end
+PASS: gdb.threads/create-fail.exp: iteration 7: run till end
+PASS: gdb.threads/create-fail.exp: iteration 8: run till end
+PASS: gdb.threads/create-fail.exp: iteration 9: run till end
+PASS: gdb.threads/create-fail.exp: iteration 10: run till end
+Running ./gdb.threads/current-lwp-dead.exp ...
+PASS: gdb.threads/current-lwp-dead.exp: continue to breakpoint: fn_return
+Running ./gdb.threads/execl.exp ...
+Running ./gdb.threads/fork-child-threads.exp ...
+Running ./gdb.threads/fork-thread-pending.exp ...
+Running ./gdb.threads/gcore-thread.exp ...
+PASS: gdb.threads/gcore-thread.exp: successfully compiled posix threads test case
+PASS: gdb.threads/gcore-thread.exp: successfully compiled posix threads test case
+PASS: gdb.threads/gcore-thread.exp: help gcore
+PASS: gdb.threads/gcore-thread.exp: thread 1 is running
+PASS: gdb.threads/gcore-thread.exp: thread 2 is running
+PASS: gdb.threads/gcore-thread.exp: save a corefile
+PASS: gdb.threads/gcore-thread.exp: clear __stack_user.next
+PASS: gdb.threads/gcore-thread.exp: clear stack_used.next
+PASS: gdb.threads/gcore-thread.exp: save a zeroed-threads corefile
+FAIL: gdb.threads/gcore-thread.exp: corefile: re-load generated corefile (bad file format)
+FAIL: gdb.threads/gcore-thread.exp: core0file: re-load generated corefile (bad file format)
+Running ./gdb.threads/hand-call-in-threads.exp ...
+PASS: gdb.threads/hand-call-in-threads.exp: successfully compiled posix threads test case
+PASS: gdb.threads/hand-call-in-threads.exp: breakpoint on all_threads_running
+PASS: gdb.threads/hand-call-in-threads.exp: breakpoint on hand_call
+PASS: gdb.threads/hand-call-in-threads.exp: run to all_threads_running
+PASS: gdb.threads/hand-call-in-threads.exp: enable scheduler locking
+PASS: gdb.threads/hand-call-in-threads.exp: show scheduler locking on
+PASS: gdb.threads/hand-call-in-threads.exp: prepare to make hand call, thread 1
+PASS: gdb.threads/hand-call-in-threads.exp: hand call, thread 1
+PASS: gdb.threads/hand-call-in-threads.exp: prepare to make hand call, thread 2
+PASS: gdb.threads/hand-call-in-threads.exp: hand call, thread 2
+PASS: gdb.threads/hand-call-in-threads.exp: prepare to make hand call, thread 3
+PASS: gdb.threads/hand-call-in-threads.exp: hand call, thread 3
+PASS: gdb.threads/hand-call-in-threads.exp: prepare to make hand call, thread 4
+PASS: gdb.threads/hand-call-in-threads.exp: hand call, thread 4
+PASS: gdb.threads/hand-call-in-threads.exp: prepare to make hand call, thread 5
+PASS: gdb.threads/hand-call-in-threads.exp: hand call, thread 5
+PASS: gdb.threads/hand-call-in-threads.exp: set confirm off
+PASS: gdb.threads/hand-call-in-threads.exp: prepare to discard hand call, thread 1
+PASS: gdb.threads/hand-call-in-threads.exp: dummy stack frame number, thread 1
+PASS: gdb.threads/hand-call-in-threads.exp: setting frame, thread 1
+PASS: gdb.threads/hand-call-in-threads.exp: discard hand call, thread 1
+PASS: gdb.threads/hand-call-in-threads.exp: prepare to discard hand call, thread 2
+PASS: gdb.threads/hand-call-in-threads.exp: dummy stack frame number, thread 2
+PASS: gdb.threads/hand-call-in-threads.exp: setting frame, thread 2
+PASS: gdb.threads/hand-call-in-threads.exp: discard hand call, thread 2
+PASS: gdb.threads/hand-call-in-threads.exp: prepare to discard hand call, thread 3
+PASS: gdb.threads/hand-call-in-threads.exp: dummy stack frame number, thread 3
+PASS: gdb.threads/hand-call-in-threads.exp: setting frame, thread 3
+PASS: gdb.threads/hand-call-in-threads.exp: discard hand call, thread 3
+PASS: gdb.threads/hand-call-in-threads.exp: prepare to discard hand call, thread 4
+PASS: gdb.threads/hand-call-in-threads.exp: dummy stack frame number, thread 4
+PASS: gdb.threads/hand-call-in-threads.exp: setting frame, thread 4
+PASS: gdb.threads/hand-call-in-threads.exp: discard hand call, thread 4
+PASS: gdb.threads/hand-call-in-threads.exp: prepare to discard hand call, thread 5
+PASS: gdb.threads/hand-call-in-threads.exp: dummy stack frame number, thread 5
+PASS: gdb.threads/hand-call-in-threads.exp: setting frame, thread 5
+PASS: gdb.threads/hand-call-in-threads.exp: discard hand call, thread 5
+PASS: gdb.threads/hand-call-in-threads.exp: all dummies popped
+PASS: gdb.threads/hand-call-in-threads.exp: disable scheduler locking
+PASS: gdb.threads/hand-call-in-threads.exp: show scheduler locking off
+Running ./gdb.threads/ia64-sigill.exp ...
+PASS: gdb.threads/ia64-sigill.exp: successfully compiled posix threads test case
+PASS: gdb.threads/ia64-sigill.exp: info addr label
+PASS: gdb.threads/ia64-sigill.exp: set $sigill_bpnum=$bpnum
+PASS: gdb.threads/ia64-sigill.exp: set debug infrun 1
+PASS: gdb.threads/ia64-sigill.exp: continue
+PASS: gdb.threads/ia64-sigill.exp: delete $sigill_bpnum
+PASS: gdb.threads/ia64-sigill.exp: continue for the pending signal
+Running ./gdb.threads/interrupted-hand-call.exp ...
+PASS: gdb.threads/interrupted-hand-call.exp: successfully compiled posix threads test case
+PASS: gdb.threads/interrupted-hand-call.exp: breakpoint on all_threads_running
+PASS: gdb.threads/interrupted-hand-call.exp: run to all_threads_running
+PASS: gdb.threads/interrupted-hand-call.exp: hand-call interrupted by signal in another thread
+PASS: gdb.threads/interrupted-hand-call.exp: dummy stack frame present
+PASS: gdb.threads/interrupted-hand-call.exp: finish hand-call
+PASS: gdb.threads/interrupted-hand-call.exp: dummy frame popped
+PASS: gdb.threads/interrupted-hand-call.exp: continue until exit
+Running ./gdb.threads/killed.exp ...
+PASS: gdb.threads/killed.exp: successfully compiled posix threads test case
+PASS: gdb.threads/killed.exp: run program to completion
+PASS: gdb.threads/killed.exp: GDB exits after multi-threaded program exits messily
+Running ./gdb.threads/leader-exit.exp ...
+PASS: gdb.threads/leader-exit.exp: successfully compiled posix threads test case
+FAIL: gdb.threads/leader-exit.exp: continue to breakpoint: break-here (timeout)
+FAIL: gdb.threads/leader-exit.exp: Single thread has been left (timeout)
+Running ./gdb.threads/linux-dp.exp ...
+PASS: gdb.threads/linux-dp.exp: successfully compiled posix threads test case
+PASS: gdb.threads/linux-dp.exp: set print sevenbit-strings
+PASS: gdb.threads/linux-dp.exp: info threads 1
+PASS: gdb.threads/linux-dp.exp: continue to breakpoint: about to create philosopher: 0
+UNSUPPORTED: gdb.threads/linux-dp.exp: create philosopher: 0
+PASS: gdb.threads/linux-dp.exp: info threads after: 0
+PASS: gdb.threads/linux-dp.exp: continue to breakpoint: about to create philosopher: 1
+UNSUPPORTED: gdb.threads/linux-dp.exp: create philosopher: 1
+PASS: gdb.threads/linux-dp.exp: info threads after: 1
+PASS: gdb.threads/linux-dp.exp: continue to breakpoint: about to create philosopher: 2
+UNSUPPORTED: gdb.threads/linux-dp.exp: create philosopher: 2
+PASS: gdb.threads/linux-dp.exp: info threads after: 2
+PASS: gdb.threads/linux-dp.exp: continue to breakpoint: about to create philosopher: 3
+UNSUPPORTED: gdb.threads/linux-dp.exp: create philosopher: 3
+PASS: gdb.threads/linux-dp.exp: info threads after: 3
+PASS: gdb.threads/linux-dp.exp: continue to breakpoint: about to create philosopher: 4
+UNSUPPORTED: gdb.threads/linux-dp.exp: create philosopher: 4
+PASS: gdb.threads/linux-dp.exp: info threads after: 4
+PASS: gdb.threads/linux-dp.exp: continue to breakpoint: main thread's sleep
+PASS: gdb.threads/linux-dp.exp: info threads 2
+PASS: gdb.threads/linux-dp.exp: continue to breakpoint: thread 5's print
+PASS: gdb.threads/linux-dp.exp: first thread-specific breakpoint hit
+PASS: gdb.threads/linux-dp.exp: continue to breakpoint: thread 5's print, pass: 0
+PASS: gdb.threads/linux-dp.exp: continue to breakpoint: thread 5's print, pass: 1
+PASS: gdb.threads/linux-dp.exp: continue to breakpoint: thread 5's print, pass: 2
+PASS: gdb.threads/linux-dp.exp: continue to breakpoint: thread 5's print, pass: 3
+PASS: gdb.threads/linux-dp.exp: continue to breakpoint: thread 5's print, pass: 4
+PASS: gdb.threads/linux-dp.exp: continue to breakpoint: thread 5's print, pass: 5
+PASS: gdb.threads/linux-dp.exp: continue to breakpoint: thread 5's print, pass: 6
+PASS: gdb.threads/linux-dp.exp: continue to breakpoint: thread 5's print, pass: 7
+PASS: gdb.threads/linux-dp.exp: continue to breakpoint: thread 5's print, pass: 8
+PASS: gdb.threads/linux-dp.exp: continue to breakpoint: thread 5's print, pass: 9
+PASS: gdb.threads/linux-dp.exp: thread-specific breakpoint is thread-specific
+PASS: gdb.threads/linux-dp.exp: selected thread: 1
+PASS: gdb.threads/linux-dp.exp: main is distinct: 1
+PASS: gdb.threads/linux-dp.exp: selected thread: 2
+PASS: gdb.threads/linux-dp.exp: philosopher is distinct: 2
+PASS: gdb.threads/linux-dp.exp: selected thread: 3
+PASS: gdb.threads/linux-dp.exp: philosopher is distinct: 3
+PASS: gdb.threads/linux-dp.exp: selected thread: 4
+PASS: gdb.threads/linux-dp.exp: philosopher is distinct: 4
+PASS: gdb.threads/linux-dp.exp: selected thread: 5
+PASS: gdb.threads/linux-dp.exp: philosopher is distinct: 5
+PASS: gdb.threads/linux-dp.exp: selected thread: 6
+PASS: gdb.threads/linux-dp.exp: philosopher is distinct: 6
+PASS: gdb.threads/linux-dp.exp: found an interesting thread
+PASS: gdb.threads/linux-dp.exp: manager thread found (not found) when expected
+Running ./gdb.threads/local-watch-wrong-thread.exp ...
+Running ./gdb.threads/manythreads.exp ...
+PASS: gdb.threads/manythreads.exp: successfully compiled posix threads test case
+PASS: gdb.threads/manythreads.exp: set print sevenbit-strings
+PASS: gdb.threads/manythreads.exp: shell stty intr '^C'
+PASS: gdb.threads/manythreads.exp: first continue
+PASS: gdb.threads/manythreads.exp: stop threads 1
+PASS: gdb.threads/manythreads.exp: info threads
+PASS: gdb.threads/manythreads.exp: give a name to the thread
+PASS: gdb.threads/manythreads.exp: check thread name
+PASS: gdb.threads/manythreads.exp: second continue
+PASS: gdb.threads/manythreads.exp: check for duplicate SIGINT
+PASS: gdb.threads/manythreads.exp: stop threads 2
+PASS: gdb.threads/manythreads.exp: GDB exits after stopping multithreaded program
+Running ./gdb.threads/multi-create.exp ...
+PASS: gdb.threads/multi-create.exp: successfully compiled posix threads test case
+PASS: gdb.threads/multi-create.exp: continue to breakpoint 0
+PASS: gdb.threads/multi-create.exp: continue to breakpoint 1
+PASS: gdb.threads/multi-create.exp: continue to breakpoint 2
+PASS: gdb.threads/multi-create.exp: continue to breakpoint 3
+PASS: gdb.threads/multi-create.exp: continue to breakpoint 4
+PASS: gdb.threads/multi-create.exp: continue to breakpoint 5
+PASS: gdb.threads/multi-create.exp: continue to breakpoint 6
+PASS: gdb.threads/multi-create.exp: continue to breakpoint 7
+PASS: gdb.threads/multi-create.exp: continue to breakpoint 8
+PASS: gdb.threads/multi-create.exp: continue to breakpoint 9
+PASS: gdb.threads/multi-create.exp: continue to breakpoint 10
+PASS: gdb.threads/multi-create.exp: continue to breakpoint 11
+PASS: gdb.threads/multi-create.exp: continue to breakpoint 12
+PASS: gdb.threads/multi-create.exp: continue to breakpoint 13
+PASS: gdb.threads/multi-create.exp: continue to breakpoint 14
+PASS: gdb.threads/multi-create.exp: continue to breakpoint 15
+PASS: gdb.threads/multi-create.exp: continue to breakpoint 16
+PASS: gdb.threads/multi-create.exp: continue to breakpoint 17
+PASS: gdb.threads/multi-create.exp: continue to breakpoint 18
+PASS: gdb.threads/multi-create.exp: continue to breakpoint 19
+PASS: gdb.threads/multi-create.exp: continue to breakpoint 20
+PASS: gdb.threads/multi-create.exp: continue to breakpoint 21
+PASS: gdb.threads/multi-create.exp: continue to breakpoint 22
+PASS: gdb.threads/multi-create.exp: continue to breakpoint 23
+PASS: gdb.threads/multi-create.exp: continue to breakpoint 24
+PASS: gdb.threads/multi-create.exp: continue to breakpoint 25
+PASS: gdb.threads/multi-create.exp: continue to breakpoint 26
+PASS: gdb.threads/multi-create.exp: continue to breakpoint 27
+PASS: gdb.threads/multi-create.exp: continue to breakpoint 28
+PASS: gdb.threads/multi-create.exp: continue to breakpoint 29
+PASS: gdb.threads/multi-create.exp: continue to breakpoint 30
+PASS: gdb.threads/multi-create.exp: continue to breakpoint 31
+Running ./gdb.threads/non-ldr-exc-1.exp ...
+Running ./gdb.threads/non-ldr-exc-2.exp ...
+Running ./gdb.threads/non-ldr-exc-3.exp ...
+Running ./gdb.threads/non-ldr-exc-4.exp ...
+Running ./gdb.threads/no-unwaited-for-left.exp ...
+PASS: gdb.threads/no-unwaited-for-left.exp: successfully compiled posix threads test case
+PASS: gdb.threads/no-unwaited-for-left.exp: continue to breakpoint: break-here
+PASS: gdb.threads/no-unwaited-for-left.exp: enable scheduler-locking, for thread 2
+FAIL: gdb.threads/no-unwaited-for-left.exp: continue stops when thread 2 exits (the program exited)
+FAIL: gdb.threads/no-unwaited-for-left.exp: only main thread left, thread 2 terminated
+PASS: gdb.threads/no-unwaited-for-left.exp: select main thread
+FAIL: gdb.threads/no-unwaited-for-left.exp: disable scheduler-locking, letting new thread start
+FAIL: gdb.threads/no-unwaited-for-left.exp: continue to breakpoint: break-here-2
+FAIL: gdb.threads/no-unwaited-for-left.exp: enable scheduler-locking, for main thread
+FAIL: gdb.threads/no-unwaited-for-left.exp: continue stops when the main thread exits (the program is no longer running)
+FAIL: gdb.threads/no-unwaited-for-left.exp: only thread 3 left, main thread terminated
+Running ./gdb.threads/pending-step.exp ...
+PASS: gdb.threads/pending-step.exp: successfully compiled posix threads test case
+PASS: gdb.threads/pending-step.exp: continue to breakpoint: continue to first breakpoint hit
+PASS: gdb.threads/pending-step.exp: next in multiple threads with breakpoints
+Running ./gdb.threads/print-threads.exp ...
+PASS: gdb.threads/print-threads.exp: successfully compiled posix threads test case
+PASS: gdb.threads/print-threads.exp: set print sevenbit-strings
+PASS: gdb.threads/print-threads.exp: set width 0
+PASS: gdb.threads/print-threads.exp: shell stty intr '^C'
+PASS: gdb.threads/print-threads.exp: break thread_function
+PASS: gdb.threads/print-threads.exp: set var slow = 0
+PASS: gdb.threads/print-threads.exp: Hit thread_function breakpoint, 1 (fast)
+PASS: gdb.threads/print-threads.exp: Hit thread_function breakpoint, 2 (fast)
+PASS: gdb.threads/print-threads.exp: Hit thread_function breakpoint, 3 (fast)
+PASS: gdb.threads/print-threads.exp: Hit thread_function breakpoint, 4 (fast)
+PASS: gdb.threads/print-threads.exp: Hit thread_function breakpoint, 5 (fast)
+PASS: gdb.threads/print-threads.exp: program exited normally
+PASS: gdb.threads/print-threads.exp: all threads ran once (fast)
+PASS: gdb.threads/print-threads.exp: break thread_function (2)
+PASS: gdb.threads/print-threads.exp: set var slow = 1
+PASS: gdb.threads/print-threads.exp: Hit thread_function breakpoint, 1 (slow)
+PASS: gdb.threads/print-threads.exp: Hit thread_function breakpoint, 2 (slow)
+PASS: gdb.threads/print-threads.exp: Hit thread_function breakpoint, 3 (slow)
+PASS: gdb.threads/print-threads.exp: Hit thread_function breakpoint, 4 (slow)
+PASS: gdb.threads/print-threads.exp: Hit thread_function breakpoint, 5 (slow)
+PASS: gdb.threads/print-threads.exp: program exited normally
+PASS: gdb.threads/print-threads.exp: all threads ran once (slow)
+PASS: gdb.threads/print-threads.exp: break thread_function (3)
+PASS: gdb.threads/print-threads.exp: set var slow = 1 (2)
+PASS: gdb.threads/print-threads.exp: Hit thread_function breakpoint, 1 (slow with kill breakpoint)
+PASS: gdb.threads/print-threads.exp: Hit thread_function breakpoint, 2 (slow with kill breakpoint)
+PASS: gdb.threads/print-threads.exp: Hit thread_function breakpoint, 3 (slow with kill breakpoint)
+PASS: gdb.threads/print-threads.exp: Hit thread_function breakpoint, 4 (slow with kill breakpoint)
+PASS: gdb.threads/print-threads.exp: Hit thread_function breakpoint, 5 (slow with kill breakpoint)
+PASS: gdb.threads/print-threads.exp: program exited normally
+PASS: gdb.threads/print-threads.exp: all threads ran once (slow with kill breakpoint)
+Running ./gdb.threads/pthread_cond_wait.exp ...
+PASS: gdb.threads/pthread_cond_wait.exp: successfully compiled posix threads test case
+PASS: gdb.threads/pthread_cond_wait.exp: breakpoint on break_me
+PASS: gdb.threads/pthread_cond_wait.exp: run to break_me
+PASS: gdb.threads/pthread_cond_wait.exp: backtrace in blocked thread
+Running ./gdb.threads/pthreads.exp ...
+PASS: gdb.threads/pthreads.exp: successfully compiled posix threads test case
+PASS: gdb.threads/pthreads.exp: set print sevenbit-strings
+PASS: gdb.threads/pthreads.exp: set width 0
+PASS: gdb.threads/pthreads.exp: shell stty intr '^C'
+PASS: gdb.threads/pthreads.exp: info threads
+PASS: gdb.threads/pthreads.exp: break thread1
+PASS: gdb.threads/pthreads.exp: Continue to creation of first thread
+PASS: gdb.threads/pthreads.exp: disable
+PASS: gdb.threads/pthreads.exp: break thread2
+PASS: gdb.threads/pthreads.exp: Continue to creation of second thread
+PASS: gdb.threads/pthreads.exp: set var common_routine::hits=0
+PASS: gdb.threads/pthreads.exp: set var common_routine::from_thread1=0
+PASS: gdb.threads/pthreads.exp: set var common_routine::from_thread2=0
+PASS: gdb.threads/pthreads.exp: set var common_routine::from_main=0
+PASS: gdb.threads/pthreads.exp: set var common_routine::full_coverage=0
+PASS: gdb.threads/pthreads.exp: disable
+PASS: gdb.threads/pthreads.exp: tbreak common_routine if hits >= 15
+PASS: gdb.threads/pthreads.exp: stopped before calling common_routine 15 times
+PASS: gdb.threads/pthreads.exp: All threads running after startup
+PASS: gdb.threads/pthreads.exp: Continue with all threads running
+PASS: gdb.threads/pthreads.exp: Stopped with a ^C
+PASS: gdb.threads/pthreads.exp: bt
+PASS: gdb.threads/pthreads.exp: set var common_routine::hits=0
+PASS: gdb.threads/pthreads.exp: set var common_routine::from_thread1=0
+PASS: gdb.threads/pthreads.exp: set var common_routine::from_thread2=0
+PASS: gdb.threads/pthreads.exp: set var common_routine::from_main=0
+PASS: gdb.threads/pthreads.exp: set var common_routine::full_coverage=0
+PASS: gdb.threads/pthreads.exp: disable
+PASS: gdb.threads/pthreads.exp: tbreak common_routine if hits >= 15
+PASS: gdb.threads/pthreads.exp: stopped before calling common_routine 15 times
+PASS: gdb.threads/pthreads.exp: All threads running after continuing from ^C stop
+PASS: gdb.threads/pthreads.exp: check backtrace from main thread
+PASS: gdb.threads/pthreads.exp: check backtrace from thread 1
+PASS: gdb.threads/pthreads.exp: check backtrace from thread 2
+PASS: gdb.threads/pthreads.exp: apply backtrace command to all three threads
+PASS: gdb.threads/pthreads.exp: set break at common_routine in thread 2
+PASS: gdb.threads/pthreads.exp: continue to bkpt at common_routine in thread 2
+PASS: gdb.threads/pthreads.exp: backtrace from thread 2 bkpt in common_routine
+Running ./gdb.threads/schedlock.exp ...
+PASS: gdb.threads/schedlock.exp: successfully compiled posix threads test case
+PASS: gdb.threads/schedlock.exp: shell stty intr '^C'
+PASS: gdb.threads/schedlock.exp: set print sevenbit-strings
+PASS: gdb.threads/schedlock.exp: set width 0
+PASS: gdb.threads/schedlock.exp: scheduler locking set to none
+PASS: gdb.threads/schedlock.exp: continue to breakpoint: all threads started
+PASS: gdb.threads/schedlock.exp: listed args (1)
+PASS: gdb.threads/schedlock.exp: continue (initial)
+PASS: gdb.threads/schedlock.exp: stop all threads (initial)
+PASS: gdb.threads/schedlock.exp: continue to breakpoint: return to loop (initial)
+PASS: gdb.threads/schedlock.exp: listed args (2)
+PASS: gdb.threads/schedlock.exp: all threads alive
+PASS: gdb.threads/schedlock.exp: find current thread (1)
+PASS: gdb.threads/schedlock.exp: set scheduler-locking off
+PASS: gdb.threads/schedlock.exp: step to increment (unlocked 0)
+PASS: gdb.threads/schedlock.exp: step to increment (unlocked 1)
+PASS: gdb.threads/schedlock.exp: step to increment (unlocked 2)
+PASS: gdb.threads/schedlock.exp: step to increment (unlocked 3)
+PASS: gdb.threads/schedlock.exp: step to increment (unlocked 4)
+PASS: gdb.threads/schedlock.exp: step to increment (unlocked 5)
+PASS: gdb.threads/schedlock.exp: step to increment (unlocked 6)
+PASS: gdb.threads/schedlock.exp: step to increment (unlocked 7)
+PASS: gdb.threads/schedlock.exp: step to increment (unlocked 8)
+PASS: gdb.threads/schedlock.exp: step to increment (unlocked 9)
+PASS: gdb.threads/schedlock.exp: find current thread (2)
+PASS: gdb.threads/schedlock.exp: step without lock does not change thread
+PASS: gdb.threads/schedlock.exp: listed args (3)
+PASS: gdb.threads/schedlock.exp: current thread stepped
+PASS: gdb.threads/schedlock.exp: other threads ran - unlocked
+PASS: gdb.threads/schedlock.exp: set scheduler-locking on
+PASS: gdb.threads/schedlock.exp: continue (with lock)
+PASS: gdb.threads/schedlock.exp: stop all threads (with lock)
+PASS: gdb.threads/schedlock.exp: continue to breakpoint: return to loop (with lock)
+PASS: gdb.threads/schedlock.exp: find current thread (3)
+PASS: gdb.threads/schedlock.exp: continue with lock does not change thread
+PASS: gdb.threads/schedlock.exp: listed args (4)
+PASS: gdb.threads/schedlock.exp: current thread ran
+PASS: gdb.threads/schedlock.exp: other threads didn't run - locked
+PASS: gdb.threads/schedlock.exp: step to increment (locked 0)
+PASS: gdb.threads/schedlock.exp: step to increment (locked 1)
+PASS: gdb.threads/schedlock.exp: step to increment (locked 2)
+PASS: gdb.threads/schedlock.exp: step to increment (locked 3)
+PASS: gdb.threads/schedlock.exp: step to increment (locked 4)
+PASS: gdb.threads/schedlock.exp: step to increment (locked 5)
+PASS: gdb.threads/schedlock.exp: step to increment (locked 6)
+PASS: gdb.threads/schedlock.exp: step to increment (locked 7)
+PASS: gdb.threads/schedlock.exp: step to increment (locked 8)
+PASS: gdb.threads/schedlock.exp: step to increment (locked 9)
+PASS: gdb.threads/schedlock.exp: find current thread (2)
+PASS: gdb.threads/schedlock.exp: step with lock does not change thread
+PASS: gdb.threads/schedlock.exp: listed args (5)
+PASS: gdb.threads/schedlock.exp: current thread stepped locked
+PASS: gdb.threads/schedlock.exp: other threads didn't run - step locked
+Running ./gdb.threads/siginfo-threads.exp ...
+PASS: gdb.threads/siginfo-threads.exp: successfully compiled posix threads test case
+PASS: gdb.threads/siginfo-threads.exp: handle SIGUSR1 stop print pass
+PASS: gdb.threads/siginfo-threads.exp: handle SIGUSR2 stop print pass
+PASS: gdb.threads/siginfo-threads.exp: get pid
+PASS: gdb.threads/siginfo-threads.exp: catch signal 0
+PASS: gdb.threads/siginfo-threads.exp: signal 0 si_signo
+PASS: gdb.threads/siginfo-threads.exp: signal 0 si_code is SI_TKILL
+PASS: gdb.threads/siginfo-threads.exp: signal 0 si_pid
+PASS: gdb.threads/siginfo-threads.exp: catch signal 1
+PASS: gdb.threads/siginfo-threads.exp: signal 1 si_signo
+PASS: gdb.threads/siginfo-threads.exp: signal 1 si_code is SI_TKILL
+PASS: gdb.threads/siginfo-threads.exp: signal 1 si_pid
+PASS: gdb.threads/siginfo-threads.exp: catch signal 2
+PASS: gdb.threads/siginfo-threads.exp: signal 2 si_signo
+PASS: gdb.threads/siginfo-threads.exp: signal 2 si_code is SI_TKILL
+PASS: gdb.threads/siginfo-threads.exp: signal 2 si_pid
+PASS: gdb.threads/siginfo-threads.exp: catch signal 3
+PASS: gdb.threads/siginfo-threads.exp: signal 3 si_signo
+PASS: gdb.threads/siginfo-threads.exp: signal 3 si_code is SI_TKILL
+PASS: gdb.threads/siginfo-threads.exp: signal 3 si_pid
+PASS: gdb.threads/siginfo-threads.exp: continue to breakpoint: break-at-exit
+Running ./gdb.threads/sigstep-threads.exp ...
+PASS: gdb.threads/sigstep-threads.exp: successfully compiled posix threads test case
+PASS: gdb.threads/sigstep-threads.exp: handle SIGUSR1 nostop print pass
+PASS: gdb.threads/sigstep-threads.exp: set scheduler-locking off
+PASS: gdb.threads/sigstep-threads.exp: set $step1=$bpnum
+PASS: gdb.threads/sigstep-threads.exp: continue to breakpoint: step-1
+PASS: gdb.threads/sigstep-threads.exp: disable $step1
+PASS: gdb.threads/sigstep-threads.exp: step
+Running ./gdb.threads/sigthread.exp ...
+PASS: gdb.threads/sigthread.exp: successfully compiled posix threads test case
+PASS: gdb.threads/sigthread.exp: handle SIGUSR1 nostop noprint pass
+PASS: gdb.threads/sigthread.exp: handle SIGUSR2 nostop noprint pass
+PASS: gdb.threads/sigthread.exp: continue
+PASS: gdb.threads/sigthread.exp: stop with control-c
+Running ./gdb.threads/staticthreads.exp ...
+PASS: gdb.threads/staticthreads.exp: successfully compiled posix threads test case
+PASS: gdb.threads/staticthreads.exp: set print sevenbit-strings
+PASS: gdb.threads/staticthreads.exp: break sem_post
+PASS: gdb.threads/staticthreads.exp: Continue to main's call of sem_post
+PASS: gdb.threads/staticthreads.exp: rerun to main
+PASS: gdb.threads/staticthreads.exp: handle SIG32 nostop noprint pass
+PASS: gdb.threads/staticthreads.exp: handle SIG32 helps
+PASS: gdb.threads/staticthreads.exp: info threads
+PASS: gdb.threads/staticthreads.exp: GDB exits with static thread program
+Running ./gdb.threads/switch-threads.exp ...
+PASS: gdb.threads/switch-threads.exp: successfully compiled posix threads test case
+PASS: gdb.threads/switch-threads.exp: continue to breakpoint: continue to thread_func
+PASS: gdb.threads/switch-threads.exp: next
+Running ./gdb.threads/threadapply.exp ...
+PASS: gdb.threads/threadapply.exp: successfully compiled posix threads test case
+PASS: gdb.threads/threadapply.exp: b 62
+PASS: gdb.threads/threadapply.exp: continue
+PASS: gdb.threads/threadapply.exp: macro details
+PASS: gdb.threads/threadapply.exp: defining macro
+PASS: gdb.threads/threadapply.exp: set backtrace limit 3
+PASS: gdb.threads/threadapply.exp: thread apply all backthread
+PASS: gdb.threads/threadapply.exp: step to the thread_function
+PASS: gdb.threads/threadapply.exp: go up in the stack frame
+PASS: gdb.threads/threadapply.exp: run a simple print command on all threads
+PASS: gdb.threads/threadapply.exp: go down and check selected frame
+Running ./gdb.threads/thread_check.exp ...
+PASS: gdb.threads/thread_check.exp: successfully compiled posix threads test case
+PASS: gdb.threads/thread_check.exp: breakpoint at tf
+PASS: gdb.threads/thread_check.exp: continue to tf
+PASS: gdb.threads/thread_check.exp: backtrace from thread function
+Running ./gdb.threads/thread_events.exp ...
+Running ./gdb.threads/thread-execl.exp ...
+Running ./gdb.threads/thread-find.exp ...
+PASS: gdb.threads/thread-find.exp: successfully compiled posix threads test case
+PASS: gdb.threads/thread-find.exp: set print sevenbit-strings
+PASS: gdb.threads/thread-find.exp: continue to breakpoint: main thread's sleep
+PASS: gdb.threads/thread-find.exp: info threads
+PASS: gdb.threads/thread-find.exp: name thread 1
+PASS: gdb.threads/thread-find.exp: name thread 2
+PASS: gdb.threads/thread-find.exp: name thread 3
+PASS: gdb.threads/thread-find.exp: name thread 4
+PASS: gdb.threads/thread-find.exp: name thread 5
+PASS: gdb.threads/thread-find.exp: name thread 6
+PASS: gdb.threads/thread-find.exp: collect thread id
+PASS: gdb.threads/thread-find.exp: got thread ids
+PASS: gdb.threads/thread-find.exp: collect process id
+PASS: gdb.threads/thread-find.exp: collect lwp id
+PASS: gdb.threads/thread-find.exp: find thread name 6
+PASS: gdb.threads/thread-find.exp: find thread name 5
+PASS: gdb.threads/thread-find.exp: find thread name 4
+PASS: gdb.threads/thread-find.exp: find thread name 3
+PASS: gdb.threads/thread-find.exp: find thread name 2
+PASS: gdb.threads/thread-find.exp: find thread name 1
+PASS: gdb.threads/thread-find.exp: find thread id 6
+PASS: gdb.threads/thread-find.exp: find thread id 5
+PASS: gdb.threads/thread-find.exp: find thread id 4
+PASS: gdb.threads/thread-find.exp: find thread id 3
+PASS: gdb.threads/thread-find.exp: find thread id 2
+PASS: gdb.threads/thread-find.exp: find thread id 1
+PASS: gdb.threads/thread-find.exp: no thread
+PASS: gdb.threads/thread-find.exp: test regular exp
+PASS: gdb.threads/thread-find.exp: info threads 2 4 6
+PASS: gdb.threads/thread-find.exp: info threads 3-5
+PASS: gdb.threads/thread-find.exp: test inverted range
+PASS: gdb.threads/thread-find.exp: info threads 3-3
+PASS: gdb.threads/thread-find.exp: info thread foo
+PASS: gdb.threads/thread-find.exp: info thread foo -1
+Running ./gdb.threads/thread-specific.exp ...
+PASS: gdb.threads/thread-specific.exp: successfully compiled posix threads test case
+PASS: gdb.threads/thread-specific.exp: set print sevenbit-strings
+PASS: gdb.threads/thread-specific.exp: set width 0
+PASS: gdb.threads/thread-specific.exp: thread var when not running
+PASS: gdb.threads/thread-specific.exp: continue to breakpoint: all threads started
+PASS: gdb.threads/thread-specific.exp: get threads list
+PASS: gdb.threads/thread-specific.exp: thread var in main
+PASS: gdb.threads/thread-specific.exp: breakpoint 59 main thread
+PASS: gdb.threads/thread-specific.exp: continue to thread-specific breakpoint
+PASS: gdb.threads/thread-specific.exp: found breakpoint for thread number
+PASS: gdb.threads/thread-specific.exp: thread var at break
+Running ./gdb.threads/thread-unwindonsignal.exp ...
+PASS: gdb.threads/thread-unwindonsignal.exp: successfully compiled posix threads test case
+PASS: gdb.threads/thread-unwindonsignal.exp: breakpoint on all_threads_running
+PASS: gdb.threads/thread-unwindonsignal.exp: run to all_threads_running
+PASS: gdb.threads/thread-unwindonsignal.exp: setting unwindonsignal
+PASS: gdb.threads/thread-unwindonsignal.exp: showing unwindonsignal
+PASS: gdb.threads/thread-unwindonsignal.exp: hand-call interrupted by signal in another thread
+PASS: gdb.threads/thread-unwindonsignal.exp: dummy stack frame present
+PASS: gdb.threads/thread-unwindonsignal.exp: wrong thread not unwound
+PASS: gdb.threads/thread-unwindonsignal.exp: finish hand-call
+PASS: gdb.threads/thread-unwindonsignal.exp: dummy frame popped
+PASS: gdb.threads/thread-unwindonsignal.exp: continue until exit
+Running ./gdb.threads/threxit-hop-specific.exp ...
+PASS: gdb.threads/threxit-hop-specific.exp: successfully compiled posix threads test case
+PASS: gdb.threads/threxit-hop-specific.exp: continue to thread start
+PASS: gdb.threads/threxit-hop-specific.exp: set thread specific breakpoint
+PASS: gdb.threads/threxit-hop-specific.exp: get past the thread specific breakpoint
+Running ./gdb.threads/tls.exp ...
+PASS: gdb.threads/tls.exp: successfully compiled posix threads test case
+PASS: gdb.threads/tls.exp: set breakpoint at all threads
+PASS: gdb.threads/tls.exp: set breakpoint at synch point
+PASS: gdb.threads/tls.exp: set breakpoint at exit
+PASS: gdb.threads/tls.exp: continue to first thread: get to thread
+PASS: gdb.threads/tls.exp: at least one th in spin while stopped at first th
+PASS: gdb.threads/tls.exp: first thread print me
+PASS: gdb.threads/tls.exp: first thread local storage
+PASS: gdb.threads/tls.exp: first another thread local storage
+PASS: gdb.threads/tls.exp: first info address a_thread_local
+PASS: gdb.threads/tls.exp: first info address another_thread_local
+PASS: gdb.threads/tls.exp: continue to second thread
+PASS: gdb.threads/tls.exp: at least one th in spin while stopped at second th
+PASS: gdb.threads/tls.exp: second thread print me
+PASS: gdb.threads/tls.exp: second thread local storage
+PASS: gdb.threads/tls.exp: second another thread local storage
+PASS: gdb.threads/tls.exp: second info address a_thread_local
+PASS: gdb.threads/tls.exp: second info address another_thread_local
+PASS: gdb.threads/tls.exp: continue to third thread
+PASS: gdb.threads/tls.exp: at least one th in spin while stopped at third th
+PASS: gdb.threads/tls.exp: third thread print me
+PASS: gdb.threads/tls.exp: third thread local storage
+PASS: gdb.threads/tls.exp: third another thread local storage
+PASS: gdb.threads/tls.exp: third info address a_thread_local
+PASS: gdb.threads/tls.exp: third info address another_thread_local
+PASS: gdb.threads/tls.exp: continue to synch point
+PASS: gdb.threads/tls.exp: get number of threads
+PASS: gdb.threads/tls.exp: selected thread: 1
+PASS: gdb.threads/tls.exp: backtrace of thread number 1 not relevant
+PASS: gdb.threads/tls.exp: selected thread: 2
+PASS: gdb.threads/tls.exp: backtrace of thread number 2 in spin
+PASS: gdb.threads/tls.exp: selected thread: 3
+PASS: gdb.threads/tls.exp: backtrace of thread number 3 in spin
+PASS: gdb.threads/tls.exp: selected thread: 4
+PASS: gdb.threads/tls.exp: backtrace of thread number 4 in spin
+PASS: gdb.threads/tls.exp: selected thread: 4
+PASS: gdb.threads/tls.exp: thread 4 up
+PASS: gdb.threads/tls.exp: 4 thread print me
+PASS: gdb.threads/tls.exp: 4 thread local storage
+PASS: gdb.threads/tls.exp: 4 another thread local storage
+PASS: gdb.threads/tls.exp: 4 info address a_thread_local
+PASS: gdb.threads/tls.exp: 4 info address another_thread_local
+PASS: gdb.threads/tls.exp: selected thread: 2
+PASS: gdb.threads/tls.exp: thread 2 up
+PASS: gdb.threads/tls.exp: 2 thread print me
+PASS: gdb.threads/tls.exp: 2 thread local storage
+PASS: gdb.threads/tls.exp: 2 another thread local storage
+PASS: gdb.threads/tls.exp: 2 info address a_thread_local
+PASS: gdb.threads/tls.exp: 2 info address another_thread_local
+PASS: gdb.threads/tls.exp: selected thread: 3
+PASS: gdb.threads/tls.exp: thread 3 up
+PASS: gdb.threads/tls.exp: 3 thread print me
+PASS: gdb.threads/tls.exp: 3 thread local storage
+PASS: gdb.threads/tls.exp: 3 another thread local storage
+PASS: gdb.threads/tls.exp: 3 info address a_thread_local
+PASS: gdb.threads/tls.exp: 3 info address another_thread_local
+PASS: gdb.threads/tls.exp: threads exited
+PASS: gdb.threads/tls.exp: Expect only base thread at end
+PASS: gdb.threads/tls.exp: info address a_global
+PASS: gdb.threads/tls.exp: info address me
+PASS: gdb.threads/tls.exp: p a_thread_local
+FAIL: gdb.threads/tls.exp: p file2_thread_local
+PASS: gdb.threads/tls.exp: info address file2_thread_local
+PASS: gdb.threads/tls.exp: p a_thread_local second time
+PASS: gdb.threads/tls.exp: info address a_thread_local
+Running ./gdb.threads/tls-nodebug.exp ...
+PASS: gdb.threads/tls-nodebug.exp: successfully compiled posix threads test case
+FAIL: gdb.threads/tls-nodebug.exp: thread local storage
+Running ./gdb.threads/tls-shared.exp ...
+PASS: gdb.threads/tls-shared.exp: successfully compiled posix threads test case
+PASS: gdb.threads/tls-shared.exp: successfully compiled posix threads test case
+PASS: gdb.threads/tls-shared.exp: print thread local storage variable
+PASS: gdb.threads/tls-shared.exp: ptype of thread local storage variable
+PASS: gdb.threads/tls-shared.exp: print storage info for thread local storage variable
+PASS: gdb.threads/tls-shared.exp: break at and of main
+PASS: gdb.threads/tls-shared.exp: continue to break
+PASS: gdb.threads/tls-shared.exp: print result
+Running ./gdb.threads/tls-var.exp ...
+PASS: gdb.threads/tls-var.exp: successfully compiled posix threads test case
+PASS: gdb.threads/tls-var.exp: whatis tls_var
+PASS: gdb.threads/tls-var.exp: print tls_var
+Running ./gdb.threads/watchpoint-fork.exp ...
+KFAIL: gdb.threads/watchpoint-fork.exp: gdbserver does not support debugging across fork (PRMS: remote/13584)
+Running ./gdb.threads/watchthreads2.exp ...
+Running ./gdb.threads/watchthreads.exp ...
+Running ./gdb.threads/watchthreads-reorder.exp ...
+Running ./gdb.trace/actions.exp ...
+PASS: gdb.trace/actions.exp: 5.1a: set three tracepoints, no actions
+PASS: gdb.trace/actions.exp: 5.1b: set actions for first tracepoint
+PASS: gdb.trace/actions.exp: 5.1c: verify actions set for first tracepoint
+PASS: gdb.trace/actions.exp: 5.1d: set actions for second tracepoint
+PASS: gdb.trace/actions.exp: 5.1e: verify actions set for second tracepoint
+PASS: gdb.trace/actions.exp: 5.2a: set actions for last (default) tracepoint
+PASS: gdb.trace/actions.exp: 5.2b: verify actions set for second tracepoint
+PASS: gdb.trace/actions.exp: 5.3a: reset actions for first tracepoint
+PASS: gdb.trace/actions.exp: 5.3b: verify actions set for first tracepoint
+PASS: gdb.trace/actions.exp: 5.4: 'end' command out of context
+PASS: gdb.trace/actions.exp: 5.5a: set empty actions for first tracepoint
+PASS: gdb.trace/actions.exp: 5.5c: verify NO actions for first tracepoint
+PASS: gdb.trace/actions.exp: 5.6: actions for invalid tracepoint number
+PASS: gdb.trace/actions.exp: 5.7: invalid action
+PASS: gdb.trace/actions.exp: 5.8a: help actions
+PASS: gdb.trace/actions.exp: 5.8b: help collect
+PASS: gdb.trace/actions.exp: 5.8c: help while-stepping
+PASS: gdb.trace/actions.exp: 5.8d: help end
+PASS: gdb.trace/actions.exp: 5.9a: set default-collect
+PASS: gdb.trace/actions.exp: 5.9b: show default-collect
+PASS: gdb.trace/actions.exp: 5.9c: set default-collect
+PASS: gdb.trace/actions.exp: Create a trace state variable
+PASS: gdb.trace/actions.exp: 5.10a: set teval action for first tracepoint
+PASS: gdb.trace/actions.exp: 5.10a: set teval action for second tracepoint
+PASS: gdb.trace/actions.exp: 5.10a: verify teval actions set for two tracepoints
+Running ./gdb.trace/ax.exp ...
+PASS: gdb.trace/ax.exp: maint agent 12
+PASS: gdb.trace/ax.exp: maint agent gdb_char_test
+PASS: gdb.trace/ax.exp: maint agent gdb_arr_test[12]
+PASS: gdb.trace/ax.exp: maint agent gdb_arr_test[gdb_short_test]
+PASS: gdb.trace/ax.exp: maint agent gdb_struct1_test
+PASS: gdb.trace/ax.exp: maint agent gdb_struct1_test.s
+PASS: gdb.trace/ax.exp: maint agent gdb_struct1_test.arr[gdb_struct1_test.c]
+PASS: gdb.trace/ax.exp: maint agent gdb_structp_test
+PASS: gdb.trace/ax.exp: maint agent gdb_structp_test->l
+PASS: gdb.trace/ax.exp: maint agent gdb_structp_test->bfield
+PASS: gdb.trace/ax.exp: maint agent gdb_long_test + gdb_short_test
+PASS: gdb.trace/ax.exp: maint agent gdb_long_test - gdb_short_test
+PASS: gdb.trace/ax.exp: maint agent gdb_long_test * gdb_short_test
+PASS: gdb.trace/ax.exp: maint agent gdb_long_test / gdb_short_test
+PASS: gdb.trace/ax.exp: maint agent gdb_structp_test + 1
+PASS: gdb.trace/ax.exp: maint agent gdb_long_test == gdb_short_test
+PASS: gdb.trace/ax.exp: maint agent gdb_long_test != gdb_short_test
+PASS: gdb.trace/ax.exp: maint agent gdb_long_test < gdb_short_test
+PASS: gdb.trace/ax.exp: maint agent gdb_long_test <= gdb_short_test
+PASS: gdb.trace/ax.exp: maint agent gdb_long_test > gdb_short_test
+PASS: gdb.trace/ax.exp: maint agent gdb_long_test >= gdb_short_test
+PASS: gdb.trace/ax.exp: maint agent &gdb_long_test == &gdb_short_test
+PASS: gdb.trace/ax.exp: maint agent &gdb_long_test < &gdb_short_test
+PASS: gdb.trace/ax.exp: maint agent-eval 12
+PASS: gdb.trace/ax.exp: maint agent-eval gdb_char_test
+PASS: gdb.trace/ax.exp: maint agent-eval gdb_arr_test[12]
+PASS: gdb.trace/ax.exp: maint agent-eval gdb_arr_test[gdb_short_test]
+PASS: gdb.trace/ax.exp: maint agent-eval gdb_struct1_test
+PASS: gdb.trace/ax.exp: maint agent-eval gdb_struct1_test.s
+PASS: gdb.trace/ax.exp: maint agent-eval gdb_struct1_test.arr[gdb_struct1_test.c]
+PASS: gdb.trace/ax.exp: maint agent-eval gdb_structp_test
+PASS: gdb.trace/ax.exp: maint agent-eval gdb_structp_test->l
+PASS: gdb.trace/ax.exp: maint agent-eval gdb_structp_test->bfield
+PASS: gdb.trace/ax.exp: maint agent-eval gdb_long_test + gdb_short_test
+PASS: gdb.trace/ax.exp: maint agent-eval gdb_long_test - gdb_short_test
+PASS: gdb.trace/ax.exp: maint agent-eval gdb_long_test * gdb_short_test
+PASS: gdb.trace/ax.exp: maint agent-eval gdb_long_test / gdb_short_test
+PASS: gdb.trace/ax.exp: maint agent-eval gdb_structp_test + 1
+PASS: gdb.trace/ax.exp: maint agent-eval gdb_long_test == gdb_short_test
+PASS: gdb.trace/ax.exp: maint agent-eval gdb_long_test != gdb_short_test
+PASS: gdb.trace/ax.exp: maint agent-eval gdb_long_test < gdb_short_test
+PASS: gdb.trace/ax.exp: maint agent-eval gdb_long_test <= gdb_short_test
+PASS: gdb.trace/ax.exp: maint agent-eval gdb_long_test > gdb_short_test
+PASS: gdb.trace/ax.exp: maint agent-eval gdb_long_test >= gdb_short_test
+PASS: gdb.trace/ax.exp: maint agent-eval &gdb_long_test == &gdb_short_test
+PASS: gdb.trace/ax.exp: maint agent-eval &gdb_long_test < &gdb_short_test
+Running ./gdb.trace/backtrace.exp ...
+PASS: gdb.trace/backtrace.exp: 8.6: setup TP to collect regs
+PASS: gdb.trace/backtrace.exp: 8.6: setup TP to collect regs, args, and locals
+PASS: gdb.trace/backtrace.exp: 8.6: setup TP to collect stack mem cast expr
+PASS: gdb.trace/backtrace.exp: run trace experiment
+PASS: gdb.trace/backtrace.exp: init: make sure not debugging any trace frame
+PASS: gdb.trace/backtrace.exp: 8.6: find start frame
+PASS: gdb.trace/backtrace.exp: 8.6: Backtrace, depth == 1, collect nothing
+PASS: gdb.trace/backtrace.exp: 8.6: find frame 1
+PASS: gdb.trace/backtrace.exp: 8.6: Backtrace, depth == 1, collect regs
+PASS: gdb.trace/backtrace.exp: 8.6: find frame 2
+PASS: gdb.trace/backtrace.exp: 8.6: Backtrace, depth == 1, collect args and locals
+PASS: gdb.trace/backtrace.exp: 8.6: find frame 4
+PASS: gdb.trace/backtrace.exp: 8.6: Backtrace, depth == 1, collect stack mem expr
+PASS: gdb.trace/backtrace.exp: 8.6: find frame 5
+PASS: gdb.trace/backtrace.exp: 8.6: Backtrace, depth == 2, collect nothing
+PASS: gdb.trace/backtrace.exp: 8.6: find frame 6
+PASS: gdb.trace/backtrace.exp: 8.6: Backtrace, depth == 2, collect regs
+PASS: gdb.trace/backtrace.exp: 8.6: find frame 7
+PASS: gdb.trace/backtrace.exp: 8.6: Backtrace, depth == 2, collect args and locals
+PASS: gdb.trace/backtrace.exp: 8.6: find frame 9
+PASS: gdb.trace/backtrace.exp: 8.6: Backtrace, depth == 1, collect stack mem expr
+PASS: gdb.trace/backtrace.exp: 8.6: find frame 10
+PASS: gdb.trace/backtrace.exp: 8.6: Backtrace, depth == 3, collect nothing
+PASS: gdb.trace/backtrace.exp: 8.6: find frame 11
+PASS: gdb.trace/backtrace.exp: 8.6: Backtrace, depth == 3, collect regs
+PASS: gdb.trace/backtrace.exp: 8.6: find frame 12
+PASS: gdb.trace/backtrace.exp: 8.6: Backtrace, depth == 3, collect args and locals
+PASS: gdb.trace/backtrace.exp: 8.6: find frame 14
+PASS: gdb.trace/backtrace.exp: 8.6: Backtrace, depth == 1, collect stack mem expr
+PASS: gdb.trace/backtrace.exp: 8.6: find frame 15
+PASS: gdb.trace/backtrace.exp: 8.6: Backtrace, depth == 4, collect nothing
+PASS: gdb.trace/backtrace.exp: 8.6: find frame 16
+PASS: gdb.trace/backtrace.exp: 8.6: Backtrace, depth == 4, collect regs
+PASS: gdb.trace/backtrace.exp: 8.6: find frame 17
+PASS: gdb.trace/backtrace.exp: 8.6: Backtrace, depth == 4, collect args and locals
+PASS: gdb.trace/backtrace.exp: 8.6: find frame 19
+PASS: gdb.trace/backtrace.exp: 8.6: Backtrace, depth == 1, collect stack mem expr
+PASS: gdb.trace/backtrace.exp: 1.13: trace in recursion: depth not equal to 3
+Running ./gdb.trace/change-loc.exp ...
+PASS: gdb.trace/change-loc.exp: 1 trace: delete break 1
+PASS: gdb.trace/change-loc.exp: 1 trace: next
+PASS: gdb.trace/change-loc.exp: 1 trace: set tracepoint on main
+PASS: gdb.trace/change-loc.exp: 1 trace: breakpoint on marker
+PASS: gdb.trace/change-loc.exp: 1 trace: tstart
+PASS: gdb.trace/change-loc.exp: 1 trace: continue to marker 1
+PASS: gdb.trace/change-loc.exp: 1 trace: set tracepoint on set_tracepoint
+PASS: gdb.trace/change-loc.exp: 1 trace: set action for tracepoint
+FAIL: gdb.trace/change-loc.exp: 1 trace: tracepoint with two locations
+PASS: gdb.trace/change-loc.exp: 1 trace: continue to marker 2
+FAIL: gdb.trace/change-loc.exp: 1 trace: tracepoint with three locations
+PASS: gdb.trace/change-loc.exp: 1 trace: continue to marker 3
+FAIL: gdb.trace/change-loc.exp: 1 trace: tracepoint with two locations (unload)
+PASS: gdb.trace/change-loc.exp: 1 trace: tstop
+FAIL: gdb.trace/change-loc.exp: 1 trace: tfind frame 0
+PASS: gdb.trace/change-loc.exp: 1 trace: tfind
+PASS: gdb.trace/change-loc.exp: 2 trace: set pending tracepoint
+PASS: gdb.trace/change-loc.exp: 2 trace: set action for tracepoint
+PASS: gdb.trace/change-loc.exp: 2 trace: single pending tracepoint info (without symbols)
+PASS: gdb.trace/change-loc.exp: 2 trace: tracepoint with one location
+PASS: gdb.trace/change-loc.exp: 2 trace: run to main
+PASS: gdb.trace/change-loc.exp: 2 trace: delete break 2
+FAIL: gdb.trace/change-loc.exp: 2 trace: tracepoint with two locations
+PASS: gdb.trace/change-loc.exp: 2 trace: breakpoint on marker
+PASS: gdb.trace/change-loc.exp: 2 trace: tstart
+PASS: gdb.trace/change-loc.exp: 2 trace: continue to marker 1
+PASS: gdb.trace/change-loc.exp: 2 trace: continue to marker 2
+FAIL: gdb.trace/change-loc.exp: 2 trace: tracepoint with three locations
+PASS: gdb.trace/change-loc.exp: 2 trace: continue to marker 3
+FAIL: gdb.trace/change-loc.exp: 2 trace: tracepoint with two locations (unload)
+PASS: gdb.trace/change-loc.exp: 2 trace: tstop
+PASS: gdb.trace/change-loc.exp: 2 trace: tfind frame 0
+FAIL: gdb.trace/change-loc.exp: 2 trace: tfind frame 1
+FAIL: gdb.trace/change-loc.exp: 2 trace: tfind frame 2
+PASS: gdb.trace/change-loc.exp: 2 trace: tfind
+ERROR: (DejaGnu) proc "else\{" does not exist.
+Running ./gdb.xml/tdesc-arch.exp ...
+PASS: gdb.xml/tdesc-arch.exp: read valid architectures
+PASS: gdb.xml/tdesc-arch.exp: read default architecture
+PASS: gdb.xml/tdesc-arch.exp: set tdesc filename tdesc-arch.xml (first architecture)
+PASS: gdb.xml/tdesc-arch.exp: show architecture (first architecture)
+PASS: gdb.xml/tdesc-arch.exp: set tdesc filename tdesc-arch.xml (second architecture)
+PASS: gdb.xml/tdesc-arch.exp: show architecture (second architecture)
+PASS: gdb.xml/tdesc-arch.exp: set tdesc filename tdesc-arch.xml (invalid architecture)
+PASS: gdb.xml/tdesc-arch.exp: show architecture (invalid architecture)
+Running ./gdb.xml/tdesc-errors.exp ...
+PASS: gdb.xml/tdesc-errors.exp: set tdesc filename gdb.xml/tdesc-bogus.xml
+PASS: gdb.xml/tdesc-errors.exp: set tdesc filename gdb.xml/tdesc-unknown.xml
+Running ./gdb.xml/tdesc-regs.exp ...
+PASS: gdb.xml/tdesc-regs.exp: set tdesc file single-reg.xml
+PASS: gdb.xml/tdesc-regs.exp: set tdesc filename regs.xml - from extra-regs.xml
+PASS: gdb.xml/tdesc-regs.exp: ptype $extrareg
+PASS: gdb.xml/tdesc-regs.exp: ptype $uintreg
+PASS: gdb.xml/tdesc-regs.exp: ptype $vecreg
+PASS: gdb.xml/tdesc-regs.exp: ptype $unionreg
+PASS: gdb.xml/tdesc-regs.exp: ptype $unionreg.v4
+PASS: gdb.xml/tdesc-regs.exp: ptype $structreg
+PASS: gdb.xml/tdesc-regs.exp: ptype $structreg.v4
+PASS: gdb.xml/tdesc-regs.exp: ptype $bitfields
+PASS: gdb.xml/tdesc-regs.exp: set tdesc filename regs.xml - from core-only.xml
+PASS: gdb.xml/tdesc-regs.exp: ptype $extrareg
+Running ./gdb.xml/tdesc-xinclude.exp ...
+PASS: gdb.xml/tdesc-xinclude.exp: set tdesc filename gdb.xml/includes.xml
+PASS: gdb.xml/tdesc-xinclude.exp: set tdesc filename gdb.xml/bad-include.xml
+PASS: gdb.xml/tdesc-xinclude.exp: set tdesc filename gdb.xml/loop.xml
+
+ === gdb Summary ===
+
+# of expected passes 17760
+# of unexpected failures 276
+# of unexpected successes 1
+# of expected failures 32
+# of known failures 44
+# of untested testcases 50
+# of unresolved testcases 13
+# of unsupported tests 106
+/var/tmp/portage/cross-x86_64-cros-linux-gnu/gdb-7.6.1/work/gdb-7.6.1/gdb/testsuite/../../gdb/gdb version 7.6.1 -nw -nx -data-directory /var/tmp/portage/cross-x86_64-cros-linux-gnu/gdb-7.6.1/work/gdb-7.6.1/gdb/testsuite/../data-directory
+
diff --git a/dejagnu/gdb_dejagnu.py b/dejagnu/gdb_dejagnu.py
new file mode 100755
index 00000000..c01d909b
--- /dev/null
+++ b/dejagnu/gdb_dejagnu.py
@@ -0,0 +1,357 @@
+#! /usr/bin/python
+
+# Copyright (c) 2013 The Chromium OS Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+"""The gdb dejagnu test wrapper."""
+import optparse
+import os
+from os import path
+import re
+import shutil
+import stat
+import sys
+import tempfile
+import time
+
+from cros_utils import command_executer
+from cros_utils import logger
+from cros_utils import misc
+
+from run_dejagnu import TryAcquireMachine
+
+_VALID_TEST_RESULTS = ['FAIL', 'UNRESOLVED', 'XPASS', 'ERROR', 'UNSUPPORTED',
+ 'PASS']
+
+
+def ProcessArguments(argv):
+ """Processing/validating script arguments."""
+ parser = optparse.OptionParser(description=(
+ 'Launches gdb dejagnu test in chroot for chromeos toolchain, compares '
+ 'the test result with a repository baseline and prints out the result.'),
+ usage='run_dejagnu options')
+ parser.add_option('-c',
+ '--chromeos_root',
+ dest='chromeos_root',
+ help='Required. Specify chromeos root')
+ parser.add_option('-m',
+ '--mount',
+ dest='mount',
+ help=('Specify gdb source to mount instead of "auto". '
+ 'Under "auto" mode, which is the default - gdb is '
+ 'checked out and built automatically at default '
+ 'directories. Under "mount" mode '
+ '- the gdb_source is set to "$chromeos_'
+ 'root/chroot/usr/local/toolchain_root/gdb", which is '
+ 'the mount point for this option value.'))
+ parser.add_option('-b',
+ '--board',
+ dest='board',
+ help=('Required. Specify board.'))
+ parser.add_option('-r',
+ '--remote',
+ dest='remote',
+ help=('Required. Specify addresses/names of the board, '
+ 'seperate each address/name using comma(\',\').'))
+ parser.add_option('--cleanup',
+ dest='cleanup',
+ default=None,
+ help=('Optional. Values to this option could be '
+ '\'chroot\' (delete chroot) and '
+ '\'chromeos\' (delete the whole chromeos tree).'))
+
+ options, args = parser.parse_args(argv)
+
+ if not options.chromeos_root:
+ raise SyntaxError('Missing argument for --chromeos_root.')
+ if not options.remote:
+ raise SyntaxError('Missing argument for --remote.')
+ if not options.board:
+ raise SyntaxError('Missing argument for --board.')
+ if options.cleanup == 'mount' and not options.mount:
+ raise SyntaxError('--cleanup=\'mount\' not valid unless --mount is given.')
+ if options.cleanup and not (options.cleanup == 'mount' or
+ options.cleanup == 'chroot' or
+ options.cleanup == 'chromeos'):
+ raise SyntaxError('Invalid option value for --cleanup')
+
+ return options
+
+
+class DejagnuExecuter(object):
+ """The class wrapper for dejagnu test executer."""
+
+ def __init__(self, base_dir, source_dir, chromeos_root, remote, board,
+ cleanup):
+ self._l = logger.GetLogger()
+ self._chromeos_root = chromeos_root
+ self._chromeos_chroot = path.join(chromeos_root, 'chroot')
+
+ self._remote = remote
+ self._board = board
+ ## Compute target from board
+ self._target = misc.GetCtargetFromBoard(board, chromeos_root)
+ if not self._target:
+ raise RuntimeError('Unsupported board "%s"' % board)
+ self._executer = command_executer.GetCommandExecuter()
+ self._base_dir = base_dir
+ self._tmp_abs = None
+ self._cleanup = cleanup
+ self._sshflag = ('-o StrictHostKeyChecking=no ' + '-o CheckHostIP=no ' +
+ '-o UserKnownHostsFile=$(mktemp) ')
+
+ if source_dir:
+ self._source_dir = source_dir
+ self._mount_flag = 'USE="mounted_sources"'
+ self.MountSource()
+ else:
+ self._source_dir = None
+ self._mount_flag = ''
+
+ def SetupTestingDir(self):
+ self._tmp_abs = tempfile.mkdtemp(
+ prefix='dejagnu_',
+ dir=path.join(self._chromeos_chroot, 'tmp'))
+ self._tmp = self._tmp_abs[len(self._chromeos_chroot):]
+ self._tmp_testing_rsa = path.join(self._tmp, 'testing_rsa')
+ self._tmp_testing_rsa_abs = path.join(self._tmp_abs, 'testing_rsa')
+
+ def PrepareTestingRsaKeys(self):
+ if not path.isfile(self._tmp_testing_rsa_abs):
+ shutil.copy(
+ path.join(self._chromeos_root,
+ 'src/scripts/mod_for_test_scripts/ssh_keys/testing_rsa'),
+ self._tmp_testing_rsa_abs)
+ os.chmod(self._tmp_testing_rsa_abs, stat.S_IRUSR)
+
+ def PrepareTestFiles(self):
+ """Prepare site.exp and board exp files."""
+ # Create the boards directory.
+ os.mkdir('%s/boards' % self._tmp_abs)
+
+ # Generate the chromeos.exp file.
+ with open('%s/boards/gdb.exp.in' % self._base_dir, 'r') as template_file:
+ content = template_file.read()
+
+ substitutions = dict({
+ '__boardname__': self._board,
+ '__board_hostname__': self._remote,
+ '__tmp_testing_rsa__': self._tmp_testing_rsa,
+ '__tmp_dir__': self._tmp
+ })
+ for pat, sub in substitutions.items():
+ content = content.replace(pat, sub)
+
+ board_file_name = '%s/boards/%s.exp' % (self._tmp_abs, self._board)
+ with open(board_file_name, 'w') as board_file:
+ board_file.write(content)
+
+ # Generate the site file
+ with open('%s/site.exp' % self._tmp_abs, 'w') as site_file:
+ site_file.write('set target_list "%s"\n' % self._board)
+
+ with open('%s/boards/gdbserver.sh.in' % self._base_dir, 'r') \
+ as template_file:
+ content = template_file.read()
+ substitutions = dict({
+ '__board_hostname__': self._remote,
+ '__tmp_testing_rsa__': self._tmp_testing_rsa,
+ '__tmp_dir__': self._tmp
+ })
+ for pat, sub in substitutions.items():
+ content = content.replace(pat, sub)
+
+ gdbserver_file_name = '%s/boards/gdbserver.sh' % (self._tmp_abs)
+ with open(gdbserver_file_name, 'w') as board_file:
+ board_file.write(content)
+
+ st = os.stat(gdbserver_file_name)
+ os.chmod(gdbserver_file_name, st.st_mode | stat.S_IXGRP | stat.S_IXUSR)
+
+ def PrepareGdb(self):
+ self.PrepareGdbDefault()
+
+ def PrepareGdbDefault(self):
+ ret = self._executer.ChrootRunCommandWOutput(
+ self._chromeos_root, 'equery w cross-%s/gdb' % self._target)[1]
+ ret = path.basename(ret.strip())
+
+ matcher = re.match(r'(.*).ebuild', ret)
+ if matcher:
+ gdb_reversion = matcher.group(1)
+ else:
+ raise RuntimeError('Failed to get gdb reversion.')
+ gdb_version = gdb_reversion.split('-r')[0]
+ gdb_portage_dir = '/var/tmp/portage/cross-%s/%s/work' % (self._target,
+ gdb_reversion)
+ self._gdb_source_dir = path.join(gdb_portage_dir, gdb_version)
+
+ ret = self._executer.ChrootRunCommand(self._chromeos_root, (
+ 'sudo %s ebuild $(equery w cross-%s/gdb) clean compile' % (
+ self._mount_flag, self._target)))
+ if ret:
+ raise RuntimeError('ebuild gdb failed.')
+
+ def PrepareGdbserver(self):
+ self.PrepareGdbserverDefault()
+
+ def PrepareGdbserverDefault(self):
+ cmd = ('./setup_board --board {0}; '
+ '{1} emerge-{0} gdb'.format(self._board, self._mount_flag))
+ ret = self._executer.ChrootRunCommand(self._chromeos_root,
+ cmd,
+ print_to_console=True)
+ if ret:
+ raise RuntimeError('ebuild gdbserver failed.')
+
+ cmd = ('scp -i {0} {1} '
+ '/build/{2}/usr/bin/gdbserver root@{3}:/usr/local/bin/'.format(
+ self._tmp_testing_rsa, self._sshflag, self._board, self._remote))
+ ret = self._executer.ChrootRunCommand(self._chromeos_root,
+ cmd,
+ print_to_console=True)
+ if ret:
+ raise RuntimeError('copy gdbserver failed.')
+
+ if self._mount_flag:
+ self.MountSource(unmount=False)
+
+ def Cleanup(self):
+ if not self._cleanup:
+ return
+
+ if self._cleanup == 'chroot' or self._cleanup == 'chromeos':
+ self._l.LogOutput('[Cleanup]: Deleting chroot inside \'{0}\''.format(
+ self._chromeos_root))
+ command = 'cd %s; cros_sdk --delete' % self._chromeos_root
+ rv = self._executer.RunCommand(command)
+ if rv:
+ self._l.LogWarning('Warning - failed to delete chroot.')
+ # Delete .cache - crosbug.com/34956
+ command = 'sudo rm -fr %s' % os.path.join(self._chromeos_root, '.cache')
+ rv = self._executer.RunCommand(command)
+ if rv:
+ self._l.LogWarning('Warning - failed to delete \'.cache\'.')
+
+ if self._cleanup == 'chromeos':
+ self._l.LogOutput('[Cleanup]: Deleting chromeos tree \'{0}\' ...'.format(
+ self._chromeos_root))
+ command = 'rm -fr {0}'.format(self._chromeos_root)
+ rv = self._executer.RunCommand(command)
+ if rv:
+ self._l.LogWarning('Warning - failed to remove chromeos tree.')
+
+ def MakeCheck(self):
+ cmd = ('ssh -i {0} {1} root@{2} "reboot && exit"'
+ .format(self._tmp_testing_rsa, self._sshflag, self._remote))
+ self._executer.ChrootRunCommand(self._chromeos_root, cmd)
+ time.sleep(40)
+
+ cmd = ('ssh -i {0} {1} root@{2} '
+ '"iptables -A INPUT -p tcp --dport 1234 -j ACCEPT"'.format(
+ self._tmp_testing_rsa, self._sshflag, self._remote))
+ self._executer.ChrootRunCommand(self._chromeos_root, cmd)
+
+ cmd = ('cd %s ; '
+ 'DEJAGNU=%s make check' % (path.join(self._gdb_source_dir, 'gdb'),
+ path.join(self._tmp, 'site.exp')))
+ ret = self._executer.ChrootRunCommand(self._chromeos_root, cmd)
+ if ret:
+ raise RuntimeError('Make check failed.')
+
+ # This method ensures necessary mount points before executing chroot comamnd.
+ def MountSource(self, unmount=False):
+ script = os.path.join(self._base_dir, 'build_tc.py')
+ if unmount:
+ mount = '-u'
+ else:
+ mount = '-m'
+ cmd = ('python {0} --chromeos_root={1} '
+ '--gdb_dir={2} --board={3} {4}'.format(script, self._chromeos_root,
+ self._source_dir, self._board,
+ mount))
+ rv = self._executer.RunCommand(cmd)
+ if rv:
+ raise RuntimeError('Mount source failed.')
+
+ def ResultValidate(self):
+ self.PrepareResult()
+ result = []
+ for key, value in self.base_result.items():
+ if 'PASS' not in value:
+ continue
+ if key not in self.test_result:
+ continue
+ test_result = self.test_result[key]
+ if 'PASS' not in test_result:
+ result.append(key)
+ return result
+
+ def PrepareResult(self):
+ test_output = os.path.join(self._gdb_source_dir, 'gdb', 'testsuite',
+ 'gdb.sum')
+ test_output = misc.GetOutsideChrootPath(self._chromeos_root, test_output)
+ base_output = os.path.join(self._base_dir, 'gdb_baseline', self._target)
+
+ self.test_result = self.ParseResult(test_output)
+ self.base_result = self.ParseResult(base_output)
+
+ def ParseResult(self, gdb_sum):
+ result = {}
+ multi_keys = {}
+ with open(gdb_sum) as input_sum:
+ for line in input_sum:
+ line = line.strip()
+ r = line.split(':', 1)
+ if r[0] in _VALID_TEST_RESULTS:
+ key = r[1]
+ if r[1] in result:
+ if r[1] in multi_keys:
+ multi_keys[r[1]] += 1
+ else:
+ multi_keys[r[1]] = 2
+ key = r[1] + '_____{0}_____'.format(multi_keys[r[1]])
+ result[key] = r[0]
+ return result
+
+
+def Main(argv):
+ opts = ProcessArguments(argv)
+ available_machine = TryAcquireMachine(opts.remote)
+ executer = DejagnuExecuter(
+ misc.GetRoot(argv[0])[0], opts.mount, opts.chromeos_root,
+ available_machine._name, opts.board, opts.cleanup)
+ # Return value is a 3- or 4-element tuple
+ # element#1 - exit code
+ # element#2 - stdout
+ # element#3 - stderr
+ # element#4 - exception infor
+ # Some other scripts need these detailed information.
+ ret = (1, '', '')
+ try:
+ executer.SetupTestingDir()
+ executer.PrepareTestingRsaKeys()
+ executer.PrepareTestFiles()
+ executer.PrepareGdb()
+ executer.PrepareGdbserver()
+ executer.MakeCheck()
+ result = executer.ResultValidate()
+ print result
+ if result:
+ ret = (1, result, '')
+ else:
+ ret = (0, '', '')
+
+ except Exception as e:
+ # At least log the exception on console.
+ print e
+ # The #4 element encodes the runtime exception.
+ ret = (1, '', '', 'Exception happened during execution: \n' + str(e))
+ finally:
+ executer.Cleanup()
+ return ret
+
+
+if __name__ == '__main__':
+ retval = Main(sys.argv)[0]
+ sys.exit(retval)
diff --git a/dejagnu/run_dejagnu.py b/dejagnu/run_dejagnu.py
new file mode 100755
index 00000000..b4cbc8f4
--- /dev/null
+++ b/dejagnu/run_dejagnu.py
@@ -0,0 +1,418 @@
+#!/usr/bin/python
+#
+# Copyright 2010 Google Inc. All Rights Reserved.
+"""Tool script for auto dejagnu."""
+
+__author__ = 'shenhan@google.com (Han Shen)'
+
+import getpass
+import optparse
+import os
+from os import path
+import re
+import shutil
+import stat
+import sys
+import tempfile
+import time
+
+import lock_machine
+import tc_enter_chroot
+from cros_utils import command_executer
+from cros_utils import constants
+from cros_utils import logger
+from cros_utils import misc
+
+
+def ProcessArguments(argv):
+ """Processing/validating script arguments."""
+ parser = optparse.OptionParser(description=(
+ 'Launches gcc dejagnu test in chroot for chromeos toolchain, compares '
+ 'the test result with a repository baseline and prints out the result.'),
+ usage='run_dejagnu options')
+ parser.add_option('-c',
+ '--chromeos_root',
+ dest='chromeos_root',
+ help='Required. Specify chromeos root')
+ parser.add_option('-m',
+ '--mount',
+ dest='mount',
+ help=('Specify gcc source to mount instead of "auto". '
+ 'Under "auto" mode, which is the default - gcc is '
+ 'checked out and built automatically at default '
+ 'directories. Under "mount" mode '
+ '- the gcc_source is set to "$chromeos_'
+ 'root/chroot/usr/local/toolchain_root/gcc", which is '
+ 'the mount point for this option value, the '
+ 'gcc-build-dir then is computed as '
+ '"${gcc_source_dir}-build-${ctarget}". In this mode, '
+ 'a complete gcc build must be performed in the '
+ 'computed gcc-build-dir beforehand.'))
+ parser.add_option('-b',
+ '--board',
+ dest='board',
+ help=('Required. Specify board.'))
+ parser.add_option('-r',
+ '--remote',
+ dest='remote',
+ help=('Required. Specify addresses/names of the board, '
+ 'seperate each address/name using comma(\',\').'))
+ parser.add_option('-f',
+ '--flags',
+ dest='flags',
+ help='Optional. Extra run test flags to pass to dejagnu.')
+ parser.add_option('-k',
+ '--keep',
+ dest='keep_intermediate_files',
+ action='store_true',
+ default=False,
+ help=('Optional. Default to false. Do not remove dejagnu '
+ 'intermediate files after test run.'))
+ parser.add_option('--cleanup',
+ dest='cleanup',
+ default=None,
+ help=('Optional. Values to this option could be '
+ '\'mount\' (unmount gcc source and '
+ 'directory directory, '
+ 'only valid when --mount is given), '
+ '\'chroot\' (delete chroot) and '
+ '\'chromeos\' (delete the whole chromeos tree).'))
+ parser.add_option('-t',
+ '--tools',
+ dest='tools',
+ default='gcc,g++',
+ help=('Optional. Specify which tools to check, using '
+ '","(comma) as separator. A typical value would be '
+ '"g++" so that only g++ tests are performed. '
+ 'Defaults to "gcc,g++".'))
+
+ options, args = parser.parse_args(argv)
+
+ if not options.chromeos_root:
+ raise SyntaxError('Missing argument for --chromeos_root.')
+ if not options.remote:
+ raise SyntaxError('Missing argument for --remote.')
+ if not options.board:
+ raise SyntaxError('Missing argument for --board.')
+ if options.cleanup == 'mount' and not options.mount:
+ raise SyntaxError('--cleanup=\'mount\' not valid unless --mount is given.')
+ if options.cleanup and not (
+ options.cleanup == 'mount' or \
+ options.cleanup == 'chroot' or options.cleanup == 'chromeos'):
+ raise ValueError('Invalid option value for --cleanup')
+ if options.cleanup and options.keep_intermediate_files:
+ raise SyntaxError('Only one of --keep and --cleanup could be given.')
+
+ return options
+
+
+class DejagnuExecuter(object):
+ """The class wrapper for dejagnu test executer."""
+
+ def __init__(self, base_dir, mount, chromeos_root, remote, board, flags,
+ keep_intermediate_files, tools, cleanup):
+ self._l = logger.GetLogger()
+ self._chromeos_root = chromeos_root
+ self._chromeos_chroot = path.join(chromeos_root, 'chroot')
+ if mount:
+ self._gcc_source_dir_to_mount = mount
+ self._gcc_source_dir = path.join(constants.MOUNTED_TOOLCHAIN_ROOT, 'gcc')
+ else:
+ self._gcc_source_dir = None
+
+ self._remote = remote
+ self._board = board
+ ## Compute target from board
+ self._target = misc.GetCtargetFromBoard(board, chromeos_root)
+ if not self._target:
+ raise ValueError('Unsupported board "%s"' % board)
+ self._executer = command_executer.GetCommandExecuter()
+ self._flags = flags or ''
+ self._base_dir = base_dir
+ self._tmp_abs = None
+ self._keep_intermediate_files = keep_intermediate_files
+ self._tools = tools.split(',')
+ self._cleanup = cleanup
+
+ def SetupTestingDir(self):
+ self._tmp_abs = tempfile.mkdtemp(
+ prefix='dejagnu_',
+ dir=path.join(self._chromeos_chroot, 'tmp'))
+ self._tmp = self._tmp_abs[len(self._chromeos_chroot):]
+ self._tmp_testing_rsa = path.join(self._tmp, 'testing_rsa')
+ self._tmp_testing_rsa_abs = path.join(self._tmp_abs, 'testing_rsa')
+
+ def MakeCheckString(self):
+ return ' '.join(['check-{0}'.format(t) for t in self._tools if t])
+
+ def CleanupIntermediateFiles(self):
+ if self._tmp_abs and path.isdir(self._tmp_abs):
+ if self._keep_intermediate_files:
+ self._l.LogOutput(
+ 'Your intermediate dejagnu files are kept, you can re-run '
+ 'inside chroot the command:')
+ self._l.LogOutput(
+ ' DEJAGNU={0} make -C {1} {2} RUNTESTFLAGS="--target_board={3} {4}"' \
+ .format(path.join(self._tmp, 'site.exp'), self._gcc_build_dir,
+ self.MakeCheckString(), self._board, self._flags))
+ else:
+ self._l.LogOutput('[Cleanup] - Removing temp dir - {0}'.format(
+ self._tmp_abs))
+ shutil.rmtree(self._tmp_abs)
+
+ def Cleanup(self):
+ if not self._cleanup:
+ return
+
+ # Optionally cleanup mounted diretory, chroot and chromeos tree.
+ if self._cleanup == 'mount' or self._cleanup == 'chroot' or \
+ self._cleanup == 'chromeos':
+ # No exceptions are allowed from this method.
+ try:
+ self._l.LogOutput('[Cleanup] - Unmounting directories ...')
+ self.MountGccSourceAndBuildDir(unmount=True)
+ except:
+ print 'Warning: failed to unmount gcc source/build directory.'
+
+ if self._cleanup == 'chroot' or self._cleanup == 'chromeos':
+ self._l.LogOutput('[Cleanup]: Deleting chroot inside \'{0}\''.format(
+ self._chromeos_root))
+ command = 'cd %s; cros_sdk --delete' % self._chromeos_root
+ rv = self._executer.RunCommand(command)
+ if rv:
+ self._l.LogWarning('Warning - failed to delete chroot.')
+ # Delete .cache - crosbug.com/34956
+ command = 'sudo rm -fr %s' % os.path.join(self._chromeos_root, '.cache')
+ rv = self._executer.RunCommand(command)
+ if rv:
+ self._l.LogWarning('Warning - failed to delete \'.cache\'.')
+
+ if self._cleanup == 'chromeos':
+ self._l.LogOutput('[Cleanup]: Deleting chromeos tree \'{0}\' ...'.format(
+ self._chromeos_root))
+ command = 'rm -fr {0}'.format(self._chromeos_root)
+ rv = self._executer.RunCommand(command)
+ if rv:
+ self._l.LogWarning('Warning - failed to remove chromeos tree.')
+
+ def PrepareTestingRsaKeys(self):
+ if not path.isfile(self._tmp_testing_rsa_abs):
+ shutil.copy(
+ path.join(self._chromeos_root,
+ 'src/scripts/mod_for_test_scripts/ssh_keys/testing_rsa'),
+ self._tmp_testing_rsa_abs)
+ os.chmod(self._tmp_testing_rsa_abs, stat.S_IRUSR)
+
+ def PrepareTestFiles(self):
+ """Prepare site.exp and board exp files."""
+ # Create the boards directory.
+ os.mkdir('%s/boards' % self._tmp_abs)
+
+ # Generate the chromeos.exp file.
+ with open('%s/chromeos.exp.in' % self._base_dir, 'r') as template_file:
+ content = template_file.read()
+ substitutions = dict({
+ '__boardname__': self._board,
+ '__board_hostname__': self._remote,
+ '__tmp_testing_rsa__': self._tmp_testing_rsa,
+ '__tmp_dir__': self._tmp
+ })
+ for pat, sub in substitutions.items():
+ content = content.replace(pat, sub)
+
+ board_file_name = '%s/boards/%s.exp' % (self._tmp_abs, self._board)
+ with open(board_file_name, 'w') as board_file:
+ board_file.write(content)
+
+ # Generate the site file
+ with open('%s/site.exp' % self._tmp_abs, 'w') as site_file:
+ site_file.write('set target_list "%s"\n' % self._board)
+
+ def PrepareGcc(self):
+ if self._gcc_source_dir:
+ self.PrepareGccFromCustomizedPath()
+ else:
+ self.PrepareGccDefault()
+ self._l.LogOutput('Gcc source dir - {0}'.format(self._gcc_source_dir))
+ self._l.LogOutput('Gcc build dir - {0}'.format(self._gcc_top_build_dir))
+
+ def PrepareGccFromCustomizedPath(self):
+ """Prepare gcc source, build directory from mounted source."""
+ # We have these source directories -
+ # _gcc_source_dir
+ # e.g. '/usr/local/toolchain_root/gcc'
+ # _gcc_source_dir_abs
+ # e.g. '/somewhere/chromeos.live/chroot/usr/local/toolchain_root/gcc'
+ # _gcc_source_dir_to_mount
+ # e.g. '/somewhere/gcc'
+ self._gcc_source_dir_abs = path.join(self._chromeos_chroot,
+ self._gcc_source_dir.lstrip('/'))
+ if not path.isdir(self._gcc_source_dir_abs) and \
+ self._executer.RunCommand(
+ 'sudo mkdir -p {0}'.format(self._gcc_source_dir_abs)):
+ raise RuntimeError("Failed to create \'{0}\' inside chroot.".format(
+ self._gcc_source_dir))
+ if not (path.isdir(self._gcc_source_dir_to_mount) and
+ path.isdir(path.join(self._gcc_source_dir_to_mount, 'gcc'))):
+ raise RuntimeError('{0} is not a valid gcc source tree.'.format(
+ self._gcc_source_dir_to_mount))
+
+ # We have these build directories -
+ # _gcc_top_build_dir
+ # e.g. '/usr/local/toolchain_root/gcc-build-x86_64-cros-linux-gnu'
+ # _gcc_top_build_dir_abs
+ # e.g. '/somewhere/chromeos.live/chroo/tusr/local/toolchain_root/
+ # gcc-build-x86_64-cros-linux-gnu'
+ # _gcc_build_dir
+ # e.g. '/usr/local/toolchain_root/gcc-build-x86_64-cros-linux-gnu/gcc'
+ # _gcc_build_dir_to_mount
+ # e.g. '/somewhere/gcc-build-x86_64-cros-linux-gnu'
+ self._gcc_top_build_dir = '{0}-build-{1}'.format(
+ self._gcc_source_dir.rstrip('/'), self._target)
+ self._gcc_build_dir = path.join(self._gcc_top_build_dir, 'gcc')
+ self._gcc_build_dir_to_mount = '{0}-build-{1}'.format(
+ self._gcc_source_dir_to_mount, self._target)
+ self._gcc_top_build_dir_abs = path.join(self._chromeos_chroot,
+ self._gcc_top_build_dir.lstrip('/'))
+ if not path.isdir(self._gcc_top_build_dir_abs) and \
+ self._executer.RunCommand(
+ 'sudo mkdir -p {0}'.format(self._gcc_top_build_dir_abs)):
+ raise RuntimeError('Failed to create \'{0}\' inside chroot.'.format(
+ self._gcc_top_build_dir))
+ if not (path.isdir(self._gcc_build_dir_to_mount) and path.join(
+ self._gcc_build_dir_to_mount, 'gcc')):
+ raise RuntimeError('{0} is not a valid gcc build tree.'.format(
+ self._gcc_build_dir_to_mount))
+
+ # All check passed. Now mount gcc source and build directories.
+ self.MountGccSourceAndBuildDir()
+
+ def PrepareGccDefault(self):
+ """Auto emerging gcc for building purpose only."""
+ ret = self._executer.ChrootRunCommandWOutput(
+ self._chromeos_root, 'equery w cross-%s/gcc' % self._target)[1]
+ ret = path.basename(ret.strip())
+ # ret is expected to be something like 'gcc-4.6.2-r11.ebuild' or
+ # 'gcc-9999.ebuild' parse it.
+ matcher = re.match('((.*)-r\d+).ebuild', ret)
+ if matcher:
+ gccrevision, gccversion = matcher.group(1, 2)
+ elif ret == 'gcc-9999.ebuild':
+ gccrevision = 'gcc-9999'
+ gccversion = 'gcc-9999'
+ else:
+ raise RuntimeError('Failed to get gcc version.')
+
+ gcc_portage_dir = '/var/tmp/portage/cross-%s/%s/work' % (self._target,
+ gccrevision)
+ self._gcc_source_dir = path.join(gcc_portage_dir, gccversion)
+ self._gcc_top_build_dir = (gcc_portage_dir + '/%s-build-%s') % (
+ gccversion, self._target)
+ self._gcc_build_dir = path.join(self._gcc_top_build_dir, 'gcc')
+ gcc_build_dir_abs = path.join(self._chromeos_root, 'chroot',
+ self._gcc_build_dir.lstrip('/'))
+ if not path.isdir(gcc_build_dir_abs):
+ ret = self._executer.ChrootRunCommand(self._chromeos_root, (
+ 'ebuild $(equery w cross-%s/gcc) clean prepare compile' % (
+ self._target)))
+ if ret:
+ raise RuntimeError('ebuild gcc failed.')
+
+ def MakeCheck(self):
+ self.MountGccSourceAndBuildDir()
+ cmd = ('cd %s ; '
+ 'DEJAGNU=%s make %s RUNTESTFLAGS="--target_board=%s %s"' %
+ (self._gcc_build_dir, path.join(self._tmp, 'site.exp'),
+ self.MakeCheckString(), self._board, self._flags))
+ self._executer.ChrootRunCommand(self._chromeos_root, cmd)
+
+ def ValidateFailures(self):
+ validate_failures_py = path.join(
+ self._gcc_source_dir,
+ 'contrib/testsuite-management/validate_failures.py')
+ cmd = 'cd {0} ; {1} --build_dir={0}'.format(self._gcc_top_build_dir,
+ validate_failures_py)
+ self.MountGccSourceAndBuildDir()
+ ret = self._executer.ChrootRunCommandWOutput(self._chromeos_root, cmd)
+ if ret[0] != 0:
+ self._l.LogWarning('*** validate_failures.py exited with non-zero code,'
+ 'please run it manually inside chroot - \n'
+ ' ' + cmd)
+ return ret
+
+ # This method ensures necessary mount points before executing chroot comamnd.
+ def MountGccSourceAndBuildDir(self, unmount=False):
+ mount_points = [tc_enter_chroot.MountPoint(self._gcc_source_dir_to_mount,
+ self._gcc_source_dir_abs,
+ getpass.getuser(), 'ro'),
+ tc_enter_chroot.MountPoint(self._gcc_build_dir_to_mount,
+ self._gcc_top_build_dir_abs,
+ getpass.getuser(), 'rw')]
+ for mp in mount_points:
+ if unmount:
+ if mp.UnMount():
+ raise RuntimeError('Failed to unmount {0}'.format(mp.mount_dir))
+ else:
+ self._l.LogOutput('{0} unmounted successfully.'.format(mp.mount_dir))
+ elif mp.DoMount():
+ raise RuntimeError(
+ 'Failed to mount {0} onto {1}'.format(mp.external_dir,
+ mp.mount_dir))
+ else:
+ self._l.LogOutput('{0} mounted successfully.'.format(mp.mount_dir))
+
+# The end of class DejagnuExecuter
+
+
+def TryAcquireMachine(remotes):
+ available_machine = None
+ for r in remotes.split(','):
+ machine = lock_machine.Machine(r)
+ if machine.TryLock(timeout=300, exclusive=True):
+ available_machine = machine
+ break
+ else:
+ logger.GetLogger().LogWarning(
+ '*** Failed to lock machine \'{0}\'.'.format(r))
+ if not available_machine:
+ raise RuntimeError("Failed to acquire one machine from \'{0}\'.".format(
+ remotes))
+ return available_machine
+
+
+def Main(argv):
+ opts = ProcessArguments(argv)
+ available_machine = TryAcquireMachine(opts.remote)
+ executer = DejagnuExecuter(
+ misc.GetRoot(argv[0])[0], opts.mount, opts.chromeos_root,
+ available_machine._name, opts.board, opts.flags,
+ opts.keep_intermediate_files, opts.tools, opts.cleanup)
+ # Return value is a 3- or 4-element tuple
+ # element#1 - exit code
+ # element#2 - stdout
+ # element#3 - stderr
+ # element#4 - exception infor
+ # Some other scripts need these detailed information.
+ ret = (1, '', '')
+ try:
+ executer.SetupTestingDir()
+ executer.PrepareTestingRsaKeys()
+ executer.PrepareTestFiles()
+ executer.PrepareGcc()
+ executer.MakeCheck()
+ ret = executer.ValidateFailures()
+ except Exception as e:
+ # At least log the exception on console.
+ print e
+ # The #4 element encodes the runtime exception.
+ ret = (1, '', '', 'Exception happened during execution: \n' + str(e))
+ finally:
+ available_machine.Unlock(exclusive=True)
+ executer.CleanupIntermediateFiles()
+ executer.Cleanup()
+ return ret
+
+
+if __name__ == '__main__':
+ retval = Main(sys.argv)[0]
+ sys.exit(retval)
diff --git a/dejagnu/site.exp b/dejagnu/site.exp
new file mode 100644
index 00000000..beaa958d
--- /dev/null
+++ b/dejagnu/site.exp
@@ -0,0 +1 @@
+set target_list "chromeos-machine"
diff --git a/deprecated/build_benchmarks.py b/deprecated/build_benchmarks.py
new file mode 100755
index 00000000..c10c74d1
--- /dev/null
+++ b/deprecated/build_benchmarks.py
@@ -0,0 +1,306 @@
+#!/usr/bin/python2
+#
+# Copyright 2010 Google Inc. All Rights Reserved.
+"""Script to build ChromeOS benchmarks
+
+Inputs:
+ chromeos_root
+ toolchain_root
+ board
+ [chromeos/cpu/<benchname> |
+ chromeos/browser/[pagecycler|sunspider] |
+ chromeos/startup]
+
+ This script assumes toolchain has already been built in toolchain_root.
+
+ chromeos/cpu/<benchname>
+ - Execute bench.py script within chroot to build benchmark
+ - Copy build results to perflab-bin
+
+ chromeos/startup
+ - Call build_chromeos to build image.
+ - Copy image to perflab-bin
+
+ chromeos/browser/*
+ - Call build_chromebrowser to build image with new browser
+ - Copy image to perflab-bin
+
+"""
+
+from __future__ import print_function
+
+__author__ = 'bjanakiraman@google.com (Bhaskar Janakiraman)'
+
+import argparse
+import os
+import sys
+import re
+
+import build_chromeos
+from cros_utils import command_executer
+from cros_utils import logger
+
+KNOWN_BENCHMARKS = [
+ 'chromeos/startup', 'chromeos/browser/pagecycler',
+ 'chromeos/browser/sunspider', 'chromeos/browser/v8bench',
+ 'chromeos/cpu/bikjmp'
+]
+
+# Commands to build CPU benchmarks.
+
+CPU_BUILDCMD_CLEAN = ('cd /usr/local/toolchain_root/third_party/android_bench/'
+ 'v2_0/CLOSED_SOURCE/%s; python ../../scripts/bench.py '
+ '--toolchain=/usr/bin --action=clean;')
+
+CPU_BUILDCMD_BUILD = ('cd /usr/local/toolchain_root/third_party/android_bench/'
+ 'v2_0/CLOSED_SOURCE/%s; python ../../scripts/bench.py '
+ '--toolchain=/usr/bin --add_cflags=%s --add_ldflags=%s '
+ '--makeopts=%s --action=build')
+
+# Common initializations
+cmd_executer = command_executer.GetCommandExecuter()
+
+
+def Usage(parser, message):
+ print('ERROR: %s' % message)
+ parser.print_help()
+ sys.exit(0)
+
+
+def CreateRunsh(destdir, benchmark):
+ """Create run.sh script to run benchmark.
+
+ Perflab needs a run.sh that runs the benchmark.
+ """
+ run_cmd = os.path.dirname(os.path.abspath(__file__)) + '/run_benchmarks.py'
+ contents = '#!/bin/sh\n%s $@ %s\n' % (run_cmd, benchmark)
+ runshfile = destdir + '/run.sh'
+ f = open(runshfile, 'w')
+ f.write(contents)
+ f.close()
+ retval = cmd_executer.RunCommand('chmod +x %s' % runshfile)
+ return retval
+
+
+def CreateBinaryCopy(sourcedir, destdir, copy=None):
+ """Create links in perflab-bin/destdir/* to sourcedir/*, instead of copies
+
+ Args:
+ sourcedir: directory from which to copy.
+ destdir: directory to which to copy.
+ copy: when none, make soft links to everything under sourcedir, otherwise
+ copy all to destdir.
+ TODO: remove this parameter if it's determined that CopyFiles can use
+ rsync -L.
+ """
+ retval = 0
+ # check if sourcedir exists
+ if not os.path.exists(sourcedir):
+ logger.GetLogger().LogError('benchmark results %s does not exist.' %
+ sourcedir)
+ return 1
+
+ # Deal with old copies - save off old ones for now.
+ # Note - if its a link, it doesn't save anything.
+ if os.path.exists(destdir):
+ command = 'rm -rf %s.old' % destdir
+ retval = cmd_executer.RunCommand(command)
+ if retval != 0:
+ return retval
+ command = 'mv %s %s.old' % (destdir, destdir)
+ retval = cmd_executer.RunCommand(command)
+ if retval != 0:
+ return retval
+ os.makedirs(destdir)
+ sourcedir = os.path.abspath(sourcedir)
+ if copy is None:
+ command = 'ln -s %s/* %s' % (sourcedir, destdir)
+ else:
+ command = 'cp -fr %s/* %s' % (sourcedir, destdir)
+ retval = cmd_executer.RunCommand(command)
+ return retval
+
+
+def Main(argv):
+ """Build ChromeOS."""
+ # Common initializations
+
+ parser = argparse.ArgumentParser()
+ parser.add_argument('-c',
+ '--chromeos_root',
+ dest='chromeos_root',
+ help='Target directory for ChromeOS installation.')
+ parser.add_argument('-t',
+ '--toolchain_root',
+ dest='toolchain_root',
+ help='This is obsolete. Do not use.')
+ parser.add_argument('-r',
+ '--third_party',
+ dest='third_party',
+ help='The third_party dir containing android '
+ 'benchmarks.')
+ parser.add_argument('-C',
+ '--clean',
+ dest='clean',
+ action='store_true',
+ default=False,
+ help='Clean up build.')
+ parser.add_argument('-B',
+ '--build',
+ dest='build',
+ action='store_true',
+ default=False,
+ help='Build benchmark.')
+ parser.add_argument('-O',
+ '--only_copy',
+ dest='only_copy',
+ action='store_true',
+ default=False,
+ help='Only copy to perflab-bin - no builds.')
+ parser.add_argument('--workdir',
+ dest='workdir',
+ default='.',
+ help='Work directory for perflab outputs.')
+ parser.add_argument('--clobber_chroot',
+ dest='clobber_chroot',
+ action='store_true',
+ help='Delete the chroot and start fresh',
+ default=False)
+ parser.add_argument('--clobber_board',
+ dest='clobber_board',
+ action='store_true',
+ help='Delete the board and start fresh',
+ default=False)
+ parser.add_argument('--cflags',
+ dest='cflags',
+ default='',
+ help='CFLAGS for the ChromeOS packages')
+ parser.add_argument('--cxxflags',
+ dest='cxxflags',
+ default='',
+ help='CXXFLAGS for the ChromeOS packages')
+ parser.add_argument('--ldflags',
+ dest='ldflags',
+ default='',
+ help='LDFLAGS for the ChromeOS packages')
+ parser.add_argument('--makeopts',
+ dest='makeopts',
+ default='',
+ help='Make options for the ChromeOS packages')
+ parser.add_argument('--board',
+ dest='board',
+ help='ChromeOS target board, e.g. x86-generic')
+ # Leftover positional arguments
+ parser.add_argument('args', nargs='+', help='benchmarks')
+
+ options = parser.parse_args(argv[1:])
+
+ # validate args
+ for arg in options.args:
+ if arg not in KNOWN_BENCHMARKS:
+ logger.GetLogger().LogFatal('Bad benchmark %s specified' % arg)
+
+ if options.chromeos_root is None:
+ Usage(parser, '--chromeos_root must be set')
+
+ if options.board is None:
+ Usage(parser, '--board must be set')
+
+ if options.toolchain_root:
+ logger.GetLogger().LogWarning('--toolchain_root should not be set')
+
+ options.chromeos_root = os.path.expanduser(options.chromeos_root)
+ options.workdir = os.path.expanduser(options.workdir)
+
+ retval = 0
+ if options.third_party:
+ third_party = options.third_party
+ else:
+ third_party = '%s/../../../third_party' % os.path.dirname(__file__)
+ third_party = os.path.realpath(third_party)
+ for arg in options.args:
+ # CPU benchmarks
+ if re.match('chromeos/cpu', arg):
+ comps = re.split('/', arg)
+ benchname = comps[2]
+
+ tec_options = []
+ if third_party:
+ tec_options.append('--third_party=%s' % third_party)
+ if options.clean:
+ retval = cmd_executer.ChrootRunCommand(options.chromeos_root,
+ CPU_BUILDCMD_CLEAN % benchname,
+ tec_options=tec_options)
+ logger.GetLogger().LogErrorIf(retval,
+ 'clean of benchmark %s failed.' % arg)
+ if options.build:
+ retval = cmd_executer.ChrootRunCommand(
+ options.chromeos_root,
+ CPU_BUILDCMD_BUILD % (benchname, options.cflags, options.ldflags,
+ options.makeopts),
+ tec_options=tec_options)
+ logger.GetLogger().LogErrorIf(retval,
+ 'Build of benchmark %s failed.' % arg)
+ if retval == 0 and (options.build or options.only_copy):
+ benchdir = ('%s/android_bench/v2_0/CLOSED_SOURCE/%s' %
+ (third_party, benchname))
+ linkdir = '%s/perflab-bin/%s' % (options.workdir, arg)
+
+ # For cpu/*, we need to copy (not symlinks) of all the contents,
+ # because they are part of the test fixutre.
+ retval = CreateBinaryCopy(benchdir, linkdir, True)
+ if retval != 0:
+ return retval
+ retval = CreateRunsh(linkdir, arg)
+ if retval != 0:
+ return retval
+ elif re.match('chromeos/startup', arg):
+ if options.build:
+ # Clean for chromeos/browser and chromeos/startup is a Nop
+ # since builds are always from scratch.
+ build_args = [
+ os.path.dirname(os.path.abspath(__file__)) + '/build_chromeos.py',
+ '--chromeos_root=' + options.chromeos_root,
+ '--board=' + options.board, '--cflags=' + options.cflags,
+ '--cxxflags=' + options.cxxflags, '--ldflags=' + options.ldflags,
+ '--clobber_board'
+ ]
+ retval = build_chromeos.Main(build_args)
+ logger.GetLogger().LogErrorIf(retval, 'Build of ChromeOS failed.')
+ if retval == 0 and (options.build or options.only_copy):
+ benchdir = '%s/src/build/images/%s/latest' % (options.chromeos_root,
+ options.board)
+ linkdir = '%s/perflab-bin/%s' % (options.workdir, arg)
+ retval = CreateBinaryCopy(benchdir, linkdir)
+ if retval != 0:
+ return retval
+ CreateRunsh(linkdir, arg)
+ if retval != 0:
+ return retval
+ elif re.match('chromeos/browser', arg):
+ if options.build:
+ # For now, re-build os. TBD: Change to call build_browser
+ build_args = [os.path.dirname(os.path.abspath(__file__)) +
+ '/build_chrome_browser.py',
+ '--chromeos_root=' + options.chromeos_root,
+ '--board=' + options.board, '--cflags=' + options.cflags,
+ '--cxxflags=' + options.cxxflags,
+ '--ldflags=' + options.ldflags]
+ retval = build_chromeos.Main(build_args)
+ logger.GetLogger().LogErrorIf(retval, 'Build of ChromeOS failed.')
+ if retval == 0 and (options.build or options.only_copy):
+ benchdir = '%s/src/build/images/%s/latest' % (options.chromeos_root,
+ options.board)
+ linkdir = '%s/perflab-bin/%s' % (options.workdir, arg)
+ retval = CreateBinaryCopy(benchdir, linkdir)
+ if retval != 0:
+ return retval
+ retval = CreateRunsh(linkdir, arg)
+ if retval != 0:
+ return retval
+
+ return 0
+
+
+if __name__ == '__main__':
+ sys.exit(Main(sys.argv))
diff --git a/deprecated/compare_benchmarks.py b/deprecated/compare_benchmarks.py
new file mode 100755
index 00000000..b6a30cad
--- /dev/null
+++ b/deprecated/compare_benchmarks.py
@@ -0,0 +1,176 @@
+#!/usr/bin/python2
+#
+# Copyright 2010 Google Inc. All Rights Reserved.
+"""Script to compare ChromeOS benchmarks
+
+Inputs:
+ <perflab-output directory 1 - baseline>
+ <perflab-output directory 2 - results>
+ --csv - comma separated results
+
+This script doesn't really know much about benchmarks. It simply looks for
+similarly names directories and a results.txt file, and compares
+the results and presents it, along with a geometric mean.
+
+"""
+
+from __future__ import print_function
+
+__author__ = 'bjanakiraman@google.com (Bhaskar Janakiraman)'
+
+import glob
+import math
+import argparse
+import re
+import sys
+
+from cros_utils import command_executer
+
+BENCHDIRS = ('%s/default/default/*/gcc-4.4.3-glibc-2.11.1-grte-k8-opt/ref/*'
+ '/results.txt')
+
+# Common initializations
+cmd_executer = command_executer.GetCommandExecuter()
+
+
+def Usage(parser, message):
+ print('ERROR: %s' % message)
+ parser.print_help()
+ sys.exit(0)
+
+
+def GetStats(in_file):
+ """Return stats from file"""
+ f = open(in_file, 'r')
+ pairs = []
+ for l in f:
+ line = l.strip()
+ # Look for match lines like the following:
+ # METRIC isolated TotalTime_ms (down, scalar) trial_run_0: ['1524.4']
+ # METRIC isolated isolated_walltime (down, scalar) trial_run_0: \
+ # ['167.407445192']
+ m = re.match(r"METRIC\s+isolated\s+(\S+).*\['(\d+(?:\.\d+)?)'\]", line)
+ if not m:
+ continue
+ metric = m.group(1)
+ if re.match(r'isolated_walltime', metric):
+ continue
+
+ value = float(m.group(2))
+ pairs.append((metric, value))
+
+ return dict(pairs)
+
+
+def PrintDash(n):
+ tmpstr = ''
+ for _ in range(n):
+ tmpstr += '-'
+ print(tmpstr)
+
+
+def PrintHeaderCSV(hdr):
+ tmpstr = ''
+ for i in range(len(hdr)):
+ if tmpstr != '':
+ tmpstr += ','
+ tmpstr += hdr[i]
+ print(tmpstr)
+
+
+def PrintHeader(hdr):
+ tot_len = len(hdr)
+ PrintDash(tot_len * 15)
+
+ tmpstr = ''
+ for i in range(len(hdr)):
+ tmpstr += '%15.15s' % hdr[i]
+
+ print(tmpstr)
+ PrintDash(tot_len * 15)
+
+
+def Main(argv):
+ """Compare Benchmarks."""
+ # Common initializations
+
+ parser = argparse.ArgumentParser()
+ parser.add_argument('-c',
+ '--csv',
+ dest='csv_output',
+ action='store_true',
+ default=False,
+ help='Output in csv form.')
+ parser.add_argument('args', nargs='+', help='positional arguments: '
+ '<baseline-output-dir> <results-output-dir>')
+
+ options = parser.parse_args(argv[1:])
+
+ # validate args
+ if len(options.args) != 2:
+ Usage(parser, 'Needs <baseline output dir> <results output dir>')
+
+ base_dir = options.args[0]
+ res_dir = options.args[1]
+
+ # find res benchmarks that have results
+ resbenches_glob = BENCHDIRS % res_dir
+ resbenches = glob.glob(resbenches_glob)
+
+ basebenches_glob = BENCHDIRS % base_dir
+ basebenches = glob.glob(basebenches_glob)
+
+ to_compare = []
+ for resbench in resbenches:
+ tmp = resbench.replace(res_dir, base_dir, 1)
+ if tmp in basebenches:
+ to_compare.append((resbench, tmp))
+
+ for (resfile, basefile) in to_compare:
+ stats = GetStats(resfile)
+ basestats = GetStats(basefile)
+ # Print a header
+ # benchname (remove results.txt), basetime, restime, %speed-up
+ hdr = []
+ benchname = re.split('/', resfile)[-2:-1][0]
+ benchname = benchname.replace('chromeos__', '', 1)
+ hdr.append(benchname)
+ hdr.append('basetime')
+ hdr.append('restime')
+ hdr.append('%speed up')
+ if options.csv_output:
+ PrintHeaderCSV(hdr)
+ else:
+ PrintHeader(hdr)
+
+ # For geomean computations
+ prod = 1.0
+ count = 0
+ for key in stats.keys():
+ if key in basestats.keys():
+ # ignore very small values.
+ if stats[key] < 0.01:
+ continue
+ count = count + 1
+ prod = prod * (stats[key] / basestats[key])
+ speedup = (basestats[key] - stats[key]) / basestats[key]
+ speedup = speedup * 100.0
+ if options.csv_output:
+ print('%s,%f,%f,%f' % (key, basestats[key], stats[key], speedup))
+ else:
+ print('%15.15s%15.2f%15.2f%14.2f%%' % (key, basestats[key],
+ stats[key], speedup))
+
+ prod = math.exp(1.0 / count * math.log(prod))
+ prod = (1.0 - prod) * 100
+ if options.csv_output:
+ print('%s,,,%f' % ('Geomean', prod))
+ else:
+ print('%15.15s%15.15s%15.15s%14.2f%%' % ('Geomean', '', '', prod))
+ print('')
+ return 0
+
+
+if __name__ == '__main__':
+ retval = Main(sys.argv)
+ sys.exit(retval)
diff --git a/deprecated/repo_to_repo_files/binutils-master.json.rtr b/deprecated/repo_to_repo_files/binutils-master.json.rtr
new file mode 100644
index 00000000..e9baf804
--- /dev/null
+++ b/deprecated/repo_to_repo_files/binutils-master.json.rtr
@@ -0,0 +1,22 @@
+{
+ "input": [
+ {
+ "type": "p4",
+ "mappings": [
+ "//depot2/branches/mobile_toolchain_v15_release_branch/gcctools/google_vendor_src_branch/binutils/binutils-2.21/... ..."
+ ],
+ "address": "perforce2:2666"
+ }
+ ],
+ "output": [
+ {
+ "type": "git",
+ "gerrit": true,
+ "ignores": [
+ ".svn",
+ ".git"
+ ],
+ "address": "https://chromium.googlesource.com/chromiumos/third_party/binutils.git"
+ }
+ ]
+} \ No newline at end of file
diff --git a/deprecated/repo_to_repo_files/binutils-mobile_toolchain_v16.json.rtr b/deprecated/repo_to_repo_files/binutils-mobile_toolchain_v16.json.rtr
new file mode 100644
index 00000000..927a9a84
--- /dev/null
+++ b/deprecated/repo_to_repo_files/binutils-mobile_toolchain_v16.json.rtr
@@ -0,0 +1,23 @@
+{
+ "input": [
+ {
+ "type": "p4",
+ "mappings": [
+ "//depot2/branches/mobile_toolchain_v16_release_branch/gcctools/google_vendor_src_branch/binutils/binutils-2.22/... ..."
+ ],
+ "address": "perforce2:2666"
+ }
+ ],
+ "output": [
+ {
+ "gerrit": true,
+ "type": "git",
+ "branch": "mobile_toolchain_v16_release_branch",
+ "ignores": [
+ ".svn",
+ ".git"
+ ],
+ "address": "https://chromium.googlesource.com/chromiumos/third_party/binutils.git"
+ }
+ ]
+} \ No newline at end of file
diff --git a/deprecated/repo_to_repo_files/crosperf.json.rtr b/deprecated/repo_to_repo_files/crosperf.json.rtr
new file mode 100644
index 00000000..95c8f624
--- /dev/null
+++ b/deprecated/repo_to_repo_files/crosperf.json.rtr
@@ -0,0 +1,38 @@
+{
+ "input": [
+ {
+ "type": "p4",
+ "mappings": [
+ "//depot2/gcctools/chromeos/v14/crosperf/... crosperf/...",
+ "//depot2/gcctools/chromeos/v14/utils/__init__.py utils/__init__.py",
+ "//depot2/gcctools/chromeos/v14/utils/colortrans.py utils/colortrans.py",
+ "//depot2/gcctools/chromeos/v14/utils/command_executer.py utils/command_executer.py",
+ "//depot2/gcctools/chromeos/v14/utils/email_sender.py utils/email_sender.py",
+ "//depot2/gcctools/chromeos/v14/utils/file_utils.py utils/file_utils.py",
+ "//depot2/gcctools/chromeos/v14/utils/logger.py utils/logger.py",
+ "//depot2/gcctools/chromeos/v14/utils/misc.py utils/misc.py",
+ "//depot2/gcctools/chromeos/v14/utils/misc_test.py utils/misc_test.py",
+ "//depot2/gcctools/chromeos/v14/utils/stats.py utils/stats.py",
+ "//depot2/gcctools/chromeos/v14/utils/tabulator.py utils/tabulator.py",
+ "//depot2/gcctools/chromeos/v14/utils/tabulator_test.py utils/tabulator_test.py",
+ "//depot2/gcctools/chromeos/v14/utils/timeline.py utils/timeline.py",
+ "//depot2/gcctools/chromeos/v14/utils/timeline_test.py utils/timeline_test.py",
+ "//depot2/gcctools/chromeos/v14/image_chromeos.py image_chromeos.py",
+ "//depot2/gcctools/chromeos/v14/lock_machine.py lock_machine.py",
+ "//depot2/gcctools/chromeos/v14/README README"
+ ],
+ "address": "perforce2:2666"
+ }
+ ],
+ "output": [
+ {
+ "type": "git",
+ "gerrit": true,
+ "ignores": [
+ ".svn",
+ ".git"
+ ],
+ "address": "https://chromium.googlesource.com/chromiumos/third_party/toolchain-utils.git"
+ }
+ ]
+} \ No newline at end of file
diff --git a/deprecated/repo_to_repo_files/gcc-branches_google_4_7.json.rtr b/deprecated/repo_to_repo_files/gcc-branches_google_4_7.json.rtr
new file mode 100644
index 00000000..bc4dadf0
--- /dev/null
+++ b/deprecated/repo_to_repo_files/gcc-branches_google_4_7.json.rtr
@@ -0,0 +1,22 @@
+{
+ "input": [
+ {
+ "type": "svn",
+ "mappings": [
+ "branches/google/gcc-4_7-mobile"
+ ],
+ "address": "svn://gcc.gnu.org/svn/gcc"
+ }
+ ],
+ "output": [
+ {
+ "type": "git",
+ "ignores": [
+ ".svn",
+ ".git"
+ ],
+ "branch": "gcc.gnu.org/branches/google/gcc-4_7-mobile",
+ "address": "https://chromium.googlesource.com/chromiumos/third_party/gcc.git"
+ }
+ ]
+} \ No newline at end of file
diff --git a/deprecated/repo_to_repo_files/gcc-branches_google_main.json.rtr b/deprecated/repo_to_repo_files/gcc-branches_google_main.json.rtr
new file mode 100644
index 00000000..f34063d2
--- /dev/null
+++ b/deprecated/repo_to_repo_files/gcc-branches_google_main.json.rtr
@@ -0,0 +1,22 @@
+{
+ "input": [
+ {
+ "type": "svn",
+ "mappings": [
+ "branches/google/main"
+ ],
+ "address": "svn://gcc.gnu.org/svn/gcc"
+ }
+ ],
+ "output": [
+ {
+ "type": "git",
+ "branch": "gcc.gnu.org/branches/google/main",
+ "ignores": [
+ ".svn",
+ ".git"
+ ],
+ "address": "https://chromium.googlesource.com/chromiumos/third_party/gcc.git"
+ }
+ ]
+} \ No newline at end of file
diff --git a/deprecated/repo_to_repo_files/gcc-master.json.rtr b/deprecated/repo_to_repo_files/gcc-master.json.rtr
new file mode 100644
index 00000000..692ae7c9
--- /dev/null
+++ b/deprecated/repo_to_repo_files/gcc-master.json.rtr
@@ -0,0 +1,23 @@
+{
+ "input": [
+ {
+ "type": "svn",
+ "mappings": [
+ "branches/google/gcc-4_7-mobile"
+ ],
+ "address": "svn://gcc.gnu.org/svn/gcc"
+ }
+ ],
+ "output": [
+ {
+ "gerrit": true,
+ "type": "git",
+ "ignores": [
+ ".svn",
+ ".git"
+ ],
+ "branch": "master",
+ "address": "https://chromium.googlesource.com/chromiumos/third_party/gcc.git"
+ }
+ ]
+} \ No newline at end of file
diff --git a/deprecated/repo_to_repo_files/gdb-master.json.rtr b/deprecated/repo_to_repo_files/gdb-master.json.rtr
new file mode 100644
index 00000000..b67ec6f7
--- /dev/null
+++ b/deprecated/repo_to_repo_files/gdb-master.json.rtr
@@ -0,0 +1,20 @@
+{
+ "input": [
+ {
+ "type": "git",
+ "branch": "202befe3cb3ad0eec07eaaf3f0706e42926b6bbb",
+ "address": "git://sourceware.org/git/gdb.git"
+ }
+ ],
+ "output": [
+ {
+ "type": "git",
+ "ignores": [
+ ".svn",
+ ".git"
+ ],
+ "branch": "chromeos_master",
+ "address": "https://chromium.googlesource.com/chromiumos/third_party/gdb.git"
+ }
+ ]
+} \ No newline at end of file
diff --git a/deprecated/repo_to_repo_files/toolchain-utils.json.rtr b/deprecated/repo_to_repo_files/toolchain-utils.json.rtr
new file mode 100644
index 00000000..1975d6b5
--- /dev/null
+++ b/deprecated/repo_to_repo_files/toolchain-utils.json.rtr
@@ -0,0 +1,28 @@
+{
+ "input": [
+ {
+ "type": "p4",
+ "mappings": [
+ "//depot2/gcctools/chromeos/v14/crosperf/... crosperf/...",
+ "//depot2/gcctools/chromeos/v14/utils/... utils/...",
+ "//depot2/gcctools/chromeos/v14/image_chromeos.py image_chromeos.py",
+ "//depot2/gcctools/chromeos/v14/lock_machine.py lock_machine.py",
+ "//depot2/gcctools/chromeos/v14/README README",
+ "//depot2/gcctools/chromeos/v14/.gitignore .gitignore"
+ ],
+ "address": "perforce2:2666"
+ }
+ ],
+ "output": [
+ {
+ "type": "git",
+ "ignores": [
+ ".svn",
+ ".git",
+ ".pyc",
+ "logs"
+ ],
+ "address": "https://chrome-internal.googlesource.com/chromeos/toolchain-utils.git"
+ }
+ ]
+} \ No newline at end of file
diff --git a/deprecated/report_generator.py b/deprecated/report_generator.py
new file mode 100755
index 00000000..c94b51c2
--- /dev/null
+++ b/deprecated/report_generator.py
@@ -0,0 +1,145 @@
+#!/usr/bin/python2
+#
+# Copyright 2010 Google Inc. All Rights Reserved.
+"""Script to compare a baseline results file to a new results file."""
+
+from __future__ import print_function
+
+__author__ = 'raymes@google.com (Raymes Khoury)'
+
+import sys
+from cros_utils import logger
+from cros_utils import html_tools
+
+PASS = 'pass'
+FAIL = 'fail'
+NOT_EXECUTED = 'not executed'
+
+
+class ResultsReport(object):
+ """Class for holding report results."""
+
+ def __init__(self, report, num_tests_executed, num_passes, num_failures,
+ num_regressions):
+ self.report = report
+ self.num_tests_executed = num_tests_executed
+ self.num_passes = num_passes
+ self.num_failures = num_failures
+ self.num_regressions = num_regressions
+
+ def GetReport(self):
+ return self.report
+
+ def GetNumExecuted(self):
+ return self.num_tests_executed
+
+ def GetNumPasses(self):
+ return self.num_passes
+
+ def GetNumFailures(self):
+ return self.num_failures
+
+ def GetNumRegressions(self):
+ return self.num_regressions
+
+ def GetSummary(self):
+ summary = 'Tests executed: %s\n' % str(self.num_tests_executed)
+ summary += 'Tests Passing: %s\n' % str(self.num_passes)
+ summary += 'Tests Failing: %s\n' % str(self.num_failures)
+ summary += 'Regressions: %s\n' % str(self.num_regressions)
+ return summary
+
+
+def Usage():
+ print('Usage: %s baseline_results new_results' % sys.argv[0])
+ sys.exit(1)
+
+
+def ParseResults(results_filename):
+ results = []
+ try:
+ results_file = open(results_filename, 'rb')
+ for line in results_file:
+ if line.strip() != '':
+ results.append(line.strip().split('\t'))
+ results_file.close()
+ except IOError:
+ logger.GetLogger().LogWarning('Could not open results file: ' +
+ results_filename)
+ return results
+
+
+def GenerateResultsReport(baseline_file, new_result_file):
+ baseline_results = ParseResults(baseline_file)
+ new_results = ParseResults(new_result_file)
+
+ test_status = {}
+
+ for new_result in new_results:
+ new_test_name = new_result[0]
+ new_test_result = new_result[1]
+ test_status[new_test_name] = (new_test_result, NOT_EXECUTED)
+
+ for baseline_result in baseline_results:
+ baseline_test_name = baseline_result[0]
+ baseline_test_result = baseline_result[1]
+ if baseline_test_name in test_status:
+ new_test_result = test_status[baseline_test_name][0]
+ test_status[baseline_test_name] = (new_test_result, baseline_test_result)
+ else:
+ test_status[baseline_test_name] = (NOT_EXECUTED, baseline_test_result)
+
+ regressions = []
+ for result in test_status.keys():
+ if test_status[result][0] != test_status[result][1]:
+ regressions.append(result)
+
+ num_tests_executed = len(new_results)
+ num_regressions = len(regressions)
+ num_passes = 0
+ num_failures = 0
+ for result in new_results:
+ if result[1] == PASS:
+ num_passes += 1
+ else:
+ num_failures += 1
+
+ report = html_tools.GetPageHeader('Test Summary')
+ report += html_tools.GetHeader('Test Summary')
+ report += html_tools.GetListHeader()
+ report += html_tools.GetListItem('Tests executed: ' + str(num_tests_executed))
+ report += html_tools.GetListItem('Passes: ' + str(num_passes))
+ report += html_tools.GetListItem('Failures: ' + str(num_failures))
+ report += html_tools.GetListItem('Regressions: ' + str(num_regressions))
+ report += html_tools.GetListFooter()
+ report += html_tools.GetHeader('Regressions', 2)
+ report += html_tools.GetTableHeader(['Test name', 'Expected result',
+ 'Actual result'])
+
+ for regression in regressions:
+ report += html_tools.GetTableRow([regression[:150], test_status[regression][
+ 1], test_status[regression][0]])
+ report += '\n'
+ report += html_tools.GetTableFooter()
+ report += html_tools.GetHeader('All Tests', 2)
+ report += html_tools.GetTableHeader(['Test name', 'Expected result',
+ 'Actual result'])
+ for result in test_status.keys():
+ report += html_tools.GetTableRow([result[:150], test_status[result][1],
+ test_status[result][0]])
+ report += '\n'
+ report += html_tools.GetTableFooter()
+ report += html_tools.GetFooter()
+ return ResultsReport(report, num_tests_executed, num_passes, num_failures,
+ num_regressions)
+
+
+def Main(argv):
+ if len(argv) < 2:
+ Usage()
+
+ print(GenerateResultsReport(argv[1], argv[2])[0])
+
+
+if __name__ == '__main__':
+ Main(sys.argv)
diff --git a/deprecated/run_benchmarks.py b/deprecated/run_benchmarks.py
new file mode 100755
index 00000000..4818750a
--- /dev/null
+++ b/deprecated/run_benchmarks.py
@@ -0,0 +1,245 @@
+#!/usr/bin/python2
+#
+# Copyright 2010 Google Inc. All Rights Reserved.
+"""Script to run ChromeOS benchmarks
+
+Inputs:
+ chromeos_root
+ board
+ [chromeos/cpu/<benchname>|
+ chromeos/browser/[pagecycler|sunspider]|
+ chromeos/startup]
+ hostname/IP of Chromeos machine
+
+ chromeos/cpu/<benchname>
+ - Read run script rules from bench.mk perflab-bin, copy benchmark to
+ host, run
+ and return results.
+
+ chromeos/startup
+ - Re-image host with image in perflab-bin
+ - Call run_tests to run startup test, gather results.
+ - Restore host back to what it was.
+
+ chromeos/browser/*
+ - Call build_chromebrowser to build image with new browser
+ - Copy image to perflab-bin
+
+"""
+
+from __future__ import print_function
+
+__author__ = 'bjanakiraman@google.com (Bhaskar Janakiraman)'
+
+import argparse
+import os
+import re
+import sys
+
+import image_chromeos
+import run_tests
+from cros_utils import command_executer
+from cros_utils import logger
+
+# pylint: disable=anomalous-backslash-in-string
+
+KNOWN_BENCHMARKS = [
+ 'chromeos/startup', 'chromeos/browser/pagecycler',
+ 'chromeos/browser/sunspider', 'chromeos/browser/v8bench',
+ 'chromeos/cpu/bikjmp'
+]
+
+name_map = {
+ 'pagecycler': 'Page',
+ 'sunspider': 'SunSpider',
+ 'v8bench': 'V8Bench',
+ 'startup': 'BootPerfServer'
+}
+
+# Run command template
+
+# Common initializations
+cmd_executer = command_executer.GetCommandExecuter()
+
+
+def Usage(parser, message):
+ print('ERROR: %s' % message)
+ parser.print_help()
+ sys.exit(0)
+
+
+def RunBrowserBenchmark(chromeos_root, board, bench, machine):
+ """Run browser benchmarks.
+
+ Args:
+ chromeos_root: ChromeOS src dir
+ board: Board being tested
+ bench: Name of benchmark (chromeos/browser/*)
+ machine: name of chromeos machine
+ """
+ benchname = re.split('/', bench)[2]
+ benchname = name_map[benchname]
+ ret = run_tests.RunRemoteTests(chromeos_root, machine, board, benchname)
+ return ret
+
+
+def RunStartupBenchmark(chromeos_root, board, machine):
+ """Run browser benchmarks.
+
+ Args:
+ chromeos_root: ChromeOS src dir
+ board: Board being tested
+ machine: name of chromeos machine
+ """
+ benchname = 'startup'
+ benchname = name_map[benchname]
+ ret = run_tests.RunRemoteTests(chromeos_root, machine, board, benchname)
+ return ret
+
+
+def RunCpuBenchmark(chromeos_root, bench, workdir, machine):
+ """Run CPU benchmark.
+
+ Args:
+ chromeos_root: ChromeOS src dir
+ bench: Name of benchmark
+ workdir: directory containing benchmark directory
+ machine: name of chromeos machine
+
+ Returns:
+ status: 0 on success
+ """
+
+ benchname = re.split('/', bench)[2]
+ benchdir = '%s/%s' % (workdir, benchname)
+
+ # Delete any existing run directories on machine.
+ # Since this has exclusive access to the machine,
+ # we do not worry about duplicates.
+ args = 'rm -rf /tmp/%s' % benchname
+ retv = cmd_executer.CrosRunCommand(args,
+ chromeos_root=chromeos_root,
+ machine=machine)
+ if retv:
+ return retv
+
+ # Copy benchmark directory.
+ retv = cmd_executer.CopyFiles(benchdir,
+ '/tmp/' + benchname,
+ chromeos_root=chromeos_root,
+ dest_machine=machine,
+ dest_cros=True)
+ if retv:
+ return retv
+
+ # Parse bench.mk to extract run flags.
+
+ benchmk_file = open('%s/bench.mk' % benchdir, 'r')
+ for line in benchmk_file:
+ line.rstrip()
+ if re.match('^run_cmd', line):
+ line = re.sub('^run_cmd.*\${PERFLAB_PATH}', './out', line)
+ line = re.sub('\${PERFLAB_INPUT}', './data', line)
+ run_cmd = line
+ break
+
+ # Execute on remote machine
+ # Capture output and process it.
+ sshargs = "'cd /tmp/%s;" % benchname
+ sshargs += "time -p %s'" % run_cmd
+ cmd_executer.CrosRunCommand(sshargs,
+ chromeos_root=chromeos_root,
+ machine=machine)
+
+ return retv
+
+
+def Main(argv):
+ """Build ChromeOS."""
+ # Common initializations
+
+ parser = argparse.ArgumentParser()
+ parser.add_argument('-c',
+ '--chromeos_root',
+ dest='chromeos_root',
+ help='Target directory for ChromeOS installation.')
+ parser.add_argument('-m',
+ '--machine',
+ dest='machine',
+ help='The chromeos host machine.')
+ parser.add_argument('--workdir',
+ dest='workdir',
+ default='./perflab-bin',
+ help='Work directory for perflab outputs.')
+ parser.add_argument('--board',
+ dest='board',
+ help='ChromeOS target board, e.g. x86-generic')
+ parser.add_argumen('args', margs='+', help='Benchmarks to run.')
+
+ options = parser.parse_args(argv[1:])
+
+ # validate args
+ for arg in options.args:
+ if arg not in KNOWN_BENCHMARKS:
+ logger.GetLogger().LogFatal('Bad benchmark %s specified' % arg)
+
+ if options.chromeos_root is None:
+ Usage(parser, '--chromeos_root must be set')
+
+ if options.board is None:
+ Usage(parser, '--board must be set')
+
+ if options.machine is None:
+ Usage(parser, '--machine must be set')
+
+ found_err = 0
+ retv = 0
+ for arg in options.args:
+ # CPU benchmarks
+ comps = re.split('/', arg)
+ if re.match('chromeos/cpu', arg):
+ benchname = comps[2]
+ print('RUNNING %s' % benchname)
+ retv = RunCpuBenchmark(options.chromeos_root, arg, options.workdir,
+ options.machine)
+ if not found_err:
+ found_err = retv
+ elif re.match('chromeos/startup', arg):
+ benchname = comps[1]
+ image_args = [
+ os.path.dirname(os.path.abspath(__file__)) + '/image_chromeos.py',
+ '--chromeos_root=' + options.chromeos_root,
+ '--remote=' + options.machine, '--image=' + options.workdir + '/' +
+ benchname + '/chromiumos_image.bin'
+ ]
+ logger.GetLogger().LogOutput('Reimaging machine %s' % options.machine)
+ image_chromeos.Main(image_args)
+
+ logger.GetLogger().LogOutput('Running %s' % arg)
+ retv = RunStartupBenchmark(options.chromeos_root, options.board,
+ options.machine)
+ if not found_err:
+ found_err = retv
+ elif re.match('chromeos/browser', arg):
+ benchname = comps[2]
+ image_args = [
+ os.path.dirname(os.path.abspath(__file__)) + '/image_chromeos.py',
+ '--chromeos_root=' + options.chromeos_root,
+ '--remote=' + options.machine, '--image=' + options.workdir + '/' +
+ benchname + '/chromiumos_image.bin'
+ ]
+ logger.GetLogger().LogOutput('Reimaging machine %s' % options.machine)
+ image_chromeos.Main(image_args)
+
+ logger.GetLogger().LogOutput('Running %s' % arg)
+ retv = RunBrowserBenchmark(options.chromeos_root, options.board, arg,
+ options.machine)
+ if not found_err:
+ found_err = retv
+
+ return found_err
+
+
+if __name__ == '__main__':
+ retval = Main(sys.argv)
+ sys.exit(retval)
diff --git a/deprecated/sheriff_rotation.py b/deprecated/sheriff_rotation.py
new file mode 100755
index 00000000..f6873077
--- /dev/null
+++ b/deprecated/sheriff_rotation.py
@@ -0,0 +1,130 @@
+#!/usr/bin/python2
+#
+# Copyright 2010 Google Inc. All Rights Reserved.
+"""Script to rotate the weekly team sheriff.
+
+This script determines who the next sheriff is, updates the file
+appropriately and sends out email notifying the team.
+"""
+
+from __future__ import print_function
+
+__author__ = 'asharif@google.com (Ahmad Sharif)'
+
+import argparse
+import datetime
+import os
+import sys
+
+from cros_utils import constants
+from cros_utils import email_sender
+
+
+class SheriffHandler(object):
+ """Main class for handling sheriff rotations."""
+
+ SHERIFF_FILE = os.path.join(constants.CROSTC_WORKSPACE, 'sheriffs.txt')
+ SUBJECT = 'You (%s) are the sheriff for the week: %s - %s'
+ BODY = ('Please see instructions here: '
+ 'https://sites.google.com/a/google.com/chromeos-toolchain-team-home2'
+ '/home/sheriff-s-corner/sheriff-duties')
+
+ def GetWeekInfo(self, day=datetime.datetime.today()):
+ """Return week_start, week_end."""
+
+ epoch = datetime.datetime.utcfromtimestamp(0)
+ delta_since_epoch = day - epoch
+
+ abs_days = abs(delta_since_epoch.days) - 2 # To get it to start from Sat.
+ day_of_week = abs_days % 7
+
+ week_begin = day - datetime.timedelta(days=day_of_week)
+ week_end = day + datetime.timedelta(days=(6 - day_of_week))
+
+ strftime_format = '%A, %B %d %Y'
+
+ return (week_begin.strftime(strftime_format),
+ week_end.strftime(strftime_format))
+
+ def GetCurrentSheriff(self):
+ """Return the current sheriff."""
+ return self.ReadSheriffsAsList()[0]
+
+ def ReadSheriffsAsList(self):
+ """Return the sheriff file contents."""
+ contents = ''
+ with open(self.SHERIFF_FILE, 'r') as f:
+ contents = f.read()
+ return contents.splitlines()
+
+ def WriteSheriffsAsList(self, to_write):
+ with open(self.SHERIFF_FILE, 'w') as f:
+ f.write('\n'.join(to_write))
+
+ def GetRotatedSheriffs(self, num_rotations=1):
+ """Return the sheriff file contents."""
+ sheriff_list = self.ReadSheriffsAsList()
+
+ new_sheriff_list = []
+ num_rotations = num_rotations % len(sheriff_list)
+ new_sheriff_list = (
+ sheriff_list[num_rotations:] + sheriff_list[:num_rotations])
+ return new_sheriff_list
+
+ def Email(self):
+ es = email_sender.EmailSender()
+ current_sheriff = self.GetCurrentSheriff()
+ week_start, week_end = self.GetWeekInfo()
+ subject = self.SUBJECT % (current_sheriff, week_start, week_end)
+ es.SendEmail([current_sheriff],
+ subject,
+ self.BODY,
+ email_from=os.path.basename(__file__),
+ email_cc=['c-compiler-chrome'])
+
+
+def Main(argv):
+ parser = argparse.ArgumentParser()
+ parser.add_argument('-e',
+ '--email',
+ dest='email',
+ action='store_true',
+ help='Email the sheriff.')
+ parser.add_argument('-r',
+ '--rotate',
+ dest='rotate',
+ help='Print sheriffs after n rotations.')
+ parser.add_argument('-w',
+ '--write',
+ dest='write',
+ action='store_true',
+ default=False,
+ help='Wrote rotated contents to the sheriff file.')
+
+ options = parser.parse_args(argv)
+
+ sheriff_handler = SheriffHandler()
+
+ current_sheriff = sheriff_handler.GetCurrentSheriff()
+ week_start, week_end = sheriff_handler.GetWeekInfo()
+
+ print('Current sheriff: %s (%s - %s)' % (current_sheriff, week_start,
+ week_end))
+
+ if options.email:
+ sheriff_handler.Email()
+
+ if options.rotate:
+ rotated_sheriffs = sheriff_handler.GetRotatedSheriffs(int(options.rotate))
+ print('Rotated sheriffs (after %s rotations)' % options.rotate)
+ print('\n'.join(rotated_sheriffs))
+ if options.write:
+ sheriff_handler.WriteSheriffsAsList(rotated_sheriffs)
+ print('Rotated sheriffs written to file.')
+
+ return 0
+
+
+if __name__ == '__main__':
+ retval = Main(sys.argv[1:])
+ sys.exit(retval)
diff --git a/deprecated/summarize_results.py b/deprecated/summarize_results.py
new file mode 100755
index 00000000..67d7e9a4
--- /dev/null
+++ b/deprecated/summarize_results.py
@@ -0,0 +1,145 @@
+#!/usr/bin/python2
+#
+# Copyright 2010 Google Inc. All Rights Reserved.
+"""Script to summarize the results of various log files."""
+
+from __future__ import print_function
+
+__author__ = 'raymes@google.com (Raymes Khoury)'
+
+from cros_utils import command_executer
+import os
+import sys
+import re
+
+RESULTS_DIR = 'results'
+RESULTS_FILE = RESULTS_DIR + '/results.csv'
+
+# pylint: disable=anomalous-backslash-in-string
+
+class DejaGNUSummarizer(object):
+ """DejaGNU Summarizer Class"""
+
+ def __int__(self):
+ pass
+
+ def Matches(self, log_file):
+ for log_line in log_file:
+ if log_line.find("""tests ===""") > -1:
+ return True
+ return False
+
+ def Summarize(self, log_file, filename):
+ result = ''
+ pass_statuses = ['PASS', 'XPASS']
+ fail_statuses = ['FAIL', 'XFAIL', 'UNSUPPORTED']
+ name_count = {}
+ for line in log_file:
+ line = line.strip().split(':')
+ if len(line) > 1 and (line[0] in pass_statuses or
+ line[0] in fail_statuses):
+ test_name = (':'.join(line[1:])).replace('\t', ' ').strip()
+ count = name_count.get(test_name, 0) + 1
+ name_count[test_name] = count
+ test_name = '%s (%s)' % (test_name, str(count))
+ if line[0] in pass_statuses:
+ test_result = 'pass'
+ else:
+ test_result = 'fail'
+ result += '%s\t%s\t%s\n' % (test_name, test_result, filename)
+ return result
+
+
+class PerflabSummarizer(object):
+ """Perflab Summarizer class"""
+
+ def __init__(self):
+ pass
+
+ def Matches(self, log_file):
+ p = re.compile('METRIC isolated \w+')
+ for log_line in log_file:
+ if p.search(log_line):
+ return True
+ return False
+
+ def Summarize(self, log_file, filename):
+ result = ''
+ p = re.compile("METRIC isolated (\w+) .*\['(.*?)'\]")
+ log_file_lines = '\n'.join(log_file)
+ matches = p.findall(log_file_lines)
+ for match in matches:
+ if len(match) != 2:
+ continue
+ result += '%s\t%s\t%s\n' % (match[0], match[1], filename)
+ return result
+
+
+class AutoTestSummarizer(object):
+ """AutoTest Summarizer class"""
+
+ def __init__(self):
+ pass
+
+ def Matches(self, log_file):
+ for log_line in log_file:
+ if log_line.find("""Installing autotest on""") > -1:
+ return True
+ return False
+
+ def Summarize(self, log_file, filename):
+ result = ''
+ pass_statuses = ['PASS']
+ fail_statuses = ['FAIL']
+ for line in log_file:
+ line = line.strip().split(' ')
+ if len(line) > 1 and (line[-1].strip() in pass_statuses or
+ line[-1].strip() in fail_statuses):
+ test_name = (line[0].strip())
+ if line[-1].strip() in pass_statuses:
+ test_result = 'pass'
+ else:
+ test_result = 'fail'
+ result += '%s\t%s\t%s\n' % (test_name, test_result, filename)
+ return result
+
+
+def Usage():
+ print('Usage: %s log_file' % sys.argv[0])
+ sys.exit(1)
+
+
+def SummarizeFile(filename):
+ summarizers = [DejaGNUSummarizer(), AutoTestSummarizer(), PerflabSummarizer()]
+ inp = open(filename, 'rb')
+ executer = command_executer.GetCommandExecuter()
+ for summarizer in summarizers:
+ inp.seek(0)
+ if summarizer.Matches(inp):
+ executer.CopyFiles(filename, RESULTS_DIR, recursive=False)
+ inp.seek(0)
+ result = summarizer.Summarize(inp, os.path.basename(filename))
+ inp.close()
+ return result
+ inp.close()
+ return None
+
+
+def Main(argv):
+ if len(argv) != 2:
+ Usage()
+ filename = argv[1]
+
+ executer = command_executer.GetCommandExecuter()
+ executer.RunCommand('mkdir -p %s' % RESULTS_DIR)
+ summary = SummarizeFile(filename)
+ if summary is not None:
+ output = open(RESULTS_FILE, 'a')
+ output.write(summary.strip() + '\n')
+ output.close()
+ return 0
+
+
+if __name__ == '__main__':
+ retval = Main(sys.argv)
+ sys.exit(retval)
diff --git a/fdo_scripts/divide_and_merge_profiles.py b/fdo_scripts/divide_and_merge_profiles.py
new file mode 100755
index 00000000..99155852
--- /dev/null
+++ b/fdo_scripts/divide_and_merge_profiles.py
@@ -0,0 +1,140 @@
+#!/usr/bin/python
+#
+# Copyright 2011 Google Inc. All Rights Reserved.
+"""Script to divide and merge profiles."""
+
+import copy
+import optparse
+import os
+import pickle
+import re
+import sys
+import tempfile
+
+import build_chrome_browser
+import lock_machine
+import run_tests
+from cros_utils import command_executer
+from cros_utils import logger
+
+
+class ProfileMerger:
+
+ def __init__(self, inputs, output, chunk_size, merge_program, multipliers):
+ self._inputs = inputs
+ self._output = output
+ self._chunk_size = chunk_size
+ self._merge_program = merge_program
+ self._multipliers = multipliers
+ self._ce = command_executer.GetCommandExecuter()
+ self._l = logger.GetLogger()
+
+ def _GetFilesSetForInputDir(self, input_dir):
+ output_file = tempfile.mktemp()
+ command = "find %s -name '*.gcda' -o -name '*.imports' > %s" % (input_dir,
+ output_file)
+ self._ce.RunCommand(command)
+ files = open(output_file, 'r').read()
+ files_set = set([])
+ for f in files.splitlines():
+ stripped_file = f.replace(input_dir, '', 1)
+ stripped_file = stripped_file.lstrip('/')
+ files_set.add(stripped_file)
+ return files_set
+
+ def _PopulateFilesSet(self):
+ self._files_set = set([])
+ for i in self._inputs:
+ current_files_set = self._GetFilesSetForInputDir(i)
+ self._files_set.update(current_files_set)
+
+ def _GetSubset(self):
+ ret = []
+ for i in range(self._chunk_size):
+ if not self._files_set:
+ break
+ ret.append(self._files_set.pop())
+ return ret
+
+ def _CopyFilesTree(self, input_dir, files, output_dir):
+ for f in files:
+ src_file = os.path.join(input_dir, f)
+ dst_file = os.path.join(output_dir, f)
+ if not os.path.isdir(os.path.dirname(dst_file)):
+ command = 'mkdir -p %s' % os.path.dirname(dst_file)
+ self._ce.RunCommand(command)
+ command = 'cp %s %s' % (src_file, dst_file)
+ self._ce.RunCommand(command)
+
+ def _DoChunkMerge(self, current_files):
+ temp_dirs = []
+ for i in self._inputs:
+ temp_dir = tempfile.mkdtemp()
+ temp_dirs.append(temp_dir)
+ self._CopyFilesTree(i, current_files, temp_dir)
+ # Now do the merge.
+ command = ('%s --inputs=%s --output=%s' %
+ (self._merge_program, ','.join(temp_dirs), self._output))
+ if self._multipliers:
+ command = ('%s --multipliers=%s' % (command, self._multipliers))
+ ret = self._ce.RunCommand(command)
+ assert ret == 0, '%s command failed!' % command
+ for temp_dir in temp_dirs:
+ command = 'rm -rf %s' % temp_dir
+ self._ce.RunCommand(command)
+
+ def DoMerge(self):
+ self._PopulateFilesSet()
+ while True:
+ current_files = self._GetSubset()
+ if not current_files:
+ break
+ self._DoChunkMerge(current_files)
+
+
+def Main(argv):
+ """The main function."""
+ # Common initializations
+ ### command_executer.InitCommandExecuter(True)
+ command_executer.InitCommandExecuter()
+ l = logger.GetLogger()
+ ce = command_executer.GetCommandExecuter()
+ parser = optparse.OptionParser()
+ parser.add_option('--inputs',
+ dest='inputs',
+ help='Comma-separated input profile directories to merge.')
+ parser.add_option('--output', dest='output', help='Output profile directory.')
+ parser.add_option('--chunk_size',
+ dest='chunk_size',
+ default='50',
+ help='Chunk size to divide up the profiles into.')
+ parser.add_option('--merge_program',
+ dest='merge_program',
+ default='/home/xur/bin/profile_merge_v15.par',
+ help='Merge program to use to do the actual merge.')
+ parser.add_option('--multipliers',
+ dest='multipliers',
+ help='multipliers to use when merging. (optional)')
+
+ options, _ = parser.parse_args(argv)
+
+ if not all([options.inputs, options.output]):
+ l.LogError('Must supply --inputs and --output')
+ return 1
+
+ try:
+ pm = ProfileMerger(
+ options.inputs.split(','), options.output, int(options.chunk_size),
+ options.merge_program, options.multipliers)
+ pm.DoMerge()
+ retval = 0
+ except:
+ retval = 1
+ finally:
+ print 'My work is done...'
+ return retval
+
+
+if __name__ == '__main__':
+ retval = Main(sys.argv)
+ sys.exit(retval)
diff --git a/fdo_scripts/divide_and_merge_profiles_test.py b/fdo_scripts/divide_and_merge_profiles_test.py
new file mode 100755
index 00000000..27141df3
--- /dev/null
+++ b/fdo_scripts/divide_and_merge_profiles_test.py
@@ -0,0 +1,127 @@
+#!/usr/bin/python
+#
+# Copyright 2010 Google Inc. All Rights Reserved.
+
+__author__ = 'asharif@google.com (Ahmad Sharif)'
+
+import os
+import random
+import shutil
+import tempfile
+import unittest
+
+from cros_utils import command_executer
+from cros_utils import misc
+
+
+class DivideAndMergeProfilesTest(unittest.TestCase):
+
+ def tearDown(self):
+ shutil.rmtree(self._program_dir)
+ for profile_dir in self._profile_dirs:
+ shutil.rmtree(profile_dir)
+
+ def setUp(self):
+ self._ce = command_executer.GetCommandExecuter()
+ self._program_dir = tempfile.mkdtemp()
+ self._writeProgram()
+ self._writeMakefile()
+ with misc.WorkingDirectory(self._program_dir):
+ self._ce.RunCommand('make')
+ num_profile_dirs = 2
+ self._profile_dirs = []
+ for i in range(num_profile_dirs):
+ profile_dir = tempfile.mkdtemp()
+ command = ('GCOV_PREFIX_STRIP=%s GCOV_PREFIX=$(/bin/pwd) '
+ ' %s/program' % (profile_dir.count('/'), self._program_dir))
+ with misc.WorkingDirectory(profile_dir):
+ self._ce.RunCommand(command)
+ self._profile_dirs.append(profile_dir)
+ self._merge_program = '/home/build/static/projects/crosstool/profile-merge/v14.5/profile_merge.par'
+
+ def _writeMakefile(self):
+ makefile_contents = """
+CC = gcc
+
+CFLAGS = -fprofile-generate
+
+SRCS=$(wildcard *.c)
+
+OBJS=$(SRCS:.c=.o)
+
+all: program
+
+program: $(OBJS)
+ $(CC) -o $@ $^ $(CFLAGS)
+
+%.o: %.c
+ $(CC) -c -o $@ $^ $(CFLAGS)"""
+
+ makefile = os.path.join(self._program_dir, 'Makefile')
+ with open(makefile, 'w') as f:
+ print >> f, makefile_contents
+
+ def _writeProgram(self, num_files=100):
+ for i in range(num_files):
+ current_file = os.path.join(self._program_dir, '%s.c' % i)
+ with open(current_file, 'w') as f:
+ if i != num_files - 1:
+ print >> f, 'extern void foo%s();' % (i + 1)
+ print >> f, 'void foo%s(){foo%s();}' % (i, i + 1)
+ else:
+ print >> f, "void foo%s(){printf(\"\");}" % i
+ if i == 0:
+ print >> f, 'int main(){foo%s(); return 0;}' % i
+
+ def testMerge(self):
+ reference_output = self._getReferenceOutput()
+ my_output = self._getMyOutput()
+
+ ret = self._diffOutputs(reference_output, my_output)
+ shutil.rmtree(my_output)
+ shutil.rmtree(reference_output)
+ self.assertTrue(ret == 0)
+
+ def _diffOutputs(self, reference, mine):
+ command = 'diff -uNr %s %s' % (reference, mine)
+ return self._ce.RunCommand(command)
+
+ def _getMyOutput(self, args=''):
+ my_output = tempfile.mkdtemp()
+ my_merge_program = os.path.join(
+ os.path.dirname(__file__), 'divide_and_merge_profiles.py')
+ command = ('python %s --inputs=%s --output=%s '
+ '--chunk_size=10 '
+ '--merge_program=%s '
+ '%s' % (my_merge_program, ','.join(self._profile_dirs),
+ my_output, self._merge_program, args))
+ self._ce.RunCommand(command)
+ return my_output
+
+ def _getReferenceOutput(self, args=''):
+ # First do a regular merge.
+ reference_output = tempfile.mkdtemp()
+ command = ('%s --inputs=%s --output=%s %s' %
+ (self._merge_program, ','.join(self._profile_dirs),
+ reference_output, args))
+ self._ce.RunCommand(command)
+ return reference_output
+
+ def testMergeWithMultipliers(self):
+ num_profiles = len(self._profile_dirs)
+ multipliers = [str(random.randint(0, num_profiles)) \
+ for _ in range(num_profiles)]
+ args = '--multipliers=%s' % ','.join(multipliers)
+
+ reference_output = self._getReferenceOutput(args)
+ my_output = self._getMyOutput(args)
+
+ ret = self._diffOutputs(reference_output, my_output)
+
+ shutil.rmtree(my_output)
+ shutil.rmtree(reference_output)
+ self.assertTrue(ret == 0)
+
+
+if __name__ == '__main__':
+ unittest.main()
diff --git a/fdo_scripts/profile_cycler.py b/fdo_scripts/profile_cycler.py
new file mode 100755
index 00000000..7715612f
--- /dev/null
+++ b/fdo_scripts/profile_cycler.py
@@ -0,0 +1,199 @@
+#!/usr/bin/python
+#
+# Copyright 2011 Google Inc. All Rights Reserved.
+"""Script to profile a page cycler, and get it back to the host."""
+
+import copy
+import optparse
+import os
+import pickle
+import re
+import sys
+import tempfile
+import time
+
+import build_chrome_browser
+import cros_login
+import lock_machine
+import run_tests
+from cros_utils import command_executer
+from cros_utils import logger
+from cros_utils import misc
+
+
+class CyclerProfiler:
+ REMOTE_TMP_DIR = '/tmp'
+
+ def __init__(self, chromeos_root, board, cycler, profile_dir, remote):
+ self._chromeos_root = chromeos_root
+ self._cycler = cycler
+ self._profile_dir = profile_dir
+ self._remote = remote
+ self._board = board
+ self._ce = command_executer.GetCommandExecuter()
+ self._l = logger.GetLogger()
+
+ self._gcov_prefix = os.path.join(self.REMOTE_TMP_DIR, self._GetProfileDir())
+
+ def _GetProfileDir(self):
+ return misc.GetCtargetFromBoard(self._board, self._chromeos_root)
+
+ def _CopyTestData(self):
+ page_cycler_dir = os.path.join(self._chromeos_root, 'distfiles', 'target',
+ 'chrome-src-internal', 'src', 'data',
+ 'page_cycler')
+ if not os.path.isdir(page_cycler_dir):
+ raise RuntimeError('Page cycler dir %s not found!' % page_cycler_dir)
+ self._ce.CopyFiles(page_cycler_dir,
+ os.path.join(self.REMOTE_TMP_DIR, 'page_cycler'),
+ dest_machine=self._remote,
+ chromeos_root=self._chromeos_root,
+ recursive=True,
+ dest_cros=True)
+
+ def _PrepareTestData(self):
+ # chmod files so everyone can read them.
+ command = ('cd %s && find page_cycler -type f | xargs chmod a+r' %
+ self.REMOTE_TMP_DIR)
+ self._ce.CrosRunCommand(command,
+ chromeos_root=self._chromeos_root,
+ machine=self._remote)
+ command = ('cd %s && find page_cycler -type d | xargs chmod a+rx' %
+ self.REMOTE_TMP_DIR)
+ self._ce.CrosRunCommand(command,
+ chromeos_root=self._chromeos_root,
+ machine=self._remote)
+
+ def _CopyProfileToHost(self):
+ dest_dir = os.path.join(self._profile_dir,
+ os.path.basename(self._gcov_prefix))
+ # First remove the dir if it exists already
+ if os.path.exists(dest_dir):
+ command = 'rm -rf %s' % dest_dir
+ self._ce.RunCommand(command)
+
+ # Strip out the initial prefix for the Chrome directory before doing the
+ # copy.
+ chrome_dir_prefix = misc.GetChromeSrcDir()
+
+ command = 'mkdir -p %s' % dest_dir
+ self._ce.RunCommand(command)
+ self._ce.CopyFiles(self._gcov_prefix,
+ dest_dir,
+ src_machine=self._remote,
+ chromeos_root=self._chromeos_root,
+ recursive=True,
+ src_cros=True)
+
+ def _RemoveRemoteProfileDir(self):
+ command = 'rm -rf %s' % self._gcov_prefix
+ self._ce.CrosRunCommand(command,
+ chromeos_root=self._chromeos_root,
+ machine=self._remote)
+
+ def _LaunchCycler(self, cycler):
+ command = (
+ 'DISPLAY=:0 '
+ 'XAUTHORITY=/home/chronos/.Xauthority '
+ 'GCOV_PREFIX=%s '
+ 'GCOV_PREFIX_STRIP=3 '
+ '/opt/google/chrome/chrome '
+ '--no-sandbox '
+ '--renderer-clean-exit '
+ '--user-data-dir=$(mktemp -d) '
+ "--url \"file:///%s/page_cycler/%s/start.html?iterations=10&auto=1\" "
+ '--enable-file-cookies '
+ '--no-first-run '
+ '--js-flags=expose_gc &' % (self._gcov_prefix, self.REMOTE_TMP_DIR,
+ cycler))
+
+ self._ce.CrosRunCommand(command,
+ chromeos_root=self._chromeos_root,
+ machine=self._remote,
+ command_timeout=60)
+
+ def _PkillChrome(self, signal='9'):
+ command = 'pkill -%s chrome' % signal
+ self._ce.CrosRunCommand(command,
+ chromeos_root=self._chromeos_root,
+ machine=self._remote)
+
+ def DoProfile(self):
+ # Copy the page cycler data to the remote
+ self._CopyTestData()
+ self._PrepareTestData()
+ self._RemoveRemoteProfileDir()
+
+ for cycler in self._cycler.split(','):
+ self._ProfileOneCycler(cycler)
+
+ # Copy the profile back
+ self._CopyProfileToHost()
+
+ def _ProfileOneCycler(self, cycler):
+ # With aura, all that's needed is a stop/start ui.
+ self._PkillChrome()
+ cros_login.RestartUI(self._remote, self._chromeos_root, login=False)
+ # Run the cycler
+ self._LaunchCycler(cycler)
+ self._PkillChrome(signal='INT')
+ # Let libgcov dump the profile.
+ # TODO(asharif): There is a race condition here. Fix it later.
+ time.sleep(30)
+
+
+def Main(argv):
+ """The main function."""
+ # Common initializations
+ ### command_executer.InitCommandExecuter(True)
+ command_executer.InitCommandExecuter()
+ l = logger.GetLogger()
+ ce = command_executer.GetCommandExecuter()
+ parser = optparse.OptionParser()
+ parser.add_option('--cycler',
+ dest='cycler',
+ default='alexa_us',
+ help=('Comma-separated cyclers to profile. '
+ 'Example: alexa_us,moz,moz2'
+ 'Use all to profile all cyclers.'))
+ parser.add_option('--chromeos_root',
+ dest='chromeos_root',
+ default='../../',
+ help='Output profile directory.')
+ parser.add_option('--board',
+ dest='board',
+ default='x86-zgb',
+ help='The target board.')
+ parser.add_option('--remote',
+ dest='remote',
+ help=('The remote chromeos machine that'
+ ' has the profile image.'))
+ parser.add_option('--profile_dir',
+ dest='profile_dir',
+ default='profile_dir',
+ help='Store profiles in this directory.')
+
+ options, _ = parser.parse_args(argv)
+
+ all_cyclers = ['alexa_us', 'bloat', 'dhtml', 'dom', 'intl1', 'intl2',
+ 'morejs', 'morejsnp', 'moz', 'moz2']
+
+ if options.cycler == 'all':
+ options.cycler = ','.join(all_cyclers)
+
+ try:
+ cp = CyclerProfiler(options.chromeos_root, options.board, options.cycler,
+ options.profile_dir, options.remote)
+ cp.DoProfile()
+ retval = 0
+ except Exception as e:
+ retval = 1
+ print e
+ finally:
+ print 'Exiting...'
+ return retval
+
+
+if __name__ == '__main__':
+ retval = Main(sys.argv)
+ sys.exit(retval)
diff --git a/fdo_scripts/summarize_hot_blocks.py b/fdo_scripts/summarize_hot_blocks.py
new file mode 100644
index 00000000..20c07fa4
--- /dev/null
+++ b/fdo_scripts/summarize_hot_blocks.py
@@ -0,0 +1,187 @@
+# Copyright 2011 Google Inc. All Rights Reserved.
+"""Summarize hottest basic blocks found while doing a ChromeOS FDO build.
+
+Here is an example execution:
+
+ summarize_hot_blocks.py
+ --data_dir=~/chromeos/chroot/var/cache/chromeos-chrome/ --cutoff=10000
+ --output_dir=/home/x/y
+
+With the cutoff, it will ignore any basic blocks that have a count less
+than what is specified (in this example 10000)
+The script looks inside the directory (this is typically a directory where
+the object files are generated) for files with *.profile and *.optimized
+suffixes. To get these, the following flags were added to the compiler
+invokation within vanilla_vs_fdo.py in the profile-use phase.
+
+ "-fdump-tree-optimized-blocks-lineno "
+ "-fdump-ipa-profile-blocks-lineno "
+
+Here is an example of the *.profile and *.optimized files contents:
+
+# BLOCK 7 freq:3901 count:60342, starting at line 92
+# PRED: 6 [39.0%] count:60342 (true,exec)
+ [url_canon_internal.cc : 92:28] MEM[(const char * *)source_6(D) + 16B] =
+ D.28080_17;
+ [url_canon_internal.cc : 93:41] MEM[(struct Component *)parsed_4(D) + 16B] =
+ MEM[(const struct Component &)repl_1(D) + 80];
+# SUCC: 8 [100.0%] count:60342 (fallthru,exec)
+# BLOCK 8 freq:10000 count:154667, starting at line 321
+# PRED: 7 [100.0%] count:60342 (fallthru,exec) 6 [61.0%] count:94325
+(false,exec)
+ [url_canon_internal.cc : 321:51] # DEBUG D#10 =>
+ [googleurl/src/url_canon_internal.cc : 321] &parsed_4(D)->host
+
+this script finds the blocks with highest count and shows the first line
+of each block so that it is easy to identify the origin of the basic block.
+
+"""
+
+__author__ = 'llozano@google.com (Luis Lozano)'
+
+import optparse
+import os
+import re
+import shutil
+import sys
+import tempfile
+
+from cros_utils import command_executer
+
+
+# Given a line, check if it has a block count and return it.
+# Return -1 if there is no match
+def GetBlockCount(line):
+ match_obj = re.match('.*# BLOCK \d+ .*count:(\d+)', line)
+ if match_obj:
+ return int(match_obj.group(1))
+ else:
+ return -1
+
+
+class Collector(object):
+
+ def __init__(self, data_dir, cutoff, output_dir, tempdir):
+ self._data_dir = data_dir
+ self._cutoff = cutoff
+ self._output_dir = output_dir
+ self._tempdir = tempdir
+ self._ce = command_executer.GetCommandExecuter()
+
+ def CollectFileList(self, file_exp, list_file):
+ command = ("find %s -type f -name '%s' > %s" %
+ (self._data_dir, file_exp,
+ os.path.join(self._tempdir, list_file)))
+ ret = self._ce.RunCommand(command)
+ if ret:
+ raise RuntimeError('Failed: %s' % command)
+
+ def SummarizeLines(self, data_file):
+ sum_lines = []
+ search_lno = False
+ for line in data_file:
+ count = GetBlockCount(line)
+ if count != -1:
+ if count >= self._cutoff:
+ search_lno = True
+ sum_line = line.strip()
+ sum_count = count
+ # look for a line that starts with line number information
+ elif search_lno and re.match('^\s*\[.*: \d*:\d*]', line):
+ search_lno = False
+ sum_lines.append('%d:%s: %s %s' %
+ (sum_count, data_file.name, sum_line, line))
+ return sum_lines
+
+ # Look for blocks in the data file that have a count larger than the cutoff
+ # and generate a sorted summary file of the hottest blocks.
+ def SummarizeFile(self, data_file, sum_file):
+ with open(data_file, 'r') as f:
+ sum_lines = self.SummarizeLines(f)
+
+ # sort reverse the list in place by the block count number
+ sum_lines.sort(key=GetBlockCount, reverse=True)
+
+ with open(sum_file, 'w') as sf:
+ sf.write(''.join(sum_lines))
+
+ print 'Generated file Summary: ', sum_file
+
+ # Find hottest blocks in the list of files, generate a sorted summary for
+ # each file and then do a sorted merge of all the summaries.
+ def SummarizeList(self, list_file, summary_file):
+ with open(os.path.join(self._tempdir, list_file)) as f:
+ sort_list = []
+ for file_name in f:
+ file_name = file_name.strip()
+ sum_file = '%s.sum' % file_name
+ sort_list.append('%s%s' % (sum_file, chr(0)))
+ self.SummarizeFile(file_name, sum_file)
+
+ tmp_list_file = os.path.join(self._tempdir, 'file_list.dat')
+ with open(tmp_list_file, 'w') as file_list_file:
+ for x in sort_list:
+ file_list_file.write(x)
+
+ merge_command = ('sort -nr -t: -k1 --merge --files0-from=%s > %s ' %
+ (tmp_list_file, summary_file))
+
+ ret = self._ce.RunCommand(merge_command)
+ if ret:
+ raise RuntimeError('Failed: %s' % merge_command)
+ print 'Generated general summary: ', summary_file
+
+ def SummarizePreOptimized(self, summary_file):
+ self.CollectFileList('*.profile', 'chrome.profile.list')
+ self.SummarizeList('chrome.profile.list',
+ os.path.join(self._output_dir, summary_file))
+
+ def SummarizeOptimized(self, summary_file):
+ self.CollectFileList('*.optimized', 'chrome.optimized.list')
+ self.SummarizeList('chrome.optimized.list',
+ os.path.join(self._output_dir, summary_file))
+
+
+def Main(argv):
+ command_executer.InitCommandExecuter()
+ usage = ('usage: %prog --data_dir=<dir> --cutoff=<value> '
+ '--output_dir=<dir> [--keep_tmp]')
+ parser = optparse.OptionParser(usage=usage)
+ parser.add_option('--data_dir',
+ dest='data_dir',
+ help=('directory where the FDO (*.profile and '
+ '*.optimized) files are located'))
+ parser.add_option('--cutoff',
+ dest='cutoff',
+ help='Minimum count to consider for each basic block')
+ parser.add_option('--output_dir',
+ dest='output_dir',
+ help=('directory where summary data will be generated'
+ '(pre_optimized.txt, optimized.txt)'))
+ parser.add_option('--keep_tmp',
+ action='store_true',
+ dest='keep_tmp',
+ default=False,
+ help=('Keep directory with temporary files'
+ '(for debugging purposes)'))
+ options = parser.parse_args(argv)[0]
+ if not all((options.data_dir, options.cutoff, options.output_dir)):
+ parser.print_help()
+ sys.exit(1)
+
+ tempdir = tempfile.mkdtemp()
+
+ co = Collector(options.data_dir, int(options.cutoff), options.output_dir,
+ tempdir)
+ co.SummarizePreOptimized('pre_optimized.txt')
+ co.SummarizeOptimized('optimized.txt')
+
+ if not options.keep_tmp:
+ shutil.rmtree(tempdir, ignore_errors=True)
+
+ return 0
+
+
+if __name__ == '__main__':
+ retval = Main(sys.argv)
+ sys.exit(retval)
diff --git a/fdo_scripts/vanilla_vs_fdo.py b/fdo_scripts/vanilla_vs_fdo.py
new file mode 100644
index 00000000..6f42839d
--- /dev/null
+++ b/fdo_scripts/vanilla_vs_fdo.py
@@ -0,0 +1,312 @@
+# Copyright 2011 Google Inc. All Rights Reserved.
+"""Script to build chrome with FDO and compare performance against no FDO."""
+
+import getpass
+import optparse
+import os
+import sys
+
+import image_chromeos
+import setup_chromeos
+from cros_utils import command_executer
+from cros_utils import misc
+from cros_utils import logger
+
+
+class Patcher(object):
+
+ def __init__(self, dir_to_patch, patch_file):
+ self._dir_to_patch = dir_to_patch
+ self._patch_file = patch_file
+ self._base_patch_command = 'patch -p0 %%s < %s' % patch_file
+ self._ce = command_executer.GetCommandExecuter()
+
+ def _RunPatchCommand(self, args):
+ patch_command = self._base_patch_command % args
+ command = ('cd %s && %s' % (self._dir_to_patch, patch_command))
+ return self._ce.RunCommand(command)
+
+ def _ApplyPatch(self, args):
+ full_args = '%s --dry-run' % args
+ ret = self._RunPatchCommand(full_args)
+ if ret:
+ raise RuntimeError('Patch dry run failed!')
+ ret = self._RunPatchCommand(args)
+ if ret:
+ raise RuntimeError('Patch application failed!')
+
+ def __enter__(self):
+ self._ApplyPatch('')
+
+ def __exit__(self, type, value, traceback):
+ self._ApplyPatch('-R')
+
+
+class FDOComparator(object):
+
+ def __init__(self, board, remotes, ebuild_version, plus_pgo, minus_pgo,
+ update_pgo, chromeos_root):
+ self._board = board
+ self._remotes = remotes
+ self._ebuild_version = ebuild_version
+ self._remote = remotes.split(',')[0]
+ self._chromeos_root = chromeos_root
+ self._profile_dir = 'profile_dir'
+ self._profile_path = os.path.join(self._chromeos_root, 'src', 'scripts',
+ os.path.basename(self._profile_dir))
+ self._plus_pgo = plus_pgo
+ self._minus_pgo = minus_pgo
+ self._update_pgo = update_pgo
+
+ self._ce = command_executer.GetCommandExecuter()
+ self._l = logger.GetLogger()
+
+ def _CheckoutChromeOS(self):
+ if not os.path.exists(self._chromeos_root):
+ setup_chromeos_args = [setup_chromeos.__file__,
+ '--dir=%s' % self._chromeos_root, '--minilayout']
+ setup_chromeos.Main(setup_chromeos_args)
+
+ def _BuildChromeOSUsingBinaries(self):
+ image_dir = misc.GetImageDir(self._chromeos_root, self._board)
+ command = 'equery-%s l chromeos' % self._board
+ ret = self._ce.ChrootRunCommand(self._chromeos_root, command)
+ if ret:
+ command = misc.GetSetupBoardCommand(self._board, usepkg=True)
+ ret = self._ce.ChrootRunCommand(self._chromeos_root, command)
+ if ret:
+ raise RuntimeError("Couldn't run setup_board!")
+ command = misc.GetBuildPackagesCommand(self._board, True)
+ ret = self._ce.ChrootRunCommand(self._chromeos_root, command)
+ if ret:
+ raise RuntimeError("Couldn't run build_packages!")
+
+ def _ReportMismatches(self, build_log):
+ mismatch_signature = '-Wcoverage-mismatch'
+ mismatches = build_log.count(mismatch_signature)
+ self._l.LogOutput('Total mismatches: %s' % mismatches)
+ stale_files = set([])
+ for line in build_log.splitlines():
+ if mismatch_signature in line:
+ filename = line.split(':')[0]
+ stale_files.add(filename)
+ self._l.LogOutput('Total stale files: %s' % len(stale_files))
+
+ def _BuildChromeAndImage(self,
+ ebuild_version='',
+ env_dict={},
+ cflags='',
+ cxxflags='',
+ ldflags='',
+ label='',
+ build_image_args=''):
+ env_string = misc.GetEnvStringFromDict(env_dict)
+ if not label:
+ label = ' '.join([env_string, cflags, cxxflags, ldflags, ebuild_version])
+ label = label.strip()
+ label = misc.GetFilenameFromString(label)
+ if not misc.DoesLabelExist(self._chromeos_root, self._board, label):
+ build_chrome_browser_args = ['--clean', '--chromeos_root=%s' %
+ self._chromeos_root, '--board=%s' %
+ self._board, '--env=%r' % env_string,
+ '--cflags=%r' % cflags, '--cxxflags=%r' %
+ cxxflags, '--ldflags=%r' % ldflags,
+ '--ebuild_version=%s' % ebuild_version,
+ '--build_image_args=%s' % build_image_args]
+
+ build_chrome_browser = os.path.join(
+ os.path.dirname(__file__), '..', 'build_chrome_browser.py')
+ command = 'python %s %s' % (build_chrome_browser,
+ ' '.join(build_chrome_browser_args))
+ ret, out, err = self._ce.RunCommandWOutput(command)
+ if '-fprofile-use' in cxxflags:
+ self._ReportMismatches(out)
+
+ if ret:
+ raise RuntimeError("Couldn't build chrome browser!")
+ misc.LabelLatestImage(self._chromeos_root, self._board, label)
+ return label
+
+ def _TestLabels(self, labels):
+ experiment_file = 'pgo_experiment.txt'
+ experiment_header = """
+ board: %s
+ remote: %s
+ """ % (self._board, self._remotes)
+ experiment_tests = """
+ benchmark: desktopui_PyAutoPerfTests {
+ iterations: 1
+ }
+ """
+
+ with open(experiment_file, 'w') as f:
+ print >> f, experiment_header
+ print >> f, experiment_tests
+ for label in labels:
+ # TODO(asharif): Fix crosperf so it accepts labels with symbols
+ crosperf_label = label
+ crosperf_label = crosperf_label.replace('-', 'minus')
+ crosperf_label = crosperf_label.replace('+', 'plus')
+ experiment_image = """
+ %s {
+ chromeos_image: %s
+ }
+ """ % (crosperf_label, os.path.join(
+ misc.GetImageDir(self._chromeos_root, self._board), label,
+ 'chromiumos_test_image.bin'))
+ print >> f, experiment_image
+ crosperf = os.path.join(
+ os.path.dirname(__file__), '..', 'crosperf', 'crosperf')
+ command = '%s %s' % (crosperf, experiment_file)
+ ret = self._ce.RunCommand(command)
+ if ret:
+ raise RuntimeError("Couldn't run crosperf!")
+
+ def _ImageRemote(self, label):
+ image_path = os.path.join(
+ misc.GetImageDir(self._chromeos_root,
+ self._board), label, 'chromiumos_test_image.bin')
+ image_chromeos_args = [image_chromeos.__file__, '--chromeos_root=%s' %
+ self._chromeos_root, '--image=%s' % image_path,
+ '--remote=%s' % self._remote,
+ '--board=%s' % self._board]
+ image_chromeos.Main(image_chromeos_args)
+
+ def _ProfileRemote(self):
+ profile_cycler = os.path.join(
+ os.path.dirname(__file__), 'profile_cycler.py')
+ profile_cycler_args = ['--chromeos_root=%s' % self._chromeos_root,
+ '--cycler=all', '--board=%s' % self._board,
+ '--profile_dir=%s' % self._profile_path,
+ '--remote=%s' % self._remote]
+ command = 'python %s %s' % (profile_cycler, ' '.join(profile_cycler_args))
+ ret = self._ce.RunCommand(command)
+ if ret:
+ raise RuntimeError("Couldn't profile cycler!")
+
+ def _BuildGenerateImage(self):
+ # TODO(asharif): add cflags as well.
+ labels_list = ['fprofile-generate', self._ebuild_version]
+ label = '_'.join(labels_list)
+ generate_label = self._BuildChromeAndImage(
+ env_dict={'USE': 'chrome_internal -pgo pgo_generate'},
+ label=label,
+ ebuild_version=self._ebuild_version,
+ build_image_args='--rootfs_boost_size=400')
+ return generate_label
+
+ def _BuildUseImage(self):
+ ctarget = misc.GetCtargetFromBoard(self._board, self._chromeos_root)
+ chroot_profile_dir = os.path.join('/home/%s/trunk' % getpass.getuser(),
+ 'src', 'scripts', self._profile_dir,
+ ctarget)
+ cflags = ('-fprofile-use '
+ '-fprofile-correction '
+ '-Wno-error '
+ '-fdump-tree-optimized-blocks-lineno '
+ '-fdump-ipa-profile-blocks-lineno '
+ '-fno-vpt '
+ '-fprofile-dir=%s' % chroot_profile_dir)
+ labels_list = ['updated_pgo', self._ebuild_version]
+ label = '_'.join(labels_list)
+ pgo_use_label = self._BuildChromeAndImage(
+ env_dict={'USE': 'chrome_internal -pgo'},
+ cflags=cflags,
+ cxxflags=cflags,
+ ldflags=cflags,
+ label=label,
+ ebuild_version=self._ebuild_version)
+ return pgo_use_label
+
+ def DoAll(self):
+ self._CheckoutChromeOS()
+ self._BuildChromeOSUsingBinaries()
+ labels = []
+
+ if self._minus_pgo:
+ minus_pgo = self._BuildChromeAndImage(
+ env_dict={'USE': 'chrome_internal -pgo'},
+ ebuild_version=self._ebuild_version)
+ labels.append(minus_pgo)
+ if self._plus_pgo:
+ plus_pgo = self._BuildChromeAndImage(
+ env_dict={'USE': 'chrome_internal pgo'},
+ ebuild_version=self._ebuild_version)
+ labels.append(plus_pgo)
+
+ if self._update_pgo:
+ if not os.path.exists(self._profile_path):
+ # Build Chrome with -fprofile-generate
+ generate_label = self._BuildGenerateImage()
+ # Image to the remote box.
+ self._ImageRemote(generate_label)
+ # Profile it using all page cyclers.
+ self._ProfileRemote()
+
+ # Use the profile directory to rebuild it.
+ updated_pgo_label = self._BuildUseImage()
+ labels.append(updated_pgo_label)
+
+ # Run crosperf on all images now.
+ self._TestLabels(labels)
+ return 0
+
+
+def Main(argv):
+ """The main function."""
+ # Common initializations
+ ### command_executer.InitCommandExecuter(True)
+ command_executer.InitCommandExecuter()
+ parser = optparse.OptionParser()
+ parser.add_option('--remote',
+ dest='remote',
+ help='Remote machines to run tests on.')
+ parser.add_option('--board',
+ dest='board',
+ default='x86-zgb',
+ help='The target board.')
+ parser.add_option('--ebuild_version',
+ dest='ebuild_version',
+ default='',
+ help='The Chrome ebuild version to use.')
+ parser.add_option('--plus_pgo',
+ dest='plus_pgo',
+ action='store_true',
+ default=False,
+ help='Build USE=+pgo.')
+ parser.add_option('--minus_pgo',
+ dest='minus_pgo',
+ action='store_true',
+ default=False,
+ help='Build USE=-pgo.')
+ parser.add_option('--update_pgo',
+ dest='update_pgo',
+ action='store_true',
+ default=False,
+ help='Update pgo and build Chrome with the update.')
+ parser.add_option('--chromeos_root',
+ dest='chromeos_root',
+ default=False,
+ help='The chromeos root directory')
+ options, _ = parser.parse_args(argv)
+ if not options.board:
+ print 'Please give a board.'
+ return 1
+ if not options.remote:
+ print 'Please give at least one remote machine.'
+ return 1
+ if not options.chromeos_root:
+ print 'Please provide the chromeos root directory.'
+ return 1
+ if not any((options.minus_pgo, options.plus_pgo, options.update_pgo)):
+ print 'Please provide at least one build option.'
+ return 1
+ fc = FDOComparator(options.board, options.remote, options.ebuild_version,
+ options.plus_pgo, options.minus_pgo, options.update_pgo,
+ os.path.expanduser(options.chromeos_root))
+ return fc.DoAll()
+
+
+if __name__ == '__main__':
+ retval = Main(sys.argv)
+ sys.exit(retval)
diff --git a/file_lock_machine.py b/file_lock_machine.py
new file mode 100755
index 00000000..9b1d3367
--- /dev/null
+++ b/file_lock_machine.py
@@ -0,0 +1,372 @@
+#!/usr/bin/python2
+#
+# Copyright 2010 Google Inc. All Rights Reserved.
+"""Script to lock/unlock machines."""
+
+from __future__ import print_function
+
+__author__ = 'asharif@google.com (Ahmad Sharif)'
+
+import argparse
+import datetime
+import fcntl
+import getpass
+import glob
+import json
+import os
+import socket
+import sys
+import time
+
+from cros_utils import logger
+
+LOCK_SUFFIX = '_check_lock_liveness'
+
+# The locks file directory REQUIRES that 'group' only has read/write
+# privileges and 'world' has no privileges. So the mask must be
+# '0027': 0777 - 0027 = 0750.
+LOCK_MASK = 0027
+
+
+def FileCheckName(name):
+ return name + LOCK_SUFFIX
+
+
+def OpenLiveCheck(file_name):
+ with FileCreationMask(LOCK_MASK):
+ fd = open(file_name, 'a')
+ try:
+ fcntl.lockf(fd, fcntl.LOCK_EX | fcntl.LOCK_NB)
+ except IOError:
+ raise
+ return fd
+
+
+class FileCreationMask(object):
+ """Class for the file creation mask."""
+
+ def __init__(self, mask):
+ self._mask = mask
+ self._old_mask = None
+
+ def __enter__(self):
+ self._old_mask = os.umask(self._mask)
+
+ def __exit__(self, typ, value, traceback):
+ os.umask(self._old_mask)
+
+
+class LockDescription(object):
+ """The description of the lock."""
+
+ def __init__(self, desc=None):
+ try:
+ self.owner = desc['owner']
+ self.exclusive = desc['exclusive']
+ self.counter = desc['counter']
+ self.time = desc['time']
+ self.reason = desc['reason']
+ self.auto = desc['auto']
+ except (KeyError, TypeError):
+ self.owner = ''
+ self.exclusive = False
+ self.counter = 0
+ self.time = 0
+ self.reason = ''
+ self.auto = False
+
+ def IsLocked(self):
+ return self.counter or self.exclusive
+
+ def __str__(self):
+ return ' '.join(['Owner: %s' % self.owner, 'Exclusive: %s' % self.exclusive,
+ 'Counter: %s' % self.counter, 'Time: %s' % self.time,
+ 'Reason: %s' % self.reason, 'Auto: %s' % self.auto])
+
+
+class FileLock(object):
+ """File lock operation class."""
+ FILE_OPS = []
+
+ def __init__(self, lock_filename):
+ self._filepath = lock_filename
+ lock_dir = os.path.dirname(lock_filename)
+ assert os.path.isdir(lock_dir), ("Locks dir: %s doesn't exist!" % lock_dir)
+ self._file = None
+ self._description = None
+
+ def getDescription(self):
+ return self._description
+
+ def getFilePath(self):
+ return self._filepath
+
+ def setDescription(self, desc):
+ self._description = desc
+
+ @classmethod
+ def AsString(cls, file_locks):
+ stringify_fmt = '%-30s %-15s %-4s %-4s %-15s %-40s %-4s'
+ header = stringify_fmt % ('machine', 'owner', 'excl', 'ctr', 'elapsed',
+ 'reason', 'auto')
+ lock_strings = []
+ for file_lock in file_locks:
+
+ elapsed_time = datetime.timedelta(
+ seconds=int(time.time() - file_lock.getDescription().time))
+ elapsed_time = '%s ago' % elapsed_time
+ lock_strings.append(
+ stringify_fmt %
+ (os.path.basename(file_lock.getFilePath),
+ file_lock.getDescription().owner,
+ file_lock.getDescription().exclusive,
+ file_lock.getDescription().counter,
+ elapsed_time, file_lock.getDescription().reason,
+ file_lock.getDescription().auto))
+ table = '\n'.join(lock_strings)
+ return '\n'.join([header, table])
+
+ @classmethod
+ def ListLock(cls, pattern, locks_dir):
+ if not locks_dir:
+ locks_dir = Machine.LOCKS_DIR
+ full_pattern = os.path.join(locks_dir, pattern)
+ file_locks = []
+ for lock_filename in glob.glob(full_pattern):
+ if LOCK_SUFFIX in lock_filename:
+ continue
+ file_lock = FileLock(lock_filename)
+ with file_lock as lock:
+ if lock.IsLocked():
+ file_locks.append(file_lock)
+ logger.GetLogger().LogOutput('\n%s' % cls.AsString(file_locks))
+
+ def __enter__(self):
+ with FileCreationMask(LOCK_MASK):
+ try:
+ self._file = open(self._filepath, 'a+')
+ self._file.seek(0, os.SEEK_SET)
+
+ if fcntl.flock(self._file.fileno(), fcntl.LOCK_EX) == -1:
+ raise IOError('flock(%s, LOCK_EX) failed!' % self._filepath)
+
+ try:
+ desc = json.load(self._file)
+ except (EOFError, ValueError):
+ desc = None
+ self._description = LockDescription(desc)
+
+ if self._description.exclusive and self._description.auto:
+ locked_byself = False
+ for fd in self.FILE_OPS:
+ if fd.name == FileCheckName(self._filepath):
+ locked_byself = True
+ break
+ if not locked_byself:
+ try:
+ fp = OpenLiveCheck(FileCheckName(self._filepath))
+ except IOError:
+ pass
+ else:
+ self._description = LockDescription()
+ fcntl.lockf(fp, fcntl.LOCK_UN)
+ fp.close()
+ return self._description
+ # Check this differently?
+ except IOError as ex:
+ logger.GetLogger().LogError(ex)
+ return None
+
+ def __exit__(self, typ, value, traceback):
+ self._file.truncate(0)
+ self._file.write(json.dumps(self._description.__dict__, skipkeys=True))
+ self._file.close()
+
+ def __str__(self):
+ return self.AsString([self])
+
+
+class Lock(object):
+ """Lock class"""
+
+ def __init__(self, lock_file, auto=True):
+ self._to_lock = os.path.basename(lock_file)
+ self._lock_file = lock_file
+ self._logger = logger.GetLogger()
+ self._auto = auto
+
+ def NonBlockingLock(self, exclusive, reason=''):
+ with FileLock(self._lock_file) as lock:
+ if lock.exclusive:
+ self._logger.LogError(
+ 'Exclusive lock already acquired by %s. Reason: %s' %
+ (lock.owner, lock.reason))
+ return False
+
+ if exclusive:
+ if lock.counter:
+ self._logger.LogError('Shared lock already acquired')
+ return False
+ lock_file_check = FileCheckName(self._lock_file)
+ fd = OpenLiveCheck(lock_file_check)
+ FileLock.FILE_OPS.append(fd)
+
+ lock.exclusive = True
+ lock.reason = reason
+ lock.owner = getpass.getuser()
+ lock.time = time.time()
+ lock.auto = self._auto
+ else:
+ lock.counter += 1
+ self._logger.LogOutput('Successfully locked: %s' % self._to_lock)
+ return True
+
+ def Unlock(self, exclusive, force=False):
+ with FileLock(self._lock_file) as lock:
+ if not lock.IsLocked():
+ self._logger.LogWarning("Can't unlock unlocked machine!")
+ return True
+
+ if lock.exclusive != exclusive:
+ self._logger.LogError('shared locks must be unlocked with --shared')
+ return False
+
+ if lock.exclusive:
+ if lock.owner != getpass.getuser() and not force:
+ self._logger.LogError("%s can't unlock lock owned by: %s" %
+ (getpass.getuser(), lock.owner))
+ return False
+ if lock.auto != self._auto:
+ self._logger.LogError("Can't unlock lock with different -a"
+ ' parameter.')
+ return False
+ lock.exclusive = False
+ lock.reason = ''
+ lock.owner = ''
+
+ if self._auto:
+ del_list = [i
+ for i in FileLock.FILE_OPS
+ if i.name == FileCheckName(self._lock_file)]
+ for i in del_list:
+ FileLock.FILE_OPS.remove(i)
+ for f in del_list:
+ fcntl.lockf(f, fcntl.LOCK_UN)
+ f.close()
+ del del_list
+ os.remove(FileCheckName(self._lock_file))
+
+ else:
+ lock.counter -= 1
+ return True
+
+
+class Machine(object):
+ """Machine class"""
+
+ LOCKS_DIR = '/google/data/rw/users/mo/mobiletc-prebuild/locks'
+
+ def __init__(self, name, locks_dir=LOCKS_DIR, auto=True):
+ self._name = name
+ self._auto = auto
+ try:
+ self._full_name = socket.gethostbyaddr(name)[0]
+ except socket.error:
+ self._full_name = self._name
+ self._full_name = os.path.join(locks_dir, self._full_name)
+
+ def Lock(self, exclusive=False, reason=''):
+ lock = Lock(self._full_name, self._auto)
+ return lock.NonBlockingLock(exclusive, reason)
+
+ def TryLock(self, timeout=300, exclusive=False, reason=''):
+ locked = False
+ sleep = timeout / 10
+ while True:
+ locked = self.Lock(exclusive, reason)
+ if locked or not timeout >= 0:
+ break
+ print('Lock not acquired for {0}, wait {1} seconds ...'.format(
+ self._name,
+ sleep))
+ time.sleep(sleep)
+ timeout -= sleep
+ return locked
+
+ def Unlock(self, exclusive=False, ignore_ownership=False):
+ lock = Lock(self._full_name, self._auto)
+ return lock.Unlock(exclusive, ignore_ownership)
+
+
+def Main(argv):
+ """The main function."""
+
+ parser = argparse.ArgumentParser()
+ parser.add_argument('-r',
+ '--reason',
+ dest='reason',
+ default='',
+ help='The lock reason.')
+ parser.add_argument('-u',
+ '--unlock',
+ dest='unlock',
+ action='store_true',
+ default=False,
+ help='Use this to unlock.')
+ parser.add_argument('-l',
+ '--list_locks',
+ dest='list_locks',
+ action='store_true',
+ default=False,
+ help='Use this to list locks.')
+ parser.add_argument('-f',
+ '--ignore_ownership',
+ dest='ignore_ownership',
+ action='store_true',
+ default=False,
+ help="Use this to force unlock on a lock you don't own.")
+ parser.add_argument('-s',
+ '--shared',
+ dest='shared',
+ action='store_true',
+ default=False,
+ help='Use this for a shared (non-exclusive) lock.')
+ parser.add_argument('-d',
+ '--dir',
+ dest='locks_dir',
+ action='store',
+ default=Machine.LOCKS_DIR,
+ help='Use this to set different locks_dir')
+ parser.add_argument('args', nargs='*', help='Machine arg.')
+
+ options = parser.parse_args(argv)
+
+ options.locks_dir = os.path.abspath(options.locks_dir)
+ exclusive = not options.shared
+
+ if not options.list_locks and len(options.args) != 2:
+ logger.GetLogger().LogError(
+ 'Either --list_locks or a machine arg is needed.')
+ return 1
+
+ if len(options.args) > 1:
+ machine = Machine(options.args[1], options.locks_dir, auto=False)
+ else:
+ machine = None
+
+ if options.list_locks:
+ FileLock.ListLock('*', options.locks_dir)
+ retval = True
+ elif options.unlock:
+ retval = machine.Unlock(exclusive, options.ignore_ownership)
+ else:
+ retval = machine.Lock(exclusive, options.reason)
+
+ if retval:
+ return 0
+ else:
+ return 1
+
+
+if __name__ == '__main__':
+ sys.exit(Main(sys.argv[1:]))
diff --git a/generate-waterfall-reports.py b/generate-waterfall-reports.py
new file mode 100755
index 00000000..ed8e3696
--- /dev/null
+++ b/generate-waterfall-reports.py
@@ -0,0 +1,845 @@
+#!/usr/bin/env python2
+"""Generate summary report for ChromeOS toolchain waterfalls."""
+
+# Desired future features (to be added):
+# - arguments to allow generating only the main waterfall report,
+# or only the rotating builder reports, or only the failures
+# report; or the waterfall reports without the failures report.
+# - Better way of figuring out which dates/builds to generate
+# reports for: probably an argument specifying a date or a date
+# range, then use something like the new buildbot utils to
+# query the build logs to find the right build numbers for the
+# builders for the specified dates.
+# - Store/get the json/data files in mobiletc-prebuild's x20 area.
+# - Update data in json file to reflect, for each testsuite, which
+# tests are not expected to run on which boards; update this
+# script to use that data appropriately.
+# - Make sure user's prodaccess is up-to-date before trying to use
+# this script.
+# - Add some nice formatting/highlighting to reports.
+
+from __future__ import print_function
+
+import argparse
+import getpass
+import json
+import os
+import re
+import shutil
+import sys
+import time
+
+from cros_utils import command_executer
+
+# All the test suites whose data we might want for the reports.
+TESTS = (
+ ('bvt-inline', 'HWTest'),
+ ('bvt-cq', 'HWTest'),
+ ('toolchain-tests', 'HWTest'),
+ ('security', 'HWTest'),
+ ('kernel_daily_regression', 'HWTest'),
+ ('kernel_daily_benchmarks', 'HWTest'),)
+
+# The main waterfall builders, IN THE ORDER IN WHICH WE WANT THEM
+# LISTED IN THE REPORT.
+WATERFALL_BUILDERS = [
+ 'amd64-gcc-toolchain', 'arm-gcc-toolchain', 'arm64-gcc-toolchain',
+ 'x86-gcc-toolchain', 'amd64-llvm-toolchain', 'arm-llvm-toolchain',
+ 'arm64-llvm-toolchain', 'x86-llvm-toolchain', 'amd64-llvm-next-toolchain',
+ 'arm-llvm-next-toolchain', 'arm64-llvm-next-toolchain',
+ 'x86-llvm-next-toolchain'
+]
+
+DATA_DIR = '/google/data/rw/users/mo/mobiletc-prebuild/waterfall-report-data/'
+ARCHIVE_DIR = '/google/data/rw/users/mo/mobiletc-prebuild/waterfall-reports/'
+DOWNLOAD_DIR = '/tmp/waterfall-logs'
+MAX_SAVE_RECORDS = 7
+BUILD_DATA_FILE = '%s/build-data.txt' % DATA_DIR
+GCC_ROTATING_BUILDER = 'gcc_toolchain'
+LLVM_ROTATING_BUILDER = 'llvm_next_toolchain'
+ROTATING_BUILDERS = [GCC_ROTATING_BUILDER, LLVM_ROTATING_BUILDER]
+
+# For int-to-string date conversion. Note, the index of the month in this
+# list needs to correspond to the month's integer value. i.e. 'Sep' must
+# be as MONTHS[9].
+MONTHS = [
+ '', 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct',
+ 'Nov', 'Dec'
+]
+
+
+def format_date(int_date):
+ """Convert an integer date to a string date. YYYYMMDD -> YYYY-MMM-DD"""
+
+ if int_date == 0:
+ return 'today'
+
+ tmp_date = int_date
+ day = tmp_date % 100
+ tmp_date = tmp_date / 100
+ month = tmp_date % 100
+ year = tmp_date / 100
+
+ month_str = MONTHS[month]
+ date_str = '%d-%s-%d' % (year, month_str, day)
+ return date_str
+
+
+def EmailReport(report_file, report_type, date):
+ subject = '%s Waterfall Summary report, %s' % (report_type, date)
+ email_to = getpass.getuser()
+ sendgmr_path = '/google/data/ro/projects/gws-sre/sendgmr'
+ command = ('%s --to=%s@google.com --subject="%s" --body_file=%s' %
+ (sendgmr_path, email_to, subject, report_file))
+ command_executer.GetCommandExecuter().RunCommand(command)
+
+
+def PruneOldFailures(failure_dict, int_date):
+ earliest_date = int_date - MAX_SAVE_RECORDS
+ for suite in failure_dict:
+ suite_dict = failure_dict[suite]
+ test_keys_to_remove = []
+ for test in suite_dict:
+ test_dict = suite_dict[test]
+ msg_keys_to_remove = []
+ for msg in test_dict:
+ fails = test_dict[msg]
+ i = 0
+ while i < len(fails) and fails[i][0] <= earliest_date:
+ i += 1
+ new_fails = fails[i:]
+ test_dict[msg] = new_fails
+ if len(new_fails) == 0:
+ msg_keys_to_remove.append(msg)
+
+ for k in msg_keys_to_remove:
+ del test_dict[k]
+
+ suite_dict[test] = test_dict
+ if len(test_dict) == 0:
+ test_keys_to_remove.append(test)
+
+ for k in test_keys_to_remove:
+ del suite_dict[k]
+
+ failure_dict[suite] = suite_dict
+
+
+def GetBuildID(build_bot, date):
+ """Get the build id for a build_bot at a given date."""
+ day = '{day:02d}'.format(day=date%100)
+ mon = MONTHS[date/100%100]
+ date_string = mon + ' ' + day
+ if build_bot in WATERFALL_BUILDERS:
+ url = 'https://uberchromegw.corp.google.com/i/chromeos/' + \
+ 'builders/%s?numbuilds=200' % build_bot
+ if build_bot in ROTATING_BUILDERS:
+ url = 'https://uberchromegw.corp.google.com/i/chromiumos.tryserver/' + \
+ 'builders/%s?numbuilds=200' % build_bot
+ command = 'sso_client %s' %url
+ retval = 1
+ retry_time = 3
+ while retval and retry_time:
+ retval, output, _ = \
+ command_executer.GetCommandExecuter().RunCommandWOutput(command, \
+ print_to_console=False)
+ retry_time -= 1
+
+ if retval:
+ return []
+
+ out = output.split('\n')
+ line_num = 0
+ build_id = []
+ # Parse the output like this
+ # <td>Dec 14 10:55</td>
+ # <td class="revision">??</td>
+ # <td failure</td><td><a href="../builders/gcc_toolchain/builds/109">#109</a>
+ while line_num < len(out):
+ if date_string in out[line_num]:
+ if line_num + 2 < len(out):
+ build_num_line = out[line_num + 2]
+ raw_num = re.findall(r'builds/\d+', build_num_line)
+ # raw_num is ['builds/109'] in the example.
+ if raw_num:
+ build_id.append(int(raw_num[0].split('/')[1]))
+ line_num += 1
+ return build_id
+
+
+def GenerateFailuresReport(fail_dict, date):
+ filename = 'waterfall_report.failures.%s.txt' % date
+ date_string = format_date(date)
+ with open(filename, 'w') as out_file:
+ # Write failure report section.
+ out_file.write('\n\nSummary of Test Failures as of %s\n\n' % date_string)
+
+ # We want to sort the errors and output them in order of the ones that occur
+ # most often. So we have to collect the data about all of them, then sort
+ # it.
+ error_groups = []
+ for suite in fail_dict:
+ suite_dict = fail_dict[suite]
+ if suite_dict:
+ for test in suite_dict:
+ test_dict = suite_dict[test]
+ for err_msg in test_dict:
+ err_list = test_dict[err_msg]
+ sorted_list = sorted(err_list, key=lambda x: x[0], reverse=True)
+ err_group = [len(sorted_list), suite, test, err_msg, sorted_list]
+ error_groups.append(err_group)
+
+ # Sort the errors by the number of errors of each type. Then output them in
+ # order.
+ sorted_errors = sorted(error_groups, key=lambda x: x[0], reverse=True)
+ for i in range(0, len(sorted_errors)):
+ err_group = sorted_errors[i]
+ suite = err_group[1]
+ test = err_group[2]
+ err_msg = err_group[3]
+ err_list = err_group[4]
+ out_file.write('Suite: %s\n' % suite)
+ out_file.write(' %s (%d failures)\n' % (test, len(err_list)))
+ out_file.write(' (%s)\n' % err_msg)
+ for i in range(0, len(err_list)):
+ err = err_list[i]
+ out_file.write(' %s, %s, %s\n' % (format_date(err[0]), err[1],
+ err[2]))
+ out_file.write('\n')
+
+ print('Report generated in %s.' % filename)
+ return filename
+
+
+def GenerateWaterfallReport(report_dict, fail_dict, waterfall_type, date,
+ omit_failures):
+ """Write out the actual formatted report."""
+
+ filename = 'waterfall_report.%s_waterfall.%s.txt' % (waterfall_type, date)
+
+ date_string = ''
+ date_list = report_dict['date']
+ num_dates = len(date_list)
+ i = 0
+ for d in date_list:
+ date_string += d
+ if i < num_dates - 1:
+ date_string += ', '
+ i += 1
+
+ if waterfall_type == 'main':
+ report_list = WATERFALL_BUILDERS
+ else:
+ report_list = report_dict.keys()
+
+ with open(filename, 'w') as out_file:
+ # Write Report Header
+ out_file.write('\nStatus of %s Waterfall Builds from %s\n\n' %
+ (waterfall_type, date_string))
+ out_file.write(' '
+ ' kernel kernel\n')
+ out_file.write(' Build bvt- bvt-cq '
+ 'toolchain- security daily daily\n')
+ out_file.write(' status inline '
+ ' tests regression benchmarks\n')
+ out_file.write(' [P/ F/ DR]* [P/ F /DR]* '
+ '[P/ F/ DR]* [P/ F/ DR]* [P/ F/ DR]* [P/ F/ DR]*\n\n')
+
+ # Write daily waterfall status section.
+ for i in range(0, len(report_list)):
+ builder = report_list[i]
+ if builder == 'date':
+ continue
+
+ if builder not in report_dict:
+ out_file.write('Unable to find information for %s.\n\n' % builder)
+ continue
+
+ build_dict = report_dict[builder]
+ status = build_dict.get('build_status', 'bad')
+ inline = build_dict.get('bvt-inline', '[??/ ?? /??]')
+ cq = build_dict.get('bvt-cq', '[??/ ?? /??]')
+ inline_color = build_dict.get('bvt-inline-color', '')
+ cq_color = build_dict.get('bvt-cq-color', '')
+ if 'x86' not in builder:
+ toolchain = build_dict.get('toolchain-tests', '[??/ ?? /??]')
+ security = build_dict.get('security', '[??/ ?? /??]')
+ toolchain_color = build_dict.get('toolchain-tests-color', '')
+ security_color = build_dict.get('security-color', '')
+ if 'gcc' in builder:
+ regression = build_dict.get('kernel_daily_regression', '[??/ ?? /??]')
+ bench = build_dict.get('kernel_daily_benchmarks', '[??/ ?? /??]')
+ regression_color = build_dict.get('kernel_daily_regression-color', '')
+ bench_color = build_dict.get('kernel_daily_benchmarks-color', '')
+ out_file.write(' %6s %6s'
+ ' %6s %6s %6s %6s\n' %
+ (inline_color, cq_color, toolchain_color,
+ security_color, regression_color, bench_color))
+ out_file.write('%25s %3s %s %s %s %s %s %s\n' % (builder, status,
+ inline, cq,
+ toolchain, security,
+ regression, bench))
+ else:
+ out_file.write(' %6s %6s'
+ ' %6s %6s\n' % (inline_color, cq_color,
+ toolchain_color,
+ security_color))
+ out_file.write('%25s %3s %s %s %s %s\n' % (builder, status, inline,
+ cq, toolchain, security))
+ else:
+ out_file.write(' %6s %6s\n' %
+ (inline_color, cq_color))
+ out_file.write('%25s %3s %s %s\n' % (builder, status, inline, cq))
+ if 'build_link' in build_dict:
+ out_file.write('%s\n\n' % build_dict['build_link'])
+
+ out_file.write('\n\n*P = Number of tests in suite that Passed; F = '
+ 'Number of tests in suite that Failed; DR = Number of tests'
+ ' in suite that Didn\'t Run.\n')
+
+ if omit_failures:
+ print('Report generated in %s.' % filename)
+ return filename
+
+ # Write failure report section.
+ out_file.write('\n\nSummary of Test Failures as of %s\n\n' % date_string)
+
+ # We want to sort the errors and output them in order of the ones that occur
+ # most often. So we have to collect the data about all of them, then sort
+ # it.
+ error_groups = []
+ for suite in fail_dict:
+ suite_dict = fail_dict[suite]
+ if suite_dict:
+ for test in suite_dict:
+ test_dict = suite_dict[test]
+ for err_msg in test_dict:
+ err_list = test_dict[err_msg]
+ sorted_list = sorted(err_list, key=lambda x: x[0], reverse=True)
+ err_group = [len(sorted_list), suite, test, err_msg, sorted_list]
+ error_groups.append(err_group)
+
+ # Sort the errors by the number of errors of each type. Then output them in
+ # order.
+ sorted_errors = sorted(error_groups, key=lambda x: x[0], reverse=True)
+ for i in range(0, len(sorted_errors)):
+ err_group = sorted_errors[i]
+ suite = err_group[1]
+ test = err_group[2]
+ err_msg = err_group[3]
+ err_list = err_group[4]
+ out_file.write('Suite: %s\n' % suite)
+ out_file.write(' %s (%d failures)\n' % (test, len(err_list)))
+ out_file.write(' (%s)\n' % err_msg)
+ for i in range(0, len(err_list)):
+ err = err_list[i]
+ out_file.write(' %s, %s, %s\n' % (format_date(err[0]), err[1],
+ err[2]))
+ out_file.write('\n')
+
+ print('Report generated in %s.' % filename)
+ return filename
+
+
+def UpdateReport(report_dict, builder, test, report_date, build_link,
+ test_summary, board, color):
+ """Update the data in our report dictionary with current test's data."""
+
+ if 'date' not in report_dict:
+ report_dict['date'] = [report_date]
+ elif report_date not in report_dict['date']:
+ # It is possible that some of the builders started/finished on different
+ # days, so we allow for multiple dates in the reports.
+ report_dict['date'].append(report_date)
+
+ build_key = ''
+ if builder == GCC_ROTATING_BUILDER:
+ build_key = '%s-gcc-toolchain' % board
+ elif builder == LLVM_ROTATING_BUILDER:
+ build_key = '%s-llvm-next-toolchain' % board
+ else:
+ build_key = builder
+
+ if build_key not in report_dict.keys():
+ build_dict = dict()
+ else:
+ build_dict = report_dict[build_key]
+
+ if 'build_link' not in build_dict:
+ build_dict['build_link'] = build_link
+
+ if 'date' not in build_dict:
+ build_dict['date'] = report_date
+
+ if 'board' in build_dict and build_dict['board'] != board:
+ raise RuntimeError('Error: Two different boards (%s,%s) in one build (%s)!'
+ % (board, build_dict['board'], build_link))
+ build_dict['board'] = board
+
+ color_key = '%s-color' % test
+ build_dict[color_key] = color
+
+ # Check to see if we already have a build status for this build_key
+ status = ''
+ if 'build_status' in build_dict.keys():
+ # Use current build_status, unless current test failed (see below).
+ status = build_dict['build_status']
+
+ if not test_summary:
+ # Current test data was not available, so something was bad with build.
+ build_dict['build_status'] = 'bad'
+ build_dict[test] = '[ no data ]'
+ else:
+ build_dict[test] = test_summary
+ if not status:
+ # Current test ok; no other data, so assume build was ok.
+ build_dict['build_status'] = 'ok'
+
+ report_dict[build_key] = build_dict
+
+
+def UpdateBuilds(builds):
+ """Update the data in our build-data.txt file."""
+
+ # The build data file records the last build number for which we
+ # generated a report. When we generate the next report, we read
+ # this data and increment it to get the new data; when we finish
+ # generating the reports, we write the updated values into this file.
+ # NOTE: One side effect of doing this at the end: If the script
+ # fails in the middle of generating a report, this data does not get
+ # updated.
+ with open(BUILD_DATA_FILE, 'w') as fp:
+ gcc_max = 0
+ llvm_max = 0
+ for b in builds:
+ if b[0] == GCC_ROTATING_BUILDER:
+ gcc_max = max(gcc_max, b[1])
+ elif b[0] == LLVM_ROTATING_BUILDER:
+ llvm_max = max(llvm_max, b[1])
+ else:
+ fp.write('%s,%d\n' % (b[0], b[1]))
+ if gcc_max > 0:
+ fp.write('%s,%d\n' % (GCC_ROTATING_BUILDER, gcc_max))
+ if llvm_max > 0:
+ fp.write('%s,%d\n' % (LLVM_ROTATING_BUILDER, llvm_max))
+
+
+def GetBuilds(date=0):
+ """Get build id from builds."""
+
+ # If date is set, get the build id from waterfall.
+ builds = []
+
+ if date:
+ for builder in WATERFALL_BUILDERS + ROTATING_BUILDERS:
+ build_ids = GetBuildID(builder, date)
+ for build_id in build_ids:
+ builds.append((builder, build_id))
+ return builds
+
+ # If date is not set, we try to get the most recent builds.
+ # Read the values of the last builds used to generate a report, and
+ # increment them appropriately, to get values for generating the
+ # current report. (See comments in UpdateBuilds).
+ with open(BUILD_DATA_FILE, 'r') as fp:
+ lines = fp.readlines()
+
+ for l in lines:
+ l = l.rstrip()
+ words = l.split(',')
+ builder = words[0]
+ build = int(words[1])
+ builds.append((builder, build + 1))
+ # NOTE: We are assuming here that there are always 2 daily builds in
+ # each of the rotating builders. I am not convinced this is a valid
+ # assumption.
+ if builder in ROTATING_BUILDERS:
+ builds.append((builder, build + 2))
+
+ return builds
+
+
+def RecordFailures(failure_dict, platform, suite, builder, int_date, log_file,
+ build_num, failed):
+ """Read and update the stored data about test failures."""
+
+ # Get the dictionary for this particular test suite from the failures
+ # dictionary.
+ suite_dict = failure_dict[suite]
+
+ # Read in the entire log file for this test/build.
+ with open(log_file, 'r') as in_file:
+ lines = in_file.readlines()
+
+ # Update the entries in the failure dictionary for each test within this suite
+ # that failed.
+ for test in failed:
+ # Check to see if there is already an entry in the suite dictionary for this
+ # test; if so use that, otherwise create a new entry.
+ if test in suite_dict:
+ test_dict = suite_dict[test]
+ else:
+ test_dict = dict()
+ # Parse the lines from the log file, looking for lines that indicate this
+ # test failed.
+ msg = ''
+ for l in lines:
+ words = l.split()
+ if len(words) < 3:
+ continue
+ if ((words[0] == test and words[1] == 'ERROR:') or
+ (words[0] == 'provision' and words[1] == 'FAIL:')):
+ words = words[2:]
+ # Get the error message for the failure.
+ msg = ' '.join(words)
+ if not msg:
+ msg = 'Unknown_Error'
+
+ # Look for an existing entry for this error message in the test dictionary.
+ # If found use that, otherwise create a new entry for this error message.
+ if msg in test_dict:
+ error_list = test_dict[msg]
+ else:
+ error_list = list()
+ # Create an entry for this new failure
+ new_item = [int_date, platform, builder, build_num]
+ # Add this failure to the error list if it's not already there.
+ if new_item not in error_list:
+ error_list.append([int_date, platform, builder, build_num])
+ # Sort the error list by date.
+ error_list.sort(key=lambda x: x[0])
+ # Calculate the earliest date to save; delete records for older failures.
+ earliest_date = int_date - MAX_SAVE_RECORDS
+ i = 0
+ while i < len(error_list) and error_list[i][0] <= earliest_date:
+ i += 1
+ if i > 0:
+ error_list = error_list[i:]
+ # Save the error list in the test's dictionary, keyed on error_msg.
+ test_dict[msg] = error_list
+
+ # Save the updated test dictionary in the test_suite dictionary.
+ suite_dict[test] = test_dict
+
+ # Save the updated test_suite dictionary in the failure dictionary.
+ failure_dict[suite] = suite_dict
+
+
+def ParseLogFile(log_file, test_data_dict, failure_dict, test, builder,
+ build_num, build_link):
+ """Parse the log file from the given builder, build_num and test.
+
+ Also adds the results for this test to our test results dictionary,
+ and calls RecordFailures, to update our test failure data.
+ """
+
+ lines = []
+ with open(log_file, 'r') as infile:
+ lines = infile.readlines()
+
+ passed = {}
+ failed = {}
+ not_run = {}
+ date = ''
+ status = ''
+ board = ''
+ num_provision_errors = 0
+ build_ok = True
+ afe_line = ''
+
+ for line in lines:
+ if line.rstrip() == '<title>404 Not Found</title>':
+ print('Warning: File for %s (build number %d), %s was not found.' %
+ (builder, build_num, test))
+ build_ok = False
+ break
+ if '[ PASSED ]' in line:
+ test_name = line.split()[0]
+ if test_name != 'Suite':
+ passed[test_name] = True
+ elif '[ FAILED ]' in line:
+ test_name = line.split()[0]
+ if test_name == 'provision':
+ num_provision_errors += 1
+ not_run[test_name] = True
+ elif test_name != 'Suite':
+ failed[test_name] = True
+ elif line.startswith('started: '):
+ date = line.rstrip()
+ date = date[9:]
+ date_obj = time.strptime(date, '%a %b %d %H:%M:%S %Y')
+ int_date = (
+ date_obj.tm_year * 10000 + date_obj.tm_mon * 100 + date_obj.tm_mday)
+ date = time.strftime('%a %b %d %Y', date_obj)
+ elif not status and line.startswith('status: '):
+ status = line.rstrip()
+ words = status.split(':')
+ status = words[-1]
+ elif line.find('Suite passed with a warning') != -1:
+ status = 'WARNING'
+ elif line.startswith('@@@STEP_LINK@Link to suite@'):
+ afe_line = line.rstrip()
+ words = afe_line.split('@')
+ for w in words:
+ if w.startswith('http'):
+ afe_line = w
+ afe_line = afe_line.replace('&amp;', '&')
+ elif 'INFO: RunCommand:' in line:
+ words = line.split()
+ for i in range(0, len(words) - 1):
+ if words[i] == '--board':
+ board = words[i + 1]
+
+ test_dict = test_data_dict[test]
+ test_list = test_dict['tests']
+
+ if build_ok:
+ for t in test_list:
+ if not t in passed and not t in failed:
+ not_run[t] = True
+
+ total_pass = len(passed)
+ total_fail = len(failed)
+ total_notrun = len(not_run)
+
+ else:
+ total_pass = 0
+ total_fail = 0
+ total_notrun = 0
+ status = 'Not found.'
+ if not build_ok:
+ return [], date, board, 0, ' '
+
+ build_dict = dict()
+ build_dict['id'] = build_num
+ build_dict['builder'] = builder
+ build_dict['date'] = date
+ build_dict['build_link'] = build_link
+ build_dict['total_pass'] = total_pass
+ build_dict['total_fail'] = total_fail
+ build_dict['total_not_run'] = total_notrun
+ build_dict['afe_job_link'] = afe_line
+ build_dict['provision_errors'] = num_provision_errors
+ if status.strip() == 'SUCCESS':
+ build_dict['color'] = 'green '
+ elif status.strip() == 'FAILURE':
+ build_dict['color'] = ' red '
+ elif status.strip() == 'WARNING':
+ build_dict['color'] = 'orange'
+ else:
+ build_dict['color'] = ' '
+
+ # Use YYYYMMDD (integer) as the build record key
+ if build_ok:
+ if board in test_dict:
+ board_dict = test_dict[board]
+ else:
+ board_dict = dict()
+ board_dict[int_date] = build_dict
+
+ # Only keep the last 5 records (based on date)
+ keys_list = board_dict.keys()
+ if len(keys_list) > MAX_SAVE_RECORDS:
+ min_key = min(keys_list)
+ del board_dict[min_key]
+
+ # Make sure changes get back into the main dictionary
+ test_dict[board] = board_dict
+ test_data_dict[test] = test_dict
+
+ if len(failed) > 0:
+ RecordFailures(failure_dict, board, test, builder, int_date, log_file,
+ build_num, failed)
+
+ summary_result = '[%2d/ %2d/ %2d]' % (total_pass, total_fail, total_notrun)
+
+ return summary_result, date, board, int_date, build_dict['color']
+
+
+def DownloadLogFile(builder, buildnum, test, test_family):
+
+ ce = command_executer.GetCommandExecuter()
+ os.system('mkdir -p %s/%s/%s' % (DOWNLOAD_DIR, builder, test))
+ if builder in ROTATING_BUILDERS:
+ source = ('https://uberchromegw.corp.google.com/i/chromiumos.tryserver'
+ '/builders/%s/builds/%d/steps/%s%%20%%5B%s%%5D/logs/stdio' %
+ (builder, buildnum, test_family, test))
+ build_link = ('https://uberchromegw.corp.google.com/i/chromiumos.tryserver'
+ '/builders/%s/builds/%d' % (builder, buildnum))
+ else:
+ source = ('https://uberchromegw.corp.google.com/i/chromeos/builders/%s/'
+ 'builds/%d/steps/%s%%20%%5B%s%%5D/logs/stdio' %
+ (builder, buildnum, test_family, test))
+ build_link = ('https://uberchromegw.corp.google.com/i/chromeos/builders/%s'
+ '/builds/%d' % (builder, buildnum))
+
+ target = '%s/%s/%s/%d' % (DOWNLOAD_DIR, builder, test, buildnum)
+ if not os.path.isfile(target) or os.path.getsize(target) == 0:
+ cmd = 'sso_client %s > %s' % (source, target)
+ status = ce.RunCommand(cmd)
+ if status != 0:
+ return '', ''
+
+ return target, build_link
+
+
+# Check for prodaccess.
+def CheckProdAccess():
+ status, output, _ = command_executer.GetCommandExecuter().RunCommandWOutput(
+ 'prodcertstatus')
+ if status != 0:
+ return False
+ # Verify that status is not expired
+ if 'expires' in output:
+ return True
+ return False
+
+
+def ValidOptions(parser, options):
+ too_many_options = False
+ if options.main:
+ if options.rotating or options.failures_report:
+ too_many_options = True
+ elif options.rotating and options.failures_report:
+ too_many_options = True
+
+ if too_many_options:
+ parser.error('Can only specify one of --main, --rotating or'
+ ' --failures_report.')
+
+ conflicting_failure_options = False
+ if options.failures_report and options.omit_failures:
+ conflicting_failure_options = True
+ parser.error('Cannot specify both --failures_report and --omit_failures.')
+
+ return not too_many_options and not conflicting_failure_options
+
+
+def Main(argv):
+ """Main function for this script."""
+ parser = argparse.ArgumentParser()
+ parser.add_argument(
+ '--main',
+ dest='main',
+ default=False,
+ action='store_true',
+ help='Generate report only for main waterfall '
+ 'builders.')
+ parser.add_argument(
+ '--rotating',
+ dest='rotating',
+ default=False,
+ action='store_true',
+ help='Generate report only for rotating builders.')
+ parser.add_argument(
+ '--failures_report',
+ dest='failures_report',
+ default=False,
+ action='store_true',
+ help='Only generate the failures section of the report.')
+ parser.add_argument(
+ '--omit_failures',
+ dest='omit_failures',
+ default=False,
+ action='store_true',
+ help='Do not generate the failures section of the report.')
+ parser.add_argument(
+ '--no_update',
+ dest='no_update',
+ default=False,
+ action='store_true',
+ help='Run reports, but do not update the data files.')
+ parser.add_argument(
+ '--date',
+ dest='date',
+ default=0,
+ type=int,
+ help='The date YYYYMMDD of waterfall report.')
+
+ options = parser.parse_args(argv)
+
+ if not ValidOptions(parser, options):
+ return 1
+
+ main_only = options.main
+ rotating_only = options.rotating
+ failures_report = options.failures_report
+ omit_failures = options.omit_failures
+ date = options.date
+
+ test_data_dict = dict()
+ failure_dict = dict()
+
+ prod_access = CheckProdAccess()
+ if not prod_access:
+ print('ERROR: Please run prodaccess first.')
+ return
+
+ with open('%s/waterfall-test-data.json' % DATA_DIR, 'r') as input_file:
+ test_data_dict = json.load(input_file)
+
+ with open('%s/test-failure-data.json' % DATA_DIR, 'r') as fp:
+ failure_dict = json.load(fp)
+
+ builds = GetBuilds(date)
+
+ waterfall_report_dict = dict()
+ rotating_report_dict = dict()
+ int_date = 0
+ for test_desc in TESTS:
+ test, test_family = test_desc
+ for build in builds:
+ (builder, buildnum) = build
+ if test.startswith('kernel') and 'llvm' in builder:
+ continue
+ if 'x86' in builder and not test.startswith('bvt'):
+ continue
+ target, build_link = DownloadLogFile(builder, buildnum, test, test_family)
+
+ if os.path.exists(target):
+ test_summary, report_date, board, tmp_date, color = ParseLogFile(
+ target, test_data_dict, failure_dict, test, builder, buildnum,
+ build_link)
+
+ if tmp_date != 0:
+ int_date = tmp_date
+
+ if builder in ROTATING_BUILDERS:
+ UpdateReport(rotating_report_dict, builder, test, report_date,
+ build_link, test_summary, board, color)
+ else:
+ UpdateReport(waterfall_report_dict, builder, test, report_date,
+ build_link, test_summary, board, color)
+
+ PruneOldFailures(failure_dict, int_date)
+
+ if waterfall_report_dict and not rotating_only and not failures_report:
+ main_report = GenerateWaterfallReport(waterfall_report_dict, failure_dict,
+ 'main', int_date, omit_failures)
+ EmailReport(main_report, 'Main', format_date(int_date))
+ shutil.copy(main_report, ARCHIVE_DIR)
+ if rotating_report_dict and not main_only and not failures_report:
+ rotating_report = GenerateWaterfallReport(rotating_report_dict,
+ failure_dict, 'rotating',
+ int_date, omit_failures)
+ EmailReport(rotating_report, 'Rotating', format_date(int_date))
+ shutil.copy(rotating_report, ARCHIVE_DIR)
+
+ if failures_report:
+ failures_report = GenerateFailuresReport(failure_dict, int_date)
+ EmailReport(failures_report, 'Failures', format_date(int_date))
+ shutil.copy(failures_report, ARCHIVE_DIR)
+
+ if not options.no_update:
+ with open('%s/waterfall-test-data.json' % DATA_DIR, 'w') as out_file:
+ json.dump(test_data_dict, out_file, indent=2)
+
+ with open('%s/test-failure-data.json' % DATA_DIR, 'w') as out_file:
+ json.dump(failure_dict, out_file, indent=2)
+
+ UpdateBuilds(builds)
+
+
+if __name__ == '__main__':
+ Main(sys.argv[1:])
+ sys.exit(0)
diff --git a/get_common_image_version.py b/get_common_image_version.py
new file mode 100755
index 00000000..da36b98f
--- /dev/null
+++ b/get_common_image_version.py
@@ -0,0 +1,92 @@
+#!/usr/bin/python2
+#
+# Copyright 2013 Google Inc. All Rights Reserved.
+"""Script to find list of common images (first beta releases) in Chromeos.
+
+Display information about stable ChromeOS/Chrome versions to be used
+by the team developers. The purpose is to increase team productivity
+by using stable (known and tested) ChromeOS/Chrome versions instead of
+using randomly selected versions. Currently we define as a "stable"
+version the first Beta release in a particular release cycle.
+"""
+
+from __future__ import print_function
+
+__author__ = 'llozano@google.com (Luis Lozano)'
+
+import argparse
+import pickle
+import re
+import sys
+import urllib
+
+VERSIONS_HISTORY_URL = 'http://cros-omahaproxy.appspot.com/history'
+
+
+def DisplayBetas(betas):
+ print('List of betas from %s' % VERSIONS_HISTORY_URL)
+ for beta in betas:
+ print(' Release', beta['chrome_major_version'], beta)
+ return
+
+
+def FindAllBetas(all_versions):
+ """Get ChromeOS first betas from History URL."""
+
+ all_betas = []
+ prev_beta = {}
+ for line in all_versions:
+ match_obj = re.match(
+ r'(?P<date>.*),(?P<chromeos_version>.*),'
+ r'(?P<chrome_major_version>\d*).(?P<chrome_minor_version>.*),'
+ r'(?P<chrome_appid>.*),beta-channel,,Samsung Chromebook Series 5 550',
+ line)
+ if match_obj:
+ if prev_beta:
+ if (prev_beta['chrome_major_version'] !=
+ match_obj.group('chrome_major_version')):
+ all_betas.append(prev_beta)
+ prev_beta = match_obj.groupdict()
+ if prev_beta:
+ all_betas.append(prev_beta)
+ return all_betas
+
+
+def SerializeBetas(all_betas, serialize_file):
+ with open(serialize_file, 'wb') as f:
+ pickle.dump(all_betas, f)
+ print('Serialized list of betas into', serialize_file)
+ return
+
+
+def Main(argv):
+ """Get ChromeOS first betas list from history URL."""
+
+ parser = argparse.ArgumentParser()
+ parser.add_argument('--serialize',
+ dest='serialize',
+ default=None,
+ help='Save list of common images into the specified '
+ 'file.')
+ options = parser.parse_args(argv)
+
+ try:
+ opener = urllib.URLopener()
+ all_versions = opener.open(VERSIONS_HISTORY_URL)
+ except IOError as ioe:
+ print('Cannot open', VERSIONS_HISTORY_URL)
+ print(ioe)
+ return 1
+
+ all_betas = FindAllBetas(all_versions)
+ DisplayBetas(all_betas)
+ if options.serialize:
+ SerializeBetas(all_betas, options.serialize)
+ all_versions.close()
+
+ return 0
+
+
+if __name__ == '__main__':
+ retval = Main(sys.argv[1:])
+ sys.exit(retval)
diff --git a/go/android/adb_shamu b/go/android/adb_shamu
new file mode 100755
index 00000000..1c53ecc1
--- /dev/null
+++ b/go/android/adb_shamu
@@ -0,0 +1,8 @@
+#!/bin/bash
+
+# This wrapper runs adb with the serial number of the shamu device.
+# Replace XXXXXXXX with the actual serial number of the device.
+# This is just an example. Create one such wrapper for each Android
+# device used for running Go tests.
+
+exec adb -s XXXXXXXX "$@"
diff --git a/go/android/adb_volantis b/go/android/adb_volantis
new file mode 100755
index 00000000..4712eec2
--- /dev/null
+++ b/go/android/adb_volantis
@@ -0,0 +1,8 @@
+#!/bin/bash
+
+# This wrapper runs adb with the serial number of the volantis device.
+# Replace YYYYYYYY with the actual serial number of the device.
+# This is just an example. Create one such wrapper for each Android
+# device used for running Go tests.
+
+exec adb -s YYYYYYYY "$@"
diff --git a/go/android/build_go b/go/android/build_go
new file mode 100755
index 00000000..65b7ec2b
--- /dev/null
+++ b/go/android/build_go
@@ -0,0 +1,26 @@
+#!/bin/bash
+set -e -o pipefail
+
+# This script builds the go cross compilers for Android targets.
+#
+# Usage: build_go
+#
+# It assumes that the "arm-linux-androideabi" toolchain is already installed.
+# It assumes that the "aarch64-linux-android" toolchain is already installed.
+
+if [[ ! -e "make.bash" && -e "src/make.bash" ]]
+then
+ cd src
+fi
+
+# Build the Go toolchain for arm devices.
+GOOS="android" GOARCH="arm" CGO_ENABLED="1" \
+ CC_FOR_TARGET="arm-linux-androideabi-gcc" \
+ CXX_FOR_TARGET="arm-linux-androideabi-g++" \
+ ./make.bash --no-clean
+
+# Build the Go toolchain for arm64 devices.
+GOOS="android" GOARCH="arm64" CGO_ENABLED="1" \
+ CC_FOR_TARGET="aarch64-linux-android-gcc" \
+ CXX_FOR_TARGET="aarch64-linux-android-g++" \
+ ./make.bash --no-clean
diff --git a/go/android/go_shamu b/go/android/go_shamu
new file mode 100755
index 00000000..7e1ffbea
--- /dev/null
+++ b/go/android/go_shamu
@@ -0,0 +1,11 @@
+#!/bin/bash
+
+# Invoke the Go cross compiler for shamu.
+# Uses ../go_target to add PIE flags.
+#
+# This is just an example for an arm device.
+
+GOOS="android" GOARCH="arm" CGO_ENABLED="1" \
+ CC="arm-linux-androideabi-gcc" \
+ CXX="arm-linux-androideabi-g++" \
+ exec go_target "$@"
diff --git a/go/android/go_shamu_exec b/go/android/go_shamu_exec
new file mode 100755
index 00000000..2c169026
--- /dev/null
+++ b/go/android/go_shamu_exec
@@ -0,0 +1,8 @@
+#!/bin/bash
+
+# Copy and remotely execute a binary on the shamu device.
+#
+# For this to work, the corresponding adb_shamu wrapper
+# must exist to tell adb the serial number of the device.
+
+GOOS="android" GOARCH="arm" exec go_target_exec shamu "$@"
diff --git a/go/android/go_volantis b/go/android/go_volantis
new file mode 100755
index 00000000..bfeab196
--- /dev/null
+++ b/go/android/go_volantis
@@ -0,0 +1,11 @@
+#!/bin/bash
+
+# Invoke the Go cross compiler for volantis.
+# Uses ../go_target to add PIE flags.
+#
+# This is just an example for an arm64 device.
+
+GOOS="android" GOARCH="arm64" CGO_ENABLED="1" \
+ CC="aarch64-linux-android-gcc" \
+ CXX="aarch64-linux-android-g++" \
+ exec go_target "$@"
diff --git a/go/android/go_volantis_exec b/go/android/go_volantis_exec
new file mode 100755
index 00000000..86cb2cfb
--- /dev/null
+++ b/go/android/go_volantis_exec
@@ -0,0 +1,8 @@
+#!/bin/bash
+
+# Copy and remotely execute a binary on the volantis device.
+#
+# For this to work, the corresponding adb_volantis wrapper
+# must exist to tell adb the serial number of the device.
+
+GOOS="android" GOARCH="arm64" exec go_target_exec volantis "$@"
diff --git a/go/android/target_cp b/go/android/target_cp
new file mode 100755
index 00000000..8a311534
--- /dev/null
+++ b/go/android/target_cp
@@ -0,0 +1,28 @@
+#!/bin/bash
+set -e -o pipefail
+
+# Copy a file or directory to the target Android device.
+#
+# Usage: target_cp <src> <target>:<dest>
+
+src="$1"
+shift
+
+targetdest="$1"
+shift
+
+target="${targetdest%:*}"
+dest="${targetdest#*:}"
+
+if [[ -z "${src}" || -z "${target}" || -z "${dest}" || "${targetdest}" != "${target}:${dest}" || -n "$*" ]]
+then
+ echo "Usage: target_cp <src> <target>:<dest>"
+ exit 1
+fi
+
+if [[ -d ${src} ]]
+then
+ adb_${target} push ${src} ${dest}/${src##*/} 2>/dev/null
+else
+ adb_${target} push ${src} ${dest} 2>/dev/null
+fi
diff --git a/go/android/target_sh b/go/android/target_sh
new file mode 100755
index 00000000..241843e8
--- /dev/null
+++ b/go/android/target_sh
@@ -0,0 +1,13 @@
+#!/bin/bash
+set -e -o pipefail
+
+# Run a command on the target Android device.
+#
+# Usage: target_sh <cmd> <args>...
+
+target="$1"
+shift
+
+exitcode="$(target_tmpdir)/exitcode"
+adb_${target} shell "$*; echo -n \$? > ${exitcode}" | sed -e 's:\r$::' -u
+exit $(adb_${target} shell "cat ${exitcode}")
diff --git a/go/android/target_tmpdir b/go/android/target_tmpdir
new file mode 100755
index 00000000..b5953696
--- /dev/null
+++ b/go/android/target_tmpdir
@@ -0,0 +1,5 @@
+#!/bin/bash
+
+# Temporary directory to be used on Android devices.
+
+echo "/data/local/tmp"
diff --git a/go/chromeos/build_go b/go/chromeos/build_go
new file mode 100755
index 00000000..cb882eaf
--- /dev/null
+++ b/go/chromeos/build_go
@@ -0,0 +1,45 @@
+#!/bin/bash
+set -e -o pipefail
+
+# This script builds the go cross compilers for ChromeOS targets.
+#
+# Usage: build_go
+#
+# It assumes that the "x86_64-cros-linux-gnu" toolchain is already installed.
+# It assumes that the "i686-pc-linux-gnu" toolchain is already installed.
+# It assumes that the "armv7a-cros-linux-gnueabi" toolchain is already installed.
+
+if [[ ! -e "make.bash" && -e "src/make.bash" ]]
+then
+ cd src
+fi
+
+# Build the Go toolchain for amd64 targets.
+GOOS="linux" GOARCH="amd64" CGO_ENABLED="1" \
+ CC_FOR_TARGET="x86_64-cros-linux-gnu-gcc" \
+ CXX_FOR_TARGET="x86_64-cros-linux-gnu-g++" \
+ ./make.bash --no-clean
+GOOS="linux" GOARCH="amd64" CGO_ENABLED="1" \
+ CC="x86_64-cros-linux-gnu-gcc" \
+ CXX="x86_64-cros-linux-gnu-g++" \
+ ../bin/go install -v -buildmode=pie std
+
+# Build the Go toolchain for 386 targets.
+GOOS="linux" GOARCH="386" CGO_ENABLED="1" \
+ CC_FOR_TARGET="i686-pc-linux-gnu-gcc" \
+ CXX_FOR_TARGET="i686-pc-linux-gnu-g++" \
+ ./make.bash --no-clean
+GOOS="linux" GOARCH="386" CGO_ENABLED="1" \
+ CC="i686-pc-linux-gnu-gcc" \
+ CXX="i686-pc-linux-gnu-g++" \
+ ../bin/go install -v -buildmode=pie std
+
+# Build the Go toolchain for arm targets.
+GOOS="linux" GOARCH="arm" CGO_ENABLED="1" \
+ CC_FOR_TARGET="armv7a-cros-linux-gnueabi-gcc" \
+ CXX_FOR_TARGET="armv7a-cros-linux-gnueabi-g++" \
+ ./make.bash --no-clean
+GOOS="linux" GOARCH="arm" CGO_ENABLED="1" \
+ CC="armv7a-cros-linux-gnueabi-gcc" \
+ CXX="armv7a-cros-linux-gnueabi-g++" \
+ ../bin/go install -v -buildmode=pie std
diff --git a/go/chromeos/go_daisy b/go/chromeos/go_daisy
new file mode 100755
index 00000000..db4a95ac
--- /dev/null
+++ b/go/chromeos/go_daisy
@@ -0,0 +1,11 @@
+#!/bin/bash
+
+# Invoke the Go cross compiler for daisy.
+# Uses ../go_target to add PIE flags.
+#
+# This is just an example for an arm board.
+
+GOOS="linux" GOARCH="arm" CGO_ENABLED="1" \
+ CC="armv7a-cros-linux-gnueabi-gcc" \
+ CXX="armv7a-cros-linux-gnueabi-g++" \
+ exec go_target "$@"
diff --git a/go/chromeos/go_daisy_exec b/go/chromeos/go_daisy_exec
new file mode 100755
index 00000000..3b9a63dd
--- /dev/null
+++ b/go/chromeos/go_daisy_exec
@@ -0,0 +1,10 @@
+#!/bin/bash
+
+# Copy and remotely execute a binary on the daisy device.
+#
+# For this to work, the corresponding entry must exist in
+# ~/.ssh/config and the device must already be setup for
+# password-less authentication. See setup instructions at
+# http://go/chromeos-toolchain-team/go-toolchain
+
+GOOS="linux" GOARCH="arm" exec go_target_exec daisy "$@"
diff --git a/go/chromeos/go_panther b/go/chromeos/go_panther
new file mode 100755
index 00000000..5c06f432
--- /dev/null
+++ b/go/chromeos/go_panther
@@ -0,0 +1,11 @@
+#!/bin/bash
+
+# Invoke the Go cross compiler for panther.
+# Uses ../go_target to add PIE flags.
+#
+# This is just an example for an amd64 board.
+
+GOOS="linux" GOARCH="amd64" CGO_ENABLED="1" \
+ CC="x86_64-cros-linux-gnu-gcc" \
+ CXX="x86_64-cros-linux-gnu-g++" \
+ exec go_target "$@"
diff --git a/go/chromeos/go_panther_exec b/go/chromeos/go_panther_exec
new file mode 100755
index 00000000..64f77b1f
--- /dev/null
+++ b/go/chromeos/go_panther_exec
@@ -0,0 +1,10 @@
+#!/bin/bash
+
+# Copy and remotely execute a binary on the panther device.
+#
+# For this to work, the corresponding entry must exist in
+# ~/.ssh/config and the device must already be setup for
+# password-less authentication. See setup instructions at
+# http://go/chromeos-toolchain-team/go-toolchain
+
+GOOS="linux" GOARCH="amd64" exec go_target_exec panther "$@"
diff --git a/go/chromeos/go_x86-zgb b/go/chromeos/go_x86-zgb
new file mode 100755
index 00000000..272efb58
--- /dev/null
+++ b/go/chromeos/go_x86-zgb
@@ -0,0 +1,11 @@
+#!/bin/bash
+
+# Invoke the Go cross compiler for x86-zgb.
+# Uses ../go_target to add PIE flags.
+#
+# This is just an example for an 386 board.
+
+GOOS="linux" GOARCH="386" CGO_ENABLED="1" \
+ CC="i686-pc-linux-gnu-gcc" \
+ CXX="i686-pc-linux-gnu-g++" \
+ exec go_target "$@"
diff --git a/go/chromeos/go_x86-zgb_exec b/go/chromeos/go_x86-zgb_exec
new file mode 100755
index 00000000..b0341f21
--- /dev/null
+++ b/go/chromeos/go_x86-zgb_exec
@@ -0,0 +1,10 @@
+#!/bin/bash
+
+# Copy and remotely execute a binary on the x86-zgb device.
+#
+# For this to work, the corresponding entry must exist in
+# ~/.ssh/config and the device must already be setup for
+# password-less authentication. See setup instructions at
+# http://go/chromeos-toolchain-team/go-toolchain
+
+GOOS="linux" GOARCH="386" exec go_target_exec x86-zgb "$@"
diff --git a/go/chromeos/target_cp b/go/chromeos/target_cp
new file mode 100755
index 00000000..6df476e6
--- /dev/null
+++ b/go/chromeos/target_cp
@@ -0,0 +1,28 @@
+#!/bin/bash
+set -e -o pipefail
+
+# Copy a file or directory to the target ChromeOS device.
+#
+# Usage: target_cp <src> <target>:<dest>
+
+src="$1"
+shift
+
+targetdest="$1"
+shift
+
+target="${targetdest%:*}"
+dest="${targetdest#*:}"
+
+if [[ -z "${src}" || -z "${target}" || -z "${dest}" || "${targetdest}" != "${target}:${dest}" || -n "$*" ]]
+then
+ echo "Usage: target_cp <src> <target>:<dest>"
+ exit 1
+fi
+
+if [[ -d ${src} ]]
+then
+ scp -rq ${src} ${target}:${dest}
+else
+ scp -q ${src} ${target}:${dest}
+fi
diff --git a/go/chromeos/target_sh b/go/chromeos/target_sh
new file mode 100755
index 00000000..43c5fac6
--- /dev/null
+++ b/go/chromeos/target_sh
@@ -0,0 +1,11 @@
+#!/bin/bash
+set -e -o pipefail
+
+# Run a command on the target ChromeOS device.
+#
+# Usage: target_sh <cmd> <args>...
+
+target="$1"
+shift
+
+ssh ${target} "$*"
diff --git a/go/chromeos/target_tmpdir b/go/chromeos/target_tmpdir
new file mode 100755
index 00000000..382a0334
--- /dev/null
+++ b/go/chromeos/target_tmpdir
@@ -0,0 +1,5 @@
+#!/bin/bash
+
+# Temporary directory to be used on ChromeOS devices.
+
+echo "/tmp"
diff --git a/go/go_local b/go/go_local
new file mode 100755
index 00000000..92954ef8
--- /dev/null
+++ b/go/go_local
@@ -0,0 +1,8 @@
+#!/bin/bash
+
+# Invoke the Go compiler for localhost.
+
+GOOS="linux" GOARCH="amd64" CGO_ENABLED="1" \
+ CC="gcc" \
+ CXX="g++" \
+ exec go "$@"
diff --git a/go/go_target b/go/go_target
new file mode 100755
index 00000000..05786377
--- /dev/null
+++ b/go/go_target
@@ -0,0 +1,83 @@
+#!/bin/bash
+set -e -o pipefail
+
+# This script wraps the go cross compilers.
+#
+# It ensures that Go binaries are linked with an external linker
+# by default (cross gcc). Appropriate flags are added to build a
+# position independent executable (PIE) for ASLR.
+# "export GOPIE=0" to temporarily disable this behavior.
+
+function pie_enabled()
+ {
+ [[ "${GOPIE}" != "0" ]]
+ }
+
+function has_ldflags()
+ {
+ # Check if any linker flags are present in argv.
+ for arg in "$@"
+ do
+ case "${arg}" in
+ -ldflags | -ldflags=*) return 0 ;;
+ -linkmode | -linkmode=*) return 0 ;;
+ -buildmode | -buildmode=*) return 0 ;;
+ -installsuffix | -installsuffix=*) return 0 ;;
+ -extld | -extld=*) return 0 ;;
+ -extldflags | -extldflags=*) return 0 ;;
+ esac
+ done
+ return 1
+ }
+
+pie_flags=()
+if pie_enabled && ! has_ldflags "$@"
+then
+ case "$1" in
+ build | install | run | test)
+ # Add "-buildmode=pie" to "go build|install|run|test" commands.
+ pie_flags=(
+ "$1"
+ "-buildmode=pie"
+ )
+ shift
+ ;;
+ tool)
+ case "$2" in
+ asm)
+ # Handle direct assembler invocations ("go tool asm <args>").
+ pie_flags=(
+ "$1"
+ "$2"
+ "-shared"
+ )
+ shift 2
+ ;;
+ compile)
+ # Handle direct compiler invocations ("go tool compile <args>").
+ pie_flags=(
+ "$1"
+ "$2"
+ "-shared"
+ "-installsuffix=shared"
+ )
+ shift 2
+ ;;
+ link)
+ # Handle direct linker invocations ("go tool link <args>").
+ pie_flags=(
+ "$1"
+ "$2"
+ "-installsuffix=shared"
+ "-buildmode=pie"
+ "-extld"
+ "${CC}"
+ )
+ shift 2
+ ;;
+ esac
+ ;;
+ esac
+fi
+
+exec go "${pie_flags[@]}" "$@"
diff --git a/go/go_target_exec b/go/go_target_exec
new file mode 100755
index 00000000..34d9e799
--- /dev/null
+++ b/go/go_target_exec
@@ -0,0 +1,41 @@
+#!/bin/bash
+set -e -o pipefail
+
+# This wrapper copies an executable to a target device and executes it there.
+#
+# Usage: go_target_exec <target> <binary> <args>...
+#
+# This script can work with both ChromeOS/Android devices.
+#
+# It uses "target_tmpdir" to get the path to the temporary directory on the device.
+# It uses "target_cp" to copy the binary to the temporary directory on the device.
+# It uses "target_sh" to execute the binary remotely and get the output/exitcode.
+
+target="$1"
+shift
+
+binary="$1"
+shift
+
+# Get path to temporary directory on device and copy the binary over.
+tmpdir="$(target_tmpdir)"
+target_cp ${binary} ${target}:${tmpdir}/a.out
+
+# If current directory is inside GOROOT, then execute the binary in the
+# corresponding directory inside GOROOT on the device.
+targetdir="${tmpdir}"
+goroot="$(go_${target} env GOROOT)"
+if [[ "${PWD}" == ${goroot}/src/* ]]
+then
+ targetdir="${tmpdir}/go/src/${PWD#${goroot}/src/}"
+fi
+
+# Set GOROOT, and forward some environment variables to the remote shell.
+vars="GOROOT=${tmpdir}/go"
+vars+="${GOOS:+ GOOS=${GOOS}}"
+vars+="${GOARCH:+ GOARCH=${GOARCH}}"
+vars+="${GOMAXPROCS:+ GOMAXPROCS=${GOMAXPROCS}}"
+vars+="${GOTRACEBACK:+ GOTRACEBACK=${GOTRACEBACK}}"
+
+# Remotely execute the binary using ssh (for ChromeOS) or adb (for Android).
+target_sh ${target} "cd ${targetdir} && ${vars} ${tmpdir}/a.out $*"
diff --git a/go/patch/go0.patch b/go/patch/go0.patch
new file mode 100644
index 00000000..27e1451e
--- /dev/null
+++ b/go/patch/go0.patch
@@ -0,0 +1,33 @@
+testenv: look for "go" executable in path.
+
+--- src/go/build/deps_test.go
++++ src/go/build/deps_test.go
+@@ -168,7 +168,7 @@ var pkgDeps = map[string][]string{
+ "testing": {"L2", "flag", "fmt", "os", "runtime/debug", "runtime/pprof", "runtime/trace", "time"},
+ "testing/iotest": {"L2", "log"},
+ "testing/quick": {"L2", "flag", "fmt", "reflect"},
+- "internal/testenv": {"L2", "os", "testing"},
++ "internal/testenv": {"L2", "os", "os/exec", "testing"},
+
+ // L4 is defined as L3+fmt+log+time, because in general once
+ // you're using L3 packages, use of fmt, log, or time is not a big deal.
+--- src/internal/testenv/testenv.go
++++ src/internal/testenv/testenv.go
+@@ -12,6 +12,7 @@ package testenv
+
+ import (
+ "os"
++ "os/exec"
+ "runtime"
+ "strings"
+ "testing"
+@@ -36,6 +37,9 @@ func HasGoBuild() bool {
+ return false
+ }
+ }
++ if _, err := exec.LookPath("go"); err != nil {
++ return false
++ }
+ return true
+ }
+
diff --git a/go/patch/go1.patch b/go/patch/go1.patch
new file mode 100644
index 00000000..49d229ec
--- /dev/null
+++ b/go/patch/go1.patch
@@ -0,0 +1,50 @@
+test: enable some tests on android/arm64.
+
+--- test/chanlinear.go
++++ test/chanlinear.go
+@@ -1,4 +1,4 @@
+-// +build darwin linux
++// +build darwin linux android
+ // run
+
+ // Copyright 2014 The Go Authors. All rights reserved.
+--- test/fixedbugs/bug385_64.go
++++ test/fixedbugs/bug385_64.go
+@@ -1,4 +1,4 @@
+-// +build amd64
++// +build amd64 arm64
+ // errorcheck
+
+ // Copyright 2011 The Go Authors. All rights reserved.
+--- test/fixedbugs/issue10607.go
++++ test/fixedbugs/issue10607.go
+@@ -1,4 +1,4 @@
+-// +build linux,!ppc64,!ppc64le,!mips64,!mips64le
++// +build linux,!ppc64,!ppc64le,!mips64,!mips64le android
+ // run
+
+ // Copyright 2015 The Go Authors. All rights reserved.
+--- test/fixedbugs/issue6036.go
++++ test/fixedbugs/issue6036.go
+@@ -1,4 +1,4 @@
+-// +build amd64
++// +build amd64 arm64
+ // compile
+
+ // Copyright 2013 The Go Authors. All rights reserved.
+--- test/maplinear.go
++++ test/maplinear.go
+@@ -1,4 +1,4 @@
+-// +build darwin linux
++// +build darwin linux android
+ // run
+
+ // Copyright 2013 The Go Authors. All rights reserved.
+--- test/recover4.go
++++ test/recover4.go
+@@ -1,4 +1,4 @@
+-// +build linux darwin
++// +build linux android darwin
+ // run
+
+ // Copyright 2015 The Go Authors. All rights reserved.
diff --git a/go/patch/go2.patch b/go/patch/go2.patch
new file mode 100644
index 00000000..dfc236a4
--- /dev/null
+++ b/go/patch/go2.patch
@@ -0,0 +1,173 @@
+test: add -target flag.
+
+--- test/run.go
++++ test/run.go
+@@ -37,9 +37,9 @@ var (
+ numParallel = flag.Int("n", runtime.NumCPU(), "number of parallel tests to run")
+ summary = flag.Bool("summary", false, "show summary of results")
+ showSkips = flag.Bool("show_skips", false, "show skipped tests")
+- linkshared = flag.Bool("linkshared", false, "")
+ updateErrors = flag.Bool("update_errors", false, "update error messages in test file based on compiler output")
+ runoutputLimit = flag.Int("l", defaultRunOutputLimit(), "number of parallel runoutput tests to run")
++ target = flag.String("target", "", "if non empty, use 'go_target' to compile test files and 'go_target_exec' to run the binaries")
+
+ shard = flag.Int("shard", 0, "shard index to run. Only applicable if -shards is non-zero.")
+ shards = flag.Int("shards", 0, "number of shards. If 0, all tests are run. This is used by the continuous build.")
+@@ -192,19 +192,11 @@ func goFiles(dir string) []string {
+ type runCmd func(...string) ([]byte, error)
+
+ func compileFile(runcmd runCmd, longname string) (out []byte, err error) {
+- cmd := []string{"go", "tool", "compile", "-e"}
+- if *linkshared {
+- cmd = append(cmd, "-dynlink", "-installsuffix=dynlink")
+- }
+- cmd = append(cmd, longname)
+- return runcmd(cmd...)
++ return runcmd(findGoCmd(), "tool", "compile", "-e", longname)
+ }
+
+ func compileInDir(runcmd runCmd, dir string, names ...string) (out []byte, err error) {
+- cmd := []string{"go", "tool", "compile", "-e", "-D", ".", "-I", "."}
+- if *linkshared {
+- cmd = append(cmd, "-dynlink", "-installsuffix=dynlink")
+- }
++ cmd := []string{findGoCmd(), "tool", "compile", "-e", "-D", ".", "-I", "."}
+ for _, name := range names {
+ cmd = append(cmd, filepath.Join(dir, name))
+ }
+@@ -213,15 +205,21 @@ func compileInDir(runcmd runCmd, dir string, names ...string) (out []byte, err e
+
+ func linkFile(runcmd runCmd, goname string) (err error) {
+ pfile := strings.Replace(goname, ".go", ".o", -1)
+- cmd := []string{"go", "tool", "link", "-w", "-o", "a.exe", "-L", "."}
+- if *linkshared {
+- cmd = append(cmd, "-linkshared", "-installsuffix=dynlink")
+- }
+- cmd = append(cmd, pfile)
+- _, err = runcmd(cmd...)
++ _, err = runcmd(findGoCmd(), "tool", "link", "-w", "-o", "a.exe", "-L", ".", pfile)
+ return
+ }
+
++func goRun(runcmd runCmd, goname string, args ...string) (out []byte, err error) {
++ cmd := []string{findGoCmd(), "run"}
++ if len(findExecCmd()) > 0 {
++ cmd = append(cmd, "-exec")
++ cmd = append(cmd, findExecCmd()...)
++ }
++ cmd = append(cmd, goname)
++ cmd = append(cmd, args...)
++ return runcmd(cmd...)
++}
++
+ // skipError describes why a test was skipped.
+ type skipError string
+
+@@ -530,8 +528,7 @@ func (t *test) run() {
+ t.err = fmt.Errorf("unimplemented action %q", action)
+
+ case "errorcheck":
+- cmdline := []string{"go", "tool", "compile", "-e", "-o", "a.o"}
+- // No need to add -dynlink even if linkshared if we're just checking for errors...
++ cmdline := []string{findGoCmd(), "tool", "compile", "-e", "-o", "a.o"}
+ cmdline = append(cmdline, flags...)
+ cmdline = append(cmdline, long)
+ out, err := runcmd(cmdline...)
+@@ -640,19 +637,14 @@ func (t *test) run() {
+ }
+
+ case "build":
+- _, err := runcmd("go", "build", "-o", "a.exe", long)
++ _, err := runcmd(findGoCmd(), "build", "-o", "a.exe", long)
+ if err != nil {
+ t.err = err
+ }
+
+ case "run":
+ useTmp = false
+- cmd := []string{"go", "run"}
+- if *linkshared {
+- cmd = append(cmd, "-linkshared")
+- }
+- cmd = append(cmd, t.goFileName())
+- out, err := runcmd(append(cmd, args...)...)
++ out, err := goRun(runcmd, t.goFileName(), args...)
+ if err != nil {
+ t.err = err
+ return
+@@ -667,12 +659,7 @@ func (t *test) run() {
+ <-rungatec
+ }()
+ useTmp = false
+- cmd := []string{"go", "run"}
+- if *linkshared {
+- cmd = append(cmd, "-linkshared")
+- }
+- cmd = append(cmd, t.goFileName())
+- out, err := runcmd(append(cmd, args...)...)
++ out, err := goRun(runcmd, t.goFileName(), args...)
+ if err != nil {
+ t.err = err
+ return
+@@ -682,12 +669,7 @@ func (t *test) run() {
+ t.err = fmt.Errorf("write tempfile:%s", err)
+ return
+ }
+- cmd = []string{"go", "run"}
+- if *linkshared {
+- cmd = append(cmd, "-linkshared")
+- }
+- cmd = append(cmd, tfile)
+- out, err = runcmd(cmd...)
++ out, err = goRun(runcmd, tfile)
+ if err != nil {
+ t.err = err
+ return
+@@ -698,12 +680,7 @@ func (t *test) run() {
+
+ case "errorcheckoutput":
+ useTmp = false
+- cmd := []string{"go", "run"}
+- if *linkshared {
+- cmd = append(cmd, "-linkshared")
+- }
+- cmd = append(cmd, t.goFileName())
+- out, err := runcmd(append(cmd, args...)...)
++ out, err := goRun(runcmd, t.goFileName(), args...)
+ if err != nil {
+ t.err = err
+ return
+@@ -714,7 +691,7 @@ func (t *test) run() {
+ t.err = fmt.Errorf("write tempfile:%s", err)
+ return
+ }
+- cmdline := []string{"go", "tool", "compile", "-e", "-o", "a.o"}
++ cmdline := []string{findGoCmd(), "tool", "compile", "-e", "-o", "a.o"}
+ cmdline = append(cmdline, flags...)
+ cmdline = append(cmdline, tfile)
+ out, err = runcmd(cmdline...)
+@@ -741,6 +718,10 @@ func findExecCmd() []string {
+ return execCmd
+ }
+ execCmd = []string{} // avoid work the second time
++ if *target != "" {
++ execCmd = []string{"go_" + *target + "_exec"}
++ return execCmd
++ }
+ if goos == runtime.GOOS && goarch == runtime.GOARCH {
+ return execCmd
+ }
+@@ -751,6 +732,13 @@ func findExecCmd() []string {
+ return execCmd
+ }
+
++func findGoCmd() string {
++ if *target != "" {
++ return "go_" + *target
++ }
++ return "go"
++}
++
+ func (t *test) String() string {
+ return filepath.Join(t.dir, t.gofile)
+ }
diff --git a/go/patch/go3.patch b/go/patch/go3.patch
new file mode 100644
index 00000000..37bd562f
--- /dev/null
+++ b/go/patch/go3.patch
@@ -0,0 +1,711 @@
+test: add runtarget action.
+
+--- test/fixedbugs/bug248.go
++++ test/fixedbugs/bug248.go
+@@ -1,5 +1,5 @@
+ // +build !nacl,!plan9,!windows
+-// run
++// runtarget
+
+ // Copyright 2009 The Go Authors. All rights reserved.
+ // Use of this source code is governed by a BSD-style
+@@ -8,13 +8,32 @@
+ package main
+
+ import (
++ "flag"
+ "fmt"
+ "os"
+ "os/exec"
+ "path/filepath"
+ )
+
++var target = flag.String("target", "", "if non empty, use 'go_target' to compile test files and 'go_target_exec' to run the binaries")
++
++func goCmd() string {
++ if *target != "" {
++ return "go_" + *target
++ }
++ return "go"
++}
++
++func goRun(cmd ...string) {
++ if *target == "" {
++ run(cmd[0], cmd[1:]...)
++ } else {
++ run("go_"+*target+"_exec", cmd...)
++ }
++}
++
+ func main() {
++ flag.Parse()
+ // TODO: If we get rid of errchk, re-enable this test on Windows.
+ errchk, err := filepath.Abs("errchk")
+ check(err)
+@@ -22,12 +41,12 @@ func main() {
+ err = os.Chdir(filepath.Join("fixedbugs", "bug248.dir"))
+ check(err)
+
+- run("go", "tool", "compile", "bug0.go")
+- run("go", "tool", "compile", "bug1.go")
+- run("go", "tool", "compile", "bug2.go")
+- run(errchk, "go", "tool", "compile", "-e", "bug3.go")
+- run("go", "tool", "link", "bug2.o")
+- run(fmt.Sprintf(".%ca.out", filepath.Separator))
++ run(goCmd(), "tool", "compile", "bug0.go")
++ run(goCmd(), "tool", "compile", "bug1.go")
++ run(goCmd(), "tool", "compile", "bug2.go")
++ run(errchk, goCmd(), "tool", "compile", "-e", "bug3.go")
++ run(goCmd(), "tool", "link", "bug2.o")
++ goRun(fmt.Sprintf(".%ca.out", filepath.Separator))
+
+ os.Remove("bug0.o")
+ os.Remove("bug1.o")
+--- test/fixedbugs/bug302.go
++++ test/fixedbugs/bug302.go
+@@ -1,5 +1,5 @@
+ // +build !nacl
+-// run
++// runtarget
+
+ // Copyright 2010 The Go Authors. All rights reserved.
+ // Use of this source code is governed by a BSD-style
+@@ -8,16 +8,27 @@
+ package main
+
+ import (
++ "flag"
+ "fmt"
+ "os"
+ "os/exec"
+ "path/filepath"
+ )
+
++var target = flag.String("target", "", "if non empty, use 'go_target' to compile test files and 'go_target_exec' to run the binaries")
++
++func goCmd() string {
++ if *target != "" {
++ return "go_" + *target
++ }
++ return "go"
++}
++
+ func main() {
+- run("go", "tool", "compile", filepath.Join("fixedbugs", "bug302.dir", "p.go"))
+- run("go", "tool", "pack", "grc", "pp.a", "p.o")
+- run("go", "tool", "compile", "-I", ".", filepath.Join("fixedbugs", "bug302.dir", "main.go"))
++ flag.Parse()
++ run(goCmd(), "tool", "compile", filepath.Join("fixedbugs", "bug302.dir", "p.go"))
++ run(goCmd(), "tool", "pack", "grc", "pp.a", "p.o")
++ run(goCmd(), "tool", "compile", "-I", ".", filepath.Join("fixedbugs", "bug302.dir", "main.go"))
+ os.Remove("p.o")
+ os.Remove("pp.a")
+ os.Remove("main.o")
+--- test/fixedbugs/bug345.go
++++ test/fixedbugs/bug345.go
+@@ -1,5 +1,5 @@
+ // +build !nacl,!plan9,!windows
+-// run
++// runtarget
+
+ // Copyright 2011 The Go Authors. All rights reserved.
+ // Use of this source code is governed by a BSD-style
+@@ -8,13 +8,24 @@
+ package main
+
+ import (
++ "flag"
+ "fmt"
+ "os"
+ "os/exec"
+ "path/filepath"
+ )
+
++var target = flag.String("target", "", "if non empty, use 'go_target' to compile test files and 'go_target_exec' to run the binaries")
++
++func goCmd() string {
++ if *target != "" {
++ return "go_" + *target
++ }
++ return "go"
++}
++
+ func main() {
++ flag.Parse()
+ // TODO: If we get rid of errchk, re-enable this test on Plan 9 and Windows.
+ errchk, err := filepath.Abs("errchk")
+ check(err)
+@@ -22,8 +33,8 @@ func main() {
+ err = os.Chdir(filepath.Join(".", "fixedbugs", "bug345.dir"))
+ check(err)
+
+- run("go", "tool", "compile", "io.go")
+- run(errchk, "go", "tool", "compile", "-e", "main.go")
++ run(goCmd(), "tool", "compile", "io.go")
++ run(errchk, goCmd(), "tool", "compile", "-e", "main.go")
+ os.Remove("io.o")
+ }
+
+--- test/fixedbugs/bug369.go
++++ test/fixedbugs/bug369.go
+@@ -1,5 +1,5 @@
+ // +build !nacl,!windows
+-// run
++// runtarget
+
+ // Copyright 2011 The Go Authors. All rights reserved.
+ // Use of this source code is governed by a BSD-style
+@@ -10,21 +10,40 @@
+ package main
+
+ import (
++ "flag"
+ "fmt"
+ "os"
+ "os/exec"
+ "path/filepath"
+ )
+
++var target = flag.String("target", "", "if non empty, use 'go_target' to compile test files and 'go_target_exec' to run the binaries")
++
++func goCmd() string {
++ if *target != "" {
++ return "go_" + *target
++ }
++ return "go"
++}
++
++func goRun(cmd ...string) {
++ if *target == "" {
++ run(cmd[0], cmd[1:]...)
++ } else {
++ run("go_"+*target+"_exec", cmd...)
++ }
++}
++
+ func main() {
++ flag.Parse()
+ err := os.Chdir(filepath.Join(".", "fixedbugs", "bug369.dir"))
+ check(err)
+
+- run("go", "tool", "compile", "-N", "-o", "slow.o", "pkg.go")
+- run("go", "tool", "compile", "-o", "fast.o", "pkg.go")
+- run("go", "tool", "compile", "-o", "main.o", "main.go")
+- run("go", "tool", "link", "-o", "a.exe", "main.o")
+- run("." + string(filepath.Separator) + "a.exe")
++ run(goCmd(), "tool", "compile", "-N", "-o", "slow.o", "pkg.go")
++ run(goCmd(), "tool", "compile", "-o", "fast.o", "pkg.go")
++ run(goCmd(), "tool", "compile", "-o", "main.o", "main.go")
++ run(goCmd(), "tool", "link", "-o", "a.exe", "main.o")
++ goRun("." + string(filepath.Separator) + "a.exe")
+
+ os.Remove("slow.o")
+ os.Remove("fast.o")
+--- test/fixedbugs/bug429_run.go
++++ test/fixedbugs/bug429_run.go
+@@ -1,5 +1,5 @@
+ // +build !nacl
+-// run
++// runtarget
+
+ // Copyright 2014 The Go Authors. All rights reserved.
+ // Use of this source code is governed by a BSD-style
+@@ -10,6 +10,7 @@
+ package main
+
+ import (
++ "flag"
+ "fmt"
+ "os"
+ "os/exec"
+@@ -17,8 +18,27 @@ import (
+ "strings"
+ )
+
++var target = flag.String("target", "", "if non empty, use 'go_target' to compile test files and 'go_target_exec' to run the binaries")
++
++func goCmd() string {
++ if *target != "" {
++ return "go_" + *target
++ }
++ return "go"
++}
++
++func goRun(args ...string) *exec.Cmd {
++ cmd := []string{"run"}
++ if *target != "" {
++ cmd = append(cmd, "-exec", "go_"+*target+"_exec")
++ }
++ cmd = append(cmd, args...)
++ return exec.Command(goCmd(), cmd...)
++}
++
+ func main() {
+- cmd := exec.Command("go", "run", filepath.Join("fixedbugs", "bug429.go"))
++ flag.Parse()
++ cmd := goRun(filepath.Join("fixedbugs", "bug429.go"))
+ out, err := cmd.CombinedOutput()
+ if err == nil {
+ fmt.Println("expected deadlock")
+--- test/fixedbugs/issue10607.go
++++ test/fixedbugs/issue10607.go
+@@ -1,5 +1,5 @@
+ // +build linux,!ppc64,!ppc64le,!mips64,!mips64le android
+-// run
++// runtarget
+
+ // Copyright 2015 The Go Authors. All rights reserved.
+ // Use of this source code is governed by a BSD-style
+@@ -11,19 +11,39 @@
+ package main
+
+ import (
++ "flag"
+ "fmt"
+ "os"
+ "os/exec"
+ "path/filepath"
+ )
+
++var target = flag.String("target", "", "if non empty, use 'go_target' to compile test files and 'go_target_exec' to run the binaries")
++
++func goCmd() string {
++ if *target != "" {
++ return "go_" + *target
++ }
++ return "go"
++}
++
++func goRun(args ...string) *exec.Cmd {
++ cmd := []string{"run"}
++ if *target != "" {
++ cmd = append(cmd, "-exec", "go_"+*target+"_exec")
++ }
++ cmd = append(cmd, args...)
++ return exec.Command(goCmd(), cmd...)
++}
++
+ func main() {
++ flag.Parse()
+ test("internal")
+ test("external")
+ }
+
+ func test(linkmode string) {
+- out, err := exec.Command("go", "run", "-ldflags", "-B=0x12345678 -linkmode="+linkmode, filepath.Join("fixedbugs", "issue10607a.go")).CombinedOutput()
++ out, err := goRun("-ldflags", "-B=0x12345678 -linkmode="+linkmode, filepath.Join("fixedbugs", "issue10607a.go")).CombinedOutput()
+ if err != nil {
+ fmt.Printf("BUG: linkmode=%s %v\n%s\n", linkmode, err, out)
+ os.Exit(1)
+--- test/fixedbugs/issue11771.go
++++ test/fixedbugs/issue11771.go
+@@ -1,5 +1,5 @@
+ // +build !nacl
+-// run
++// runtarget
+
+ // Copyright 2015 The Go Authors. All rights reserved.
+ // Use of this source code is governed by a BSD-style
+@@ -11,6 +11,7 @@ package main
+
+ import (
+ "bytes"
++ "flag"
+ "fmt"
+ "io/ioutil"
+ "log"
+@@ -20,7 +21,17 @@ import (
+ "runtime"
+ )
+
++var target = flag.String("target", "", "if non empty, use 'go_target' to compile test files and 'go_target_exec' to run the binaries")
++
++func goCmd() string {
++ if *target != "" {
++ return "go_" + *target
++ }
++ return "go"
++}
++
+ func main() {
++ flag.Parse()
+ if runtime.Compiler != "gc" {
+ return
+ }
+@@ -52,7 +63,7 @@ func x() {
+ log.Fatal(err)
+ }
+
+- cmd := exec.Command("go", "tool", "compile", "x.go")
++ cmd := exec.Command(goCmd(), "tool", "compile", "x.go")
+ cmd.Dir = dir
+ output, err := cmd.CombinedOutput()
+ if err == nil {
+--- test/fixedbugs/issue9355.go
++++ test/fixedbugs/issue9355.go
+@@ -1,4 +1,4 @@
+-// run
++// runtarget
+
+ // Copyright 2014 The Go Authors. All rights reserved.
+ // Use of this source code is governed by a BSD-style
+@@ -7,6 +7,7 @@
+ package main
+
+ import (
++ "flag"
+ "fmt"
+ "os"
+ "os/exec"
+@@ -15,7 +16,17 @@ import (
+ "runtime"
+ )
+
++var target = flag.String("target", "", "if non empty, use 'go_target' to compile test files and 'go_target_exec' to run the binaries")
++
++func goCmd() string {
++ if *target != "" {
++ return "go_" + *target
++ }
++ return "go"
++}
++
+ func main() {
++ flag.Parse()
+ if runtime.Compiler != "gc" || runtime.GOOS == "nacl" {
+ return
+ }
+@@ -23,7 +34,7 @@ func main() {
+ err := os.Chdir(filepath.Join("fixedbugs", "issue9355.dir"))
+ check(err)
+
+- out := run("go", "tool", "compile", "-S", "a.go")
++ out := run(goCmd(), "tool", "compile", "-S", "a.go")
+ os.Remove("a.o")
+
+ // 6g/8g print the offset as dec, but 5g/9g print the offset as hex.
+--- test/fixedbugs/issue9862_run.go
++++ test/fixedbugs/issue9862_run.go
+@@ -1,5 +1,5 @@
+ // +build !nacl
+-// run
++// runtarget
+
+ // Copyright 2015 The Go Authors. All rights reserved.
+ // Use of this source code is governed by a BSD-style
+@@ -10,12 +10,32 @@
+ package main
+
+ import (
++ "flag"
+ "os/exec"
+ "strings"
+ )
+
++var target = flag.String("target", "", "if non empty, use 'go_target' to compile test files and 'go_target_exec' to run the binaries")
++
++func goCmd() string {
++ if *target != "" {
++ return "go_" + *target
++ }
++ return "go"
++}
++
++func goRun(args ...string) *exec.Cmd {
++ cmd := []string{"run"}
++ if *target != "" {
++ cmd = append(cmd, "-exec", "go_"+*target+"_exec")
++ }
++ cmd = append(cmd, args...)
++ return exec.Command(goCmd(), cmd...)
++}
++
+ func main() {
+- out, err := exec.Command("go", "run", "fixedbugs/issue9862.go").CombinedOutput()
++ flag.Parse()
++ out, err := goRun("fixedbugs/issue9862.go").CombinedOutput()
+ outstr := string(out)
+ if err == nil {
+ println("go run issue9862.go succeeded, should have failed\n", outstr)
+--- test/linkmain_run.go
++++ test/linkmain_run.go
+@@ -1,5 +1,5 @@
+ // +build !nacl
+-// run
++// runtarget
+
+ // Copyright 2014 The Go Authors. All rights reserved.
+ // Use of this source code is governed by a BSD-style
+@@ -10,12 +10,22 @@
+ package main
+
+ import (
++ "flag"
+ "fmt"
+ "os"
+ "os/exec"
+ "strings"
+ )
+
++var target = flag.String("target", "", "if non empty, use 'go_target' to compile test files and 'go_target_exec' to run the binaries")
++
++func goCmd() string {
++ if *target != "" {
++ return "go_" + *target
++ }
++ return "go"
++}
++
+ func cleanup() {
+ os.Remove("linkmain.o")
+ os.Remove("linkmain.a")
+@@ -51,16 +61,18 @@ func runFail(cmdline string) {
+ }
+
+ func main() {
++ flag.Parse()
++
+ // helloworld.go is package main
+- run("go tool compile -o linkmain.o helloworld.go")
+- run("go tool compile -pack -o linkmain.a helloworld.go")
+- run("go tool link -o linkmain.exe linkmain.o")
+- run("go tool link -o linkmain.exe linkmain.a")
++ run(goCmd() + " tool compile -o linkmain.o helloworld.go")
++ run(goCmd() + " tool compile -pack -o linkmain.a helloworld.go")
++ run(goCmd() + " tool link -o linkmain.exe linkmain.o")
++ run(goCmd() + " tool link -o linkmain.exe linkmain.a")
+
+ // linkmain.go is not
+- run("go tool compile -o linkmain1.o linkmain.go")
+- run("go tool compile -pack -o linkmain1.a linkmain.go")
+- runFail("go tool link -o linkmain.exe linkmain1.o")
+- runFail("go tool link -o linkmain.exe linkmain1.a")
++ run(goCmd() + " tool compile -o linkmain1.o linkmain.go")
++ run(goCmd() + " tool compile -pack -o linkmain1.a linkmain.go")
++ runFail(goCmd() + " tool link -o linkmain.exe linkmain1.o")
++ runFail(goCmd() + " tool link -o linkmain.exe linkmain1.a")
+ cleanup()
+ }
+--- test/linkx_run.go
++++ test/linkx_run.go
+@@ -1,5 +1,5 @@
+ // +build !nacl
+-// run
++// runtarget
+
+ // Copyright 2014 The Go Authors. All rights reserved.
+ // Use of this source code is governed by a BSD-style
+@@ -11,20 +11,40 @@ package main
+
+ import (
+ "bytes"
++ "flag"
+ "fmt"
+ "os"
+ "os/exec"
+ "strings"
+ )
+
++var target = flag.String("target", "", "if non empty, use 'go_target' to compile test files and 'go_target_exec' to run the binaries")
++
++func goCmd() string {
++ if *target != "" {
++ return "go_" + *target
++ }
++ return "go"
++}
++
++func goRun(args ...string) *exec.Cmd {
++ cmd := []string{"run"}
++ if *target != "" {
++ cmd = append(cmd, "-exec", "go_"+*target+"_exec")
++ }
++ cmd = append(cmd, args...)
++ return exec.Command(goCmd(), cmd...)
++}
++
+ func main() {
++ flag.Parse()
+ test(" ") // old deprecated syntax
+ test("=") // new syntax
+ }
+
+ func test(sep string) {
+ // Successful run
+- cmd := exec.Command("go", "run", "-ldflags=-X main.tbd"+sep+"hello -X main.overwrite"+sep+"trumped -X main.nosuchsymbol"+sep+"neverseen", "linkx.go")
++ cmd := goRun("-ldflags=-X main.tbd"+sep+"hello -X main.overwrite"+sep+"trumped -X main.nosuchsymbol"+sep+"neverseen", "linkx.go")
+ var out, errbuf bytes.Buffer
+ cmd.Stdout = &out
+ cmd.Stderr = &errbuf
+@@ -44,7 +64,7 @@ func test(sep string) {
+ }
+
+ // Issue 8810
+- cmd = exec.Command("go", "run", "-ldflags=-X main.tbd", "linkx.go")
++ cmd = goRun("-ldflags=-X main.tbd", "linkx.go")
+ _, err = cmd.CombinedOutput()
+ if err == nil {
+ fmt.Println("-X linker flag should not accept keys without values")
+@@ -52,7 +72,7 @@ func test(sep string) {
+ }
+
+ // Issue 9621
+- cmd = exec.Command("go", "run", "-ldflags=-X main.b=false -X main.x=42", "linkx.go")
++ cmd = goRun("-ldflags=-X main.b=false -X main.x=42", "linkx.go")
+ outx, err := cmd.CombinedOutput()
+ if err == nil {
+ fmt.Println("-X linker flag should not overwrite non-strings")
+--- test/nosplit.go
++++ test/nosplit.go
+@@ -1,5 +1,5 @@
+ // +build !nacl
+-// run
++// runtarget
+
+ // Copyright 2014 The Go Authors. All rights reserved.
+ // Use of this source code is governed by a BSD-style
+@@ -9,6 +9,7 @@ package main
+
+ import (
+ "bytes"
++ "flag"
+ "fmt"
+ "io/ioutil"
+ "log"
+@@ -16,11 +17,28 @@ import (
+ "os/exec"
+ "path/filepath"
+ "regexp"
+- "runtime"
+ "strconv"
+ "strings"
+ )
+
++var target = flag.String("target", "", "if non empty, use 'go_target' to compile test files and 'go_target_exec' to run the binaries")
++
++func goCmd() string {
++ if *target != "" {
++ return "go_" + *target
++ }
++ return "go"
++}
++
++func goArch() string {
++ goarch, err := exec.Command(goCmd(), "env", "GOARCH").Output()
++ if err != nil {
++ bug()
++ fmt.Printf("running go env GOARCH: %v\n", err)
++ }
++ return strings.TrimSpace(string(goarch))
++}
++
+ var tests = `
+ # These are test cases for the linker analysis that detects chains of
+ # nosplit functions that would cause a stack overflow.
+@@ -193,12 +211,13 @@ var (
+ )
+
+ func main() {
+- goarch := os.Getenv("GOARCH")
++ flag.Parse()
++ goarch := goArch()
+ if goarch == "" {
+- goarch = runtime.GOARCH
++ return
+ }
+
+- version, err := exec.Command("go", "tool", "compile", "-V").Output()
++ version, err := exec.Command(goCmd(), "tool", "compile", "-V").Output()
+ if err != nil {
+ bug()
+ fmt.Printf("running go tool compile -V: %v\n", err)
+@@ -338,7 +357,7 @@ TestCases:
+ log.Fatal(err)
+ }
+
+- cmd := exec.Command("go", "build")
++ cmd := exec.Command(goCmd(), "build")
+ cmd.Dir = dir
+ output, err := cmd.CombinedOutput()
+ if err == nil {
+--- test/run.go
++++ test/run.go
+@@ -220,6 +220,16 @@ func goRun(runcmd runCmd, goname string, args ...string) (out []byte, err error)
+ return runcmd(cmd...)
+ }
+
++func goRunTarget(runcmd runCmd, goname string, args ...string) (out []byte, err error) {
++ cmd := []string{"go_local", "run"}
++ cmd = append(cmd, goname)
++ if *target != "" {
++ cmd = append(cmd, "-target", *target)
++ }
++ cmd = append(cmd, args...)
++ return runcmd(cmd...)
++}
++
+ // skipError describes why a test was skipped.
+ type skipError string
+
+@@ -469,7 +479,7 @@ func (t *test) run() {
+ case "cmpout":
+ action = "run" // the run case already looks for <dir>/<test>.out files
+ fallthrough
+- case "compile", "compiledir", "build", "run", "runoutput", "rundir":
++ case "compile", "compiledir", "build", "run", "runtarget", "runoutput", "rundir":
+ t.action = action
+ case "errorcheck", "errorcheckdir", "errorcheckoutput":
+ t.action = action
+@@ -653,6 +663,17 @@ func (t *test) run() {
+ t.err = fmt.Errorf("incorrect output\n%s", out)
+ }
+
++ case "runtarget":
++ useTmp = false
++ out, err := goRunTarget(runcmd, t.goFileName(), args...)
++ if err != nil {
++ t.err = err
++ return
++ }
++ if strings.Replace(string(out), "\r\n", "\n", -1) != t.expectedOutput() {
++ t.err = fmt.Errorf("incorrect output\n%s", out)
++ }
++
+ case "runoutput":
+ rungatec <- true
+ defer func() {
+--- test/sinit_run.go
++++ test/sinit_run.go
+@@ -1,5 +1,5 @@
+ // +build !nacl
+-// run
++// runtarget
+
+ // Copyright 2014 The Go Authors. All rights reserved.
+ // Use of this source code is governed by a BSD-style
+@@ -11,13 +11,24 @@ package main
+
+ import (
+ "bytes"
++ "flag"
+ "fmt"
+ "os"
+ "os/exec"
+ )
+
++var target = flag.String("target", "", "if non empty, use 'go_target' to compile test files and 'go_target_exec' to run the binaries")
++
++func goCmd() string {
++ if *target != "" {
++ return "go_" + *target
++ }
++ return "go"
++}
++
+ func main() {
+- cmd := exec.Command("go", "tool", "compile", "-S", "sinit.go")
++ flag.Parse()
++ cmd := exec.Command(goCmd(), "tool", "compile", "-S", "sinit.go")
+ out, err := cmd.CombinedOutput()
+ if err != nil {
+ fmt.Println(string(out))
diff --git a/go/patch/go4.patch b/go/patch/go4.patch
new file mode 100644
index 00000000..1c96c093
--- /dev/null
+++ b/go/patch/go4.patch
@@ -0,0 +1,101 @@
+runtime, crypto/x509: add -target flag.
+
+--- src/crypto/x509/x509_test.go
++++ src/crypto/x509/x509_test.go
+@@ -19,6 +19,7 @@ import (
+ "encoding/hex"
+ "encoding/pem"
+ "fmt"
++ "flag"
+ "internal/testenv"
+ "math/big"
+ "net"
+@@ -28,6 +29,8 @@ import (
+ "time"
+ )
+
++var target = flag.String("target", "", "if non empty, use 'go_target' to compile test files and 'go_target_exec' to run the binaries")
++
+ func TestParsePKCS1PrivateKey(t *testing.T) {
+ block, _ := pem.Decode([]byte(pemPrivateKey))
+ priv, err := ParsePKCS1PrivateKey(block.Bytes)
+@@ -862,7 +865,13 @@ func TestParsePEMCRL(t *testing.T) {
+ func TestImports(t *testing.T) {
+ testenv.MustHaveGoRun(t)
+
+- if err := exec.Command("go", "run", "x509_test_import.go").Run(); err != nil {
++ var cmd *exec.Cmd
++ if *target == "" {
++ cmd = exec.Command("go", "run", "x509_test_import.go")
++ } else {
++ cmd = exec.Command("go_"+*target, "run", "-exec", "go_"+*target+"_exec", "x509_test_import.go")
++ }
++ if err := cmd.Run(); err != nil {
+ t.Errorf("failed to run x509_test_import.go: %s", err)
+ }
+ }
+--- src/runtime/crash_test.go
++++ src/runtime/crash_test.go
+@@ -5,6 +5,7 @@
+ package runtime_test
+
+ import (
++ "flag"
+ "fmt"
+ "internal/testenv"
+ "io/ioutil"
+@@ -18,6 +19,25 @@ import (
+ "testing"
+ )
+
++var target = flag.String("target", "", "if non empty, use 'go_target' to compile test files and 'go_target_exec' to run the binaries")
++
++func goCmd() string {
++ if *target != "" {
++ return "go_" + *target
++ }
++ return "go"
++}
++
++func goExecCmd(name string, arg ...string) *exec.Cmd {
++ var cmd []string
++ if *target != "" {
++ cmd = append(cmd, "go_"+*target+"_exec")
++ }
++ cmd = append(cmd, name)
++ cmd = append(cmd, arg...)
++ return exec.Command(cmd[0], cmd[1:]...)
++}
++
+ var toRemove []string
+
+ func TestMain(m *testing.M) {
+@@ -65,7 +85,7 @@ func runTestProg(t *testing.T, binary, name string) string {
+ if err != nil {
+ t.Fatal(err)
+ }
+- got, _ := testEnv(exec.Command(exe, name)).CombinedOutput()
++ got, _ := testEnv(goExecCmd(exe, name)).CombinedOutput()
+ return string(got)
+ }
+
+@@ -92,7 +112,7 @@ func buildTestProg(t *testing.T, binary string) (string, error) {
+ }
+
+ exe := filepath.Join(testprog.dir, binary+".exe")
+- cmd := exec.Command("go", "build", "-o", exe)
++ cmd := exec.Command(goCmd(), "build", "-o", exe)
+ cmd.Dir = "testdata/" + binary
+ out, err := testEnv(cmd).CombinedOutput()
+ if err != nil {
+--- src/runtime/crash_unix_test.go
++++ src/runtime/crash_unix_test.go
+@@ -157,7 +157,7 @@ func TestSignalExitStatus(t *testing.T) {
+ if err != nil {
+ t.Fatal(err)
+ }
+- err = testEnv(exec.Command(exe, "SignalExitStatus")).Run()
++ err = testEnv(goExecCmd(exe, "SignalExitStatus")).Run()
+ if err == nil {
+ t.Error("test program succeeded unexpectedly")
+ } else if ee, ok := err.(*exec.ExitError); !ok {
diff --git a/go/patch/go5.patch b/go/patch/go5.patch
new file mode 100644
index 00000000..fa656586
--- /dev/null
+++ b/go/patch/go5.patch
@@ -0,0 +1,198 @@
+misc/cgo/testcshared: add support for -target.
+
+--- misc/cgo/testcshared/test.bash
++++ misc/cgo/testcshared/test.bash
+@@ -14,9 +14,23 @@ if [ ! -f src/libgo/libgo.go ]; then
+ exit 1
+ fi
+
+-goos=$(go env GOOS)
+-goarch=$(go env GOARCH)
+-goroot=$(go env GOROOT)
++function target()
++ {
++ [[ -n "${target}" ]]
++ }
++
++function go_target()
++ {
++ if target; then
++ go_${target} "$@"
++ else
++ go "$@"
++ fi
++ }
++
++goos=$(go_target env GOOS)
++goarch=$(go_target env GOARCH)
++goroot=$(go_target env GOROOT)
+ if [ ! -d "$goroot" ]; then
+ echo 'misc/cgo/testcshared/test.bash cannnot find GOROOT' 1>&2
+ echo '$GOROOT:' "$GOROOT" 1>&2
+@@ -31,8 +45,10 @@ if [ "${goos}" == "darwin" ]; then
+ installdir=pkg/${goos}_${goarch}_testcshared
+ fi
+
+-# Temporary directory on the android device.
+-androidpath=/data/local/tmp/testcshared-$$
++# Temporary directory on the android/chromeos device.
++if target; then
++ remotepath=$(target_tmpdir)/testcshared-$$
++fi
+
+ function cleanup() {
+ rm -f libgo.$libext libgo2.$libext libgo4.$libext libgo5.$libext
+@@ -40,37 +56,33 @@ function cleanup() {
+ rm -f testp testp2 testp3 testp4 testp5
+ rm -rf pkg "${goroot}/${installdir}"
+
+- if [ "$goos" == "android" ]; then
+- adb shell rm -rf "$androidpath"
++ if target; then
++ target_sh "${target}" "rm -rf $remotepath"
+ fi
+ }
+ trap cleanup EXIT
+
+-if [ "$goos" == "android" ]; then
+- adb shell mkdir -p "$androidpath"
++if target; then
++ target_sh "${target}" "mkdir -p $remotepath"
+ fi
+
+ function run() {
+- case "$goos" in
+- "android")
++ if target; then
+ local args=$@
+- output=$(adb shell "cd ${androidpath}; $@")
+- output=$(echo $output|tr -d '\r')
++ output=$(target_sh "${target}" "cd ${remotepath}; $@")
+ case $output in
+ *PASS) echo "PASS";;
+ *) echo "$output";;
+ esac
+- ;;
+- *)
++ else
+ echo $(env $@)
+- ;;
+- esac
++ fi
+ }
+
+ function binpush() {
+ bin=${1}
+- if [ "$goos" == "android" ]; then
+- adb push "$bin" "${androidpath}/${bin}" 2>/dev/null
++ if target; then
++ target_cp "$bin" "${target}:${remotepath}/${bin}"
+ fi
+ }
+
+@@ -84,9 +96,9 @@ if [ "$goos" == "darwin" ]; then
+ fi
+
+ # Create the header files.
+-GOPATH=$(pwd) go install -buildmode=c-shared $suffix libgo
++GOPATH=$(pwd) go_target install -buildmode=c-shared $suffix libgo
+
+-GOPATH=$(pwd) go build -buildmode=c-shared $suffix -o libgo.$libext src/libgo/libgo.go
++GOPATH=$(pwd) go_target build -buildmode=c-shared $suffix -o libgo.$libext src/libgo/libgo.go
+ binpush libgo.$libext
+
+ if [ "$goos" == "linux" ] || [ "$goos" == "android" ] ; then
+@@ -96,8 +108,8 @@ if [ "$goos" == "linux" ] || [ "$goos" == "android" ] ; then
+ fi
+ fi
+
+-GOGCCFLAGS=$(go env GOGCCFLAGS)
+-if [ "$goos" == "android" ]; then
++GOGCCFLAGS=$(go_target env GOGCCFLAGS)
++if target; then
+ GOGCCFLAGS="${GOGCCFLAGS} -pie"
+ fi
+
+@@ -105,7 +117,7 @@ status=0
+
+ # test0: exported symbols in shared lib are accessible.
+ # TODO(iant): using _shared here shouldn't really be necessary.
+-$(go env CC) ${GOGCCFLAGS} -I ${installdir} -o testp main0.c libgo.$libext
++$(go_target env CC) ${GOGCCFLAGS} -I ${installdir} -o testp main0.c libgo.$libext
+ binpush testp
+
+ output=$(run LD_LIBRARY_PATH=. ./testp)
+@@ -115,7 +127,7 @@ if [ "$output" != "PASS" ]; then
+ fi
+
+ # test1: shared library can be dynamically loaded and exported symbols are accessible.
+-$(go env CC) ${GOGCCFLAGS} -o testp main1.c -ldl
++$(go_target env CC) ${GOGCCFLAGS} -o testp main1.c -ldl
+ binpush testp
+ output=$(run ./testp ./libgo.$libext)
+ if [ "$output" != "PASS" ]; then
+@@ -124,13 +136,13 @@ if [ "$output" != "PASS" ]; then
+ fi
+
+ # test2: tests libgo2 which does not export any functions.
+-GOPATH=$(pwd) go build -buildmode=c-shared $suffix -o libgo2.$libext libgo2
++GOPATH=$(pwd) go_target build -buildmode=c-shared $suffix -o libgo2.$libext libgo2
+ binpush libgo2.$libext
+ linkflags="-Wl,--no-as-needed"
+ if [ "$goos" == "darwin" ]; then
+ linkflags=""
+ fi
+-$(go env CC) ${GOGCCFLAGS} -o testp2 main2.c $linkflags libgo2.$libext
++$(go_target env CC) ${GOGCCFLAGS} -o testp2 main2.c $linkflags libgo2.$libext
+ binpush testp2
+ output=$(run LD_LIBRARY_PATH=. ./testp2)
+ if [ "$output" != "PASS" ]; then
+@@ -138,9 +150,9 @@ if [ "$output" != "PASS" ]; then
+ status=1
+ fi
+
+-# test3: tests main.main is exported on android.
+-if [ "$goos" == "android" ]; then
+- $(go env CC) ${GOGCCFLAGS} -o testp3 main3.c -ldl
++# test3: tests main.main is exported on android/chromeos.
++if target; then
++ $(go_target env CC) ${GOGCCFLAGS} -o testp3 main3.c -ldl
+ binpush testp3
+ output=$(run ./testp ./libgo.so)
+ if [ "$output" != "PASS" ]; then
+@@ -150,14 +162,14 @@ if [ "$goos" == "android" ]; then
+ fi
+
+ # test4: tests signal handlers
+-GOPATH=$(pwd) go build -buildmode=c-shared $suffix -o libgo4.$libext libgo4
++GOPATH=$(pwd) go_target build -buildmode=c-shared $suffix -o libgo4.$libext libgo4
+ binpush libgo4.$libext
+-$(go env CC) ${GOGCCFLAGS} -pthread -o testp4 main4.c -ldl
++$(go_target env CC) ${GOGCCFLAGS} -pthread -o testp4 main4.c -ldl
+ binpush testp4
+ output=$(run ./testp4 ./libgo4.$libext 2>&1)
+ if test "$output" != "PASS"; then
+ echo "FAIL test4 got ${output}"
+- if test "$goos" != "android"; then
++ if ! target; then
+ echo "re-running test4 in verbose mode"
+ ./testp4 ./libgo4.$libext verbose
+ fi
+@@ -165,14 +177,14 @@ if test "$output" != "PASS"; then
+ fi
+
+ # test5: tests signal handlers with os/signal.Notify
+-GOPATH=$(pwd) go build -buildmode=c-shared $suffix -o libgo5.$libext libgo5
++GOPATH=$(pwd) go_target build -buildmode=c-shared $suffix -o libgo5.$libext libgo5
+ binpush libgo5.$libext
+-$(go env CC) ${GOGCCFLAGS} -pthread -o testp5 main5.c -ldl
++$(go_target env CC) ${GOGCCFLAGS} -pthread -o testp5 main5.c -ldl
+ binpush testp5
+ output=$(run ./testp5 ./libgo5.$libext 2>&1)
+ if test "$output" != "PASS"; then
+ echo "FAIL test5 got ${output}"
+- if test "$goos" != "android"; then
++ if ! target; then
+ echo "re-running test5 in verbose mode"
+ ./testp5 ./libgo5.$libext verbose
+ fi
diff --git a/go/patch/go6.patch b/go/patch/go6.patch
new file mode 100644
index 00000000..7f1e4c0e
--- /dev/null
+++ b/go/patch/go6.patch
@@ -0,0 +1,65 @@
+runtime: deadlock detection does not work when using external linker.
+
+--- src/runtime/crash_test.go
++++ src/runtime/crash_test.go
+@@ -177,22 +177,27 @@ func testDeadlock(t *testing.T, name string) {
+ }
+
+ func TestSimpleDeadlock(t *testing.T) {
++ t.Skip("deadlock detection fails with external linker")
+ testDeadlock(t, "SimpleDeadlock")
+ }
+
+ func TestInitDeadlock(t *testing.T) {
++ t.Skip("deadlock detection fails with external linker")
+ testDeadlock(t, "InitDeadlock")
+ }
+
+ func TestLockedDeadlock(t *testing.T) {
++ t.Skip("deadlock detection fails with external linker")
+ testDeadlock(t, "LockedDeadlock")
+ }
+
+ func TestLockedDeadlock2(t *testing.T) {
++ t.Skip("deadlock detection fails with external linker")
+ testDeadlock(t, "LockedDeadlock2")
+ }
+
+ func TestGoexitDeadlock(t *testing.T) {
++ t.Skip("deadlock detection fails with external linker")
+ output := runTestProg(t, "testprog", "GoexitDeadlock")
+ want := "no goroutines (main called runtime.Goexit) - deadlock!"
+ if !strings.Contains(output, want) {
+@@ -229,6 +234,7 @@ panic: again
+ }
+
+ func TestGoexitCrash(t *testing.T) {
++ t.Skip("deadlock detection fails with external linker")
+ output := runTestProg(t, "testprog", "GoexitExit")
+ want := "no goroutines (main called runtime.Goexit) - deadlock!"
+ if !strings.Contains(output, want) {
+@@ -285,6 +291,7 @@ func TestBreakpoint(t *testing.T) {
+ }
+
+ func TestGoexitInPanic(t *testing.T) {
++ t.Skip("deadlock detection fails with external linker")
+ // see issue 8774: this code used to trigger an infinite recursion
+ output := runTestProg(t, "testprog", "GoexitInPanic")
+ want := "fatal error: no goroutines (main called runtime.Goexit) - deadlock!"
+@@ -303,6 +310,7 @@ func TestPanicAfterGoexit(t *testing.T) {
+ }
+
+ func TestRecoveredPanicAfterGoexit(t *testing.T) {
++ t.Skip("deadlock detection fails with external linker")
+ output := runTestProg(t, "testprog", "RecoveredPanicAfterGoexit")
+ want := "fatal error: no goroutines (main called runtime.Goexit) - deadlock!"
+ if !strings.HasPrefix(output, want) {
+--- test/fixedbugs/bug429_run.go
++++ test/fixedbugs/bug429_run.go
+@@ -1,5 +1,5 @@
+ // +build !nacl
+-// runtarget
++// skip
+
+ // Copyright 2014 The Go Authors. All rights reserved.
+ // Use of this source code is governed by a BSD-style
diff --git a/go/patch/go7.patch b/go/patch/go7.patch
new file mode 100644
index 00000000..7b769cf4
--- /dev/null
+++ b/go/patch/go7.patch
@@ -0,0 +1,139 @@
+all: disable some tests that take a long time or allocate a lot of memory.
+
+--- src/encoding/gob/encoder_test.go
++++ src/encoding/gob/encoder_test.go
+@@ -1003,10 +1003,7 @@ func TestBadData(t *testing.T) {
+
+ // TestHugeWriteFails tests that enormous messages trigger an error.
+ func TestHugeWriteFails(t *testing.T) {
+- if testing.Short() {
+- // Requires allocating a monster, so don't do this from all.bash.
+- t.Skip("skipping huge allocation in short mode")
+- }
++ t.Skip("skipping test due to huge memory requirement")
+ huge := make([]byte, tooBig)
+ huge[0] = 7 // Make sure it's not all zeros.
+ buf := new(bytes.Buffer)
+--- src/math/big/float_test.go
++++ src/math/big/float_test.go
+@@ -1428,10 +1428,7 @@ func TestFloatQuo(t *testing.T) {
+ // TestFloatQuoSmoke tests all divisions x/y for values x, y in the range [-n, +n];
+ // it serves as a smoke test for basic correctness of division.
+ func TestFloatQuoSmoke(t *testing.T) {
+- n := 1000
+- if testing.Short() {
+- n = 10
+- }
++ n := 10
+
+ const dprec = 3 // max. precision variation
+ const prec = 10 + dprec // enough bits to hold n precisely
+--- src/math/big/rat_test.go
++++ src/math/big/rat_test.go
+@@ -430,10 +430,7 @@ func TestFloat64Distribution(t *testing.T) {
+ 9,
+ 11,
+ }
+- var winc, einc = uint64(1), 1 // soak test (~75s on x86-64)
+- if testing.Short() {
+- winc, einc = 10, 500 // quick test (~12ms on x86-64)
+- }
++ var winc, einc = uint64(10), 500
+
+ for _, sign := range "+-" {
+ for _, a := range add {
+--- src/math/big/ratconv_test.go
++++ src/math/big/ratconv_test.go
+@@ -344,9 +344,7 @@ func isFinite(f float64) bool {
+ func TestFloat32SpecialCases(t *testing.T) {
+ for _, input := range float64inputs {
+ if strings.HasPrefix(input, "long:") {
+- if testing.Short() {
+- continue
+- }
++ continue
+ input = input[len("long:"):]
+ }
+
+@@ -400,9 +398,7 @@ func TestFloat32SpecialCases(t *testing.T) {
+ func TestFloat64SpecialCases(t *testing.T) {
+ for _, input := range float64inputs {
+ if strings.HasPrefix(input, "long:") {
+- if testing.Short() {
+- continue
+- }
++ continue
+ input = input[len("long:"):]
+ }
+
+--- src/net/dial_test.go
++++ src/net/dial_test.go
+@@ -77,10 +77,7 @@ func TestSelfConnect(t *testing.T) {
+ l.Close()
+
+ // Try to connect to that address repeatedly.
+- n := 100000
+- if testing.Short() {
+- n = 1000
+- }
++ n := 1000
+ switch runtime.GOOS {
+ case "darwin", "dragonfly", "freebsd", "netbsd", "openbsd", "plan9", "solaris", "windows":
+ // Non-Linux systems take a long time to figure
+--- src/runtime/fastlog2_test.go
++++ src/runtime/fastlog2_test.go
+@@ -16,11 +16,7 @@ func TestFastLog2(t *testing.T) {
+ const randomBitCount = 26
+ var e float64
+
+- inc := 1
+- if testing.Short() {
+- // Check 1K total values, down from 64M.
+- inc = 1 << 16
+- }
++ inc := 1 << 16
+ for i := 1; i < 1<<randomBitCount; i += inc {
+ l, fl := math.Log2(float64(i)), runtime.Fastlog2(float64(i))
+ d := l - fl
+--- src/runtime/hash_test.go
++++ src/runtime/hash_test.go
+@@ -126,9 +126,7 @@ func TestSmhasherZeros(t *testing.T) {
+
+ // Strings with up to two nonzero bytes all have distinct hashes.
+ func TestSmhasherTwoNonzero(t *testing.T) {
+- if testing.Short() {
+- t.Skip("Skipping in short mode")
+- }
++ t.Skip("skipping test due to huge memory requirement")
+ h := newHashSet()
+ for n := 2; n <= 16; n++ {
+ twoNonZero(h, n)
+@@ -229,9 +227,7 @@ func setbits(h *HashSet, b []byte, i int, k int) {
+ // Test all possible combinations of n blocks from the set s.
+ // "permutation" is a bad name here, but it is what Smhasher uses.
+ func TestSmhasherPermutation(t *testing.T) {
+- if testing.Short() {
+- t.Skip("Skipping in short mode")
+- }
++ t.Skip("skipping test due to huge memory requirement")
+ permutation(t, []uint32{0, 1, 2, 3, 4, 5, 6, 7}, 8)
+ permutation(t, []uint32{0, 1 << 29, 2 << 29, 3 << 29, 4 << 29, 5 << 29, 6 << 29, 7 << 29}, 8)
+ permutation(t, []uint32{0, 1}, 20)
+--- src/runtime/pprof/pprof_test.go
++++ src/runtime/pprof/pprof_test.go
+@@ -257,14 +257,7 @@ func profileOk(t *testing.T, need []string, prof bytes.Buffer, duration time.Dur
+ func TestCPUProfileWithFork(t *testing.T) {
+ testenv.MustHaveExec(t)
+
+- heap := 1 << 30
+- if runtime.GOOS == "android" {
+- // Use smaller size for Android to avoid crash.
+- heap = 100 << 20
+- }
+- if testing.Short() {
+- heap = 100 << 20
+- }
++ heap := 100 << 20
+ // This makes fork slower.
+ garbage := make([]byte, heap)
+ // Need to touch the slice, otherwise it won't be paged in.
diff --git a/go/push_goroot b/go/push_goroot
new file mode 100755
index 00000000..41612f72
--- /dev/null
+++ b/go/push_goroot
@@ -0,0 +1,34 @@
+#!/bin/bash
+set -e -o pipefail
+
+# This script copies a locally built GOROOT to a remote device.
+#
+# Usage: push_goroot <target>...
+#
+# This script can work with both ChromeOS/Android devices.
+#
+# It uses "target_tmpdir" to figure out where to copy GOROOT on the device.
+# It uses "target_sh" to remotely execute commands on the device.
+# It uses "target_cp" to transfer files to the device.
+
+goroot="$(target_tmpdir)/go"
+for target in "$@"
+do
+ echo -n "pushing to ${target} ... "
+ target_sh ${target} "rm -rf ${goroot}"
+ target_sh ${target} "mkdir -p ${goroot}/pkg"
+
+ pkgdir="$(go_${target} env GOOS)_$(go_${target} env GOARCH)"
+ if [[ -d "pkg/${pkgdir}_shared" ]]
+ then
+ target_cp "pkg/${pkgdir}_shared" ${target}:${goroot}/pkg
+ target_sh ${target} "ln -s ${pkgdir}_shared ${goroot}/pkg/${pkgdir}"
+ else
+ target_cp "pkg/${pkgdir}" ${target}:${goroot}/pkg
+ fi
+
+ target_cp "src" ${target}:${goroot}
+ target_cp "lib" ${target}:${goroot}
+ target_cp "test" ${target}:${goroot}
+ echo "done"
+done
diff --git a/go/test_go b/go/test_go
new file mode 100755
index 00000000..3740c1b7
--- /dev/null
+++ b/go/test_go
@@ -0,0 +1,88 @@
+#!/bin/bash
+
+# This script runs tests for the Go toolchain on target devices.
+# It can be used for both ChromeOS and Android targets.
+#
+# Many of the test drivers that come from upstream do not support
+# cross-compiling and running the tests remotely. The patches in
+# the ./patch/ directory must be applied to the upstream sources
+# to add this support.
+#
+# Usage: test_go [-v] [-vv] [-full] <target>...
+# -v: enable verbose test output from compiler tests.
+# -v: enable verbose test output from standard library tests.
+# -full: run all standard library tests (without the -short flag).
+
+verbose_run_test=""
+verbose_go_test=""
+testflags="-short"
+while [[ "$1" == -* ]]
+do
+ case "$1" in
+ -v) verbose_run_test="-v" ;;
+ -vv) verbose_go_test="-v" ;;
+ -full) testflags="-timeout=2h" ;;
+ *) echo "unrecognized flag: $1" ;;
+ esac
+ shift
+done
+
+go_local build -o runtest test/run.go
+runtest="${PWD}/runtest"
+
+function run_test()
+ {
+ GOOS="$(go_${target} env GOOS)" GOARCH="$(go_${target} env GOARCH)" ${runtest} -n=1 ${verbose_run_test} -show_skips -summary -target="${target}" "$@"
+ }
+
+function go_test()
+ {
+ go_${target} test -p=1 ${verbose_go_test} -exec="go_${target}_exec" ${testflags} "$@"
+ }
+
+function go_test_target()
+ {
+ go_local test -p=1 ${verbose_go_test} ${testflags} "$@" -target="${target}"
+ }
+
+for target in "$@"
+do
+ echo
+ echo "## ${target}"
+
+ echo
+ echo "# test"
+ (cd test && run_test)
+
+ echo
+ echo "# std"
+ go_test std
+
+ echo
+ echo "# GOMAXPROCS=2 -cpu=1,2,4 runtime"
+ GOMAXPROCS=2 go_test -cpu=1,2,4 runtime
+
+ echo
+ echo "# -cpu=10 sync"
+ go_test -cpu=10 sync
+
+ echo
+ echo "# runtime crypto/x509 -target=${target}"
+ go_test_target runtime crypto/x509
+
+ echo
+ echo "# misc/cgo/{stdio,life}"
+ run_test misc/cgo/{stdio,life}
+
+ echo
+ echo "# misc/cgo/{test,testtls,nocgo}"
+ GOTRACEBACK=2 go_test ./misc/cgo/{test,testtls,nocgo}
+
+ echo
+ echo "# misc/cgo/testcshared"
+ (cd misc/cgo/testcshared && target="${target}" ./test.bash)
+
+ echo
+ echo "# misc/cgo/testsigfwd"
+ (cd misc/cgo/testsigfwd && go_${target} run -exec="go_${target}_exec" main.go)
+done
diff --git a/heat_map.py b/heat_map.py
new file mode 100755
index 00000000..ae234b51
--- /dev/null
+++ b/heat_map.py
@@ -0,0 +1,146 @@
+#!/usr/bin/python2
+# Copyright 2015 The Chromium OS Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+"""Wrapper to generate heat maps for chrome."""
+
+from __future__ import print_function
+
+import argparse
+import shutil
+import os
+import sys
+import tempfile
+from sets import Set
+
+from cros_utils import command_executer
+
+def IsARepoRoot(directory):
+ """Returns True if directory is the root of a repo checkout."""
+ return os.path.exists(os.path.join(directory, '.repo'))
+
+
+class HeatMapProducer(object):
+ """Class to produce heat map."""
+
+ def __init__(self, chromeos_root, perf_data, page_size, binary):
+ self.chromeos_root = os.path.realpath(chromeos_root)
+ self.perf_data = os.path.realpath(perf_data)
+ self.page_size = page_size
+ self.dir = os.path.dirname(os.path.realpath(__file__))
+ self.binary = binary
+ self.tempDir = ''
+ self.ce = command_executer.GetCommandExecuter()
+ self.loading_address = None
+ self.temp_perf = ''
+ self.temp_perf_inchroot = ''
+ self.perf_report = ''
+
+ def copyFileToChroot(self):
+ self.tempDir = tempfile.mkdtemp(
+ prefix=os.path.join(self.chromeos_root, 'src/'))
+ self.temp_perf = os.path.join(self.tempDir, 'perf.data')
+ shutil.copy2(self.perf_data, self.temp_perf)
+ self.temp_perf_inchroot = os.path.join('~/trunk/src',
+ os.path.basename(self.tempDir))
+
+ def getPerfReport(self):
+ cmd = ('cd %s; perf report -D -i perf.data > perf_report.txt' %
+ self.temp_perf_inchroot)
+ retval = self.ce.ChrootRunCommand(self.chromeos_root, cmd)
+ if retval:
+ raise RuntimeError('Failed to generate perf report')
+ self.perf_report = os.path.join(self.tempDir, 'perf_report.txt')
+
+ def getBinaryBaseAddress(self):
+ cmd = 'grep PERF_RECORD_MMAP %s | grep "%s$"' % (self.perf_report,
+ self.binary)
+ retval, output, _ = self.ce.RunCommandWOutput(cmd)
+ if retval:
+ raise RuntimeError('Failed to run grep to get base address')
+ baseAddresses = Set()
+ for line in output.strip().split('\n'):
+ head = line.split('[')[2]
+ address = head.split('(')[0]
+ baseAddresses.add(address)
+ if len(baseAddresses) > 1:
+ raise RuntimeError(
+ 'Multiple base address found, please disable ASLR and collect '
+ 'profile again')
+ if not len(baseAddresses):
+ raise RuntimeError('Could not find the base address in the profile')
+ self.loading_address = baseAddresses.pop()
+
+ def RemoveFiles(self):
+ shutil.rmtree(self.tempDir)
+ if os.path.isfile(os.path.join(os.getcwd(), 'out.txt')):
+ os.remove(os.path.join(os.getcwd(), 'out.txt'))
+ if os.path.isfile(os.path.join(os.getcwd(), 'inst-histo.txt')):
+ os.remove(os.path.join(os.getcwd(), 'inst-histo.txt'))
+
+ def getHeatmap(self):
+ if not self.loading_address:
+ return
+ heatmap_script = os.path.join(self.dir, 'perf-to-inst-page.sh')
+ cmd = '{0} {1} {2} {3} {4}'.format(heatmap_script, self.binary,
+ self.perf_report, self.loading_address,
+ self.page_size)
+ retval = self.ce.RunCommand(cmd)
+ if retval:
+ raise RuntimeError('Failed to run script to generate heatmap')
+
+
+def main(argv):
+ """Parse the options.
+
+ Args:
+ argv: The options with which this script was invoked.
+
+ Returns:
+ 0 unless an exception is raised.
+ """
+ parser = argparse.ArgumentParser()
+
+ parser.add_argument('--chromeos_root',
+ dest='chromeos_root',
+ required=True,
+ help='ChromeOS root to use for generate heatmaps.')
+ parser.add_argument('--perf_data',
+ dest='perf_data',
+ required=True,
+ help='The raw perf data.')
+ parser.add_argument('--binary',
+ dest='binary',
+ required=False,
+ help='The name of the binary.',
+ default='chrome')
+ parser.add_argument('--page_size',
+ dest='page_size',
+ required=False,
+ help='The page size for heat maps.',
+ default=4096)
+ options = parser.parse_args(argv)
+
+ if not IsARepoRoot(options.chromeos_root):
+ parser.error('% does not contain .repo dir.' % options.chromeos_root)
+
+ if not os.path.isfile(options.perf_data):
+ parser.error('Cannot find perf_data: %s.' % options.perf_data)
+
+ heatmap_producer = HeatMapProducer(options.chromeos_root, options.perf_data,
+ options.page_size, options.binary)
+ try:
+ heatmap_producer.copyFileToChroot()
+ heatmap_producer.getPerfReport()
+ heatmap_producer.getBinaryBaseAddress()
+ heatmap_producer.getHeatmap()
+ print('\nheat map and time histgram genereated in the current directory '
+ 'with name heat_map.png and timeline.png accordingly.')
+ except RuntimeError, e:
+ print(e)
+ finally:
+ heatmap_producer.RemoveFiles()
+
+
+if __name__ == '__main__':
+ sys.exit(main(sys.argv[1:]))
diff --git a/image_chromeos.py b/image_chromeos.py
new file mode 100755
index 00000000..d95434a7
--- /dev/null
+++ b/image_chromeos.py
@@ -0,0 +1,430 @@
+#!/usr/bin/python2
+#
+# Copyright 2011 Google Inc. All Rights Reserved.
+"""Script to image a ChromeOS device.
+
+This script images a remote ChromeOS device with a specific image."
+"""
+
+from __future__ import print_function
+
+__author__ = 'asharif@google.com (Ahmad Sharif)'
+
+import argparse
+import filecmp
+import glob
+import os
+import re
+import shutil
+import sys
+import tempfile
+import time
+
+from cros_utils import command_executer
+from cros_utils import locks
+from cros_utils import logger
+from cros_utils import misc
+from cros_utils.file_utils import FileUtils
+
+checksum_file = '/usr/local/osimage_checksum_file'
+lock_file = '/tmp/image_chromeos_lock/image_chromeos_lock'
+
+
+def Usage(parser, message):
+ print('ERROR: %s' % message)
+ parser.print_help()
+ sys.exit(0)
+
+
+def CheckForCrosFlash(chromeos_root, remote, log_level):
+ cmd_executer = command_executer.GetCommandExecuter(log_level=log_level)
+
+ # Check to see if remote machine has cherrypy, ctypes
+ command = "python -c 'import cherrypy, ctypes'"
+ ret = cmd_executer.CrosRunCommand(command,
+ chromeos_root=chromeos_root,
+ machine=remote)
+ logger.GetLogger().LogFatalIf(
+ ret == 255, 'Failed ssh to %s (for checking cherrypy)' % remote)
+ logger.GetLogger().LogFatalIf(
+ ret != 0, "Failed to find cherrypy or ctypes on remote '{}', "
+ 'cros flash cannot work.'.format(remote))
+
+
+def DoImage(argv):
+ """Image ChromeOS."""
+
+ parser = argparse.ArgumentParser()
+ parser.add_argument('-c',
+ '--chromeos_root',
+ dest='chromeos_root',
+ help='Target directory for ChromeOS installation.')
+ parser.add_argument('-r', '--remote', dest='remote', help='Target device.')
+ parser.add_argument('-i', '--image', dest='image', help='Image binary file.')
+ parser.add_argument('-b',
+ '--board',
+ dest='board',
+ help='Target board override.')
+ parser.add_argument('-f',
+ '--force',
+ dest='force',
+ action='store_true',
+ default=False,
+ help='Force an image even if it is non-test.')
+ parser.add_argument('-n',
+ '--no_lock',
+ dest='no_lock',
+ default=False,
+ action='store_true',
+ help='Do not attempt to lock remote before imaging. '
+ 'This option should only be used in cases where the '
+ 'exclusive lock has already been acquired (e.g. in '
+ 'a script that calls this one).')
+ parser.add_argument('-l',
+ '--logging_level',
+ dest='log_level',
+ default='verbose',
+ help='Amount of logging to be used. Valid levels are '
+ "'quiet', 'average', and 'verbose'.")
+ parser.add_argument('-a', '--image_args', dest='image_args')
+
+ options = parser.parse_args(argv[1:])
+
+ if not options.log_level in command_executer.LOG_LEVEL:
+ Usage(parser, "--logging_level must be 'quiet', 'average' or 'verbose'")
+ else:
+ log_level = options.log_level
+
+ # Common initializations
+ cmd_executer = command_executer.GetCommandExecuter(log_level=log_level)
+ l = logger.GetLogger()
+
+ if options.chromeos_root is None:
+ Usage(parser, '--chromeos_root must be set')
+
+ if options.remote is None:
+ Usage(parser, '--remote must be set')
+
+ options.chromeos_root = os.path.expanduser(options.chromeos_root)
+
+ if options.board is None:
+ board = cmd_executer.CrosLearnBoard(options.chromeos_root, options.remote)
+ else:
+ board = options.board
+
+ if options.image is None:
+ images_dir = misc.GetImageDir(options.chromeos_root, board)
+ image = os.path.join(images_dir, 'latest', 'chromiumos_test_image.bin')
+ if not os.path.exists(image):
+ image = os.path.join(images_dir, 'latest', 'chromiumos_image.bin')
+ is_xbuddy_image = False
+ else:
+ image = options.image
+ is_xbuddy_image = image.startswith('xbuddy://')
+ if not is_xbuddy_image:
+ image = os.path.expanduser(image)
+
+ if not is_xbuddy_image:
+ image = os.path.realpath(image)
+
+ if not os.path.exists(image) and not is_xbuddy_image:
+ Usage(parser, 'Image file: ' + image + ' does not exist!')
+
+ try:
+ should_unlock = False
+ if not options.no_lock:
+ try:
+ _ = locks.AcquireLock(
+ list(options.remote.split()), options.chromeos_root)
+ should_unlock = True
+ except Exception as e:
+ raise RuntimeError('Error acquiring machine: %s' % str(e))
+
+ reimage = False
+ local_image = False
+ if not is_xbuddy_image:
+ local_image = True
+ image_checksum = FileUtils().Md5File(image, log_level=log_level)
+
+ command = 'cat ' + checksum_file
+ ret, device_checksum, _ = cmd_executer.CrosRunCommandWOutput(
+ command,
+ chromeos_root=options.chromeos_root,
+ machine=options.remote)
+
+ device_checksum = device_checksum.strip()
+ image_checksum = str(image_checksum)
+
+ l.LogOutput('Image checksum: ' + image_checksum)
+ l.LogOutput('Device checksum: ' + device_checksum)
+
+ if image_checksum != device_checksum:
+ [found, located_image] = LocateOrCopyImage(options.chromeos_root,
+ image,
+ board=board)
+
+ reimage = True
+ l.LogOutput('Checksums do not match. Re-imaging...')
+
+ is_test_image = IsImageModdedForTest(options.chromeos_root,
+ located_image, log_level)
+
+ if not is_test_image and not options.force:
+ logger.GetLogger().LogFatal('Have to pass --force to image a '
+ 'non-test image!')
+ else:
+ reimage = True
+ found = True
+ l.LogOutput('Using non-local image; Re-imaging...')
+
+ if reimage:
+ # If the device has /tmp mounted as noexec, image_to_live.sh can fail.
+ command = 'mount -o remount,rw,exec /tmp'
+ cmd_executer.CrosRunCommand(command,
+ chromeos_root=options.chromeos_root,
+ machine=options.remote)
+
+ real_src_dir = os.path.join(
+ os.path.realpath(options.chromeos_root), 'src')
+ real_chroot_dir = os.path.join(
+ os.path.realpath(options.chromeos_root), 'chroot')
+ if local_image:
+ if located_image.find(real_src_dir) != 0:
+ if located_image.find(real_chroot_dir) != 0:
+ raise RuntimeError('Located image: %s not in chromeos_root: %s' %
+ (located_image, options.chromeos_root))
+ else:
+ chroot_image = located_image[len(real_chroot_dir):]
+ else:
+ chroot_image = os.path.join(
+ '~/trunk/src', located_image[len(real_src_dir):].lstrip('/'))
+
+ # Check to see if cros flash will work for the remote machine.
+ CheckForCrosFlash(options.chromeos_root, options.remote, log_level)
+
+ cros_flash_args = ['cros', 'flash', '--board=%s' % board,
+ '--clobber-stateful', options.remote]
+ if local_image:
+ cros_flash_args.append(chroot_image)
+ else:
+ cros_flash_args.append(image)
+
+ command = ' '.join(cros_flash_args)
+
+ # Workaround for crosbug.com/35684.
+ os.chmod(misc.GetChromeOSKeyFile(options.chromeos_root), 0600)
+
+ if log_level == 'average':
+ cmd_executer.SetLogLevel('verbose')
+ retries = 0
+ while True:
+ if log_level == 'quiet':
+ l.LogOutput('CMD : %s' % command)
+ ret = cmd_executer.ChrootRunCommand(options.chromeos_root,
+ command,
+ command_timeout=1800)
+ if ret == 0 or retries >= 2:
+ break
+ retries += 1
+ if log_level == 'quiet':
+ l.LogOutput('Imaging failed. Retry # %d.' % retries)
+
+ if log_level == 'average':
+ cmd_executer.SetLogLevel(log_level)
+
+ if found == False:
+ temp_dir = os.path.dirname(located_image)
+ l.LogOutput('Deleting temp image dir: %s' % temp_dir)
+ shutil.rmtree(temp_dir)
+
+ logger.GetLogger().LogFatalIf(ret, 'Image command failed')
+
+ # Unfortunately cros_image_to_target.py sometimes returns early when the
+ # machine isn't fully up yet.
+ ret = EnsureMachineUp(options.chromeos_root, options.remote, log_level)
+
+ # If this is a non-local image, then the ret returned from
+ # EnsureMachineUp is the one that will be returned by this function;
+ # in that case, make sure the value in 'ret' is appropriate.
+ if not local_image and ret == True:
+ ret = 0
+ else:
+ ret = 1
+
+ if local_image:
+ if log_level == 'average':
+ l.LogOutput('Verifying image.')
+ command = 'echo %s > %s && chmod -w %s' % (image_checksum,
+ checksum_file,
+ checksum_file)
+ ret = cmd_executer.CrosRunCommand(
+ command,
+ chromeos_root=options.chromeos_root,
+ machine=options.remote)
+ logger.GetLogger().LogFatalIf(ret, 'Writing checksum failed.')
+
+ successfully_imaged = VerifyChromeChecksum(options.chromeos_root,
+ image, options.remote,
+ log_level)
+ logger.GetLogger().LogFatalIf(not successfully_imaged,
+ 'Image verification failed!')
+ TryRemountPartitionAsRW(options.chromeos_root, options.remote,
+ log_level)
+ else:
+ l.LogOutput('Checksums match. Skipping reimage')
+ return ret
+ finally:
+ if should_unlock:
+ locks.ReleaseLock(list(options.remote.split()), options.chromeos_root)
+
+
+def LocateOrCopyImage(chromeos_root, image, board=None):
+ l = logger.GetLogger()
+ if board is None:
+ board_glob = '*'
+ else:
+ board_glob = board
+
+ chromeos_root_realpath = os.path.realpath(chromeos_root)
+ image = os.path.realpath(image)
+
+ if image.startswith('%s/' % chromeos_root_realpath):
+ return [True, image]
+
+ # First search within the existing build dirs for any matching files.
+ images_glob = ('%s/src/build/images/%s/*/*.bin' % (chromeos_root_realpath,
+ board_glob))
+ images_list = glob.glob(images_glob)
+ for potential_image in images_list:
+ if filecmp.cmp(potential_image, image):
+ l.LogOutput('Found matching image %s in chromeos_root.' %
+ potential_image)
+ return [True, potential_image]
+ # We did not find an image. Copy it in the src dir and return the copied
+ # file.
+ if board is None:
+ board = ''
+ base_dir = ('%s/src/build/images/%s' % (chromeos_root_realpath, board))
+ if not os.path.isdir(base_dir):
+ os.makedirs(base_dir)
+ temp_dir = tempfile.mkdtemp(prefix='%s/tmp' % base_dir)
+ new_image = '%s/%s' % (temp_dir, os.path.basename(image))
+ l.LogOutput('No matching image found. Copying %s to %s' % (image, new_image))
+ shutil.copyfile(image, new_image)
+ return [False, new_image]
+
+
+def GetImageMountCommand(chromeos_root, image, rootfs_mp, stateful_mp):
+ image_dir = os.path.dirname(image)
+ image_file = os.path.basename(image)
+ mount_command = ('cd %s/src/scripts &&'
+ './mount_gpt_image.sh --from=%s --image=%s'
+ ' --safe --read_only'
+ ' --rootfs_mountpt=%s'
+ ' --stateful_mountpt=%s' % (chromeos_root, image_dir,
+ image_file, rootfs_mp,
+ stateful_mp))
+ return mount_command
+
+
+def MountImage(chromeos_root,
+ image,
+ rootfs_mp,
+ stateful_mp,
+ log_level,
+ unmount=False):
+ cmd_executer = command_executer.GetCommandExecuter(log_level=log_level)
+ command = GetImageMountCommand(chromeos_root, image, rootfs_mp, stateful_mp)
+ if unmount:
+ command = '%s --unmount' % command
+ ret = cmd_executer.RunCommand(command)
+ logger.GetLogger().LogFatalIf(ret, 'Mount/unmount command failed!')
+ return ret
+
+
+def IsImageModdedForTest(chromeos_root, image, log_level):
+ if log_level != 'verbose':
+ log_level = 'quiet'
+ rootfs_mp = tempfile.mkdtemp()
+ stateful_mp = tempfile.mkdtemp()
+ MountImage(chromeos_root, image, rootfs_mp, stateful_mp, log_level)
+ lsb_release_file = os.path.join(rootfs_mp, 'etc/lsb-release')
+ lsb_release_contents = open(lsb_release_file).read()
+ is_test_image = re.search('test', lsb_release_contents, re.IGNORECASE)
+ MountImage(chromeos_root,
+ image,
+ rootfs_mp,
+ stateful_mp,
+ log_level,
+ unmount=True)
+ return is_test_image
+
+
+def VerifyChromeChecksum(chromeos_root, image, remote, log_level):
+ cmd_executer = command_executer.GetCommandExecuter(log_level=log_level)
+ rootfs_mp = tempfile.mkdtemp()
+ stateful_mp = tempfile.mkdtemp()
+ MountImage(chromeos_root, image, rootfs_mp, stateful_mp, log_level)
+ image_chrome_checksum = FileUtils().Md5File('%s/opt/google/chrome/chrome' %
+ rootfs_mp,
+ log_level=log_level)
+ MountImage(chromeos_root,
+ image,
+ rootfs_mp,
+ stateful_mp,
+ log_level,
+ unmount=True)
+
+ command = 'md5sum /opt/google/chrome/chrome'
+ [_, o, _] = cmd_executer.CrosRunCommandWOutput(command,
+ chromeos_root=chromeos_root,
+ machine=remote)
+ device_chrome_checksum = o.split()[0]
+ if image_chrome_checksum.strip() == device_chrome_checksum.strip():
+ return True
+ else:
+ return False
+
+
+# Remount partition as writable.
+# TODO: auto-detect if an image is built using --noenable_rootfs_verification.
+def TryRemountPartitionAsRW(chromeos_root, remote, log_level):
+ l = logger.GetLogger()
+ cmd_executer = command_executer.GetCommandExecuter(log_level=log_level)
+ command = 'sudo mount -o remount,rw /'
+ ret = cmd_executer.CrosRunCommand(\
+ command, chromeos_root=chromeos_root, machine=remote,
+ terminated_timeout=10)
+ if ret:
+ ## Safely ignore.
+ l.LogWarning('Failed to remount partition as rw, '
+ 'probably the image was not built with '
+ "\"--noenable_rootfs_verification\", "
+ 'you can safely ignore this.')
+ else:
+ l.LogOutput('Re-mounted partition as writable.')
+
+
+def EnsureMachineUp(chromeos_root, remote, log_level):
+ l = logger.GetLogger()
+ cmd_executer = command_executer.GetCommandExecuter(log_level=log_level)
+ timeout = 600
+ magic = 'abcdefghijklmnopqrstuvwxyz'
+ command = 'echo %s' % magic
+ start_time = time.time()
+ while True:
+ current_time = time.time()
+ if current_time - start_time > timeout:
+ l.LogError('Timeout of %ss reached. Machine still not up. Aborting.' %
+ timeout)
+ return False
+ ret = cmd_executer.CrosRunCommand(command,
+ chromeos_root=chromeos_root,
+ machine=remote)
+ if not ret:
+ return True
+
+
+if __name__ == '__main__':
+ retval = DoImage(sys.argv)
+ sys.exit(retval)
diff --git a/lock_machine_test.py b/lock_machine_test.py
new file mode 100644
index 00000000..0ffe094d
--- /dev/null
+++ b/lock_machine_test.py
@@ -0,0 +1,121 @@
+# Copyright 2010 Google Inc. All Rights Reserved.
+"""lock_machine.py related unit-tests.
+
+MachineManagerTest tests MachineManager.
+"""
+
+from __future__ import print_function
+
+__author__ = 'asharif@google.com (Ahmad Sharif)'
+
+from multiprocessing import Process
+import time
+import unittest
+
+import file_lock_machine
+
+
+def LockAndSleep(machine):
+ file_lock_machine.Machine(machine, auto=True).Lock(exclusive=True)
+ time.sleep(1)
+
+
+class MachineTest(unittest.TestCase):
+ """Class for testing machine locking."""
+
+ def setUp(self):
+ pass
+
+ def testRepeatedUnlock(self):
+ mach = file_lock_machine.Machine('qqqraymes.mtv')
+ for _ in range(10):
+ self.assertFalse(mach.Unlock())
+ mach = file_lock_machine.Machine('qqqraymes.mtv', auto=True)
+ for _ in range(10):
+ self.assertFalse(mach.Unlock())
+
+ def testLockUnlock(self):
+ mach = file_lock_machine.Machine('otter.mtv', '/tmp')
+ for _ in range(10):
+ self.assertTrue(mach.Lock(exclusive=True))
+ self.assertTrue(mach.Unlock(exclusive=True))
+
+ mach = file_lock_machine.Machine('otter.mtv', '/tmp', True)
+ for _ in range(10):
+ self.assertTrue(mach.Lock(exclusive=True))
+ self.assertTrue(mach.Unlock(exclusive=True))
+
+ def testSharedLock(self):
+ mach = file_lock_machine.Machine('chrotomation.mtv')
+ for _ in range(10):
+ self.assertTrue(mach.Lock(exclusive=False))
+ for _ in range(10):
+ self.assertTrue(mach.Unlock(exclusive=False))
+ self.assertTrue(mach.Lock(exclusive=True))
+ self.assertTrue(mach.Unlock(exclusive=True))
+
+ mach = file_lock_machine.Machine('chrotomation.mtv', auto=True)
+ for _ in range(10):
+ self.assertTrue(mach.Lock(exclusive=False))
+ for _ in range(10):
+ self.assertTrue(mach.Unlock(exclusive=False))
+ self.assertTrue(mach.Lock(exclusive=True))
+ self.assertTrue(mach.Unlock(exclusive=True))
+
+ def testExclusiveLock(self):
+ mach = file_lock_machine.Machine('atree.mtv')
+ self.assertTrue(mach.Lock(exclusive=True))
+ for _ in range(10):
+ self.assertFalse(mach.Lock(exclusive=True))
+ self.assertFalse(mach.Lock(exclusive=False))
+ self.assertTrue(mach.Unlock(exclusive=True))
+
+ mach = file_lock_machine.Machine('atree.mtv', auto=True)
+ self.assertTrue(mach.Lock(exclusive=True))
+ for _ in range(10):
+ self.assertFalse(mach.Lock(exclusive=True))
+ self.assertFalse(mach.Lock(exclusive=False))
+ self.assertTrue(mach.Unlock(exclusive=True))
+
+ def testExclusiveState(self):
+ mach = file_lock_machine.Machine('testExclusiveState')
+ self.assertTrue(mach.Lock(exclusive=True))
+ for _ in range(10):
+ self.assertFalse(mach.Lock(exclusive=False))
+ self.assertTrue(mach.Unlock(exclusive=True))
+
+ mach = file_lock_machine.Machine('testExclusiveState', auto=True)
+ self.assertTrue(mach.Lock(exclusive=True))
+ for _ in range(10):
+ self.assertFalse(mach.Lock(exclusive=False))
+ self.assertTrue(mach.Unlock(exclusive=True))
+
+ def testAutoLockGone(self):
+ mach = file_lock_machine.Machine('lockgone', auto=True)
+ p = Process(target=LockAndSleep, args=('lockgone',))
+ p.start()
+ time.sleep(1.1)
+ p.join()
+ self.assertTrue(mach.Lock(exclusive=True))
+
+ def testAutoLockFromOther(self):
+ mach = file_lock_machine.Machine('other_lock', auto=True)
+ p = Process(target=LockAndSleep, args=('other_lock',))
+ p.start()
+ time.sleep(0.5)
+ self.assertFalse(mach.Lock(exclusive=True))
+ p.join()
+ time.sleep(0.6)
+ self.assertTrue(mach.Lock(exclusive=True))
+
+ def testUnlockByOthers(self):
+ mach = file_lock_machine.Machine('other_unlock', auto=True)
+ p = Process(target=LockAndSleep, args=('other_unlock',))
+ p.start()
+ time.sleep(0.5)
+ self.assertTrue(mach.Unlock(exclusive=True))
+ self.assertTrue(mach.Lock(exclusive=True))
+
+
+if __name__ == '__main__':
+ unittest.main()
diff --git a/mem_tests/README b/mem_tests/README
new file mode 100644
index 00000000..4e35f684
--- /dev/null
+++ b/mem_tests/README
@@ -0,0 +1,46 @@
+Usage
+-----
+
+These scripts are made to parse TCMalloc output in order to extract certain
+info from them.
+
+In particular, these scripts rely on the error logging system for ChromeOS in
+order to extract information. In order to use a script (e.g. total_mem.py), you
+just have the command:
+
+./total_mem.py FILENAME
+
+where FILENAME is the name of the log file to be parsed.
+
+Codebase Changes
+----------------
+
+There are two ideas that motivate these changes:
+
+1- Turn on TCMalloc sampling.
+2- Use perf to collect the sample information.
+
+The following files have to be changed:
+
+in chrome/browser/metrics/perf_provider_chrome_os:
+
+add:
+ #include "third_party/tcmalloc/chromium/src/gperftools/malloc_extension.h"
+
+Change the perf profiling interval to something small (60*1000 milliseconds).
+
+inside DoPeriodicCollection, insert the following code:
+
+ std::string output;
+ char* chr_arr = new char[9999];
+ MallocExtension::instance() ->GetHeapSample(&output);
+ MallocExtension::instance() ->GetStats(chr_arr, 9999);
+ LOG(ERROR) << "Output Heap Data: ";
+ LOG(ERROR) << output;
+ LOG(ERROR) << "Output Heap Stats: ";
+ output = "";
+ for (unsigned int i = 0; i < strlen(chr_arr); i++) {
+ output += chr_arr[i];
+ }
+ LOG(ERROR) << output;
+ delete[] chr_arr;
diff --git a/mem_tests/clean_data.py b/mem_tests/clean_data.py
new file mode 100755
index 00000000..f9a11e75
--- /dev/null
+++ b/mem_tests/clean_data.py
@@ -0,0 +1,29 @@
+#! /usr/bin/python
+"""Cleans output from other scripts to eliminate duplicates.
+
+When frequently sampling data, we see that records occasionally will contain
+the same timestamp (due to perf recording twice in the same second).
+
+This removes all of the duplicate timestamps for every record. Order with
+respect to timestamps is not preserved. Also, the assumption is that the log
+file is a csv with the first value in each row being the time in seconds from a
+standard time.
+
+"""
+
+import argparse
+
+parser = argparse.ArgumentParser()
+parser.add_argument('filename')
+args = parser.parse_args()
+
+my_file = open(args.filename)
+output_file = open('clean2.csv', 'a')
+dictionary = dict()
+
+for line in my_file:
+ new_time = int(line.split(',')[0])
+ dictionary[new_time] = line
+
+for key in dictionary.keys():
+ output_file.write(dictionary[key])
diff --git a/mem_tests/mem_groups.py b/mem_tests/mem_groups.py
new file mode 100755
index 00000000..e2fbf271
--- /dev/null
+++ b/mem_tests/mem_groups.py
@@ -0,0 +1,55 @@
+#! /usr/bin/python
+"""Groups memory by allocation sizes.
+
+Takes a log entry and sorts sorts everything into groups based on what size
+chunks the memory has been allocated in. groups is an array that contains the
+divisions (in bytes).
+
+The output format is:
+
+timestamp, percent of memory in chunks < groups[0], percent between groups[0]
+and groups[1], etc.
+
+"""
+
+import argparse
+from cros_utils import compute_total_diff
+from datetime import datetime
+
+pretty_print = True
+
+parser = argparse.ArgumentParser()
+parser.add_argument('filename')
+args = parser.parse_args()
+
+my_file = open(args.filename)
+output_file = open('groups.csv', 'a')
+
+# The cutoffs for each group in the output (in bytes)
+groups = [1024, 8192, 65536, 524288, 4194304]
+
+base_time = datetime(2014, 6, 11, 0, 0)
+prev_line = ''
+half_entry = (None, None)
+
+for line in my_file:
+ if 'heap profile:' in line:
+ if half_entry[0] is not None:
+ group_totals = half_entry[1]
+ total = sum(group_totals) * 1.0
+ to_join = [half_entry[0]] + [value / total for value in group_totals]
+ to_output = ','.join([str(elem) for elem in to_join])
+ output_file.write(to_output)
+ total_diff = compute_total_diff(line, base_time)
+ half_entry = (total_diff, [0] * (len(groups) + 1))
+ if '] @ ' in line and 'heap profile:' not in line:
+ mem_samples = line.strip().split('[')[0]
+ num_samples, total_mem = map(int, mem_samples.strip().split(':'))
+ mem_per_sample = total_mem // num_samples
+ group_totals = half_entry[1]
+ for cutoff_index in range(len(groups)):
+ if mem_per_sample <= groups[cutoff_index]:
+ group_totals[cutoff_index] += total_mem
+ break
+ if mem_per_sample > groups[-1]:
+ group_totals[-1] += total_mem
diff --git a/mem_tests/total_mem_actual.py b/mem_tests/total_mem_actual.py
new file mode 100755
index 00000000..2d53bebe
--- /dev/null
+++ b/mem_tests/total_mem_actual.py
@@ -0,0 +1,37 @@
+#! /usr/bin/python
+"""Parses the actual memory usage from TCMalloc.
+
+This goes through logs that have the actual allocated memory (not sampled) in
+the logs. The output is of the form of:
+
+time (in seconds from some base time), amount of memory allocated by the
+application
+
+"""
+
+import argparse
+from cros_utils import compute_total_diff
+from datetime import datetime
+
+pretty_print = True
+
+parser = argparse.ArgumentParser()
+parser.add_argument('filename')
+args = parser.parse_args()
+
+my_file = open(args.filename)
+output_file = open('raw_memory_data.csv', 'a')
+
+base_time = datetime(2014, 6, 11, 0, 0)
+prev_line = ''
+half_entry = (None, None)
+
+for line in my_file:
+ if 'Output Heap Stats:' in line:
+ total_diff = compute_total_diff(line, base_time)
+ half_entry = (total_diff, None)
+ if 'Bytes in use by application' in line:
+ total_diff = half_entry[0]
+ memory_used = int(line.strip().split()[1])
+ half_entry = (None, None)
+ output_file.write('{0},{1}\n'.format(total_diff, memory_used))
diff --git a/mem_tests/total_mem_sampled.py b/mem_tests/total_mem_sampled.py
new file mode 100755
index 00000000..77dd6817
--- /dev/null
+++ b/mem_tests/total_mem_sampled.py
@@ -0,0 +1,31 @@
+#! /usr/bin/python
+"""Parses the total amount of sampled memory from log files.
+
+This file outputs the total amount of memory that has been sampled by tcmalloc.
+The output is of the format:
+
+time in seconds from a base time, amount of memory that has been sampled
+
+"""
+
+import argparse
+from cros_utils import compute_total_diff
+from datetime import datetime
+
+parser = argparse.ArgumentParser()
+parser.add_argument('filename')
+args = parser.parse_args()
+
+my_file = open(args.filename)
+output_file = open('memory_data.csv', 'a')
+
+base_time = datetime(2014, 6, 11, 0, 0)
+prev_line = ''
+half_entry = (None, None)
+
+for line in my_file:
+ if 'heap profile: ' not in line:
+ continue
+ memory_used = line.strip().split(':')[-1].strip().split(']')[0].strip()
+ total_diff = compute_total_diff(line, base_time)
+ output_file.write('{0},{1}\n'.format(int(total_diff), memory_used))
diff --git a/mem_tests/utils.py b/mem_tests/utils.py
new file mode 100644
index 00000000..38bd89ca
--- /dev/null
+++ b/mem_tests/utils.py
@@ -0,0 +1,22 @@
+"""Utility functions for the memory tests.
+"""
+
+from datetime import datetime
+
+
+def compute_total_diff(line, base_time):
+ """
+ Computes the difference in time the line was recorded from the base time.
+
+ An example of a line is:
+ [4688:4688:0701/010151:ERROR:perf_provider_chromeos.cc(228)]...
+
+ Here, the month is 07, the day is 01 and the time is 01:01:51.
+
+ line- the line that contains the time the record was taken
+ base_time- the base time to measure our timestamp from
+ """
+ date = line.strip().split(':')[2].split('/')
+ timestamp = datetime(2014, int(date[0][0:2]), int(date[0][2:4]),
+ int(date[1][0:2]), int(date[1][2:4]), int(date[1][4:6]))
+ return (timestamp - base_time).total_seconds()
diff --git a/perf-to-inst-page.sh b/perf-to-inst-page.sh
new file mode 100755
index 00000000..ba1d2582
--- /dev/null
+++ b/perf-to-inst-page.sh
@@ -0,0 +1,85 @@
+#! /bin/bash -u
+# Copyright 2015 The Chromium OS Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+# This script first collects the addresses of the instructions being tracked by
+# the profile. After that, it calculates the offset of the addresses compared
+# to the base address and then gets the number of execution times for each
+# address. After that, it draws the heat map and the time map. A heap map shows
+# the overall hotness of instructions being executed while the time map shows the
+# hotness of instruction at different time.
+
+# binary : the name of the binary
+# profile : output of 'perf report -D'
+# loading_address : the loading address of the binary
+# page_size : the size to be displayed, usually 4096(byte).
+
+if [[ $# -ne 4 ]]; then
+ echo 'Illegal number of parameters' exit 1
+fi
+
+binary=$1
+profile=$2
+loading_address=$3
+page_size=$4
+
+# size of binary supported.
+binary_maximum=1000000000
+
+if ! [[ -e $profile ]] ; then
+ echo "error: profile does not exist" >&2; exit 1
+fi
+
+re='^[0-9]+$'
+if ! [[ $page_size =~ $re ]] ; then
+ echo "error: page_size is not a number" >&2; exit 1
+fi
+
+function test {
+ "$@"
+ local status=$?
+ if [ $status -ne 0 ]; then
+ echo "error with $1" >&2
+ fi
+ return $status
+}
+
+HEAT_PNG="heat_map.png"
+TIMELINE_PNG="timeline.png"
+
+test grep -A 2 PERF_RECORD_SAMPLE $profile | grep -A 1 -B 1 "thread: $binary" | \
+grep -B 2 "dso.*$binary$" | awk -v base=$loading_address \
+ "BEGIN { count=0; } /PERF_RECORD_SAMPLE/ {addr = strtonum(\$8) - strtonum(base); \
+ if (addr < $binary_maximum) count++; \
+ if (addr < $binary_maximum) print \$7,count,int(addr/$page_size)*$page_size}" > out.txt
+
+
+test awk '{print $3}' out.txt | sort -n | uniq -c > inst-histo.txt
+
+# generate inst heat map
+echo "
+set terminal png size 600,450
+set xlabel \"Instruction Virtual Address (MB)\"
+set ylabel \"Sample Occurance\"
+set grid
+
+set output \"${HEAT_PNG}\"
+set title \"Instruction Heat Map\"
+
+plot 'inst-histo.txt' using (\$2/1024/1024):1 with impulses notitle
+" | test gnuplot
+
+# generate instruction page access timeline
+num=$(awk 'END {print NR+1}' out.txt)
+
+echo "
+set terminal png size 600,450
+set xlabel \"time (sec)\"
+set ylabel \"Instruction Virtual Address (MB)\"
+
+set output \"${TIMELINE_PNG}\"
+set title \"instruction page accessd timeline\"
+
+plot 'out.txt' using (\$0/$num*10):(\$3/1024/1024) with dots notitle
+" | test gnuplot
diff --git a/produce_output.py b/produce_output.py
new file mode 100755
index 00000000..30deea8c
--- /dev/null
+++ b/produce_output.py
@@ -0,0 +1,27 @@
+#!/usr/bin/python2
+#
+# Copyright 2010 Google Inc. All Rights Reserved.
+"""This simulates a real job by producing a lot of output.
+
+"""
+
+from __future__ import print_function
+
+__author__ = 'asharif@google.com (Ahmad Sharif)'
+
+import time
+
+
+def Main():
+ """The main function."""
+
+ for j in range(10):
+ for i in range(10000):
+ print(str(j) + 'The quick brown fox jumped over the lazy dog.' + str(i))
+ time.sleep(60)
+
+ return 0
+
+
+if __name__ == '__main__':
+ Main()
diff --git a/pyrun b/pyrun
new file mode 100755
index 00000000..d9f5d75a
--- /dev/null
+++ b/pyrun
@@ -0,0 +1,6 @@
+#!/bin/bash
+
+DIRECTORY=$(cd `dirname $0` && pwd)
+PYTHONPATH=$DIRECTORY:$PYTHONPATH
+
+$*
diff --git a/remote_gcc_build.py b/remote_gcc_build.py
new file mode 100755
index 00000000..52cedfbc
--- /dev/null
+++ b/remote_gcc_build.py
@@ -0,0 +1,471 @@
+#!/usr/bin/python2
+
+# Copyright (c) 2013 The Chromium OS Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+"""Script to use remote try-bot build image with local gcc."""
+
+from __future__ import print_function
+
+import argparse
+import glob
+import os
+import re
+import shutil
+import socket
+import sys
+import tempfile
+import time
+
+from cros_utils import command_executer
+from cros_utils import logger
+from cros_utils import manifest_versions
+from cros_utils import misc
+
+BRANCH = 'the_actual_branch_used_in_this_script'
+TMP_BRANCH = 'tmp_branch'
+SLEEP_TIME = 600
+
+# pylint: disable=anomalous-backslash-in-string
+
+def GetPatchNum(output):
+ lines = output.splitlines()
+ line = [l for l in lines if 'googlesource' in l][0]
+ patch_num = re.findall(r'\d+', line)[0]
+ if 'chrome-internal' in line:
+ patch_num = '*' + patch_num
+ return str(patch_num)
+
+
+def GetPatchString(patch):
+ if patch:
+ return '+'.join(patch)
+ return 'NO_PATCH'
+
+
+def FindVersionForToolchain(branch, chromeos_root):
+ """Find the version number in artifacts link in the tryserver email."""
+ # For example: input: toolchain-3701.42.B
+ # output: R26-3701.42.1
+ digits = branch.split('-')[1].split('B')[0]
+ manifest_dir = os.path.join(chromeos_root, 'manifest-internal')
+ os.chdir(manifest_dir)
+ major_version = digits.split('.')[0]
+ ce = command_executer.GetCommandExecuter()
+ command = 'repo sync . && git branch -a | grep {0}'.format(major_version)
+ _, branches, _ = ce.RunCommandWOutput(command, print_to_console=False)
+ m = re.search(r'(R\d+)', branches)
+ if not m:
+ logger.GetLogger().LogFatal('Cannot find version for branch {0}'
+ .format(branch))
+ version = m.group(0) + '-' + digits + '1'
+ return version
+
+
+def FindBuildId(description):
+ """Find the build id of the build at trybot server."""
+ running_time = 0
+ while True:
+ (result, number) = FindBuildIdFromLog(description)
+ if result >= 0:
+ return (result, number)
+ logger.GetLogger().LogOutput('{0} minutes passed.'
+ .format(running_time / 60))
+ logger.GetLogger().LogOutput('Sleeping {0} seconds.'.format(SLEEP_TIME))
+ time.sleep(SLEEP_TIME)
+ running_time += SLEEP_TIME
+
+
+def FindBuildIdFromLog(description):
+ """Get the build id from build log."""
+ # returns tuple (result, buildid)
+ # result == 0, buildid > 0, the build was successful and we have a build id
+ # result > 0, buildid > 0, the whole build failed for some reason but we
+ # do have a build id.
+ # result == -1, buildid == -1, we have not found a finished build for this
+ # description yet
+
+ file_dir = os.path.dirname(os.path.realpath(__file__))
+ commands = ('{0}/cros_utils/buildbot_json.py builds '
+ 'http://chromegw/p/tryserver.chromiumos/'.format(file_dir))
+ ce = command_executer.GetCommandExecuter()
+ _, buildinfo, _ = ce.RunCommandWOutput(commands, print_to_console=False)
+
+ my_info = buildinfo.splitlines()
+ current_line = 1
+ running_job = False
+ result = -1
+
+ # result == 0, we have a successful build
+ # result > 0, we have a failed build but build id may be valid
+ # result == -1, we have not found a finished build for this description
+ while current_line < len(my_info):
+ my_dict = {}
+ while True:
+ key = my_info[current_line].split(':')[0].strip()
+ value = my_info[current_line].split(':', 1)[1].strip()
+ my_dict[key] = value
+ current_line += 1
+ if 'Build' in key or current_line == len(my_info):
+ break
+ if ('True' not in my_dict['completed'] and
+ str(description) in my_dict['reason']):
+ running_job = True
+ if ('True' not in my_dict['completed'] or
+ str(description) not in my_dict['reason']):
+ continue
+ result = int(my_dict['result'])
+ build_id = int(my_dict['number'])
+ if result == 0:
+ return (result, build_id)
+ else:
+ # Found a finished failed build.
+ # Keep searching to find a successful one
+ pass
+
+ if result > 0 and not running_job:
+ return (result, build_id)
+ return (-1, -1)
+
+
+def DownloadImage(target, index, dest, version):
+ """Download artifacts from cloud."""
+ if not os.path.exists(dest):
+ os.makedirs(dest)
+
+ rversion = manifest_versions.RFormatCrosVersion(version)
+ print(str(rversion))
+ # ls_cmd = ("gsutil ls gs://chromeos-image-archive/trybot-{0}/{1}-b{2}"
+ # .format(target, rversion, index))
+ ls_cmd = ('gsutil ls gs://chromeos-image-archive/trybot-{0}/*-b{2}'
+ .format(target, index))
+
+ download_cmd = ('$(which gsutil) cp {0} {1}'.format('{0}', dest))
+ ce = command_executer.GetCommandExecuter()
+
+ _, out, _ = ce.RunCommandWOutput(ls_cmd, print_to_console=True)
+ lines = out.splitlines()
+ download_files = ['autotest.tar', 'chromeos-chrome', 'chromiumos_test_image',
+ 'debug.tgz', 'sysroot_chromeos-base_chromeos-chrome.tar.xz']
+ for line in lines:
+ if any([e in line for e in download_files]):
+ cmd = download_cmd.format(line)
+ if ce.RunCommand(cmd):
+ logger.GetLogger().LogFatal('Command {0} failed, existing...'
+ .format(cmd))
+
+
+def UnpackImage(dest):
+ """Unpack the image, the chroot build dir."""
+ chrome_tbz2 = glob.glob(dest + '/*.tbz2')[0]
+ commands = ('tar xJf {0}/sysroot_chromeos-base_chromeos-chrome.tar.xz '
+ '-C {0} &&'
+ 'tar xjf {1} -C {0} &&'
+ 'tar xzf {0}/debug.tgz -C {0}/usr/lib/ &&'
+ 'tar xf {0}/autotest.tar -C {0}/usr/local/ &&'
+ 'tar xJf {0}/chromiumos_test_image.tar.xz -C {0}'
+ .format(dest, chrome_tbz2))
+ ce = command_executer.GetCommandExecuter()
+ return ce.RunCommand(commands)
+
+
+def RemoveOldBranch():
+ """Remove the branch with name BRANCH."""
+ ce = command_executer.GetCommandExecuter()
+ command = 'git rev-parse --abbrev-ref HEAD'
+ _, out, _ = ce.RunCommandWOutput(command)
+ if BRANCH in out:
+ command = 'git checkout -B {0}'.format(TMP_BRANCH)
+ ce.RunCommand(command)
+ command = "git commit -m 'nouse'"
+ ce.RunCommand(command)
+ command = 'git branch -D {0}'.format(BRANCH)
+ ce.RunCommand(command)
+
+
+def UploadManifest(manifest, chromeos_root, branch='master'):
+ """Copy the manifest to $chromeos_root/manifest-internal and upload."""
+ chromeos_root = misc.CanonicalizePath(chromeos_root)
+ manifest_dir = os.path.join(chromeos_root, 'manifest-internal')
+ os.chdir(manifest_dir)
+ ce = command_executer.GetCommandExecuter()
+
+ RemoveOldBranch()
+
+ if branch != 'master':
+ branch = '{0}'.format(branch)
+ command = 'git checkout -b {0} -t cros-internal/{1}'.format(BRANCH, branch)
+ ret = ce.RunCommand(command)
+ if ret:
+ raise RuntimeError('Command {0} failed'.format(command))
+
+ # We remove the default.xml, which is the symbolic link of full.xml.
+ # After that, we copy our xml file to default.xml.
+ # We did this because the full.xml might be updated during the
+ # run of the script.
+ os.remove(os.path.join(manifest_dir, 'default.xml'))
+ shutil.copyfile(manifest, os.path.join(manifest_dir, 'default.xml'))
+ return UploadPatch(manifest)
+
+
+def GetManifestPatch(manifests, version, chromeos_root, branch='master'):
+ """Return a gerrit patch number given a version of manifest file."""
+ temp_dir = tempfile.mkdtemp()
+ to_file = os.path.join(temp_dir, 'default.xml')
+ manifests.GetManifest(version, to_file)
+ return UploadManifest(to_file, chromeos_root, branch)
+
+
+def UploadPatch(source):
+ """Up load patch to gerrit, return patch number."""
+ commands = ('git add -A . &&'
+ "git commit -m 'test' -m 'BUG=None' -m 'TEST=None' "
+ "-m 'hostname={0}' -m 'source={1}'"
+ .format(socket.gethostname(), source))
+ ce = command_executer.GetCommandExecuter()
+ ce.RunCommand(commands)
+
+ commands = ('yes | repo upload . --cbr --no-verify')
+ _, _, err = ce.RunCommandWOutput(commands)
+ return GetPatchNum(err)
+
+
+def ReplaceSysroot(chromeos_root, dest_dir, target):
+ """Copy unpacked sysroot and image to chromeos_root."""
+ ce = command_executer.GetCommandExecuter()
+ # get the board name from "board-release". board may contain "-"
+ board = target.rsplit('-', 1)[0]
+ board_dir = os.path.join(chromeos_root, 'chroot', 'build', board)
+ command = 'sudo rm -rf {0}'.format(board_dir)
+ ce.RunCommand(command)
+
+ command = 'sudo mv {0} {1}'.format(dest_dir, board_dir)
+ ce.RunCommand(command)
+
+ image_dir = os.path.join(chromeos_root, 'src', 'build', 'images', board,
+ 'latest')
+ command = 'rm -rf {0} && mkdir -p {0}'.format(image_dir)
+ ce.RunCommand(command)
+
+ command = 'mv {0}/chromiumos_test_image.bin {1}'.format(board_dir, image_dir)
+ return ce.RunCommand(command)
+
+
+def GccBranchForToolchain(branch):
+ if branch == 'toolchain-3428.65.B':
+ return 'release-R25-3428.B'
+ else:
+ return None
+
+
+def GetGccBranch(branch):
+ """Get the remote branch name from branch or version."""
+ ce = command_executer.GetCommandExecuter()
+ command = 'git branch -a | grep {0}'.format(branch)
+ _, out, _ = ce.RunCommandWOutput(command)
+ if not out:
+ release_num = re.match(r'.*(R\d+)-*', branch)
+ if release_num:
+ release_num = release_num.group(0)
+ command = 'git branch -a | grep {0}'.format(release_num)
+ _, out, _ = ce.RunCommandWOutput(command)
+ if not out:
+ GccBranchForToolchain(branch)
+ if not out:
+ out = 'remotes/cros/master'
+ new_branch = out.splitlines()[0]
+ return new_branch
+
+
+def UploadGccPatch(chromeos_root, gcc_dir, branch):
+ """Upload local gcc to gerrit and get the CL number."""
+ ce = command_executer.GetCommandExecuter()
+ gcc_dir = misc.CanonicalizePath(gcc_dir)
+ gcc_path = os.path.join(chromeos_root, 'src/third_party/gcc')
+ assert os.path.isdir(gcc_path), ('{0} is not a valid chromeos root'
+ .format(chromeos_root))
+ assert os.path.isdir(gcc_dir), ('{0} is not a valid dir for gcc'
+ 'source'.format(gcc_dir))
+ os.chdir(gcc_path)
+ RemoveOldBranch()
+ if not branch:
+ branch = 'master'
+ branch = GetGccBranch(branch)
+ command = ('git checkout -b {0} -t {1} && ' 'rm -rf *'.format(BRANCH, branch))
+ ce.RunCommand(command, print_to_console=False)
+
+ command = ("rsync -az --exclude='*.svn' --exclude='*.git'"
+ ' {0}/ .'.format(gcc_dir))
+ ce.RunCommand(command)
+ return UploadPatch(gcc_dir)
+
+
+def RunRemote(chromeos_root, branch, patches, is_local, target, chrome_version,
+ dest_dir):
+ """The actual running commands."""
+ ce = command_executer.GetCommandExecuter()
+
+ if is_local:
+ local_flag = '--local -r {0}'.format(dest_dir)
+ else:
+ local_flag = '--remote'
+ patch = ''
+ for p in patches:
+ patch += ' -g {0}'.format(p)
+ cbuildbot_path = os.path.join(chromeos_root, 'chromite/cbuildbot')
+ os.chdir(cbuildbot_path)
+ branch_flag = ''
+ if branch != 'master':
+ branch_flag = ' -b {0}'.format(branch)
+ chrome_version_flag = ''
+ if chrome_version:
+ chrome_version_flag = ' --chrome_version={0}'.format(chrome_version)
+ description = '{0}_{1}_{2}'.format(branch, GetPatchString(patches), target)
+ command = ('yes | ./cbuildbot {0} {1} {2} {3} {4} {5}'
+ ' --remote-description={6}'
+ ' --chrome_rev=tot'.format(patch, branch_flag, chrome_version,
+ local_flag, chrome_version_flag, target,
+ description))
+ ce.RunCommand(command)
+
+ return description
+
+
+def Main(argv):
+ """The main function."""
+ # Common initializations
+ parser = argparse.ArgumentParser()
+ parser.add_argument('-c',
+ '--chromeos_root',
+ required=True,
+ dest='chromeos_root',
+ help='The chromeos_root')
+ parser.add_argument('-g',
+ '--gcc_dir',
+ default='',
+ dest='gcc_dir',
+ help='The gcc dir')
+ parser.add_argument('-t',
+ '--target',
+ required=True,
+ dest='target',
+ help=('The target to be build, the list is at'
+ ' $(chromeos_root)/chromite/buildbot/cbuildbot'
+ ' --list -all'))
+ parser.add_argument('-l', '--local', action='store_true')
+ parser.add_argument('-d',
+ '--dest_dir',
+ dest='dest_dir',
+ help=('The dir to build the whole chromeos if'
+ ' --local is set'))
+ parser.add_argument('--chrome_version',
+ dest='chrome_version',
+ default='',
+ help='The chrome version to use. '
+ 'Default it will use the latest one.')
+ parser.add_argument('--chromeos_version',
+ dest='chromeos_version',
+ default='',
+ help=('The chromeos version to use.'
+ '(1) A release version in the format: '
+ "'\d+\.\d+\.\d+\.\d+.*'"
+ "(2) 'latest_lkgm' for the latest lkgm version"))
+ parser.add_argument('-r',
+ '--replace_sysroot',
+ action='store_true',
+ help=('Whether or not to replace the build/$board dir'
+ 'under the chroot of chromeos_root and copy '
+ 'the image to src/build/image/$board/latest.'
+ ' Default is False'))
+ parser.add_argument('-b',
+ '--branch',
+ dest='branch',
+ default='',
+ help=('The branch to run trybot, default is None'))
+ parser.add_argument('-p',
+ '--patch',
+ dest='patch',
+ default='',
+ help=('The patches to be applied, the patches numbers '
+ "be seperated by ','"))
+
+ script_dir = os.path.dirname(os.path.realpath(__file__))
+
+ args = parser.parse_args(argv[1:])
+ target = args.target
+ if args.patch:
+ patch = args.patch.split(',')
+ else:
+ patch = []
+ chromeos_root = misc.CanonicalizePath(args.chromeos_root)
+ if args.chromeos_version and args.branch:
+ raise RuntimeError('You can not set chromeos_version and branch at the '
+ 'same time.')
+
+ manifests = None
+ if args.branch:
+ chromeos_version = ''
+ branch = args.branch
+ else:
+ chromeos_version = args.chromeos_version
+ manifests = manifest_versions.ManifestVersions()
+ if chromeos_version == 'latest_lkgm':
+ chromeos_version = manifests.TimeToVersion(time.mktime(time.gmtime()))
+ logger.GetLogger().LogOutput('found version %s for latest LKGM' %
+ (chromeos_version))
+ # TODO: this script currently does not handle the case where the version
+ # is not in the "master" branch
+ branch = 'master'
+
+ if chromeos_version:
+ manifest_patch = GetManifestPatch(manifests, chromeos_version,
+ chromeos_root)
+ patch.append(manifest_patch)
+ if args.gcc_dir:
+ # TODO: everytime we invoke this script we are getting a different
+ # patch for GCC even if GCC has not changed. The description should
+ # be based on the MD5 of the GCC patch contents.
+ patch.append(UploadGccPatch(chromeos_root, args.gcc_dir, branch))
+ description = RunRemote(chromeos_root, branch, patch, args.local, target,
+ args.chrome_version, args.dest_dir)
+ if args.local or not args.dest_dir:
+ # TODO: We are not checktng the result of cbuild_bot in here!
+ return 0
+
+ # return value:
+ # 0 => build bot was successful and image was put where requested
+ # 1 => Build bot FAILED but image was put where requested
+ # 2 => Build bot failed or BUild bot was successful but and image was
+ # not generated or could not be put where expected
+
+ os.chdir(script_dir)
+ dest_dir = misc.CanonicalizePath(args.dest_dir)
+ (bot_result, build_id) = FindBuildId(description)
+ if bot_result > 0 and build_id > 0:
+ logger.GetLogger().LogError('Remote trybot failed but image was generated')
+ bot_result = 1
+ elif bot_result > 0:
+ logger.GetLogger().LogError('Remote trybot failed. No image was generated')
+ return 2
+ if 'toolchain' in branch:
+ chromeos_version = FindVersionForToolchain(branch, chromeos_root)
+ assert not manifest_versions.IsRFormatCrosVersion(chromeos_version)
+ DownloadImage(target, build_id, dest_dir, chromeos_version)
+ ret = UnpackImage(dest_dir)
+ if ret != 0:
+ return 2
+ # todo: return a more inteligent return value
+ if not args.replace_sysroot:
+ return bot_result
+
+ ret = ReplaceSysroot(chromeos_root, args.dest_dir, target)
+ if ret != 0:
+ return 2
+
+ # got an image and we were successful in placing it where requested
+ return bot_result
+
+
+if __name__ == '__main__':
+ retval = Main(sys.argv)
+ sys.exit(retval)
diff --git a/remote_kill_test.py b/remote_kill_test.py
new file mode 100755
index 00000000..71a66907
--- /dev/null
+++ b/remote_kill_test.py
@@ -0,0 +1,45 @@
+#!/usr/bin/python2
+#
+# Copyright 2010 Google Inc. All Rights Reserved.
+"""Script to wrap test_that script.
+
+Run this script and kill it. Then run ps -ef to see if sleep
+is still running,.
+"""
+
+from __future__ import print_function
+
+__author__ = 'asharif@google.com (Ahmad Sharif)'
+
+import argparse
+import os
+import sys
+
+from cros_utils import command_executer
+
+
+def Usage(parser, message):
+ print('ERROR: %s' % message)
+ parser.print_help()
+ sys.exit(0)
+
+
+def Main(argv):
+ parser = argparse.ArgumentParser()
+ parser.add_argument('-c',
+ '--chromeos_root',
+ dest='chromeos_root',
+ help='ChromeOS root checkout directory')
+ parser.add_argument('-r',
+ '--remote',
+ dest='remote',
+ help='Remote chromeos device.')
+
+ _ = parser.parse_args(argv)
+ ce = command_executer.GetCommandExecuter()
+ ce.RunCommand('ls; sleep 10000', machine=os.uname()[1])
+ return 0
+
+
+if __name__ == '__main__':
+ Main(sys.argv[1:])
diff --git a/remote_test.py b/remote_test.py
new file mode 100755
index 00000000..82f54ed5
--- /dev/null
+++ b/remote_test.py
@@ -0,0 +1,98 @@
+#!/usr/bin/python2
+#
+# Copyright 2010 Google Inc. All Rights Reserved.
+"""Script to wrap test_that script.
+
+This script can login to the chromeos machine using the test private key.
+"""
+
+from __future__ import print_function
+
+__author__ = 'asharif@google.com (Ahmad Sharif)'
+
+import argparse
+import os
+import sys
+
+from cros_utils import command_executer
+from cros_utils import misc
+
+
+def Usage(parser, message):
+ print('ERROR: %s' % message)
+ parser.print_help()
+ sys.exit(0)
+
+
+def Main(argv):
+ parser = argparse.ArgumentParser()
+ parser.add_argument('-c',
+ '--chromeos_root',
+ dest='chromeos_root',
+ help='ChromeOS root checkout directory')
+ parser.add_argument('-r',
+ '--remote',
+ dest='remote',
+ help='Remote chromeos device.')
+ options = parser.parse_args(argv)
+ if options.chromeos_root is None:
+ Usage(parser, 'chromeos_root must be given')
+
+ if options.remote is None:
+ Usage(parser, 'remote must be given')
+
+ options.chromeos_root = os.path.expanduser(options.chromeos_root)
+
+ command = 'ls -lt /'
+ ce = command_executer.GetCommandExecuter()
+ ce.CrosRunCommand(command,
+ chromeos_root=options.chromeos_root,
+ machine=options.remote)
+
+ version_dir_path, script_name = misc.GetRoot(sys.argv[0])
+ version_dir = misc.GetRoot(version_dir_path)[1]
+
+ # Tests to copy directories and files to the chromeos box.
+ ce.CopyFiles(version_dir_path,
+ '/tmp/' + version_dir,
+ dest_machine=options.remote,
+ dest_cros=True,
+ chromeos_root=options.chromeos_root)
+ ce.CopyFiles(version_dir_path,
+ '/tmp/' + version_dir + '1',
+ dest_machine=options.remote,
+ dest_cros=True,
+ chromeos_root=options.chromeos_root)
+ ce.CopyFiles(sys.argv[0],
+ '/tmp/' + script_name,
+ recursive=False,
+ dest_machine=options.remote,
+ dest_cros=True,
+ chromeos_root=options.chromeos_root)
+ ce.CopyFiles(sys.argv[0],
+ '/tmp/' + script_name + '1',
+ recursive=False,
+ dest_machine=options.remote,
+ dest_cros=True,
+ chromeos_root=options.chromeos_root)
+
+ # Test to copy directories and files from the chromeos box.
+ ce.CopyFiles('/tmp/' + script_name,
+ '/tmp/hello',
+ recursive=False,
+ src_machine=options.remote,
+ src_cros=True,
+ chromeos_root=options.chromeos_root)
+ ce.CopyFiles('/tmp/' + script_name,
+ '/tmp/' + script_name,
+ recursive=False,
+ src_machine=options.remote,
+ src_cros=True,
+ chromeos_root=options.chromeos_root)
+ board = ce.CrosLearnBoard(options.chromeos_root, options.remote)
+ print(board)
+ return 0
+
+
+if __name__ == '__main__':
+ Main(sys.argv[1:])
diff --git a/repo_to_repo.py b/repo_to_repo.py
new file mode 100755
index 00000000..3b3b9bc4
--- /dev/null
+++ b/repo_to_repo.py
@@ -0,0 +1,421 @@
+#!/usr/bin/python2
+#
+# Copyright 2010 Google Inc. All Rights Reserved.
+"""Module for transferring files between various types of repositories."""
+
+from __future__ import print_function
+
+__author__ = 'asharif@google.com (Ahmad Sharif)'
+
+import argparse
+import datetime
+import json
+import os
+import re
+import socket
+import sys
+import tempfile
+
+from automation.clients.helper import perforce
+from cros_utils import command_executer
+from cros_utils import logger
+from cros_utils import misc
+
+# pylint: disable=anomalous-backslash-in-string
+
+def GetCanonicalMappings(mappings):
+ canonical_mappings = []
+ for mapping in mappings:
+ remote_path, local_path = mapping.split()
+ if local_path.endswith('/') and not remote_path.endswith('/'):
+ local_path = os.path.join(local_path, os.path.basename(remote_path))
+ remote_path = remote_path.lstrip('/').split('/', 1)[1]
+ canonical_mappings.append(perforce.PathMapping(remote_path, local_path))
+ return canonical_mappings
+
+
+def SplitMapping(mapping):
+ parts = mapping.split()
+ assert len(parts) <= 2, 'Mapping %s invalid' % mapping
+ remote_path = parts[0]
+ if len(parts) == 2:
+ local_path = parts[1]
+ else:
+ local_path = '.'
+ return remote_path, local_path
+
+
+class Repo(object):
+ """Basic repository base class."""
+
+ def __init__(self, no_create_tmp_dir=False):
+ self.repo_type = None
+ self.address = None
+ self.mappings = None
+ self.revision = None
+ self.ignores = ['.gitignore', '.p4config', 'README.google']
+ if no_create_tmp_dir:
+ self._root_dir = None
+ else:
+ self._root_dir = tempfile.mkdtemp()
+ self._ce = command_executer.GetCommandExecuter()
+ self._logger = logger.GetLogger()
+
+ def PullSources(self):
+ """Pull all sources into an internal dir."""
+ pass
+
+ def SetupForPush(self):
+ """Setup a repository for pushing later."""
+ pass
+
+ def PushSources(self, commit_message=None, dry_run=False, message_file=None):
+ """Push to the external repo with the commit message."""
+ pass
+
+ def _RsyncExcludingRepoDirs(self, source_dir, dest_dir):
+ for f in os.listdir(source_dir):
+ if f in ['.git', '.svn', '.p4config']:
+ continue
+ dest_file = os.path.join(dest_dir, f)
+ source_file = os.path.join(source_dir, f)
+ if os.path.exists(dest_file):
+ command = 'rm -rf %s' % dest_file
+ self._ce.RunCommand(command)
+ command = 'rsync -a %s %s' % (source_file, dest_dir)
+ self._ce.RunCommand(command)
+ return 0
+
+ def MapSources(self, dest_dir):
+ """Copy sources from the internal dir to root_dir."""
+ return self._RsyncExcludingRepoDirs(self._root_dir, dest_dir)
+
+ def GetRoot(self):
+ return self._root_dir
+
+ def SetRoot(self, directory):
+ self._root_dir = directory
+
+ def CleanupRoot(self):
+ command = 'rm -rf %s' % self._root_dir
+ return self._ce.RunCommand(command)
+
+ def __str__(self):
+ return '\n'.join(str(s)
+ for s in [self.repo_type, self.address, self.mappings])
+
+
+# Note - this type of repo is used only for "readonly", in other words, this
+# only serves as a incoming repo.
+class FileRepo(Repo):
+ """Class for file repositories."""
+
+ def __init__(self, address, ignores=None):
+ Repo.__init__(self, no_create_tmp_dir=True)
+ self.repo_type = 'file'
+ self.address = address
+ self.mappings = None
+ self.branch = None
+ self.revision = '{0} (as of "{1}")'.format(address, datetime.datetime.now())
+ self.gerrit = None
+ self._root_dir = self.address
+ if ignores:
+ self.ignores += ignores
+
+ def CleanupRoot(self):
+ """Override to prevent deletion."""
+ pass
+
+
+class P4Repo(Repo):
+ """Class for P4 repositories."""
+
+
+ def __init__(self, address, mappings, revision=None):
+ Repo.__init__(self)
+ self.repo_type = 'p4'
+ self.address = address
+ self.mappings = mappings
+ self.revision = revision
+
+ def PullSources(self):
+ client_name = socket.gethostname()
+ client_name += tempfile.mkstemp()[1].replace('/', '-')
+ mappings = self.mappings
+ p4view = perforce.View('depot2', GetCanonicalMappings(mappings))
+ p4client = perforce.CommandsFactory(self._root_dir,
+ p4view,
+ name=client_name)
+ command = p4client.SetupAndDo(p4client.Sync(self.revision))
+ ret = self._ce.RunCommand(command)
+ assert ret == 0, 'Could not setup client.'
+ command = p4client.InCheckoutDir(p4client.SaveCurrentCLNumber())
+ ret, o, _ = self._ce.RunCommandWOutput(command)
+ assert ret == 0, 'Could not get version from client.'
+ self.revision = re.search('^\d+$', o.strip(), re.MULTILINE).group(0)
+ command = p4client.InCheckoutDir(p4client.Remove())
+ ret = self._ce.RunCommand(command)
+ assert ret == 0, 'Could not delete client.'
+ return 0
+
+
+class SvnRepo(Repo):
+ """Class for svn repositories."""
+
+ def __init__(self, address, mappings):
+ Repo.__init__(self)
+ self.repo_type = 'svn'
+ self.address = address
+ self.mappings = mappings
+
+ def PullSources(self):
+ with misc.WorkingDirectory(self._root_dir):
+ for mapping in self.mappings:
+ remote_path, local_path = SplitMapping(mapping)
+ command = 'svn co %s/%s %s' % (self.address, remote_path, local_path)
+ ret = self._ce.RunCommand(command)
+ if ret:
+ return ret
+
+ self.revision = ''
+ for mapping in self.mappings:
+ remote_path, local_path = SplitMapping(mapping)
+ command = 'cd %s && svnversion -c .' % (local_path)
+ ret, o, _ = self._ce.RunCommandWOutput(command)
+ self.revision += o.strip().split(':')[-1]
+ if ret:
+ return ret
+ return 0
+
+
+class GitRepo(Repo):
+ """Class for git repositories."""
+
+ def __init__(self, address, branch, mappings=None, ignores=None, gerrit=None):
+ Repo.__init__(self)
+ self.repo_type = 'git'
+ self.address = address
+ self.branch = branch or 'master'
+ if ignores:
+ self.ignores += ignores
+ self.mappings = mappings
+ self.gerrit = gerrit
+
+ def _CloneSources(self):
+ with misc.WorkingDirectory(self._root_dir):
+ command = 'git clone %s .' % (self.address)
+ return self._ce.RunCommand(command)
+
+ def PullSources(self):
+ with misc.WorkingDirectory(self._root_dir):
+ ret = self._CloneSources()
+ if ret:
+ return ret
+
+ command = 'git checkout %s' % self.branch
+ ret = self._ce.RunCommand(command)
+ if ret:
+ return ret
+
+ command = 'git describe --always'
+ ret, o, _ = self._ce.RunCommandWOutput(command)
+ self.revision = o.strip()
+ return ret
+
+ def SetupForPush(self):
+ with misc.WorkingDirectory(self._root_dir):
+ ret = self._CloneSources()
+ logger.GetLogger().LogFatalIf(ret, 'Could not clone git repo %s.' %
+ self.address)
+
+ command = 'git branch -a | grep -wq %s' % self.branch
+ ret = self._ce.RunCommand(command)
+
+ if ret == 0:
+ if self.branch != 'master':
+ command = ('git branch --track %s remotes/origin/%s' %
+ (self.branch, self.branch))
+ else:
+ command = 'pwd'
+ command += '&& git checkout %s' % self.branch
+ else:
+ command = 'git symbolic-ref HEAD refs/heads/%s' % self.branch
+ command += '&& rm -rf *'
+ ret = self._ce.RunCommand(command)
+ return ret
+
+ def CommitLocally(self, commit_message=None, message_file=None):
+ with misc.WorkingDirectory(self._root_dir):
+ command = 'pwd'
+ for ignore in self.ignores:
+ command += '&& echo \'%s\' >> .git/info/exclude' % ignore
+ command += '&& git add -Av .'
+ if message_file:
+ message_arg = '-F %s' % message_file
+ elif commit_message:
+ message_arg = '-m \'%s\'' % commit_message
+ else:
+ raise RuntimeError('No commit message given!')
+ command += '&& git commit -v %s' % message_arg
+ return self._ce.RunCommand(command)
+
+ def PushSources(self, commit_message=None, dry_run=False, message_file=None):
+ ret = self.CommitLocally(commit_message, message_file)
+ if ret:
+ return ret
+ push_args = ''
+ if dry_run:
+ push_args += ' -n '
+ with misc.WorkingDirectory(self._root_dir):
+ if self.gerrit:
+ label = 'somelabel'
+ command = 'git remote add %s %s' % (label, self.address)
+ command += ('&& git push %s %s HEAD:refs/for/master' %
+ (push_args, label))
+ else:
+ command = 'git push -v %s origin %s:%s' % (push_args, self.branch,
+ self.branch)
+ ret = self._ce.RunCommand(command)
+ return ret
+
+ def MapSources(self, root_dir):
+ if not self.mappings:
+ self._RsyncExcludingRepoDirs(self._root_dir, root_dir)
+ return
+ with misc.WorkingDirectory(self._root_dir):
+ for mapping in self.mappings:
+ remote_path, local_path = SplitMapping(mapping)
+ remote_path.rstrip('...')
+ local_path.rstrip('...')
+ full_local_path = os.path.join(root_dir, local_path)
+ ret = self._RsyncExcludingRepoDirs(remote_path, full_local_path)
+ if ret:
+ return ret
+ return 0
+
+
+class RepoReader(object):
+ """Class for reading repositories."""
+
+ def __init__(self, filename):
+ self.filename = filename
+ self.main_dict = {}
+ self.input_repos = []
+ self.output_repos = []
+
+ def ParseFile(self):
+ with open(self.filename) as f:
+ self.main_dict = json.load(f)
+ self.CreateReposFromDict(self.main_dict)
+ return [self.input_repos, self.output_repos]
+
+ def CreateReposFromDict(self, main_dict):
+ for key, repo_list in main_dict.items():
+ for repo_dict in repo_list:
+ repo = self.CreateRepoFromDict(repo_dict)
+ if key == 'input':
+ self.input_repos.append(repo)
+ elif key == 'output':
+ self.output_repos.append(repo)
+ else:
+ logger.GetLogger().LogFatal('Unknown key: %s found' % key)
+
+ def CreateRepoFromDict(self, repo_dict):
+ repo_type = repo_dict.get('type', None)
+ repo_address = repo_dict.get('address', None)
+ repo_mappings = repo_dict.get('mappings', None)
+ repo_ignores = repo_dict.get('ignores', None)
+ repo_branch = repo_dict.get('branch', None)
+ gerrit = repo_dict.get('gerrit', None)
+ revision = repo_dict.get('revision', None)
+
+ if repo_type == 'p4':
+ repo = P4Repo(repo_address, repo_mappings, revision=revision)
+ elif repo_type == 'svn':
+ repo = SvnRepo(repo_address, repo_mappings)
+ elif repo_type == 'git':
+ repo = GitRepo(repo_address,
+ repo_branch,
+ mappings=repo_mappings,
+ ignores=repo_ignores,
+ gerrit=gerrit)
+ elif repo_type == 'file':
+ repo = FileRepo(repo_address)
+ else:
+ logger.GetLogger().LogFatal('Unknown repo type: %s' % repo_type)
+ return repo
+
+
+@logger.HandleUncaughtExceptions
+def Main(argv):
+ parser = argparse.ArgumentParser()
+ parser.add_argument('-i',
+ '--input_file',
+ dest='input_file',
+ help='The input file that contains repo descriptions.')
+
+ parser.add_argument('-n',
+ '--dry_run',
+ dest='dry_run',
+ action='store_true',
+ default=False,
+ help='Do a dry run of the push.')
+
+ parser.add_argument('-F',
+ '--message_file',
+ dest='message_file',
+ default=None,
+ help=('Use contents of the log file as the commit '
+ 'message.'))
+
+ options = parser.parse_args(argv)
+ if not options.input_file:
+ parser.print_help()
+ return 1
+ rr = RepoReader(options.input_file)
+ [input_repos, output_repos] = rr.ParseFile()
+
+ # Make sure FileRepo is not used as output destination.
+ for output_repo in output_repos:
+ if output_repo.repo_type == 'file':
+ logger.GetLogger().LogFatal(
+ 'FileRepo is only supported as an input repo.')
+
+ for output_repo in output_repos:
+ ret = output_repo.SetupForPush()
+ if ret:
+ return ret
+
+ input_revisions = []
+ for input_repo in input_repos:
+ ret = input_repo.PullSources()
+ if ret:
+ return ret
+ input_revisions.append(input_repo.revision)
+
+ for input_repo in input_repos:
+ for output_repo in output_repos:
+ ret = input_repo.MapSources(output_repo.GetRoot())
+ if ret:
+ return ret
+
+ commit_message = 'Synced repos to: %s' % ','.join(input_revisions)
+ for output_repo in output_repos:
+ ret = output_repo.PushSources(commit_message=commit_message,
+ dry_run=options.dry_run,
+ message_file=options.message_file)
+ if ret:
+ return ret
+
+ if not options.dry_run:
+ for output_repo in output_repos:
+ output_repo.CleanupRoot()
+ for input_repo in input_repos:
+ input_repo.CleanupRoot()
+
+ return ret
+
+
+if __name__ == '__main__':
+ retval = Main(sys.argv[1:])
+ sys.exit(retval)
diff --git a/run_tests.py b/run_tests.py
new file mode 100755
index 00000000..c755278e
--- /dev/null
+++ b/run_tests.py
@@ -0,0 +1,23 @@
+#!/usr/bin/python2
+#
+# Copyright 2010 Google Inc. All Rights Reserved.
+"""Script to wrap run_remote_tests.sh script.
+
+This script calls run_remote_tests.sh with standard tests.
+"""
+
+from __future__ import print_function
+
+__author__ = 'asharif@google.com (Ahmad Sharif)'
+
+
+import sys
+
+def Main():
+ """The main function."""
+ print('This script is deprecated. Use crosperf for running tests.')
+ return 1
+
+
+if __name__ == '__main__':
+ sys.exit(Main())
diff --git a/setup_chromeos.py b/setup_chromeos.py
new file mode 100755
index 00000000..b6f9f4df
--- /dev/null
+++ b/setup_chromeos.py
@@ -0,0 +1,252 @@
+#!/usr/bin/python2
+#
+# Copyright 2010 The Chromium OS Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+"""Script to checkout the ChromeOS source.
+
+This script sets up the ChromeOS source in the given directory, matching a
+particular release of ChromeOS.
+"""
+
+from __future__ import print_function
+
+__author__ = 'raymes@google.com (Raymes Khoury)'
+
+from datetime import datetime
+
+import argparse
+import os
+import pickle
+import sys
+import tempfile
+import time
+from cros_utils import command_executer
+from cros_utils import logger
+from cros_utils import manifest_versions
+
+GCLIENT_FILE = """solutions = [
+ { "name" : "CHROME_DEPS",
+ "url" :
+ "svn://svn.chromium.org/chrome-internal/trunk/tools/buildspec/releases/%s",
+ "custom_deps" : {
+ "src/third_party/WebKit/LayoutTests": None,
+ "src-pdf": None,
+ "src/pdf": None,
+ },
+ "safesync_url": "",
+ },
+]
+"""
+
+# List of stable versions used for common team image
+# Sheriff must update this list when a new common version becomes available
+COMMON_VERSIONS = '/home/mobiletc-prebuild/common_images/common_list.txt'
+
+
+def Usage(parser):
+ parser.print_help()
+ sys.exit(0)
+
+
+# Get version spec file, either from "paladin" or "buildspec" directory.
+def GetVersionSpecFile(version, versions_git):
+ temp = tempfile.mkdtemp()
+ commands = ['cd {0}'.format(temp), \
+ 'git clone {0} versions'.format(versions_git)]
+ cmd_executer = command_executer.GetCommandExecuter()
+ ret = cmd_executer.RunCommands(commands)
+ err_msg = None
+ if ret:
+ err_msg = 'Failed to checkout versions_git - {0}'.format(versions_git)
+ ret = None
+ else:
+ v, m = version.split('.', 1)
+ paladin_spec = 'paladin/buildspecs/{0}/{1}.xml'.format(v, m)
+ generic_spec = 'buildspecs/{0}/{1}.xml'.format(v, m)
+ paladin_path = '{0}/versions/{1}'.format(temp, paladin_spec)
+ generic_path = '{0}/versions/{1}'.format(temp, generic_spec)
+ if os.path.exists(paladin_path):
+ ret = paladin_spec
+ elif os.path.exists(generic_path):
+ ret = generic_spec
+ else:
+ err_msg = 'No spec found for version {0}'.format(version)
+ ret = None
+ # Fall through to clean up.
+
+ commands = ['rm -rf {0}'.format(temp)]
+ cmd_executer.RunCommands(commands)
+ if err_msg:
+ logger.GetLogger().LogFatal(err_msg)
+ return ret
+
+
+def TimeToCommonVersion(timestamp):
+ """Convert timestamp to common image version."""
+ tdt = datetime.fromtimestamp(float(timestamp))
+ with open(COMMON_VERSIONS, 'r') as f:
+ common_list = pickle.load(f)
+ for sv in common_list:
+ sdt = datetime.strptime(sv['date'], '%Y-%m-%d %H:%M:%S.%f')
+ if tdt >= sdt:
+ return '%s.%s' % (sv['chrome_major_version'], sv['chromeos_version'])
+ # should never reach here
+ logger.GetLogger().LogFatal('No common version for timestamp')
+ return None
+
+
+def Main(argv):
+ """Checkout the ChromeOS source."""
+ parser = argparse.ArgumentParser()
+ parser.add_argument('--dir',
+ dest='directory',
+ help='Target directory for ChromeOS installation.')
+ parser.add_argument('--version',
+ dest='version',
+ default='latest_lkgm',
+ help="""ChromeOS version. Can be:
+(1) A release version in the format: 'X.X.X.X'
+(2) 'top' for top of trunk
+(3) 'latest_lkgm' for the latest lkgm version
+(4) 'lkgm' for the lkgm release before timestamp
+(5) 'latest_common' for the latest team common stable version
+(6) 'common' for the team common stable version before timestamp
+Default is 'latest_lkgm'.""")
+ parser.add_argument('--timestamp',
+ dest='timestamp',
+ default=None,
+ help='Timestamps in epoch format. It will check out the'
+ 'latest LKGM or the latest COMMON version of ChromeOS'
+ ' before the timestamp. Use in combination with'
+ ' --version=latest or --version=common. Use '
+ '"date -d <date string> +%s" to find epoch time')
+ parser.add_argument('--minilayout',
+ dest='minilayout',
+ default=False,
+ action='store_true',
+ help='Whether to checkout the minilayout (smaller '
+ 'checkout).')
+ parser.add_argument('--jobs',
+ '-j',
+ dest='jobs',
+ help='Number of repo sync threads to use.')
+ parser.add_argument('--public',
+ '-p',
+ dest='public',
+ default=False,
+ action='store_true',
+ help='Use the public checkout instead of the private '
+ 'one.')
+
+ options = parser.parse_args(argv)
+
+ if not options.version:
+ parser.print_help()
+ logger.GetLogger().LogFatal('No version specified.')
+ else:
+ version = options.version.strip()
+
+ if not options.timestamp:
+ timestamp = ''
+ else:
+ timestamp = options.timestamp.strip()
+ if version not in ('lkgm', 'common'):
+ parser.print_help()
+ logger.GetLogger().LogFatal('timestamp option only applies for '
+ "versions \"lkgm\" or \"common\"")
+
+ if not options.directory:
+ parser.print_help()
+ logger.GetLogger().LogFatal('No directory specified.')
+
+ directory = options.directory.strip()
+
+ if options.public:
+ manifest_repo = 'https://chromium.googlesource.com/chromiumos/manifest.git'
+ versions_repo = ('https://chromium.googlesource.com/'
+ 'chromiumos/manifest-versions.git')
+ else:
+ manifest_repo = (
+ 'https://chrome-internal.googlesource.com/chromeos/'
+ 'manifest-internal.git'
+ )
+ versions_repo = (
+ 'https://chrome-internal.googlesource.com/chromeos/'
+ 'manifest-versions.git'
+ )
+
+ if version == 'top':
+ init = 'repo init -u %s' % manifest_repo
+ elif version == 'latest_lkgm':
+ manifests = manifest_versions.ManifestVersions()
+ version = manifests.TimeToVersion(time.mktime(time.gmtime()))
+ version, manifest = version.split('.', 1)
+ logger.GetLogger().LogOutput('found version %s.%s for latest LKGM' %
+ (version, manifest))
+ init = ('repo init -u %s -m paladin/buildspecs/%s/%s.xml' %
+ (versions_repo, version, manifest))
+ del manifests
+ elif version == 'lkgm':
+ if not timestamp:
+ parser.print_help()
+ logger.GetLogger().LogFatal('No timestamp specified for version=lkgm')
+ manifests = manifest_versions.ManifestVersions()
+ version = manifests.TimeToVersion(timestamp)
+ version, manifest = version.split('.', 1)
+ logger.GetLogger().LogOutput('found version %s.%s for LKGM at timestamp %s'
+ % (version, manifest, timestamp))
+ init = ('repo init -u %s -m paladin/buildspecs/%s/%s.xml' %
+ (versions_repo, version, manifest))
+ del manifests
+ elif version == 'latest_common':
+ version = TimeToCommonVersion(time.mktime(time.gmtime()))
+ version, manifest = version.split('.', 1)
+ logger.GetLogger().LogOutput('found version %s.%s for latest Common image' %
+ (version, manifest))
+ init = ('repo init -u %s -m buildspecs/%s/%s.xml' % (versions_repo, version,
+ manifest))
+ elif version == 'common':
+ if not timestamp:
+ parser.print_help()
+ logger.GetLogger().LogFatal('No timestamp specified for version=lkgm')
+ version = TimeToCommonVersion(timestamp)
+ version, manifest = version.split('.', 1)
+ logger.GetLogger().LogOutput('found version %s.%s for latest common image '
+ 'at timestamp %s' % (version, manifest,
+ timestamp))
+ init = ('repo init -u %s -m buildspecs/%s/%s.xml' % (versions_repo, version,
+ manifest))
+ else:
+ # user specified a specific version number
+ version_spec_file = GetVersionSpecFile(version, versions_repo)
+ if not version_spec_file:
+ return 1
+ init = 'repo init -u %s -m %s' % (versions_repo, version_spec_file)
+
+ if options.minilayout:
+ init += ' -g minilayout'
+
+ init += ' --repo-url=https://chromium.googlesource.com/external/repo.git'
+
+ # crosbug#31837 - "Sources need to be world-readable to properly
+ # function inside the chroot"
+ sync = 'umask 022 && repo sync'
+ if options.jobs:
+ sync += ' -j %s' % options.jobs
+
+ commands = ['mkdir -p %s' % directory, 'cd %s' % directory, init, sync]
+ cmd_executer = command_executer.GetCommandExecuter()
+ ret = cmd_executer.RunCommands(commands)
+ if ret:
+ return ret
+
+ return cmd_executer.RunCommand(
+ 'git ls-remote '
+ 'https://chrome-internal.googlesource.com/chrome/src-internal.git '
+ '> /dev/null')
+
+
+if __name__ == '__main__':
+ retval = Main(sys.argv[1:])
+ sys.exit(retval)
diff --git a/tc_enter_chroot.py b/tc_enter_chroot.py
new file mode 100755
index 00000000..573e5585
--- /dev/null
+++ b/tc_enter_chroot.py
@@ -0,0 +1,299 @@
+#!/usr/bin/python2
+#
+# Copyright 2010 Google Inc. All Rights Reserved.
+"""Script to enter the ChromeOS chroot with mounted sources.
+
+This script enters the chroot with mounted sources.
+"""
+
+from __future__ import print_function
+
+__author__ = 'asharif@google.com (Ahmad Sharif)'
+
+import argparse
+import getpass
+import os
+import pwd
+import sys
+
+from cros_utils import command_executer
+from cros_utils import logger
+from cros_utils import misc
+
+
+class MountPoint(object):
+ """Mount point class"""
+
+ def __init__(self, external_dir, mount_dir, owner, options=None):
+ self.external_dir = os.path.realpath(external_dir)
+ self.mount_dir = os.path.realpath(mount_dir)
+ self.owner = owner
+ self.options = options
+
+ def CreateAndOwnDir(self, dir_name):
+ retv = 0
+ if not os.path.exists(dir_name):
+ command = 'mkdir -p ' + dir_name
+ command += ' || sudo mkdir -p ' + dir_name
+ retv = command_executer.GetCommandExecuter().RunCommand(command)
+ if retv != 0:
+ return retv
+ pw = pwd.getpwnam(self.owner)
+ if os.stat(dir_name).st_uid != pw.pw_uid:
+ command = 'sudo chown -f ' + self.owner + ' ' + dir_name
+ retv = command_executer.GetCommandExecuter().RunCommand(command)
+ return retv
+
+ def DoMount(self):
+ ce = command_executer.GetCommandExecuter()
+ mount_signature = '%s on %s' % (self.external_dir, self.mount_dir)
+ command = 'mount'
+ retv, out, _ = ce.RunCommandWOutput(command)
+ if mount_signature not in out:
+ retv = self.CreateAndOwnDir(self.mount_dir)
+ logger.GetLogger().LogFatalIf(retv, 'Cannot create mount_dir!')
+ retv = self.CreateAndOwnDir(self.external_dir)
+ logger.GetLogger().LogFatalIf(retv, 'Cannot create external_dir!')
+ retv = self.MountDir()
+ logger.GetLogger().LogFatalIf(retv, 'Cannot mount!')
+ return retv
+ else:
+ return 0
+
+ def UnMount(self):
+ ce = command_executer.GetCommandExecuter()
+ return ce.RunCommand('sudo umount %s' % self.mount_dir)
+
+ def MountDir(self):
+ command = 'sudo mount --bind ' + self.external_dir + ' ' + self.mount_dir
+ if self.options == 'ro':
+ command += ' && sudo mount --bind -oremount,ro ' + self.mount_dir
+ retv = command_executer.GetCommandExecuter().RunCommand(command)
+ return retv
+
+ def __str__(self):
+ ret = ''
+ ret += self.external_dir + '\n'
+ ret += self.mount_dir + '\n'
+ if self.owner:
+ ret += self.owner + '\n'
+ if self.options:
+ ret += self.options + '\n'
+ return ret
+
+
+def Main(argv, return_output=False):
+ """The main function."""
+
+ parser = argparse.ArgumentParser()
+ parser.add_argument('-c',
+ '--chromeos_root',
+ dest='chromeos_root',
+ default='../..',
+ help='ChromeOS root checkout directory.')
+ parser.add_argument('-t',
+ '--toolchain_root',
+ dest='toolchain_root',
+ help='Toolchain root directory.')
+ parser.add_argument('-o',
+ '--output',
+ dest='output',
+ help='Toolchain output directory')
+ parser.add_argument('--sudo',
+ dest='sudo',
+ action='store_true',
+ default=False,
+ help='Run the command with sudo.')
+ parser.add_argument('-r',
+ '--third_party',
+ dest='third_party',
+ help='The third_party directory to mount.')
+ parser.add_argument('-m',
+ '--other_mounts',
+ dest='other_mounts',
+ help='Other mount points in the form: '
+ 'dir:mounted_dir:options')
+ parser.add_argument('-s',
+ '--mount-scripts-only',
+ dest='mount_scripts_only',
+ action='store_true',
+ default=False,
+ help='Mount only the scripts dir, and not the sources.')
+ parser.add_argument('passthrough_argv', nargs='*',
+ help='Command to be executed inside the chroot.')
+
+ options = parser.parse_args(argv)
+
+ chromeos_root = options.chromeos_root
+
+ chromeos_root = os.path.expanduser(chromeos_root)
+ if options.toolchain_root:
+ options.toolchain_root = os.path.expanduser(options.toolchain_root)
+
+ chromeos_root = os.path.abspath(chromeos_root)
+
+ tc_dirs = []
+ if options.toolchain_root is None or options.mount_scripts_only:
+ m = 'toolchain_root not specified. Will not mount toolchain dirs.'
+ logger.GetLogger().LogWarning(m)
+ else:
+ tc_dirs = [options.toolchain_root + '/google_vendor_src_branch/gcc',
+ options.toolchain_root + '/google_vendor_src_branch/binutils']
+
+ for tc_dir in tc_dirs:
+ if not os.path.exists(tc_dir):
+ logger.GetLogger().LogError('toolchain path ' + tc_dir +
+ ' does not exist!')
+ parser.print_help()
+ sys.exit(1)
+
+ if not os.path.exists(chromeos_root):
+ logger.GetLogger().LogError('chromeos_root ' + options.chromeos_root +
+ ' does not exist!')
+ parser.print_help()
+ sys.exit(1)
+
+ if not os.path.exists(chromeos_root + '/src/scripts/build_packages'):
+ logger.GetLogger(
+ ).LogError(options.chromeos_root + '/src/scripts/build_packages'
+ ' not found!')
+ parser.print_help()
+ sys.exit(1)
+
+ version_dir = os.path.realpath(os.path.expanduser(os.path.dirname(__file__)))
+
+ mounted_tc_root = '/usr/local/toolchain_root'
+ full_mounted_tc_root = chromeos_root + '/chroot/' + mounted_tc_root
+ full_mounted_tc_root = os.path.abspath(full_mounted_tc_root)
+
+ mount_points = []
+ for tc_dir in tc_dirs:
+ last_dir = misc.GetRoot(tc_dir)[1]
+ mount_point = MountPoint(tc_dir, full_mounted_tc_root + '/' + last_dir,
+ getpass.getuser(), 'ro')
+ mount_points.append(mount_point)
+
+ # Add the third_party mount point if it exists
+ if options.third_party:
+ third_party_dir = options.third_party
+ logger.GetLogger().LogFatalIf(
+ not os.path.isdir(third_party_dir),
+ '--third_party option is not a valid dir.')
+ else:
+ third_party_dir = os.path.abspath('%s/../../../third_party' %
+ os.path.dirname(__file__))
+
+ if os.path.isdir(third_party_dir):
+ mount_point = MountPoint(third_party_dir, ('%s/%s' % (
+ full_mounted_tc_root, os.path.basename(third_party_dir))),
+ getpass.getuser())
+ mount_points.append(mount_point)
+
+ output = options.output
+ if output is None and options.toolchain_root:
+ # Mount the output directory at /usr/local/toolchain_root/output
+ output = options.toolchain_root + '/output'
+
+ if output:
+ mount_points.append(MountPoint(output, full_mounted_tc_root + '/output',
+ getpass.getuser()))
+
+ # Mount the other mount points
+ mount_points += CreateMountPointsFromString(options.other_mounts,
+ chromeos_root + '/chroot/')
+
+ last_dir = misc.GetRoot(version_dir)[1]
+
+ # Mount the version dir (v14) at /usr/local/toolchain_root/v14
+ mount_point = MountPoint(version_dir, full_mounted_tc_root + '/' + last_dir,
+ getpass.getuser())
+ mount_points.append(mount_point)
+
+ for mount_point in mount_points:
+ retv = mount_point.DoMount()
+ if retv != 0:
+ return retv
+
+ # Finally, create the symlink to build-gcc.
+ command = 'sudo chown ' + getpass.getuser() + ' ' + full_mounted_tc_root
+ retv = command_executer.GetCommandExecuter().RunCommand(command)
+
+ try:
+ CreateSymlink(last_dir + '/build-gcc', full_mounted_tc_root + '/build-gcc')
+ CreateSymlink(last_dir + '/build-binutils',
+ full_mounted_tc_root + '/build-binutils')
+ except Exception as e:
+ logger.GetLogger().LogError(str(e))
+
+ # Now call cros_sdk --enter with the rest of the arguments.
+ command = 'cd %s/src/scripts && cros_sdk --enter' % chromeos_root
+
+ if len(options.passthrough_argv) > 1:
+ inner_command = ' '.join(options.passthrough_argv[1:])
+ inner_command = inner_command.strip()
+ if inner_command.startswith('-- '):
+ inner_command = inner_command[3:]
+ command_file = 'tc_enter_chroot.cmd'
+ command_file_path = chromeos_root + '/src/scripts/' + command_file
+ retv = command_executer.GetCommandExecuter().RunCommand('sudo rm -f ' +
+ command_file_path)
+ if retv != 0:
+ return retv
+ f = open(command_file_path, 'w')
+ f.write(inner_command)
+ f.close()
+ logger.GetLogger().LogCmd(inner_command)
+ retv = command_executer.GetCommandExecuter().RunCommand('chmod +x ' +
+ command_file_path)
+ if retv != 0:
+ return retv
+
+ if options.sudo:
+ command += ' sudo ./' + command_file
+ else:
+ command += ' ./' + command_file
+ retv = command_executer.GetCommandExecuter().RunCommandGeneric(
+ command, return_output)
+ return retv
+ else:
+ os.chdir('%s/src/scripts' % chromeos_root)
+ ce = command_executer.GetCommandExecuter()
+ _, out, _ = ce.RunCommandWOutput('which cros_sdk')
+ cros_sdk_binary = out.split()[0]
+ return os.execv(cros_sdk_binary, ['', '--enter'])
+
+
+def CreateMountPointsFromString(mount_strings, chroot_dir):
+ # String has options in the form dir:mount:options
+ mount_points = []
+ if not mount_strings:
+ return mount_points
+ mount_list = mount_strings.split()
+ for mount_string in mount_list:
+ mount_values = mount_string.split(':')
+ external_dir = mount_values[0]
+ mount_dir = mount_values[1]
+ if len(mount_values) > 2:
+ options = mount_values[2]
+ else:
+ options = None
+ mount_point = MountPoint(external_dir, chroot_dir + '/' + mount_dir,
+ getpass.getuser(), options)
+ mount_points.append(mount_point)
+ return mount_points
+
+
+def CreateSymlink(target, link_name):
+ logger.GetLogger().LogFatalIf(
+ target.startswith('/'), "Can't create symlink to absolute path!")
+ real_from_file = misc.GetRoot(link_name)[0] + '/' + target
+ if os.path.realpath(real_from_file) != os.path.realpath(link_name):
+ if os.path.exists(link_name):
+ command = 'rm -rf ' + link_name
+ command_executer.GetCommandExecuter().RunCommand(command)
+ os.symlink(target, link_name)
+
+
+if __name__ == '__main__':
+ retval = Main(sys.argv)
+ sys.exit(retval)
diff --git a/test_gcc_dejagnu.py b/test_gcc_dejagnu.py
new file mode 100755
index 00000000..41304a03
--- /dev/null
+++ b/test_gcc_dejagnu.py
@@ -0,0 +1,218 @@
+#!/usr/bin/python2
+#
+# Copyright 2010 Google Inc. All Rights Reserved.
+"""Script adapter used by automation client for testing dejagnu.
+
+ This is not intended to be run on command line.
+ To kick off a single dejagnu run, use ./dejagnu/run_dejagnu.py
+"""
+
+from __future__ import print_function
+
+__author__ = 'shenhan@google.com (Han Shen)'
+
+import argparse
+import sys
+import setup_chromeos
+import build_tc
+
+from dejagnu import run_dejagnu
+from cros_utils import command_executer
+from cros_utils import email_sender
+
+
+class DejagnuAdapter(object):
+ """Dejagnu Adapter class"""
+
+ # TODO(shenhan): move these to constants.py.
+ _CHROMIUM_GCC_GIT = ('https://chromium.googlesource.com/'
+ 'chromiumos/third_party/gcc.git')
+ _CHROMIUM_GCC_BRANCH = 'gcc.gnu.org/branches/google/gcc-4_7-mobile'
+
+ _cmd_exec = command_executer.GetCommandExecuter()
+
+ def __init__(self, board, remote, gcc_dir, chromeos_root, runtestflags,
+ cleanup):
+ self._board = board
+ self._remote = remote
+ self._gcc_dir = gcc_dir
+ self._chromeos_root = chromeos_root
+ self._runtestflags = runtestflags
+ self._cleanup = cleanup
+
+ def SetupChromeOS(self):
+ cmd = [setup_chromeos.__file__, '--dir=' + self._chromeos_root,
+ '--minilayout', '--jobs=8']
+ ret = setup_chromeos.Main(cmd)
+ if ret:
+ raise RuntimeError('Failed to checkout chromeos')
+ ## Do cros_sdk and setup_board, otherwise build_tc in next step will fail.
+ cmd = 'cd {0} && cros_sdk --download'.format(self._chromeos_root)
+ ret = self._cmd_exec.RunCommand(cmd, terminated_timeout=9000)
+ if ret:
+ raise RuntimeError('Failed to create chroot.')
+
+ def SetupBoard(self):
+ cmd = './setup_board --board=' + self._board
+ ret = self._cmd_exec.ChrootRunCommand(self._chromeos_root,
+ cmd,
+ terminated_timeout=4000)
+ if ret:
+ raise RuntimeError('Failed to setup board.')
+
+ def CheckoutGCC(self):
+ cmd = 'git clone {0} {1} && cd {1} && git checkout {2}'.format(
+ self._CHROMIUM_GCC_GIT, self._gcc_dir, self._CHROMIUM_GCC_BRANCH)
+
+ ret = self._cmd_exec.RunCommand(cmd, terminated_timeout=300)
+ if ret:
+ raise RuntimeError('Failed to checkout gcc.')
+ ## Handle build_tc bug.
+ cmd = ('touch {0}/gcc/config/arm/arm-tune.md ' + \
+ '{0}/gcc/config/arm/arm-tables.opt').format(self._gcc_dir)
+ ret = self._cmd_exec.RunCommand(cmd)
+
+ def BuildGCC(self):
+ build_gcc_args = [build_tc.__file__, '--board=' + self._board,
+ '--chromeos_root=' + self._chromeos_root,
+ '--gcc_dir=' + self._gcc_dir]
+ ret = build_tc.Main(build_gcc_args)
+ if ret:
+ raise RuntimeError('Building gcc failed.')
+
+ def CheckGCC(self):
+ args = [run_dejagnu.__file__, '--board=' + self._board,
+ '--chromeos_root=' + self._chromeos_root,
+ '--mount=' + self._gcc_dir, '--remote=' + self._remote]
+ if self._cleanup:
+ args.append('--cleanup=' + self._cleanup)
+ if self._runtestflags:
+ args.append('--flags=' + self._runtestflags)
+ return run_dejagnu.Main(args)
+
+
+# Parse the output log to determine how many failures we have.
+# Return -1 if parse output log failed.
+def GetNumNewFailures(input_str):
+ if not input_str:
+ return 0
+ start_counting = False
+ n_failures = 0
+ for l in input_str.splitlines():
+ print(l)
+ if not start_counting and 'Build results not in the manifest' in l:
+ start_counting = True
+ elif start_counting and l and (
+ l.find('UNRESOLVED:') == 0 or l.find('FAIL:') == 0 or
+ l.find('XFAIL:') == 0 or l.find('XPASS:') == 0):
+ n_failures = n_failures + 1
+ if not start_counting:
+ return -1
+ return n_failures
+
+
+# Do not throw any exception in this function!
+def EmailResult(result):
+ email_to = ['c-compiler-chrome@google.com']
+ if len(result) == 4:
+ subject = 'Job failed: dejagnu test didn\'t finish'
+ email_text = 'Job failed prematurely, check exception below.\n' + \
+ result[3]
+ elif result[0]:
+ subject = 'Job finished: dejagnu test failed'
+ num_new_failures = GetNumNewFailures(result[1])
+ if num_new_failures >= 0:
+ summary = '{0} new fail(s), check log below.'.format(num_new_failures)
+ else:
+ summary = 'At least 1 new fail found, check log below.'
+ email_text = summary + \
+ ('\nStdout ====\n'
+ '{0}\n'
+ '\nStderr ===\n'
+ '{1}\n').format(result[1], result[2])
+ else:
+ subject = 'Job finished: dejagnu test passed'
+ email_text = ('Cool! No new fail found.\n'
+ '\nStdout ====\n'
+ '{0}\n'
+ '\nStderr ====\n'
+ '{1}\n').format(result[1], result[2])
+
+ try:
+ email_sender.EmailSender().SendEmail(email_to, subject, email_text)
+ print('Email sent.')
+ except Exception as e:
+ # Do not propagate this email sending exception, you want to email an
+ # email exception? Just log it on console.
+ print('Sending email failed - {0}'
+ 'Subject: {1}'
+ 'Text: {2}').format(
+ str(e), subject, email_text)
+
+
+def ProcessArguments(argv):
+ """Processing script arguments."""
+ parser = argparse.ArgumentParser(
+ description=('This script is used by nightly client to test gcc. '
+ 'DO NOT run it unless you know what you are doing.'),
+ usage='test_gcc_dejagnu.py options')
+ parser.add_argument('-b',
+ '--board',
+ dest='board',
+ help=('Required. Specify board type. For example '
+ '\'lumpy\' and \'daisy\''))
+ parser.add_argument('-r',
+ '--remote',
+ dest='remote',
+ help=('Required. Specify remote board address'))
+ parser.add_argument('-g',
+ '--gcc_dir',
+ dest='gcc_dir',
+ default='gcc.live',
+ help=('Optional. Specify gcc checkout directory.'))
+ parser.add_argument('-c',
+ '--chromeos_root',
+ dest='chromeos_root',
+ default='chromeos.live',
+ help=('Optional. Specify chromeos checkout directory.'))
+ parser.add_argument('--cleanup',
+ dest='cleanup',
+ default=None,
+ help=('Optional. Do cleanup after the test.'))
+ parser.add_argument('--runtestflags',
+ dest='runtestflags',
+ default=None,
+ help=('Optional. Options to RUNTESTFLAGS env var '
+ 'while invoking make check. '
+ '(Mainly used for testing purpose.)'))
+
+ options = parser.parse_args(argv[1:])
+
+ if not options.board or not options.remote:
+ raise SyntaxError('--board and --remote are mandatory options.')
+
+ return options
+
+
+def Main(argv):
+ opt = ProcessArguments(argv)
+ adapter = DejagnuAdapter(opt.board, opt.remote, opt.gcc_dir,
+ opt.chromeos_root, opt.runtestflags, opt.cleanup)
+ try:
+ adapter.SetupChromeOS()
+ adapter.SetupBoard()
+ adapter.CheckoutGCC()
+ adapter.BuildGCC()
+ ret = adapter.CheckGCC()
+ except Exception as e:
+ print(e)
+ ret = (1, '', '', str(e))
+ finally:
+ EmailResult(ret)
+
+ return ret
+
+
+if __name__ == '__main__':
+ retval = Main(sys.argv)
+ sys.exit(retval[0])
diff --git a/test_gdb_dejagnu.py b/test_gdb_dejagnu.py
new file mode 100755
index 00000000..4f44527f
--- /dev/null
+++ b/test_gdb_dejagnu.py
@@ -0,0 +1,163 @@
+#!/usr/bin/python2
+"""Script adapter used by automation client for testing dejagnu.
+
+ This is not intended to be run on command line.
+ To kick off a single dejagnu run, use ./dejagnu/run_dejagnu.py
+"""
+
+from __future__ import print_function
+
+import argparse
+import sys
+import setup_chromeos
+
+from dejagnu import gdb_dejagnu
+from cros_utils import command_executer
+from cros_utils import email_sender
+
+
+class DejagnuAdapter(object):
+ """Dejagnu Adapter class."""
+
+ def __init__(self, board, remote, gdb_dir, chromeos_root, cleanup):
+ self._board = board
+ self._remote = remote
+ self._gdb_dir = gdb_dir
+ self._chromeos_root = chromeos_root
+ self._cleanup = cleanup
+ self._cmd_exec = command_executer.GetCommandExecuter()
+
+ def SetupChromeOS(self):
+ cmd = [setup_chromeos.__file__, '--dir=' + self._chromeos_root,
+ '--minilayout', '--jobs=8']
+ ret = setup_chromeos.Main(cmd)
+ if ret:
+ raise RuntimeError('Failed to checkout chromeos')
+ ## Do cros_sdk and setup_board, otherwise build_tc in next step will fail.
+ cmd = 'cd {0} && cros_sdk --download'.format(self._chromeos_root)
+ ret = self._cmd_exec.RunCommand(cmd, terminated_timeout=9000)
+ if ret:
+ raise RuntimeError('Failed to create chroot.')
+
+ def SetupBoard(self):
+ cmd = './setup_board --board=' + self._board
+ ret = self._cmd_exec.ChrootRunCommand(self._chromeos_root,
+ cmd,
+ terminated_timeout=4000)
+ if ret:
+ raise RuntimeError('Failed to setup board.')
+
+ def CheckGDB(self):
+ args = [gdb_dejagnu.__file__, '--board=' + self._board,
+ '--chromeos_root=' + self._chromeos_root,
+ '--mount=' + self._gdb_dir, '--remote=' + self._remote]
+ if self._cleanup:
+ args.append('--cleanup=' + self._cleanup)
+ return gdb_dejagnu.Main(args)
+
+
+# Parse the output log to determine how many failures we have.
+# Return -1 if parse output log failed.
+def GetNumNewFailures(result):
+ if not result:
+ return 0
+ return len(result)
+
+
+# Do not throw any exception in this function!
+def EmailResult(result):
+ email_to = ['yunlian@google.com']
+ if len(result) == 4:
+ subject = 'Job failed: dejagnu test didn\'t finish'
+ email_text = (
+ 'Job failed prematurely, check exception below.\n' + result[3])
+ elif result[0]:
+ subject = 'Job finished: dejagnu test failed'
+ num_new_failures = GetNumNewFailures(result[1])
+ if num_new_failures >= 0:
+ summary = '{0} new fail(s), check log below.'.format(num_new_failures)
+ else:
+ summary = 'At least 1 new fail found, check log below.'
+ email_text = (summary + ('\nStdout ====\n'
+ '{0}\n'
+ '\nStderr ===\n'
+ '{1}\n').format(result[1], result[2]))
+ else:
+ subject = 'Job finished: dejagnu test passed'
+ email_text = ('Cool! No new fail found.\n'
+ '\nStdout ====\n'
+ '{0}\n'
+ '\nStderr ====\n'
+ '{1}\n').format(result[1], result[2])
+
+ try:
+ email_sender.EmailSender().SendEmail(email_to, subject, email_text)
+ print('Email sent.')
+ except Exception as e:
+ # Do not propagate this email sending exception, you want to email an
+ # email exception? Just log it on console.
+ print('Sending email failed - {0}'
+ 'Subject: {1}'
+ 'Text: {2}').format(
+ str(e), subject, email_text)
+
+
+def ProcessArguments(argv):
+ """Processing script arguments."""
+ parser = argparse.ArgumentParser(
+ description=('This script is used by nightly client to test gdb. '
+ 'DO NOT run it unless you know what you are doing.'),
+ usage='test_gdb_dejagnu.py options')
+ parser.add_argument('-b',
+ '--board',
+ dest='board',
+ help=('Required. Specify board type. For example '
+ '\'lumpy\' and \'daisy\''))
+ parser.add_argument('-r',
+ '--remote',
+ dest='remote',
+ help=('Required. Specify remote board address'))
+ parser.add_argument('-g',
+ '--gdb_dir',
+ dest='gdb_dir',
+ default='',
+ help=('Optional. Specify gdb checkout directory.'))
+ parser.add_argument('-c',
+ '--chromeos_root',
+ dest='chromeos_root',
+ default='chromeos.live',
+ help=('Optional. Specify chromeos checkout directory.'))
+ parser.add_argument('--cleanup',
+ dest='cleanup',
+ default=None,
+ help=('Optional. Do cleanup after the test.'))
+
+ options = parser.parse_args(argv)
+
+ if not options.board or not options.remote:
+ raise SyntaxError('--board and --remote are mandatory options.')
+
+ return options
+
+
+def Main(argv):
+ opt = ProcessArguments(argv)
+ print(opt)
+ adapter = DejagnuAdapter(opt.board, opt.remote, opt.gdb_dir,
+ opt.chromeos_root, opt.cleanup)
+ try:
+ adapter.SetupChromeOS()
+ adapter.SetupBoard()
+ ret = adapter.CheckGDB()
+ except Exception as e:
+ print(e)
+ ret = (1, '', '', str(e))
+ finally:
+ EmailResult(ret)
+
+ return ret
+
+
+if __name__ == '__main__':
+ retval = Main(sys.argv[1:])
+ sys.exit(retval[0])
diff --git a/test_toolchains.py b/test_toolchains.py
new file mode 100755
index 00000000..ecae6f48
--- /dev/null
+++ b/test_toolchains.py
@@ -0,0 +1,365 @@
+#!/usr/bin/python2
+
+# Script to test different toolchains against ChromeOS benchmarks.
+"""Toolchain team nightly performance test script (local builds)."""
+
+from __future__ import print_function
+
+import argparse
+import datetime
+import os
+import sys
+import build_chromeos
+import setup_chromeos
+import time
+from cros_utils import command_executer
+from cros_utils import misc
+from cros_utils import logger
+
+CROSTC_ROOT = '/usr/local/google/crostc'
+MAIL_PROGRAM = '~/var/bin/mail-sheriff'
+PENDING_ARCHIVES_DIR = os.path.join(CROSTC_ROOT, 'pending_archives')
+NIGHTLY_TESTS_DIR = os.path.join(CROSTC_ROOT, 'nightly_test_reports')
+
+
+class GCCConfig(object):
+ """GCC configuration class."""
+
+ def __init__(self, githash):
+ self.githash = githash
+
+
+class ToolchainConfig(object):
+ """Toolchain configuration class."""
+
+ def __init__(self, gcc_config=None):
+ self.gcc_config = gcc_config
+
+
+class ChromeOSCheckout(object):
+ """Main class for checking out, building and testing ChromeOS."""
+
+ def __init__(self, board, chromeos_root):
+ self._board = board
+ self._chromeos_root = chromeos_root
+ self._ce = command_executer.GetCommandExecuter()
+ self._l = logger.GetLogger()
+ self._build_num = None
+
+ def _DeleteChroot(self):
+ command = 'cd %s; cros_sdk --delete' % self._chromeos_root
+ return self._ce.RunCommand(command)
+
+ def _DeleteCcahe(self):
+ # crosbug.com/34956
+ command = 'sudo rm -rf %s' % os.path.join(self._chromeos_root, '.cache')
+ return self._ce.RunCommand(command)
+
+ def _GetBuildNumber(self):
+ """Get the build number of the ChromeOS image from the chroot.
+
+ This function assumes a ChromeOS image has been built in the chroot.
+ It translates the 'latest' symlink in the
+ <chroot>/src/build/images/<board> directory, to find the actual
+ ChromeOS build number for the image that was built. For example, if
+ src/build/image/lumpy/latest -> R37-5982.0.2014_06_23_0454-a1, then
+ This function would parse it out and assign 'R37-5982' to self._build_num.
+ This is used to determine the official, vanilla build to use for
+ comparison tests.
+ """
+ # Get the path to 'latest'
+ sym_path = os.path.join(
+ misc.GetImageDir(self._chromeos_root, self._board), 'latest')
+ # Translate the symlink to its 'real' path.
+ real_path = os.path.realpath(sym_path)
+ # Break up the path and get the last piece
+ # (e.g. 'R37-5982.0.2014_06_23_0454-a1"
+ path_pieces = real_path.split('/')
+ last_piece = path_pieces[-1]
+ # Break this piece into the image number + other pieces, and get the
+ # image number [ 'R37-5982', '0', '2014_06_23_0454-a1']
+ image_parts = last_piece.split('.')
+ self._build_num = image_parts[0]
+
+ def _BuildLabelName(self, config):
+ pieces = config.split('/')
+ compiler_version = pieces[-1]
+ label = compiler_version + '_tot_afdo'
+ return label
+
+ def _BuildAndImage(self, label=''):
+ if (not label or
+ not misc.DoesLabelExist(self._chromeos_root, self._board, label)):
+ build_chromeos_args = [
+ build_chromeos.__file__, '--chromeos_root=%s' % self._chromeos_root,
+ '--board=%s' % self._board, '--rebuild'
+ ]
+ if self._public:
+ build_chromeos_args.append('--env=USE=-chrome_internal')
+
+ ret = build_chromeos.Main(build_chromeos_args)
+ if ret != 0:
+ raise RuntimeError("Couldn't build ChromeOS!")
+
+ if not self._build_num:
+ self._GetBuildNumber()
+ # Check to see if we need to create the symbolic link for the vanilla
+ # image, and do so if appropriate.
+ if not misc.DoesLabelExist(self._chromeos_root, self._board, 'vanilla'):
+ build_name = '%s-release/%s.0.0' % (self._board, self._build_num)
+ full_vanilla_path = os.path.join(os.getcwd(), self._chromeos_root,
+ 'chroot/tmp', build_name)
+ misc.LabelLatestImage(self._chromeos_root, self._board, label,
+ full_vanilla_path)
+ else:
+ misc.LabelLatestImage(self._chromeos_root, self._board, label)
+ return label
+
+ def _SetupBoard(self, env_dict, usepkg_flag, clobber_flag):
+ env_string = misc.GetEnvStringFromDict(env_dict)
+ command = ('%s %s' % (env_string, misc.GetSetupBoardCommand(
+ self._board, usepkg=usepkg_flag, force=clobber_flag)))
+ ret = self._ce.ChrootRunCommand(self._chromeos_root, command)
+ error_str = "Could not setup board: '%s'" % command
+ assert ret == 0, error_str
+
+ def _UnInstallToolchain(self):
+ command = ('sudo CLEAN_DELAY=0 emerge -C cross-%s/gcc' %
+ misc.GetCtargetFromBoard(self._board, self._chromeos_root))
+ ret = self._ce.ChrootRunCommand(self._chromeos_root, command)
+ if ret != 0:
+ raise RuntimeError("Couldn't uninstall the toolchain!")
+
+ def _CheckoutChromeOS(self):
+ # TODO(asharif): Setup a fixed ChromeOS version (quarterly snapshot).
+ if not os.path.exists(self._chromeos_root):
+ setup_chromeos_args = ['--dir=%s' % self._chromeos_root]
+ if self._public:
+ setup_chromeos_args.append('--public')
+ ret = setup_chromeos.Main(setup_chromeos_args)
+ if ret != 0:
+ raise RuntimeError("Couldn't run setup_chromeos!")
+
+ def _BuildToolchain(self, config):
+ # Call setup_board for basic, vanilla setup.
+ self._SetupBoard({}, usepkg_flag=True, clobber_flag=False)
+ # Now uninstall the vanilla compiler and setup/build our custom
+ # compiler.
+ self._UnInstallToolchain()
+ envdict = {
+ 'USE': 'git_gcc',
+ 'GCC_GITHASH': config.gcc_config.githash,
+ 'EMERGE_DEFAULT_OPTS': '--exclude=gcc'
+ }
+ self._SetupBoard(envdict, usepkg_flag=False, clobber_flag=False)
+
+
+class ToolchainComparator(ChromeOSCheckout):
+ """Main class for running tests and generating reports."""
+
+ def __init__(self,
+ board,
+ remotes,
+ configs,
+ clean,
+ public,
+ force_mismatch,
+ noschedv2=False):
+ self._board = board
+ self._remotes = remotes
+ self._chromeos_root = 'chromeos'
+ self._configs = configs
+ self._clean = clean
+ self._public = public
+ self._force_mismatch = force_mismatch
+ self._ce = command_executer.GetCommandExecuter()
+ self._l = logger.GetLogger()
+ timestamp = datetime.datetime.strftime(datetime.datetime.now(),
+ '%Y-%m-%d_%H:%M:%S')
+ self._reports_dir = os.path.join(
+ NIGHTLY_TESTS_DIR,
+ '%s.%s' % (timestamp, board),)
+ self._noschedv2 = noschedv2
+ ChromeOSCheckout.__init__(self, board, self._chromeos_root)
+
+ def _FinishSetup(self):
+ # Get correct .boto file
+ current_dir = os.getcwd()
+ src = '/usr/local/google/home/mobiletc-prebuild/.boto'
+ dest = os.path.join(current_dir, self._chromeos_root,
+ 'src/private-overlays/chromeos-overlay/'
+ 'googlestorage_account.boto')
+ # Copy the file to the correct place
+ copy_cmd = 'cp %s %s' % (src, dest)
+ retv = self._ce.RunCommand(copy_cmd)
+ if retv != 0:
+ raise RuntimeError("Couldn't copy .boto file for google storage.")
+
+ # Fix protections on ssh key
+ command = ('chmod 600 /var/cache/chromeos-cache/distfiles/target'
+ '/chrome-src-internal/src/third_party/chromite/ssh_keys'
+ '/testing_rsa')
+ retv = self._ce.ChrootRunCommand(self._chromeos_root, command)
+ if retv != 0:
+ raise RuntimeError('chmod for testing_rsa failed')
+
+ def _TestLabels(self, labels):
+ experiment_file = 'toolchain_experiment.txt'
+ image_args = ''
+ if self._force_mismatch:
+ image_args = '--force-mismatch'
+ experiment_header = """
+ board: %s
+ remote: %s
+ retries: 1
+ """ % (self._board, self._remotes)
+ experiment_tests = """
+ benchmark: all_toolchain_perf {
+ suite: telemetry_Crosperf
+ iterations: 3
+ }
+ """
+
+ with open(experiment_file, 'w') as f:
+ f.write(experiment_header)
+ f.write(experiment_tests)
+ for label in labels:
+ # TODO(asharif): Fix crosperf so it accepts labels with symbols
+ crosperf_label = label
+ crosperf_label = crosperf_label.replace('-', '_')
+ crosperf_label = crosperf_label.replace('+', '_')
+ crosperf_label = crosperf_label.replace('.', '')
+
+ # Use the official build instead of building vanilla ourselves.
+ if label == 'vanilla':
+ build_name = '%s-release/%s.0.0' % (self._board, self._build_num)
+
+ # Now add 'official build' to test file.
+ official_image = """
+ official_image {
+ chromeos_root: %s
+ build: %s
+ }
+ """ % (self._chromeos_root, build_name)
+ f.write(official_image)
+
+ else:
+ experiment_image = """
+ %s {
+ chromeos_image: %s
+ image_args: %s
+ }
+ """ % (crosperf_label, os.path.join(
+ misc.GetImageDir(self._chromeos_root, self._board), label,
+ 'chromiumos_test_image.bin'), image_args)
+ f.write(experiment_image)
+
+ crosperf = os.path.join(os.path.dirname(__file__), 'crosperf', 'crosperf')
+ noschedv2_opts = '--noschedv2' if self._noschedv2 else ''
+ command = ('{crosperf} --no_email=True --results_dir={r_dir} '
+ '--json_report=True {noschedv2_opts} {exp_file}').format(
+ crosperf=crosperf,
+ r_dir=self._reports_dir,
+ noschedv2_opts=noschedv2_opts,
+ exp_file=experiment_file)
+
+ ret = self._ce.RunCommand(command)
+ if ret != 0:
+ raise RuntimeError('Crosperf execution error!')
+ else:
+ # Copy json report to pending archives directory.
+ command = 'cp %s/*.json %s/.' % (self._reports_dir, PENDING_ARCHIVES_DIR)
+ ret = self._ce.RunCommand(command)
+ return
+
+ def _SendEmail(self):
+ """Find email msesage generated by crosperf and send it."""
+ filename = os.path.join(self._reports_dir, 'msg_body.html')
+ if (os.path.exists(filename) and
+ os.path.exists(os.path.expanduser(MAIL_PROGRAM))):
+ command = ('cat %s | %s -s "Nightly test results, %s" -team -html' %
+ (filename, MAIL_PROGRAM, self._board))
+ self._ce.RunCommand(command)
+
+ def DoAll(self):
+ self._CheckoutChromeOS()
+ labels = []
+ labels.append('vanilla')
+ for config in self._configs:
+ label = self._BuildLabelName(config.gcc_config.githash)
+ if not misc.DoesLabelExist(self._chromeos_root, self._board, label):
+ self._BuildToolchain(config)
+ label = self._BuildAndImage(label)
+ labels.append(label)
+ self._FinishSetup()
+ self._TestLabels(labels)
+ self._SendEmail()
+ if self._clean:
+ ret = self._DeleteChroot()
+ if ret != 0:
+ return ret
+ ret = self._DeleteCcahe()
+ if ret != 0:
+ return ret
+ return 0
+
+
+def Main(argv):
+ """The main function."""
+ # Common initializations
+ ### command_executer.InitCommandExecuter(True)
+ command_executer.InitCommandExecuter()
+ parser = argparse.ArgumentParser()
+ parser.add_argument(
+ '--remote', dest='remote', help='Remote machines to run tests on.')
+ parser.add_argument(
+ '--board', dest='board', default='x86-alex', help='The target board.')
+ parser.add_argument(
+ '--githashes',
+ dest='githashes',
+ default='master',
+ help='The gcc githashes to test.')
+ parser.add_argument(
+ '--clean',
+ dest='clean',
+ default=False,
+ action='store_true',
+ help='Clean the chroot after testing.')
+ parser.add_argument(
+ '--public',
+ dest='public',
+ default=False,
+ action='store_true',
+ help='Use the public checkout/build.')
+ parser.add_argument(
+ '--force-mismatch',
+ dest='force_mismatch',
+ default='',
+ help='Force the image regardless of board mismatch')
+ parser.add_argument(
+ '--noschedv2',
+ dest='noschedv2',
+ action='store_true',
+ default=False,
+ help='Pass --noschedv2 to crosperf.')
+ options = parser.parse_args(argv)
+ if not options.board:
+ print('Please give a board.')
+ return 1
+ if not options.remote:
+ print('Please give at least one remote machine.')
+ return 1
+ toolchain_configs = []
+ for githash in options.githashes.split(','):
+ gcc_config = GCCConfig(githash=githash)
+ toolchain_config = ToolchainConfig(gcc_config=gcc_config)
+ toolchain_configs.append(toolchain_config)
+ fc = ToolchainComparator(options.board, options.remote, toolchain_configs,
+ options.clean, options.public,
+ options.force_mismatch, options.noschedv2)
+ return fc.DoAll()
+
+
+if __name__ == '__main__':
+ retval = Main(sys.argv[1:])
+ sys.exit(retval)
diff --git a/toolchain_utils_githooks/pre-push b/toolchain_utils_githooks/pre-push
new file mode 100755
index 00000000..eef8a09a
--- /dev/null
+++ b/toolchain_utils_githooks/pre-push
@@ -0,0 +1,9 @@
+#!/bin/bash
+#
+# Copyright (c) 2016 Google Inc.
+#
+
+# Just execute our custom pre-push script.
+# Do this trick so that this file does not need to be updated each time
+# we modify our pre-push script
+exec ./toolchain_utils_githooks/pre-push.real "$@"
diff --git a/toolchain_utils_githooks/pre-push.real b/toolchain_utils_githooks/pre-push.real
new file mode 100755
index 00000000..0f6856ee
--- /dev/null
+++ b/toolchain_utils_githooks/pre-push.real
@@ -0,0 +1,71 @@
+#!/bin/bash
+#
+# Copyright (c) 2015 Google Inc.
+#
+# This is a pre-push hook that does the following before uploading a
+# CL for review:
+# 1) check that python sources have been formatted with pyformat.
+# 2) allows the user to run the unit tests.
+
+# This redirects stdin. Make sure to run after stdin has been read.
+run_UnitTests() {
+ save_dir=$(pwd)
+ status=0
+ valid=0
+
+ # Make sure we can read the stdin from terminal
+ exec < /dev/tty
+
+ while [[ $valid -eq 0 ]] ; do
+ read -p "Run unit tests? [y/n] " choice
+ case "$choice" in
+ n|N ) valid=1 ;;
+ y|Y ) valid=1; cd crosperf; ./run_tests.sh; status=$? ;
+ cd $save_dir;;
+ * ) echo "Must choose y or n."
+ esac
+ done
+ if [[ $status -ne 0 ]]; then
+ exit $status
+ fi
+}
+
+run_PyFormat() {
+ pyformat="./bin/tc_pyformat"
+ range=$1
+ files=$(git show --pretty="format:" --name-only $range)
+ for f in $files; do
+ [[ $f == *.py ]] || continue
+ # File could have been removed as part of the commit.
+ [[ -e $f ]] || continue
+ diffs=$($pyformat -d $f)
+ if [[ $? -ne 0 ]]; then
+ echo "Error: $pyformat $f returned with error code $?"
+ exit 1
+ fi
+ if [[ -n "$diffs" ]]; then
+ echo -e "Error: $f is not formatted correctly. Run $pyformat -i $f\n"
+ echo -e "diffs:\n$diffs\n"
+ exit 2
+ fi
+ done
+}
+
+z40=0000000000000000000000000000000000000000
+
+while IFS=' ' read local_ref local_sha remote_ref remote_sha; do
+ if [[ "$local_sha" != $z40 ]]; then
+ if [[ "$remote_sha" == $z40 ]]; then
+ # New branch, examine commit on top of branch.
+ range="$local_sha"
+ else
+ # Update to existing branch, examine new commits
+ range="$remote_sha..$local_sha"
+ fi
+ run_PyFormat $range
+ fi
+done
+
+run_UnitTests
+
+exit 0
diff --git a/update_telemetry_defaults.py b/update_telemetry_defaults.py
new file mode 100755
index 00000000..9ee7d8b0
--- /dev/null
+++ b/update_telemetry_defaults.py
@@ -0,0 +1,203 @@
+#!/usr/bin/python2
+#
+# Copyright 2013 Google Inc. All Rights Reserved.
+"""Script to maintain the Telemetry benchmark default results file.
+
+This script allows the user to see and update the set of default
+results to be used in generating reports from running the Telemetry
+benchmarks.
+
+"""
+
+from __future__ import print_function
+
+__author__ = 'cmtice@google.com (Caroline Tice)'
+
+import os
+import sys
+import json
+
+from cros_utils import misc
+
+Defaults = {}
+
+
+class TelemetryDefaults(object):
+ """Class for handling telemetry default return result fields."""
+
+ DEFAULTS_FILE_NAME = 'crosperf/default-telemetry-results.json'
+
+ def __init__(self):
+ # Get the Crosperf directory; that is where the defaults
+ # file should be.
+ dirname, __ = misc.GetRoot(__file__)
+ fullname = os.path.join(dirname, self.DEFAULTS_FILE_NAME)
+ self._filename = fullname
+ self._defaults = {}
+
+ def ReadDefaultsFile(self):
+ if os.path.exists(self._filename):
+ with open(self._filename, 'r') as fp:
+ self._defaults = json.load(fp)
+
+ def WriteDefaultsFile(self):
+ with open(self._filename, 'w') as fp:
+ json.dump(self._defaults, fp, indent=2)
+
+ def ListCurrentDefaults(self, benchmark=all):
+ # Show user current defaults. By default, show all. The user
+ # can specify the name of a particular benchmark to see only that
+ # benchmark's default values.
+ if len(self._defaults) == 0:
+ print('The benchmark default results are currently empty.')
+ if benchmark == all:
+ for b in self._defaults.keys():
+ results = self._defaults[b]
+ out_str = b + ' : '
+ for r in results:
+ out_str += r + ' '
+ print(out_str)
+ elif benchmark in self._defaults:
+ results = self._defaults[benchmark]
+ out_str = benchmark + ' : '
+ for r in results:
+ out_str += r + ' '
+ print(out_str)
+ else:
+ print("Error: Unrecognized benchmark '%s'" % benchmark)
+
+ def AddDefault(self, benchmark, result):
+ if benchmark in self._defaults:
+ resultList = self._defaults[benchmark]
+ else:
+ resultList = []
+ resultList.append(result)
+ self._defaults[benchmark] = resultList
+ print("Updated results set for '%s': " % benchmark)
+ print('%s : %s' % (benchmark, repr(self._defaults[benchmark])))
+
+ def RemoveDefault(self, benchmark, result):
+ if benchmark in self._defaults:
+ resultList = self._defaults[benchmark]
+ if result in resultList:
+ resultList.remove(result)
+ print("Updated results set for '%s': " % benchmark)
+ print('%s : %s' % (benchmark, repr(self._defaults[benchmark])))
+ else:
+ print("'%s' is not in '%s's default results list." %
+ (result, benchmark))
+ else:
+ print("Cannot find benchmark named '%s'" % benchmark)
+
+ def GetDefault(self):
+ return self._defaults
+
+ def RemoveBenchmark(self, benchmark):
+ if benchmark in self._defaults:
+ del self._defaults[benchmark]
+ print("Deleted benchmark '%s' from list of benchmarks." % benchmark)
+ else:
+ print("Cannot find benchmark named '%s'" % benchmark)
+
+ def RenameBenchmark(self, old_name, new_name):
+ if old_name in self._defaults:
+ resultsList = self._defaults[old_name]
+ del self._defaults[old_name]
+ self._defaults[new_name] = resultsList
+ print("Renamed '%s' to '%s'." % (old_name, new_name))
+ else:
+ print("Cannot find benchmark named '%s'" % old_name)
+
+ def UsageError(self, user_input):
+ # Print error message, then show options
+ print("Error:Invalid user input: '%s'" % user_input)
+ self.ShowOptions()
+
+ def ShowOptions(self):
+ print("""
+Below are the valid user options and their arguments, and an explanation
+of what each option does. You may either print out the full name of the
+option, or you may use the first letter of the option. Case (upper or
+lower) does not matter, for the command (case of the result name DOES matter):
+
+ (L)ist - List all current defaults
+ (L)ist <benchmark> - List current defaults for benchmark
+ (H)elp - Show this information.
+ (A)dd <benchmark> <result> - Add a default result for a particular
+ benchmark (appends to benchmark's list
+ of results, if list already exists)
+ (D)elete <benchmark> <result> - Delete a default result for a
+ particular benchmark
+ (R)emove <benchmark> - Remove an entire benchmark (and its
+ results)
+ (M)ove <old-benchmark> <new-benchmark> - Rename a benchmark
+ (Q)uit - Exit this program, saving changes.
+ (T)erminate - Exit this program; abandon changes.
+
+""")
+
+ def GetUserInput(self):
+ # Prompt user
+ print('Enter option> ')
+ # Process user input
+ inp = sys.stdin.readline()
+ inp = inp[:-1]
+ # inp = inp.lower()
+ words = inp.split(' ')
+ option = words[0]
+ option = option.lower()
+ if option == 'h' or option == 'help':
+ self.ShowOptions()
+ elif option == 'l' or option == 'list':
+ if len(words) == 1:
+ self.ListCurrentDefaults()
+ else:
+ self.ListCurrentDefaults(benchmark=words[1])
+ elif option == 'a' or option == 'add':
+ if len(words) < 3:
+ self.UsageError(inp)
+ else:
+ benchmark = words[1]
+ resultList = words[2:]
+ for r in resultList:
+ self.AddDefault(benchmark, r)
+ elif option == 'd' or option == 'delete':
+ if len(words) != 3:
+ self.UsageError(inp)
+ else:
+ benchmark = words[1]
+ result = words[2]
+ self.RemoveDefault(benchmark, result)
+ elif option == 'r' or option == 'remove':
+ if len(words) != 2:
+ self.UsageError(inp)
+ else:
+ benchmark = words[1]
+ self.RemoveBenchmark(benchmark)
+ elif option == 'm' or option == 'move':
+ if len(words) != 3:
+ self.UsageError(inp)
+ else:
+ old_name = words[1]
+ new_name = words[2]
+ self.RenameBenchmark(old_name, new_name)
+ elif option == 'q' or option == 'quit':
+ self.WriteDefaultsFile()
+
+ return (option == 'q' or option == 'quit' or option == 't' or
+ option == 'terminate')
+
+
+def Main():
+ defaults = TelemetryDefaults()
+ defaults.ReadDefaultsFile()
+ defaults.ShowOptions()
+ done = defaults.GetUserInput()
+ while not done:
+ done = defaults.GetUserInput()
+ return 0
+
+
+if __name__ == '__main__':
+ retval = Main()
+ sys.exit(retval)
diff --git a/user_activity_benchmarks/benchmark_metrics.py b/user_activity_benchmarks/benchmark_metrics.py
new file mode 100644
index 00000000..30ae31e0
--- /dev/null
+++ b/user_activity_benchmarks/benchmark_metrics.py
@@ -0,0 +1,306 @@
+# Copyright 2016 The Chromium OS Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+"""Computes the metrics for functions, Chrome OS components and benchmarks."""
+
+from collections import defaultdict
+
+
+def ComputeDistanceForFunction(child_functions_statistics_sample,
+ child_functions_statistics_reference):
+ """Computes the distance metric for a function.
+
+ Args:
+ child_functions_statistics_sample: A dict that has as a key the name of a
+ function and as a value the inclusive count fraction. The keys are
+ the child functions of a sample parent function.
+ child_functions_statistics_reference: A dict that has as a key the name of
+ a function and as a value the inclusive count fraction. The keys are
+ the child functions of a reference parent function.
+
+ Returns:
+ A float value representing the sum of inclusive count fraction
+ differences of pairs of common child functions. If a child function is
+ present in a single data set, then we consider the missing inclusive
+ count fraction as 0. This value describes the difference in behaviour
+ between a sample and the reference parent function.
+ """
+ # We initialize the distance with a small value to avoid the further
+ # division by zero.
+ distance = 1.0
+
+ for child_function, inclusive_count_fraction_reference in \
+ child_functions_statistics_reference.iteritems():
+ inclusive_count_fraction_sample = 0.0
+
+ if child_function in child_functions_statistics_sample:
+ inclusive_count_fraction_sample = \
+ child_functions_statistics_sample[child_function]
+ distance += \
+ abs(inclusive_count_fraction_sample -
+ inclusive_count_fraction_reference)
+
+ for child_function, inclusive_count_fraction_sample in \
+ child_functions_statistics_sample.iteritems():
+ if child_function not in child_functions_statistics_reference:
+ distance += inclusive_count_fraction_sample
+
+ return distance
+
+
+def ComputeScoreForFunction(distance, reference_fraction, sample_fraction):
+ """Computes the score for a function.
+
+ Args:
+ distance: A float value representing the difference in behaviour between
+ the sample and the reference function.
+ reference_fraction: A float value representing the inclusive count
+ fraction of the reference function.
+ sample_fraction: A float value representing the inclusive count
+ fraction of the sample function.
+
+ Returns:
+ A float value representing the score of the function.
+ """
+ return reference_fraction * sample_fraction / distance
+
+
+def ComputeMetricsForComponents(cwp_function_groups, function_metrics):
+ """Computes the metrics for a set of Chrome OS components.
+
+ For every Chrome OS group, we compute the number of functions matching the
+ group, the cumulative and average score, the cumulative and average distance
+ of all those functions. A function matches a group if the path of the file
+ containing its definition contains the common path describing the group.
+
+ Args:
+ cwp_function_groups: A dict having as a key the name of the group and as a
+ value a common path describing the group.
+ function_metrics: A dict having as a key the name of the function and the
+ name of the file where it is declared concatenated by a ',', and as a
+ value a tuple containing the distance and the score metrics.
+
+ Returns:
+ A dict containing as a key the name of the group and as a value a tuple
+ with the group file path, the number of functions matching the group,
+ the cumulative and average score, cumulative and average distance of all
+ those functions.
+ """
+ function_groups_metrics = defaultdict(lambda: (0, 0.0, 0.0, 0.0, 0.0))
+
+ for function_key, metric in function_metrics.iteritems():
+ _, function_file = function_key.split(',')
+
+ for group, common_path in cwp_function_groups:
+ if common_path not in function_file:
+ continue
+
+ function_distance = metric[0]
+ function_score = metric[1]
+ group_statistic = function_groups_metrics[group]
+
+ function_count = group_statistic[1] + 1
+ function_distance_cum = function_distance + group_statistic[2]
+ function_distance_avg = function_distance_cum / float(function_count)
+ function_score_cum = function_score + group_statistic[4]
+ function_score_avg = function_score_cum / float(function_count)
+
+ function_groups_metrics[group] = \
+ (common_path,
+ function_count,
+ function_distance_cum,
+ function_distance_avg,
+ function_score_cum,
+ function_score_avg)
+ break
+
+ return function_groups_metrics
+
+
+def ComputeMetricsForBenchmark(function_metrics):
+ function_count = len(function_metrics.keys())
+ distance_cum = 0.0
+ distance_avg = 0.0
+ score_cum = 0.0
+ score_avg = 0.0
+
+ for distance, score in function_metrics.values():
+ distance_cum += distance
+ score_cum += score
+
+ distance_avg = distance_cum / float(function_count)
+ score_avg = score_cum / float(function_count)
+ return function_count, distance_cum, distance_avg, score_cum, score_avg
+
+
+def ComputeFunctionCountForBenchmarkSet(set_function_metrics, cwp_functions,
+ metric_string):
+ """Computes the function count metric pair for the benchmark set.
+
+ For the function count metric, we count the unique functions covered by the
+ set of benchmarks. We compute the fraction of unique functions out
+ of the amount of CWP functions given.
+
+ We compute also the same metric pair for every group from the keys of the
+ set_function_metrics dict.
+
+ Args:
+ set_function_metrics: A list of dicts having as a key the name of a group
+ and as value a list of functions that match the given group.
+ cwp_functions: A dict having as a key the name of the groups and as a value
+ the list of CWP functions that match an individual group.
+ metric_string: A tuple of strings that will be mapped to the tuple of metric
+ values in the returned function group dict. This is done for convenience
+ for the JSON output.
+
+ Returns:
+ A tuple with the metric pair and a dict with the group names and values
+ of the metric pair. The first value of the metric pair represents the
+ function count and the second value the function count fraction.
+ The dict has as a key the name of the group and as a value a dict that
+ maps the metric_string to the values of the metric pair of the group.
+ """
+ cwp_functions_count = sum(len(functions)
+ for functions in cwp_functions.itervalues())
+ set_groups_functions = defaultdict(set)
+ for benchmark_function_metrics in set_function_metrics:
+ for group_name in benchmark_function_metrics:
+ set_groups_functions[group_name] |= \
+ set(benchmark_function_metrics[group_name])
+
+ set_groups_functions_count = {}
+ set_functions_count = 0
+ for group_name, functions \
+ in set_groups_functions.iteritems():
+ set_group_functions_count = len(functions)
+ if group_name in cwp_functions:
+ set_groups_functions_count[group_name] = {
+ metric_string[0]: set_group_functions_count,
+ metric_string[1]:
+ set_group_functions_count / float(len(cwp_functions[group_name]))}
+ else:
+ set_groups_functions_count[group_name] = \
+ {metric_string[0]: set_group_functions_count, metric_string[1]: 0.0}
+ set_functions_count += set_group_functions_count
+
+ set_functions_count_fraction = \
+ set_functions_count / float(cwp_functions_count)
+ return (set_functions_count, set_functions_count_fraction), \
+ set_groups_functions_count
+
+
+def ComputeDistanceForBenchmarkSet(set_function_metrics, cwp_functions,
+ metric_string):
+ """Computes the distance variation metric pair for the benchmark set.
+
+ For the distance variation metric, we compute the sum of the distance
+ variations of the functions covered by a set of benchmarks.
+ We define the distance variation as the difference between the distance
+ value of a functions and the ideal distance value (1.0).
+ If a function appears in multiple common functions files, we consider
+ only the minimum value. We compute also the distance variation per
+ function.
+
+ In addition, we compute also the same metric pair for every group from
+ the keys of the set_function_metrics dict.
+
+ Args:
+ set_function_metrics: A list of dicts having as a key the name of a group
+ and as value a list of functions that match the given group.
+ cwp_functions: A dict having as a key the name of the groups and as a value
+ the list of CWP functions that match an individual group.
+ metric_string: A tuple of strings that will be mapped to the tuple of metric
+ values in the returned function group dict. This is done for convenience
+ for the JSON output.
+
+ Returns:
+ A tuple with the metric pair and a dict with the group names and values
+ of the metric pair. The first value of the metric pair represents the
+ distance variation per function and the second value the distance variation.
+ The dict has as a key the name of the group and as a value a dict that
+ maps the metric_string to the values of the metric pair of the group.
+ """
+ set_unique_functions = defaultdict(lambda: defaultdict(lambda: float('inf')))
+ set_function_count = 0
+ total_distance_variation = 0.0
+ for benchmark_function_metrics in set_function_metrics:
+ for group_name in benchmark_function_metrics:
+ for function_key, metrics in \
+ benchmark_function_metrics[group_name].iteritems():
+ previous_distance = \
+ set_unique_functions[group_name][function_key]
+ min_distance = min(metrics[0], previous_distance)
+ set_unique_functions[group_name][function_key] = min_distance
+ groups_distance_variations = defaultdict(lambda: (0.0, 0.0))
+ for group_name, functions_distances in set_unique_functions.iteritems():
+ group_function_count = len(functions_distances)
+ group_distance_variation = \
+ sum(functions_distances.itervalues()) - float(group_function_count)
+ total_distance_variation += group_distance_variation
+ set_function_count += group_function_count
+ groups_distance_variations[group_name] = \
+ {metric_string[0]:
+ group_distance_variation / float(group_function_count),
+ metric_string[1]: group_distance_variation}
+
+ return (total_distance_variation / set_function_count,
+ total_distance_variation), groups_distance_variations
+
+
+def ComputeScoreForBenchmarkSet(set_function_metrics, cwp_functions,
+ metric_string):
+ """Computes the function count metric pair for the benchmark set.
+
+ For the score metric, we compute the sum of the scores of the functions
+ from a set of benchmarks. If a function appears in multiple common
+ functions files, we consider only the maximum value. We compute also the
+ fraction of this sum from the sum of all the scores of the functions from
+ the CWP data covering the given groups, in the ideal case (the ideal
+ score of a function is 1.0).
+
+ In addition, we compute the same metric pair for every group from the
+ keys of the set_function_metrics dict.
+
+ Args:
+ set_function_metrics: A list of dicts having as a key the name of a group
+ and as value a list of functions that match the given group.
+ cwp_functions: A dict having as a key the name of the groups and as a value
+ the list of CWP functions that match an individual group.
+ metric_string: A tuple of strings that will be mapped to the tuple of metric
+ values in the returned function group dict. This is done for convenience
+ for the JSON output.
+
+ Returns:
+ A tuple with the metric pair and a dict with the group names and values
+ of the metric pair. The first value of the pair is the fraction of the sum
+ of the scores from the ideal case and the second value represents the
+ sum of scores of the functions. The dict has as a key the name of the group
+ and as a value a dict that maps the metric_string to the values of the
+ metric pair of the group.
+ """
+ cwp_functions_count = sum(len(functions)
+ for functions in cwp_functions.itervalues())
+ set_unique_functions = defaultdict(lambda: defaultdict(lambda: 0.0))
+ total_score = 0.0
+
+ for benchmark_function_metrics in set_function_metrics:
+ for group_name in benchmark_function_metrics:
+ for function_key, metrics in \
+ benchmark_function_metrics[group_name].iteritems():
+ previous_score = \
+ set_unique_functions[group_name][function_key]
+ max_score = max(metrics[1], previous_score)
+ set_unique_functions[group_name][function_key] = max_score
+
+ groups_scores = defaultdict(lambda: (0.0, 0.0))
+
+ for group_name, function_scores in set_unique_functions.iteritems():
+ group_function_count = float(len(cwp_functions[group_name]))
+ group_score = sum(function_scores.itervalues())
+ total_score += group_score
+ groups_scores[group_name] = {
+ metric_string[0]: group_score / group_function_count,
+ metric_string[1]: group_score
+ }
+
+ return (total_score / cwp_functions_count, total_score), groups_scores
diff --git a/user_activity_benchmarks/benchmark_metrics_experiment.py b/user_activity_benchmarks/benchmark_metrics_experiment.py
new file mode 100755
index 00000000..e8152e74
--- /dev/null
+++ b/user_activity_benchmarks/benchmark_metrics_experiment.py
@@ -0,0 +1,233 @@
+#!/usr/bin/python2
+#
+# Copyright 2016 The Chromium OS Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+"""Runs an experiment with the benchmark metrics on a pair of CWP data sets.
+
+A data set should contain the files with the pairwise inclusive and the
+inclusive statistics. The pairwise inclusive file contains pairs of
+parent and child functions with their inclusive count fractions out of the
+total amount of inclusive count values and the files of the child functions.
+The inclusive file contains the functions with their inclusive count fraction
+out of the total amount of inclusive count values and the file name of the
+function. The input data should be collected using the scripts
+collect_experiment_data.sh or collect_experiment_data_odd_even_session.sh
+
+For every function, this script computes the distance and the score values.
+The output is stored in the file cwp_functions_statistics_file.
+
+For every Chrome OS component, this script computes a set of metrics consisting
+in the number of functions, the average and cumulative distance and score of
+the functions matching the group. The output is stored in the file
+cwp_function_groups_statistics_file.
+"""
+
+import argparse
+import sys
+
+import benchmark_metrics
+import utils
+
+
+class MetricsExperiment(object):
+ """Runs an experiment with the benchmark metrics on a pair of data sets."""
+
+ def __init__(self, cwp_pairwise_inclusive_reference,
+ cwp_pairwise_inclusive_test, cwp_inclusive_reference,
+ cwp_inclusive_test, cwp_function_groups_file,
+ cwp_function_groups_statistics_file,
+ cwp_function_statistics_file):
+ """Initializes the MetricsExperiment class.
+
+ Args:
+ cwp_pairwise_inclusive_reference: The CSV file containing the pairwise
+ inclusive values from the reference data set.
+ cwp_pairwise_inclusive_test: The CSV file containing the pairwise
+ inclusive values from the test data set.
+ cwp_inclusive_reference: The CSV file containing the inclusive values
+ from the reference data set.
+ cwp_inclusive_test: The CSV file containing the inclusive values from
+ the test data set.
+ cwp_function_groups_file: The CSV file containing the groups of functions.
+ cwp_function_groups_statistics_file: The output CSV file that will
+ contain the metrics for the function groups.
+ cwp_function_statistics_file: The output CSV file that will contain the
+ metrics for the CWP functions.
+ """
+ self._cwp_pairwise_inclusive_reference = cwp_pairwise_inclusive_reference
+ self._cwp_pairwise_inclusive_test = cwp_pairwise_inclusive_test
+ self._cwp_inclusive_reference = cwp_inclusive_reference
+ self._cwp_inclusive_test = cwp_inclusive_test
+ self._cwp_function_groups_file = cwp_function_groups_file
+ self._cwp_function_groups_statistics_file = \
+ cwp_function_groups_statistics_file
+ self._cwp_function_statistics_file = cwp_function_statistics_file
+
+ def PerformComputation(self):
+ """Does the benchmark metrics experimental computation.
+
+ For every function, it is computed a distance based on the sum of the
+ differences of the fractions spent in the child functions. Afterwards,
+ it is computed a score based on the inclusive values fractions and the
+ distance value. The statistics for all the function are written in the file
+ self._cwp_function_statistics_file.
+
+ The functions are grouped on Chrome OS components based on the path of the
+ file where a function is defined. For every group, there are computed the
+ total number of functions matching that group, the cumulative distance, the
+ average distance and the cumulative score of the functions.
+ """
+
+ inclusive_statistics_reference = \
+ utils.ParseCWPInclusiveCountFile(self._cwp_inclusive_reference)
+ inclusive_statistics_cum_reference = \
+ utils.ComputeCWPCummulativeInclusiveStatistics(
+ inclusive_statistics_reference)
+ inclusive_statistics_test = \
+ utils.ParseCWPInclusiveCountFile(self._cwp_inclusive_test)
+ inclusive_statistics_cum_test = \
+ utils.ComputeCWPCummulativeInclusiveStatistics(
+ inclusive_statistics_test)
+ pairwise_inclusive_statistics_reference = \
+ utils.ParseCWPPairwiseInclusiveCountFile(
+ self._cwp_pairwise_inclusive_reference)
+ pairwise_inclusive_fractions_reference = \
+ utils.ComputeCWPChildFunctionsFractions(
+ inclusive_statistics_cum_reference,
+ pairwise_inclusive_statistics_reference)
+ pairwise_inclusive_statistics_test = \
+ utils.ParseCWPPairwiseInclusiveCountFile(
+ self._cwp_pairwise_inclusive_test)
+ pairwise_inclusive_fractions_test = \
+ utils.ComputeCWPChildFunctionsFractions(
+ inclusive_statistics_cum_test,
+ pairwise_inclusive_statistics_test)
+ parent_function_statistics = {}
+
+ with open(self._cwp_function_groups_file) as input_file:
+ cwp_function_groups = utils.ParseFunctionGroups(input_file.readlines())
+
+ for parent_function_key, parent_function_statistics_test \
+ in inclusive_statistics_test.iteritems():
+ parent_function_name, _ = parent_function_key.split(',')
+ parent_function_fraction_test = parent_function_statistics_test[2]
+
+ parent_function_fraction_reference = \
+ inclusive_statistics_reference[parent_function_key][2]
+
+ child_functions_fractions_test = \
+ pairwise_inclusive_fractions_test.get(parent_function_name, {})
+
+ child_functions_fractions_reference = \
+ pairwise_inclusive_fractions_reference.get(parent_function_name, {})
+
+ distance = benchmark_metrics.ComputeDistanceForFunction(
+ child_functions_fractions_test, child_functions_fractions_reference)
+
+ parent_function_score_test = benchmark_metrics.ComputeScoreForFunction(
+ distance, parent_function_fraction_test,
+ parent_function_fraction_reference)
+
+ parent_function_statistics[parent_function_key] = \
+ (distance, parent_function_score_test)
+
+ with open(self._cwp_function_statistics_file, 'w') as output_file:
+ statistics_lines = ['function,file,distance,score']
+ statistics_lines += \
+ [','.join([parent_function_key.replace(';;', ','),
+ str(statistic[0]),
+ str(statistic[1])])
+ for parent_function_key, statistic
+ in parent_function_statistics.iteritems()]
+ output_file.write('\n'.join(statistics_lines))
+
+ cwp_groups_statistics_test = benchmark_metrics.ComputeMetricsForComponents(
+ cwp_function_groups, parent_function_statistics)
+
+ with open(self._cwp_function_groups_statistics_file, 'w') as output_file:
+ group_statistics_lines = \
+ ['group,file_path,function_count,distance_cum,distance_avg,score_cum,'
+ 'score_avg']
+ group_statistics_lines += \
+ [','.join([group_name,
+ str(statistic[0]),
+ str(statistic[1]),
+ str(statistic[2]),
+ str(statistic[3]),
+ str(statistic[4]),
+ str(statistic[5])])
+ for group_name, statistic
+ in cwp_groups_statistics_test.iteritems()]
+ output_file.write('\n'.join(group_statistics_lines))
+
+
+def ParseArguments(arguments):
+ parser = argparse.ArgumentParser(
+ description='Runs an experiment with the benchmark metrics on a pair of '
+ 'CWP data sets.')
+ parser.add_argument(
+ '--cwp_pairwise_inclusive_reference',
+ required=True,
+ help='The reference CSV file that will contain a pair of parent and '
+ 'child functions with their inclusive count fractions out of the total '
+ 'amount of inclusive count values.')
+ parser.add_argument(
+ '--cwp_pairwise_inclusive_test',
+ required=True,
+ help='The test CSV file that will contain a pair of parent and '
+ 'child functions with their inclusive count fractions out of the total '
+ 'amount of inclusive count values.')
+ parser.add_argument(
+ '--cwp_inclusive_reference',
+ required=True,
+ help='The reference CSV file that will contain a function with its '
+ 'inclusive count fraction out of the total amount of inclusive count '
+ 'values.')
+ parser.add_argument(
+ '--cwp_inclusive_test',
+ required=True,
+ help='The test CSV file that will contain a function with its '
+ 'inclusive count fraction out of the total amount of inclusive count '
+ 'values.')
+ parser.add_argument(
+ '-g',
+ '--cwp_function_groups_file',
+ required=True,
+ help='The file that will contain the CWP function groups.'
+ 'A line consists in the group name and a file path. A group must '
+ 'represent a ChromeOS component.')
+ parser.add_argument(
+ '-s',
+ '--cwp_function_groups_statistics_file',
+ required=True,
+ help='The output file that will contain the metric statistics for the '
+ 'CWP function groups in CSV format. A line consists in the group name, '
+ 'file path, number of functions matching the group, the total score '
+ 'and distance values.')
+ parser.add_argument(
+ '-f',
+ '--cwp_function_statistics_file',
+ required=True,
+ help='The output file that will contain the metric statistics for the '
+ 'CWP functions in CSV format. A line consists in the function name, file '
+ 'name, cummulative distance, average distance, cummulative score and '
+ 'average score values.')
+
+ options = parser.parse_args(arguments)
+ return options
+
+
+def Main(argv):
+ options = ParseArguments(argv)
+ metrics_experiment = MetricsExperiment(
+ options.cwp_pairwise_inclusive_reference,
+ options.cwp_pairwise_inclusive_test, options.cwp_inclusive_reference,
+ options.cwp_inclusive_test, options.cwp_function_groups_file,
+ options.cwp_function_groups_statistics_file,
+ options.cwp_function_statistics_file)
+ metrics_experiment.PerformComputation()
+
+
+if __name__ == '__main__':
+ Main(sys.argv[1:])
diff --git a/user_activity_benchmarks/benchmark_metrics_experiment_unittest.py b/user_activity_benchmarks/benchmark_metrics_experiment_unittest.py
new file mode 100755
index 00000000..c4755efe
--- /dev/null
+++ b/user_activity_benchmarks/benchmark_metrics_experiment_unittest.py
@@ -0,0 +1,79 @@
+#!/usr/bin/python2
+
+# Copyright 2016 The Chromium OS Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+"""Unit tests for the benchmark_metrics_experiment module."""
+
+import os
+import tempfile
+import unittest
+
+from benchmark_metrics_experiment import MetricsExperiment
+
+
+class MetricsExperimentTest(unittest.TestCase):
+ """Test class for MetricsExperiment class."""
+
+ def __init__(self, *args, **kwargs):
+ super(MetricsExperimentTest, self).__init__(*args, **kwargs)
+ self._pairwise_inclusive_count_test_file = \
+ 'testdata/input/pairwise_inclusive_count_test.csv'
+ self._pairwise_inclusive_count_reference_file = \
+ 'testdata/input/pairwise_inclusive_count_reference.csv'
+ self._inclusive_count_test_file = \
+ 'testdata/input/inclusive_count_test.csv'
+ self._inclusive_count_reference_file = \
+ 'testdata/input/inclusive_count_reference.csv'
+ self._cwp_function_groups_file = \
+ 'testdata/input/cwp_function_groups.txt'
+
+ def _CheckFileContents(self, file_name, expected_content_lines):
+ with open(file_name) as input_file:
+ result_content_lines = input_file.readlines()
+ self.assertListEqual(expected_content_lines, result_content_lines)
+
+ def testExperiment(self):
+ group_statistics_file, group_statistics_filename = tempfile.mkstemp()
+
+ os.close(group_statistics_file)
+
+ function_statistics_file, function_statistics_filename = tempfile.mkstemp()
+
+ os.close(function_statistics_file)
+
+
+ expected_group_statistics_lines = \
+ ['group,file_path,function_count,distance_cum,distance_avg,score_cum,'
+ 'score_avg\n',
+ 'ab,/a/b,2.0,3.01,1.505,8.26344228895,4.13172114448\n',
+ 'e,/e,2.0,2.0,1.0,27.5,13.75\n',
+ 'cd,/c/d,2.0,2.0,1.0,27.5,13.75']
+ expected_function_statistics_lines = \
+ ['function,file,distance,score\n',
+ 'func_i,/c/d/file_i,1.0,17.6\n',
+ 'func_j,/e/file_j,1.0,27.5\n',
+ 'func_f,/a/b/file_f,1.59,1.4465408805\n',
+ 'func_h,/c/d/file_h,1.0,9.9\n',
+ 'func_k,/e/file_k,1.0,0.0\n',
+ 'func_g,/a/b/file_g,1.42,6.81690140845']
+ metric_experiment = \
+ MetricsExperiment(self._pairwise_inclusive_count_reference_file,
+ self._pairwise_inclusive_count_test_file,
+ self._inclusive_count_reference_file,
+ self._inclusive_count_test_file,
+ self._cwp_function_groups_file,
+ group_statistics_filename,
+ function_statistics_filename)
+
+ metric_experiment.PerformComputation()
+ self._CheckFileContents(group_statistics_filename,
+ expected_group_statistics_lines)
+ self._CheckFileContents(function_statistics_filename,
+ expected_function_statistics_lines)
+ os.remove(group_statistics_filename)
+ os.remove(function_statistics_filename)
+
+
+if __name__ == '__main__':
+ unittest.main()
diff --git a/user_activity_benchmarks/benchmark_metrics_unittest.py b/user_activity_benchmarks/benchmark_metrics_unittest.py
new file mode 100755
index 00000000..a48361fe
--- /dev/null
+++ b/user_activity_benchmarks/benchmark_metrics_unittest.py
@@ -0,0 +1,87 @@
+#!/usr/bin/python2
+
+# Copyright 2016 The Chromium OS Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+"""Unit tests for the benchmark_metrics module."""
+
+import mock
+import unittest
+import benchmark_metrics
+
+
+class MetricsComputationTest(unittest.TestCase):
+ """Test class for MetricsComputation class."""
+
+ def __init__(self, *args, **kwargs):
+ super(MetricsComputationTest, self).__init__(*args, **kwargs)
+
+ def testComputeDistanceForFunction(self):
+ child_functions_statistics_sample = {
+ 'f,file_f': 0.1,
+ 'g,file_g': 0.2,
+ 'h,file_h': 0.3,
+ 'i,file_i': 0.4
+ }
+ child_functions_statistics_reference = {
+ 'f,file_f': 0.4,
+ 'i,file_i': 0.4,
+ 'h,file_h2': 0.2
+ }
+ distance = benchmark_metrics.ComputeDistanceForFunction(
+ child_functions_statistics_sample, child_functions_statistics_reference)
+ self.assertEqual(distance, 2.0)
+
+ distance = benchmark_metrics.ComputeDistanceForFunction({}, {})
+ self.assertEqual(distance, 1.0)
+
+ distance = benchmark_metrics.ComputeDistanceForFunction(
+ child_functions_statistics_sample, {})
+ self.assertEqual(distance, 2.0)
+
+ distance = benchmark_metrics.ComputeDistanceForFunction(
+ {}, child_functions_statistics_reference)
+ self.assertEqual(distance, 2.0)
+
+ def testComputeScoreForFunction(self):
+ score = benchmark_metrics.ComputeScoreForFunction(1.2, 0.3, 0.4)
+ self.assertEqual(score, 0.1)
+
+ def testComputeMetricsForComponents(self):
+ function_metrics = {
+ 'func_f,/a/b/file_f': (1.0, 2.3),
+ 'func_g,/a/b/file_g': (1.1, 1.5),
+ 'func_h,/c/d/file_h': (2.0, 1.7),
+ 'func_i,/c/d/file_i': (1.9, 1.8),
+ 'func_j,/c/d/file_j': (1.8, 1.9),
+ 'func_k,/e/file_k': (1.2, 2.1),
+ 'func_l,/e/file_l': (1.3, 3.1)
+ }
+ cwp_function_groups = [('ab', '/a/b'), ('cd', '/c/d'), ('e', '/e')]
+ expected_metrics = {'ab': ('/a/b', 2.0, 2.1, 1.05, 3.8, 1.9),
+ 'e': ('/e', 2.0, 2.5, 1.25, 5.2, 2.6),
+ 'cd': ('/c/d', 3.0, 5.7, 1.9000000000000001, 5.4, 1.8)}
+ result_metrics = benchmark_metrics.ComputeMetricsForComponents(
+ cwp_function_groups, function_metrics)
+
+ self.assertDictEqual(expected_metrics, result_metrics)
+
+ def testComputeMetricsForBenchmark(self):
+ function_metrics = {'func_f': (1.0, 2.0),
+ 'func_g': (1.1, 2.1),
+ 'func_h': (1.2, 2.2),
+ 'func_i': (1.3, 2.3)}
+ expected_benchmark_metrics = \
+ (4, 4.6000000000000005, 1.1500000000000001, 8.6, 2.15)
+ result_benchmark_metrics = \
+ benchmark_metrics.ComputeMetricsForBenchmark(function_metrics)
+
+ self.assertEqual(expected_benchmark_metrics, result_benchmark_metrics)
+
+ def testComputeMetricsForBenchmarkSet(self):
+ """TODO(evelinad): Add unit test for ComputeMetricsForBenchmarkSet."""
+ pass
+
+
+if __name__ == '__main__':
+ unittest.main()
diff --git a/user_activity_benchmarks/collect_experiment_data.sh b/user_activity_benchmarks/collect_experiment_data.sh
new file mode 100755
index 00000000..a76cec82
--- /dev/null
+++ b/user_activity_benchmarks/collect_experiment_data.sh
@@ -0,0 +1,93 @@
+#!/bin/bash
+
+# Copyright 2016 The Chromium OS Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+# Uses Dremel queries to collect the inclusive and pairwise inclusive
+# statistics.
+
+set -e
+
+if [ "$#" -ne 7 ]; then
+ echo "USAGE: collect_experiment_data.sh cwp_table board board_arch " \
+ "Chrome_version Chrome_OS_version inclusive_output_file " \
+ "pairwise_inclusive_output_file"
+ exit 1
+fi
+
+readonly TABLE=$1
+readonly INCLUSIVE_OUTPUT_FILE=$6
+readonly PAIRWISE_INCLUSIVE_OUTPUT_FILE=$7
+readonly PERIODIC_COLLECTION=1
+readonly WHERE_CLAUSE_SPECIFICATIONS="meta.cros.board = '$2' AND \
+ meta.cros.cpu_architecture = '$3' AND \
+ meta.cros.chrome_version LIKE '%$4%' AND \
+ meta.cros.version = '$5' AND \
+ meta.cros.collection_info.trigger_event = $PERIODIC_COLLECTION AND \
+ session.total_count > 2000"
+
+# Collects the function, with its file, the object and inclusive count
+# fraction out of the total amount of inclusive count values.
+echo "
+SELECT
+ replace(frame.function_name, \", \", \"; \") AS function,
+ frame.filename AS file,
+ frame.load_module_path AS dso,
+ SUM(frame.inclusive_count) AS inclusive_count,
+ SUM(frame.inclusive_count)/ANY_VALUE(total.value) AS inclusive_count_fraction
+FROM
+ $TABLE table,
+ table.frame frame
+CROSS JOIN (
+ SELECT
+ SUM(count) AS value
+ FROM
+ $TABLE
+ WHERE
+ $WHERE_CLAUSE_SPECIFICATIONS
+) AS total
+WHERE
+ $WHERE_CLAUSE_SPECIFICATIONS
+GROUP BY
+ function,
+ file,
+ dso
+HAVING
+ inclusive_count_fraction > 0.0
+ORDER BY
+ inclusive_count_fraction DESC;
+" | dremel --sql_dialect=GoogleSQL --min_completion_ratio=1.0 --output=csv \
+ > "$INCLUSIVE_OUTPUT_FILE"
+
+# Collects the pair of parent and child functions, with the file and object
+# where the child function is declared and the inclusive count fraction of the
+# pair out of the total amount of inclusive count values.
+echo "
+SELECT
+ CONCAT(replace(frame.parent_function_name, \", \", \"; \"), \";;\",
+ replace(frame.function_name, \", \", \"; \")) AS parent_child_functions,
+ frame.filename AS child_function_file,
+ frame.load_module_path AS child_function_dso,
+ SUM(frame.inclusive_count)/ANY_VALUE(total.value) AS inclusive_count
+FROM
+ $TABLE table,
+ table.frame frame
+CROSS JOIN (
+ SELECT
+ SUM(count) AS value
+ FROM $TABLE
+ WHERE
+ $WHERE_CLAUSE_SPECIFICATIONS
+) AS total
+WHERE
+ $WHERE_CLAUSE_SPECIFICATIONS
+GROUP BY
+ parent_child_functions,
+ child_function_file,
+ child_function_dso
+HAVING
+ inclusive_count > 0.0
+ORDER BY
+ inclusive_count DESC;
+" | dremel --sql_dialect=GoogleSQL --min_completion_ratio=1.0 --output=csv > \
+ "$PAIRWISE_INCLUSIVE_OUTPUT_FILE"
diff --git a/user_activity_benchmarks/collect_experiment_data_odd_even_session.sh b/user_activity_benchmarks/collect_experiment_data_odd_even_session.sh
new file mode 100755
index 00000000..900e582b
--- /dev/null
+++ b/user_activity_benchmarks/collect_experiment_data_odd_even_session.sh
@@ -0,0 +1,95 @@
+#!/bin/bash
+
+# Copyright 2016 The Chromium OS Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+# Uses Dremel queries to collect the inclusive and pairwise inclusive statistics
+# for odd/even profile collection session ids.
+# The data is collected for an odd or even collection session id.
+
+set -e
+
+if [ $# -lt 8 ]; then
+ echo "Usage: collect_experiment_data_odd_even_session.sh cwp_table board " \
+ "board_arch Chrome_version Chrome_OS_version odd_even " \
+ "inclusive_output_file pairwise_inclusive_output_file"
+ exit 1
+fi
+
+readonly TABLE=$1
+readonly INCLUSIVE_OUTPUT_FILE=$7
+readonly PAIRWISE_INCLUSIVE_OUTPUT_FILE=$8
+readonly PERIODIC_COLLECTION=1
+WHERE_CLAUSE_SPECIFICATIONS="meta.cros.board = '$2' AND \
+ meta.cros.cpu_architecture = '$3' AND \
+ meta.cros.chrome_version LIKE '%$4%' AND \
+ meta.cros.version = '$5' AND \
+ meta.cros.collection_info.trigger_event = $PERIODIC_COLLECTION AND \
+ MOD(session.id, 2) = $6 AND \
+ session.total_count > 2000"
+
+# Collects the function, with its file, the object and inclusive count
+# fraction out of the total amount of inclusive count values.
+echo "
+SELECT
+ replace(frame.function_name, \", \", \"; \") AS function,
+ frame.filename AS file,
+ frame.load_module_path AS dso,
+ SUM(frame.inclusive_count) AS inclusive_count,
+ SUM(frame.inclusive_count)/ANY_VALUE(total.value) AS inclusive_count_fraction
+FROM
+ $TABLE table,
+ table.frame frame
+CROSS JOIN (
+ SELECT
+ SUM(count) AS value
+ FROM $TABLE
+ WHERE
+ $WHERE_CLAUSE_SPECIFICATIONS
+) AS total
+WHERE
+ $WHERE_CLAUSE_SPECIFICATIONS
+GROUP BY
+ function,
+ file,
+ dso
+HAVING
+ inclusive_count_fraction > 0.0
+ORDER BY
+ inclusive_count_fraction DESC;
+" | dremel --sql_dialect=GoogleSQL --min_completion_ratio=1.0 --output=csv > \
+ "$INCLUSIVE_OUTPUT_FILE"
+
+# Collects the pair of parent and child functions, with the file and object
+# where the child function is declared and the inclusive count fraction of the
+# pair out of the total amount of inclusive count values.
+echo "
+SELECT
+ CONCAT(replace(frame.parent_function_name, \", \", \"; \"), \";;\",
+ replace(frame.function_name, \", \", \"; \")) AS parent_child_functions,
+ frame.filename AS child_function_file,
+ frame.load_module_path AS child_function_dso,
+ SUM(frame.inclusive_count)/ANY_VALUE(total.value) AS inclusive_count
+FROM
+ $TABLE table,
+ table.frame frame
+CROSS JOIN (
+ SELECT
+ SUM(count) AS value
+ FROM
+ $TABLE
+ WHERE
+ $WHERE_CLAUSE_SPECIFICATIONS
+) AS total
+WHERE
+ $WHERE_CLAUSE_SPECIFICATIONS
+GROUP BY
+ parent_child_functions,
+ child_function_file,
+ child_function_dso
+HAVING
+ inclusive_count > 0.0
+ORDER BY
+ inclusive_count DESC;
+" | dremel --sql_dialect=GoogleSQL --min_completion_ratio=1.0 --output=csv > \
+ "$PAIRWISE_INCLUSIVE_OUTPUT_FILE"
diff --git a/user_activity_benchmarks/collect_pprof_data.sh b/user_activity_benchmarks/collect_pprof_data.sh
new file mode 100755
index 00000000..5b89f185
--- /dev/null
+++ b/user_activity_benchmarks/collect_pprof_data.sh
@@ -0,0 +1,41 @@
+#!/bin/bash
+
+# Copyright 2016 The Chromium OS Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+# Collects the pprof tree and top outputs.
+# All the local_cwp symbolized profiles are taken from the
+# local_cwp_results_path.
+# The pprof top output is stored in the pprof_top_results_path and the pprof
+# tree output is stored in the pprof_tree_results_path.
+
+set -e
+
+if [ "$#" -ne 3 ]; then
+ echo "USAGE: collect_pprof_data.sh local_cwp_results_path " \
+ "pprof_top_results_path pprof_tree_results_path"
+ exit 1
+fi
+
+readonly LOCAL_CWP_RESULTS_PATH=$1
+readonly PPROF_TOP_RESULTS_PATH=$2
+readonly PPROF_TREE_RESULTS_PATH=$3
+readonly SYMBOLIZED_PROFILES=`ls $LOCAL_CWP_RESULTS_PATH`
+
+for symbolized_profile in "${SYMBOLIZED_PROFILES[@]}"
+do
+ pprof --top "$LOCAL_CWP_RESULTS_PATH/${symbolized_profile}" > \
+ "$PPROF_TOP_RESULTS_PATH/${symbolized_profile}.pprof"
+ if [ $? -ne 0 ]; then
+ echo "Failed to extract the pprof top output for the $symbolized_profile."
+ continue
+ fi
+
+ pprof --tree "$LOCAL_CWP_RESULTS_PATH/${symbolized_profile}" > \
+ "$PPROF_TREE_RESULTS_PATH/${symbolized_profile}.pprof"
+ if [ $? -ne 0 ]; then
+ echo "Failed to extract the pprof tree output for the " \
+ "$symbolized_profile."
+ continue
+ fi
+done
diff --git a/user_activity_benchmarks/collect_telemetry_profiles.sh b/user_activity_benchmarks/collect_telemetry_profiles.sh
new file mode 100755
index 00000000..0583adca
--- /dev/null
+++ b/user_activity_benchmarks/collect_telemetry_profiles.sh
@@ -0,0 +1,90 @@
+#!/bin/bash
+
+# Copyright 2016 The Chromium OS Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+# Runs the Telemetry benchmarks with AutoTest and collects their perf profiles.
+# Reads the benchmark names from the telemetry_benchmark_file. Each benchmark
+# should be placed on a separate line.
+# The profile results are placed in the results_path.
+
+set -e
+
+if [ "$#" -ne 5 ]; then
+ echo "USAGE: collect_telemetry_profiles.sh board chrome_root_path " \
+ "machine_ip results_path telemetry_benchmarks_file"
+ exit 1
+fi
+
+# CHROME_ROOT should contain the path with the source of Chrome. This is used by
+# AutoTest.
+export CHROME_ROOT=$2
+
+readonly BOARD=$1
+readonly IP=$3
+readonly RESULTS_PATH=$4
+readonly TELEMETRY_BENCHMARKS_FILE=$5
+
+# The following Telemetry benchmarks failed for the R52-8350.68.0 Chrome OS
+# version: page_cycler_v2.top_10_mobile,
+# page_cycler_v2.basic_oopif, smoothness.tough_filters_cases,
+# page_cycler_v2.intl_hi_ru,
+# image_decoding.image_decoding_measurement, system_health.memory_mobile,
+# memory.top_7_stress, smoothness.tough_path_rendering_cases,
+# page_cycler_v2.tough_layout_cases,
+# memory.long_running_idle_gmail_background_tbmv2, smoothness.tough_webgl_cases,
+# smoothness.tough_canvas_cases, smoothness.tough_texture_upload_cases,
+# top_10_mobile_memory_ignition, startup.large_profile.cold.blank_page,
+# page_cycler_v2.intl_ar_fa_he, start_with_ext.cold.blank_page,
+# start_with_ext.warm.blank_page, page_cycler_v2.intl_ko_th_vi,
+# smoothness.scrolling_tough_ad_case, page_cycler_v2_site_isolation.basic_oopif,
+# smoothness.tough_scrolling_cases, startup.large_profile.warm.blank_page,
+# page_cycler_v2.intl_es_fr_pt-BR, page_cycler_v2.intl_ja_zh,
+# memory.long_running_idle_gmail_tbmv2, smoothness.scrolling_tough_ad_cases,
+# page_cycler_v2.typical_25, smoothness.tough_webgl_ad_cases,
+# smoothness.tough_image_decode_cases.
+#
+# However, we did not manage to collect the profiles only from the following
+# benchmarks: smoothness.tough_filters_cases,
+# smoothness.tough_path_rendering_cases, page_cycler_v2.tough_layout_cases,
+# smoothness.tough_webgl_cases, smoothness.tough_canvas_cases,
+# smoothness.tough_texture_upload_cases, smoothness.tough_scrolling_cases,
+# smoothness.tough_webgl_ad_cases, smoothness.tough_image_decode_cases.
+#
+# Use ./run_benchmark --browser=cros-chrome --remote=$IP list to get the list of
+# Telemetry benchmarks.
+readonly LATEST_PERF_PROFILE=/tmp/test_that_latest/results-1-telemetry_Crosperf/telemetry_Crosperf/profiling/perf.data
+
+while read benchmark
+do
+ # TODO(evelinad): We should add -F 4000000 to the list of profiler_args
+ # arguments because we need to use the same sampling period as the one used
+ # to collect the CWP user data (4M number of cycles for cycles.callgraph).
+ test_that --debug --board=${BOARD} --args=" profiler=custom_perf \
+ profiler_args='record -g -a -e cycles,instructions' \
+ run_local=False test=$benchmark " $IP telemetry_Crosperf
+ if [ $? -ne 0 ]; then
+ echo "Failed to run the $benchmark telemetry benchmark with Autotest."
+ continue
+ fi
+ echo "Warning: Sampling period is too high. It should be set to 4M samples."
+
+ cp "$LATEST_PERF_PROFILE" "$RESULTS_PATH/${benchmark}.data"
+ if [ $? -ne 0 ]; then
+ echo "Failed to move the perf profile file from $LATEST_PERF_PROFILE to " \
+ "$PERF_DATA_RESULTS_PATH/${benchmark}.data for the $benchmark " \
+ "telemetry benchmark."
+ continue
+ fi
+
+ # The ssh connection should be configured without password. We need to do
+ # this step because we might run out of disk space if we run multiple
+ # benchmarks.
+ ssh root@$IP "rm -rf /usr/local/profilers/*"
+ if [ $? -ne 0 ]; then
+ echo "Failed to remove the output files from /usr/local/profilers/ for " \
+ "the $benchmark telemetry benchmark."
+ continue
+ fi
+done < $TELEMETRY_BENCHMARKS_FILE
+
diff --git a/user_activity_benchmarks/cwp_hot_functions_groups.txt b/user_activity_benchmarks/cwp_hot_functions_groups.txt
new file mode 100644
index 00000000..3a1f893b
--- /dev/null
+++ b/user_activity_benchmarks/cwp_hot_functions_groups.txt
@@ -0,0 +1,314 @@
+third_party_accessibility_audit home/chrome-bot/chrome_root/src/third_party/accessibility-audit
+third_party_accessibility_test_framework home/chrome-bot/chrome_root/src/third_party/accessibility_test_framework
+third_party_adobe home/chrome-bot/chrome_root/src/third_party/adobe
+third_party_afl home/chrome-bot/chrome_root/src/third_party/afl
+third_party_analytics home/chrome-bot/chrome_root/src/third_party/analytics
+third_party_android_async_task home/chrome-bot/chrome_root/src/third_party/android_async_task
+third_party_android_crazy_linker home/chrome-bot/chrome_root/src/third_party/android_crazy_linker
+third_party_android_data_chart home/chrome-bot/chrome_root/src/third_party/android_data_chart
+third_party_android_media home/chrome-bot/chrome_root/src/third_party/android_media
+third_party_android_opengl home/chrome-bot/chrome_root/src/third_party/android_opengl
+third_party_android_platform home/chrome-bot/chrome_root/src/third_party/android_platform
+third_party_android_protobuf home/chrome-bot/chrome_root/src/third_party/android_protobuf
+third_party_android_support_test_runner home/chrome-bot/chrome_root/src/third_party/android_support_test_runner
+third_party_android_swipe_refresh home/chrome-bot/chrome_root/src/third_party/android_swipe_refresh
+third_party_angle home/chrome-bot/chrome_root/src/third_party/angle
+third_party_apache-portable-runtime home/chrome-bot/chrome_root/src/third_party/apache-portable-runtime
+third_party_apache_velocity home/chrome-bot/chrome_root/src/third_party/apache_velocity
+third_party_apache-win32 home/chrome-bot/chrome_root/src/third_party/apache-win32
+third_party_apple_apsl home/chrome-bot/chrome_root/src/third_party/apple_apsl
+third_party_apple_sample_code home/chrome-bot/chrome_root/src/third_party/apple_sample_code
+third_party_appurify-python home/chrome-bot/chrome_root/src/third_party/appurify-python
+third_party_ashmem home/chrome-bot/chrome_root/src/third_party/ashmem
+third_party_bidichecker home/chrome-bot/chrome_root/src/third_party/bidichecker
+third_party_bintrees home/chrome-bot/chrome_root/src/third_party/bintrees
+third_party_binutils home/chrome-bot/chrome_root/src/third_party/binutils
+third_party_blanketjs home/chrome-bot/chrome_root/src/third_party/blanketjs
+third_party_blimp_fonts home/chrome-bot/chrome_root/src/third_party/blimp_fonts
+third_party_boringssl home/chrome-bot/chrome_root/src/third_party/boringssl
+third_party_boringssl home/chrome-bot/chrome_root/src/third_party/boringssl/
+third_party_bouncycastle home/chrome-bot/chrome_root/src/third_party/bouncycastle
+third_party_brotli home/chrome-bot/chrome_root/src/third_party/brotli
+third_party_bspatch home/chrome-bot/chrome_root/src/third_party/bspatch
+third_party_cacheinvalidation home/chrome-bot/chrome_root/src/third_party/cacheinvalidation
+third_party_cardboard-java home/chrome-bot/chrome_root/src/third_party/cardboard-java
+third_party_catapult home/chrome-bot/chrome_root/src/third_party/catapult
+third_party_ced home/chrome-bot/chrome_root/src/third_party/ced
+third_party_chaijs home/chrome-bot/chrome_root/src/third_party/chaijs
+third_party_checkstyle home/chrome-bot/chrome_root/src/third_party/checkstyle
+third_party_chromite home/chrome-bot/chrome_root/src/third_party/chromite
+third_party_class-dump home/chrome-bot/chrome_root/src/third_party/class-dump
+third_party_cld_2 home/chrome-bot/chrome_root/src/third_party/cld_2
+third_party_cld_3 home/chrome-bot/chrome_root/src/third_party/cld_3
+third_party_closure_compiler home/chrome-bot/chrome_root/src/third_party/closure_compiler
+third_party_closure_linter home/chrome-bot/chrome_root/src/third_party/closure_linter
+third_party_codesighs home/chrome-bot/chrome_root/src/third_party/codesighs
+third_party_colorama home/chrome-bot/chrome_root/src/third_party/colorama
+third_party_crashpad home/chrome-bot/chrome_root/src/third_party/crashpad
+third_party_cros_system_api home/chrome-bot/chrome_root/src/third_party/cros_system_api
+third_party_custom_tabs_client home/chrome-bot/chrome_root/src/third_party/custom_tabs_client
+third_party_cython home/chrome-bot/chrome_root/src/third_party/cython
+third_party_d3 home/chrome-bot/chrome_root/src/third_party/d3
+third_party_decklink home/chrome-bot/chrome_root/src/third_party/decklink
+third_party_deqp home/chrome-bot/chrome_root/src/third_party/deqp
+third_party_devscripts home/chrome-bot/chrome_root/src/third_party/devscripts
+third_party_dom_distiller_js home/chrome-bot/chrome_root/src/third_party/dom_distiller_js
+third_party_drmemory home/chrome-bot/chrome_root/src/third_party/drmemory
+third_party_elfutils home/chrome-bot/chrome_root/src/third_party/elfutils
+third_party_errorprone home/chrome-bot/chrome_root/src/third_party/errorprone
+third_party_espresso home/chrome-bot/chrome_root/src/third_party/espresso
+third_party_expat home/chrome-bot/chrome_root/src/third_party/expat
+third_party_ffmpeg home/chrome-bot/chrome_root/src/third_party/ffmpeg
+third_party_fips181 home/chrome-bot/chrome_root/src/third_party/fips181
+third_party_flac home/chrome-bot/chrome_root/src/third_party/flac
+third_party_flatbuffers home/chrome-bot/chrome_root/src/third_party/flatbuffers
+third_party_flot home/chrome-bot/chrome_root/src/third_party/flot
+third_party_fontconfig home/chrome-bot/chrome_root/src/third_party/fontconfig
+third_party_freetype2 home/chrome-bot/chrome_root/src/third_party/freetype2
+third_party_freetype-android home/chrome-bot/chrome_root/src/third_party/freetype-android
+third_party_fuzzymatch home/chrome-bot/chrome_root/src/third_party/fuzzymatch
+third_party_gardiner_mod home/chrome-bot/chrome_root/src/third_party/gardiner_mod
+third_party_gif_player home/chrome-bot/chrome_root/src/third_party/gif_player
+third_party_gles2_conform home/chrome-bot/chrome_root/src/third_party/gles2_conform
+third_party_glslang home/chrome-bot/chrome_root/src/third_party/glslang
+third_party_google_appengine_cloudstorage home/chrome-bot/chrome_root/src/third_party/google_appengine_cloudstorage
+third_party_google_input_tools home/chrome-bot/chrome_root/src/third_party/google_input_tools
+third_party_google_toolbox_for_mac home/chrome-bot/chrome_root/src/third_party/google_toolbox_for_mac
+third_party_grpc home/chrome-bot/chrome_root/src/third_party/grpc
+third_party_guava home/chrome-bot/chrome_root/src/third_party/guava
+third_party_haha home/chrome-bot/chrome_root/src/third_party/haha
+third_party_hamcrest home/chrome-bot/chrome_root/src/third_party/hamcrest
+third_party_harfbuzz-ng home/chrome-bot/chrome_root/src/third_party/harfbuzz-ng
+third_party_hunspell home/chrome-bot/chrome_root/src/third_party/hunspell
+third_party_hunspell_dictionaries home/chrome-bot/chrome_root/src/third_party/hunspell_dictionaries
+third_party_hwcplus home/chrome-bot/chrome_root/src/third_party/hwcplus
+third_party_iaccessible2 home/chrome-bot/chrome_root/src/third_party/iaccessible2
+third_party_iccjpeg home/chrome-bot/chrome_root/src/third_party/iccjpeg
+third_party_icu home/chrome-bot/chrome_root/src/third_party/icu
+third_party_icu4j home/chrome-bot/chrome_root/src/third_party/icu4j
+third_party_ijar home/chrome-bot/chrome_root/src/third_party/ijar
+third_party_instrumented_libraries home/chrome-bot/chrome_root/src/third_party/instrumented_libraries
+third_party_intellij home/chrome-bot/chrome_root/src/third_party/intellij
+third_party_isimpledom home/chrome-bot/chrome_root/src/third_party/isimpledom
+third_party_javax_inject home/chrome-bot/chrome_root/src/third_party/javax_inject
+third_party_jinja2 home/chrome-bot/chrome_root/src/third_party/jinja2
+third_party_jmake home/chrome-bot/chrome_root/src/third_party/jmake
+third_party_jsoncpp home/chrome-bot/chrome_root/src/third_party/jsoncpp
+third_party_jsr-305 home/chrome-bot/chrome_root/src/third_party/jsr-305
+third_party_jstemplate home/chrome-bot/chrome_root/src/third_party/jstemplate
+third_party_junit home/chrome-bot/chrome_root/src/third_party/junit
+third_party_kasko home/chrome-bot/chrome_root/src/third_party/kasko
+third_party_khronos home/chrome-bot/chrome_root/src/third_party/khronos
+third_party_khronos_glcts home/chrome-bot/chrome_root/src/third_party/khronos_glcts
+third_party_lcov home/chrome-bot/chrome_root/src/third_party/lcov
+third_party_leakcanary home/chrome-bot/chrome_root/src/third_party/leakcanary
+third_party_leveldatabase home/chrome-bot/chrome_root/src/third_party/leveldatabase
+third_party_libaddressinput home/chrome-bot/chrome_root/src/third_party/libaddressinput
+third_party_libc++-static home/chrome-bot/chrome_root/src/third_party/libc++-static
+third_party_libFuzzer home/chrome-bot/chrome_root/src/third_party/libFuzzer
+third_party_libjingle home/chrome-bot/chrome_root/src/third_party/libjingle
+third_party_libjpeg home/chrome-bot/chrome_root/src/third_party/libjpeg
+third_party_libjpeg_turbo home/chrome-bot/chrome_root/src/third_party/libjpeg_turbo
+third_party_liblouis home/chrome-bot/chrome_root/src/third_party/liblouis
+third_party_libphonenumber home/chrome-bot/chrome_root/src/third_party/libphonenumber
+third_party_libpng home/chrome-bot/chrome_root/src/third_party/libpng
+third_party_libsecret home/chrome-bot/chrome_root/src/third_party/libsecret
+third_party_libsrtp home/chrome-bot/chrome_root/src/third_party/libsrtp
+third_party_libsync home/chrome-bot/chrome_root/src/third_party/libsync
+third_party_libudev home/chrome-bot/chrome_root/src/third_party/libudev
+third_party_libusb home/chrome-bot/chrome_root/src/third_party/libusb
+third_party_libva home/chrome-bot/chrome_root/src/third_party/libva
+third_party_libvpx home/chrome-bot/chrome_root/src/third_party/libvpx
+third_party_libwebm home/chrome-bot/chrome_root/src/third_party/libwebm
+third_party_libwebp home/chrome-bot/chrome_root/src/third_party/libwebp
+third_party_libxml home/chrome-bot/chrome_root/src/third_party/libxml
+third_party_libXNVCtrl home/chrome-bot/chrome_root/src/third_party/libXNVCtrl
+third_party_libxslt home/chrome-bot/chrome_root/src/third_party/libxslt
+third_party_libyuv home/chrome-bot/chrome_root/src/third_party/libyuv
+third_party_llvm-build home/chrome-bot/chrome_root/src/third_party/llvm-build
+third_party_logilab home/chrome-bot/chrome_root/src/third_party/logilab
+third_party_lss home/chrome-bot/chrome_root/src/third_party/lss
+third_party_lzma_sdk home/chrome-bot/chrome_root/src/third_party/lzma_sdk
+third_party_mach_override home/chrome-bot/chrome_root/src/third_party/mach_override
+third_party_markdown home/chrome-bot/chrome_root/src/third_party/markdown
+third_party_markupsafe home/chrome-bot/chrome_root/src/third_party/markupsafe
+third_party_mesa home/chrome-bot/chrome_root/src/third_party/mesa
+third_party_minigbm home/chrome-bot/chrome_root/src/third_party/minigbm
+third_party_mocha home/chrome-bot/chrome_root/src/third_party/mocha
+third_party_mockito home/chrome-bot/chrome_root/src/third_party/mockito
+third_party_modp_b64 home/chrome-bot/chrome_root/src/third_party/modp_b64
+third_party_molokocacao home/chrome-bot/chrome_root/src/third_party/molokocacao
+third_party_motemplate home/chrome-bot/chrome_root/src/third_party/motemplate
+third_party_mozilla home/chrome-bot/chrome_root/src/third_party/mozilla
+third_party_mt19937ar home/chrome-bot/chrome_root/src/third_party/mt19937ar
+third_party_netty4 home/chrome-bot/chrome_root/src/third_party/netty4
+third_party_netty-tcnative home/chrome-bot/chrome_root/src/third_party/netty-tcnative
+third_party_ocmock home/chrome-bot/chrome_root/src/third_party/ocmock
+third_party_openh264 home/chrome-bot/chrome_root/src/third_party/openh264
+third_party_openmax_dl home/chrome-bot/chrome_root/src/third_party/openmax_dl
+third_party_opus home/chrome-bot/chrome_root/src/third_party/opus
+third_party_ots home/chrome-bot/chrome_root/src/third_party/ots
+third_party_ow2_asm home/chrome-bot/chrome_root/src/third_party/ow2_asm
+third_party_pdfium home/chrome-bot/chrome_root/src/third_party/pdfium
+third_party_pexpect home/chrome-bot/chrome_root/src/third_party/pexpect
+third_party_ply home/chrome-bot/chrome_root/src/third_party/ply
+third_party_polymer home/chrome-bot/chrome_root/src/third_party/polymer
+third_party_PRESUBMIT.py home/chrome-bot/chrome_root/src/third_party/PRESUBMIT.py
+third_party_proguard home/chrome-bot/chrome_root/src/third_party/proguard
+third_party_protobuf home/chrome-bot/chrome_root/src/third_party/protobuf
+third_party_pycoverage home/chrome-bot/chrome_root/src/third_party/pycoverage
+third_party_pyelftools home/chrome-bot/chrome_root/src/third_party/pyelftools
+third_party_pyftpdlib home/chrome-bot/chrome_root/src/third_party/pyftpdlib
+third_party_pylint home/chrome-bot/chrome_root/src/third_party/pylint
+third_party_pymock home/chrome-bot/chrome_root/src/third_party/pymock
+third_party_python_gflags home/chrome-bot/chrome_root/src/third_party/python_gflags
+third_party_Python-Markdown home/chrome-bot/chrome_root/src/third_party/Python-Markdown
+third_party_py_trace_event home/chrome-bot/chrome_root/src/third_party/py_trace_event
+third_party_pywebsocket home/chrome-bot/chrome_root/src/third_party/pywebsocket
+third_party_qcms home/chrome-bot/chrome_root/src/third_party/qcms
+third_party_qunit home/chrome-bot/chrome_root/src/third_party/qunit
+third_party_re2 home/chrome-bot/chrome_root/src/third_party/re2
+third_party_requests home/chrome-bot/chrome_root/src/third_party/requests
+third_party_robolectric home/chrome-bot/chrome_root/src/third_party/robolectric
+third_party_scons-2.0.1 home/chrome-bot/chrome_root/src/third_party/scons-2.0.1
+third_party_sfntly home/chrome-bot/chrome_root/src/third_party/sfntly
+third_party_shaderc home/chrome-bot/chrome_root/src/third_party/shaderc
+third_party_simplejson home/chrome-bot/chrome_root/src/third_party/simplejson
+third_party_sinonjs home/chrome-bot/chrome_root/src/third_party/sinonjs
+third_party_skia home/chrome-bot/chrome_root/src/third_party/skia
+third_party_smhasher home/chrome-bot/chrome_root/src/third_party/smhasher
+third_party_snappy home/chrome-bot/chrome_root/src/third_party/snappy
+third_party_speech-dispatcher home/chrome-bot/chrome_root/src/third_party/speech-dispatcher
+third_party_SPIRV-Tools home/chrome-bot/chrome_root/src/third_party/SPIRV-Tools
+third_party_sqlite home/chrome-bot/chrome_root/src/third_party/sqlite
+third_party_sqlite4java home/chrome-bot/chrome_root/src/third_party/sqlite4java
+third_party_sudden_motion_sensor home/chrome-bot/chrome_root/src/third_party/sudden_motion_sensor
+third_party_swiftshader home/chrome-bot/chrome_root/src/third_party/swiftshader
+third_party_talloc home/chrome-bot/chrome_root/src/third_party/talloc
+third_party_tcmalloc home/chrome-bot/chrome_root/src/third_party/tcmalloc
+third_party_tlslite home/chrome-bot/chrome_root/src/third_party/tlslite
+third_party_typ home/chrome-bot/chrome_root/src/third_party/typ
+third_party_ub-uiautomator home/chrome-bot/chrome_root/src/third_party/ub-uiautomator
+third_party_usb_ids home/chrome-bot/chrome_root/src/third_party/usb_ids
+third_party_usrsctp home/chrome-bot/chrome_root/src/third_party/usrsctp
+third_party_v4l2capture home/chrome-bot/chrome_root/src/third_party/v4l2capture
+third_party_v4l-utils home/chrome-bot/chrome_root/src/third_party/v4l-utils
+third_party_vulkan home/chrome-bot/chrome_root/src/third_party/vulkan
+third_party_wayland home/chrome-bot/chrome_root/src/third_party/wayland
+third_party_wayland-protocols home/chrome-bot/chrome_root/src/third_party/wayland-protocols
+third_party_wds home/chrome-bot/chrome_root/src/third_party/wds
+third_party_web-animations-js home/chrome-bot/chrome_root/src/third_party/web-animations-js
+third_party_webdriver home/chrome-bot/chrome_root/src/third_party/webdriver
+third_party_webgl home/chrome-bot/chrome_root/src/third_party/webgl
+third_party_WebKit home/chrome-bot/chrome_root/src/third_party/WebKit
+third_party_webpagereplay home/chrome-bot/chrome_root/src/third_party/webpagereplay
+third_party_webrtc home/chrome-bot/chrome_root/src/third_party/webrtc
+third_party_webrtc_overrides home/chrome-bot/chrome_root/src/third_party/webrtc_overrides
+third_party_webtreemap home/chrome-bot/chrome_root/src/third_party/webtreemap
+third_party_widevine home/chrome-bot/chrome_root/src/third_party/widevine
+third_party_woff2 home/chrome-bot/chrome_root/src/third_party/woff2
+third_party_wtl home/chrome-bot/chrome_root/src/third_party/wtl
+third_party_x86inc home/chrome-bot/chrome_root/src/third_party/x86inc
+third_party_xdg-utils home/chrome-bot/chrome_root/src/third_party/xdg-utils
+third_party_yasm home/chrome-bot/chrome_root/src/third_party/yasm
+third_party_zlib home/chrome-bot/chrome_root/src/third_party/zlib
+android_webview home/chrome-bot/chrome_root/src/android_webview
+apps home/chrome-bot/chrome_root/src/apps
+ash home/chrome-bot/chrome_root/src/ash
+base home/chrome-bot/chrome_root/src/base
+blimp home/chrome-bot/chrome_root/src/blimp
+blink home/chrome-bot/chrome_root/src/blink
+breakpad home/chrome-bot/chrome_root/src/breakpad
+build home/chrome-bot/chrome_root/src/build
+build_overrides home/chrome-bot/chrome_root/src/build_overrides
+buildtools home/chrome-bot/chrome_root/src/buildtools
+cc home/chrome-bot/chrome_root/src/cc/
+chrome home/chrome-bot/chrome_root/src/chrome/
+chromecast home/chrome-bot/chrome_root/src/chromecast/
+chrome_elf home/chrome-bot/chrome_root/src/chrome_elf
+chromeos home/chrome-bot/chrome_root/src/chromeos
+components home/chrome-bot/chrome_root/src/components
+content home/chrome-bot/chrome_root/src/content
+courgette home/chrome-bot/chrome_root/src/courgette
+crypto home/chrome-bot/chrome_root/src/crypto
+data home/chrome-bot/chrome_root/src/data
+dbus home/chrome-bot/chrome_root/src/dbus
+DEPS home/chrome-bot/chrome_root/src/DEPS
+device home/chrome-bot/chrome_root/src/device
+docs home/chrome-bot/chrome_root/src/docs
+extensions home/chrome-bot/chrome_root/src/extensions
+gin home/chrome-bot/chrome_root/src/gin
+google_apis home/chrome-bot/chrome_root/src/google_apis
+google_update home/chrome-bot/chrome_root/src/google_update
+gpu home/chrome-bot/chrome_root/src/gpu
+headless home/chrome-bot/chrome_root/src/headless
+infra home/chrome-bot/chrome_root/src/infra
+internal_gyp home/chrome-bot/chrome_root/src/internal_gyp
+ios home/chrome-bot/chrome_root/src/ios
+ipc home/chrome-bot/chrome_root/src/ipc
+jingle home/chrome-bot/chrome_root/src/jingle
+mash home/chrome-bot/chrome_root/src/mash
+media home/chrome-bot/chrome_root/src/media
+mojo home/chrome-bot/chrome_root/src/mojo
+native_client home/chrome-bot/chrome_root/src/native_client
+native_client_sdk home/chrome-bot/chrome_root/src/native_client_sdk
+net home/chrome-bot/chrome_root/src/net
+out home/chrome-bot/chrome_root/src/out
+out_BOARD home/chrome-bot/chrome_root/src/out_BOARD
+pdf home/chrome-bot/chrome_root/src/pdf
+ppapi home/chrome-bot/chrome_root/src/ppapi
+printing home/chrome-bot/chrome_root/src/printing
+remoting home/chrome-bot/chrome_root/src/remoting
+rlz home/chrome-bot/chrome_root/src/rlz
+sandbox home/chrome-bot/chrome_root/src/sandbox
+sdch home/chrome-bot/chrome_root/src/sdch
+services home/chrome-bot/chrome_root/src/services
+skia home/chrome-bot/chrome_root/src/skia
+sql home/chrome-bot/chrome_root/src/sql
+storage home/chrome-bot/chrome_root/src/storage
+styleguide home/chrome-bot/chrome_root/src/styleguide
+sync home/chrome-bot/chrome_root/src/sync
+testing home/chrome-bot/chrome_root/src/testing
+tools home/chrome-bot/chrome_root/src/tools
+ui home/chrome-bot/chrome_root/src/ui
+url home/chrome-bot/chrome_root/src/url
+v8 home/chrome-bot/chrome_root/src/v8
+webkit home/chrome-bot/chrome_root/src/webkit
+third_party_kernel /mnt/host/source/src/third_party/kernel
+build_sys-kernel /build/BOARD/var/cache/portage/sys-kernel
+build_var_cache_portage /build/BOARD/var/cache/portage
+build_pepper_flash /build/BOARD/tmp/portage/chromeos-base/pepper-flash
+build_media_sound /build/BOARD/tmp/portage/media-sound/
+build_media_libs /build/BOARD/tmp/portage/media-libs/
+build_net_dns /build/BOARD/tmp/portage/net-dns
+build_sys_apps /build/BOARD/tmp/portage/sys-apps
+build_app_shells /build/BOARD/tmp/portage/app-shells
+build_x11_libs /build/BOARD/tmp/portage/x11-libs
+build_dev_libs /build/BOARD/tmp/portage/dev-libs
+build_dev_db /build/BOARD/tmp/portage/dev-db
+build_sys_libs /build/BOARD/tmp/portage/sys-libs
+build_app_arch /build/BOARD/tmp/portage/app-arch
+build_app_crypt /build/BOARD/tmp/portage/app-crypt
+build_rsyslog /build/BOARD/tmp/portage/app-admin/rsyslog
+build_net_misc /build/BOARD/tmp/portage/net-misc
+build_sys_fs /build/BOARD/tmp/portage/sys-fs
+build_update_engine /build/BOARD/tmp/portage/chromeos-base/update_engine
+build_libchrome /build/BOARD/tmp/portage/chromeos-base/libchrome
+build_gestures /build/BOARD/tmp/portage/chromeos-base/gestures
+build_libbrillo /build/BOARD/tmp/portage/chromeos-base/libbrillo
+build_shill /build/BOARD/tmp/portage/chromeos-base/shill
+build_libevdev /build/BOARD/tmp/portage/chromeos-base/libevdev
+build_chromeos_base /build/BOARD/tmp/portage/chromeos-base
+build_net_wireless /build/BOARD/tmp/portage/net-wireless
+build_sys_power /build/BOARD/tmp/portage/sys-power/
+build_tmp_portage /build/BOARD/tmp/portage
+usr_include /build/BOARD/usr/include
+blink_bindings /var/cache/chromeos-chrome/chrome-src-internal/src/out_BOARD/Release/gen/blink/bindings/
+var_cache /var/cache
+gcc_stl /usr/lib/gcc/x86_64-cros-linux-gnu/
+gcc_stl /mnt/host/source/src/third_party/gcc/
+libc /var/tmp/portage/cross-x86_64-cros-linux-gnu/
+libc sysdeps/
+libc nptl/
+others /
+others .
diff --git a/user_activity_benchmarks/process_hot_functions.py b/user_activity_benchmarks/process_hot_functions.py
new file mode 100755
index 00000000..2fbf3f93
--- /dev/null
+++ b/user_activity_benchmarks/process_hot_functions.py
@@ -0,0 +1,482 @@
+#!/usr/bin/python2
+
+# Copyright 2016 The Chromium OS Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+"""Processes the functions from the pprof(go/pprof) files and CWP(go/cwp) data.
+
+The pprof --top and pprof --tree outputs should be extracted from the benchmark
+profiles. The outputs contain the hot functions and the call chains.
+
+For each pair of pprof --top and --tree output files, the tool will create a
+file that contains the hot functions present also in the extracted CWP data.
+The common functions are organized in groups that represent a Chrome OS
+component. A function belongs to a group that is defined by a given file path
+if it is declared in a file that shares that path.
+
+A set of metrics are computed for each function, benchmark and Chrome OS group
+covered by a benchmark.
+
+Afterwards, this script extracts the functions that are present in the CWP
+data and not in the benchmark profiles. The extra functions are also groupped
+in Chrome OS components.
+"""
+
+from collections import defaultdict
+
+import argparse
+import os
+import shutil
+import sys
+
+import benchmark_metrics
+import utils
+
+
+class HotFunctionsProcessor(object):
+ """Does the pprof and CWP output processing.
+
+ Extracts the common, extra functions from the pprof files, groups them in
+ Chrome OS components. Computes the metrics for the common functions,
+ benchmark and Chrome OS groups covered by a benchmark.
+ """
+
+ def __init__(self, pprof_top_path, pprof_tree_path, cwp_inclusive_count_file,
+ cwp_pairwise_inclusive_count_file, cwp_function_groups_file,
+ common_functions_path, common_functions_groups_path,
+ benchmark_set_metrics_file, extra_cwp_functions_file,
+ extra_cwp_functions_groups_file,
+ extra_cwp_functions_groups_path):
+ """Initializes the HotFunctionsProcessor.
+
+ Args:
+ pprof_top_path: The directory containing the files with the pprof --top
+ output.
+ pprof_tree_path: The directory containing the files with the pprof --tree
+ output.
+ cwp_inclusive_count_file: The CSV file containing the CWP functions with
+ the inclusive count values.
+ cwp_pairwise_inclusive_count_file: The CSV file containing the CWP pairs
+ of parent and child functions with their inclusive count values.
+ cwp_function_groups_file: The file that contains the CWP function groups.
+ common_functions_path: The directory containing the CSV output files
+ with the common functions of the benchmark profiles and CWP data.
+ common_functions_groups_path: The directory containing the CSV output
+ files with the CWP groups and their metrics that match the common
+ functions of the benchmark profiles and CWP.
+ benchmark_set_metrics_file: The CSV output file containing the metrics for
+ each benchmark.
+ extra_cwp_functions_file: The CSV output file containing the functions
+ that are in the CWP data, but are not in any of the benchmark profiles.
+ extra_cwp_functions_groups_file: The CSV output file containing the groups
+ that match the extra CWP functions and their statistics.
+ extra_cwp_functions_groups_path: The directory containing the CSV output
+ files with the extra CWP functions that match a particular group.
+ """
+ self._pprof_top_path = pprof_top_path
+ self._pprof_tree_path = pprof_tree_path
+ self._cwp_inclusive_count_file = cwp_inclusive_count_file
+ self._cwp_pairwise_inclusive_count_file = cwp_pairwise_inclusive_count_file
+ self._cwp_function_groups_file = cwp_function_groups_file
+ self._common_functions_path = common_functions_path
+ self._common_functions_groups_path = common_functions_groups_path
+ self._benchmark_set_metrics_file = benchmark_set_metrics_file
+ self._extra_cwp_functions_file = extra_cwp_functions_file
+ self._extra_cwp_functions_groups_file = extra_cwp_functions_groups_file
+ self._extra_cwp_functions_groups_path = extra_cwp_functions_groups_path
+
+ def ProcessHotFunctions(self):
+ """Does the processing of the hot functions."""
+ with open(self._cwp_function_groups_file) as input_file:
+ cwp_function_groups = utils.ParseFunctionGroups(input_file.readlines())
+ cwp_statistics = \
+ self.ExtractCommonFunctions(self._pprof_top_path,
+ self._pprof_tree_path,
+ self._cwp_inclusive_count_file,
+ self._cwp_pairwise_inclusive_count_file,
+ cwp_function_groups,
+ self._common_functions_path,
+ self._common_functions_groups_path,
+ self._benchmark_set_metrics_file)
+ self.ExtractExtraFunctions(cwp_statistics, self._extra_cwp_functions_file)
+ self.GroupExtraFunctions(cwp_statistics, cwp_function_groups,
+ self._extra_cwp_functions_groups_path,
+ self._extra_cwp_functions_groups_file)
+
+ def ExtractCommonFunctions(self, pprof_top_path, pprof_tree_path,
+ cwp_inclusive_count_file,
+ cwp_pairwise_inclusive_count_file,
+ cwp_function_groups, common_functions_path,
+ common_functions_groups_path,
+ benchmark_set_metrics_file):
+ """Extracts the common functions of the benchmark profiles and the CWP data.
+
+ For each pair of pprof --top and --tree output files, it creates a separate
+ file with the same name containing the common functions specifications and
+ metrics, that will be placed in the common_functions_path directory.
+
+ The resulting file is in CSV format, containing the following fields:
+ function name, file name, object, inclusive count, inclusive_count_fraction,
+ flat, flat%, sum%, cum, cum%, distance and score.
+
+ For each pair of pprof files, an additional file is created with the
+ Chrome OS groups that match the common functions.
+
+ The file is in CSV format containing the fields: group name, group path,
+ the number of functions that match the group, the average and cumulative
+ distance, the average and cumulative score.
+ The file has the same name with the pprof file and it is placed in the
+ common_functions_groups_path directory.
+
+ For all the analyzed benchmarks, the method creates a CSV output file
+ containing the metrics for each benchmark. The CSV fields include the
+ benchmark name, the number of common functions, the average and
+ cumulative distance and score.
+
+ It builds a dict of the CWP statistics by calling the
+ utils.ParseCWPInclusiveCountFile method and if a function is common, it is
+ marked as a COMMON_FUNCTION.
+
+ Args:
+ pprof_top_path: The name of the directory with the files with the
+ pprof --top output.
+ pprof_tree_path: The name of the directory with the files with the
+ pprof --tree output.
+ cwp_inclusive_count_file: A dict with the inclusive count values.
+ cwp_pairwise_inclusive_count_file: A dict with the pairwise inclusive
+ count values.
+ cwp_function_groups: A list of tuples containing the name of the group
+ and the corresponding file path.
+ common_functions_path: The path containing the output files with the
+ common functions and their metrics.
+ common_functions_groups_path: The path containing the output files with
+ the Chrome OS groups that match the common functions and their metrics.
+ benchmark_set_metrics_file: The CSV output file containing the metrics for
+ all the analyzed benchmarks.
+
+ Returns:
+ A dict containing the CWP statistics with the common functions marked as
+ COMMON_FUNCTION.
+ """
+ cwp_inclusive_count_statistics = \
+ utils.ParseCWPInclusiveCountFile(cwp_inclusive_count_file)
+ cwp_pairwise_inclusive_count_statistics = \
+ utils.ParseCWPPairwiseInclusiveCountFile(
+ cwp_pairwise_inclusive_count_file)
+ cwp_inclusive_count_statistics_cumulative = \
+ utils.ComputeCWPCummulativeInclusiveStatistics(
+ cwp_inclusive_count_statistics)
+ cwp_pairwise_inclusive_count_fractions = \
+ utils.ComputeCWPChildFunctionsFractions(
+ cwp_inclusive_count_statistics_cumulative,
+ cwp_pairwise_inclusive_count_statistics)
+ benchmark_set_metrics = {}
+ pprof_files = os.listdir(pprof_top_path)
+
+ for pprof_file in pprof_files:
+ pprof_top_statistics = \
+ utils.ParsePprofTopOutput(os.path.join(pprof_top_path, pprof_file))
+ pprof_tree_statistics = \
+ utils.ParsePprofTreeOutput(os.path.join(pprof_tree_path, pprof_file))
+ common_functions_lines = []
+ benchmark_function_metrics = {}
+
+ for function_key, function_statistic in pprof_top_statistics.iteritems():
+ if function_key not in cwp_inclusive_count_statistics:
+ continue
+
+ cwp_dso_name, cwp_inclusive_count, cwp_inclusive_count_fraction, _ = \
+ cwp_inclusive_count_statistics[function_key]
+ cwp_inclusive_count_statistics[function_key] = \
+ (cwp_dso_name, cwp_inclusive_count, cwp_inclusive_count_fraction,
+ utils.COMMON_FUNCTION)
+
+ function_name, _ = function_key.split(',')
+ distance = benchmark_metrics.ComputeDistanceForFunction(
+ pprof_tree_statistics[function_key],
+ cwp_pairwise_inclusive_count_fractions.get(function_name, {}))
+ benchmark_cum_p = float(function_statistic[4])
+ score = benchmark_metrics.ComputeScoreForFunction(
+ distance, cwp_inclusive_count_fraction, benchmark_cum_p)
+ benchmark_function_metrics[function_key] = (distance, score)
+
+ common_functions_lines.append(','.join([function_key, cwp_dso_name, str(
+ cwp_inclusive_count), str(cwp_inclusive_count_fraction), ','.join(
+ function_statistic), str(distance), str(score)]))
+ benchmark_function_groups_statistics = \
+ benchmark_metrics.ComputeMetricsForComponents(
+ cwp_function_groups, benchmark_function_metrics)
+ benchmark_set_metrics[pprof_file] = \
+ benchmark_metrics.ComputeMetricsForBenchmark(
+ benchmark_function_metrics)
+
+ with open(os.path.join(common_functions_path, pprof_file), 'w') \
+ as output_file:
+ common_functions_lines.sort(
+ key=lambda x: float(x.split(',')[11]), reverse=True)
+ common_functions_lines.insert(0, 'function,file,dso,inclusive_count,'
+ 'inclusive_count_fraction,flat,flat%,'
+ 'sum%,cum,cum%,distance,score')
+ output_file.write('\n'.join(common_functions_lines))
+
+ with open(os.path.join(common_functions_groups_path, pprof_file), 'w') \
+ as output_file:
+ common_functions_groups_lines = \
+ [','.join([group_name, ','.join(
+ [str(statistic) for statistic in group_statistic])])
+ for group_name, group_statistic in
+ benchmark_function_groups_statistics.iteritems()]
+ common_functions_groups_lines.sort(
+ key=lambda x: float(x.split(',')[5]), reverse=True)
+ common_functions_groups_lines.insert(
+ 0, 'group_name,file_path,number_of_functions,distance_cum,'
+ 'distance_avg,score_cum,score_avg')
+ output_file.write('\n'.join(common_functions_groups_lines))
+
+ with open(benchmark_set_metrics_file, 'w') as output_file:
+ benchmark_set_metrics_lines = []
+
+ for benchmark_name, metrics in benchmark_set_metrics.iteritems():
+ benchmark_set_metrics_lines.append(','.join([benchmark_name, ','.join(
+ [str(metric) for metric in metrics])]))
+ benchmark_set_metrics_lines.sort(
+ key=lambda x: float(x.split(',')[4]), reverse=True)
+ benchmark_set_metrics_lines.insert(
+ 0, 'benchmark_name,number_of_functions,distance_cum,distance_avg,'
+ 'score_cum,score_avg')
+ output_file.write('\n'.join(benchmark_set_metrics_lines))
+
+ return cwp_inclusive_count_statistics
+
+ def GroupExtraFunctions(self, cwp_statistics, cwp_function_groups,
+ extra_cwp_functions_groups_path,
+ extra_cwp_functions_groups_file):
+ """Groups the extra functions.
+
+ Writes the data of the functions that belong to each group in a separate
+ file, sorted by their inclusive count value, in descending order. The file
+ name is the same as the group name.
+
+ The file is in CSV format, containing the fields: function name, file name,
+ object name, inclusive count, inclusive count fraction.
+
+ It creates a CSV file containing the name of the group, their
+ common path, the total inclusive count and inclusive count fraction values
+ of all the functions declared in files that share the common path, sorted
+ in descending order by the inclusive count value.
+
+ Args:
+ cwp_statistics: A dict containing the CWP statistics.
+ cwp_function_groups: A list of tuples with the groups names and the path
+ describing the groups.
+ extra_cwp_functions_groups_path: The name of the directory containing
+ the CSV output files with the extra CWP functions that match a
+ particular group.
+ extra_cwp_functions_groups_file: The CSV output file containing the groups
+ that match the extra functions and their statistics.
+ """
+ cwp_function_groups_statistics = defaultdict(lambda: ([], '', 0, 0.0))
+ for function, statistics in cwp_statistics.iteritems():
+ if statistics[3] == utils.COMMON_FUNCTION:
+ continue
+
+ file_name = function.split(',')[1]
+ group_inclusive_count = int(statistics[1])
+ group_inclusive_count_fraction = float(statistics[2])
+
+ for group in cwp_function_groups:
+ group_common_path = group[1]
+
+ if group_common_path not in file_name:
+ continue
+
+ group_name = group[0]
+ group_statistics = cwp_function_groups_statistics[group_name]
+ group_lines = group_statistics[0]
+ group_inclusive_count += group_statistics[2]
+ group_inclusive_count_fraction += group_statistics[3]
+
+ group_lines.append(','.join([function, statistics[0],
+ str(statistics[1]), str(statistics[2])]))
+ cwp_function_groups_statistics[group_name] = \
+ (group_lines, group_common_path, group_inclusive_count,
+ group_inclusive_count_fraction)
+ break
+
+ extra_cwp_functions_groups_lines = []
+ for group_name, group_statistics \
+ in cwp_function_groups_statistics.iteritems():
+ group_output_lines = group_statistics[0]
+ group_output_lines.sort(key=lambda x: int(x.split(',')[3]), reverse=True)
+ group_output_lines.insert(
+ 0, 'function,file,dso,inclusive_count,inclusive_count_fraction')
+ with open(os.path.join(extra_cwp_functions_groups_path, group_name),
+ 'w') as output_file:
+ output_file.write('\n'.join(group_output_lines))
+ extra_cwp_functions_groups_lines.append(','.join(
+ [group_name, group_statistics[1], str(group_statistics[2]), str(
+ group_statistics[3])]))
+
+ extra_cwp_functions_groups_lines.sort(
+ key=lambda x: int(x.split(',')[2]), reverse=True)
+ extra_cwp_functions_groups_lines.insert(
+ 0, 'group,shared_path,inclusive_count,inclusive_count_fraction')
+ with open(extra_cwp_functions_groups_file, 'w') as output_file:
+ output_file.write('\n'.join(extra_cwp_functions_groups_lines))
+
+ def ExtractExtraFunctions(self, cwp_statistics, extra_cwp_functions_file):
+ """Gets the functions that are in the CWP data, but not in the pprof output.
+
+ Writes the functions and their statistics in the extra_cwp_functions_file
+ file. The output is sorted based on the inclusive_count value. The file is
+ in CSV format, containing the fields: function name, file name, object name,
+ inclusive count and inclusive count fraction.
+
+ Args:
+ cwp_statistics: A dict containing the CWP statistics indexed by the
+ function and the file name, comma separated.
+ extra_cwp_functions_file: The file where it should be stored the CWP
+ functions and statistics that are marked as EXTRA_FUNCTION.
+ """
+ output_lines = []
+
+ for function, statistics in cwp_statistics.iteritems():
+ if statistics[3] == utils.EXTRA_FUNCTION:
+ output_lines.append(','.join([function, statistics[0],
+ str(statistics[1]), str(statistics[2])]))
+
+ with open(extra_cwp_functions_file, 'w') as output_file:
+ output_lines.sort(key=lambda x: int(x.split(',')[3]), reverse=True)
+ output_lines.insert(0, 'function,file,dso,inclusive_count,'
+ 'inclusive_count_fraction')
+ output_file.write('\n'.join(output_lines))
+
+
+def ParseArguments(arguments):
+ parser = argparse.ArgumentParser()
+
+ parser.add_argument(
+ '--pprof_top_path',
+ required=True,
+ help='The directory containing the files with the pprof --top output of '
+ 'the benchmark profiles (the hot functions). The name of the files '
+ 'should match with the ones from the pprof tree output files.')
+ parser.add_argument(
+ '--pprof_tree_path',
+ required=True,
+ help='The directory containing the files with the pprof --tree output '
+ 'of the benchmark profiles (the call chains). The name of the files '
+ 'should match with the ones of the pprof top output files.')
+ parser.add_argument(
+ '--cwp_inclusive_count_file',
+ required=True,
+ help='The CSV file containing the CWP hot functions with their '
+ 'inclusive_count values. The CSV fields include the name of the '
+ 'function, the file and the object with the definition, the inclusive '
+ 'count value and the inclusive count fraction out of the total amount of '
+ 'inclusive count values.')
+ parser.add_argument(
+ '--cwp_pairwise_inclusive_count_file',
+ required=True,
+ help='The CSV file containing the CWP pairs of parent and child '
+ 'functions with their inclusive count values. The CSV fields include the '
+ 'name of the parent and child functions concatenated by ;;, the file '
+ 'and the object with the definition of the child function, and the '
+ 'inclusive count value.')
+ parser.add_argument(
+ '--cwp_function_groups_file',
+ required=True,
+ help='The file that contains the CWP function groups. A line consists in '
+ 'the group name and a file path describing the group. A group must '
+ 'represent a ChromeOS component.')
+ parser.add_argument(
+ '--common_functions_path',
+ required=True,
+ help='The directory containing the CSV output files with the common '
+ 'functions of the benchmark profiles and CWP data. A file will contain '
+ 'all the hot functions from a pprof top output file that are also '
+ 'included in the file containing the cwp inclusive count values. The CSV '
+ 'fields are: the function name, the file and the object where the '
+ 'function is declared, the CWP inclusive count and inclusive count '
+ 'fraction values, the cumulative and average distance, the cumulative '
+ 'and average score. The files with the common functions will have the '
+ 'same names with the corresponding pprof output files.')
+ parser.add_argument(
+ '--common_functions_groups_path',
+ required=True,
+ help='The directory containing the CSV output files with the Chrome OS '
+ 'groups and their metrics that match the common functions of the '
+ 'benchmark profiles and CWP. The files with the groups will have the '
+ 'same names with the corresponding pprof output files. The CSV fields '
+ 'include the group name, group path, the number of functions that match '
+ 'the group, the average and cumulative distance, the average and '
+ 'cumulative score.')
+ parser.add_argument(
+ '--benchmark_set_metrics_file',
+ required=True,
+ help='The CSV output file containing the metrics for each benchmark. The '
+ 'CSV fields include the benchmark name, the number of common functions, '
+ 'the average and cumulative distance and score.')
+ parser.add_argument(
+ '--extra_cwp_functions_file',
+ required=True,
+ help='The CSV output file containing the functions that are in the CWP '
+ 'data, but are not in any of the benchmark profiles. The CSV fields '
+ 'include the name of the function, the file name and the object with the '
+ 'definition, and the CWP inclusive count and inclusive count fraction '
+ 'values. The entries are sorted in descending order based on the '
+ 'inclusive count value.')
+ parser.add_argument(
+ '--extra_cwp_functions_groups_file',
+ required=True,
+ help='The CSV output file containing the groups that match the extra CWP '
+ 'functions and their statistics. The CSV fields include the group name, '
+ 'the file path, the total inclusive count and inclusive count fraction '
+ 'values of the functions matching a particular group.')
+ parser.add_argument(
+ '--extra_cwp_functions_groups_path',
+ required=True,
+ help='The directory containing the CSV output files with the extra CWP '
+ 'functions that match a particular group. The name of the file is the '
+ 'same as the group name. The CSV fields include the name of the '
+ 'function, the file name and the object with the definition, and the CWP '
+ 'inclusive count and inclusive count fraction values. The entries are '
+ 'sorted in descending order based on the inclusive count value.')
+
+ options = parser.parse_args(arguments)
+
+ return options
+
+
+def Main(argv):
+ options = ParseArguments(argv)
+
+ if os.path.exists(options.common_functions_path):
+ shutil.rmtree(options.common_functions_path)
+
+ os.makedirs(options.common_functions_path)
+
+ if os.path.exists(options.common_functions_groups_path):
+ shutil.rmtree(options.common_functions_groups_path)
+
+ os.makedirs(options.common_functions_groups_path)
+
+ if os.path.exists(options.extra_cwp_functions_groups_path):
+ shutil.rmtree(options.extra_cwp_functions_groups_path)
+
+ os.makedirs(options.extra_cwp_functions_groups_path)
+
+ hot_functions_processor = HotFunctionsProcessor(
+ options.pprof_top_path, options.pprof_tree_path,
+ options.cwp_inclusive_count_file,
+ options.cwp_pairwise_inclusive_count_file,
+ options.cwp_function_groups_file, options.common_functions_path,
+ options.common_functions_groups_path, options.benchmark_set_metrics_file,
+ options.extra_cwp_functions_file, options.extra_cwp_functions_groups_file,
+ options.extra_cwp_functions_groups_path)
+
+ hot_functions_processor.ProcessHotFunctions()
+
+
+if __name__ == '__main__':
+ Main(sys.argv[1:])
diff --git a/user_activity_benchmarks/process_hot_functions_unittest.py b/user_activity_benchmarks/process_hot_functions_unittest.py
new file mode 100755
index 00000000..0ad248b1
--- /dev/null
+++ b/user_activity_benchmarks/process_hot_functions_unittest.py
@@ -0,0 +1,223 @@
+#!/usr/bin/python2
+
+# Copyright 2016 The Chromium OS Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+"""Unit tests for the process_hot_functions module."""
+
+from process_hot_functions import HotFunctionsProcessor, ParseArguments
+
+import mock
+import os
+import shutil
+import tempfile
+import unittest
+
+
+class ParseArgumentsTest(unittest.TestCase):
+ """Test class for command line argument parsing."""
+
+ def __init__(self, *args, **kwargs):
+ super(ParseArgumentsTest, self).__init__(*args, **kwargs)
+
+ def testParseArguments(self):
+ arguments = \
+ ['-p', 'dummy_pprof', '-c', 'dummy_common', '-e', 'dummy_extra', '-w',
+ 'dummy_cwp']
+ options = ParseArguments(arguments)
+
+ self.assertEqual(options.pprof_path, 'dummy_pprof')
+ self.assertEqual(options.cwp_hot_functions_file, 'dummy_cwp')
+ self.assertEqual(options.common_functions_path, 'dummy_common')
+ self.assertEqual(options.extra_cwp_functions_file, 'dummy_extra')
+
+ @mock.patch('sys.exit')
+ def testDeathParseArguments(self, sys_exit_method):
+ self.assertFalse(sys_exit_method.called)
+ ParseArguments([])
+ self.assertTrue(sys_exit_method.called)
+ self.assertNotEqual(sys_exit_method.return_value, 0)
+
+
+class HotFunctionsProcessorTest(unittest.TestCase):
+ """Test class for HotFunctionsProcessor class."""
+
+ def __init__(self, *args, **kwargs):
+ super(HotFunctionsProcessorTest, self).__init__(*args, **kwargs)
+ self._pprof_path = 'testdata/input/pprof'
+ self._cwp_functions_file = 'testdata/input/cwp_functions_file.csv'
+ self._cwp_functions_file_parsing = \
+ 'testdata/input/parse_cwp_statistics.csv'
+ self._common_functions_path = ''
+ self._expected_common_functions_path = 'testdata/expected/pprof_common'
+ self._extra_cwp_functions_file = ''
+ self._cwp_function_groups_file = 'testdata/input/cwp_function_groups'
+ self._cwp_function_groups_statistics_file = 'dummy'
+ self._cwp_function_groups_file_prefix = 'dummy'
+
+ def _CreateHotFunctionsProcessor(self,
+ extra_cwp_functions_file,
+ cwp_function_groups_file=None,
+ cwp_function_groups_statistics_file=None,
+ cwp_function_groups_file_prefix=None):
+ return HotFunctionsProcessor(self._pprof_path, self._cwp_functions_file,
+ self._common_functions_path,
+ extra_cwp_functions_file,
+ cwp_function_groups_file,
+ cwp_function_groups_statistics_file,
+ cwp_function_groups_file_prefix)
+
+ def checkFileContents(self, file_name, expected_content_lines):
+ with open(file_name, 'r') as input_file:
+ result_content_lines = input_file.readlines()
+ self.assertListEqual(expected_content_lines, result_content_lines)
+
+ @mock.patch.object(HotFunctionsProcessor, 'ExtractCommonFunctions')
+ @mock.patch.object(HotFunctionsProcessor, 'ExtractExtraFunctions')
+ @mock.patch.object(HotFunctionsProcessor, 'GroupExtraFunctions')
+ def testProcessHotFunctionsNoGroupping(self, group_functions_method,
+ extra_functions_method,
+ common_functions_method):
+ hot_functions_processor = self._CreateHotFunctionsProcessor(
+ self._extra_cwp_functions_file)
+
+ hot_functions_processor.ProcessHotFunctions()
+
+ self.assertTrue(common_functions_method.called)
+ self.assertTrue(extra_functions_method.called)
+ self.assertEqual(common_functions_method.call_count, 1)
+ self.assertEqual(extra_functions_method.call_count, 1)
+ self.assertFalse(group_functions_method.called)
+
+ @mock.patch.object(HotFunctionsProcessor, 'ExtractCommonFunctions')
+ @mock.patch.object(HotFunctionsProcessor, 'ExtractExtraFunctions')
+ @mock.patch.object(HotFunctionsProcessor, 'GroupExtraFunctions')
+ def testProcessHotFunctionsGroupping(self, group_functions_method,
+ extra_functions_method,
+ common_functions_method):
+ hot_functions_processor = self._CreateHotFunctionsProcessor(
+ self._extra_cwp_functions_file, self._cwp_function_groups_file,
+ self._cwp_function_groups_statistics_file,
+ self._cwp_function_groups_file_prefix)
+
+ hot_functions_processor.ProcessHotFunctions()
+
+ self.assertTrue(common_functions_method.called)
+ self.assertTrue(extra_functions_method.called)
+ self.assertEqual(common_functions_method.call_count, 1)
+ self.assertEqual(extra_functions_method.call_count, 1)
+ self.assertTrue(group_functions_method.called)
+ self.assertEqual(group_functions_method.call_count, 1)
+
+ def testParseCWPStatistics(self):
+ cwp_statistics = {'dummy_method1,dummy_file1': ('dummy_object1,1', 0),
+ 'dummy_method2,dummy_file2': ('dummy_object2,2', 0),
+ 'dummy_method3,dummy_file3': ('dummy_object3,3', 0),
+ 'dummy_method4,dummy_file4': ('dummy_object4,4', 0)}
+ hot_functions_processor = self._CreateHotFunctionsProcessor(
+ self._extra_cwp_functions_file)
+ result = hot_functions_processor.ParseCWPStatistics(
+ self._cwp_functions_file_parsing)
+
+ self.assertDictEqual(result, cwp_statistics)
+
+ def testExtractCommonFunctions(self):
+ hot_functions_processor = self._CreateHotFunctionsProcessor(
+ self._extra_cwp_functions_file)
+ common_functions_path = tempfile.mkdtemp()
+ hot_functions_processor.ExtractCommonFunctions(self._pprof_path,
+ common_functions_path,
+ self._cwp_functions_file)
+ expected_files = \
+ [os.path.join(self._expected_common_functions_path, expected_file)
+ for expected_file in os.listdir(self._expected_common_functions_path)]
+ result_files = \
+ [os.path.join(common_functions_path, result_file)
+ for result_file in os.listdir(common_functions_path)]
+
+ expected_files.sort()
+ result_files.sort()
+
+ for expected_file_name, result_file_name in \
+ zip(expected_files, result_files):
+ with open(expected_file_name) as expected_file:
+ expected_output_lines = expected_file.readlines()
+ self.checkFileContents(result_file_name, expected_output_lines)
+ shutil.rmtree(common_functions_path)
+
+ def testExtractExtraFunctions(self):
+ cwp_statistics = {'dummy_method1,dummy_file1': ('dummy_object1,1', 0),
+ 'dummy_method2,dummy_file2': ('dummy_object2,2', 1),
+ 'dummy_method3,dummy_file3': ('dummy_object3,3', 1),
+ 'dummy_method4,dummy_file4': ('dummy_object4,4', 0)}
+ expected_output_lines = ['function,file,dso,inclusive_count\n',
+ 'dummy_method4,dummy_file4,dummy_object4,4\n',
+ 'dummy_method1,dummy_file1,dummy_object1,1']
+ temp_file, temp_filename = tempfile.mkstemp()
+ os.close(temp_file)
+ hot_functions_processor = self._CreateHotFunctionsProcessor(temp_filename)
+
+ hot_functions_processor.ExtractExtraFunctions(cwp_statistics, temp_filename)
+ self.checkFileContents(temp_filename, expected_output_lines)
+ os.remove(temp_filename)
+
+ def testParseFunctionGroups(self):
+ cwp_function_groups_lines = ['group1 /a\n', 'group2 /b\n', 'group3 /c\n',
+ 'group4 /d\n']
+ expected_output = [('group1', '/a', 0, []), ('group2', '/b', 0, []),
+ ('group3', '/c', 0, []), ('group4', '/d', 0, [])]
+ result = HotFunctionsProcessor.ParseFunctionGroups(
+ cwp_function_groups_lines)
+ self.assertListEqual(expected_output, result)
+
+ def testGroupExtraFunctions(self):
+ cwp_statistics = {'dummy_method1,/a/b': ('dummy_object1,1', 1),
+ 'dummy_method2,/c/d': ('dummy_object2,2', 0),
+ 'dummy_method3,/a/b': ('dummy_object3,3', 0),
+ 'dummy_method4,/c/d': ('dummy_object4,4', 1),
+ 'dummy_method5,/a/b': ('dummy_object5,5', 0),
+ 'dummy_method6,/e': ('dummy_object6,6', 0),
+ 'dummy_method7,/c/d': ('dummy_object7,7', 0),
+ 'dummy_method8,/e': ('dummy_object8,8', 0)}
+ cwp_groups_statistics_file, \
+ cwp_groups_statistics_filename = tempfile.mkstemp()
+
+ os.close(cwp_groups_statistics_file)
+
+ cwp_groups_file_path = tempfile.mkdtemp()
+ cwp_groups_file_prefix = os.path.join(cwp_groups_file_path, 'dummy')
+ hot_functions_processor = self._CreateHotFunctionsProcessor(
+ self._extra_cwp_functions_file)
+
+ hot_functions_processor.GroupExtraFunctions(cwp_statistics,
+ cwp_groups_file_prefix,
+ self._cwp_function_groups_file,
+ cwp_groups_statistics_filename)
+
+ expected_group_ab_lines = ['function,file,dso,inclusive_count\n',
+ 'dummy_method5,/a/b,dummy_object5,5\n',
+ 'dummy_method3,/a/b,dummy_object3,3']
+ expected_group_cd_lines = ['function,file,dso,inclusive_count\n',
+ 'dummy_method7,/c/d,dummy_object7,7\n',
+ 'dummy_method2,/c/d,dummy_object2,2']
+ expected_group_e_lines = ['function,file,dso,inclusive_count\n',
+ 'dummy_method8,/e,dummy_object8,8\n',
+ 'dummy_method6,/e,dummy_object6,6']
+ expected_group_statistics_lines = ['group,shared_path,inclusive_count\n',
+ 'e,/e,14\n', 'cd,/c/d,9\n', 'ab,/a/b,8']
+
+ self.checkFileContents('%sab' % (cwp_groups_file_prefix,),
+ expected_group_ab_lines)
+ self.checkFileContents('%scd' % (cwp_groups_file_prefix,),
+ expected_group_cd_lines)
+ self.checkFileContents('%se' % (cwp_groups_file_prefix,),
+ expected_group_e_lines)
+ self.checkFileContents(cwp_groups_statistics_filename,
+ expected_group_statistics_lines)
+
+ shutil.rmtree(cwp_groups_file_path)
+ os.remove(cwp_groups_statistics_filename)
+
+
+if __name__ == '__main__':
+ unittest.main()
diff --git a/user_activity_benchmarks/select_hot_functions.sql b/user_activity_benchmarks/select_hot_functions.sql
new file mode 100644
index 00000000..d121d619
--- /dev/null
+++ b/user_activity_benchmarks/select_hot_functions.sql
@@ -0,0 +1,27 @@
+-- Collects the function, with its file, the object and inclusive count value.
+-- The limits here are entirely arbitrary.
+-- For more background, look at
+-- https://sites.google.com/a/google.com/cwp/about/callgraphs.
+SELECT
+ frame.function_name AS function,
+ frame.filename AS file,
+ frame.load_module_path AS dso,
+ sum(frame.inclusive_count) AS inclusive_count
+FROM
+ -- Collect the data stored in CWP over the last 30 days.
+ FLATTEN(chromeos_wide_profiling.sampledb.cycles.callgraph.last30days, frame)
+WHERE
+ meta.cros.report_id % UINT64("1") == 0
+ -- The reports were collected periodically.
+ AND meta.cros.collection_info.trigger_event == 1
+ AND `profile.duration_usec` < 2100000
+ -- The reports were from a busy machine.
+ AND session.total_count > 2000
+ -- The reports are from the gnawty board, x86_64 architecture.
+ AND meta.cros.board == "gnawty"
+ AND meta.cros.cpu_architecture == "x86_64"
+ -- The reports include callchain data.
+ AND left(meta.cros.version, 4) > "6970"
+ GROUP BY function, dso, file
+ORDER BY `inclusive_count` DESC
+LIMIT 50000 ;
diff --git a/user_activity_benchmarks/select_optimal_benchmark_set.py b/user_activity_benchmarks/select_optimal_benchmark_set.py
new file mode 100755
index 00000000..1c8305cf
--- /dev/null
+++ b/user_activity_benchmarks/select_optimal_benchmark_set.py
@@ -0,0 +1,347 @@
+#!/usr/bin/python2
+
+# Copyright 2016 The Chromium OS Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+"""Selects the optimal set of benchmarks.
+
+For each benchmark, there is a file with the common functions, as extracted by
+the process_hot_functions module.
+
+The script receives as input the CSV file with the CWP inclusive count values,
+the file with Chrome OS groups and the path containing a file with common
+functions for every benchmark.
+
+It extracts for every benchmark and for the CWP data all the functions that
+match the given Chrome OS groups.
+
+It generates all possible combinations of benchmark sets of a given size and
+it computes for every set a metric.
+It outputs the optimal sets, based on which ones have the best metric.
+
+Three different metrics have been used: function count, distance
+variation and score.
+
+For the function count metric, we count the unique functions covered by a
+set of benchmarks. Besides the number of unique functions, we compute also
+the fraction of unique functions out of the amount of CWP functions from the
+given groups. The benchmark set with the highest amount of unique functions
+that belong to all the given groups is considered better.
+
+For the distance variation metric, we compute the sum of the distance variations
+of the functions covered by a set of benchmarks. We define the distance
+variation as the difference between the distance value of a function and the
+ideal distance value (1.0). If a function appears in multiple common functions
+files, we consider only the minimum value. We compute also the distance
+variation per function. The set that has the smaller value for the
+distance variation per function is considered better.
+
+For the score metric, we compute the sum of the scores of the functions from a
+set of benchmarks. If a function appears in multiple common functions files,
+we consider only the maximum value. We compute also the fraction of this sum
+from the sum of all the scores of the functions from the CWP data covering the
+given groups, in the ideal case (the ideal score of a function is 1.0).
+
+We compute the metrics in the same manner for individual Chrome OS groups.
+"""
+
+from collections import defaultdict
+
+import argparse
+import csv
+import itertools
+import json
+import operator
+import os
+import sys
+
+import benchmark_metrics
+import utils
+
+
+class BenchmarkSet(object):
+ """Selects the optimal set of benchmarks of given size."""
+
+ # Constants that specify the metric type.
+ FUNCTION_COUNT_METRIC = 'function_count'
+ DISTANCE_METRIC = 'distance_variation'
+ SCORE_METRIC = 'score_fraction'
+
+ def __init__(self, benchmark_set_size, benchmark_set_output_file,
+ benchmark_set_common_functions_path, cwp_inclusive_count_file,
+ cwp_function_groups_file, metric):
+ """Initializes the BenchmarkSet.
+
+ Args:
+ benchmark_set_size: Constant representing the size of a benchmark set.
+ benchmark_set_output_file: The output file that will contain the set of
+ optimal benchmarks with the metric values.
+ benchmark_set_common_functions_path: The directory containing the files
+ with the common functions for the list of benchmarks.
+ cwp_inclusive_count_file: The CSV file containing the CWP functions with
+ their inclusive count values.
+ cwp_function_groups_file: The file that contains the CWP function groups.
+ metric: The type of metric used for the analysis.
+ """
+ self._benchmark_set_size = int(benchmark_set_size)
+ self._benchmark_set_output_file = benchmark_set_output_file
+ self._benchmark_set_common_functions_path = \
+ benchmark_set_common_functions_path
+ self._cwp_inclusive_count_file = cwp_inclusive_count_file
+ self._cwp_function_groups_file = cwp_function_groups_file
+ self._metric = metric
+
+ @staticmethod
+ def OrganizeCWPFunctionsInGroups(cwp_inclusive_count_statistics,
+ cwp_function_groups):
+ """Selects the CWP functions that match the given Chrome OS groups.
+
+ Args:
+ cwp_inclusive_count_statistics: A dict with the CWP functions.
+ cwp_function_groups: A list with the CWP function groups.
+
+ Returns:
+ A dict having as a key the name of the groups and as a value the list of
+ CWP functions that match an individual group.
+ """
+ cwp_functions_grouped = defaultdict(list)
+ for function_key in cwp_inclusive_count_statistics:
+ _, file_name = function_key.split(',')
+ for group_name, file_path in cwp_function_groups:
+ if file_path not in file_name:
+ continue
+ cwp_functions_grouped[group_name].append(function_key)
+ break
+ return cwp_functions_grouped
+
+ @staticmethod
+ def OrganizeBenchmarkSetFunctionsInGroups(benchmark_set_files,
+ benchmark_set_common_functions_path,
+ cwp_function_groups):
+ """Selects the benchmark functions that match the given Chrome OS groups.
+
+ Args:
+ benchmark_set_files: The list of common functions files corresponding to a
+ benchmark.
+ benchmark_set_common_functions_path: The directory containing the files
+ with the common functions for the list of benchmarks.
+ cwp_function_groups: A list with the CWP function groups.
+
+ Returns:
+ A dict having as a key the name of a common functions file. The value is
+ a dict having as a key the name of a group and as value a list of
+ functions that match the given group.
+ """
+
+ benchmark_set_functions_grouped = {}
+ for benchmark_file_name in benchmark_set_files:
+ benchmark_full_file_path = \
+ os.path.join(benchmark_set_common_functions_path,
+ benchmark_file_name)
+ with open(benchmark_full_file_path) as input_file:
+ statistics_reader = \
+ csv.DictReader(input_file, delimiter=',')
+ benchmark_functions_grouped = defaultdict(dict)
+ for statistic in statistics_reader:
+ function_name = statistic['function']
+ file_name = statistic['file']
+ for group_name, file_path in cwp_function_groups:
+ if file_path not in file_name:
+ continue
+ function_key = ','.join([function_name, file_name])
+ distance = float(statistic['distance'])
+ score = float(statistic['score'])
+ benchmark_functions_grouped[group_name][function_key] = \
+ (distance, score)
+ break
+ benchmark_set_functions_grouped[benchmark_file_name] = \
+ benchmark_functions_grouped
+ return benchmark_set_functions_grouped
+
+ @staticmethod
+ def SelectOptimalBenchmarkSetBasedOnMetric(all_benchmark_combinations_sets,
+ benchmark_set_functions_grouped,
+ cwp_functions_grouped,
+ metric_function_for_set,
+ metric_comparison_operator,
+ metric_default_value,
+ metric_string):
+ """Generic method that selects the optimal benchmark set based on a metric.
+
+ The reason of implementing a generic function is to avoid logic duplication
+ for selecting a benchmark set based on the three different metrics.
+
+ Args:
+ all_benchmark_combinations_sets: The list with all the sets of benchmark
+ combinations.
+ benchmark_set_functions_grouped: A dict with benchmark functions as
+ returned by OrganizeBenchmarkSetFunctionsInGroups.
+ cwp_functions_grouped: A dict with the CWP functions as returned by
+ OrganizeCWPFunctionsInGroups.
+ metric_function_for_set: The method used to compute the metric for a given
+ benchmark set.
+ metric_comparison_operator: A comparison operator used to compare two
+ values of the same metric (i.e: operator.lt or operator.gt).
+ metric_default_value: The default value for the metric.
+ metric_string: A tuple of strings used in the JSON output for the pair of
+ the values of the metric.
+
+ Returns:
+ A list of tuples containing for each optimal benchmark set. A tuple
+ contains the list of benchmarks from the set, the pair of metric values
+ and a dictionary with the metrics for each group.
+ """
+ optimal_sets = [([], metric_default_value, {})]
+
+ for benchmark_combination_set in all_benchmark_combinations_sets:
+ function_metrics = [benchmark_set_functions_grouped[benchmark]
+ for benchmark in benchmark_combination_set]
+ set_metrics, set_groups_metrics = \
+ metric_function_for_set(function_metrics, cwp_functions_grouped,
+ metric_string)
+ optimal_value = optimal_sets[0][1][0]
+ if metric_comparison_operator(set_metrics[0], optimal_value):
+ optimal_sets = \
+ [(benchmark_combination_set, set_metrics, set_groups_metrics)]
+ elif set_metrics[0] == optimal_sets[0][1][0]:
+ optimal_sets.append(
+ (benchmark_combination_set, set_metrics, set_groups_metrics))
+
+ return optimal_sets
+
+ def SelectOptimalBenchmarkSet(self):
+ """Selects the optimal benchmark sets and writes them in JSON format.
+
+ Parses the CWP inclusive count statistics and benchmark common functions
+ files. Organizes the functions into groups. For every optimal benchmark
+ set, the method writes in the self._benchmark_set_output_file the list of
+ benchmarks, the pair of metrics and a dictionary with the pair of
+ metrics for each group covered by the benchmark set.
+ """
+
+ benchmark_set_files = os.listdir(self._benchmark_set_common_functions_path)
+ all_benchmark_combinations_sets = \
+ itertools.combinations(benchmark_set_files, self._benchmark_set_size)
+
+ with open(self._cwp_function_groups_file) as input_file:
+ cwp_function_groups = utils.ParseFunctionGroups(input_file.readlines())
+
+ cwp_inclusive_count_statistics = \
+ utils.ParseCWPInclusiveCountFile(self._cwp_inclusive_count_file)
+ cwp_functions_grouped = self.OrganizeCWPFunctionsInGroups(
+ cwp_inclusive_count_statistics, cwp_function_groups)
+ benchmark_set_functions_grouped = \
+ self.OrganizeBenchmarkSetFunctionsInGroups(
+ benchmark_set_files, self._benchmark_set_common_functions_path,
+ cwp_function_groups)
+
+ if self._metric == self.FUNCTION_COUNT_METRIC:
+ metric_function_for_benchmark_set = \
+ benchmark_metrics.ComputeFunctionCountForBenchmarkSet
+ metric_comparison_operator = operator.gt
+ metric_default_value = (0, 0.0)
+ metric_string = ('function_count', 'function_count_fraction')
+ elif self._metric == self.DISTANCE_METRIC:
+ metric_function_for_benchmark_set = \
+ benchmark_metrics.ComputeDistanceForBenchmarkSet
+ metric_comparison_operator = operator.lt
+ metric_default_value = (float('inf'), float('inf'))
+ metric_string = \
+ ('distance_variation_per_function', 'total_distance_variation')
+ elif self._metric == self.SCORE_METRIC:
+ metric_function_for_benchmark_set = \
+ benchmark_metrics.ComputeScoreForBenchmarkSet
+ metric_comparison_operator = operator.gt
+ metric_default_value = (0.0, 0.0)
+ metric_string = ('score_fraction', 'total_score')
+ else:
+ raise ValueError("Invalid metric")
+
+ optimal_benchmark_sets = \
+ self.SelectOptimalBenchmarkSetBasedOnMetric(
+ all_benchmark_combinations_sets, benchmark_set_functions_grouped,
+ cwp_functions_grouped, metric_function_for_benchmark_set,
+ metric_comparison_operator, metric_default_value, metric_string)
+
+ json_output = []
+
+ for benchmark_set in optimal_benchmark_sets:
+ json_entry = {
+ 'benchmark_set':
+ list(benchmark_set[0]),
+ 'metrics': {
+ metric_string[0]: benchmark_set[1][0],
+ metric_string[1]: benchmark_set[1][1]
+ },
+ 'groups':
+ dict(benchmark_set[2])
+ }
+ json_output.append(json_entry)
+
+ with open(self._benchmark_set_output_file, 'w') as output_file:
+ json.dump(json_output, output_file)
+
+
+def ParseArguments(arguments):
+ parser = argparse.ArgumentParser()
+
+ parser.add_argument(
+ '--benchmark_set_common_functions_path',
+ required=True,
+ help='The directory containing the CSV files with the common functions '
+ 'of the benchmark profiles and CWP data. A file will contain all the hot '
+ 'functions from a pprof top output file that are also included in the '
+ 'file containing the cwp inclusive count values. The CSV fields are: the '
+ 'function name, the file and the object where the function is declared, '
+ 'the CWP inclusive count and inclusive count fraction values, the '
+ 'cumulative and average distance, the cumulative and average score. The '
+ 'files with the common functions will have the same names with the '
+ 'corresponding pprof output files.')
+ parser.add_argument(
+ '--cwp_inclusive_count_file',
+ required=True,
+ help='The CSV file containing the CWP hot functions with their '
+ 'inclusive_count values. The CSV fields include the name of the '
+ 'function, the file and the object with the definition, the inclusive '
+ 'count value and the inclusive count fraction out of the total amount of '
+ 'inclusive count values.')
+ parser.add_argument(
+ '--benchmark_set_size',
+ required=True,
+ help='The size of the benchmark sets.')
+ parser.add_argument(
+ '--benchmark_set_output_file',
+ required=True,
+ help='The JSON output file containing optimal benchmark sets with their '
+ 'metrics. For every optimal benchmark set, the file contains the list of '
+ 'benchmarks, the pair of metrics and a dictionary with the pair of '
+ 'metrics for each group covered by the benchmark set.')
+ parser.add_argument(
+ '--metric',
+ required=True,
+ help='The metric used to select the optimal benchmark set. The possible '
+ 'values are: distance_variation, function_count and score_fraction.')
+ parser.add_argument(
+ '--cwp_function_groups_file',
+ required=True,
+ help='The file that contains the CWP function groups. A line consists in '
+ 'the group name and a file path describing the group. A group must '
+ 'represent a Chrome OS component.')
+
+ options = parser.parse_args(arguments)
+
+ return options
+
+
+def Main(argv):
+ options = ParseArguments(argv)
+ benchmark_set = BenchmarkSet(options.benchmark_set_size,
+ options.benchmark_set_output_file,
+ options.benchmark_set_common_functions_path,
+ options.cwp_inclusive_count_file,
+ options.cwp_function_groups_file, options.metric)
+ benchmark_set.SelectOptimalBenchmarkSet()
+
+
+if __name__ == '__main__':
+ Main(sys.argv[1:])
diff --git a/user_activity_benchmarks/symbolize_profiles.sh b/user_activity_benchmarks/symbolize_profiles.sh
new file mode 100755
index 00000000..904cc1ba
--- /dev/null
+++ b/user_activity_benchmarks/symbolize_profiles.sh
@@ -0,0 +1,32 @@
+#!/bin/bash
+
+# Copyright 2016 The Chromium OS Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+# Uses local_cwp to do the profile symbolization.
+# The profiles that need to be symbolized are placed in the profiles_path.
+# The results are placed in the local_cwp_results_path.
+
+set -e
+
+if [ "$#" -ne 3 ]; then
+ echo "USAGE: symbolize_profiles.sh profiles_path local_cwp_binary_path " \
+ "local_cwp_results_path"
+ exit 1
+fi
+
+readonly PROFILES_PATH=$1
+readonly LOCAL_CWP_BINARY_PATH=$2
+readonly LOCAL_CWP_RESULTS_PATH=$3
+readonly PROFILES=$(ls $PROFILES_PATH)
+
+for profile in "${PROFILES[@]}"
+do
+ $LOCAL_CWP_BINARY_PATH --output="$LOCAL_CWP_RESULTS_PATH/${profile}.pb.gz" \
+ "$PROFILES_PATH/$profile"
+ if [ $? -ne 0 ]; then
+ echo "Failed to symbolize the perf profile output with local_cwp for " \
+ "$profile."
+ continue
+ fi
+done
diff --git a/user_activity_benchmarks/telemetry_benchmarks_R52_8350.68 b/user_activity_benchmarks/telemetry_benchmarks_R52_8350.68
new file mode 100644
index 00000000..0177dabf
--- /dev/null
+++ b/user_activity_benchmarks/telemetry_benchmarks_R52_8350.68
@@ -0,0 +1,113 @@
+blink_perf.bindings
+blink_perf.canvas
+blink_perf.css
+blink_perf.dom
+blink_perf.events
+blink_perf.layout
+blink_perf.paint
+blink_perf.parser
+blink_perf.shadow_dom
+blink_perf.svg
+blink_style.top_25
+blob_storage.blob_storage
+dromaeo.cssqueryjquery
+dromaeo.domcoreattr
+dromaeo.domcoremodify
+dromaeo.domcorequery
+dromaeo.domcoretraverse
+dromaeo.jslibattrjquery
+dromaeo.jslibattrprototype
+dromaeo.jslibeventjquery
+dromaeo.jslibeventprototype
+dromaeo.jslibmodifyjquery
+dromaeo.jslibmodifyprototype
+dromaeo.jslibstylejquery
+dromaeo.jslibstyleprototype
+dromaeo.jslibtraversejquery
+dromaeo.jslibtraverseprototype
+dummy_benchmark.noisy_benchmark_1
+dummy_benchmark.stable_benchmark_1
+image_decoding.image_decoding_measurement
+indexeddb_perf
+jetstream
+jitter
+kraken
+media.chromeOS4kOnly.tough_video_cases
+media.chromeOS.tough_video_cases
+media.media_cns_cases
+media.mse_cases
+media.tough_video_cases_extra
+media.tough_video_cases
+memory.long_running_idle_gmail_background_tbmv2
+memory.long_running_idle_gmail_tbmv2
+memory.top_7_stress
+octane
+oilpan_gc_times.tough_animation_cases
+oortonline
+page_cycler.basic_oopif
+page_cycler.intl_hi_ru
+page_cycler.intl_ko_th_vi
+page_cycler_site_isolation.basic_oopif
+page_cycler.typical_25
+page_cycler_v2.basic_oopif
+page_cycler_v2.intl_ar_fa_he
+page_cycler_v2.intl_es_fr_pt-BR
+page_cycler_v2.intl_hi_ru
+page_cycler_v2.intl_ja_zh
+page_cycler_v2.intl_ko_th_vi
+page_cycler_v2_site_isolation.basic_oopif
+page_cycler_v2.top_10_mobile
+page_cycler_v2.typical_25
+rasterize_and_record_micro.key_mobile_sites_smooth
+rasterize_and_record_micro.key_silk_cases
+rasterize_and_record_micro.top_25_smooth
+robohornet_pro
+scheduler.tough_scheduling_cases
+service_worker.service_worker_micro_benchmark
+service_worker.service_worker
+smoothness.gpu_rasterization_and_decoding.image_decoding_cases
+smoothness.gpu_rasterization.tough_filters_cases
+smoothness.gpu_rasterization.tough_path_rendering_cases
+smoothness.image_decoding_cases
+smoothness.key_desktop_move_cases
+smoothness.scrolling_tough_ad_case
+smoothness.scrolling_tough_ad_cases
+smoothness.top_25_smooth
+smoothness.tough_ad_cases
+spaceport
+speedometer-ignition
+speedometer
+startup.cold.blank_page
+startup.large_profile.cold.blank_page
+startup.large_profile.warm.blank_page
+startup.large_profile.warm.blank
+startup.warm.blank_page
+start_with_ext.cold.blank_page
+start_with_ext.warm.blank_page
+storage.indexeddb_endure
+storage.indexeddb_endure_tracing
+sunspider
+system_health.memory_mobile
+tab_switching.five_blank_pages
+tab_switching.top_10
+tab_switching.tough_energy_cases
+tab_switching.tough_image_cases
+tab_switching.typical_25
+thread_times.tough_compositor_cases
+thread_times.tough_scrolling_cases
+top_10_mobile_memory_ignition
+top_10_mobile_memory
+tracing.tracing_with_background_memory_infra
+tracing.tracing_with_debug_overhead
+v8.browsing_mobile
+v8.detached_context_age_in_gc
+v8.google
+v8.infinite_scroll-ignition_tbmv2
+v8.infinite_scroll_tbmv2
+v8.todomvc-ignition
+v8.todomvc
+v8.top_25_smooth
+webrtc.datachannel
+webrtc.getusermedia
+webrtc.peerconnection
+webrtc.webrtc_smoothness
diff --git a/user_activity_benchmarks/testdata/expected/pprof_common/file1.pprof b/user_activity_benchmarks/testdata/expected/pprof_common/file1.pprof
new file mode 100644
index 00000000..30d4c83a
--- /dev/null
+++ b/user_activity_benchmarks/testdata/expected/pprof_common/file1.pprof
@@ -0,0 +1,3 @@
+function,file,dso,inclusive_count,flat,flat%,sum%,cum,cum%
+blink::ElementV8Internal::getAttributeMethodCallback,/var/cache/chromeos-chrome/chrome-src-internal/src/out_gnawty/Release/gen/blink/bindings/core/v8/V8Element.cpp,debug/opt/google/chrome/chrome,30638548,3007599556,0.81%,42.16%,13057167098,3.51%
+base::RunLoop::Run,/home/chrome-bot/chrome_root/src/base/run_loop.cc,/opt/google/chrome/chrome,21484525,2725201614,0.73%,45.17%,3511333688,0.94% \ No newline at end of file
diff --git a/user_activity_benchmarks/testdata/expected/pprof_common/file2.pprof b/user_activity_benchmarks/testdata/expected/pprof_common/file2.pprof
new file mode 100644
index 00000000..bef92666
--- /dev/null
+++ b/user_activity_benchmarks/testdata/expected/pprof_common/file2.pprof
@@ -0,0 +1,2 @@
+function,file,dso,inclusive_count,flat,flat%,sum%,cum,cum%
+blink::InvalidationSet::invalidatesElement,/home/chrome-bot/chrome_root/src/third_party/WebKit/Source/core/css/invalidation/InvalidationSet.cpp,debug/opt/google/chrome/chrome,42293369,4585860529,3.95%,3.95%,13583834527,11.70% \ No newline at end of file
diff --git a/user_activity_benchmarks/testdata/expected/pprof_common/file3.pprof b/user_activity_benchmarks/testdata/expected/pprof_common/file3.pprof
new file mode 100644
index 00000000..7bac48e3
--- /dev/null
+++ b/user_activity_benchmarks/testdata/expected/pprof_common/file3.pprof
@@ -0,0 +1,4 @@
+function,file,dso,inclusive_count,flat,flat%,sum%,cum,cum%
+SkPackARGB32,/home/chrome-bot/chrome_root/src/third_party/skia/include/core/SkColorPriv.h,/opt/google/chrome/chrome,15535764,1628614163,1.64%,27.31%,1633246854,1.64%
+MOZ_Z_adler32,/home/chrome-bot/chrome_root/src/third_party/pdfium/third_party/zlib_v128/adler32.c,/opt/google/chrome/chrome,17825054,1455734663,1.46%,31.79%,1456692596,1.46%
+unpack_ubyte_b8g8r8a8_unorm,/build/gnawty/tmp/portage/media-libs/mesa-11.3.0-r14/work/Mesa-11.3.0/src/mesa/main/format_unpack.c,debug/opt/google/chrome/chrome,19183960,1137455802,1.14%,34.21%,1150209506,1.16% \ No newline at end of file
diff --git a/user_activity_benchmarks/testdata/input/cwp_function_groups.txt b/user_activity_benchmarks/testdata/input/cwp_function_groups.txt
new file mode 100644
index 00000000..4233d035
--- /dev/null
+++ b/user_activity_benchmarks/testdata/input/cwp_function_groups.txt
@@ -0,0 +1,3 @@
+ab /a/b
+cd /c/d
+e /e
diff --git a/user_activity_benchmarks/testdata/input/cwp_functions_file.csv b/user_activity_benchmarks/testdata/input/cwp_functions_file.csv
new file mode 100644
index 00000000..6c5ed587
--- /dev/null
+++ b/user_activity_benchmarks/testdata/input/cwp_functions_file.csv
@@ -0,0 +1,38 @@
+function,file,dso,inclusive_count
+base::RunLoop::Run,/home/chrome-bot/chrome_root/src/base/run_loop.cc,debug/opt/google/chrome/chrome,45766441
+blink::InvalidationSet::invalidatesElement,/home/chrome-bot/chrome_root/src/third_party/WebKit/Source/core/css/invalidation/InvalidationSet.cpp,debug/opt/google/chrome/chrome,42293369
+base::MessageLoop::Run,/home/chrome-bot/chrome_root/src/base/message_loop/message_loop.cc,debug/opt/google/chrome/chrome,41135127
+blink::StyleInvalidator::RecursionCheckpoint::RecursionCheckpoint,debug/opt/google/chrome/chrome,38403286
+base::MessageLoop::RunTask,/home/chrome-bot/chrome_root/src/base/message_loop/message_loop.cc,debug/opt/google/chrome/chrome,38397557
+base::debug::TaskAnnotator::RunTask,/home/chrome-bot/chrome_root/src/base/debug/task_annotator.cc,debug/opt/google/chrome/chrome,38322520
+WTF::HashTableConstIterator::skipEmptyBuckets,debug/opt/google/chrome/chrome,34950293
+unpack_ubyte_b8g8r8a8_unorm /build/gnawty/tmp/portage/media-libs/mesa-11.3.0-r14/work/Mesa-11.3.0/src/mesa/main/format_unpack.c,debug/opt/google/chrome/chrome,34486616
+base::internal::RunnableAdapter::Run,/home/chrome-bot/chrome_root/src/base/bind_internal.h,debug/opt/google/chrome/chrome,34281237
+blink::Element::hasID /home/chrome-bot/chrome_root/src/third_party/WebKit/Source/core/dom/Element.h,debug/opt/google/chrome/chrome,34237955
+blink::ElementV8Internal::idAttributeGetterCallback,debug/opt/google/chrome/chrome,32481250
+_start,,debug/opt/google/chrome/chrome,32451253
+__libc_start_main,/var/tmp/portage/cross-x86_64-cros-linux-gnu/glibc-2.19-r9/work/glibc-2.19/csu/libc-start.c,debug/lib64/libc-2.19.so,32124944
+blink::ElementV8Internal::getAttributeMethodCallback,/var/cache/chromeos-chrome/chrome-src-internal/src/out_gnawty/Release/gen/blink/bindings/core/v8/V8Element.cpp,debug/opt/google/chrome/chrome,30638548
+sha_transform /mnt/host/source/src/third_party/kernel/v3.10/lib/sha1.c,debug/opt/google/chrome/chrome,30615551
+ChromeMain,/home/chrome-bot/chrome_root/src/chrome/app/chrome_main.cc,debug/opt/google/chrome/chrome,30595408
+__clone,sysdeps/unix/sysv/linux/x86_64/clone.S,debug/lib64/libc-2.19.so,25480585
+start_thread,/var/tmp/portage/cross-x86_64-cros-linux-gnu/glibc-2.19-r9/work/glibc-2.19/nptl/pthread_create.c,debug/lib64/libpthread-2.19.so,24504351
+base::RunLoop::Run,/home/chrome-bot/chrome_root/src/base/run_loop.cc,/opt/google/chrome/chrome,21484525
+base::(anonymous namespace)::ThreadFunc,/home/chrome-bot/chrome_root/src/base/threading/platform_thread_posix.cc,debug/opt/google/chrome/chrome,20700177
+base::Callback::Run,/home/chrome-bot/chrome_root/src/base/callback.h,/opt/google/chrome/chrome,20455633
+,,//anon,20220979
+SkSwizzle_RB /home/chrome-bot/chrome_root/src/third_party/skia/include/core/SkColorPriv.h,debug/opt/google/chrome/chrome,19673187
+base::MessageLoop::Run,/home/chrome-bot/chrome_root/src/base/message_loop/message_loop.cc,/opt/google/chrome/chrome,19247788
+scheduler::TaskQueueManager::DoWork,/home/chrome-bot/chrome_root/src/components/scheduler/base/task_queue_manager.cc,debug/opt/google/chrome/chrome,19207528
+unpack_ubyte_b8g8r8a8_unorm,/build/gnawty/tmp/portage/media-libs/mesa-11.3.0-r14/work/Mesa-11.3.0/src/mesa/main/format_unpack.c,debug/opt/google/chrome/chrome,19183960
+scheduler::TaskQueueManager::ProcessTaskFromWorkQueue,/home/chrome-bot/chrome_root/src/components/scheduler/base/task_queue_manager.cc,debug/opt/google/chrome/chrome,18975400
+base::MessageLoop::DeferOrRunPendingTask,/home/chrome-bot/chrome_root/src/base/message_loop/message_loop.cc,/opt/google/chrome/chrome,17864182
+,[anon],100011
+blink::DocumentV8Internal::getElementByIdMethodCallbackForMainWorld /var/cache/chromeos-chrome/chrome-src-internal/src/out_gnawty/Release/gen/blink/bindings/core/v8/V8Document.cpp,/opt/google/chrome/chrome,17862466
+MOZ_Z_adler32,/home/chrome-bot/chrome_root/src/third_party/pdfium/third_party/zlib_v128/adler32.c,/opt/google/chrome/chrome,17825054
+base::internal::Invoker::Run,/home/chrome-bot/chrome_root/src/base/bind_internal.h,/opt/google/chrome/chrome,16438965
+base::MessageLoop::DoWork,/home/chrome-bot/chrome_root/src/base/message_loop/message_loop.cc,/opt/google/chrome/chrome,16029394
+base::internal::InvokeHelper::MakeItSo,/home/chrome-bot/chrome_root/src/base/bind_internal.h,/opt/google/chrome/chrome,15569953
+SkPackARGB32,/home/chrome-bot/chrome_root/src/third_party/skia/include/core/SkColorPriv.h,/opt/google/chrome/chrome,15535764
+base::Thread::ThreadMain,/home/chrome-bot/chrome_root/src/base/threading/thread.cc,debug/opt/google/chrome/chrome,15094458
+_start,,/opt/google/chrome/chrome,15014598
diff --git a/user_activity_benchmarks/testdata/input/inclusive_count_reference.csv b/user_activity_benchmarks/testdata/input/inclusive_count_reference.csv
new file mode 100644
index 00000000..bc0cca6c
--- /dev/null
+++ b/user_activity_benchmarks/testdata/input/inclusive_count_reference.csv
@@ -0,0 +1,8 @@
+function,file,dso,inclusive_count,inclusive_count_fraction
+func_f,/a/b/file_f,f,1,1
+func_g,/a/b/file_g,g,2,2
+func_g,/a/b/../../a/b/file_g,g,3,2.4
+func_h,/c/d/file_h,h,4,3
+func_i,/c/d/file_i,i,5,4
+func_j,/e/file_j,j,6,5
+func_l,/e/file_l,l,7,6
diff --git a/user_activity_benchmarks/testdata/input/inclusive_count_test.csv b/user_activity_benchmarks/testdata/input/inclusive_count_test.csv
new file mode 100644
index 00000000..c9938276
--- /dev/null
+++ b/user_activity_benchmarks/testdata/input/inclusive_count_test.csv
@@ -0,0 +1,8 @@
+function,file,dso,inclusive_count,inclusive_count_fraction
+func_f,/a/b/file_f,f,1,1.1
+func_g,/a/b/file_g,g,2,2.2
+func_f,/a/b/file_f,f,3,1.2
+func_h,/c/d/../../c/d/file_h,h,1,3.3
+func_i,/c/d/file_i,i,5,4.4
+func_j,/e/file_j,j,6,5.5
+func_k,/e/file_k,k,7,6.6
diff --git a/user_activity_benchmarks/testdata/input/pairwise_inclusive_count_reference.csv b/user_activity_benchmarks/testdata/input/pairwise_inclusive_count_reference.csv
new file mode 100644
index 00000000..7d7a49a1
--- /dev/null
+++ b/user_activity_benchmarks/testdata/input/pairwise_inclusive_count_reference.csv
@@ -0,0 +1,5 @@
+parent_child_functions,child_function_file,inclusive_count
+func_f;;func_g,/a/../a/b/file_g,0.1
+func_f;;func_h,/c/d/../d/file_h,0.2
+func_f;;func_i,/c/d/file_i,0.3
+func_g;;func_j,/e/file_j,0.4
diff --git a/user_activity_benchmarks/testdata/input/pairwise_inclusive_count_test.csv b/user_activity_benchmarks/testdata/input/pairwise_inclusive_count_test.csv
new file mode 100644
index 00000000..a3fb72f5
--- /dev/null
+++ b/user_activity_benchmarks/testdata/input/pairwise_inclusive_count_test.csv
@@ -0,0 +1,6 @@
+parent_child_functions,child_function_file,inclusive_count
+func_f;;func_g,/a/b/file_g2,0.01
+func_f;;func_h,/c/../c/d/file_h,0.02
+func_f;;func_i,/c/../c/d/file_i,0.03
+func_g;;func_j,/e/file_j,0.4
+func_g;;func_m,/e/file_m,0.6
diff --git a/user_activity_benchmarks/testdata/input/parse_cwp_statistics.csv b/user_activity_benchmarks/testdata/input/parse_cwp_statistics.csv
new file mode 100644
index 00000000..a4c7ced9
--- /dev/null
+++ b/user_activity_benchmarks/testdata/input/parse_cwp_statistics.csv
@@ -0,0 +1,6 @@
+function,file,dso,inclusive_count
+dummy_method1,dummy_file1/a/b/../../,dummy_object1,1
+dummy_method2,dummy_file2//,dummy_object2,2
+,,321223321,1
+dummy_method3,dummy_file3/a/../,dummy_object3,3
+dummy_method4,dummy_file4/./,dummy_object4,4
diff --git a/user_activity_benchmarks/testdata/input/pprof_top/file1.pprof b/user_activity_benchmarks/testdata/input/pprof_top/file1.pprof
new file mode 100644
index 00000000..62e327b8
--- /dev/null
+++ b/user_activity_benchmarks/testdata/input/pprof_top/file1.pprof
@@ -0,0 +1,20 @@
+File: perf
+Build ID: 1000000000
+Type: instructions_event
+Showing nodes accounting for 239632475284, 64.41% of 372058624378 total
+Dropped 33979 nodes (cum <= 1860293121)
+ flat flat% sum% cum cum%
+ 115734836217 31.11% 31.11% 329503350629 88.56% [anon]
+ 9839378797 2.64% 33.75% 14384869492 3.87% blink::v8StringToWebCoreString /home/chrome-bot/chrome_root/src/third_party/WebKit/Source/bindings/core/v8/V8StringResource.cpp
+ 6054608957 1.63% 35.38% 8069380147 2.17% v8::Object::GetAlignedPointerFromInternalField /home/chrome-bot/chrome_root/src/v8/include/v8.h (inline)
+ 4651723038 1.25% 36.63% 8205985387 2.21% blink::ElementV8Internal::idAttributeGetterCallback /var/cache/chromeos-chrome/chrome-src-internal/src/out_gnawty/Release/gen/blink/bindings/core/v8/V8Element.cpp
+ 4569044106 1.23% 37.86% 6408862507 1.72% blink::NodeV8Internal::firstChildAttributeGetterCallbackForMainWorld /var/cache/chromeos-chrome/chrome-src-internal/src/out_gnawty/Release/gen/blink/bindings/core/v8/V8Node.cpp
+ 3354819815 0.9% 38.76% 3361796139 0.9% v8::internal::Internals::ReadField /home/chrome-bot/chrome_root/src/v8/include/v8.h (inline)
+ 3277220829 0.88% 39.64% 14077115947 3.78% blink::DocumentV8Internal::getElementByIdMethodCallbackForMainWorld /var/cache/chromeos-chrome/chrome-src-internal/src/out_gnawty/Release/gen/blink/bindings/core/v8/V8Document.cpp
+ 3225711531 0.87% 40.51% 3228415743 0.87% v8::internal::Internals::HasHeapObjectTag /home/chrome-bot/chrome_root/src/v8/include/v8.h (inline)
+ 3139339048 0.84% 41.35% 3144663928 0.85% v8::internal::Bitmap::MarkBitFromIndex /home/chrome-bot/chrome_root/src/v8/src/heap/spaces.h (inline)
+ 3007599556 0.81% 42.16% 13057167098 3.51% blink::ElementV8Internal::getAttributeMethodCallback /var/cache/chromeos-chrome/chrome-src-internal/src/out_gnawty/Release/gen/blink/bindings/core/v8/V8Element.cpp
+ 2907238921 0.78% 42.94% 2930031660 0.79% v8::base::NoBarrier_Load /home/chrome-bot/chrome_root/src/v8/src/base/atomicops_internals_x86_gcc.h (inline)
+ 2791274646 0.75% 43.69% 11058283504 2.97% v8::internal::MarkCompactMarkingVisitor::VisitUnmarkedObjects /home/chrome-bot/chrome_root/src/v8/src/heap/mark-compact.cc (inline)
+ 2786321388 0.75% 44.44% 2794002850 0.75% WTF::hashInt /home/chrome-bot/chrome_root/src/third_party/WebKit/Source/wtf/HashFunctions.h (inline)
+ 2725201614 0.73% 45.17% 3511333688 0.94% base::RunLoop::Run /home/chrome-bot/chrome_root/src/base/run_loop.cc
diff --git a/user_activity_benchmarks/testdata/input/pprof_top/file2.pprof b/user_activity_benchmarks/testdata/input/pprof_top/file2.pprof
new file mode 100644
index 00000000..6d22bff3
--- /dev/null
+++ b/user_activity_benchmarks/testdata/input/pprof_top/file2.pprof
@@ -0,0 +1,17 @@
+File: perf
+Build ID: 1000000000
+Type: instructions_event
+Showing nodes accounting for 48939666671, 42.14% of 116136877744 total
+Dropped 35196 nodes (cum <= 580684388)
+ flat flat% sum% cum cum%
+ 4585860529 3.95% 3.95% 13583834527 11.70% blink::InvalidationSet::invalidatesElement /home/chrome-bot/chrome_root/src/third_party/WebKit/Source/core/css/invalidation/a/b/../../InvalidationSet.cpp
+ 3791928512 3.27% 7.21% 35145646088 30.26% blink::StyleInvalidator::invalidate /home/chrome-bot/chrome_root/src/third_party/WebKit/Source/core/css/invalidation/StyleInvalidator.cpp
+ 2871318565 2.47% 9.69% 2979878602 2.57% blink::StyleInvalidator::RecursionCheckpoint::~RecursionCheckpoint /home/chrome-bot/chrome_root/src/third_party/WebKit/Source/core/css/invalidation/StyleInvalidator.h (inline)
+ 1914657964 1.65% 11.33% 2164475253 1.86% WTF::StringImpl::lower /home/chrome-bot/chrome_root/src/third_party/WebKit/Source/wtf/text/StringImpl.cpp
+ 1841071698 1.59% 12.92% 13112332809 11.29% blink::StyleInvalidator::RecursionData::matchesCurrentInvalidationSets /home/chrome-bot/chrome_root/src/third_party/WebKit/Source/core/css/invalidation/StyleInvalidator.cpp (inline)
+ 1825142681 1.57% 14.49% 1828134467 1.57% blink::StyleInvalidator::RecursionCheckpoint::RecursionCheckpoint /home/chrome-bot/chrome_root/src/third_party/WebKit/Source/core/css/invalidation/StyleInvalidator.h (inline)
+ 1727655605 1.49% 15.98% 1925839708 1.66% blink::Element::hasID /home/chrome-bot/chrome_root/src/third_party/WebKit/Source/core/dom/Element.h (inline)
+ 1548329435 1.33% 17.31% 14927333582 12.85% blink::StyleInvalidator::checkInvalidationSetsAgainstElement /home/chrome-bot/chrome_root/src/third_party/WebKit/Source/core/css/invalidation/StyleInvalidator.cpp (inline)
+ 1429307046 1.23% 18.54% 1931177544 1.66% WTF::HashTableConstIterator::skipEmptyBuckets /home/chrome-bot/chrome_root/src/third_party/WebKit/Source/wtf/HashTable.h
+ 1298665649 1.12% 19.66% 4872203383 4.20% blink::SelectorChecker::matchSelector /home/chrome-bot/chrome_root/src/third_party/WebKit/Source/core/css/SelectorChecker.cpp
+ 1241347773 1.07% 20.73% 88048746121 75.81% [anon]
diff --git a/user_activity_benchmarks/testdata/input/pprof_top/file3.pprof b/user_activity_benchmarks/testdata/input/pprof_top/file3.pprof
new file mode 100644
index 00000000..6cbf1247
--- /dev/null
+++ b/user_activity_benchmarks/testdata/input/pprof_top/file3.pprof
@@ -0,0 +1,21 @@
+File: perf
+Build ID: 1000000000
+Type: instructions_event
+Showing nodes accounting for 53216795676, 53.50% of 99475025143 total
+Dropped 39931 nodes (cum <= 497375125)
+ flat flat% sum% cum cum%
+ 6447071173 6.48% 6.48% 6461127774 6.50% s_mpv_mul_add_vec64 mpi/mpi_amd64_gas.s
+ 5026798026 5.05% 11.53% 5033673091 5.06% SkMulDiv255Round /home/chrome-bot/chrome_root/src/third_party/skia/include/core/SkMath.h (inline)
+ 3520577246 3.54% 15.07% 4431002672 4.45% wk_png_write_find_filter /home/chrome-bot/chrome_root/src/third_party/libpng/pngwutil.c
+ 2907776944 2.92% 18.00% 3738572984 3.76% __memcpy_sse2_unaligned ../sysdeps/x86_64/multiarch/memcpy-sse2-unaligned.S
+ 2632046464 2.65% 20.64% 2636062338 2.65% longest_match /home/chrome-bot/chrome_root/src/third_party/zlib/deflate.c (inline)
+ 1699966816 1.71% 22.35% 1699966816 1.71% _mm_set_epi32 /usr/lib/gcc/x86_64-cros-linux-gnu/4.9.x/include/emmintrin.h (inline)
+ 1669101893 1.68% 24.03% 1673814801 1.68% s_mp_sqr_comba_16 /build/gnawty/tmp/portage/dev-libs/nss-3.23-r1/work/nss-3.23/nss-.amd64/lib/freebl/mpi/mp_comba.c
+ 1634108599 1.64% 25.67% 4636591817 4.66% convert32_row /home/chrome-bot/chrome_root/src/third_party/skia/src/core/SkConfig8888.cpp
+ 1628614163 1.64% 27.31% 1633246854 1.64% SkPackARGB32 /home/chrome-bot/chrome_root/src/third_party/skia/include/core/SkColorPriv.h (inline)
+ 1541044177 1.55% 28.86% 3001680713 3.02% convert32 /home/chrome-bot/chrome_root/src/third_party/skia/src/core/SkConfig8888.cpp (inline)
+ 1458290775 1.47% 30.32% 1459976296 1.47% SkSwizzle_RB /home/chrome-bot/chrome_root/src/third_party/skia/include/core/SkColorPriv.h (inline)
+ 1455734663 1.46% 31.79% 1456692596 1.46% MOZ_Z_adler32 /home/chrome-bot/chrome_root/src/third_party/pdfium/third_party/zlib_v128/adler32.c
+ 1272700545 1.28% 33.07% 1858067219 1.87% sha_transform /mnt/host/source/src/third_party/kernel/v3.10/lib/sha1.c
+ 1137455802 1.14% 34.21% 1150209506 1.16% unpack_ubyte_b8g8r8a8_unorm /build/gnawty/tmp/portage/media-libs/mesa-11.3.0-r14/work/Mesa-11.3.0/src/mesa/main/format_unpack.c (inline)
+ 1036731662 1.04% 35.25% 32561535338 32.73% [anon]
diff --git a/user_activity_benchmarks/testdata/input/pprof_top_csv/file1.csv b/user_activity_benchmarks/testdata/input/pprof_top_csv/file1.csv
new file mode 100644
index 00000000..67af7248
--- /dev/null
+++ b/user_activity_benchmarks/testdata/input/pprof_top_csv/file1.csv
@@ -0,0 +1,15 @@
+function,file,flat,flat_p,sum_p,cum,cum_p
+v8::internal::Bitmap::MarkBitFromIndex,/home/chrome-bot/chrome_root/src/v8/src/heap/spaces.h,3139339048,0.0084,0.4135,3144663928,0.0085
+v8::base::NoBarrier_Load,/home/chrome-bot/chrome_root/src/v8/src/base/atomicops_internals_x86_gcc.h,2907238921,0.0078,0.4294,2930031660,0.0079
+v8::Object::GetAlignedPointerFromInternalField,/home/chrome-bot/chrome_root/src/v8/include/v8.h,6054608957,0.0163,0.3538,8069380147,0.0217
+[anon],,115734836217,0.3111,0.3111,329503350629,0.8856
+base::RunLoop::Run,/home/chrome-bot/chrome_root/src/base/run_loop.cc,2725201614,0.0073,0.4517,3511333688,0.0094
+WTF::hashInt,/home/chrome-bot/chrome_root/src/third_party/WebKit/Source/wtf/HashFunctions.h,2786321388,0.0075,0.4444,2794002850,0.0075
+blink::ElementV8Internal::idAttributeGetterCallback,/var/cache/chromeos-chrome/chrome-src-internal/src/out_gnawty/Release/gen/blink/bindings/core/v8/V8Element.cpp,4651723038,0.0125,0.3663,8205985387,0.0221
+v8::internal::Internals::ReadField,/home/chrome-bot/chrome_root/src/v8/include/v8.h,3354819815,0.009,0.3876,3361796139,0.009
+blink::v8StringToWebCoreString,/home/chrome-bot/chrome_root/src/third_party/WebKit/Source/bindings/core/v8/V8StringResource.cpp,9839378797,0.0264,0.3375,14384869492,0.0387
+blink::NodeV8Internal::firstChildAttributeGetterCallbackForMainWorld,/var/cache/chromeos-chrome/chrome-src-internal/src/out_gnawty/Release/gen/blink/bindings/core/v8/V8Node.cpp,4569044106,0.0123,0.3786,6408862507,0.0172
+blink::DocumentV8Internal::getElementByIdMethodCallbackForMainWorld,/var/cache/chromeos-chrome/chrome-src-internal/src/out_gnawty/Release/gen/blink/bindings/core/v8/V8Document.cpp,3277220829,0.0088,0.3964,14077115947,0.0378
+v8::internal::MarkCompactMarkingVisitor::VisitUnmarkedObjects,/home/chrome-bot/chrome_root/src/v8/src/heap/mark-compact.cc,2791274646,0.0075,0.4369,11058283504,0.0297
+blink::ElementV8Internal::getAttributeMethodCallback,/var/cache/chromeos-chrome/chrome-src-internal/src/out_gnawty/Release/gen/blink/bindings/core/v8/V8Element.cpp,3007599556,0.0081,0.4216,13057167098,0.0351
+v8::internal::Internals::HasHeapObjectTag,/home/chrome-bot/chrome_root/src/v8/include/v8.h,3225711531,0.0087,0.4051,3228415743,0.0087
diff --git a/user_activity_benchmarks/testdata/input/pprof_tree/file1.pprof b/user_activity_benchmarks/testdata/input/pprof_tree/file1.pprof
new file mode 100644
index 00000000..69b5606d
--- /dev/null
+++ b/user_activity_benchmarks/testdata/input/pprof_tree/file1.pprof
@@ -0,0 +1,29 @@
+File: perf
+Build ID: 37750b32016528ac896fc238e0d00513e218fd9e
+Type: instructions_event
+Showing nodes accounting for 234768811461, 63.10% of 372058624378 total
+Dropped 33979 nodes (cum <= 1860293121)
+Showing top 80 nodes out of 271
+----------------------------------------------------------+-------------
+ flat flat% sum% cum cum% calls calls% + context
+----------------------------------------------------------+-------------
+ 13412390629 93.24% | blink::V8StringResource::toString /home/chrome-bot/chrome_root/src/third_party/WebKit/Source/bindings/core/v8/V8StringResource.h
+ 437497332 3.04% | [anon]
+ 378465996 2.63% | blink::V8StringResource::operator WTF::AtomicString /home/chrome-bot/chrome_root/src/third_party/WebKit/Source/bindings/core/v8/V8StringResource.h
+9839378797 2.64% 33.75% 14384869492 3.87% | blink::v8StringToWebCoreString /home/chrome-bot/chrome_root/src/third_party/WebKit/Source/bindings/core/v8/V8StringResource.cpp
+ 3180428647 22.11% | v8::String::GetExternalStringResourceBase /home/chrome-bot/chrome_root/src/v8/include/v8.h (inline)
+ 514301458 3.58% | WTF::RefPtr::RefPtr /home/chrome-bot/chrome_root/src/third_party/WebKit/Source/wtf/RefPtr.h (inline)
+----------------------------------------------------------+-------------
+ 8205985387 100% | [anon]
+4651723038 1.25% 36.63% 8205985387 2.21% | blink::ElementV8Internal::idAttributeGetterCallback /var/cache/chromeos-chrome/chrome-src-internal/src/out_gnawty/Release/gen/blink/bindings/core/v8/V8Element.cpp
+ 717786059 8.75% | v8::Object::GetAlignedPointerFromInternalField /home/chrome-bot/chrome_root/src/v8/include/v8.h (inline)
+----------------------------------------------------------+-------------
+ 6408862507 100% | [anon]
+4569044106 1.23% 37.86% 6408862507 1.72% | blink::NodeV8Internal::firstChildAttributeGetterCallbackForMainWorld /var/cache/chromeos-chrome/chrome-src-internal/src/out_gnawty/Release/gen/blink/bindings/core/v8/V8Node.cpp
+ 773479621 12.07% | v8::Object::GetAlignedPointerFromInternalField /home/chrome-bot/chrome_root/src/v8/include/v8.h (inline)
+ 690710254 10.78% | blink::v8SetReturnValueForMainWorld /home/chrome-bot/chrome_root/src/third_party/WebKit/Source/bindings/core/v8/V8Binding.h (inline)
+----------------------------------------------------------+-------------
+ 2005371070 59.65% | v8::Object::GetAlignedPointerFromInternalField /home/chrome-bot/chrome_root/src/v8/include/v8.h (inline)
+ 954968101 28.41% | v8::String::GetExternalStringResourceBase /home/chrome-bot/chrome_root/src/v8/include/v8.h (inline)
+3354819815 0.9% 38.76% 3361796139 0.9% | v8::internal::Internals::ReadField /home/chrome-bot/chrome_root/src/v8/include/v8.h
+----------------------------------------------------------+-------------
diff --git a/user_activity_benchmarks/testdata/input/pprof_tree_csv/file1.csv b/user_activity_benchmarks/testdata/input/pprof_tree_csv/file1.csv
new file mode 100644
index 00000000..9b155614
--- /dev/null
+++ b/user_activity_benchmarks/testdata/input/pprof_tree_csv/file1.csv
@@ -0,0 +1,6 @@
+parent_function,parent_function_file,child_function,child_function_file,inclusive_count_fraction
+blink::ElementV8Internal::idAttributeGetterCallback,/var/cache/chromeos-chrome/chrome-src-internal/src/out_gnawty/Release/gen/blink/bindings/core/v8/V8Element.cpp,v8::Object::GetAlignedPointerFromInternalField,/home/chrome-bot/chrome_root/src/v8/include/v8.h,0.0875
+blink::v8StringToWebCoreString,/home/chrome-bot/chrome_root/src/third_party/WebKit/Source/bindings/core/v8/V8StringResource.cpp,WTF::RefPtr::RefPtr,/home/chrome-bot/chrome_root/src/third_party/WebKit/Source/wtf/RefPtr.h,0.0358
+blink::v8StringToWebCoreString,/home/chrome-bot/chrome_root/src/third_party/WebKit/Source/bindings/core/v8/V8StringResource.cpp,v8::String::GetExternalStringResourceBase,/home/chrome-bot/chrome_root/src/v8/include/v8.h,0.2211
+blink::NodeV8Internal::firstChildAttributeGetterCallbackForMainWorld,/var/cache/chromeos-chrome/chrome-src-internal/src/out_gnawty/Release/gen/blink/bindings/core/v8/V8Node.cpp,blink::v8SetReturnValueForMainWorld,/home/chrome-bot/chrome_root/src/third_party/WebKit/Source/bindings/core/v8/V8Binding.h,0.10779999999999999
+blink::NodeV8Internal::firstChildAttributeGetterCallbackForMainWorld,/var/cache/chromeos-chrome/chrome-src-internal/src/out_gnawty/Release/gen/blink/bindings/core/v8/V8Node.cpp,v8::Object::GetAlignedPointerFromInternalField,/home/chrome-bot/chrome_root/src/v8/include/v8.h,0.1207
diff --git a/user_activity_benchmarks/testdata/results/pprof_common/file1.pprof b/user_activity_benchmarks/testdata/results/pprof_common/file1.pprof
new file mode 100644
index 00000000..30d4c83a
--- /dev/null
+++ b/user_activity_benchmarks/testdata/results/pprof_common/file1.pprof
@@ -0,0 +1,3 @@
+function,file,dso,inclusive_count,flat,flat%,sum%,cum,cum%
+blink::ElementV8Internal::getAttributeMethodCallback,/var/cache/chromeos-chrome/chrome-src-internal/src/out_gnawty/Release/gen/blink/bindings/core/v8/V8Element.cpp,debug/opt/google/chrome/chrome,30638548,3007599556,0.81%,42.16%,13057167098,3.51%
+base::RunLoop::Run,/home/chrome-bot/chrome_root/src/base/run_loop.cc,/opt/google/chrome/chrome,21484525,2725201614,0.73%,45.17%,3511333688,0.94% \ No newline at end of file
diff --git a/user_activity_benchmarks/testdata/results/pprof_common/file2.pprof b/user_activity_benchmarks/testdata/results/pprof_common/file2.pprof
new file mode 100644
index 00000000..bef92666
--- /dev/null
+++ b/user_activity_benchmarks/testdata/results/pprof_common/file2.pprof
@@ -0,0 +1,2 @@
+function,file,dso,inclusive_count,flat,flat%,sum%,cum,cum%
+blink::InvalidationSet::invalidatesElement,/home/chrome-bot/chrome_root/src/third_party/WebKit/Source/core/css/invalidation/InvalidationSet.cpp,debug/opt/google/chrome/chrome,42293369,4585860529,3.95%,3.95%,13583834527,11.70% \ No newline at end of file
diff --git a/user_activity_benchmarks/testdata/results/pprof_common/file3.pprof b/user_activity_benchmarks/testdata/results/pprof_common/file3.pprof
new file mode 100644
index 00000000..7bac48e3
--- /dev/null
+++ b/user_activity_benchmarks/testdata/results/pprof_common/file3.pprof
@@ -0,0 +1,4 @@
+function,file,dso,inclusive_count,flat,flat%,sum%,cum,cum%
+SkPackARGB32,/home/chrome-bot/chrome_root/src/third_party/skia/include/core/SkColorPriv.h,/opt/google/chrome/chrome,15535764,1628614163,1.64%,27.31%,1633246854,1.64%
+MOZ_Z_adler32,/home/chrome-bot/chrome_root/src/third_party/pdfium/third_party/zlib_v128/adler32.c,/opt/google/chrome/chrome,17825054,1455734663,1.46%,31.79%,1456692596,1.46%
+unpack_ubyte_b8g8r8a8_unorm,/build/gnawty/tmp/portage/media-libs/mesa-11.3.0-r14/work/Mesa-11.3.0/src/mesa/main/format_unpack.c,debug/opt/google/chrome/chrome,19183960,1137455802,1.14%,34.21%,1150209506,1.16% \ No newline at end of file
diff --git a/user_activity_benchmarks/utils.py b/user_activity_benchmarks/utils.py
new file mode 100644
index 00000000..009b241a
--- /dev/null
+++ b/user_activity_benchmarks/utils.py
@@ -0,0 +1,402 @@
+# Copyright 2016 The Chromium OS Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+"""Utility functions for parsing pprof, CWP data and Chrome OS groups files."""
+
+from collections import defaultdict
+
+import csv
+import os
+import re
+
+SEPARATOR_REGEX = re.compile(r'-+\+-+')
+FUNCTION_STATISTIC_REGEX = \
+ re.compile(r'(\S+)\s+(\S+)%\s+(\S+)%\s+(\S+)\s+(\S+)%')
+CHILD_FUNCTION_PERCENTAGE_REGEX = re.compile(r'([0-9.]+)%')
+FUNCTION_KEY_SEPARATOR_REGEX = re.compile(r'\|\s+')
+# Constants used to identify if a function is common in the pprof and CWP
+# files.
+COMMON_FUNCTION = 'common'
+EXTRA_FUNCTION = 'extra'
+PARENT_CHILD_FUNCTIONS_SEPARATOR = ';;'
+# List of pairs of strings used for make substitutions in file names to make
+# CWP and pprof data consistent.
+FILE_NAME_REPLACING_PAIR_STRINGS = [('gnawty', 'BOARD'),
+ ('amd64-generic', 'BOARD'),
+ (' ../sysdeps', ',sysdeps'),
+ (' ../nptl', ',nptl'),
+ (' aes-x86_64.s', ',aes-x86_64.s'),
+ (' (inline)', ''),
+ (' (partial-inline)', ''),
+ (' ../', ','),
+ ('../', '')]
+# Separator used to delimit the function from the file name.
+FUNCTION_FILE_SEPARATOR = ' /'
+
+
+def MakeCWPAndPprofFileNamesConsistent(file_name):
+ """Makes the CWP and pprof file names consistent.
+
+ For the same function, it may happen for some file paths to differ slightly
+ in the CWP data compared to the pprof output. In a file name, for each tuple
+ element of the list, we substitute the first element with the second one.
+
+ Args:
+ file_name: A string representing the name of the file.
+
+ Returns:
+ A string representing the modified name of tihe file.
+ """
+ file_name = file_name.replace(', ', '; ')
+ for replacing_pair_string in FILE_NAME_REPLACING_PAIR_STRINGS:
+ file_name = file_name.replace(replacing_pair_string[0],
+ replacing_pair_string[1])
+
+ return file_name
+
+def MakePprofFunctionKey(function_and_file_name):
+ """Creates the function key from the function and file name.
+
+ Parsing the the pprof --top and --tree outputs is difficult due to the fact
+ that it hard to extract the function and file name (i.e the function names
+ can have a lot of unexpected charachters such as spaces, operators etc).
+ For the moment, we used FUNCTION_FILE_SEPARATOR as delimiter between the
+ function and the file name. However, there are some cases where the file name
+ does not start with / and we treat this cases separately (i.e ../sysdeps,
+ ../nptl, aes-x86_64.s).
+
+ Args:
+ function_and_file_name: A string representing the function and the file name
+ as it appears in the pprof output.
+
+ Returns:
+ A string representing the function key, composed from the function and file
+ name, comma separated.
+ """
+ # TODO(evelinad): Use pprof --topproto instead of pprof --top to parse
+ # protobuffers instead of text output. Investigate if there is an equivalent
+ # for pprof --tree that gives protobuffer output.
+ #
+ # In the CWP output, we replace the , with ; as a workaround for parsing
+ # csv files. We do the same for the pprof output.
+ #
+ # TODO(evelinad): Use dremel --csv_dialect=excel-tab in the queries for
+ # replacing the , delimiter with tab.
+ function_and_file_name = function_and_file_name.replace(', ', '; ')
+ # If the function and file name sequence contains the FUNCTION_FILE_SEPARATOR,
+ # we normalize the path name of the file and make the string subtitutions
+ # to make the CWP and pprof data consistent. The returned key is composed
+ # from the function name and normalized file path name, separated by a comma.
+ # If the function and file name does not contain the FUNCTION_FILE_SEPARATOR,
+ # we just do the strings substitution.
+ if FUNCTION_FILE_SEPARATOR in function_and_file_name:
+ function_name, file_name = \
+ function_and_file_name.split(FUNCTION_FILE_SEPARATOR)
+ file_name = \
+ MakeCWPAndPprofFileNamesConsistent(os.path.normpath("/" + file_name))
+ return ','.join([function_name, file_name])
+
+ return MakeCWPAndPprofFileNamesConsistent(function_and_file_name)
+
+
+def ComputeCWPCummulativeInclusiveStatistics(cwp_inclusive_count_statistics):
+ """Computes the cumulative inclusive count value of a function.
+
+ A function might appear declared in multiple files or objects. When
+ computing the fraction of the inclusive count value from a child function to
+ the parent function, we take into consideration the sum of the
+ inclusive_count
+ count values from all the ocurences of that function.
+
+ Args:
+ cwp_inclusive_count_statistics: A dict containing the inclusive count
+ statistics extracted by the ParseCWPInclusiveCountFile method.
+
+ Returns:
+ A dict having as a ket the name of the function and as a value the sum of
+ the inclusive count values of the occurences of the functions from all
+ the files and objects.
+ """
+ cwp_inclusive_count_statistics_cumulative = defaultdict(int)
+
+ for function_key, function_statistics \
+ in cwp_inclusive_count_statistics.iteritems():
+ function_name, _ = function_key.split(',')
+ cwp_inclusive_count_statistics_cumulative[function_name] += \
+ function_statistics[1]
+
+ return cwp_inclusive_count_statistics_cumulative
+
+def ComputeCWPChildFunctionsFractions(cwp_inclusive_count_statistics_cumulative,
+ cwp_pairwise_inclusive_count_statistics):
+ """Computes the fractions of the inclusive count values for child functions.
+
+ The fraction represents the inclusive count value of a child function over
+ the one of the parent function.
+
+ Args:
+ cwp_inclusive_count_statistics_cumulative: A dict containing the
+ cumulative inclusive count values of the CWP functions.
+ cwp_pairwise_inclusive_count_statistics: A dict containing the inclusive
+ count statistics for pairs of parent and child functions. The key is the
+ parent function. The value is a dict with the key the name of the child
+ function and the file name, comma separated, and the value is the
+ inclusive count value of the pair of parent and child functions.
+
+ Returns:
+ A dict containing the inclusive count statistics for pairs of parent
+ and child functions. The key is the parent function. The value is a
+ dict with the key the name of the child function and the file name,
+ comma separated, and the value is the inclusive count fraction of the
+ child function out of the parent function.
+ """
+
+ pairwise_inclusive_count_fractions = {}
+
+ for parent_function_key, child_functions_metrics in \
+ cwp_pairwise_inclusive_count_statistics.iteritems():
+ child_functions_fractions = {}
+ parent_function_inclusive_count = \
+ cwp_inclusive_count_statistics_cumulative.get(parent_function_key, 0.0)
+
+ if parent_function_key in cwp_inclusive_count_statistics_cumulative:
+ for child_function_key, child_function_inclusive_count \
+ in child_functions_metrics.iteritems():
+ child_functions_fractions[child_function_key] = \
+ child_function_inclusive_count / parent_function_inclusive_count
+ else:
+ for child_function_key, child_function_inclusive_count \
+ in child_functions_metrics.iteritems():
+ child_functions_fractions[child_function_key] = 0.0
+ pairwise_inclusive_count_fractions[parent_function_key] = \
+ child_functions_fractions
+
+ return pairwise_inclusive_count_fractions
+
+def ParseFunctionGroups(cwp_function_groups_lines):
+ """Parses the contents of the function groups file.
+
+ Args:
+ cwp_function_groups_lines: A list of the lines contained in the CWP
+ function groups file. A line contains the group name and the file path
+ that describes the group, separated by a space.
+
+ Returns:
+ A list of tuples containing the group name and the file path.
+ """
+ # The order of the groups mentioned in the cwp_function_groups file
+ # matters. A function declared in a file will belong to the first
+ # mentioned group that matches its path to the one of the file.
+ # It is possible to have multiple paths that belong to the same group.
+ return [tuple(line.split()) for line in cwp_function_groups_lines]
+
+
+def ParsePprofTopOutput(file_name):
+ """Parses a file that contains the output of the pprof --top command.
+
+ Args:
+ file_name: The name of the file containing the pprof --top output.
+
+ Returns:
+ A dict having as a key the name of the function and the file containing
+ the declaration of the function, separated by a comma, and as a value
+ a tuple containing the flat, flat percentage, sum percentage, cummulative
+ and cummulative percentage values.
+ """
+
+ pprof_top_statistics = {}
+
+ # In the pprof top output, the statistics of the functions start from the
+ # 6th line.
+ with open(file_name) as input_file:
+ pprof_top_content = input_file.readlines()[6:]
+
+ for line in pprof_top_content:
+ function_statistic_match = FUNCTION_STATISTIC_REGEX.search(line)
+ flat, flat_p, sum_p, cum, cum_p = function_statistic_match.groups()
+ flat_p = str(float(flat_p) / 100.0)
+ sum_p = str(float(sum_p) / 100.0)
+ cum_p = str(float(cum_p) / 100.0)
+ lookup_index = function_statistic_match.end()
+ function_and_file_name = line[lookup_index + 2 : -1]
+ key = MakePprofFunctionKey(function_and_file_name)
+ pprof_top_statistics[key] = (flat, flat_p, sum_p, cum, cum_p)
+ return pprof_top_statistics
+
+
+def ParsePprofTreeOutput(file_name):
+ """Parses a file that contains the output of the pprof --tree command.
+
+ Args:
+ file_name: The name of the file containing the pprof --tree output.
+
+ Returns:
+ A dict including the statistics for pairs of parent and child functions.
+ The key is the name of the parent function and the file where the
+ function is declared, separated by a comma. The value is a dict having as
+ a key the name of the child function and the file where the function is
+ delcared, comma separated and as a value the percentage of time the
+ parent function spends in the child function.
+ """
+
+ # In the pprof output, the statistics of the functions start from the 9th
+ # line.
+ with open(file_name) as input_file:
+ pprof_tree_content = input_file.readlines()[9:]
+
+ pprof_tree_statistics = defaultdict(lambda: defaultdict(float))
+ track_child_functions = False
+
+ # The statistics of a given function, its parent and child functions are
+ # included between two separator marks.
+ # All the parent function statistics are above the line containing the
+ # statistics of the given function.
+ # All the statistics of a child function are below the statistics of the
+ # given function.
+ # The statistics of a parent or a child function contain the calls, calls
+ # percentage, the function name and the file where the function is declared.
+ # The statistics of the given function contain the flat, flat percentage,
+ # sum percentage, cummulative, cummulative percentage, function name and the
+ # name of the file containing the declaration of the function.
+ for line in pprof_tree_content:
+ separator_match = SEPARATOR_REGEX.search(line)
+
+ if separator_match:
+ track_child_functions = False
+ continue
+
+ parent_function_statistic_match = FUNCTION_STATISTIC_REGEX.search(line)
+
+ if parent_function_statistic_match:
+ track_child_functions = True
+ lookup_index = parent_function_statistic_match.end()
+ parent_function_key_match = \
+ FUNCTION_KEY_SEPARATOR_REGEX.search(line, pos=lookup_index)
+ lookup_index = parent_function_key_match.end()
+ parent_function_key = MakePprofFunctionKey(line[lookup_index:-1])
+ continue
+
+ if not track_child_functions:
+ continue
+
+ child_function_statistic_match = \
+ CHILD_FUNCTION_PERCENTAGE_REGEX.search(line)
+ child_function_percentage = \
+ float(child_function_statistic_match.group(1))
+ lookup_index = child_function_statistic_match.end()
+ child_function_key_match = \
+ FUNCTION_KEY_SEPARATOR_REGEX.search(line, pos=lookup_index)
+ lookup_index = child_function_key_match.end()
+ child_function_key = MakePprofFunctionKey(line[lookup_index:-1])
+
+ pprof_tree_statistics[parent_function_key][child_function_key] += \
+ child_function_percentage / 100.0
+
+ return pprof_tree_statistics
+
+
+def ParseCWPInclusiveCountFile(file_name):
+ """Parses the CWP inclusive count files.
+
+ A line should contain the name of the function, the file name with the
+ declaration, the inclusive count and inclusive count fraction out of the
+ total extracted inclusive count values.
+
+ Args:
+ file_name: The file containing the inclusive count values of the CWP
+ functions.
+
+ Returns:
+ A dict containing the inclusive count statistics. The key is the name of
+ the function and the file name, comma separated. The value represents a
+ tuple with the object name containing the function declaration, the
+ inclusive count and inclusive count fraction values, and a marker to
+ identify if the function is present in one of the benchmark profiles.
+ """
+ cwp_inclusive_count_statistics = defaultdict(lambda: ('', 0, 0.0, 0))
+
+ with open(file_name) as input_file:
+ statistics_reader = csv.DictReader(input_file, delimiter=',')
+ for statistic in statistics_reader:
+ function_name = statistic['function']
+ file_name = MakeCWPAndPprofFileNamesConsistent(
+ os.path.normpath(statistic['file']))
+ dso_name = statistic['dso']
+ inclusive_count = statistic['inclusive_count']
+ inclusive_count_fraction = statistic['inclusive_count_fraction']
+
+ # We ignore the lines that have empty fields(i.e they specify only the
+ # addresses of the functions and the inclusive counts values).
+ if all([
+ function_name, file_name, dso_name, inclusive_count,
+ inclusive_count_fraction
+ ]):
+ key = '%s,%s' % (function_name, file_name)
+
+ # There might be situations where a function appears in multiple files
+ # or objects. Such situations can occur when in the Dremel queries there
+ # are not specified the Chrome OS version and the name of the board (i.e
+ # the files can belong to different kernel or library versions).
+ inclusive_count_sum = \
+ cwp_inclusive_count_statistics[key][1] + int(inclusive_count)
+ inclusive_count_fraction_sum = \
+ cwp_inclusive_count_statistics[key][2] + \
+ float(inclusive_count_fraction)
+
+ # All the functions are initially marked as EXTRA_FUNCTION.
+ value = \
+ (dso_name, inclusive_count_sum, inclusive_count_fraction_sum,
+ EXTRA_FUNCTION)
+ cwp_inclusive_count_statistics[key] = value
+
+ return cwp_inclusive_count_statistics
+
+
+def ParseCWPPairwiseInclusiveCountFile(file_name):
+ """Parses the CWP pairwise inclusive count files.
+
+ A line of the file should contain a pair of a parent and a child function,
+ concatenated by the PARENT_CHILD_FUNCTIONS_SEPARATOR, the name of the file
+ where the child function is declared and the inclusive count fractions of
+ the pair of functions out of the total amount of inclusive count values.
+
+ Args:
+ file_name: The file containing the pairwise inclusive_count statistics of
+ the
+ CWP functions.
+
+ Returns:
+ A dict containing the statistics of the parent functions and each of
+ their child functions. The key of the dict is the name of the parent
+ function. The value is a dict having as a key the name of the child
+ function with its file name separated by a ',' and as a value the
+ inclusive count value of the parent-child function pair.
+ """
+ pairwise_inclusive_count_statistics = defaultdict(lambda: defaultdict(float))
+
+ with open(file_name) as input_file:
+ statistics_reader = csv.DictReader(input_file, delimiter=',')
+
+ for statistic in statistics_reader:
+ parent_function_name, child_function_name = \
+ statistic['parent_child_functions'].split(
+ PARENT_CHILD_FUNCTIONS_SEPARATOR)
+ child_function_file_name = MakeCWPAndPprofFileNamesConsistent(
+ os.path.normpath(statistic['child_function_file']))
+ inclusive_count = statistic['inclusive_count']
+
+ # There might be situations where a child function appears in
+ # multiple files or objects. Such situations can occur when in the
+ # Dremel queries are not specified the Chrome OS version and the
+ # name of the board (i.e the files can belong to different kernel or
+ # library versions), when the child function is a template function
+ # that is declared in a header file or there are name collisions
+ # between multiple executable objects.
+ # If a pair of child and parent functions appears multiple times, we
+ # add their inclusive count values.
+ child_function_key = ','.join(
+ [child_function_name, child_function_file_name])
+ pairwise_inclusive_count_statistics[parent_function_name] \
+ [child_function_key] += float(inclusive_count)
+
+ return pairwise_inclusive_count_statistics
diff --git a/user_activity_benchmarks/utils_unittest.py b/user_activity_benchmarks/utils_unittest.py
new file mode 100755
index 00000000..31bf83d3
--- /dev/null
+++ b/user_activity_benchmarks/utils_unittest.py
@@ -0,0 +1,133 @@
+#!/usr/bin/python2
+
+# Copyright 2016 The Chromium OS Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+"""Unit tests for the utility module."""
+
+import collections
+import csv
+import unittest
+
+import utils
+
+
+class UtilsTest(unittest.TestCase):
+ """Test class for utility module."""
+
+ def __init__(self, *args, **kwargs):
+ super(UtilsTest, self).__init__(*args, **kwargs)
+ self._pprof_top_csv_file = 'testdata/input/pprof_top_csv/file1.csv'
+ self._pprof_top_file = 'testdata/input/pprof_top/file1.pprof'
+ self._pprof_tree_csv_file = 'testdata/input/pprof_tree_csv/file1.csv'
+ self._pprof_tree_file = 'testdata/input/pprof_tree/file1.pprof'
+ self._pairwise_inclusive_count_test_file = \
+ 'testdata/input/pairwise_inclusive_count_test.csv'
+ self._pairwise_inclusive_count_reference_file = \
+ 'testdata/input/pairwise_inclusive_count_reference.csv'
+ self._inclusive_count_test_file = \
+ 'testdata/input/inclusive_count_test.csv'
+ self._inclusive_count_reference_file = \
+ 'testdata/input/inclusive_count_reference.csv'
+
+ def testParseFunctionGroups(self):
+ cwp_function_groups_lines = \
+ ['group1 /a\n', 'group2 /b\n', 'group3 /c\n', 'group4 /d\n']
+ expected_output = [('group1', '/a'), ('group2', '/b'), ('group3', '/c'),
+ ('group4', '/d')]
+ result = utils.ParseFunctionGroups(cwp_function_groups_lines)
+
+ self.assertListEqual(expected_output, result)
+
+ def testParsePProfTopOutput(self):
+ result_pprof_top_output = utils.ParsePprofTopOutput(self._pprof_top_file)
+ expected_pprof_top_output = {}
+
+ with open(self._pprof_top_csv_file) as input_file:
+ statistics_reader = csv.DictReader(input_file, delimiter=',')
+
+ for statistic in statistics_reader:
+ if statistic['file']:
+ function_key = ','.join([statistic['function'], statistic['file']])
+ else:
+ function_key = statistic['function']
+ expected_pprof_top_output[function_key] = \
+ (statistic['flat'], statistic['flat_p'], statistic['sum_p'],
+ statistic['cum'], statistic['cum_p'])
+
+ self.assertDictEqual(result_pprof_top_output, expected_pprof_top_output)
+
+ def testParsePProfTreeOutput(self):
+ result_pprof_tree_output = utils.ParsePprofTreeOutput(self._pprof_tree_file)
+ expected_pprof_tree_output = collections.defaultdict(dict)
+
+ with open(self._pprof_tree_csv_file) as input_file:
+ statistics_reader = csv.DictReader(input_file, delimiter=',')
+
+ for statistic in statistics_reader:
+ parent_function_key = \
+ ','.join([statistic['parent_function'],
+ statistic['parent_function_file']])
+ child_function_key = \
+ ','.join([statistic['child_function'],
+ statistic['child_function_file']])
+
+ expected_pprof_tree_output[parent_function_key][child_function_key] = \
+ float(statistic['inclusive_count_fraction'])
+
+ self.assertDictEqual(result_pprof_tree_output, expected_pprof_tree_output)
+
+ def testParseCWPInclusiveCountFile(self):
+ expected_inclusive_statistics_test = \
+ {'func_i,/c/d/file_i': ('i', 5, 4.4, utils.EXTRA_FUNCTION),
+ 'func_j,/e/file_j': ('j', 6, 5.5, utils.EXTRA_FUNCTION),
+ 'func_f,/a/b/file_f': ('f', 4, 2.3, utils.EXTRA_FUNCTION),
+ 'func_h,/c/d/file_h': ('h', 1, 3.3, utils.EXTRA_FUNCTION),
+ 'func_k,/e/file_k': ('k', 7, 6.6, utils.EXTRA_FUNCTION),
+ 'func_g,/a/b/file_g': ('g', 2, 2.2, utils.EXTRA_FUNCTION)}
+ expected_inclusive_statistics_reference = \
+ {'func_i,/c/d/file_i': ('i', 5, 4.0, utils.EXTRA_FUNCTION),
+ 'func_j,/e/file_j': ('j', 6, 5.0, utils.EXTRA_FUNCTION),
+ 'func_f,/a/b/file_f': ('f', 1, 1.0, utils.EXTRA_FUNCTION),
+ 'func_l,/e/file_l': ('l', 7, 6.0, utils.EXTRA_FUNCTION),
+ 'func_h,/c/d/file_h': ('h', 4, 3.0, utils.EXTRA_FUNCTION),
+ 'func_g,/a/b/file_g': ('g', 5, 4.4, utils.EXTRA_FUNCTION)}
+ result_inclusive_statistics_test = \
+ utils.ParseCWPInclusiveCountFile(self._inclusive_count_test_file)
+ result_inclusive_statistics_reference = \
+ utils.ParseCWPInclusiveCountFile(self._inclusive_count_reference_file)
+
+ self.assertDictEqual(result_inclusive_statistics_test,
+ expected_inclusive_statistics_test)
+ self.assertDictEqual(result_inclusive_statistics_reference,
+ expected_inclusive_statistics_reference)
+
+ def testParseCWPPairwiseInclusiveCountFile(self):
+ expected_pairwise_inclusive_statistics_test = {
+ 'func_f': {'func_g,/a/b/file_g2': 0.01,
+ 'func_h,/c/d/file_h': 0.02,
+ 'func_i,/c/d/file_i': 0.03},
+ 'func_g': {'func_j,/e/file_j': 0.4,
+ 'func_m,/e/file_m': 0.6}
+ }
+ expected_pairwise_inclusive_statistics_reference = {
+ 'func_f': {'func_g,/a/b/file_g': 0.1,
+ 'func_h,/c/d/file_h': 0.2,
+ 'func_i,/c/d/file_i': 0.3},
+ 'func_g': {'func_j,/e/file_j': 0.4}
+ }
+ result_pairwise_inclusive_statistics_test = \
+ utils.ParseCWPPairwiseInclusiveCountFile(
+ self._pairwise_inclusive_count_test_file)
+ result_pairwise_inclusive_statistics_reference = \
+ utils.ParseCWPPairwiseInclusiveCountFile(
+ self._pairwise_inclusive_count_reference_file)
+
+ self.assertDictEqual(result_pairwise_inclusive_statistics_test,
+ expected_pairwise_inclusive_statistics_test)
+ self.assertDictEqual(result_pairwise_inclusive_statistics_reference,
+ expected_pairwise_inclusive_statistics_reference)
+
+
+if __name__ == '__main__':
+ unittest.main()
diff --git a/verify_compiler.py b/verify_compiler.py
new file mode 100755
index 00000000..9eafbb8a
--- /dev/null
+++ b/verify_compiler.py
@@ -0,0 +1,234 @@
+#!/usr/bin/env python2
+"""Verify that a ChromeOS sub-tree was built with a particular compiler"""
+
+from __future__ import print_function
+
+import argparse
+import fnmatch
+import os
+import sys
+
+from cros_utils import command_executer
+
+COMPILERS = ['gcc', 'clang']
+
+COMPILER_STRINGS = {'gcc': 'GNU C', 'clang': 'clang version'}
+
+ERR_NO_DEBUG_INFO = 1024
+
+
+def UsageError(parser, message):
+ """Output error message and help/usage info."""
+
+ print('ERROR: %s' % message)
+ parser.print_help()
+ sys.exit(0)
+
+
+def CreateTmpDwarfFile(filename, dwarf_file, cmd_executer):
+ """Create temporary dwarfdump file, to be parsed later."""
+
+ cmd = ('readelf --debug-dump=info %s | grep -A5 DW_AT_producer > %s' %
+ (filename, dwarf_file))
+ retval = cmd_executer.RunCommand(cmd, print_to_console=False)
+ return retval
+
+
+def FindAllFiles(root_dir, cmd_executer):
+ """Create a list of all the *.debug and *.dwp files to be checked."""
+
+ file_list = []
+ tmp_list = [
+ os.path.join(dirpath, f)
+ for dirpath, dirnames, files in os.walk(root_dir)
+ for f in fnmatch.filter(files, '*.debug')
+ ]
+ for f in tmp_list:
+ if 'build-id' not in f:
+ file_list.append(f)
+ tmp_list = [
+ os.path.join(dirpath, f)
+ for dirpath, dirnames, files in os.walk(root_dir)
+ for f in fnmatch.filter(files, '*.dwp')
+ ]
+ file_list += tmp_list
+ return file_list
+
+
+def VerifyArgs(compiler, filename, tmp_dir, root_dir, options, parser):
+ """Verify that the option values and combinations are valid."""
+
+ if options.filename and options.all_files:
+ UsageError(parser, 'Cannot use both --file and --all_files.')
+ if options.filename and options.root_dir:
+ UsageError(parser, 'Cannot use both --file and --root_dir.')
+ if options.all_files and not options.root_dir:
+ UsageError(parser, 'Missing --root_dir option.')
+ if options.root_dir and not options.all_files:
+ UsageError(parser, 'Missing --all_files option.')
+ if not options.filename and not options.all_files:
+ UsageError(parser, 'Must specify either --file or --all_files.')
+
+ # Verify that the values specified are valid.
+ if filename:
+ if not os.path.exists(filename):
+ UsageError(parser, 'Cannot find %s' % filename)
+ compiler = options.compiler.lower()
+ if compiler not in COMPILERS:
+ UsageError(parser, '%s is not a valid compiler (gcc or clang).' % compiler)
+ if root_dir and not os.path.exists(root_dir):
+ UsageError(parser, '%s does not exist.' % root_dir)
+ if not os.path.exists(tmp_dir):
+ os.makedirs(tmp_dir)
+
+
+def CheckFile(filename, compiler, tmp_dir, options, cmd_executer):
+ """Verify the information in a single file."""
+
+ print('Checking %s' % filename)
+ # Verify that file contains debug information.
+ cmd = 'readelf -SW %s | grep debug_info' % filename
+ retval = cmd_executer.RunCommand(cmd, print_to_console=False)
+ if retval != 0:
+ print('No debug info in this file. Unable to verify compiler.')
+ # There's no debug info in this file, so skip it.
+ return ERR_NO_DEBUG_INFO
+
+ tmp_name = os.path.basename(filename) + '.dwarf'
+ dwarf_file = os.path.join(tmp_dir, tmp_name)
+ status = CreateTmpDwarfFile(filename, dwarf_file, cmd_executer)
+
+ if status != 0:
+ print('Unable to create dwarf file for %s (status: %d).' %
+ (filename, status))
+ return status
+
+ comp_str = COMPILER_STRINGS[compiler]
+
+ retval = 0
+ with open(dwarf_file, 'r') as in_file:
+ lines = in_file.readlines()
+ looking_for_name = False
+ for line in lines:
+ if 'DW_AT_producer' in line:
+ looking_for_name = False
+ if 'GNU AS' in line:
+ continue
+ if comp_str not in line:
+ looking_for_name = True
+ retval = 1
+ elif looking_for_name:
+ if 'DW_AT_name' in line:
+ words = line.split(':')
+ bad_file = words[-1]
+ print('FAIL: %s was not compiled with %s.' %
+ (bad_file.rstrip(), compiler))
+ looking_for_name = False
+ elif 'DW_TAG_' in line:
+ looking_for_name = False
+
+ if not options.keep_file:
+ os.remove(dwarf_file)
+
+ return retval
+
+
+def Main(argv):
+
+ cmd_executer = command_executer.GetCommandExecuter()
+ parser = argparse.ArgumentParser()
+ parser.add_argument(
+ '--file', dest='filename', help='Name of file to be verified.')
+ parser.add_argument(
+ '--compiler',
+ dest='compiler',
+ required=True,
+ help='Desired compiler (gcc or clang)')
+ parser.add_argument(
+ '--tmp_dir',
+ dest='tmp_dir',
+ help='Directory in which to put dwarf dump file.'
+ ' Defaults to /tmp')
+ parser.add_argument(
+ '--keep_file',
+ dest='keep_file',
+ default=False,
+ action='store_true',
+ help='Do not delete dwarf file when done.')
+ parser.add_argument(
+ '--all_files',
+ dest='all_files',
+ default=False,
+ action='store_true',
+ help='Find and check ALL .debug/.dwp files '
+ 'in subtree. Must be used with --root_dir '
+ '(and NOT with --file).')
+ parser.add_argument(
+ '--root_dir',
+ dest='root_dir',
+ help='Root of subtree in which to look for '
+ 'files. Must be used with --all_files, and'
+ ' not with --file.')
+
+ options = parser.parse_args(argv)
+
+ compiler = options.compiler
+ filename = None
+ if options.filename:
+ filename = os.path.realpath(os.path.expanduser(options.filename))
+ tmp_dir = '/tmp'
+ if options.tmp_dir:
+ tmp_dir = os.path.realpath(os.path.expanduser(options.tmp_dir))
+ root_dir = None
+ if options.root_dir:
+ root_dir = os.path.realpath(os.path.expanduser(options.root_dir))
+
+ VerifyArgs(compiler, filename, tmp_dir, root_dir, options, parser)
+
+ file_list = []
+ if filename:
+ file_list.append(filename)
+ else:
+ file_list = FindAllFiles(root_dir, cmd_executer)
+
+ bad_files = []
+ unknown_files = []
+ all_pass = True
+ for f in file_list:
+ result = CheckFile(f, compiler, tmp_dir, options, cmd_executer)
+ if result == ERR_NO_DEBUG_INFO:
+ unknown_files.append(f)
+ all_pass = False
+ elif result != 0:
+ bad_files.append(f)
+ all_pass = False
+
+ if all_pass:
+ print('\n\nSUCCESS: All compilation units were compiled with %s.\n' %
+ compiler)
+ return 0
+ else:
+ if len(bad_files) == 0:
+ print(
+ '\n\n*Mostly* SUCCESS: All files that could be checked were compiled '
+ 'with %s.' % compiler)
+ print(
+ '\n\nUnable to verify the following files (no debug info in them):\n')
+ for f in unknown_files:
+ print(f)
+ else:
+ print('\n\nFAILED: The following files were not compiled with %s:\n' %
+ compiler)
+ for f in bad_files:
+ print(f)
+ if len(unknown_files) > 0:
+ print(
+ '\n\nUnable to verify the following files (no debug info in them):\n'
+ )
+ for f in unknown_files:
+ print(f)
+ return 1
+
+
+if __name__ == '__main__':
+ sys.exit(Main(sys.argv[1:]))
diff --git a/weekly_report.py b/weekly_report.py
new file mode 100755
index 00000000..e74c623d
--- /dev/null
+++ b/weekly_report.py
@@ -0,0 +1,255 @@
+#!/usr/bin/python2
+#
+# Copyright Google Inc. 2014
+"""Module to generate the 7-day crosperf reports."""
+
+from __future__ import print_function
+
+import argparse
+import datetime
+import os
+import sys
+
+from cros_utils import constants
+from cros_utils import command_executer
+
+WEEKDAYS = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat']
+DATA_ROOT_DIR = os.path.join(constants.CROSTC_WORKSPACE, 'weekly_test_data')
+EXPERIMENT_FILE = os.path.join(DATA_ROOT_DIR, 'weekly_report')
+MAIL_PROGRAM = '~/var/bin/mail-sheriff'
+
+
+def Generate_Vanilla_Report_File(vanilla_image_paths, board, remote,
+ chromeos_root, cmd_executer):
+
+ experiment_header = """
+name: weekly_vanilla_report
+cache_only: True
+same_specs: False
+board: %s
+remote: %s
+""" % (board, remote)
+
+ experiment_tests = """
+benchmark: all_toolchain_perf {
+ suite: telemetry_Crosperf
+ iterations: 3
+}
+"""
+
+ filename = '%s_%s_vanilla.exp' % (EXPERIMENT_FILE, board)
+ if os.path.exists(filename):
+ cmd = 'rm %s' % filename
+ cmd_executer.RunCommand(cmd)
+
+ with open(filename, 'w') as f:
+ f.write(experiment_header)
+ f.write(experiment_tests)
+
+ # Add each vanilla image
+ for test_path in vanilla_image_paths:
+ pieces = test_path.split('/')
+ test_name = pieces[-1]
+ test_image = """
+%s {
+ chromeos_root: %s
+ chromeos_image: %s
+}
+""" % (test_name, chromeos_root, os.path.join(test_path,
+ 'chromiumos_test_image.bin'))
+ f.write(test_image)
+
+ return filename
+
+
+def Generate_Test_File(test_image_paths, vanilla_image_path, board, remote,
+ chromeos_root, cmd_executer):
+
+ experiment_header = """
+name: weekly_report
+cache_only: True
+same_specs: False
+board: %s
+remote: %s
+""" % (board, remote)
+
+ experiment_tests = """
+benchmark: all_toolchain_perf {
+ suite: telemetry_Crosperf
+ iterations: 3
+}
+"""
+
+ filename = '%s_%s.exp' % (EXPERIMENT_FILE, board)
+ if os.path.exists(filename):
+ cmd = 'rm %s' % filename
+ cmd_executer.RunCommand(cmd)
+
+ with open(filename, 'w') as f:
+ f.write(experiment_header)
+ f.write(experiment_tests)
+
+ # Add vanilla image (first)
+ vanilla_image = """
+%s {
+ chromeos_root: %s
+ chromeos_image: %s
+}
+""" % (vanilla_image_path.split('/')[-1], chromeos_root,
+ os.path.join(vanilla_image_path, 'chromiumos_test_image.bin'))
+
+ f.write(vanilla_image)
+
+ # Add each test image
+ for test_path in test_image_paths:
+ pieces = test_path.split('/')
+ test_name = pieces[-1]
+ test_image = """
+%s {
+ chromeos_root: %s
+ chromeos_image: %s
+}
+""" % (test_name, chromeos_root, os.path.join(test_path,
+ 'chromiumos_test_image.bin'))
+ f.write(test_image)
+
+ return filename
+
+
+def Main(argv):
+
+ parser = argparse.ArgumentParser()
+ parser.add_argument('-b', '--board', dest='board', help='Target board.')
+ parser.add_argument('-r', '--remote', dest='remote', help='Target device.')
+ parser.add_argument('-v',
+ '--vanilla_only',
+ dest='vanilla_only',
+ action='store_true',
+ default=False,
+ help='Generate a report comparing only the vanilla '
+ 'images.')
+
+ options = parser.parse_args(argv[1:])
+
+ if not options.board:
+ print('Must specify a board.')
+ return 1
+
+ if not options.remote:
+ print('Must specify at least one remote.')
+ return 1
+
+ cmd_executer = command_executer.GetCommandExecuter(log_level='average')
+
+ # Find starting index, for cycling through days of week, generating
+ # reports starting 6 days ago from today. Generate list of indices for
+ # order in which to look at weekdays for report:
+ todays_index = datetime.datetime.today().isoweekday()
+ indices = []
+ start = todays_index + 1
+ end = start + 7
+ for i in range(start, end):
+ indices.append(i % 7)
+ # E.g. if today is Sunday, then start report with last Monday, so
+ # indices = [1, 2, 3, 4, 5, 6, 0].
+
+ # Find all the test image tar files, untar them and add them to
+ # the list. Also find and untar vanilla image tar files, and keep
+ # track of the first vanilla image.
+ report_image_paths = []
+ vanilla_image_paths = []
+ first_vanilla_image = None
+ for i in indices:
+ day = WEEKDAYS[i]
+ data_path = os.path.join(DATA_ROOT_DIR, options.board, day)
+ if os.path.exists(data_path):
+ # First, untar the test image.
+ tar_file_name = '%s_test_image.tar' % day
+ tar_file_path = os.path.join(data_path, tar_file_name)
+ image_dir = '%s_test_image' % day
+ image_path = os.path.join(data_path, image_dir)
+ if os.path.exists(tar_file_path):
+ if not os.path.exists(image_path):
+ os.makedirs(image_path)
+ cmd = ('cd %s; tar -xvf %s -C %s --strip-components 1' %
+ (data_path, tar_file_path, image_path))
+ ret = cmd_executer.RunCommand(cmd)
+ if not ret:
+ report_image_paths.append(image_path)
+ # Next, untar the vanilla image.
+ vanilla_file = '%s_vanilla_image.tar' % day
+ v_file_path = os.path.join(data_path, vanilla_file)
+ image_dir = '%s_vanilla_image' % day
+ image_path = os.path.join(data_path, image_dir)
+ if os.path.exists(v_file_path):
+ if not os.path.exists(image_path):
+ os.makedirs(image_path)
+ cmd = ('cd %s; tar -xvf %s -C %s --strip-components 1' %
+ (data_path, v_file_path, image_path))
+ ret = cmd_executer.RunCommand(cmd)
+ if not ret:
+ vanilla_image_paths.append(image_path)
+ if not first_vanilla_image:
+ first_vanilla_image = image_path
+
+ # Find a chroot we can use. Look for a directory containing both
+ # an experiment file and a chromeos directory (the experiment file will
+ # only be created if both images built successfully, i.e. the chroot is
+ # good).
+ chromeos_root = None
+ timestamp = datetime.datetime.strftime(datetime.datetime.now(),
+ '%Y-%m-%d_%H:%M:%S')
+ results_dir = os.path.join(
+ os.path.expanduser('~/nightly_test_reports'), '%s.%s' % (
+ timestamp, options.board), 'weekly_tests')
+
+ for day in WEEKDAYS:
+ startdir = os.path.join(constants.CROSTC_WORKSPACE, day)
+ num_dirs = os.listdir(startdir)
+ for d in num_dirs:
+ exp_file = os.path.join(startdir, d, 'toolchain_experiment.txt')
+ chroot = os.path.join(startdir, d, 'chromeos')
+ if os.path.exists(chroot) and os.path.exists(exp_file):
+ chromeos_root = chroot
+ if chromeos_root:
+ break
+ if chromeos_root:
+ break
+
+ if not chromeos_root:
+ print('Unable to locate a usable chroot. Exiting without report.')
+ return 1
+
+ # Create the Crosperf experiment file for generating the weekly report.
+ if not options.vanilla_only:
+ filename = Generate_Test_File(report_image_paths, first_vanilla_image,
+ options.board, options.remote, chromeos_root,
+ cmd_executer)
+ else:
+ filename = Generate_Vanilla_Report_File(vanilla_image_paths, options.board,
+ options.remote, chromeos_root,
+ cmd_executer)
+
+ # Run Crosperf on the file to generate the weekly report.
+ cmd = ('%s/toolchain-utils/crosperf/crosperf '
+ '%s --no_email=True --results_dir=%s' %
+ (constants.CROSTC_WORKSPACE, filename, results_dir))
+ retv = cmd_executer.RunCommand(cmd)
+ if retv == 0:
+ # Send the email, if the crosperf command worked.
+ filename = os.path.join(results_dir, 'msg_body.html')
+ if (os.path.exists(filename) and
+ os.path.exists(os.path.expanduser(MAIL_PROGRAM))):
+ vanilla_string = ' '
+ if options.vanilla_only:
+ vanilla_string = ' Vanilla '
+ command = ('cat %s | %s -s "Weekly%sReport results, %s" -team -html' %
+ (filename, MAIL_PROGRAM, vanilla_string, options.board))
+ retv = cmd_executer.RunCommand(command)
+
+ return retv
+
+
+if __name__ == '__main__':
+ retval = Main(sys.argv)
+ sys.exit(retval)