diff options
Diffstat (limited to 'gdb/testsuite/gdb.base/dtrace-probe.exp')
-rw-r--r-- | gdb/testsuite/gdb.base/dtrace-probe.exp | 106 |
1 files changed, 106 insertions, 0 deletions
diff --git a/gdb/testsuite/gdb.base/dtrace-probe.exp b/gdb/testsuite/gdb.base/dtrace-probe.exp new file mode 100644 index 0000000..e42e948 --- /dev/null +++ b/gdb/testsuite/gdb.base/dtrace-probe.exp @@ -0,0 +1,106 @@ +# Copyright (C) 2014, 2015 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/>. + +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 |