File: logging.stp

package info (click to toggle)
systemtap 5.3-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 47,556 kB
  • sloc: cpp: 81,117; ansic: 54,933; xml: 49,795; exp: 43,595; sh: 11,526; python: 5,003; perl: 2,252; tcl: 1,312; makefile: 1,006; javascript: 149; lisp: 105; awk: 101; asm: 91; java: 70; sed: 16
file content (137 lines) | stat: -rw-r--r-- 4,132 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
// logging tapset
// Copyright (C) 2005-2021 Red Hat Inc.
//
// This file is part of systemtap, and is free software.  You can
// redistribute it and/or modify it under the terms of the GNU General
// Public License (GPL); either version 2, or (at your option) any
// later version.

// XXX this and other functions also implemented in tapset/bpf/logging.stp
%( runtime != "bpf" %?

/**
 * sfunction log - Send a line to the common trace buffer
 *
 * @msg: The formatted message string
 *
 * Description: This function logs data. log sends the
 * message immediately to staprun and to the bulk transport
 * (relayfs) if it is being used. If the last character given
 * is not a newline, then one is added. This function is not 
 * as efficient as printf and should be used only for urgent
 * messages. 
 */
function log (msg:string)
%{ /* unprivileged */ /* unmodified-fnargs */
     STAP_PRINTF ("%s\n", STAP_ARG_msg);
%}

/**
 * sfunction warn - Send a line to the warning stream
 *
 * @msg: The formatted message string
 *
 * Description: This function sends a warning message immediately to 
 * staprun. It is also sent over the bulk transport (relayfs) if it is
 * being used. If the last characater is not a newline, the one is added.
 */
function warn (msg:string)
%{ /* unprivileged */ /* unmodified-fnargs */
     _stp_warn ("%s", STAP_ARG_msg);
%}


/**
 * sfunction exit - Start shutting down probing script.
 *
 * Description: This only enqueues a request to start
 * shutting down the script.  New probes will not fire
 * (except "end" probes), but all currently   
 * running ones may complete their work.
 */
function exit ()
%{ /* unprivileged */
   atomic_set (session_state(), STAP_SESSION_STOPPING);
   _stp_exit ();
%}


%(systemtap_v >= "4.0" %?
/**
 * sfunction abort - Immediately shutting down probing script.
 *
 * Description: This is similar to exit() but immediately aborts
 * the current probe handler instead of waiting for its
 * completion. Probe handlers already running on *other* CPU cores,
 * however, will still continue to their completion. Unlike error(),
 * this function call cannot be caught by 'try ... catch'.
 */
function abort ()
%{ /* unprivileged */
   atomic_set (session_state(), STAP_SESSION_STOPPING);
   _stp_exit ();
   CONTEXT->aborted = 1;
   CONTEXT->last_stmt = NULL;
%}
%)


/**
 * sfunction error - Send an error message
 *
 * @msg: The formatted message string
 *
 * Description: An implicit end-of-line is added.  staprun prepends
 * the string "ERROR:".  Sending an error message aborts the currently
 * running probe.  Depending on the MAXERRORS parameter, it may
 * trigger an exit().
 */
function error (msg:string)
%{ /* unprivileged */ /* unmodified-fnargs */
   /* NB: we used to reuse msg[] for an assignment to last_error; this
    is clearer & safer. */
   strlcpy (CONTEXT->error_buffer, STAP_ARG_msg, MAXSTRINGLEN);
   CONTEXT->last_error = CONTEXT->error_buffer;
   CONTEXT->last_stmt = NULL;
%}

%) // XXX runtime != "bpf"

/**
 * sfunction assert - evaluate assertion
 *
 * @expression: The expression to evaluate
 *
 * Description: This function checks the expression and aborts the
 * current running probe if expression evaluates to zero. Uses error()
 * and may be caught by try{} catch{}. A default message will be
 * displayed.
 */
function assert(expression:long) { /* bpf */ /* unprivileged */
    if (!expression) {
        error("Assertion failed")
    }
}

/**
 * sfunction assert - evaluate assertion
 *
 * @expression: The expression to evaluate
 * @msg: The formatted message string
 *
 * Description: This function checks the expression and aborts the
 * current running probe if expression evaluates to zero. Uses error()
 * and may be caught by try{} catch{}. The specified message will be
 * displayed.
 */
function assert(expression:long, msg:string) { /* bpf */ /* unprivileged */
    if (!expression) {
        error(msg)
    }
}

%( runtime != "bpf" %?
function stp_print_binary(n:long, arg1:long, arg2:long, arg3:long, arg4:long) %{
	_stp_print_binary (STAP_ARG_n, STAP_ARG_arg1, STAP_ARG_arg2, STAP_ARG_arg3, STAP_ARG_arg4);
%}
%)