| # Copyright (C) 2014-2021 Free Software Foundation, Inc. |
| |
| # This program is free software; you can redistribute it and/or modify |
| # it under the terms of the GNU General Public License as published by |
| # the Free Software Foundation; either version 3 of the License, or |
| # (at your option) any later version. |
| # |
| # This program is distributed in the hope that it will be useful, |
| # but WITHOUT ANY WARRANTY; without even the implied warranty of |
| # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| # GNU General Public License for more details. |
| # |
| # You should have received a copy of the GNU General Public License |
| # along with this program. If not, see <http://www.gnu.org/licenses/>. |
| |
| 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 "failed to compile" |
| 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. |
| |
| runto "-probe-dtrace test:two-locations"] |
| runto "-probe-dtrace test:two-locations"] |
| |
| # 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 |