From 457debd23eb3eef17d24ecf3534891ec640684f6 Mon Sep 17 00:00:00 2001 From: David Smith Date: Wed, 11 Mar 2009 16:07:39 -0500 Subject: Make printf tests fail when stap fails. 2009-03-11 David Smith * systemtap.printf/end1.exp: The test fails when stap fails. * systemtap.printf/end1b.exp: Ditto. * systemtap.printf/mixed_out.exp: Ditto. * systemtap.printf/mixed_outb.exp: Ditto. * systemtap.printf/out1.exp: Ditto. * systemtap.printf/out1b.exp: Ditto. * systemtap.printf/out2.exp: Ditto. * systemtap.printf/out2b.exp: Ditto. * systemtap.printf/out3.exp: Ditto. * systemtap.printf/out3b.exp: Ditto. --- testsuite/systemtap.printf/end1.exp | 6 +++--- testsuite/systemtap.printf/end1b.exp | 2 +- testsuite/systemtap.printf/mixed_out.exp | 4 ++-- testsuite/systemtap.printf/mixed_outb.exp | 2 +- testsuite/systemtap.printf/out1.exp | 2 +- testsuite/systemtap.printf/out1b.exp | 2 +- testsuite/systemtap.printf/out2.exp | 2 +- testsuite/systemtap.printf/out2b.exp | 2 +- testsuite/systemtap.printf/out3.exp | 2 +- testsuite/systemtap.printf/out3b.exp | 2 +- 10 files changed, 13 insertions(+), 13 deletions(-) (limited to 'testsuite') diff --git a/testsuite/systemtap.printf/end1.exp b/testsuite/systemtap.printf/end1.exp index 0a4dd32e..e4f164f5 100644 --- a/testsuite/systemtap.printf/end1.exp +++ b/testsuite/systemtap.printf/end1.exp @@ -11,15 +11,15 @@ if {[catch {exec mktemp -t staptestXXXXX} tmpfile]} { } if {[catch {exec stap -o $tmpfile $tpath} res]} { - untested $TEST_NAME - puts "$res" + fail $TEST_NAME + puts "stap failed: $res" catch {exec rm -f $tmpfile} return } if {[catch {exec cmp $tmpfile $srcdir/$subdir/large_output} res]} { - fail $TEST_NAME puts "$res" + fail $TEST_NAME catch {exec rm -f $tmpfile} return } diff --git a/testsuite/systemtap.printf/end1b.exp b/testsuite/systemtap.printf/end1b.exp index 1764a383..08cfa648 100644 --- a/testsuite/systemtap.printf/end1b.exp +++ b/testsuite/systemtap.printf/end1b.exp @@ -16,8 +16,8 @@ if {[catch {exec mktemp -t staptestXXXXX} tmpfile]} { } if {[catch {exec stap -b -o $tmpfile $test} res]} { - untested $TEST_NAME puts "stap failed: $res" + fail $TEST_NAME as_root "/bin/rm -f [glob ${tmpfile}*]" return } diff --git a/testsuite/systemtap.printf/mixed_out.exp b/testsuite/systemtap.printf/mixed_out.exp index 093a8ca1..d73a55a6 100644 --- a/testsuite/systemtap.printf/mixed_out.exp +++ b/testsuite/systemtap.printf/mixed_out.exp @@ -11,8 +11,8 @@ if {[catch {exec mktemp -t staptestXXXXX} tmpfile]} { } if {[catch {exec stap -DMAXACTION=100000 -o $tmpfile $tpath} res]} { - untested $TEST_NAME - puts "$res" + fail $TEST_NAME + puts "stap failed: $res" catch {exec rm -f $tmpfile} return } diff --git a/testsuite/systemtap.printf/mixed_outb.exp b/testsuite/systemtap.printf/mixed_outb.exp index cbf7b920..30c0c92f 100644 --- a/testsuite/systemtap.printf/mixed_outb.exp +++ b/testsuite/systemtap.printf/mixed_outb.exp @@ -16,7 +16,7 @@ if {[catch {exec mktemp -t staptestXXXXX} tmpfile]} { } if {[catch {exec stap -DMAXACTION=100000 -b -o $tmpfile $test} res]} { - untested $TEST_NAME + fail $TEST_NAME puts "stap failed: $res" as_root "/bin/rm -f [glob ${tmpfile}*]" return diff --git a/testsuite/systemtap.printf/out1.exp b/testsuite/systemtap.printf/out1.exp index f89d39bf..d5728c0f 100644 --- a/testsuite/systemtap.printf/out1.exp +++ b/testsuite/systemtap.printf/out1.exp @@ -11,7 +11,7 @@ if {[catch {exec mktemp -t staptestXXXXX} tmpfile]} { } if {[catch {exec stap -o $tmpfile $tpath} res]} { - untested $TEST_NAME + fail $TEST_NAME puts "$res" catch {exec rm -f $tmpfile} return diff --git a/testsuite/systemtap.printf/out1b.exp b/testsuite/systemtap.printf/out1b.exp index 378ea5cd..2f702a2f 100644 --- a/testsuite/systemtap.printf/out1b.exp +++ b/testsuite/systemtap.printf/out1b.exp @@ -16,7 +16,7 @@ if {[catch {exec mktemp -t staptestXXXXX} tmpfile]} { } if {[catch {exec stap -b -o $tmpfile $test} res]} { - untested $TEST_NAME + fail $TEST_NAME puts "stap failed: $res" as_root "/bin/rm -f [glob ${tmpfile}*]" return diff --git a/testsuite/systemtap.printf/out2.exp b/testsuite/systemtap.printf/out2.exp index 7b312b11..dd96f394 100644 --- a/testsuite/systemtap.printf/out2.exp +++ b/testsuite/systemtap.printf/out2.exp @@ -11,7 +11,7 @@ if {[catch {exec mktemp -t staptestXXXXX} tmpfile]} { } if {[catch {exec stap -o $tmpfile $tpath} res]} { - untested $TEST_NAME + fail $TEST_NAME puts "$res" catch {exec rm -f $tmpfile} return diff --git a/testsuite/systemtap.printf/out2b.exp b/testsuite/systemtap.printf/out2b.exp index f7fdef6b..0b56c940 100644 --- a/testsuite/systemtap.printf/out2b.exp +++ b/testsuite/systemtap.printf/out2b.exp @@ -16,7 +16,7 @@ if {[catch {exec mktemp -t staptestXXXXX} tmpfile]} { } if {[catch {exec stap -b -o $tmpfile $test} res]} { - untested $TEST_NAME + fail $TEST_NAME puts "stap failed: $res" as_root "/bin/rm -f [glob ${tmpfile}*]" return diff --git a/testsuite/systemtap.printf/out3.exp b/testsuite/systemtap.printf/out3.exp index c16db391..96ca2bc5 100644 --- a/testsuite/systemtap.printf/out3.exp +++ b/testsuite/systemtap.printf/out3.exp @@ -11,7 +11,7 @@ if {[catch {exec mktemp -t staptestXXXXX} tmpfile]} { } if {[catch {exec stap -DMAXACTION=100000 -o $tmpfile $tpath} res]} { - untested $TEST_NAME + fail $TEST_NAME puts "$res" catch {exec rm -f $tmpfile} return diff --git a/testsuite/systemtap.printf/out3b.exp b/testsuite/systemtap.printf/out3b.exp index 16ee2182..c42d03b7 100644 --- a/testsuite/systemtap.printf/out3b.exp +++ b/testsuite/systemtap.printf/out3b.exp @@ -16,7 +16,7 @@ if {[catch {exec mktemp -t staptestXXXXX} tmpfile]} { } if {[catch {exec stap -DMAXACTION=100000 -b -o $tmpfile $test} res]} { - untested $TEST_NAME + fail $TEST_NAME puts "stap failed: $res" as_root "/bin/rm -f [glob ${tmpfile}*]" return -- cgit From 905728a036bf9d5cf0c21d684ad53882489c82c8 Mon Sep 17 00:00:00 2001 From: William Cohen Date: Thu, 18 Jun 2009 16:14:42 -0400 Subject: Check in sk_stream_wait_memory.stp example. --- testsuite/systemtap.examples/index.html | 3 ++ testsuite/systemtap.examples/index.txt | 9 ++++++ testsuite/systemtap.examples/keyword-index.html | 12 ++++++++ testsuite/systemtap.examples/keyword-index.txt | 36 ++++++++++++++++++++++ .../network/sk_stream_wait_memory.meta | 13 ++++++++ .../network/sk_stream_wait_memory.stp | 25 +++++++++++++++ 6 files changed, 98 insertions(+) create mode 100644 testsuite/systemtap.examples/network/sk_stream_wait_memory.meta create mode 100755 testsuite/systemtap.examples/network/sk_stream_wait_memory.stp (limited to 'testsuite') diff --git a/testsuite/systemtap.examples/index.html b/testsuite/systemtap.examples/index.html index b2ed3a3a..a5fddb4e 100644 --- a/testsuite/systemtap.examples/index.html +++ b/testsuite/systemtap.examples/index.html @@ -97,6 +97,9 @@ keywords: NETWORK network/nettop.stp - Periodic Listing of Processes Using Network Interfaces
keywords: NETWORK TRAFFIC PER-PROCESS

Every five seconds the nettop.stp script prints out a list of processed (PID and command) with the number of packets sent/received and the amount of data sent/received by the process during that interval.

+
  • network/sk_stream_wait_memory.stp - Track Start and Stop of Processes Due to Network Buffer Space
    +keywords: NETWORK TCP BUFFER MEMORY
    +

    The sk_stream-wait_memory.stp prints a time stamp, executable, and pid each time a process blocks due to the send buffer being full. A similar entry is printed each time a process continues because there is room in the buffer.

  • network/socket-trace.stp - Trace Functions called in Network Socket Code
    keywords: NETWORK SOCKET

    The script instrument each of the functions inn the Linux kernel's net/socket.c file. The script prints out trace. The first element of a line is time delta in microseconds from the previous entry. This is followed by the command name and the PID. The "->" and "<-" indicates function entry and function exit, respectively. The last element of the line is the function name.

  • diff --git a/testsuite/systemtap.examples/index.txt b/testsuite/systemtap.examples/index.txt index 91fc66ae..95e81435 100644 --- a/testsuite/systemtap.examples/index.txt +++ b/testsuite/systemtap.examples/index.txt @@ -176,6 +176,15 @@ keywords: network traffic per-process interval. +network/sk_stream_wait_memory.stp - Track Start and Stop of Processes Due to Network Buffer Space +keywords: network tcp buffer memory + + The sk_stream-wait_memory.stp prints a time stamp, executable, and + pid each time a process blocks due to the send buffer being full. A + similar entry is printed each time a process continues because there + is room in the buffer. + + network/socket-trace.stp - Trace Functions called in Network Socket Code keywords: network socket diff --git a/testsuite/systemtap.examples/keyword-index.html b/testsuite/systemtap.examples/keyword-index.html index 7306c164..e144337c 100644 --- a/testsuite/systemtap.examples/keyword-index.html +++ b/testsuite/systemtap.examples/keyword-index.html @@ -57,6 +57,9 @@ keywords: IO network/dropwatch.stp - Watch Where Socket Buffers are Freed in the Kernel
    keywords: NETWORK TRACEPOINT BUFFER FREE

    Every five seconds the dropwatch.stp script lists the number of socket buffers freed at locations in the kernel.

    +
  • network/sk_stream_wait_memory.stp - Track Start and Stop of Processes Due to Network Buffer Space
    +keywords: NETWORK TCP BUFFER MEMORY
    +

    The sk_stream-wait_memory.stp prints a time stamp, executable, and pid each time a process blocks due to the send buffer being full. A similar entry is printed each time a process continues because there is room in the buffer.

  • CALLGRAPH

      @@ -162,6 +165,9 @@ keywords: MEMORY
    • memory/pfaults.stp - Generate Log of Major and Minor Page Faults
      keywords: MEMORY

      The pfaults.stp script generates a simple log for each major and minor page fault that occurs on the system. Each line contains a timestamp (in microseconds) when the page fault servicing was completed, the pid of the process, the address of the page fault, the type of access (read or write), the type of fault (major or minor), and the elapsed time for page fault. This log can be examined to determine where the page faults are occuring.

    • +
    • network/sk_stream_wait_memory.stp - Track Start and Stop of Processes Due to Network Buffer Space
      +keywords: NETWORK TCP BUFFER MEMORY
      +

      The sk_stream-wait_memory.stp prints a time stamp, executable, and pid each time a process blocks due to the send buffer being full. A similar entry is printed each time a process continues because there is room in the buffer.

    MONITOR

      @@ -177,6 +183,9 @@ keywords: NETWORK network/nettop.stp - Periodic Listing of Processes Using Network Interfaces
      keywords: NETWORK TRAFFIC PER-PROCESS

      Every five seconds the nettop.stp script prints out a list of processed (PID and command) with the number of packets sent/received and the amount of data sent/received by the process during that interval.

      +
    • network/sk_stream_wait_memory.stp - Track Start and Stop of Processes Due to Network Buffer Space
      +keywords: NETWORK TCP BUFFER MEMORY
      +

      The sk_stream-wait_memory.stp prints a time stamp, executable, and pid each time a process blocks due to the send buffer being full. A similar entry is printed each time a process continues because there is room in the buffer.

    • network/socket-trace.stp - Trace Functions called in Network Socket Code
      keywords: NETWORK SOCKET

      The script instrument each of the functions inn the Linux kernel's net/socket.c file. The script prints out trace. The first element of a line is time delta in microseconds from the previous entry. This is followed by the command name and the PID. The "->" and "<-" indicates function entry and function exit, respectively. The last element of the line is the function name.

    • @@ -303,6 +312,9 @@ keywords: SYSCALL TCP
        +
      • network/sk_stream_wait_memory.stp - Track Start and Stop of Processes Due to Network Buffer Space
        +keywords: NETWORK TCP BUFFER MEMORY
        +

        The sk_stream-wait_memory.stp prints a time stamp, executable, and pid each time a process blocks due to the send buffer being full. A similar entry is printed each time a process continues because there is room in the buffer.

      • network/tcp_connections.stp - Track Creation of Incoming TCP Connections
        keywords: NETWORK TCP SOCKET

        The tcp_connections.stp script prints information for each new incoming TCP connection accepted by the computer. The information includes the UID, the command accepting the connection, the PID of the command, the port the connection is on, and the IP address of the originator of the request.

      • diff --git a/testsuite/systemtap.examples/keyword-index.txt b/testsuite/systemtap.examples/keyword-index.txt index eee89e22..8305e208 100644 --- a/testsuite/systemtap.examples/keyword-index.txt +++ b/testsuite/systemtap.examples/keyword-index.txt @@ -39,6 +39,15 @@ keywords: network tracepoint buffer free socket buffers freed at locations in the kernel. +network/sk_stream_wait_memory.stp - Track Start and Stop of Processes Due to Network Buffer Space +keywords: network tcp buffer memory + + The sk_stream-wait_memory.stp prints a time stamp, executable, and + pid each time a process blocks due to the send buffer being full. A + similar entry is printed each time a process continues because there + is room in the buffer. + + = CALLGRAPH = general/para-callgraph.stp - Callgraph tracing with arguments @@ -275,6 +284,15 @@ keywords: memory determine where the page faults are occuring. +network/sk_stream_wait_memory.stp - Track Start and Stop of Processes Due to Network Buffer Space +keywords: network tcp buffer memory + + The sk_stream-wait_memory.stp prints a time stamp, executable, and + pid each time a process blocks due to the send buffer being full. A + similar entry is printed each time a process continues because there + is room in the buffer. + + = MONITOR = io/ttyspy.stp - Monitor tty typing. @@ -303,6 +321,15 @@ keywords: network traffic per-process interval. +network/sk_stream_wait_memory.stp - Track Start and Stop of Processes Due to Network Buffer Space +keywords: network tcp buffer memory + + The sk_stream-wait_memory.stp prints a time stamp, executable, and + pid each time a process blocks due to the send buffer being full. A + similar entry is printed each time a process continues because there + is room in the buffer. + + network/socket-trace.stp - Trace Functions called in Network Socket Code keywords: network socket @@ -624,6 +651,15 @@ keywords: syscall wait4 = TCP = +network/sk_stream_wait_memory.stp - Track Start and Stop of Processes Due to Network Buffer Space +keywords: network tcp buffer memory + + The sk_stream-wait_memory.stp prints a time stamp, executable, and + pid each time a process blocks due to the send buffer being full. A + similar entry is printed each time a process continues because there + is room in the buffer. + + network/tcp_connections.stp - Track Creation of Incoming TCP Connections keywords: network tcp socket diff --git a/testsuite/systemtap.examples/network/sk_stream_wait_memory.meta b/testsuite/systemtap.examples/network/sk_stream_wait_memory.meta new file mode 100644 index 00000000..bc798f72 --- /dev/null +++ b/testsuite/systemtap.examples/network/sk_stream_wait_memory.meta @@ -0,0 +1,13 @@ +title: Track Start and Stop of Processes Due to Network Buffer Space +name: sk_stream_wait_memory.stp +version: 1.0 +author: Fabio Olive Leite at Red Hat +keywords: network tcp buffer memory +subsystem: kernel +status: production +exit: user-controlled +output: trace +scope: system-wide +description: The sk_stream-wait_memory.stp prints a time stamp, executable, and pid each time a process blocks due to the send buffer being full. A similar entry is printed each time a process continues because there is room in the buffer. +test_check: stap -p4 sk_stream_wait_memory.stp +test_installcheck: stap sk_stream_wait_memory.stp -c "sleep 1" diff --git a/testsuite/systemtap.examples/network/sk_stream_wait_memory.stp b/testsuite/systemtap.examples/network/sk_stream_wait_memory.stp new file mode 100755 index 00000000..159d77a6 --- /dev/null +++ b/testsuite/systemtap.examples/network/sk_stream_wait_memory.stp @@ -0,0 +1,25 @@ +# Simple probe to detect when a process is waiting for more socket send +# buffer memory. Usually means the process is doing writes larger than the +# socker send buffer size or there is a slow receiver at the other side. +# Increasing the socket's send buffer size might help decrease application +# latencies, but it might also make it worse, so buyer beware. +# +# Tipical output: timestamp in microseconds: procname(pid) event +# +# 1218230114875167: python(17631) blocked on full send buffer +# 1218230114876196: python(17631) recovered from full send buffer +# 1218230114876271: python(17631) blocked on full send buffer +# 1218230114876479: python(17631) recovered from full send buffer + +probe kernel.function("sk_stream_wait_memory") +{ + printf("%u: %s(%d) blocked on full send buffer\n", + gettimeofday_us(), execname(), pid()) +} + +probe kernel.function("sk_stream_wait_memory").return +{ + printf("%u: %s(%d) recovered from full send buffer\n", + gettimeofday_us(), execname(), pid()) +} + -- cgit From ed35c8ac5bc2da83fedfb53d0c283ee8c5c77f39 Mon Sep 17 00:00:00 2001 From: "Frank Ch. Eigler" Date: Thu, 18 Jun 2009 17:19:29 -0400 Subject: PR10298: tweak global param initialization for NULL etc. * translate.cxx (translate_pass): Emit module_parm stuff at the very end. * testsuite/buildok/null.stp: New test. --- testsuite/buildok/null.stp | 5 +++++ 1 file changed, 5 insertions(+) create mode 100755 testsuite/buildok/null.stp (limited to 'testsuite') diff --git a/testsuite/buildok/null.stp b/testsuite/buildok/null.stp new file mode 100755 index 00000000..9bcaf3f6 --- /dev/null +++ b/testsuite/buildok/null.stp @@ -0,0 +1,5 @@ +#! stap -p4 + +# PR10298 +global foo = 5 +probe begin { if (foo == NULL) log("hello") } -- cgit From e6b653c8c2e63d54a3b33036130a6d8272680f54 Mon Sep 17 00:00:00 2001 From: William Cohen Date: Fri, 19 Jun 2009 11:33:29 -0400 Subject: Add froktracker.stp example. --- testsuite/systemtap.examples/index.html | 3 +++ testsuite/systemtap.examples/index.txt | 8 ++++++++ testsuite/systemtap.examples/keyword-index.html | 6 ++++++ testsuite/systemtap.examples/keyword-index.txt | 16 +++++++++++++++ .../systemtap.examples/process/forktracker.meta | 13 ++++++++++++ .../systemtap.examples/process/forktracker.stp | 23 ++++++++++++++++++++++ 6 files changed, 69 insertions(+) create mode 100644 testsuite/systemtap.examples/process/forktracker.meta create mode 100644 testsuite/systemtap.examples/process/forktracker.stp (limited to 'testsuite') diff --git a/testsuite/systemtap.examples/index.html b/testsuite/systemtap.examples/index.html index a5fddb4e..c485713c 100644 --- a/testsuite/systemtap.examples/index.html +++ b/testsuite/systemtap.examples/index.html @@ -112,6 +112,9 @@ keywords: NETWORK process/errsnoop.stp - tabulate system call errors
        keywords: PROCESS SYSCALL

        The script prints a periodic tabular report about failing system calls, by process and by syscall failure. The first optional argument specifies the reporting interval (in seconds, default 5); the second optional argument gives a screen height (number of lines in the report, default 20).

        +
      • process/forktracker.stp - Trace Creation of Processes
        +keywords: PROCESS SCHEDULER
        +

        The forktracker.stp script prints out a time-stamped entry showing each fork and exec operation on the machine. This can be useful for determine what process is creating a flurry of short-lived processes.

      • process/futexes.stp - System-Wide Futex Contention
        keywords: SYSCALL LOCKING FUTEX

        The script watches the futex syscall on the system. On exit the futexes address, the number of contentions, and the average time for each contention on the futex are printed from lowest pid number to highest.

      • diff --git a/testsuite/systemtap.examples/index.txt b/testsuite/systemtap.examples/index.txt index 95e81435..caf1a5ff 100644 --- a/testsuite/systemtap.examples/index.txt +++ b/testsuite/systemtap.examples/index.txt @@ -224,6 +224,14 @@ keywords: process syscall in the report, default 20). +process/forktracker.stp - Trace Creation of Processes +keywords: process scheduler + + The forktracker.stp script prints out a time-stamped entry showing + each fork and exec operation on the machine. This can be useful for + determine what process is creating a flurry of short-lived processes. + + process/futexes.stp - System-Wide Futex Contention keywords: syscall locking futex diff --git a/testsuite/systemtap.examples/keyword-index.html b/testsuite/systemtap.examples/keyword-index.html index e144337c..9852c992 100644 --- a/testsuite/systemtap.examples/keyword-index.html +++ b/testsuite/systemtap.examples/keyword-index.html @@ -210,6 +210,9 @@ keywords: NETWORK process/errsnoop.stp - tabulate system call errors
        keywords: PROCESS SYSCALL

        The script prints a periodic tabular report about failing system calls, by process and by syscall failure. The first optional argument specifies the reporting interval (in seconds, default 5); the second optional argument gives a screen height (number of lines in the report, default 20).

        +
      • process/forktracker.stp - Trace Creation of Processes
        +keywords: PROCESS SCHEDULER
        +

        The forktracker.stp script prints out a time-stamped entry showing each fork and exec operation on the machine. This can be useful for determine what process is creating a flurry of short-lived processes.

      • process/schedtimes.stp - Track Time Processes Spend in Various States using Tracepoints
        keywords: PROCESS SCHEDULER TIME TRACEPOINT

        The schedtimes.stp script instruments the scheduler to track the amount of time that each process spends running, sleeping, queued, and waiting for io. On exit the script prints out the accumulated time for each state of processes observed. Optionally, this script can be used with the '-c' or '-x' options to focus on a specific PID.

      • @@ -243,6 +246,9 @@ keywords: SYSCALL SCHEDULER
          +
        • process/forktracker.stp - Trace Creation of Processes
          +keywords: PROCESS SCHEDULER
          +

          The forktracker.stp script prints out a time-stamped entry showing each fork and exec operation on the machine. This can be useful for determine what process is creating a flurry of short-lived processes.

        • process/schedtimes.stp - Track Time Processes Spend in Various States using Tracepoints
          keywords: PROCESS SCHEDULER TIME TRACEPOINT

          The schedtimes.stp script instruments the scheduler to track the amount of time that each process spends running, sleeping, queued, and waiting for io. On exit the script prints out the accumulated time for each state of processes observed. Optionally, this script can be used with the '-c' or '-x' options to focus on a specific PID.

        • diff --git a/testsuite/systemtap.examples/keyword-index.txt b/testsuite/systemtap.examples/keyword-index.txt index 8305e208..4778afc7 100644 --- a/testsuite/systemtap.examples/keyword-index.txt +++ b/testsuite/systemtap.examples/keyword-index.txt @@ -390,6 +390,14 @@ keywords: process syscall in the report, default 20). +process/forktracker.stp - Trace Creation of Processes +keywords: process scheduler + + The forktracker.stp script prints out a time-stamped entry showing + each fork and exec operation on the machine. This can be useful for + determine what process is creating a flurry of short-lived processes. + + process/schedtimes.stp - Track Time Processes Spend in Various States using Tracepoints keywords: process scheduler time tracepoint @@ -480,6 +488,14 @@ keywords: syscall read write time io = SCHEDULER = +process/forktracker.stp - Trace Creation of Processes +keywords: process scheduler + + The forktracker.stp script prints out a time-stamped entry showing + each fork and exec operation on the machine. This can be useful for + determine what process is creating a flurry of short-lived processes. + + process/schedtimes.stp - Track Time Processes Spend in Various States using Tracepoints keywords: process scheduler time tracepoint diff --git a/testsuite/systemtap.examples/process/forktracker.meta b/testsuite/systemtap.examples/process/forktracker.meta new file mode 100644 index 00000000..f3ef3709 --- /dev/null +++ b/testsuite/systemtap.examples/process/forktracker.meta @@ -0,0 +1,13 @@ +title: Trace Creation of Processes +name: forktracker.stp +version: 0.1 +author: Phil Muldoon at Red Hat +keywords: process scheduler +subsystem: scheduler +status: production +exit: user-controlled +output: trace +scope: system-wide +description: The forktracker.stp script prints out a time-stamped entry showing each fork and exec operation on the machine. This can be useful for determine what process is creating a flurry of short-lived processes. +test_check: stap -p4 forktracker.stp +test_installcheck: stap forkracker.stp -c "sleep 1" diff --git a/testsuite/systemtap.examples/process/forktracker.stp b/testsuite/systemtap.examples/process/forktracker.stp new file mode 100644 index 00000000..525aa0a5 --- /dev/null +++ b/testsuite/systemtap.examples/process/forktracker.stp @@ -0,0 +1,23 @@ +#! /usr/bin/env stap +# +# This is a stap script to monitor process creations (fork(), exec()'s). +# Based off of stap script found: http://picobot.org/wordpress/?p=27 +# With some minor modifications (i.e. timestamping) +# +# Usage: stap forktracker.stp +# +# Sample output: +# +# timestamp: process_name (pid) new_pid +# +# Version 0.1 + +probe kprocess.create { + printf("%-25s: %s (%d) created %d\n", + ctime(gettimeofday_s()), execname(), pid(), new_pid) +} + +probe kprocess.exec { + printf("%-25s: %s (%d) is exec'ing %s\n", + ctime(gettimeofday_s()), execname(), pid(), filename) +} -- cgit From 0c98234c86877cfea3df762dc8627b3f05c38e75 Mon Sep 17 00:00:00 2001 From: William Cohen Date: Fri, 19 Jun 2009 11:38:28 -0400 Subject: Make examples-index-gen.pl executable. --- testsuite/systemtap.examples/examples-index-gen.pl | 0 1 file changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 testsuite/systemtap.examples/examples-index-gen.pl (limited to 'testsuite') diff --git a/testsuite/systemtap.examples/examples-index-gen.pl b/testsuite/systemtap.examples/examples-index-gen.pl old mode 100644 new mode 100755 -- cgit From e94030f6ab5c9022e69c3b362d9fe3639718f06d Mon Sep 17 00:00:00 2001 From: William Cohen Date: Fri, 19 Jun 2009 11:47:53 -0400 Subject: Make forktracker.stp example executable. --- testsuite/systemtap.examples/process/forktracker.stp | 0 1 file changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 testsuite/systemtap.examples/process/forktracker.stp (limited to 'testsuite') diff --git a/testsuite/systemtap.examples/process/forktracker.stp b/testsuite/systemtap.examples/process/forktracker.stp old mode 100644 new mode 100755 -- cgit From 92b1a0c0ead841e781783e8f94cf22fa4694fc35 Mon Sep 17 00:00:00 2001 From: William Cohen Date: Fri, 19 Jun 2009 12:07:19 -0400 Subject: Revert "Make examples-index-gen.pl executable." This reverts commit 0c98234c86877cfea3df762dc8627b3f05c38e75. --- testsuite/systemtap.examples/examples-index-gen.pl | 0 1 file changed, 0 insertions(+), 0 deletions(-) mode change 100755 => 100644 testsuite/systemtap.examples/examples-index-gen.pl (limited to 'testsuite') diff --git a/testsuite/systemtap.examples/examples-index-gen.pl b/testsuite/systemtap.examples/examples-index-gen.pl old mode 100755 new mode 100644 -- cgit From 45148f5b5e371ff852dbbb08d83c5e87932b372e Mon Sep 17 00:00:00 2001 From: Stan Cox Date: Fri, 19 Jun 2009 14:04:55 -0400 Subject: Rename static_uprobes.exp to sdt_misc.exp --- testsuite/systemtap.base/sdt_misc.exp | 232 ++++++++++++++++++++++++++++ testsuite/systemtap.base/static_uprobes.exp | 232 ---------------------------- 2 files changed, 232 insertions(+), 232 deletions(-) create mode 100644 testsuite/systemtap.base/sdt_misc.exp delete mode 100644 testsuite/systemtap.base/static_uprobes.exp (limited to 'testsuite') diff --git a/testsuite/systemtap.base/sdt_misc.exp b/testsuite/systemtap.base/sdt_misc.exp new file mode 100644 index 00000000..6a597646 --- /dev/null +++ b/testsuite/systemtap.base/sdt_misc.exp @@ -0,0 +1,232 @@ +set test "static_user_markers" + +# Test miscellaneous features of .mark probes + +# Compile a C program to use as the user-space probing target +set sup_srcpath "[pwd]/static_user_markers.c" +set sup_exepath "[pwd]/static_user_markers.x" +set supcplus_exepath "[pwd]/static_user_markers_cplus.x" +set fp [open $sup_srcpath "w"] +puts $fp " +#include +#define USE_STAP_PROBE 1 +#include \"static_user_markers_.h\" + +void +bar (int i) +{ + STATIC_USER_MARKERS_TEST_PROBE_2(i); + if (i == 0) + i = 1000; + STAP_PROBE1(static_uprobes,test_probe_2,i); +} + +void +baz (int i, char* s) +{ + STAP_PROBE1(static_uprobes,test_probe_0,i); + if (i == 0) + i = 1000; + STATIC_USER_MARKERS_TEST_PROBE_3(i,s); +} + +void +buz (int parm) +{ + if (parm == 0) + parm = 1000; + DTRACE_PROBE1(static_user_markers,test_probe_4,parm); +} + +int +main () +{ + bar(2); + baz(3,(char*)\"abc\"); + buz(4); +} +" +close $fp + +set sup_stppath "[pwd]/static_user_markers.stp" +set fp [open $sup_stppath "w"] +puts $fp " +probe process(\"static_user_markers.x\").mark(\"test_probe_0\") +{ + printf(\"In test_probe_0 probe %#x\\n\", \$arg1) +} +probe process(\"static_user_markers.x\").mark(\"test_probe_2\") +{ + printf(\"In test_probe_2 probe %#x\\n\", \$arg1) +} +probe process(\"static_user_markers.x\").mark(\"test_probe_3\") +{ + printf(\"In test_probe_3 probe %#x %#x\\n\", \$arg1, \$arg2) +} +probe process(\"static_user_markers.x\").mark(\"test_probe_4\") +{ + printf(\"In test_probe_4 dtrace probe %#x\\n\", \$arg1) +} +" +close $fp + +set sup_dpath "[pwd]/static_user_markers_.d" +set sup_hpath "[pwd]/static_user_markers_.h" +set fp [open $sup_dpath "w"] +puts $fp " +provider static_user_markers { + probe test_probe_1 (); + probe test_probe_2 (int i); + probe test_probe_3 (int i, char* x); + probe test_probe_4 (int i); +}; +" +close $fp + +# Test dtrace + +if {[installtest_p]} { + set dtrace $env(SYSTEMTAP_PATH)/dtrace +} else { + set dtrace $srcdir/../dtrace +} +if {[catch {exec $dtrace -h -s $sup_dpath} res]} { + verbose -log "unable to run $dtrace: $res" +} +if {[file exists $sup_hpath]} then { + pass "$test dtrace" +} else { + fail "$test dtrace" + if { $verbose == 0 } { + catch {exec rm -f $sup_srcpath $sup_hpath $sup_stppath} + } + return +} + +if {[installtest_p]} { + set sdtdir $env(SYSTEMTAP_INCLUDES) +} else { + set sdtdir $srcdir/../includes +} + +set pbtype_flags {{""} {additional_flags=-DEXPERIMENTAL_UTRACE_SDT} {additional_flags=-DEXPERIMENTAL_KPROBE_SDT}} +set pbtype_mssgs {{uprobe} {utrace} {kprobe}} + +# Iterate pbtype_flags +for {set i 0} {$i < [llength $pbtype_flags]} {incr i} { +set pbtype_flag [lindex $pbtype_flags $i] +set pbtype_mssg [lindex $pbtype_mssgs $i] +set testprog "sdt.c.exe.$i" + +set sup_flags "additional_flags=-I$srcdir/../includes/sys" +set sup_flags "$sup_flags additional_flags=-I$sdtdir" +set sup_flags "$sup_flags additional_flags=-g" +set sup_flags "$sup_flags additional_flags=-O" +set sup_flags "$sup_flags additional_flags=-I. $pbtype_flag" +set res [target_compile $sup_srcpath $sup_exepath executable $sup_flags] +if { $res != "" } { + verbose "target_compile failed: $res" 2 + fail "$test compiling -g $pbtype_mssg" + if { $verbose == 0 } { + catch {exec rm -f $sup_srcpath $sup_hpath $sup_stppath} + } + return +} else { + pass "$test compiling -g $pbtype_mssg" +} + +if {![installtest_p]} {untested $test; return} +if {![utrace_p]} { + untested "$test" + if { $verbose == 0 } { + catch {exec rm -f $sup_srcpath} + } + return +} + +# Run stap on executable built with dtrace generated header file + +set ok 0 + +verbose -log "spawn stap -c $sup_exepath $sup_stppath" +spawn stap -c $sup_exepath $sup_stppath +expect { + -timeout 180 + -re {In test_probe_2 probe 0x2} { incr ok; exp_continue } + -re {In test_probe_0 probe 0x3} { incr ok; exp_continue } + -re {In test_probe_3 probe 0x3 0x[0-9a-f][0-9a-f]} { incr ok; exp_continue } + -re {In test_probe_4 dtrace probe 0x4} { incr ok; exp_continue } + timeout { fail "$test (timeout)" } + eof { } +} + +wait + +if {$ok == 5} { + pass "$test $pbtype_mssg" +} else { + fail "$test ($ok) $pbtype_mssg" +} + +# Test passing various C types to .mark probes + +set sup_flags "$sup_flags additional_flags=-O0 $pbtype_flag" +set res [target_compile $srcdir/$subdir/sdt_types.c sdt_types.x executable $sup_flags] +if { $res != "" } { + verbose "target_compile failed: $res" 2 + fail "$test compiling types -g $pbtype_mssg" + return +} else { + pass "$test compiling types -g $pbtype_mssg" +} + +set ok 0 +set fail "types" +verbose -log "spawn stap -c ./sdt_types.x $srcdir/$subdir/sdt_types.stp ./sdt_types.x" +spawn stap -c ./sdt_types.x $srcdir/$subdir/sdt_types.stp ./sdt_types.x +expect { + -timeout 180 + -re {FAIL: [a-z_]+var} { regexp " .*$" $expect_out(0,string) s; + incr ok; set fail "$fail $s"; exp_continue } + timeout { fail "$test (timeout) } + eof { } +} + +wait + +set pbtype_mssgs {{uprobe} {utrace} {kprobe}} +if { $ok != 0} { + if { $pbtype_mssg == "uprobe" } { + fail "$test $fail $pbtype_mssg" + } else { + # (needs cast) + xfail "$test $fail $pbtype_mssg" + } +} else { + pass "$test types $pbtype_mssg" +} + +# Test .mark probe wildcard matching + +set ok 0 +spawn stap -l "process(\"./sdt_types.x\").mark(\"*\")" +expect { + -timeout 180 + -re {mark\(\"[a-z_]+\"\)} { incr ok; exp_continue } + timeout { fail "$test (timeout)" } + eof { } +} + +if { $ok == 45 } { + pass "$test wildcard $pbtype_mssg" +} else { + fail "$test wildcard ($ok) $pbtype_mssg" +} + +# for {set i 0} +} + +if { $verbose == 0 } { +catch {exec rm -f $sup_srcpath $sup_exepath $supcplus_exepath $sup_dpath $sup_hpath $sup_stppath sdt_types.x} +} + diff --git a/testsuite/systemtap.base/static_uprobes.exp b/testsuite/systemtap.base/static_uprobes.exp deleted file mode 100644 index 6a597646..00000000 --- a/testsuite/systemtap.base/static_uprobes.exp +++ /dev/null @@ -1,232 +0,0 @@ -set test "static_user_markers" - -# Test miscellaneous features of .mark probes - -# Compile a C program to use as the user-space probing target -set sup_srcpath "[pwd]/static_user_markers.c" -set sup_exepath "[pwd]/static_user_markers.x" -set supcplus_exepath "[pwd]/static_user_markers_cplus.x" -set fp [open $sup_srcpath "w"] -puts $fp " -#include -#define USE_STAP_PROBE 1 -#include \"static_user_markers_.h\" - -void -bar (int i) -{ - STATIC_USER_MARKERS_TEST_PROBE_2(i); - if (i == 0) - i = 1000; - STAP_PROBE1(static_uprobes,test_probe_2,i); -} - -void -baz (int i, char* s) -{ - STAP_PROBE1(static_uprobes,test_probe_0,i); - if (i == 0) - i = 1000; - STATIC_USER_MARKERS_TEST_PROBE_3(i,s); -} - -void -buz (int parm) -{ - if (parm == 0) - parm = 1000; - DTRACE_PROBE1(static_user_markers,test_probe_4,parm); -} - -int -main () -{ - bar(2); - baz(3,(char*)\"abc\"); - buz(4); -} -" -close $fp - -set sup_stppath "[pwd]/static_user_markers.stp" -set fp [open $sup_stppath "w"] -puts $fp " -probe process(\"static_user_markers.x\").mark(\"test_probe_0\") -{ - printf(\"In test_probe_0 probe %#x\\n\", \$arg1) -} -probe process(\"static_user_markers.x\").mark(\"test_probe_2\") -{ - printf(\"In test_probe_2 probe %#x\\n\", \$arg1) -} -probe process(\"static_user_markers.x\").mark(\"test_probe_3\") -{ - printf(\"In test_probe_3 probe %#x %#x\\n\", \$arg1, \$arg2) -} -probe process(\"static_user_markers.x\").mark(\"test_probe_4\") -{ - printf(\"In test_probe_4 dtrace probe %#x\\n\", \$arg1) -} -" -close $fp - -set sup_dpath "[pwd]/static_user_markers_.d" -set sup_hpath "[pwd]/static_user_markers_.h" -set fp [open $sup_dpath "w"] -puts $fp " -provider static_user_markers { - probe test_probe_1 (); - probe test_probe_2 (int i); - probe test_probe_3 (int i, char* x); - probe test_probe_4 (int i); -}; -" -close $fp - -# Test dtrace - -if {[installtest_p]} { - set dtrace $env(SYSTEMTAP_PATH)/dtrace -} else { - set dtrace $srcdir/../dtrace -} -if {[catch {exec $dtrace -h -s $sup_dpath} res]} { - verbose -log "unable to run $dtrace: $res" -} -if {[file exists $sup_hpath]} then { - pass "$test dtrace" -} else { - fail "$test dtrace" - if { $verbose == 0 } { - catch {exec rm -f $sup_srcpath $sup_hpath $sup_stppath} - } - return -} - -if {[installtest_p]} { - set sdtdir $env(SYSTEMTAP_INCLUDES) -} else { - set sdtdir $srcdir/../includes -} - -set pbtype_flags {{""} {additional_flags=-DEXPERIMENTAL_UTRACE_SDT} {additional_flags=-DEXPERIMENTAL_KPROBE_SDT}} -set pbtype_mssgs {{uprobe} {utrace} {kprobe}} - -# Iterate pbtype_flags -for {set i 0} {$i < [llength $pbtype_flags]} {incr i} { -set pbtype_flag [lindex $pbtype_flags $i] -set pbtype_mssg [lindex $pbtype_mssgs $i] -set testprog "sdt.c.exe.$i" - -set sup_flags "additional_flags=-I$srcdir/../includes/sys" -set sup_flags "$sup_flags additional_flags=-I$sdtdir" -set sup_flags "$sup_flags additional_flags=-g" -set sup_flags "$sup_flags additional_flags=-O" -set sup_flags "$sup_flags additional_flags=-I. $pbtype_flag" -set res [target_compile $sup_srcpath $sup_exepath executable $sup_flags] -if { $res != "" } { - verbose "target_compile failed: $res" 2 - fail "$test compiling -g $pbtype_mssg" - if { $verbose == 0 } { - catch {exec rm -f $sup_srcpath $sup_hpath $sup_stppath} - } - return -} else { - pass "$test compiling -g $pbtype_mssg" -} - -if {![installtest_p]} {untested $test; return} -if {![utrace_p]} { - untested "$test" - if { $verbose == 0 } { - catch {exec rm -f $sup_srcpath} - } - return -} - -# Run stap on executable built with dtrace generated header file - -set ok 0 - -verbose -log "spawn stap -c $sup_exepath $sup_stppath" -spawn stap -c $sup_exepath $sup_stppath -expect { - -timeout 180 - -re {In test_probe_2 probe 0x2} { incr ok; exp_continue } - -re {In test_probe_0 probe 0x3} { incr ok; exp_continue } - -re {In test_probe_3 probe 0x3 0x[0-9a-f][0-9a-f]} { incr ok; exp_continue } - -re {In test_probe_4 dtrace probe 0x4} { incr ok; exp_continue } - timeout { fail "$test (timeout)" } - eof { } -} - -wait - -if {$ok == 5} { - pass "$test $pbtype_mssg" -} else { - fail "$test ($ok) $pbtype_mssg" -} - -# Test passing various C types to .mark probes - -set sup_flags "$sup_flags additional_flags=-O0 $pbtype_flag" -set res [target_compile $srcdir/$subdir/sdt_types.c sdt_types.x executable $sup_flags] -if { $res != "" } { - verbose "target_compile failed: $res" 2 - fail "$test compiling types -g $pbtype_mssg" - return -} else { - pass "$test compiling types -g $pbtype_mssg" -} - -set ok 0 -set fail "types" -verbose -log "spawn stap -c ./sdt_types.x $srcdir/$subdir/sdt_types.stp ./sdt_types.x" -spawn stap -c ./sdt_types.x $srcdir/$subdir/sdt_types.stp ./sdt_types.x -expect { - -timeout 180 - -re {FAIL: [a-z_]+var} { regexp " .*$" $expect_out(0,string) s; - incr ok; set fail "$fail $s"; exp_continue } - timeout { fail "$test (timeout) } - eof { } -} - -wait - -set pbtype_mssgs {{uprobe} {utrace} {kprobe}} -if { $ok != 0} { - if { $pbtype_mssg == "uprobe" } { - fail "$test $fail $pbtype_mssg" - } else { - # (needs cast) - xfail "$test $fail $pbtype_mssg" - } -} else { - pass "$test types $pbtype_mssg" -} - -# Test .mark probe wildcard matching - -set ok 0 -spawn stap -l "process(\"./sdt_types.x\").mark(\"*\")" -expect { - -timeout 180 - -re {mark\(\"[a-z_]+\"\)} { incr ok; exp_continue } - timeout { fail "$test (timeout)" } - eof { } -} - -if { $ok == 45 } { - pass "$test wildcard $pbtype_mssg" -} else { - fail "$test wildcard ($ok) $pbtype_mssg" -} - -# for {set i 0} -} - -if { $verbose == 0 } { -catch {exec rm -f $sup_srcpath $sup_exepath $supcplus_exepath $sup_dpath $sup_hpath $sup_stppath sdt_types.x} -} - -- cgit From 54bc8f42438e7efc62c5dd2b39618ccd6c953cdd Mon Sep 17 00:00:00 2001 From: Stan Cox Date: Fri, 19 Jun 2009 16:13:21 -0400 Subject: Correctly find probes for -m32 executables. * sdt.h (STAP_PROBE_DATA_): Pad with 0 so final probe entry doesn't pickup a stray word. * sdt_misc.exp (static_user_markers.{c,d}): Add bstruct to test struct type handling --- testsuite/systemtap.base/sdt_misc.exp | 28 ++++++++++++++++++---------- 1 file changed, 18 insertions(+), 10 deletions(-) (limited to 'testsuite') diff --git a/testsuite/systemtap.base/sdt_misc.exp b/testsuite/systemtap.base/sdt_misc.exp index 6a597646..459b669a 100644 --- a/testsuite/systemtap.base/sdt_misc.exp +++ b/testsuite/systemtap.base/sdt_misc.exp @@ -33,9 +33,15 @@ baz (int i, char* s) void buz (int parm) { + struct astruct + { + int a; + int b; + }; + struct astruct bstruct = {parm, parm + 1}; if (parm == 0) parm = 1000; - DTRACE_PROBE1(static_user_markers,test_probe_4,parm); + DTRACE_PROBE1(static_user_markers,test_probe_4,&bstruct); } int @@ -65,21 +71,23 @@ probe process(\"static_user_markers.x\").mark(\"test_probe_3\") } probe process(\"static_user_markers.x\").mark(\"test_probe_4\") { - printf(\"In test_probe_4 dtrace probe %#x\\n\", \$arg1) + printf(\"In test_probe_4 dtrace probe %#x %#x\\n\", \$arg1->a, \$arg1->b) } " close $fp set sup_dpath "[pwd]/static_user_markers_.d" set sup_hpath "[pwd]/static_user_markers_.h" +set sup_opath "[pwd]/static_user_markers_.o" set fp [open $sup_dpath "w"] puts $fp " provider static_user_markers { probe test_probe_1 (); probe test_probe_2 (int i); probe test_probe_3 (int i, char* x); - probe test_probe_4 (int i); + probe test_probe_4 (struct astruct arg); }; +struct astruct {int a; int b;}; " close $fp @@ -90,10 +98,10 @@ if {[installtest_p]} { } else { set dtrace $srcdir/../dtrace } -if {[catch {exec $dtrace -h -s $sup_dpath} res]} { +if {[catch {exec $dtrace --types -G -s $sup_dpath} res]} { verbose -log "unable to run $dtrace: $res" } -if {[file exists $sup_hpath]} then { +if {[file exists $sup_hpath] && [file exists $sup_opath]} then { pass "$test dtrace" } else { fail "$test dtrace" @@ -109,7 +117,7 @@ if {[installtest_p]} { set sdtdir $srcdir/../includes } -set pbtype_flags {{""} {additional_flags=-DEXPERIMENTAL_UTRACE_SDT} {additional_flags=-DEXPERIMENTAL_KPROBE_SDT}} +set pbtype_flags {{""} {additional_flags=-O additional_flags=-DEXPERIMENTAL_UTRACE_SDT} {additional_flags=-O additional_flags=-DEXPERIMENTAL_KPROBE_SDT}} set pbtype_mssgs {{uprobe} {utrace} {kprobe}} # Iterate pbtype_flags @@ -121,8 +129,8 @@ set testprog "sdt.c.exe.$i" set sup_flags "additional_flags=-I$srcdir/../includes/sys" set sup_flags "$sup_flags additional_flags=-I$sdtdir" set sup_flags "$sup_flags additional_flags=-g" -set sup_flags "$sup_flags additional_flags=-O" -set sup_flags "$sup_flags additional_flags=-I. $pbtype_flag" +set sup_flags "$sup_flags additional_flags=$sup_opath" +set sup_flags "$sup_flags additional_flags=-I. $pbtype_flag" set res [target_compile $sup_srcpath $sup_exepath executable $sup_flags] if { $res != "" } { verbose "target_compile failed: $res" 2 @@ -155,7 +163,7 @@ expect { -re {In test_probe_2 probe 0x2} { incr ok; exp_continue } -re {In test_probe_0 probe 0x3} { incr ok; exp_continue } -re {In test_probe_3 probe 0x3 0x[0-9a-f][0-9a-f]} { incr ok; exp_continue } - -re {In test_probe_4 dtrace probe 0x4} { incr ok; exp_continue } + -re {In test_probe_4 dtrace probe 0x4 0x5} { incr ok; exp_continue } timeout { fail "$test (timeout)" } eof { } } @@ -170,7 +178,7 @@ if {$ok == 5} { # Test passing various C types to .mark probes -set sup_flags "$sup_flags additional_flags=-O0 $pbtype_flag" +set sup_flags "$sup_flags $pbtype_flag additional_flags=-O0 " set res [target_compile $srcdir/$subdir/sdt_types.c sdt_types.x executable $sup_flags] if { $res != "" } { verbose "target_compile failed: $res" 2 -- cgit