# Copyright (C) 2014-2017 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 . load_lib "dtrace.exp" # Run the tests. # This returns -1 on failure to compile or start, 0 otherwise. proc dtrace_test {} { global testfile hex srcfile binfile standard_testfile if {[dtrace_build_usdt_test_program] == -1} { untested "could not compile test program" return -1 } clean_restart ${binfile} if ![runto_main] { return -1 } gdb_test "print \$_probe_argc" "No probe at PC $hex" \ "check argument not at probe point" # Test the 'info probes' command. gdb_test "info probes dtrace" \ "test *progress-counter *$hex +no.*test *two-locations *$hex +always.*test *two-locations *$hex +always.*" \ "info probes dtrace" # Disabling the probe test:two-locations shall have no effect, # since no is-enabled probes are defined for it in the object # file. gdb_test "disable probe test two-locations" \ "Probe test:two-locations cannot be disabled.*" \ "disable probe test two-locations" # On the other hand, the probe test:progress-counter can be # enabled and then disabled again. gdb_test "enable probe test progress-counter" \ "Probe test:progress-counter enabled.*" \ "enable probe test progress-counter" gdb_test "disable probe test progress-counter" \ "Probe test:progress-counter disabled.*" \ "disable probe test progress-counter" # Since test:progress-counter is disabled we can run to the second # instance of the test:two-locations probe. if {![runto "-probe-dtrace test:two-locations"]} { fail "run to the first test:two-locations probe point" } if {![runto "-probe-dtrace test:two-locations"]} { fail "run to the second test:two-locations probe point" } # Go back to the breakpoint on main() and enable the # test:progress-counter probe. Set a breakpoint on it and see # that it gets reached. if ![runto_main] { return -1 } gdb_test "enable probe test progress-counter" \ "Probe test:progress-counter enabled.*" \ "enable probe test progress-counter" gdb_test "break -probe-dtrace test:progress-counter" \ ".*Breakpoint \[0-9\]+ .*" "set breakpoint in test:progress-counter" gdb_continue_to_breakpoint "test:progress-counter" # Test probe arguments. gdb_test "print \$_probe_argc" " = 2" \ "print \$_probe_argc for probe progress-counter" gdb_test "print \$_probe_arg0" \ " = $hex \"application\"" \ "print \$_probe_arg0 for probe progress-counter" gdb_test "print \$_probe_arg1" " = 1" \ "print \$_probe_arg1 for probe progress-counter" # Set a breakpoint with multiple probe locations. gdb_test "break -pdtrace test:two-locations" \ "Breakpoint \[0-9\]+ at $hex.*2 locations.*" \ "set multi-location probe breakpoint (probe two-locations)" return 0 } dtrace_test