--- /dev/null
+<!DOCTYPE HTML>
+
+<!--Converted with LaTeX2HTML 2020.2 (Released July 1, 2020) -->
+<HTML lang="en">
+<HEAD>
+<TITLE>10 Tapset-defined functions</TITLE>
+<META NAME="description" CONTENT="10 Tapset-defined functions">
+<META NAME="keywords" CONTENT="langref">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+
+<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=utf-8">
+<META NAME="viewport" CONTENT="width=device-width, initial-scale=1.0">
+<META NAME="Generator" CONTENT="LaTeX2HTML v2020.2">
+
+<LINK REL="STYLESHEET" HREF="langref.css">
+
+<LINK REL="next" HREF="11_Further_Reference.html">
+<LINK REL="previous" HREF="9_Formatted_output.html">
+<LINK REL="next" HREF="11_Further_Reference.html">
+</HEAD>
+
+<BODY >
+
+<DIV CLASS="navigation"><!--Navigation Panel-->
+<A
+ HREF="11_Further_Reference.html">
+<IMG WIDTH="37" HEIGHT="24" ALT="next" SRC="next.png"></A>
+<A
+ HREF="langref.html">
+<IMG WIDTH="26" HEIGHT="24" ALT="up" SRC="up.png"></A>
+<A
+ HREF="9_Formatted_output.html">
+<IMG WIDTH="63" HEIGHT="24" ALT="previous" SRC="prev.png"></A>
+<A ID="tex2html411"
+ HREF="Contents.html">
+<IMG WIDTH="65" HEIGHT="24" ALT="contents" SRC="contents.png"></A>
+<A ID="tex2html413"
+ HREF="Index.html">
+<IMG WIDTH="43" HEIGHT="24" ALT="index" SRC="index.png"></A>
+<BR>
+<B> Next:</B> <A
+ HREF="11_Further_Reference.html">11 For Further Reference</A>
+<B> Up:</B> <A
+ HREF="langref.html">SystemTap Language Reference</A>
+<B> Previous:</B> <A
+ HREF="9_Formatted_output.html">9 Formatted output</A>
+ <B> <A ID="tex2html412"
+ HREF="Contents.html">Contents</A></B>
+ <B> <A ID="tex2html414"
+ HREF="Index.html">Index</A></B>
+<BR>
+<BR></DIV>
+<!--End of Navigation Panel-->
+
+<H1><A ID="SECTION000110000000000000000"></A><A ID="sec:Predefined-Functions"></A>
+<BR>
+<SPAN CLASS="arabic">10</SPAN> Tapset-defined functions
+</H1>
+
+<P>
+Unlike built-in functions, tapset-defined functions are implemented in tapset scripts.
+These are individually documented in the in <SPAN CLASS="texttt">tapset::*(3stap)</SPAN>,
+<SPAN CLASS="texttt">function::*(3stap)</SPAN>,
+and <SPAN CLASS="texttt">probe::*(3stap)</SPAN> man pages, and implemented under
+<SPAN CLASS="texttt">/usr/share/systemtap/tapset</SPAN>.
+
+<P>
+<BR><HR>
+
+</BODY>
+</HTML>
--- /dev/null
+<!DOCTYPE HTML>
+
+<!--Converted with LaTeX2HTML 2020.2 (Released July 1, 2020) -->
+<HTML lang="en">
+<HEAD>
+<TITLE>11 For Further Reference</TITLE>
+<META NAME="description" CONTENT="11 For Further Reference">
+<META NAME="keywords" CONTENT="langref">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+
+<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=utf-8">
+<META NAME="viewport" CONTENT="width=device-width, initial-scale=1.0">
+<META NAME="Generator" CONTENT="LaTeX2HTML v2020.2">
+
+<LINK REL="STYLESHEET" HREF="langref.css">
+
+<LINK REL="next" HREF="Index.html">
+<LINK REL="previous" HREF="10_Tapset_defined_functions.html">
+<LINK REL="next" HREF="Index.html">
+</HEAD>
+
+<BODY >
+
+<DIV CLASS="navigation"><!--Navigation Panel-->
+<A
+ HREF="Index.html">
+<IMG WIDTH="37" HEIGHT="24" ALT="next" SRC="next.png"></A>
+<A
+ HREF="langref.html">
+<IMG WIDTH="26" HEIGHT="24" ALT="up" SRC="up.png"></A>
+<A
+ HREF="10_Tapset_defined_functions.html">
+<IMG WIDTH="63" HEIGHT="24" ALT="previous" SRC="prev.png"></A>
+<A ID="tex2html415"
+ HREF="Contents.html">
+<IMG WIDTH="65" HEIGHT="24" ALT="contents" SRC="contents.png"></A>
+<A ID="tex2html417"
+ HREF="Index.html">
+<IMG WIDTH="43" HEIGHT="24" ALT="index" SRC="index.png"></A>
+<BR>
+<B> Next:</B> <A
+ HREF="Index.html">Index</A>
+<B> Up:</B> <A
+ HREF="langref.html">SystemTap Language Reference</A>
+<B> Previous:</B> <A
+ HREF="10_Tapset_defined_functions.html">10 Tapset-defined functions</A>
+ <B> <A ID="tex2html416"
+ HREF="Contents.html">Contents</A></B>
+ <B> <A ID="tex2html418"
+ HREF="Index.html">Index</A></B>
+<BR>
+<BR></DIV>
+<!--End of Navigation Panel-->
+
+<H1><A ID="SECTION000120000000000000000"></A><A ID="sec:For-Further-Reference"></A>
+<BR>
+<SPAN CLASS="arabic">11</SPAN> For Further Reference
+</H1>
+
+<P>
+For more information, see:
+
+<UL>
+<LI>The SystemTap tutorial at <kbd><A ID="tex2html9"
+ HREF="http://sourceware.org/systemtap/tutorial/">http://sourceware.org/systemtap/tutorial/</A></kbd>
+</LI>
+<LI>The SystemTap wiki at <kbd><A ID="tex2html10"
+ HREF="http://sourceware.org/systemtap/wiki">http://sourceware.org/systemtap/wiki</A></kbd>
+</LI>
+<LI>The SystemTap documentation page at <kbd><A ID="tex2html11"
+ HREF="http://sourceware.org/systemtap/documentation.html">http://sourceware.org/systemtap/documentation.html</A></kbd>
+</LI>
+<LI>From an unpacked source tarball or GIT directory, the examples in in the
+src/examples directory, the tapsets in the src/tapset directory, and the
+test scripts in the src/testsuite directory.
+</LI>
+<LI>The man pages for tapsets.
+For a list, run the command <SPAN CLASS="texttt">“man -k tapset::</SPAN>”.
+</LI>
+<LI>The man pages for individual probe points.
+For a list, run the command <SPAN CLASS="texttt">“man -k probe::</SPAN>”.
+</LI>
+<LI>The man pages for individual systemtap functions.
+For a list, run the command <SPAN CLASS="texttt">“man -k function::</SPAN>”.
+</LI>
+</UL>
+
+<P>
+
+
+
+<BR><HR>
+
+</BODY>
+</HTML>
--- /dev/null
+<!DOCTYPE HTML>
+
+<!--Converted with LaTeX2HTML 2020.2 (Released July 1, 2020) -->
+<HTML lang="en">
+<HEAD>
+<TITLE>1 SystemTap overview</TITLE>
+<META NAME="description" CONTENT="1 SystemTap overview">
+<META NAME="keywords" CONTENT="langref">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+
+<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=utf-8">
+<META NAME="viewport" CONTENT="width=device-width, initial-scale=1.0">
+<META NAME="Generator" CONTENT="LaTeX2HTML v2020.2">
+
+<LINK REL="STYLESHEET" HREF="langref.css">
+
+<LINK REL="next" HREF="2_Types_SystemTap_scripts.html">
+<LINK REL="previous" HREF="Contents.html">
+<LINK REL="next" HREF="2_Types_SystemTap_scripts.html">
+</HEAD>
+
+<BODY >
+
+<DIV CLASS="navigation"><!--Navigation Panel-->
+<A
+ HREF="2_Types_SystemTap_scripts.html">
+<IMG WIDTH="37" HEIGHT="24" ALT="next" SRC="next.png"></A>
+<A
+ HREF="langref.html">
+<IMG WIDTH="26" HEIGHT="24" ALT="up" SRC="up.png"></A>
+<A
+ HREF="Contents.html">
+<IMG WIDTH="63" HEIGHT="24" ALT="previous" SRC="prev.png"></A>
+<A ID="tex2html243"
+ HREF="Contents.html">
+<IMG WIDTH="65" HEIGHT="24" ALT="contents" SRC="contents.png"></A>
+<A ID="tex2html245"
+ HREF="Index.html">
+<IMG WIDTH="43" HEIGHT="24" ALT="index" SRC="index.png"></A>
+<BR>
+<B> Next:</B> <A
+ HREF="2_Types_SystemTap_scripts.html">2 Types of SystemTap</A>
+<B> Up:</B> <A
+ HREF="langref.html">SystemTap Language Reference</A>
+<B> Previous:</B> <A
+ HREF="Contents.html">Contents</A>
+ <B> <A ID="tex2html244"
+ HREF="Contents.html">Contents</A></B>
+ <B> <A ID="tex2html246"
+ HREF="Index.html">Index</A></B>
+<BR>
+<BR></DIV>
+<!--End of Navigation Panel-->
+<!--Table of Child-Links-->
+<A ID="CHILD_LINKS"><STRONG>Subsections</STRONG></A>
+
+<UL CLASS="ChildLinks">
+<LI><A ID="tex2html247"
+ HREF="1_SystemTap_overview.html#SECTION00021000000000000000"><SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN> About this guide</A>
+<LI><A ID="tex2html248"
+ HREF="1_SystemTap_overview.html#SECTION00022000000000000000"><SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">2</SPAN> Reasons to use SystemTap</A>
+<LI><A ID="tex2html249"
+ HREF="1_SystemTap_overview.html#SECTION00023000000000000000"><SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">3</SPAN> Event-action language</A>
+<LI><A ID="tex2html250"
+ HREF="1_SystemTap_overview.html#SECTION00024000000000000000"><SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">4</SPAN> Sample SystemTap scripts</A>
+<UL>
+<LI><A ID="tex2html251"
+ HREF="1_SystemTap_overview.html#SECTION00024100000000000000"><SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN> Basic SystemTap syntax and control structures</A>
+<LI><A ID="tex2html252"
+ HREF="1_SystemTap_overview.html#SECTION00024200000000000000"><SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">2</SPAN> Primes between 0 and 49</A>
+<LI><A ID="tex2html253"
+ HREF="1_SystemTap_overview.html#SECTION00024300000000000000"><SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">3</SPAN> Recursive functions</A>
+</UL>
+<BR>
+<LI><A ID="tex2html254"
+ HREF="1_SystemTap_overview.html#SECTION00025000000000000000"><SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">5</SPAN> The stap command</A>
+<LI><A ID="tex2html255"
+ HREF="1_SystemTap_overview.html#SECTION00026000000000000000"><SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">6</SPAN> Safety and security</A>
+</UL>
+<!--End of Table of Child-Links-->
+<HR>
+
+<H1><A ID="SECTION00020000000000000000"></A><A ID="sec:SystemTap-Overview"></A>
+<BR>
+<SPAN CLASS="arabic">1</SPAN> SystemTap overview
+</H1>
+
+<P>
+
+<H2><A ID="SECTION00021000000000000000">
+<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN> About this guide</A>
+</H2>
+
+<P>
+This guide is a comprehensive reference of SystemTap's language constructs
+and syntax. The contents borrow heavily from existing SystemTap documentation
+found in manual pages and the tutorial. The presentation of information here
+provides the reader with a single place to find language syntax and recommended
+usage. In order to successfully use this guide, you should be familiar with
+the general theory and operation of SystemTap. If you are new to SystemTap,
+you will find the tutorial to be an excellent place to start learning. For
+detailed information about tapsets, see the manual pages provided with the
+distribution. For information about the entire collection of SystemTap reference
+material, see Section <A HREF="11_Further_Reference.html#sec:For-Further-Reference"><IMG ALT="[*]" SRC="crossref.png"></A>
+
+<P>
+
+<H2><A ID="SECTION00022000000000000000">
+<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">2</SPAN> Reasons to use SystemTap</A>
+</H2>
+
+<P>
+SystemTap provides infrastructure to simplify the gathering of information
+about a running Linux kernel so that it may be further analyzed. This analysis
+assists in identifying the underlying cause of a performance or functional
+problem. SystemTap was designed to eliminate the need for a developer to
+go through the tedious instrument, recompile, install, and reboot sequence
+normally required to collect this kind of data. To do this, it provides a
+simple command-line interface and scripting language for writing
+instrumentation for both kernel and user space.
+With SystemTap, developers, system administrators, and users can easily write
+scripts that gather and manipulate system data that is otherwise unavailable
+from standard Linux tools. Users of SystemTap will find it to be a significant
+improvement over older methods.
+
+<P>
+
+<H2><A ID="SECTION00023000000000000000"></A>
+<A NAME="48"></A>
+<BR>
+<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">3</SPAN> Event-action language
+</H2>
+SystemTap's language is strictly typed, declaration free, procedural, and
+inspired by dtrace and awk. Source code points or events in the kernel are
+associated with handlers, which are subroutines that are executed synchronously.
+These probes are conceptually similar to "breakpoint command lists"
+in the GDB debugger.
+
+<P>
+There are two main outermost constructs: probes and functions. Within these,
+statements and expressions use C-like operator syntax and precedence.
+
+<P>
+
+<H2><A ID="SECTION00024000000000000000"></A>
+<A NAME="52"></A>
+<BR>
+<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">4</SPAN> Sample SystemTap scripts
+</H2>
+Following are some example scripts that illustrate the basic operation of
+SystemTap. For more examples, see the examples/small_demos/ directory in
+the source directory, the SystemTap wiki at <kbd><A ID="tex2html2"
+ HREF="http://sourceware.org/systemtap/wiki/HomePage">http://sourceware.org/systemtap/wiki/HomePage</A></kbd>,
+or the SystemTap War Stories at <kbd><A ID="tex2html3"
+ HREF="http://sourceware.org/systemtap/wiki/WarStories">http://sourceware.org/systemtap/wiki/WarStories</A></kbd> page.
+
+<P>
+
+<H3><A ID="SECTION00024100000000000000">
+<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN> Basic SystemTap syntax and control structures</A>
+</H3>
+
+<P>
+The following code examples demonstrate SystemTap syntax and control structures.
+
+<P>
+
+<DL class="COMPACT">
+<DT>
+<DD><PRE>
+global odds, evens
+
+probe begin {
+ # "no" and "ne" are local integers
+ for (i = 0; i < 10; i++) {
+ if (i % 2) odds [no++] = i
+ else evens [ne++] = i
+ }
+
+ delete odds[2]
+ delete evens[3]
+ exit()
+}
+
+probe end {
+ foreach (x+ in odds)
+ printf ("odds[%d] = %d", x, odds[x])
+
+ foreach (x in evens-)
+ printf ("evens[%d] = %d", x, evens[x])
+}
+</PRE>
+</DD>
+</DL>This prints:
+
+<P>
+
+<DL class="COMPACT">
+<DT>
+<DD><PRE>
+odds[0] = 1
+odds[1] = 3
+odds[3] = 7
+odds[4] = 9
+evens[4] = 8
+evens[2] = 4
+evens[1] = 2
+evens[0] = 0
+</PRE>
+</DD>
+</DL>Note that all variable types are inferred, and that all locals and
+globals are initialized. Integers are set to 0 and strings are set to
+the empty string.
+
+<P>
+
+<H3><A ID="SECTION00024200000000000000">
+<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">2</SPAN> Primes between 0 and 49</A>
+</H3>
+
+<P>
+
+<DL class="COMPACT">
+<DT>
+<DD><PRE>
+function isprime (x) {
+ if (x < 2) return 0
+ for (i = 2; i < x; i++) {
+ if (x % i == 0) return 0
+ if (i * i > x) break
+ }
+ return 1
+}
+
+probe begin {
+ for (i = 0; i < 50; i++)
+ if (isprime (i)) printf("%d\n", i)
+ exit()
+}
+</PRE>
+</DD>
+</DL>This prints:
+
+<P>
+
+<DL class="COMPACT">
+<DT>
+<DD><PRE>
+2
+3
+5
+7
+11
+13
+17
+19
+23
+29
+31
+37
+41
+43
+47
+</PRE>
+</DD>
+</DL>
+<P>
+
+<H3><A ID="SECTION00024300000000000000"></A>
+<A NAME="74"></A>
+<BR>
+<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">3</SPAN> Recursive functions
+</H3>
+
+<DL class="COMPACT">
+<DT>
+<DD><PRE>
+function fibonacci(i) {
+ if (i < 1) error ("bad number")
+ if (i == 1) return 1
+ if (i == 2) return 2
+ return fibonacci (i-1) + fibonacci (i-2)
+}
+
+probe begin {
+ printf ("11th fibonacci number: %d", fibonacci (11))
+ exit ()
+}
+</PRE>
+</DD>
+</DL>This prints:
+
+<P>
+
+<DL class="COMPACT">
+<DT>
+<DD><PRE>
+11th fibonacci number: 118
+</PRE>
+</DD>
+</DL>Any larger number input to the function may exceed the MAXACTION or MAXNESTING
+limits, which will be caught at run time and result in an error. For more
+about limits see Section <A HREF="#sub:SystemTap-safety"><IMG ALT="[*]" SRC="crossref.png"></A>.
+
+
+<H2><A ID="SECTION00025000000000000000"></A>
+<A NAME="86"></A>
+<BR>
+<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">5</SPAN> The stap command
+</H2>
+The stap program is the front-end to the SystemTap tool. It accepts probing
+instructions written in its scripting language, translates those instructions
+into C code, compiles this C code, and loads the resulting kernel module
+into a running Linux kernel to perform the requested system trace or probe
+functions. You can supply the script in a named file, from standard input,
+or from the command line. The SystemTap script runs until one of the following
+conditions occurs:
+
+<P>
+
+<UL>
+<LI>The user interrupts the script with a CTRL-C.
+</LI>
+<LI>The script executes the exit() function.
+</LI>
+<LI>The script encounters a sufficient number of soft errors.
+</LI>
+<LI>The monitored command started with the stap program's
+<SPAN CLASS="texttt"><SPAN CLASS="textbf">-c</SPAN></SPAN> option exits.
+</LI>
+</UL>
+
+<P>
+The stap command does the following:
+
+<P>
+
+<UL>
+<LI>Translates the script
+</LI>
+<LI>Generates and compiles a kernel module
+</LI>
+<LI>Inserts the module; output to stap's stdout
+</LI>
+<LI>CTRL-C unloads the module and terminates stap
+</LI>
+</UL>
+
+<P>
+For a full list of options to the stap command, see the stap(1) manual page.
+
+<P>
+
+<H2><A ID="SECTION00026000000000000000"></A><A ID="sub:SystemTap-safety"></A>
+<A NAME="93"></A>
+<BR>
+<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">6</SPAN> Safety and security
+</H2>
+SystemTap is an administrative tool. It exposes kernel internal data structures
+and potentially private user information. It requires root privileges to
+actually run the kernel objects it builds using the <SPAN CLASS="textbf">sudo</SPAN> command,
+applied to the <SPAN CLASS="textbf">staprun</SPAN> program.
+
+<P>
+staprun is a part of the SystemTap package, dedicated to module loading and
+unloading and kernel-to-user data transfer. Since staprun does not perform
+any additional security checks on the kernel objects it is given, do not
+give elevated privileges via sudo to untrusted users.
+
+<P>
+The translator asserts certain safety constraints. <A NAME="96"></A>It
+ensures that no handler routine can run for too long, allocate memory, perform
+unsafe operations, or unintentionally interfere with the kernel. Use of script
+global variables is locked to protect against manipulation by concurrent
+probe handlers. Use of <SPAN CLASS="textit">guru mode</SPAN> constructs such as embedded C (see
+Section <A HREF="3_Components_SystemTap_scri.html#sub:Embedded-C"><IMG ALT="[*]" SRC="crossref.png"></A>) can violate these constraints, leading to
+a kernel crash or data corruption.
+
+<P>
+The resource use limits are set by macros in the generated C code. These
+may be overridden with the -D flag. The following list describes a selection
+of these macros:
+
+<P>
+<SPAN CLASS="textbf">MAXNESTING</SPAN> – The maximum number of recursive function call levels. The default is 10.
+
+<P>
+<SPAN CLASS="textbf">MAXSTRINGLEN</SPAN> – The maximum length of strings. The default is 256 bytes
+for 32 bit machines and 512 bytes for all other machines.
+
+<P>
+<SPAN CLASS="textbf">MAXTRYLOCK</SPAN> – The maximum number of iterations to wait for locks on global variables before
+declaring possible deadlock and skipping the probe. The default is 1000.
+
+<P>
+<SPAN CLASS="textbf">MAXACTION</SPAN> – The maximum number of statements to execute during any single probe hit. The default is 1000.
+
+<P>
+<SPAN CLASS="textbf">MAXMAPENTRIES</SPAN> – The maximum number of rows in an array if the array size is not specified
+explicitly when declared. The default is 2048.
+
+<P>
+<SPAN CLASS="textbf">MAXERRORS</SPAN> – The maximum number of soft errors before an exit is triggered. The default is 0.
+
+<P>
+<SPAN CLASS="textbf">MAXSKIPPED</SPAN> – The maximum number of skipped reentrant probes before an exit is triggered. The default is 100.
+
+<P>
+<SPAN CLASS="textbf">MINSTACKSPACE</SPAN> – The minimum number of free kernel stack bytes required in order to run a
+probe handler. This number should be large enough for the probe handler's
+own needs, plus a safety margin. The default is 1024.
+
+<P>
+If something goes wrong with stap or staprun after a probe has started running,
+you may safely kill both user processes, and remove the active probe kernel
+module with the rmmod command. Any pending trace messages may be lost.
+
+<P>
+
+<DIV CLASS="navigation"><HR>
+<!--Navigation Panel-->
+<A
+ HREF="2_Types_SystemTap_scripts.html">
+<IMG WIDTH="37" HEIGHT="24" ALT="next" SRC="next.png"></A>
+<A
+ HREF="langref.html">
+<IMG WIDTH="26" HEIGHT="24" ALT="up" SRC="up.png"></A>
+<A
+ HREF="Contents.html">
+<IMG WIDTH="63" HEIGHT="24" ALT="previous" SRC="prev.png"></A>
+<A ID="tex2html243"
+ HREF="Contents.html">
+<IMG WIDTH="65" HEIGHT="24" ALT="contents" SRC="contents.png"></A>
+<A ID="tex2html245"
+ HREF="Index.html">
+<IMG WIDTH="43" HEIGHT="24" ALT="index" SRC="index.png"></A>
+<BR>
+<B> Next:</B> <A
+ HREF="2_Types_SystemTap_scripts.html">2 Types of SystemTap</A>
+<B> Up:</B> <A
+ HREF="langref.html">SystemTap Language Reference</A>
+<B> Previous:</B> <A
+ HREF="Contents.html">Contents</A>
+ <B> <A ID="tex2html244"
+ HREF="Contents.html">Contents</A></B>
+ <B> <A ID="tex2html246"
+ HREF="Index.html">Index</A></B> </DIV>
+<!--End of Navigation Panel-->
+
+</BODY>
+</HTML>
--- /dev/null
+<!DOCTYPE HTML>
+
+<!--Converted with LaTeX2HTML 2020.2 (Released July 1, 2020) -->
+<HTML lang="en">
+<HEAD>
+<TITLE>2 Types of SystemTap scripts</TITLE>
+<META NAME="description" CONTENT="2 Types of SystemTap scripts">
+<META NAME="keywords" CONTENT="langref">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+
+<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=utf-8">
+<META NAME="viewport" CONTENT="width=device-width, initial-scale=1.0">
+<META NAME="Generator" CONTENT="LaTeX2HTML v2020.2">
+
+<LINK REL="STYLESHEET" HREF="langref.css">
+
+<LINK REL="next" HREF="3_Components_SystemTap_scri.html">
+<LINK REL="previous" HREF="1_SystemTap_overview.html">
+<LINK REL="next" HREF="3_Components_SystemTap_scri.html">
+</HEAD>
+
+<BODY >
+
+<DIV CLASS="navigation"><!--Navigation Panel-->
+<A
+ HREF="3_Components_SystemTap_scri.html">
+<IMG WIDTH="37" HEIGHT="24" ALT="next" SRC="next.png"></A>
+<A
+ HREF="langref.html">
+<IMG WIDTH="26" HEIGHT="24" ALT="up" SRC="up.png"></A>
+<A
+ HREF="1_SystemTap_overview.html">
+<IMG WIDTH="63" HEIGHT="24" ALT="previous" SRC="prev.png"></A>
+<A ID="tex2html256"
+ HREF="Contents.html">
+<IMG WIDTH="65" HEIGHT="24" ALT="contents" SRC="contents.png"></A>
+<A ID="tex2html258"
+ HREF="Index.html">
+<IMG WIDTH="43" HEIGHT="24" ALT="index" SRC="index.png"></A>
+<BR>
+<B> Next:</B> <A
+ HREF="3_Components_SystemTap_scri.html">3 Components of a</A>
+<B> Up:</B> <A
+ HREF="langref.html">SystemTap Language Reference</A>
+<B> Previous:</B> <A
+ HREF="1_SystemTap_overview.html">1 SystemTap overview</A>
+ <B> <A ID="tex2html257"
+ HREF="Contents.html">Contents</A></B>
+ <B> <A ID="tex2html259"
+ HREF="Index.html">Index</A></B>
+<BR>
+<BR></DIV>
+<!--End of Navigation Panel-->
+<!--Table of Child-Links-->
+<A ID="CHILD_LINKS"><STRONG>Subsections</STRONG></A>
+
+<UL CLASS="ChildLinks">
+<LI><A ID="tex2html260"
+ HREF="2_Types_SystemTap_scripts.html#SECTION00031000000000000000"><SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN> Probe scripts</A>
+<LI><A ID="tex2html261"
+ HREF="2_Types_SystemTap_scripts.html#SECTION00032000000000000000"><SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN> Tapset scripts</A>
+</UL>
+<!--End of Table of Child-Links-->
+<HR>
+
+<H1><A ID="SECTION00030000000000000000"></A><A ID="sec:Types-of-SystemTap"></A>
+<BR>
+<SPAN CLASS="arabic">2</SPAN> Types of SystemTap scripts
+</H1>
+
+<P>
+
+<H2><A ID="SECTION00031000000000000000">
+<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN> Probe scripts</A>
+</H2>
+
+<P>
+Probe scripts are analogous to programs; these scripts identify probe points
+and associated handlers.
+
+<P>
+
+<H2><A ID="SECTION00032000000000000000">
+<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN> Tapset scripts</A>
+</H2>
+
+<P>
+Tapset scripts are libraries of probe aliases and auxiliary functions.
+
+<P>
+The /usr/share/systemtap/tapset directory contains tapset scripts. While
+these scripts look like regular SystemTap scripts, they cannot be run directly.
+
+<P>
+<BR><HR>
+
+</BODY>
+</HTML>
--- /dev/null
+<!DOCTYPE HTML>
+
+<!--Converted with LaTeX2HTML 2020.2 (Released July 1, 2020) -->
+<HTML lang="en">
+<HEAD>
+<TITLE>3 Components of a SystemTap script</TITLE>
+<META NAME="description" CONTENT="3 Components of a SystemTap script">
+<META NAME="keywords" CONTENT="langref">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+
+<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=utf-8">
+<META NAME="viewport" CONTENT="width=device-width, initial-scale=1.0">
+<META NAME="Generator" CONTENT="LaTeX2HTML v2020.2">
+
+<LINK REL="STYLESHEET" HREF="langref.css">
+
+<LINK REL="next" HREF="4_Probe_points.html">
+<LINK REL="previous" HREF="2_Types_SystemTap_scripts.html">
+<LINK REL="next" HREF="4_Probe_points.html">
+</HEAD>
+
+<BODY >
+
+<DIV CLASS="navigation"><!--Navigation Panel-->
+<A
+ HREF="4_Probe_points.html">
+<IMG WIDTH="37" HEIGHT="24" ALT="next" SRC="next.png"></A>
+<A
+ HREF="langref.html">
+<IMG WIDTH="26" HEIGHT="24" ALT="up" SRC="up.png"></A>
+<A
+ HREF="2_Types_SystemTap_scripts.html">
+<IMG WIDTH="63" HEIGHT="24" ALT="previous" SRC="prev.png"></A>
+<A ID="tex2html262"
+ HREF="Contents.html">
+<IMG WIDTH="65" HEIGHT="24" ALT="contents" SRC="contents.png"></A>
+<A ID="tex2html264"
+ HREF="Index.html">
+<IMG WIDTH="43" HEIGHT="24" ALT="index" SRC="index.png"></A>
+<BR>
+<B> Next:</B> <A
+ HREF="4_Probe_points.html">4 Probe points</A>
+<B> Up:</B> <A
+ HREF="langref.html">SystemTap Language Reference</A>
+<B> Previous:</B> <A
+ HREF="2_Types_SystemTap_scripts.html">2 Types of SystemTap</A>
+ <B> <A ID="tex2html263"
+ HREF="Contents.html">Contents</A></B>
+ <B> <A ID="tex2html265"
+ HREF="Index.html">Index</A></B>
+<BR>
+<BR></DIV>
+<!--End of Navigation Panel-->
+<!--Table of Child-Links-->
+<A ID="CHILD_LINKS"><STRONG>Subsections</STRONG></A>
+
+<UL CLASS="ChildLinks">
+<LI><A ID="tex2html266"
+ HREF="3_Components_SystemTap_scri.html#SECTION00041000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">1</SPAN> Probe definitions</A>
+<LI><A ID="tex2html267"
+ HREF="3_Components_SystemTap_scri.html#SECTION00042000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN> Probe aliases</A>
+<UL>
+<LI><A ID="tex2html268"
+ HREF="3_Components_SystemTap_scri.html#SECTION00042100000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN> Prologue-style aliases (=)</A>
+<LI><A ID="tex2html269"
+ HREF="3_Components_SystemTap_scri.html#SECTION00042200000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN> Epilogue-style aliases (+=)</A>
+<LI><A ID="tex2html270"
+ HREF="3_Components_SystemTap_scri.html#SECTION00042300000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">3</SPAN> Probe alias usage</A>
+<LI><A ID="tex2html271"
+ HREF="3_Components_SystemTap_scri.html#SECTION00042400000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">4</SPAN> Alias suffixes</A>
+<LI><A ID="tex2html272"
+ HREF="3_Components_SystemTap_scri.html#SECTION00042500000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">5</SPAN> Alias suffixes and wildcards</A>
+</UL>
+<BR>
+<LI><A ID="tex2html273"
+ HREF="3_Components_SystemTap_scri.html#SECTION00043000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN> Variables</A>
+<UL>
+<LI><A ID="tex2html274"
+ HREF="3_Components_SystemTap_scri.html#SECTION00043100000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">1</SPAN> Unused variables</A>
+</UL>
+<BR>
+<LI><A ID="tex2html275"
+ HREF="3_Components_SystemTap_scri.html#SECTION00044000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">4</SPAN> Auxiliary functions</A>
+<LI><A ID="tex2html276"
+ HREF="3_Components_SystemTap_scri.html#SECTION00045000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN> Embedded C</A>
+<LI><A ID="tex2html277"
+ HREF="3_Components_SystemTap_scri.html#SECTION00046000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">6</SPAN> Embedded C functions</A>
+<LI><A ID="tex2html278"
+ HREF="3_Components_SystemTap_scri.html#SECTION00047000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">7</SPAN> Embedded C pragma comments</A>
+<LI><A ID="tex2html279"
+ HREF="3_Components_SystemTap_scri.html#SECTION00048000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">8</SPAN> Accessing script level global variables</A>
+</UL>
+<!--End of Table of Child-Links-->
+<HR>
+
+<H1><A ID="SECTION00040000000000000000">
+<SPAN CLASS="arabic">3</SPAN> Components of a SystemTap script</A>
+</H1>
+
+<P>
+The main construct in the scripting language identifies probes. Probes associate
+abstract events with a statement block, or probe handler, that is to be executed
+when any of those events occur.
+
+<P>
+The following example shows how to trace entry and exit from a function using
+two probes.
+
+<P>
+
+<DL class="COMPACT">
+<DT>
+<DD><PRE>
+probe kernel.function("sys_mkdir").call { log ("enter") }
+probe kernel.function("sys_mkdir").return { log ("exit") }
+</PRE>
+</DD>
+</DL>
+<P>
+To list the probe-able functions in the kernel, use the listing option
+(<SPAN CLASS="texttt"><SPAN CLASS="textbf">-l</SPAN></SPAN>). For example:
+
+<P>
+
+<DL class="COMPACT">
+<DT>
+<DD><PRE>
+$ stap -l 'kernel.function("*")' | sort
+</PRE>
+</DD>
+</DL>
+<P>
+
+<H2><A ID="SECTION00041000000000000000">
+<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">1</SPAN> Probe definitions</A>
+</H2>
+
+<P>
+The general syntax is as follows.
+
+<P>
+
+<DL class="COMPACT">
+<DT>
+<DD><PRE>
+probe PROBEPOINT [, PROBEPOINT] { [STMT ...] }
+</PRE>
+</DD>
+</DL>Events are specified in a special syntax called <SPAN CLASS="textit">probe points</SPAN>. There
+are several varieties of probe points defined by the translator, and tapset
+scripts may define others using aliases. The provided probe points are listed
+in the <SPAN CLASS="texttt">stapprobes(3)</SPAN>, <SPAN CLASS="texttt">tapset::*(3stap)</SPAN>, and
+<SPAN CLASS="texttt">probe::*(3stap)</SPAN> man pages. The STMT statement block is executed
+whenever ıany of the named PROBEPOINT events occurs.
+
+<P>
+The probe handler is interpreted relative to the context of each event. For
+events associated with kernel code, this context may include variables defined
+in the source code at that location. These <SPAN CLASS="textit">target variables</SPAN><A NAME="131"></A> (or “context variables”)
+are presented to the script as variables whose names are prefixed with a
+dollar sign ($). They may be accessed only if the compiler used to compile
+the kernel preserved them, despite optimization. This is the same constraint
+imposed by a debugger when working with optimized code. Other events may
+have very little context.
+
+<P>
+
+<H2><A ID="SECTION00042000000000000000"></A><A ID="sub:Probe-aliases"></A>
+<A NAME="133"></A>
+<BR>
+<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN> Probe aliases
+</H2>
+The general syntax is as follows.
+
+<P>
+
+<DL class="COMPACT">
+<DT>
+<DD><PRE>
+probe <alias> = <probepoint> { <prologue_stmts> }
+probe <alias> += <probepoint> { <epilogue_stmts> }
+</PRE>
+</DD>
+</DL>
+<P>
+New probe points may be defined using <SPAN CLASS="textit">aliases</SPAN>. A probe point alias
+looks similar to probe definitions, but instead of activating a probe at
+the given point, it defines a new probe point name as an alias to an existing
+one. New probe aliases may refer to one or more existing probe aliases.
+Multiple aliases may share the same underlying probe points.
+The following is an example.
+
+<P>
+
+<DL class="COMPACT">
+<DT>
+<DD><PRE>
+probe socket.sendmsg = kernel.function ("sock_sendmsg") { ... }
+probe socket.do_write = kernel.function ("do_sock_write") { ... }
+probe socket.send = socket.sendmsg, socket.do_write { ... }
+</PRE>
+</DD>
+</DL>
+<P>
+There are two types of aliases, the prologue style and the epilogue style
+which are identified by the equal sign (<SPAN CLASS="texttt"><SPAN CLASS="textbf">=</SPAN></SPAN>) and "<SPAN CLASS="texttt"><SPAN CLASS="textbf">+=</SPAN></SPAN>"
+respectively.
+
+<P>
+A probe that uses a probe point alias will create an actual probe, with
+the handler of the alias <SPAN CLASS="textit">pre-pended</SPAN>.
+
+<P>
+This pre-pending behavior serves several purposes. It allows the alias definition
+to pre-process the context of the probe before passing control to the handler
+specified by the user. This has several possible uses, demonstrated as follows.
+
+<P>
+
+<DL class="COMPACT">
+<DT>
+<DD><PRE>
+# Skip probe unless given condition is met:
+if ($flag1 != $flag2) next
+
+# Supply values describing probes:
+name = "foo"
+
+# Extract the target variable to a plain local variable:
+var = $var
+</PRE>
+</DD>
+</DL>
+<P>
+
+<H3><A ID="SECTION00042100000000000000"></A>
+<A NAME="153"></A>
+<A NAME="154"></A>
+<BR>
+<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN> Prologue-style aliases (=)
+</H3>
+For a prologue style alias, the statement block that follows an alias definition
+is implicitly added as a prologue to any probe that refers to the alias.
+The following is an example.
+
+<P>
+
+<DL class="COMPACT">
+<DT>
+<DD><PRE>
+# Defines a new probe point syscall.read, which expands to
+# kernel.function("sys_read"), with the given statement as
+# a prologue.
+#
+probe syscall.read = kernel.function("sys_read") {
+ fildes = $fd
+}
+</PRE>
+</DD>
+</DL>
+<P>
+
+<H3><A ID="SECTION00042200000000000000"></A>
+<A NAME="160"></A>
+<A NAME="161"></A>
+<BR>
+<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN> Epilogue-style aliases (+=)
+</H3>
+The statement block that follows an alias definition is implicitly added
+as an epilogue to any probe that refers to the alias. It is not useful
+to define new variables there (since no subsequent code will see them), but
+rather the code can take action based upon variables set by the
+prologue or by the user code. The following is an example:
+
+<P>
+
+<DL class="COMPACT">
+<DT>
+<DD><PRE>
+# Defines a new probe point with the given statement as an
+# epilogue.
+#
+probe syscall.read += kernel.function("sys_read") {
+ if (traceme) println ("tracing me")
+}
+</PRE>
+</DD>
+</DL>
+<P>
+
+<H3><A ID="SECTION00042300000000000000">
+<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">3</SPAN> Probe alias usage</A>
+</H3>
+
+<P>
+A probe alias is used the same way as any built-in probe type, by
+naming it:
+
+<P>
+
+<DL class="COMPACT">
+<DT>
+<DD><PRE>
+probe syscall.read {
+ printf("reading fd=%d\n", fildes)
+}
+</PRE>
+</DD>
+</DL>
+<P>
+
+<H3><A ID="SECTION00042400000000000000">
+<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">4</SPAN> Alias suffixes</A>
+</H3>
+
+<P>
+It is possible to include a suffix with a probe alias invocation. If
+only the initial part of a probe point matches an alias, the remainder
+is treated as a suffix and attached to the underlying probe point(s) when
+the alias is expanded. For example:
+
+<P>
+
+<DL class="COMPACT">
+<DT>
+<DD><PRE>
+/* Define an alias: */
+probe sendrecv = tcp.sendmsg, tcp.recvmsg { ... }
+
+/* Use the alias in its basic form: */
+probe sendrecv { ... }
+
+/* Use the alias with an additional suffix: */
+probe sendrecv.return { ... }
+</PRE>
+</DD>
+</DL>
+<P>
+Here, the second use of the probe alias is equivalent to writing <code>probe tcp.sendmsg.return, tcp.recvmsg.return</code>.
+
+<P>
+As another example, the probe points <code>tcp.sendmsg.return</code> and <code>tcp.recvmsg.return</code> are actually defined as aliases in the tapset <code>tcp.stp</code>. They expand to a probe point of the form <code>kernel.function("...").return</code>, so they can also be suffixed:
+
+<P>
+
+<DL class="COMPACT">
+<DT>
+<DD><PRE>
+probe tcp.sendmsg.return.maxactive(10) {
+ printf("returning from sending %d bytes\n", size)
+}
+</PRE>
+</DD>
+</DL>
+<P>
+Here, the probe point expands to
+<code>kernel.function("tcp_sendmsg").return.maxactive(10)</code>.
+
+<P>
+
+<H3><A ID="SECTION00042500000000000000">
+<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">5</SPAN> Alias suffixes and wildcards</A>
+</H3>
+
+<P>
+When expanding wildcards, SystemTap generally avoids considering alias
+suffixes in the expansion. The exception is when a wildcard element is
+encountered that does not have any ordinary expansions. Consider the
+following example:
+
+<P>
+
+<DL class="COMPACT">
+<DT>
+<DD><PRE>
+probe some_unrelated_probe = ... { ... }
+
+probe myprobe = syscall.read { ... }
+
+probe myprobe.test = some_unrelated_probe { ... }
+
+probe myprobe.* { ... }
+
+probe myprobe.ret* { ... }
+</PRE>
+</DD>
+</DL>
+<P>
+Here, <code>return</code> would be a valid suffix for <code>myprobe</code>. The
+wildcard <code>myprobe.*</code> matches the ordinary alias
+<code>myprobe.test</code>, and hence the suffix expansion
+<code>myprobe.return</code> is not included. Conversely, <code>myprobe.ret*</code>
+does not match any ordinary aliases, so the suffix
+<code>myprobe.return</code> is included as an expansion.
+
+<P>
+
+<H2><A ID="SECTION00043000000000000000"></A><A ID="sub:Variables"></A>
+<A NAME="186"></A>
+<BR>
+<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN> Variables
+</H2>
+Identifiers for variables and functions are alphanumeric sequences, and may
+include the underscore (_) and the dollar sign ($) characters. They may
+not start with a plain digit. Each variable is by default local to the probe
+or function statement block where it is mentioned, and therefore its scope
+and lifetime is limited to a particular probe or function invocation. Scalar
+variables are implicitly typed as either string or integer. Associative arrays
+also have a string or integer value, and a tuple of strings or integers serves
+as a key. Arrays must be declared as global. Local arrays<A NAME="187"></A>
+are not allowed.
+
+<P>
+The translator performs <SPAN CLASS="textit">type inference</SPAN> on all identifiers, including
+array indexes and function parameters. Inconsistent type-related use of identifiers
+results in an error.
+
+<P>
+Variables may be declared global. Global variables are shared among all probes
+and remain instantiated as long as the SystemTap session. There is one namespace
+for all global variables, regardless of the script file in which they are
+found. Because of possible concurrency limits, such as multiple probe handlers,
+each global variable used by a probe is automatically read- or write-locked
+while the handler is running. A global declaration may be written at the
+outermost level anywhere in a script file, not just within a block of code.
+Global variables which are written but never read will be displayed
+automatically at session shutdown. The following declaration marks
+<SPAN CLASS="texttt">var1</SPAN> and <SPAN CLASS="texttt">var2</SPAN> as global.
+The translator will infer a value type for each, and if the variable is used
+as an array, its key types.
+
+<P>
+
+<DL class="COMPACT">
+<DT>
+<DD><PRE>
+global var1[=<value>], var2[=<value>]
+</PRE>
+</DD>
+</DL>
+<P>
+The scope of a global variable may be limited to a tapset or
+user script file using private keyword. The global keyword is optional when
+defining a private global variable. Following declaration marks var1 and var2
+private globals.
+
+<P>
+
+<DL class="COMPACT">
+<DT>
+<DD><PRE>
+private global var1[=<value>]
+private var2[=<value>]
+</PRE>
+</DD>
+</DL>
+<P>
+
+<H3><A ID="SECTION00043100000000000000"></A>
+<A NAME="200"></A>
+<BR>
+<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">1</SPAN> Unused variables
+</H3>
+
+<P>
+The SystemTap translator removes unused variables. Global variable
+that are never written or read are discarded. Every local variables
+where the variable is only written but never read are also
+discarded. This optimization prunes unused variables defined
+in the probe aliases, but never used in the probe handler.
+If desired, this optimization can disabled with the <SPAN CLASS="texttt">-u</SPAN> option.
+
+<P>
+
+<H2><A ID="SECTION00044000000000000000"></A><A ID="sub:Auxiliary-functions"></A>
+<A NAME="203"></A>
+<BR>
+<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">4</SPAN> Auxiliary functions
+</H2>
+General syntax:
+
+<P>
+
+<DL class="COMPACT">
+<DT>
+<DD><PRE>
+function <name>[:<type>] ( <arg1>[:<type>], ... )[:<priority>] { <stmts> }
+</PRE>
+</DD>
+</DL>SystemTap scripts may define subroutines to factor out common work. Functions
+may take any number of scalar arguments, and must return a single scalar
+value. Scalars in this context are integers or strings. For more information
+on scalars, see Section <A HREF="#sub:Variables"><IMG ALT="[*]" SRC="crossref.png"></A> and Section <A HREF="5_Language_elements.html#sub:Data-types"><IMG ALT="[*]" SRC="crossref.png"></A><SPAN CLASS="texttt">.</SPAN>
+The following is an example function declaration.
+
+<P>
+
+<DL class="COMPACT">
+<DT>
+<DD><PRE>
+function thisfn (arg1, arg2) {
+ return arg1 + arg2
+}
+</PRE>
+</DD>
+</DL>
+<P>
+Note the general absence of type declarations, which are inferred by the
+translator. If desired, a function definition may include explicit type declarations
+for its return value, its arguments, or both. This is helpful for embedded-C
+functions. In the following example, the type inference engine need only
+infer the type of arg2, a string.
+
+<P>
+
+<DL class="COMPACT">
+<DT>
+<DD><PRE>
+function thatfn:string(arg1:long, arg2) {
+ return sprintf("%d%s", arg1, arg2)
+}
+</PRE>
+</DD>
+</DL>
+<P>
+Functions may call others or themselves recursively, up to a fixed nesting
+limit. See Section <A HREF="1_SystemTap_overview.html#sub:SystemTap-safety"><IMG ALT="[*]" SRC="crossref.png"></A>.
+
+<P>
+Functions may be marked private using the private keyword to limit their scope
+to the tapset or user script file they are defined in. An example definition of
+a private function follows:
+
+<P>
+
+<DL class="COMPACT">
+<DT>
+<DD><PRE>
+private function three:long () { return 3 }
+</PRE>
+</DD>
+</DL>
+<P>
+Functions terminating without reaching an explicit return statement will
+return an implicit 0 or <code>""</code>, determined by type inference.
+
+<P>
+Functions may be overloaded during both runtime and compile time.
+
+<P>
+Runtime overloading allows the executed function to be selected while the
+module is running based on runtime conditions and is achieved using the
+"next" statement in script functions and <SPAN CLASS="texttt">STAP_NEXT</SPAN> macro for embedded-C
+functions. For example,
+
+<P>
+
+<DL class="COMPACT">
+<DT>
+<DD><PRE>
+function f() { if (condition) next; print("first function") }
+function f() %{ STAP_NEXT; print("second function") %}
+function f() { print("third function") }
+</PRE>
+</DD>
+</DL>
+<P>
+During a functioncall f(), the execution will transfer to the third function
+if condition evaluates to true and print "third function". Note that the second
+function is unconditionally nexted.
+
+<P>
+Parameter overloading allows the function to be executed to be selected
+at compile time based on the number of arguments provided to the
+functioncall. For example,
+
+<P>
+
+<DL class="COMPACT">
+<DT>
+<DD><PRE>
+function g() { print("first function") }
+function g(x) { print("second function") }
+g() -> "first function"
+g(1) -> "second function"
+</PRE>
+</DD>
+</DL>
+<P>
+Note that runtime overloading does not occur in the above example, as exactly
+one function will be resolved for the functioncall. The use of a next statement
+inside a function while no more overloads remain will trigger a runtime exception
+Runtime overloading will only occur if the functions have the same arity,
+functions with the same name but different number of parameters are completely
+unrelated.
+
+<P>
+Execution order is determined by a priority value which may be specified.
+If no explicit priority is specified, user script functions are given a
+higher priority than library functions. User script functions and library
+functions are assigned a default priority value of 0 and 1 respectively.
+Functions with the same priority are executed in declaration order. For example,
+
+<P>
+
+<DL class="COMPACT">
+<DT>
+<DD><PRE>
+function f():3 { if (condition) next; print("first function") }
+function f():1 { if (condition) next; print("second function") }
+function f():2 { print("third function") }
+</PRE>
+</DD>
+</DL>
+<P>
+
+<H2><A ID="SECTION00045000000000000000"></A><A ID="sub:Embedded-C"></A>
+<A NAME="238"></A>
+<BR>
+<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN> Embedded C
+</H2>
+SystemTap supports a <SPAN CLASS="textit">guru<A NAME="239"></A> mode</SPAN> where script
+safety features such as code and data memory reference protection are
+removed. Guru mode is set by passing the <SPAN CLASS="textbf">-g</SPAN> option to the
+stap command. When in guru mode, the translator accepts C code
+enclosed between “%{” and “%}” markers in the top level of
+the script file. The embedded C code is transcribed verbatim, without
+analysis, in sequence, into the top level of the generated C
+code. Thus, guru mode may be useful for adding #include instructions
+at the top level of the generated module, or providing auxiliary
+definitions for use by other embedded code.
+
+<P>
+When in guru mode, embedded C code blocks are also allowed as the body
+of a SystemTap function (as described in
+Section <A HREF="#sub:Embedded-C-Functions"><IMG ALT="[*]" SRC="crossref.png"></A>), and in place of any SystemTap
+expression. In the latter case, the code block must contain a valid
+expression according to C syntax.
+
+<P>
+Here is an example of the various permitted methods of embedded C code inclusion:
+
+<P>
+
+<DL class="COMPACT">
+<DT>
+<DD><PRE>
+%{
+#include <linux/in.h>
+#include <linux/ip.h>
+%} /* <-- top level */
+
+/* Reads the char value stored at a given address: */
+function __read_char:long(addr:long) %{ /* pure */
+ STAP_RETURN(kderef(sizeof(char), STAP_ARG_addr));
+ CATCH_DEREF_FAULT ();
+%} /* <-- function body */
+
+/* Determines whether an IP packet is TCP, based on the iphdr: */
+function is_tcp_packet:long(iphdr) {
+ protocol = @cast(iphdr, "iphdr")->protocol
+ return (protocol == %{ IPPROTO_TCP %}) /* <-- expression */
+}
+</PRE>
+</DD>
+</DL>
+<P>
+
+<H2><A ID="SECTION00046000000000000000"></A><A ID="sub:Embedded-C-Functions"></A>
+<BR>
+<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">6</SPAN> Embedded C functions
+</H2>
+
+<P>
+General syntax:
+
+<P>
+
+<DL class="COMPACT">
+<DT>
+<DD><PRE>
+function <name>:<type> ( <arg1>:<type>, ... )[:<priority>] %{ <C_stmts> %}
+</PRE>
+</DD>
+</DL>Embedded C code is permitted in a function body.
+In that case, the script language
+body is replaced entirely by a piece of C code enclosed between
+“%{” and “%}” markers.
+The enclosed code may do anything reasonable and safe as allowed
+by the C parser.
+
+<P>
+There are a number of undocumented but complex safety constraints on concurrency,
+resource consumption and runtime limits that are applied to code written
+in the SystemTap language. These constraints are not applied to embedded
+C code, so use embedded C code with extreme caution. Be especially
+careful when dereferencing pointers. Use the kread() macro to dereference
+any pointers that could potentially be invalid or dangerous. If you are unsure,
+err on the side of caution and use kread(). The kread() macro is one of the
+safety mechanisms used in code generated by embedded C. It protects against
+pointer accesses that could crash the system.
+
+<P>
+For example, to access the pointer chain <SPAN CLASS="texttt">name = skb->dev->name</SPAN> in
+embedded C, use the following code.
+
+<P>
+
+<DL class="COMPACT">
+<DT>
+<DD><PRE>
+struct net_device *dev;
+char *name;
+dev = kread(&(skb->dev));
+name = kread(&(dev->name));
+</PRE>
+</DD>
+</DL>
+<P>
+The memory locations reserved for input and output values are provided
+to a function using macros named
+<SPAN CLASS="texttt">STAP_ARG_foo</SPAN><A NAME="261"></A> (for arguments named
+<SPAN CLASS="texttt">foo</SPAN>) and <SPAN CLASS="texttt">STAP_RETVALUE</SPAN><A NAME="264"></A>.
+Errors may be signalled with <SPAN CLASS="texttt">STAP_ERROR</SPAN>. Output may be written
+with <SPAN CLASS="texttt">STAP_PRINTF</SPAN>. The function may return early with <SPAN CLASS="texttt">STAP_RETURN</SPAN>. Here are some examples:
+
+<P>
+
+<DL class="COMPACT">
+<DT>
+<DD><PRE>
+function integer_ops:long (val) %{
+ STAP_PRINTF("%d\n", STAP_ARG_val);
+ STAP_RETVALUE = STAP_ARG_val + 1;
+ if (STAP_RETVALUE == 4)
+ STAP_ERROR("wrong guess: %d", (int) STAP_RETVALUE);
+ if (STAP_RETVALUE == 3)
+ STAP_RETURN(0);
+ STAP_RETVALUE ++;
+%}
+function string_ops:string (val) %{
+ strlcpy (STAP_RETVALUE, STAP_ARG_val, MAXSTRINGLEN);
+ strlcat (STAP_RETVALUE, "one", MAXSTRINGLEN);
+ if (strcmp (STAP_RETVALUE, "three-two-one"))
+ STAP_RETURN("parameter should be three-two-");
+%}
+function no_ops () %{
+ STAP_RETURN(); /* function inferred with no return value */
+%}
+</PRE>
+</DD>
+</DL>
+<P>
+The function argument and return value types should be stated if the
+translator cannot infer them from usage. The translator does not
+analyze the embedded C code within the function.
+
+<P>
+You should examine C code generated for ordinary script language
+functions to write compatible embedded-C. Usually, all SystemTap
+functions and probes run with interrupts disabled, thus you cannot
+call functions that might sleep within the embedded C.
+
+<P>
+
+<H2><A ID="SECTION00047000000000000000">
+<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">7</SPAN> Embedded C pragma comments</A>
+</H2>
+
+<P>
+Embedded C blocks may contain various markers to assert optimization
+and safety properties.
+
+<P>
+
+<UL>
+<LI><code>/* pure */</code> means that the C code has no side effects and
+ may be elided entirely if its value is not used by script code.
+</LI>
+<LI><code>/* stable */</code> means that the C code always has the same value
+ (in any given probe handler invocation), so repeated calls may be
+ automatically replaced by memoized values. Such functions must take
+ no parameters, and also be <code>/* pure */</code>.
+</LI>
+<LI><code>/* unprivileged */</code> means that the C code is so safe that
+ even unprivileged users are permitted to use it. (This is useful, in
+ particular, to define an embedded-C function inside a tapset that
+ may be used by unprivileged code.)
+</LI>
+<LI><code>/* myproc-unprivileged */</code> means that the C code is so
+ safe that even unprivileged users are permitted to use it, provided
+ that the target of the current probe is within the user's own
+ process.
+</LI>
+<LI><code>/* guru */</code> means that the C code is so unsafe that a
+ systemtap user must specify <code>-g</code> (guru mode) to use this, even
+ if the C code is being exported from a tapset.
+</LI>
+<LI><code>/* unmangled */</code>, used in an embedded-C function, means
+ that the legacy (pre-1.8) argument access syntax should be made
+ available inside the function. Hence, in addition to
+ <code>STAP_ARG_foo</code> and <code>STAP_RETVALUE</code> one can use
+ <code>THIS->foo</code> and <code>THIS->__retvalue</code> respectively inside the
+ function. This is useful for quickly migrating code written for
+ SystemTap version 1.7 and earlier.
+</LI>
+<LI><code>/* unmodified-fnargs */</code> in an embedded-C function, means
+ that the function arguments are not modified inside the function body.
+</LI>
+<LI><code>/* string */</code> in embedded-C expressions only, means that
+ the expression has <code>const char *</code> type and should be treated as
+ a string value, instead of the default long numeric.
+</LI>
+</UL>
+
+<P>
+
+<H2><A ID="SECTION00048000000000000000">
+<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">8</SPAN> Accessing script level global variables</A>
+</H2>
+
+<P>
+Script level global variables may be accessed in embedded-C functions and
+blocks. To read or write the global variable <SPAN CLASS="textbf">var</SPAN>, the
+<code>/* pragma:read:var */</code> or <code>/* pragma:write:var */</code>
+marker must be first placed in the embedded-C function or block. This provides
+the macros <code>STAP_GLOBAL_GET_*</code> and <code>STAP_GLOBAL_SET_*</code>
+macros to allow reading and writing, respectively. For example:
+
+<DL class="COMPACT">
+<DT>
+<DD><PRE>
+global var
+global var2[100]
+function increment() %{
+ /* pragma:read:var */ /* pragma:write:var */
+ /* pragma:read:var2 */ /* pragma:write:var2 */
+ STAP_GLOBAL_SET_var(STAP_GLOBAL_GET_var()+1); //var++
+ STAP_GLOBAL_SET_var2(1, 1, STAP_GLOBAL_GET_var2(1, 1)+1); //var2[1,1]++
+%}
+</PRE>
+</DD>
+</DL>Variables may be read and set in both embedded-C functions and expressions.
+Strings returned from embedded-C code are decayed to pointers. Variables must
+also be assigned at script level to allow for type inference. Map assignment
+does not return the value written, so chaining does not work.
+
+<P>
+
+<DIV CLASS="navigation"><HR>
+<!--Navigation Panel-->
+<A
+ HREF="4_Probe_points.html">
+<IMG WIDTH="37" HEIGHT="24" ALT="next" SRC="next.png"></A>
+<A
+ HREF="langref.html">
+<IMG WIDTH="26" HEIGHT="24" ALT="up" SRC="up.png"></A>
+<A
+ HREF="2_Types_SystemTap_scripts.html">
+<IMG WIDTH="63" HEIGHT="24" ALT="previous" SRC="prev.png"></A>
+<A ID="tex2html262"
+ HREF="Contents.html">
+<IMG WIDTH="65" HEIGHT="24" ALT="contents" SRC="contents.png"></A>
+<A ID="tex2html264"
+ HREF="Index.html">
+<IMG WIDTH="43" HEIGHT="24" ALT="index" SRC="index.png"></A>
+<BR>
+<B> Next:</B> <A
+ HREF="4_Probe_points.html">4 Probe points</A>
+<B> Up:</B> <A
+ HREF="langref.html">SystemTap Language Reference</A>
+<B> Previous:</B> <A
+ HREF="2_Types_SystemTap_scripts.html">2 Types of SystemTap</A>
+ <B> <A ID="tex2html263"
+ HREF="Contents.html">Contents</A></B>
+ <B> <A ID="tex2html265"
+ HREF="Index.html">Index</A></B> </DIV>
+<!--End of Navigation Panel-->
+
+</BODY>
+</HTML>
--- /dev/null
+<!DOCTYPE HTML>
+
+<!--Converted with LaTeX2HTML 2020.2 (Released July 1, 2020) -->
+<HTML lang="en">
+<HEAD>
+<TITLE>4 Probe points</TITLE>
+<META NAME="description" CONTENT="4 Probe points">
+<META NAME="keywords" CONTENT="langref">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+
+<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=utf-8">
+<META NAME="viewport" CONTENT="width=device-width, initial-scale=1.0">
+<META NAME="Generator" CONTENT="LaTeX2HTML v2020.2">
+
+<LINK REL="STYLESHEET" HREF="langref.css">
+
+<LINK REL="next" HREF="5_Language_elements.html">
+<LINK REL="previous" HREF="3_Components_SystemTap_scri.html">
+<LINK REL="next" HREF="5_Language_elements.html">
+</HEAD>
+
+<BODY >
+
+<DIV CLASS="navigation"><!--Navigation Panel-->
+<A
+ HREF="5_Language_elements.html">
+<IMG WIDTH="37" HEIGHT="24" ALT="next" SRC="next.png"></A>
+<A
+ HREF="langref.html">
+<IMG WIDTH="26" HEIGHT="24" ALT="up" SRC="up.png"></A>
+<A
+ HREF="3_Components_SystemTap_scri.html">
+<IMG WIDTH="63" HEIGHT="24" ALT="previous" SRC="prev.png"></A>
+<A ID="tex2html280"
+ HREF="Contents.html">
+<IMG WIDTH="65" HEIGHT="24" ALT="contents" SRC="contents.png"></A>
+<A ID="tex2html282"
+ HREF="Index.html">
+<IMG WIDTH="43" HEIGHT="24" ALT="index" SRC="index.png"></A>
+<BR>
+<B> Next:</B> <A
+ HREF="5_Language_elements.html">5 Language elements</A>
+<B> Up:</B> <A
+ HREF="langref.html">SystemTap Language Reference</A>
+<B> Previous:</B> <A
+ HREF="3_Components_SystemTap_scri.html">3 Components of a</A>
+ <B> <A ID="tex2html281"
+ HREF="Contents.html">Contents</A></B>
+ <B> <A ID="tex2html283"
+ HREF="Index.html">Index</A></B>
+<BR>
+<BR></DIV>
+<!--End of Navigation Panel-->
+<!--Table of Child-Links-->
+<A ID="CHILD_LINKS"><STRONG>Subsections</STRONG></A>
+
+<UL CLASS="ChildLinks">
+<LI><A ID="tex2html284"
+ HREF="4_Probe_points.html#SECTION00051000000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN> General syntax</A>
+<UL>
+<LI><A ID="tex2html285"
+ HREF="4_Probe_points.html#SECTION00051100000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN> Prefixes</A>
+<LI><A ID="tex2html286"
+ HREF="4_Probe_points.html#SECTION00051200000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">2</SPAN> Suffixes</A>
+<LI><A ID="tex2html287"
+ HREF="4_Probe_points.html#SECTION00051300000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">3</SPAN> Wildcarded file names, function names</A>
+<LI><A ID="tex2html288"
+ HREF="4_Probe_points.html#SECTION00051400000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">4</SPAN> Optional probe points</A>
+<LI><A ID="tex2html289"
+ HREF="4_Probe_points.html#SECTION00051500000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">5</SPAN> Brace expansion</A>
+</UL>
+<BR>
+<LI><A ID="tex2html290"
+ HREF="4_Probe_points.html#SECTION00052000000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">2</SPAN> Built-in probe point types (DWARF probes)</A>
+<UL>
+<LI><A ID="tex2html291"
+ HREF="4_Probe_points.html#SECTION00052100000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN> kernel.function, module().function</A>
+<LI><A ID="tex2html292"
+ HREF="4_Probe_points.html#SECTION00052200000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN> kernel.statement, module().statement</A>
+</UL>
+<BR>
+<LI><A ID="tex2html293"
+ HREF="4_Probe_points.html#SECTION00053000000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">3</SPAN> Function return probes</A>
+<LI><A ID="tex2html294"
+ HREF="4_Probe_points.html#SECTION00054000000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">4</SPAN> DWARF-less probing</A>
+<LI><A ID="tex2html295"
+ HREF="4_Probe_points.html#SECTION00055000000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">5</SPAN> Userspace probing</A>
+<UL>
+<LI><A ID="tex2html296"
+ HREF="4_Probe_points.html#SECTION00055100000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">1</SPAN> Begin/end variants</A>
+<LI><A ID="tex2html297"
+ HREF="4_Probe_points.html#SECTION00055200000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">2</SPAN> Syscall variants</A>
+<LI><A ID="tex2html298"
+ HREF="4_Probe_points.html#SECTION00055300000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">3</SPAN> Function/statement variants</A>
+<LI><A ID="tex2html299"
+ HREF="4_Probe_points.html#SECTION00055400000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">4</SPAN> Absolute variant</A>
+<LI><A ID="tex2html300"
+ HREF="4_Probe_points.html#SECTION00055500000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">5</SPAN> Process probe paths</A>
+<LI><A ID="tex2html301"
+ HREF="4_Probe_points.html#SECTION00055600000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">6</SPAN> Target process mode</A>
+<LI><A ID="tex2html302"
+ HREF="4_Probe_points.html#SECTION00055700000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">7</SPAN> Instruction probes</A>
+<LI><A ID="tex2html303"
+ HREF="4_Probe_points.html#SECTION00055800000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">8</SPAN> Static userspace probing</A>
+</UL>
+<BR>
+<LI><A ID="tex2html304"
+ HREF="4_Probe_points.html#SECTION00056000000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">6</SPAN> Java probes</A>
+<LI><A ID="tex2html305"
+ HREF="4_Probe_points.html#SECTION00057000000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">7</SPAN> PROCFS probes</A>
+<LI><A ID="tex2html306"
+ HREF="4_Probe_points.html#SECTION00058000000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">8</SPAN> Marker probes</A>
+<LI><A ID="tex2html307"
+ HREF="4_Probe_points.html#SECTION00059000000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">9</SPAN> Tracepoints</A>
+<LI><A ID="tex2html308"
+ HREF="4_Probe_points.html#SECTION000510000000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">10</SPAN> Syscall probes</A>
+<LI><A ID="tex2html309"
+ HREF="4_Probe_points.html#SECTION000511000000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">11</SPAN> Timer probes</A>
+<LI><A ID="tex2html310"
+ HREF="4_Probe_points.html#SECTION000512000000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">12</SPAN> Special probe points</A>
+<UL>
+<LI><A ID="tex2html311"
+ HREF="4_Probe_points.html#SECTION000512100000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">12</SPAN>.<SPAN CLASS="arabic">1</SPAN> begin</A>
+<LI><A ID="tex2html312"
+ HREF="4_Probe_points.html#SECTION000512200000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">12</SPAN>.<SPAN CLASS="arabic">2</SPAN> end</A>
+<LI><A ID="tex2html313"
+ HREF="4_Probe_points.html#SECTION000512300000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">12</SPAN>.<SPAN CLASS="arabic">3</SPAN> error</A>
+<LI><A ID="tex2html314"
+ HREF="4_Probe_points.html#SECTION000512400000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">12</SPAN>.<SPAN CLASS="arabic">4</SPAN> begin, end, and error probe sequence</A>
+<LI><A ID="tex2html315"
+ HREF="4_Probe_points.html#SECTION000512500000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">12</SPAN>.<SPAN CLASS="arabic">5</SPAN> never</A>
+</UL></UL>
+<!--End of Table of Child-Links-->
+<HR>
+
+<H1><A ID="SECTION00050000000000000000"></A><A ID="sec:Probe-Points"></A>
+<A NAME="282"></A>
+<BR>
+<SPAN CLASS="arabic">4</SPAN> Probe points
+</H1>
+
+<H2><A ID="SECTION00051000000000000000"></A>
+<A NAME="284"></A>
+<BR>
+<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN> General syntax
+</H2>
+The general probe point syntax is a dotted-symbol sequence. This divides
+the event namespace into parts, analogous to the style of the Domain Name
+System. Each component identifier is parameterized by a string or number
+literal, with a syntax analogous to a function call.
+
+<P>
+The following are all syntactically valid probe points.
+
+<P>
+
+<DL class="COMPACT">
+<DT>
+<DD><PRE>
+kernel.function("foo")
+kernel.function("foo").return
+module{"ext3"}.function("ext3_*")
+kernel.function("no_such_function") ?
+syscall.*
+end
+timer.ms(5000)
+</PRE>
+</DD>
+</DL>
+<P>
+Probes may be broadly classified into <SPAN CLASS="textit">synchronous</SPAN><A NAME="290"></A>
+or <SPAN CLASS="textit">asynchronous</SPAN>.<A NAME="292"></A> A synchronous event occurs when
+any processor executes an instruction matched by the specification. This
+gives these probes a reference point (instruction address) from which more
+contextual data may be available. Other families of probe points refer to
+asynchronous events such as timers, where no fixed reference point is related.
+Each probe point specification may match multiple locations, such as by using
+wildcards or aliases, and all are probed. A probe declaration may contain
+several specifications separated by commas, which are all probed.
+
+<P>
+
+<H3><A ID="SECTION00051100000000000000"></A>
+<A NAME="294"></A>
+<BR>
+<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN> Prefixes
+</H3>
+Prefixes specify the probe target, such as <SPAN CLASS="textbf">kernel</SPAN>, <SPAN CLASS="textbf">module</SPAN>,
+<SPAN CLASS="textbf">timer</SPAN>, and so on.
+
+<P>
+
+<H3><A ID="SECTION00051200000000000000"></A>
+<A NAME="299"></A>
+<BR>
+<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">2</SPAN> Suffixes
+</H3>
+Suffixes further qualify the point to probe, such as <SPAN CLASS="textbf">.return</SPAN> for the
+exit point of a probed function. The absence of a suffix implies the function
+entry point.
+
+<P>
+
+<H3><A ID="SECTION00051300000000000000"></A>
+<A NAME="302"></A>
+<BR>
+<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">3</SPAN> Wildcarded file names, function names
+</H3>
+A component may include an asterisk (*) character, which expands to other
+matching probe points. An example follows.
+
+<P>
+
+<DL class="COMPACT">
+<DT>
+<DD><PRE>
+kernel.syscall.*
+kernel.function("sys_*)
+</PRE>
+</DD>
+</DL>
+<P>
+
+<H3><A ID="SECTION00051400000000000000"></A><A ID="sub:Optional-probe-points"></A>
+<A NAME="309"></A>
+<BR>
+<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">4</SPAN> Optional probe points
+</H3>
+A probe point may be followed by a question mark (?) character, to indicate
+that it is optional, and that no error should result if it fails to expand.
+This effect passes down through all levels of alias or wildcard expansion.
+
+<P>
+The following is the general syntax.
+
+<P>
+
+<DL class="COMPACT">
+<DT>
+<DD><PRE>
+kernel.function("no_such_function") ?
+</PRE>
+</DD>
+</DL>
+<P>
+
+<H3><A ID="SECTION00051500000000000000"></A>
+<A NAME="315"></A>
+<BR>
+<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">5</SPAN> Brace expansion
+</H3>
+Brace expansion is a mechanism which allows a list of probe points to be
+generated. It is very similar to shell expansion. A component may be surrounded
+by a pair of curly braces to indicate that the comma-separated sequence of
+one or more subcomponents will each constitute a new probe point. The braces
+may be arbitrarily nested. The ordering of expanded results is based on
+product order.
+
+<P>
+The question mark (?), exclamation mark (!) indicators and probe point conditions
+may not be placed in any expansions that are before the last component.
+
+<P>
+The following is an example of brace expansion.
+
+<P>
+
+<DL class="COMPACT">
+<DT>
+<DD><PRE>
+syscall.{write,read}
+# Expands to
+syscall.write, syscall.read
+
+{kernel,module("nfs")}.function("nfs*")!
+# Expands to
+kernel.function("nfs*")!, module("nfs").function("nfs*")!
+</PRE>
+</DD>
+</DL>
+<P>
+
+<H2><A ID="SECTION00052000000000000000"></A>
+<A NAME="321"></A>
+<A NAME="322"></A>
+<A ID="dwarfprobes"></A>
+<BR>
+<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">2</SPAN> Built-in probe point types (DWARF probes)
+</H2>
+This family of probe points uses symbolic debugging information for the target
+kernel or module, as may be found in executables that have not
+been stripped, or in the separate <SPAN CLASS="textbf">debuginfo</SPAN> packages. They allow
+logical placement of probes into the execution path of the target
+by specifying a set of points in the source or object code. When a matching
+statement executes on any processor, the probe handler is run in that context.
+
+<P>
+Points in a kernel are identified by module, source file, line number, function
+name or some combination of these.
+
+<P>
+Here is a list of probe point specifications currently supported:
+
+<P>
+
+<DL class="COMPACT">
+<DT>
+<DD><PRE>
+kernel.function(PATTERN)
+kernel.function(PATTERN).call
+kernel.function(PATTERN).return
+kernel.function(PATTERN).return.maxactive(VALUE)
+kernel.function(PATTERN).inline
+kernel.function(PATTERN).label(LPATTERN)
+module(MPATTERN).function(PATTERN)
+module(MPATTERN).function(PATTERN).call
+module(MPATTERN).function(PATTERN).return.maxactive(VALUE)
+module(MPATTERN).function(PATTERN).inline
+kernel.statement(PATTERN)
+kernel.statement(ADDRESS).absolute
+module(MPATTERN).statement(PATTERN)
+</PRE>
+</DD>
+</DL>
+<P>
+The <SPAN CLASS="textbf">.function</SPAN> variant places a probe near the beginning of the named
+function, so that parameters are available as context variables.
+
+<P>
+The <SPAN CLASS="textbf">.return</SPAN> variant places a probe at the moment of return from the named
+function, so the return value is available as the $return context variable.
+The entry parameters are also available, though the function may have changed
+their values. Return probes may be further qualified with <SPAN CLASS="textbf">.maxactive</SPAN>,
+which specifies how many instances of the specified function can be probed simultaneously.
+You can leave off <SPAN CLASS="textbf">.maxactive</SPAN> in most cases, as the default
+(<SPAN CLASS="textbf">KRETACTIVE</SPAN>) should be sufficient.
+However, if you notice an excessive number of skipped probes, try setting <SPAN CLASS="textbf">.maxactive</SPAN>
+to incrementally higher values to see if the number of skipped probes decreases.
+
+<P>
+The <SPAN CLASS="textbf">.inline</SPAN> modifier for <SPAN CLASS="textbf">.function</SPAN> filters the results to include only
+instances of inlined functions. The <SPAN CLASS="textbf">.call</SPAN> modifier selects the opposite subset.
+The <SPAN CLASS="textbf">.exported</SPAN> modifier filters the results to include only exported functions.
+Inline functions do not have an identifiable return point, so <SPAN CLASS="textbf">.return</SPAN>
+is not supported on <SPAN CLASS="textbf">.inline</SPAN> probes.
+
+<P>
+The <SPAN CLASS="textbf">.statement</SPAN> variant places a probe at the exact spot, exposing those local
+variables that are visible there.
+
+<P>
+In the above probe descriptions, MPATTERN stands for a string literal
+that identifies the loaded kernel module of interest and LPATTERN
+stands for a source program label. Both MPATTERN and LPATTERN may
+include asterisk (*), square brackets "[]", and
+question mark (?) wildcards.
+
+<P>
+PATTERN stands for a string literal that identifies a point in the program.
+It is composed of three parts:
+
+<P>
+
+<OL>
+<LI>The first part is the name of a function, as would appear in the nm program's
+output. This part may use the asterisk and question mark wildcard operators
+to match multiple names.
+</LI>
+<LI>The second part is optional, and begins with the ampersand (@) character.
+It is followed by the path to the source file containing the function,
+which may include a wildcard pattern, such as mm/slab*.
+In most cases, the path should be relative to the top of the
+linux source directory, although an absolute path may be necessary for some kernels.
+If a relative pathname doesn't work, try absolute.
+</LI>
+<LI>The third part is optional if the file name part was given. It identifies
+the line number in the source file, preceded by a “:” or “+”.
+The line number is assumed to be an
+absolute line number if preceded by a “:”, or relative to the entry of
+the function if preceded by a “+”.
+All the lines in the function can be matched with “:*”.
+A range of lines x through y can be matched with “:x-y”.
+
+<P>
+</LI>
+</OL>
+Alternately, specify PATTERN as a numeric constant to indicate a relative
+module address or an absolute kernel address.
+
+<P>
+Some of the source-level variables, such as function parameters, locals,
+or globals visible in the compilation unit, are visible to probe handlers.
+Refer to these variables by prefixing their name with a dollar sign within
+the scripts. In addition, a special syntax allows limited traversal of
+structures, pointers, arrays, taking the address of a variable or pretty
+printing a whole structure.
+
+<P>
+<SPAN CLASS="texttt">$var</SPAN> refers to an in-scope variable var. If it is a type similar
+to an integer, it will be cast to a 64-bit integer for script use. Pointers
+similar to a string (char *) are copied to SystemTap string values by the
+<SPAN CLASS="texttt">kernel_string()</SPAN> or <SPAN CLASS="texttt">user_string()</SPAN> functions.
+
+<P>
+<SPAN CLASS="texttt">@var("varname")</SPAN> is an alternative syntax for <SPAN CLASS="texttt">$varname</SPAN>.
+It can also be used to access global variables in a particular compile
+unit (CU). <SPAN CLASS="texttt">@var("varname@src/file.c")</SPAN> refers to the global
+(either file local or external) variable varname defined when the file
+src/file.c was compiled. The CU in which the variable is resolved is
+the first CU in the module of the probe point which matches the given
+file name at the end and has the shortest file name path (e.g. given
+<SPAN CLASS="texttt">@var("foo@bar/baz.c")</SPAN> and CUs with file name paths
+<SPAN CLASS="texttt">src/sub/module/bar/baz.c</SPAN> and <SPAN CLASS="texttt">src/bar/baz.c</SPAN> the second
+CU will be chosen to resolve <SPAN CLASS="texttt">foo</SPAN>).
+
+<P>
+The notation <SPAN CLASS="texttt">@var("varname", "/path/to/exe-or-so)</SPAN> is also supported
+to explicitly specify an executable or library file path in which the global or
+top-level static variable resides.
+
+<P>
+<SPAN CLASS="texttt">$var->field</SPAN> or <SPAN CLASS="texttt">@var("var@file.c")->field</SPAN> traverses a
+structure's field. The indirection operator may be repeated to follow
+additional levels of pointers.
+
+<P>
+<SPAN CLASS="texttt">$var[N]</SPAN> or <SPAN CLASS="texttt">@var("var@file.c")[N]</SPAN> indexes into an
+array. The index is given with a literal number.
+
+<P>
+<SPAN CLASS="texttt">&$var</SPAN> or <SPAN CLASS="texttt">&@var("var@file.c")</SPAN> provides the address of
+a variable as a long. It can also be used in combination with field access
+or array indexing to provide the address of a particular field or an
+element in an array with <SPAN CLASS="texttt">&var->field</SPAN>,
+<SPAN CLASS="texttt">&@var("var@file.c")[N]</SPAN> or a combination of those accessors.
+
+<P>
+Using a single <SPAN CLASS="texttt">$</SPAN> or a double <SPAN CLASS="texttt">$$</SPAN> suffix provides a
+swallow or deep string representation of the variable data type. Using
+a single <SPAN CLASS="texttt">$</SPAN>, as in <SPAN CLASS="texttt">$var$</SPAN>, will provide a string that
+only includes the values of all basic type values of fields of the variable
+structure type but not any nested complex type values (which will be
+represented with <SPAN CLASS="texttt">{...}</SPAN>). Using a double <SPAN CLASS="texttt">$$</SPAN>,
+as in <SPAN CLASS="texttt">@var("var")$$</SPAN> will provide a string that also includes
+all values of nested data types.
+
+<P>
+<SPAN CLASS="texttt">$$vars</SPAN> expands to a character string that is equivalent to
+<SPAN CLASS="texttt">sprintf("parm1=%x ... parmN=%x var1=%x ... varN=%x", $parm1, ..., $parmN,
+$var1, ..., $varN)</SPAN>
+
+<P>
+<SPAN CLASS="texttt">$$locals</SPAN> expands to a character string that is equivalent to
+<SPAN CLASS="texttt">sprintf("var1=%x ... varN=%x", $var1, ..., $varN)</SPAN>
+
+<P>
+<SPAN CLASS="texttt">$$parms</SPAN> expands to a character string that is equivalent to
+<SPAN CLASS="texttt">sprintf("parm1=%x ... parmN=%x", $parm1, ..., $parmN)</SPAN>
+
+<P>
+
+<H3><A ID="SECTION00052100000000000000"></A>
+<A NAME="383"></A>
+<A NAME="384"></A>
+<BR>
+<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN> kernel.function, module().function
+</H3>
+The <SPAN CLASS="textbf">.function</SPAN> variant places a probe near the beginning of the named function,
+so that parameters are available as context variables.
+
+<P>
+General syntax:
+
+<P>
+
+<DL class="COMPACT">
+<DT>
+<DD><PRE>
+kernel.function("func[@file]")
+module("modname").function("func[@file]")
+</PRE>
+</DD>
+</DL>Examples:
+
+<P>
+
+<DL class="COMPACT">
+<DT>
+<DD><PRE>
+# Refers to all kernel functions with "init" or "exit"
+# in the name:
+kernel.function("*init*"), kernel.function("*exit*")
+
+# Refers to any functions within the "kernel/time.c"
+# file that span line 240:
+kernel.function("*@kernel/time.c:240")
+
+# Refers to all functions in the ext3 module:
+module("ext3").function("*")
+</PRE>
+</DD>
+</DL>
+<P>
+
+<H3><A ID="SECTION00052200000000000000"></A>
+<A NAME="395"></A>
+<A NAME="396"></A>
+<BR>
+<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN> kernel.statement, module().statement
+</H3>
+The <SPAN CLASS="textbf">.statement</SPAN> variant places a probe at the exact spot, exposing those local
+variables that are visible there.
+
+<P>
+General syntax:
+
+<P>
+
+<DL class="COMPACT">
+<DT>
+<DD><PRE>
+kernel.statement("func@file:linenumber")
+module("modname").statement("func@file:linenumber")
+</PRE>
+</DD>
+</DL>Example:
+
+<P>
+
+<DL class="COMPACT">
+<DT>
+<DD><PRE>
+# Refers to the statement at line 296 within the
+# kernel/time.c file:
+kernel.statement("*@kernel/time.c:296")
+# Refers to the statement at line bio_init+3 within the fs/bio.c file:
+kernel.statement("bio_init@fs/bio.c+3")
+</PRE>
+</DD>
+</DL>
+<P>
+
+<H2><A ID="SECTION00053000000000000000"></A>
+<A NAME="407"></A>
+<BR>
+<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">3</SPAN> Function return probes
+</H2>
+The <SPAN CLASS="texttt">.return</SPAN> variant places a probe at the moment of return from
+the named function, so that the return value is available as the $return
+context variable. The entry parameters are also accessible in the context
+of the return probe, though their values may have been changed by the function.
+Inline functions do not have an identifiable return point, so <SPAN CLASS="texttt">.return</SPAN>
+is not supported on <SPAN CLASS="texttt">.inline</SPAN> probes.
+
+<P>
+
+<H2><A ID="SECTION00054000000000000000"></A>
+<A NAME="412"></A>
+<BR>
+<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">4</SPAN> DWARF-less probing
+</H2>
+
+<P>
+In the absence of debugging information, you can still use the
+<SPAN CLASS="textit">kprobe</SPAN> family of probes to examine the entry and exit points of
+kernel and module functions. You cannot look up the arguments or local
+variables of a function using these probes. However, you can access
+the parameters by following this procedure:
+
+<P>
+When you're stopped at the entry to a function, you can refer to the
+function's arguments by number. For example, when probing the function
+declared:
+
+<P>
+
+<DL class="COMPACT">
+<DT>
+<DD><PRE>
+asmlinkage ssize_t sys_read(unsigned int fd, char __user * buf, size_t
+count)
+</PRE>
+</DD>
+</DL>
+<P>
+You can obtain the values of <SPAN CLASS="texttt">fd</SPAN>, <SPAN CLASS="texttt">buf</SPAN>, and
+<SPAN CLASS="texttt">count</SPAN>, respectively, as <SPAN CLASS="texttt">uint_arg(1)</SPAN>,
+<SPAN CLASS="texttt">pointer_arg(2)</SPAN>, and <SPAN CLASS="texttt">ulong_arg(3)</SPAN>. In this case, your
+probe code must first call <SPAN CLASS="texttt">asmlinkage()</SPAN>, because on some
+architectures the asmlinkage attribute affects how the function's
+arguments are passed.
+
+<P>
+When you're in a return probe, <SPAN CLASS="texttt">$return</SPAN> isn't supported
+without DWARF, but you can call <SPAN CLASS="texttt">returnval()</SPAN> to get the value
+of the register in which the function value is typically returned, or
+call <SPAN CLASS="texttt">returnstr()</SPAN> to get a string version of that value.
+
+<P>
+And at any code probepoint, you can call
+<SPAN CLASS="texttt">register("regname")</SPAN> to get the value of the specified CPU
+register when the probe point was hit.
+<SPAN CLASS="texttt">u_register("regname")</SPAN> is like <SPAN CLASS="texttt">register("regname")</SPAN>,
+but interprets the value as an unsigned integer.
+
+<P>
+SystemTap supports the following constructs:
+
+<DL class="COMPACT">
+<DT>
+<DD><PRE>
+kprobe.function(FUNCTION)
+kprobe.function(FUNCTION).return
+kprobe.module(NAME).function(FUNCTION)
+kprobe.module(NAME).function(FUNCTION).return
+kprobe.statement(ADDRESS).absolute
+</PRE>
+</DD>
+</DL>
+<P>
+Use <SPAN CLASS="textbf">.function</SPAN> probes for kernel functions and
+<SPAN CLASS="textbf">.module</SPAN> probes for probing functions of a specified module.
+If you do not know the absolute address of a kernel or module
+function, use <SPAN CLASS="textbf">.statement</SPAN> probes. Do not use wildcards in
+<SPAN CLASS="textit">FUNCTION</SPAN> and <SPAN CLASS="textit">MODULE</SPAN> names. Wildcards cause the probe
+to not register. Also, statement probes are available only in guru mode.
+
+<P>
+
+<H2><A ID="SECTION00055000000000000000"></A>
+<A NAME="441"></A>
+<A NAME="442"></A>
+<BR>
+<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">5</SPAN> Userspace probing
+</H2>
+Support for userspace probing is supported on kernels that are
+configured to include the utrace or uprobes extensions.
+
+<P>
+
+<H3><A ID="SECTION00055100000000000000"></A>
+<A ID="sec:beginendvariants"></A>
+<BR>
+<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">1</SPAN> Begin/end variants
+</H3>
+Constructs:
+
+<DL class="COMPACT">
+<DT>
+<DD><PRE>
+process.begin
+process("PATH").begin
+process(PID).begin
+
+process.thread.begin
+process("PATH").thread.begin
+process(PID).thread.begin
+
+process.end
+process("PATH").end
+process(PID).end
+
+process.thread.end
+process("PATH").thread.end
+process(PID).thread.end
+</PRE>
+</DD>
+</DL>
+<P>
+The <SPAN CLASS="texttt">.begin</SPAN> variant is called when a new process described by
+<SPAN CLASS="texttt">PID</SPAN> or <SPAN CLASS="texttt">PATH</SPAN> is created. If no <SPAN CLASS="texttt">PID</SPAN> or
+<SPAN CLASS="texttt">PATH</SPAN> argument is specified (for example
+<SPAN CLASS="texttt">process.begin</SPAN>), the probe flags any new process being
+spawned.
+
+<P>
+The <SPAN CLASS="texttt">.thread.begin</SPAN> variant is called when a new thread
+described by <SPAN CLASS="texttt">PID</SPAN> or <SPAN CLASS="texttt">PATH</SPAN> is created.
+
+<P>
+The <SPAN CLASS="texttt">.end</SPAN> variant is called when a process described by
+<SPAN CLASS="texttt">PID</SPAN> or <SPAN CLASS="texttt">PATH</SPAN> dies.
+
+<P>
+The <SPAN CLASS="texttt">.thread.end</SPAN> variant is called when a thread described by
+<SPAN CLASS="texttt">PID</SPAN> or <SPAN CLASS="texttt">PATH</SPAN> dies.
+
+<P>
+
+<H3><A ID="SECTION00055200000000000000"></A>
+<A ID="sec:syscallvariants"></A>
+<BR>
+<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">2</SPAN> Syscall variants
+</H3>
+Constructs:
+
+<DL class="COMPACT">
+<DT>
+<DD><PRE>
+process.syscall
+process("PATH").syscall
+process(PID).syscall
+
+process.syscall.return
+process("PATH").syscall.return
+process(PID).syscall.return
+</PRE>
+</DD>
+</DL>
+<P>
+The <SPAN CLASS="texttt">.syscall</SPAN> variant is called when a thread described by
+<SPAN CLASS="texttt">PID</SPAN> or <SPAN CLASS="texttt">PATH</SPAN> makes a system call. The system call
+number is available in the <SPAN CLASS="texttt">$syscall</SPAN> context variable. The
+first six arguments of the system call are available in the
+<SPAN CLASS="texttt">$argN</SPAN> parameter, for example <SPAN CLASS="texttt">$arg1</SPAN>,
+<SPAN CLASS="texttt">$arg2</SPAN>, and so on.
+
+<P>
+The <SPAN CLASS="texttt">.syscall.return</SPAN> variant is called when a thread described
+by <SPAN CLASS="texttt">PID</SPAN> or <SPAN CLASS="texttt">PATH</SPAN> returns from a system call. The
+system call number is available in the <SPAN CLASS="texttt">$syscall</SPAN> context
+variable. The return value of the system call is available in the
+<SPAN CLASS="texttt">$return</SPAN> context variable.
+
+<P>
+
+<H3><A ID="SECTION00055300000000000000"></A>
+<A ID="sec:function-statement"></A>
+<BR>
+<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">3</SPAN> Function/statement variants
+</H3>
+Constructs:
+
+<DL class="COMPACT">
+<DT>
+<DD><PRE>
+process("PATH").function("NAME")
+process("PATH").statement("*@FILE.c:123")
+process("PATH").function("*").return
+process("PATH").function("myfun").label("foo")
+</PRE>
+</DD>
+</DL>
+<P>
+Full symbolic source-level probes in userspace programs and shared
+libraries are supported. These are exactly analogous to the symbolic
+DWARF-based kernel or module probes described previously and expose
+similar contextual <SPAN CLASS="texttt">$-variables</SPAN>. See
+Section <A HREF="#dwarfprobes"><IMG ALT="[*]" SRC="crossref.png"></A> for more information
+
+<P>
+Here is an example of prototype symbolic userspace probing support:
+
+<DL class="COMPACT">
+<DT>
+<DD><PRE>
+# stap -e 'probe process("ls").function("*").call {
+ log (probefunc()." ".$$parms)
+ }' \
+ -c 'ls -l'
+</PRE>
+</DD>
+</DL>
+<P>
+To run, this script requires debugging information for the named
+program and utrace support in the kernel. If you see a "pass 4a-time"
+build failure, check that your kernel supports utrace.
+
+<P>
+
+<H3><A ID="SECTION00055400000000000000"></A>
+<A ID="sec:absolutevariant"></A>
+<BR>
+<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">4</SPAN> Absolute variant
+</H3>
+A non-symbolic probe point such as
+<SPAN CLASS="texttt">process(PID).statement(ADDRESS).absolute</SPAN> is analogous to
+<BR><SPAN CLASS="texttt">kernel.statement(ADDRESS).absolute</SPAN> in that both use
+raw, unverified virtual addresses and provide no <SPAN CLASS="texttt">$variables</SPAN>.
+The target <SPAN CLASS="texttt">PID</SPAN> parameter must identify a running process and
+<SPAN CLASS="texttt">ADDRESS</SPAN> must identify a valid instruction address. All
+threads of the listed process will be probed. This is a guru mode
+probe.
+
+<P>
+
+<H3><A ID="SECTION00055500000000000000"></A>
+<A ID="sec:paths"></A>
+<BR>
+<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">5</SPAN> Process probe paths
+</H3>
+For all process probes, <SPAN CLASS="texttt">PATH</SPAN> names refer to executables that
+are searched the same way that shells do: the explicit path specified
+if the path name begins with a slash (/) character sequence; otherwise
+<SPAN CLASS="texttt">$PATH</SPAN> is searched. For example, the following probe syntax:
+
+<DL class="COMPACT">
+<DT>
+<DD><PRE>
+probe process("ls").syscall {}
+probe process("./a.out").syscall {}
+</PRE>
+</DD>
+</DL>
+<P>
+works the same as:
+
+<DL class="COMPACT">
+<DT>
+<DD><PRE>
+probe process("/bin/ls").syscall {}
+probe process("/my/directory/a.out").syscall {}
+</PRE>
+</DD>
+</DL>
+<P>
+If a process probe is specified without a <SPAN CLASS="texttt">PID</SPAN> or
+<SPAN CLASS="texttt">PATH</SPAN> parameter, all user threads are probed. However, if
+systemtap is invoked in target process mode, process probes are
+restricted to the process hierarchy associated with the target
+process. If stap is running in <SPAN CLASS="texttt">–unprivileged</SPAN> mode, only
+processes owned by the current user are selected.
+
+<P>
+
+<H3><A ID="SECTION00055600000000000000"></A>
+<A ID="sec:targetprocessmode"></A>
+<BR>
+<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">6</SPAN> Target process mode
+</H3>
+Target process mode (invoked with <SPAN CLASS="texttt">stap -c CMD</SPAN> or <SPAN CLASS="texttt">-x
+ PID</SPAN>) implicitly restricts all <SPAN CLASS="texttt">process.*</SPAN> probes to the
+given child process. It does not affect <SPAN CLASS="texttt">kernel.*</SPAN> or other
+probe types. The <SPAN CLASS="texttt">CMD</SPAN> string is normally run directly, rather
+than from a “<SPAN CLASS="texttt">/bin/sh -c</SPAN>” sub-shell, since utrace and uprobe
+probes receive a fairly "clean" event stream. If meta-characters such
+as redirection operators are present in <SPAN CLASS="texttt">CMD</SPAN>, “<SPAN CLASS="texttt">/bin/sh
+ -c CMD</SPAN>” is still used, and utrace and uprobe probes will receive
+events from the shell. For example:
+
+<DL class="COMPACT">
+<DT>
+<DD><PRE>
+% stap -e 'probe process.syscall, process.end {
+ printf("%s %d %s\n", execname(), pid(), pp())}' \
+ -c ls
+</PRE>
+</DD>
+</DL>
+<P>
+Here is the output from this command:
+
+<DL class="COMPACT">
+<DT>
+<DD><PRE>
+ls 2323 process.syscall
+ls 2323 process.syscall
+ls 2323 process.end
+</PRE>
+</DD>
+</DL>
+<P>
+If <SPAN CLASS="texttt">PATH</SPAN> names a shared library, all processes that map that
+shared library can be probed. If dwarf debugging information is
+installed, try using a command with this syntax:
+
+<DL class="COMPACT">
+<DT>
+<DD><PRE>
+probe process("/lib64/libc-2.8.so").function("....") { ... }
+</PRE>
+</DD>
+</DL>This command probes all threads that call into that library. Typing
+“<SPAN CLASS="texttt">stap -c CMD</SPAN>” or “<SPAN CLASS="texttt">stap -x PID</SPAN>” restricts this to
+the target command and descendants only. You can use
+<SPAN CLASS="texttt">$$vars</SPAN> and others. You can provide the location of debug
+information to the stap command with the <SPAN CLASS="texttt">-d DIRECTORY</SPAN> option.
+To qualify a probe point to a location in a library required by a
+particular process try using a command with this syntax:
+
+<DL class="COMPACT">
+<DT>
+<DD><PRE>
+probe process("...").library("...").function("....") { ... }
+</PRE>
+</DD>
+</DL>The library name may use wildcards.
+
+<P>
+The first syntax in the following will probe the functions in the program
+linkage table of a particular process. The second syntax will also add the
+program linkage tables of libraries required by that process. .plt("...") can
+be specified to match particular plt entries.
+
+<DL class="COMPACT">
+<DT>
+<DD><PRE>
+probe process("...").plt { ... }
+probe process("...").plt process("...").library("...").plt { ... }
+</PRE>
+</DD>
+</DL>
+<P>
+
+<H3><A ID="SECTION00055700000000000000"></A>
+<A ID="sec:insnprobes"></A>
+<BR>
+<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">7</SPAN> Instruction probes
+</H3>
+Constructs:
+
+<DL class="COMPACT">
+<DT>
+<DD><PRE>
+process("PATH").insn
+process(PID).insn
+
+process("PATH").insn.block
+process(PID).insn.block
+</PRE>
+</DD>
+</DL>The <SPAN CLASS="texttt">process().insn</SPAN> and <SPAN CLASS="texttt">process().insn.block</SPAN> probes
+inspect the process after each instruction or block of instructions is
+executed. These probes are not implemented on all architectures. If
+they are not implemented on your system, you will receive an error
+message when the script starts.
+
+<P>
+The <SPAN CLASS="texttt">.insn</SPAN> probe is called for every single-stepped
+instruction of the process described by <SPAN CLASS="texttt">PID</SPAN> or <SPAN CLASS="texttt">PATH</SPAN>.
+
+<P>
+The <SPAN CLASS="texttt">.insn.block</SPAN> probe is called for every block-stepped
+instruction of the process described by <SPAN CLASS="texttt">PID</SPAN> or <SPAN CLASS="texttt">PATH</SPAN>.
+
+<P>
+To count the total number of instructions that a process executes,
+type a command similar to:
+
+<DL class="COMPACT">
+<DT>
+<DD><PRE>
+$ stap -e 'global steps; probe process("/bin/ls").insn {steps++}
+ probe end {printf("Total instructions: %d\n", steps);}' \
+ -c /bin/ls
+</PRE>
+</DD>
+</DL>
+<P>
+Using this feature will significantly slow process execution.
+
+<P>
+
+<H3><A ID="SECTION00055800000000000000"></A>
+<A ID="sec:staticuserspace"></A>
+<BR>
+<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">8</SPAN> Static userspace probing
+</H3>
+You can probe symbolic static instrumentation compiled into programs
+and shared libraries with the following syntax:
+
+<DL class="COMPACT">
+<DT>
+<DD><PRE>
+process("PATH").mark("LABEL")
+</PRE>
+</DD>
+</DL>
+<P>
+The <SPAN CLASS="texttt">.mark</SPAN> variant is called from a static probe defined in
+the application by
+<SPAN CLASS="texttt">STAP_PROBE1(handle,LABEL,arg1)</SPAN>. <SPAN CLASS="texttt">STAP_PROBE1</SPAN> is
+defined in the sdt.h file. The parameters are:
+
+<P>
+<TABLE class="PAD BORDER" style="">
+<TR><TD CLASS="LEFT">Parameter</TD>
+<TD CLASS="RIGHT">Definition</TD>
+<TD CLASS="CENTER"> </TD>
+</TR>
+<TR><TD CLASS="LEFT"><SPAN CLASS="texttt">handle</SPAN></TD>
+<TD CLASS="RIGHT">the application handle</TD>
+<TD CLASS="CENTER"> </TD>
+</TR>
+<TR><TD CLASS="LEFT"><SPAN CLASS="texttt">LABEL</SPAN></TD>
+<TD CLASS="RIGHT">corresponds to the <SPAN CLASS="texttt">.mark</SPAN> argument</TD>
+<TD CLASS="CENTER"> </TD>
+</TR>
+<TR><TD CLASS="LEFT"><SPAN CLASS="texttt">arg1</SPAN></TD>
+<TD CLASS="RIGHT">the argument</TD>
+<TD CLASS="CENTER"> </TD>
+</TR>
+</TABLE>
+
+<P>
+Use <SPAN CLASS="texttt">STAP_PROBE1</SPAN> for probes with one argument. Use
+<SPAN CLASS="texttt">STAP_PROBE2</SPAN> for probes with 2 arguments, and so on. The
+arguments of the probe are available in the context variables
+<SPAN CLASS="texttt">$arg1</SPAN>, <SPAN CLASS="texttt">$arg2</SPAN>, and so on.
+
+<P>
+As an alternative to the <SPAN CLASS="texttt">STAP_PROBE</SPAN> macros, you can use the
+dtrace script to create custom macros. The sdt.h file also provides
+dtrace compatible markers through <SPAN CLASS="texttt">DTRACE_PROBE</SPAN> and an
+associated python <SPAN CLASS="texttt">dtrace</SPAN> script. You can use these in builds
+based on dtrace that need dtrace -h or -G functionality.
+
+<P>
+
+<H2><A ID="SECTION00056000000000000000"></A>
+<A NAME="593"></A>
+<BR>
+<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">6</SPAN> Java probes
+</H2>
+Support for probing Java methods is available using Byteman as a
+backend. Byteman is an instrumentation tool from the JBoss project
+which systemtap can use to monitor invocations for a specific method
+or line in a Java program.
+
+<P>
+Systemtap does so by generating a Byteman script listing the probes to
+instrument and then invoking the Byteman <SPAN CLASS="texttt">bminstall</SPAN> utility. A
+custom option <SPAN CLASS="texttt">-D OPTION</SPAN> (see the Byteman documentation for
+more details) can be passed to bminstall by invoking systemtap with
+option <SPAN CLASS="texttt">-J OPTION</SPAN>. The systemtap option <SPAN CLASS="texttt">-j</SPAN> is also
+provided as a shorthand for <SPAN CLASS="texttt">-J
+ org.jboss.byteman.compile.to.bytecode</SPAN>.
+
+<P>
+This Java instrumentation support is currently a prototype feature
+with major limitations: Java probes attach only to one Java process at
+a time; other Java processes beyond the first one to be observed are
+ignored. Moreover, Java probing currently does not work across users;
+the stap script must run (with appropriate permissions) under the same
+user as the Java process being probed. (Thus a stap script under
+root currently cannot probe Java methods in a non-root-user Java process.)
+
+<P>
+There are four probe point variants supported by the translator:
+
+<DL class="COMPACT">
+<DT>
+<DD><PRE>
+java("PNAME").class("CLASSNAME").method("PATTERN")
+java("PNAME").class("CLASSNAME").method("PATTERN").return
+java(PID).class("CLASSNAME").method("PATTERN")
+java(PID).class("CLASSNAME").method("PATTERN").return
+</PRE>
+</DD>
+</DL>
+<P>
+The first two probe points refer to Java processes by the name of the
+Java process. The PATTERN parameter specifies the signature of the
+Java method to probe. The signature must consist of the exact name of
+the method, followed by a bracketed list of the types of the
+arguments, for instance <SPAN CLASS="texttt">myMethod(int,double,Foo)</SPAN>. Wildcards
+are not supported.
+
+<P>
+The probe can be set to trigger at a specific line within the method
+by appending a line number with colon, just as in other types of
+probes: <SPAN CLASS="texttt">myMethod(int,double,Foo):245</SPAN>.
+
+<P>
+The CLASSNAME parameter identifies the Java class the method belongs
+to, either with or without the package qualification. By default, the
+probe only triggers on descendants of the class that do not override
+the method definition of the original class. However, CLASSNAME can
+take an optional caret prefix, as in
+<code>class("^org.my.MyClass")</code>, which specifies that the probe
+should also trigger on all descendants of MyClass that override the
+original method. For instance, every method with signature foo(int) in
+program org.my.MyApp can be probed at once using
+
+<DL class="COMPACT">
+<DT>
+<DD><PRE>
+java("org.my.MyApp").class("^java.lang.Object").method("foo(int)")
+</PRE>
+</DD>
+</DL>
+<P>
+The last two probe points work analogously, but refer to Java
+processes by PID. (PIDs for already running processes can be obtained
+using the <SPAN CLASS="texttt">jps</SPAN> utility.)
+
+<P>
+Context variables defined within java probes include <code>$provider</code>
+(which identifies the class providing the definition of the triggered
+method) and <code>$name</code> (which gives the signature of the method).
+Arguments to the method can be accessed using context variables
+<code>$arg1$</code> through <code>$arg10</code>, for up to the first 10 arguments
+of a method.
+
+<P>
+
+<H2><A ID="SECTION00057000000000000000"></A>
+<A NAME="611"></A>
+<BR>
+<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">7</SPAN> PROCFS probes
+</H2>
+These probe points allow procfs pseudo-files in
+<SPAN CLASS="texttt">/proc/systemtap/<SPAN CLASS="textit">MODNAME</SPAN></SPAN> to be created, read and
+written. Specify the name of the systemtap module as
+<SPAN CLASS="texttt"><SPAN CLASS="textit">MODNAME</SPAN></SPAN>. There are four probe point variants
+supported by the translator:
+
+<DL class="COMPACT">
+<DT>
+<DD><PRE>
+procfs("PATH").read
+procfs("PATH").write
+procfs.read
+procfs.write
+</PRE>
+</DD>
+</DL>
+<P>
+<SPAN CLASS="texttt">PATH</SPAN> is the file name to be created, relative to
+<SPAN CLASS="texttt">/proc/systemtap/MODNAME</SPAN>. If no <SPAN CLASS="texttt">PATH</SPAN> is specified
+(as in the last two variants in the previous list), <SPAN CLASS="texttt">PATH</SPAN>
+defaults to "command".
+
+<P>
+When a user reads <SPAN CLASS="texttt">/proc/systemtap/MODNAME/PATH</SPAN>, the
+corresponding procfs read probe is triggered. Assign the string data
+to be read to a variable named <SPAN CLASS="texttt">$value</SPAN>, as follows:
+
+<DL class="COMPACT">
+<DT>
+<DD><PRE>
+procfs("PATH").read { $value = "100\n" }
+</PRE>
+</DD>
+</DL>
+<P>
+When a user writes into <SPAN CLASS="texttt">/proc/systemtap/MODNAME/PATH</SPAN>, the
+corresponding procfs write probe is triggered. The data the user
+wrote is available in the string variable named <SPAN CLASS="texttt">$value</SPAN>, as
+follows:
+
+<DL class="COMPACT">
+<DT>
+<DD><PRE>
+procfs("PATH").write { printf("User wrote: %s", $value) }
+</PRE>
+</DD>
+</DL>
+<P>
+
+<H2><A ID="SECTION00058000000000000000"></A>
+<A NAME="635"></A>
+<BR>
+<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">8</SPAN> Marker probes
+</H2>
+This family of probe points connects to static probe markers inserted
+into the kernel or a module. These markers are special macro calls in
+the kernel that make probing faster and more reliable than with
+DWARF-based probes. DWARF debugging information is not required to
+use probe markers.
+
+<P>
+Marker probe points begin with a <SPAN CLASS="texttt">kernel</SPAN> prefix which
+identifies the source of the symbol table used for finding
+markers. The suffix names the marker itself:
+<SPAN CLASS="texttt">mark.("MARK")</SPAN>. The marker name string, which can contain
+wildcard characters, is matched against the names given to the marker
+macros when the kernel or module is compiled. Optionally, you can
+specify <SPAN CLASS="texttt">format("FORMAT")</SPAN>. Specifying the marker format
+string allows differentiation between two markers with the same name
+but different marker format strings.
+
+<P>
+The handler associated with a marker probe reads any optional
+parameters specified at the macro call site named <SPAN CLASS="texttt">$arg1</SPAN>
+through <SPAN CLASS="texttt">$argNN</SPAN>, where <SPAN CLASS="texttt">NN</SPAN> is the number of
+parameters supplied by the macro. Number and string parameters are
+passed in a type-safe manner.
+
+<P>
+The marker format string associated with a marker is available in
+<SPAN CLASS="texttt">$format</SPAN>. The marker name string is available in
+<SPAN CLASS="texttt">$name</SPAN>.
+
+<P>
+Here are the marker probe constructs:
+
+<DL class="COMPACT">
+<DT>
+<DD><PRE>
+kernel.mark("MARK")
+kernel.mark("MARK").format("FORMAT")
+</PRE>
+</DD>
+</DL>
+<P>
+For more information about marker probes, see
+<kbd><A ID="tex2html4"
+ HREF="http://sourceware.org/systemtap/wiki/UsingMarkers">http://sourceware.org/systemtap/wiki/UsingMarkers</A></kbd>.
+
+<P>
+
+<H2><A ID="SECTION00059000000000000000"></A>
+<A ID="sec:tracepoints"></A><A NAME="651"></A>
+<BR>
+<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">9</SPAN> Tracepoints
+</H2>
+
+<P>
+This family of probe points hooks to static probing tracepoints
+inserted into the kernel or kernel modules. As with marker probes,
+these tracepoints are special macro calls inserted by kernel
+developers to make probing faster and more reliable than with
+DWARF-based probes. DWARF debugging information is not required to
+probe tracepoints. Tracepoints have more strongly-typed parameters
+than marker probes.
+
+<P>
+Tracepoint probes begin with <SPAN CLASS="texttt">kernel</SPAN>. The next part names the
+tracepoint itself: <SPAN CLASS="texttt">trace("name")</SPAN>. The tracepoint
+<SPAN CLASS="texttt">name</SPAN> string, which can contain wildcard characters, is
+matched against the names defined by the kernel developers in the
+tracepoint header files.
+
+<P>
+The handler associated with a tracepoint-based probe can read the
+optional parameters specified at the macro call site. These
+parameters are named according to the declaration by the tracepoint
+author. For example, the tracepoint probe
+<SPAN CLASS="texttt">kernel.trace("sched_switch")</SPAN> provides the parameters
+<SPAN CLASS="texttt">$rq</SPAN>, <SPAN CLASS="texttt">$prev</SPAN>, and <SPAN CLASS="texttt">$next</SPAN>. If the parameter
+is a complex type such as a struct pointer, then a script can access
+fields with the same syntax as DWARF <SPAN CLASS="texttt">$target</SPAN> variables.
+Tracepoint parameters cannot be modified; however, in guru mode a
+script can modify fields of parameters.
+
+<P>
+The name of the tracepoint is available in <SPAN CLASS="texttt">$$name</SPAN>, and a
+string of <SPAN CLASS="texttt">name=value</SPAN> pairs for all parameters of the
+tracepoint is available in <SPAN CLASS="texttt">$$vars</SPAN> or <SPAN CLASS="texttt">$$parms</SPAN>.
+
+<P>
+
+<H2><A ID="SECTION000510000000000000000"></A>
+<A ID="sec:syscall"></A><A NAME="666"></A>
+<BR>
+<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">10</SPAN> Syscall probes
+</H2>
+The <SPAN CLASS="texttt">syscall.*</SPAN> aliases define several hundred probes. They
+use the following syntax:
+
+<DL class="COMPACT">
+<DT>
+<DD><PRE>
+syscall.NAME
+syscall.NAME.return
+</PRE>
+</DD>
+</DL>
+<P>
+Generally, two probes are defined for each normal system call as
+listed in the syscalls(2) manual page: one for entry and one for
+return. System calls that never return do not have a
+corresponding <SPAN CLASS="texttt">.return</SPAN> probe.
+
+<P>
+Each probe alias defines a variety of variables. Look at the tapset
+source code to find the most reliable source of variable definitions.
+Generally, each variable listed in the standard manual page is
+available as a script-level variable. For example,
+<SPAN CLASS="texttt">syscall.open</SPAN> exposes file name, flags, and mode. In addition,
+a standard suite of variables is available at most aliases, as follows:
+
+<P>
+
+<UL>
+<LI><SPAN CLASS="texttt">argstr</SPAN>: A pretty-printed form of the entire argument
+ list, without parentheses.
+</LI>
+<LI><SPAN CLASS="texttt">name</SPAN>: The name of the system call.
+</LI>
+<LI><SPAN CLASS="texttt">retstr</SPAN>: For return probes, a pretty-printed form of the
+ system call result.
+</LI>
+</UL>
+
+<P>
+Not all probe aliases obey all of these general guidelines. Please
+report exceptions that you encounter as a bug.
+
+<P>
+
+<H2><A ID="SECTION000511000000000000000"></A>
+<A NAME="680"></A>
+<BR>
+<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">11</SPAN> Timer probes
+</H2>
+You can use intervals defined by the standard kernel jiffies<A NAME="681"></A>
+timer to trigger probe handlers asynchronously. A <SPAN CLASS="textit">jiffy</SPAN> is a kernel-defined
+unit of time typically between 1 and 60 msec. Two probe point variants are
+supported by the translator:
+
+<P>
+
+<DL class="COMPACT">
+<DT>
+<DD><PRE>
+timer.jiffies(N)
+timer.jiffies(N).randomize(M)
+</PRE>
+</DD>
+</DL>The probe handler runs every N jiffies. If the <SPAN CLASS="texttt">randomize</SPAN><A NAME="688"></A>
+component is given, a linearly distributed random value in the range [-M
+... +M] is added to N every time the handler executes. N is restricted
+to a reasonable range (1 to approximately 1,000,000), and M is restricted
+to be less than N. There are no target variables provided in either context.
+Probes can be run concurrently on multiple processors.
+
+<P>
+Intervals may be specified in units of time. There are two probe point variants
+similar to the jiffies timer:
+
+<P>
+
+<DL class="COMPACT">
+<DT>
+<DD><PRE>
+timer.ms(N)
+timer.ms(N).randomize(M)
+</PRE>
+</DD>
+</DL>Here, N and M are specified in milliseconds<A NAME="695"></A>, but the
+full options for units are seconds (s or sec), milliseconds (ms or msec),
+microseconds (us or usec), nanoseconds (ns or nsec), and hertz (hz). Randomization
+is not supported for hertz timers.
+
+<P>
+The resolution of the timers depends on the target kernel. For kernels prior
+to 2.6.17, timers are limited to jiffies resolution, so intervals are rounded
+up to the nearest jiffies interval. After 2.6.17, the implementation uses
+hrtimers for greater precision, though the resulting resolution will be dependent
+upon architecture. In either case, if the randomize component is given, then
+the random value will be added to the interval before any rounding occurs.
+
+<P>
+Profiling timers are available to provide probes that execute on all CPUs
+at each system tick. This probe takes no parameters, as follows.
+
+<P>
+
+<DL class="COMPACT">
+<DT>
+<DD><PRE>
+timer.profile.tick
+</PRE>
+</DD>
+</DL>Full context information of the interrupted process is available, making
+this probe suitable for implementing a time-based sampling profiler.
+
+<P>
+It is recommended to use the tapset probe <code>timer.profile</code> rather
+than <code>timer.profile.tick</code>. This probe point behaves identically
+to <code>timer.profile.tick</code> when the underlying functionality is
+available, and falls back to using <code>perf.sw.cpu_clock</code> on some
+recent kernels which lack the corresponding profile timer facility.
+
+<P>
+The following is an example of timer usage.
+
+<P>
+
+<DL class="COMPACT">
+<DT>
+<DD><PRE>
+# Refers to a periodic interrupt, every 1000 jiffies:
+timer.jiffies(1000)
+
+# Fires every 5 seconds:
+timer.sec(5)
+
+# Refers to a periodic interrupt, every 1000 +/- 200 jiffies:
+timer.jiffies(1000).randomize(200)
+</PRE>
+</DD>
+</DL>
+<P>
+
+<H2><A ID="SECTION000512000000000000000">
+<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">12</SPAN> Special probe points</A>
+</H2>
+
+<P>
+The probe points <SPAN CLASS="texttt">begin</SPAN> and <SPAN CLASS="texttt">end</SPAN> are defined by the translator
+to refer to the time of session startup and shutdown. There are no target
+variables available in either context.
+
+<P>
+
+<H3><A ID="SECTION000512100000000000000"></A>
+<A NAME="708"></A>
+<BR>
+<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">12</SPAN>.<SPAN CLASS="arabic">1</SPAN> begin
+</H3>
+The <SPAN CLASS="texttt">begin</SPAN> probe is the start of the SystemTap session.
+All <SPAN CLASS="texttt">begin</SPAN>
+probe handlers are run during the startup of the session.
+
+<P>
+
+<H3><A ID="SECTION000512200000000000000"></A>
+<A NAME="712"></A>
+<BR>
+<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">12</SPAN>.<SPAN CLASS="arabic">2</SPAN> end
+</H3>
+The <SPAN CLASS="texttt">end</SPAN> probe is the end of the SystemTap session. All <SPAN CLASS="texttt">end</SPAN>
+probes are run during the normal shutdown of a session, such as in the aftermath
+of a SystemTap <SPAN CLASS="texttt">exit</SPAN> function call, or an interruption from the user.
+In the case of an shutdown triggered by error, <SPAN CLASS="texttt">end</SPAN> probes are not run.
+
+<P>
+
+<H3><A ID="SECTION000512300000000000000"></A>
+<A NAME="718"></A>
+<BR>
+<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">12</SPAN>.<SPAN CLASS="arabic">3</SPAN> error
+</H3>
+The <SPAN CLASS="textit">error</SPAN> probe point is similar to the end
+probe, except the probe handler runs when the session ends if an error
+occurred. In this case, an <SPAN CLASS="texttt">end</SPAN> probe is skipped, but each
+<SPAN CLASS="texttt">error</SPAN> probe is still attempted. You can use an
+<SPAN CLASS="texttt">error</SPAN> probe to clean up or perform a final action on script
+termination.
+
+<P>
+Here is a simple example:
+
+<DL class="COMPACT">
+<DT>
+<DD><PRE>
+probe error { println ("Oops, errors occurred. Here's a report anyway.")
+ foreach (coin in mint) { println (coin) } }
+</PRE>
+</DD>
+</DL>
+<P>
+
+<H3><A ID="SECTION000512400000000000000"></A>
+<A NAME="728"></A>
+<BR>
+<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">12</SPAN>.<SPAN CLASS="arabic">4</SPAN> begin, end, and error probe sequence
+</H3>
+<SPAN CLASS="texttt">begin</SPAN>, <SPAN CLASS="texttt">end</SPAN>, and <SPAN CLASS="texttt">error</SPAN> probes can be
+specified with an optional sequence number that controls the order in
+which they are run. If no sequence number is provided, the sequence
+number defaults to zero and probes are run in the order that they
+occur in the script file. Sequence numbers may be either positive or
+negative, and are especially useful for tapset writers who want to do
+initialization in a <SPAN CLASS="texttt">begin</SPAN> probe. The following are examples.
+
+<P>
+
+<DL class="COMPACT">
+<DT>
+<DD><PRE>
+# In a tapset file:
+probe begin(-1000) { ... }
+
+# In a user script:
+probe begin { ... }
+</PRE>
+</DD>
+</DL>The user script <SPAN CLASS="texttt">begin</SPAN> probe defaults to sequence number zero, so
+the tapset <SPAN CLASS="texttt">begin</SPAN> probe will run first.
+
+<P>
+
+<H3><A ID="SECTION000512500000000000000"></A>
+<A NAME="740"></A>
+<BR>
+<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">12</SPAN>.<SPAN CLASS="arabic">5</SPAN> never
+</H3>
+The <SPAN CLASS="texttt">never</SPAN> probe point is defined by the translator to mean <SPAN CLASS="textit">never</SPAN>.
+Its statements are analyzed for symbol and type correctness, but its probe
+handler is never run. This probe point may be useful in conjunction with
+optional probes. See Section <A HREF="#sub:Optional-probe-points"><IMG ALT="[*]" SRC="crossref.png"></A>.
+
+<P>
+
+<DIV CLASS="navigation"><HR>
+<!--Navigation Panel-->
+<A
+ HREF="5_Language_elements.html">
+<IMG WIDTH="37" HEIGHT="24" ALT="next" SRC="next.png"></A>
+<A
+ HREF="langref.html">
+<IMG WIDTH="26" HEIGHT="24" ALT="up" SRC="up.png"></A>
+<A
+ HREF="3_Components_SystemTap_scri.html">
+<IMG WIDTH="63" HEIGHT="24" ALT="previous" SRC="prev.png"></A>
+<A ID="tex2html280"
+ HREF="Contents.html">
+<IMG WIDTH="65" HEIGHT="24" ALT="contents" SRC="contents.png"></A>
+<A ID="tex2html282"
+ HREF="Index.html">
+<IMG WIDTH="43" HEIGHT="24" ALT="index" SRC="index.png"></A>
+<BR>
+<B> Next:</B> <A
+ HREF="5_Language_elements.html">5 Language elements</A>
+<B> Up:</B> <A
+ HREF="langref.html">SystemTap Language Reference</A>
+<B> Previous:</B> <A
+ HREF="3_Components_SystemTap_scri.html">3 Components of a</A>
+ <B> <A ID="tex2html281"
+ HREF="Contents.html">Contents</A></B>
+ <B> <A ID="tex2html283"
+ HREF="Index.html">Index</A></B> </DIV>
+<!--End of Navigation Panel-->
+
+</BODY>
+</HTML>
--- /dev/null
+<!DOCTYPE HTML>
+
+<!--Converted with LaTeX2HTML 2020.2 (Released July 1, 2020) -->
+<HTML lang="en">
+<HEAD>
+<TITLE>5 Language elements</TITLE>
+<META NAME="description" CONTENT="5 Language elements">
+<META NAME="keywords" CONTENT="langref">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+
+<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=utf-8">
+<META NAME="viewport" CONTENT="width=device-width, initial-scale=1.0">
+<META NAME="Generator" CONTENT="LaTeX2HTML v2020.2">
+
+<LINK REL="STYLESHEET" HREF="langref.css">
+
+<LINK REL="next" HREF="6_Statement_types.html">
+<LINK REL="previous" HREF="4_Probe_points.html">
+<LINK REL="next" HREF="6_Statement_types.html">
+</HEAD>
+
+<BODY >
+
+<DIV CLASS="navigation"><!--Navigation Panel-->
+<A
+ HREF="6_Statement_types.html">
+<IMG WIDTH="37" HEIGHT="24" ALT="next" SRC="next.png"></A>
+<A
+ HREF="langref.html">
+<IMG WIDTH="26" HEIGHT="24" ALT="up" SRC="up.png"></A>
+<A
+ HREF="4_Probe_points.html">
+<IMG WIDTH="63" HEIGHT="24" ALT="previous" SRC="prev.png"></A>
+<A ID="tex2html316"
+ HREF="Contents.html">
+<IMG WIDTH="65" HEIGHT="24" ALT="contents" SRC="contents.png"></A>
+<A ID="tex2html318"
+ HREF="Index.html">
+<IMG WIDTH="43" HEIGHT="24" ALT="index" SRC="index.png"></A>
+<BR>
+<B> Next:</B> <A
+ HREF="6_Statement_types.html">6 Statement types</A>
+<B> Up:</B> <A
+ HREF="langref.html">SystemTap Language Reference</A>
+<B> Previous:</B> <A
+ HREF="4_Probe_points.html">4 Probe points</A>
+ <B> <A ID="tex2html317"
+ HREF="Contents.html">Contents</A></B>
+ <B> <A ID="tex2html319"
+ HREF="Index.html">Index</A></B>
+<BR>
+<BR></DIV>
+<!--End of Navigation Panel-->
+<!--Table of Child-Links-->
+<A ID="CHILD_LINKS"><STRONG>Subsections</STRONG></A>
+
+<UL CLASS="ChildLinks">
+<LI><A ID="tex2html320"
+ HREF="5_Language_elements.html#SECTION00061000000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">1</SPAN> Identifiers</A>
+<LI><A ID="tex2html321"
+ HREF="5_Language_elements.html#SECTION00062000000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">2</SPAN> Data types</A>
+<UL>
+<LI><A ID="tex2html322"
+ HREF="5_Language_elements.html#SECTION00062100000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN> Literals</A>
+<LI><A ID="tex2html323"
+ HREF="5_Language_elements.html#SECTION00062200000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN> Integers</A>
+<LI><A ID="tex2html324"
+ HREF="5_Language_elements.html#SECTION00062300000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">3</SPAN> Strings</A>
+<LI><A ID="tex2html325"
+ HREF="5_Language_elements.html#SECTION00062400000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">4</SPAN> Associative arrays</A>
+<LI><A ID="tex2html326"
+ HREF="5_Language_elements.html#SECTION00062500000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">5</SPAN> Statistics</A>
+</UL>
+<BR>
+<LI><A ID="tex2html327"
+ HREF="5_Language_elements.html#SECTION00063000000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">3</SPAN> Semicolons</A>
+<LI><A ID="tex2html328"
+ HREF="5_Language_elements.html#SECTION00064000000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">4</SPAN> Comments</A>
+<LI><A ID="tex2html329"
+ HREF="5_Language_elements.html#SECTION00065000000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">5</SPAN> Whitespace</A>
+<LI><A ID="tex2html330"
+ HREF="5_Language_elements.html#SECTION00066000000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">6</SPAN> Expressions</A>
+<UL>
+<LI><A ID="tex2html331"
+ HREF="5_Language_elements.html#SECTION00066100000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN> Binary numeric operators</A>
+<LI><A ID="tex2html332"
+ HREF="5_Language_elements.html#SECTION00066200000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN> Binary string operators</A>
+<LI><A ID="tex2html333"
+ HREF="5_Language_elements.html#SECTION00066300000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN> Numeric assignment operators</A>
+<LI><A ID="tex2html334"
+ HREF="5_Language_elements.html#SECTION00066400000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">4</SPAN> String assignment operators</A>
+<LI><A ID="tex2html335"
+ HREF="5_Language_elements.html#SECTION00066500000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">5</SPAN> Unary numeric operators</A>
+<LI><A ID="tex2html336"
+ HREF="5_Language_elements.html#SECTION00066600000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">6</SPAN> Numeric & string comparison, regular expression matching operators</A>
+<LI><A ID="tex2html337"
+ HREF="5_Language_elements.html#SECTION00066700000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">7</SPAN> Ternary operator</A>
+<LI><A ID="tex2html338"
+ HREF="5_Language_elements.html#SECTION00066800000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">8</SPAN> Grouping operator</A>
+<LI><A ID="tex2html339"
+ HREF="5_Language_elements.html#SECTION00066900000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">9</SPAN> Function call</A>
+<LI><A ID="tex2html340"
+ HREF="5_Language_elements.html#SECTION000661000000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">10</SPAN> $ptr->member</A>
+<LI><A ID="tex2html341"
+ HREF="5_Language_elements.html#SECTION000661100000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">11</SPAN> Pointer typecasting</A>
+<LI><A ID="tex2html342"
+ HREF="5_Language_elements.html#SECTION000661200000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">12</SPAN> <value> in <array_name></A>
+<LI><A ID="tex2html343"
+ HREF="5_Language_elements.html#SECTION000661300000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">13</SPAN> [ <value>, ... ] in <array_name></A>
+</UL>
+<BR>
+<LI><A ID="tex2html344"
+ HREF="5_Language_elements.html#SECTION00067000000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">7</SPAN> Literals passed in from the stap command line</A>
+<UL>
+<LI><A ID="tex2html345"
+ HREF="5_Language_elements.html#SECTION00067100000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">7</SPAN>.<SPAN CLASS="arabic">1</SPAN> $1 ... $<NN> for literal pasting</A>
+<LI><A ID="tex2html346"
+ HREF="5_Language_elements.html#SECTION00067200000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">7</SPAN>.<SPAN CLASS="arabic">2</SPAN> @1 ... @<NN> for strings</A>
+<LI><A ID="tex2html347"
+ HREF="5_Language_elements.html#SECTION00067300000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">7</SPAN>.<SPAN CLASS="arabic">3</SPAN> Examples</A>
+</UL>
+<BR>
+<LI><A ID="tex2html348"
+ HREF="5_Language_elements.html#SECTION00068000000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">8</SPAN> Conditional compilation</A>
+<UL>
+<LI><A ID="tex2html349"
+ HREF="5_Language_elements.html#SECTION00068100000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">8</SPAN>.<SPAN CLASS="arabic">1</SPAN> Conditions</A>
+<LI><A ID="tex2html350"
+ HREF="5_Language_elements.html#SECTION00068200000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">8</SPAN>.<SPAN CLASS="arabic">2</SPAN> Conditions based on available target variables</A>
+<LI><A ID="tex2html351"
+ HREF="5_Language_elements.html#SECTION00068300000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">8</SPAN>.<SPAN CLASS="arabic">3</SPAN> Conditions based on kernel version: kernel_v, kernel_vr</A>
+<LI><A ID="tex2html352"
+ HREF="5_Language_elements.html#SECTION00068400000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">8</SPAN>.<SPAN CLASS="arabic">4</SPAN> Conditions based on architecture: arch</A>
+<LI><A ID="tex2html353"
+ HREF="5_Language_elements.html#SECTION00068500000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">8</SPAN>.<SPAN CLASS="arabic">5</SPAN> Conditions based on privilege level: systemtap_privilege</A>
+<LI><A ID="tex2html354"
+ HREF="5_Language_elements.html#SECTION00068600000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">8</SPAN>.<SPAN CLASS="arabic">6</SPAN> True and False Tokens</A>
+</UL>
+<BR>
+<LI><A ID="tex2html355"
+ HREF="5_Language_elements.html#SECTION00069000000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">9</SPAN> Preprocessor macros</A>
+<UL>
+<LI><A ID="tex2html356"
+ HREF="5_Language_elements.html#SECTION00069100000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">9</SPAN>.<SPAN CLASS="arabic">1</SPAN> Local macros</A>
+<LI><A ID="tex2html357"
+ HREF="5_Language_elements.html#SECTION00069200000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">9</SPAN>.<SPAN CLASS="arabic">2</SPAN> Library macros</A>
+</UL></UL>
+<!--End of Table of Child-Links-->
+<HR>
+
+<H1><A ID="SECTION00060000000000000000"></A><A ID="sec:Language-Elements"></A>
+<BR>
+<SPAN CLASS="arabic">5</SPAN> Language elements
+</H1>
+
+<H2><A ID="SECTION00061000000000000000"></A>
+<A NAME="746"></A>
+<BR>
+<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">1</SPAN> Identifiers
+</H2>
+<SPAN CLASS="textit">Identifiers</SPAN> are used to name variables and functions. They are an
+alphanumeric sequence that may include the underscore (_) and dollar sign
+($) characters. They have the same syntax as C identifiers, except that
+the dollar sign is also a legal character. Identifiers that begin with a
+dollar sign are interpreted as references to variables in the target software,
+rather than to SystemTap script variables. Identifiers may not start with
+a plain digit.
+
+<P>
+
+<H2><A ID="SECTION00062000000000000000"></A><A ID="sub:Data-types"></A>
+<A NAME="749"></A>
+<BR>
+<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">2</SPAN> Data types
+</H2>
+The SystemTap language includes a small number of data types, but no type
+declarations. A variable's type is inferred<A NAME="750"></A> from its use.
+To support this inference, the translator enforces consistent typing of function
+arguments and return values, array indices and values. There are no implicit
+type conversions between strings and numbers. Inconsistent type-related use
+of an identifier signals an error.
+
+<P>
+
+<H3><A ID="SECTION00062100000000000000"></A>
+<A NAME="752"></A>
+<BR>
+<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN> Literals
+</H3>
+Literals are either strings or integers.
+Literal integers can be expressed as decimal,
+octal, or hexadecimal, using C notation. Type suffixes (e.g., <SPAN CLASS="textit">L</SPAN> or
+<SPAN CLASS="textit">U</SPAN>) are not used.
+
+<P>
+
+<H3><A ID="SECTION00062200000000000000"></A><A ID="sub:Integers"></A>
+<A NAME="756"></A> <A NAME="757"></A>
+<BR>
+<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN> Integers
+</H3>
+Integers are decimal, hexadecimal, or octal, and use the same notation as
+in C. Integers are 64-bit signed quantities, although the parser also accepts
+(and wraps around) values above positive <SPAN CLASS="MATH"><IMG STYLE="height: 1.96ex; vertical-align: -0.12ex; " SRC="img1.png"
+ ALT="$2^{63}$"></SPAN> but below <SPAN CLASS="MATH"><IMG STYLE="height: 1.96ex; vertical-align: -0.12ex; " SRC="img2.png"
+ ALT="$2^{64}$"></SPAN>.
+
+<P>
+
+<H3><A ID="SECTION00062300000000000000"></A><A ID="sub:Strings"></A>
+<A NAME="761"></A>
+<BR>
+<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">3</SPAN> Strings
+</H3>
+
+<P>
+Strings are enclosed in quotation marks (“string”), and pass
+through standard C escape codes with backslashes. A string literal may
+be split into several pieces, which are glued together, as follows.
+
+<P>
+
+<DL class="COMPACT">
+<DT>
+<DD><PRE>
+str1 = "foo" "bar"
+ /* --> becomes "foobar" */
+
+str2 = "a good way to do a multi-line\n"
+ "string literal"
+ /* --> becomes "a good way to do a multi-line\nstring literal" */
+
+str3 = "also a good way to " @1 " splice command line args"
+ /* --> becomes "also a good way to foo splice command line args",
+ assuming @1 is given as foo on the command line */
+</PRE>
+</DD>
+</DL>
+<P>
+Observe that script arguments can also be glued into a string literal.
+
+<P>
+Strings are limited in length to MAXSTRINGLEN. For more information
+about this and other limits, see Section <A HREF="1_SystemTap_overview.html#sub:SystemTap-safety"><IMG ALT="[*]" SRC="crossref.png"></A>.
+
+<P>
+
+<H3><A ID="SECTION00062400000000000000">
+<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">4</SPAN> Associative arrays</A>
+</H3>
+
+<P>
+See Section <A HREF="7_Associative_arrays.html#sec:Associative-Arrays"><IMG ALT="[*]" SRC="crossref.png"></A>
+
+<P>
+
+<H3><A ID="SECTION00062500000000000000">
+<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">5</SPAN> Statistics</A>
+</H3>
+
+<P>
+See Section <A HREF="8_Statistics_aggregates.html#sec:Statistics"><IMG ALT="[*]" SRC="crossref.png"></A>
+
+<P>
+
+<H2><A ID="SECTION00063000000000000000"></A>
+<A NAME="773"></A>
+<BR>
+<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">3</SPAN> Semicolons
+</H2>
+The semicolon is the null statement, or do nothing statement. It is optional,
+and useful as a separator between statements to improve detection of syntax
+errors and to reduce ambiguities in grammar.
+
+<P>
+
+<H2><A ID="SECTION00064000000000000000"></A>
+<A NAME="775"></A>
+<BR>
+<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">4</SPAN> Comments
+</H2>
+Three forms of comments are supported, as follows.
+
+<P>
+
+<DL class="COMPACT">
+<DT>
+<DD><PRE>
+# ... shell style, to the end of line
+// ... C++ style, to the end of line
+/* ... C style ... */
+</PRE>
+</DD>
+</DL>
+<P>
+
+<H2><A ID="SECTION00065000000000000000"></A>
+<A NAME="781"></A>
+<BR>
+<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">5</SPAN> Whitespace
+</H2>
+As in C, spaces, tabs, returns, newlines, and comments are treated as whitespace.
+Whitespace is ignored by the parser.
+
+<P>
+
+<H2><A ID="SECTION00066000000000000000"></A>
+<A NAME="783"></A>
+<BR>
+<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">6</SPAN> Expressions
+</H2>
+SystemTap supports a number of operators that use the same general syntax,
+semantics, and precedence as in C and awk. Arithmetic is performed per C
+rules for signed integers. If the parser detects division by zero or an overflow,
+it generates an error. The following subsections list these operators.
+
+<P>
+
+<H3><A ID="SECTION00066100000000000000"></A>
+<A NAME="785"></A>
+<BR>
+<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN> Binary numeric operators
+</H3>
+<SPAN CLASS="texttt">* / % + - > > > > > < < & ^
+| && ||</SPAN>
+
+<P>
+
+<H3><A ID="SECTION00066200000000000000"></A>
+<A NAME="793"></A>
+<BR>
+<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN> Binary string operators
+</H3>
+<SPAN CLASS="texttt"><SPAN CLASS="textbf">.</SPAN></SPAN> (string concatenation)
+
+<P>
+
+<H3><A ID="SECTION00066300000000000000"></A>
+<A NAME="796"></A>
+<BR>
+<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN> Numeric assignment operators
+</H3>
+<SPAN CLASS="texttt">= *= /= %= += -= > >= < <=
+&= ^= |=</SPAN>
+
+<P>
+
+<H3><A ID="SECTION00066400000000000000">
+<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">4</SPAN> String assignment operators</A>
+</H3>
+
+<P>
+<SPAN CLASS="texttt">= .=</SPAN>
+
+<P>
+
+<H3><A ID="SECTION00066500000000000000"></A>
+<A NAME="804"></A>
+<BR>
+<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">5</SPAN> Unary numeric operators
+</H3>
+<SPAN CLASS="texttt">+ - ! ~ ++ --</SPAN>
+
+<P>
+
+<H3><A ID="SECTION00066600000000000000"></A>
+<A NAME="808"></A>
+<BR>
+<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">6</SPAN> Numeric & string comparison, regular expression matching operators
+</H3>
+<SPAN CLASS="texttt">< > <= >= == !=</SPAN> <code>=~</code> <code>!~</code>
+
+<P>
+The <code>=~</code> and <code>!~</code> operators perform regular expression
+matching. The second operand must be a string literal
+containing a syntactically valid regular expression. The <code>=~</code> operator returns <SPAN style="font-family:monospace">1</SPAN> on a successful match and <SPAN CLASS="texttt">0</SPAN> on a failed match.
+The <code>!~</code> operator returns <SPAN style="font-family:monospace">1</SPAN> on a failed match.
+The regular expression syntax supports most of the features of POSIX Extended
+Regular Expressions, except for subexpression reuse (<code>\1</code>)
+functionality. After a successful match, the matched substring and subexpressions can be extracted using the <SPAN CLASS="texttt">matched</SPAN> tapset
+function. The <SPAN CLASS="texttt">ngroups</SPAN> tapset function returns the number of
+subexpressions in the last successfully matched regular expression.
+
+<P>
+
+<H3><A ID="SECTION00066700000000000000"></A><A ID="sub:Ternary-operator"></A>
+<A NAME="816"></A>
+<BR>
+<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">7</SPAN> Ternary operator
+</H3>
+<SPAN CLASS="texttt">cond ? exp1 : exp2</SPAN>
+
+<P>
+
+<H3><A ID="SECTION00066800000000000000"></A>
+<A NAME="819"></A>
+<BR>
+<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">8</SPAN> Grouping operator
+</H3>
+<SPAN CLASS="texttt">( exp )</SPAN>
+
+<P>
+
+<H3><A ID="SECTION00066900000000000000"></A>
+<A NAME="822"></A>
+<BR>
+<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">9</SPAN> Function call
+</H3>
+General syntax:
+
+<P>
+<SPAN CLASS="texttt">fn ([ arg1, arg2, ... ])</SPAN>
+
+<P>
+
+<H3><A ID="SECTION000661000000000000000"></A>
+<A NAME="825"></A>
+<BR>
+<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">10</SPAN> $ptr->member
+</H3>
+<SPAN CLASS="texttt">ptr</SPAN> is a kernel pointer available in a probed context.
+
+<P>
+
+<H3><A ID="SECTION000661100000000000000"></A>
+<A NAME="828"></A>
+<BR>
+<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">11</SPAN> Pointer typecasting
+</H3>
+
+<P>
+<SPAN CLASS="textit">Typecasting</SPAN> is supported using the <SPAN CLASS="texttt">@cast()</SPAN> operator. A
+script can define a pointer type for a <SPAN CLASS="textit">long</SPAN> value, then access
+type members using the same syntax as with <SPAN CLASS="texttt">$target</SPAN>
+variables. After a pointer is saved into a script integer variable,
+the translator loses the necessary type information to access members
+from that pointer. The <SPAN CLASS="texttt">@cast()</SPAN> operator tells the translator
+how to read a pointer.
+
+<P>
+The following statement interprets <SPAN CLASS="texttt">p</SPAN> as a pointer to a struct
+or union named <SPAN CLASS="texttt">type_name</SPAN> and dereferences the
+<SPAN CLASS="texttt">member</SPAN> value:
+
+<DL class="COMPACT">
+<DT>
+<DD><PRE>
+@cast(p, "type_name"[, "module"])->member
+</PRE>
+</DD>
+</DL>
+<P>
+The optional <SPAN CLASS="texttt">module</SPAN> parameter tells the translator where to
+look for information about that type. You can specify multiple modules
+as a list with colon (<SPAN CLASS="texttt">:</SPAN>) separators. If you do not specify
+the module parameter, the translator defaults to either the probe
+module for dwarf probes or to <SPAN CLASS="textit">kernel</SPAN> for functions and all
+other probe types.
+
+<P>
+The following statement retrieves the parent PID from a kernel
+task_struct:
+
+<DL class="COMPACT">
+<DT>
+<DD><PRE>
+@cast(pointer, "task_struct", "kernel")->parent->tgid
+</PRE>
+</DD>
+</DL>
+<P>
+The translator can create its own module with type information from a
+header surrounded by angle brackets (<SPAN CLASS="texttt">< ></SPAN>) if normal debugging
+information is not available. For kernel headers, prefix it with
+<SPAN CLASS="texttt">kernel</SPAN> to use the appropriate build system. All other
+headers are built with default GCC parameters into a user module. The
+following statements are examples.
+
+<DL class="COMPACT">
+<DT>
+<DD><PRE>
+@cast(tv, "timeval", "<sys/time.h>")->tv_sec
+@cast(task, "task_struct", "kernel<linux/sched.h>")->tgid
+</PRE>
+</DD>
+</DL>
+<P>
+In guru mode, the translator allows scripts to assign new values to
+members of typecasted pointers.
+
+<P>
+Typecasting is also useful in the case of <SPAN CLASS="texttt">void*</SPAN> members whose
+type might be determinable at run time.
+
+<DL class="COMPACT">
+<DT>
+<DD><PRE>
+probe foo {
+ if ($var->type == 1) {
+ value = @cast($var->data, "type1")->bar
+ } else {
+ value = @cast($var->data, "type2")->baz
+ }
+ print(value)
+}
+</PRE>
+</DD>
+</DL>
+<P>
+
+<H3><A ID="SECTION000661200000000000000"></A>
+<A NAME="860"></A>
+<BR>
+<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">12</SPAN> <value> in <array_name>
+</H3>
+This expression evaluates to true if the array contains an element with the
+specified index.
+
+<P>
+
+<H3><A ID="SECTION000661300000000000000">
+<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">13</SPAN> [ <value>, ... ] in <array_name></A>
+</H3>
+
+<P>
+The number of index values must match the number of indexes previously specified.
+
+<P>
+
+<H2><A ID="SECTION00067000000000000000"></A><A ID="sub:Literals-passed-in"></A>
+<A NAME="863"></A>
+<BR>
+<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">7</SPAN> Literals passed in from the stap command line
+</H2>
+<SPAN CLASS="textit">Literals</SPAN> are either strings enclosed in double quotes (” ”) or
+integers. For information about integers, see Section <A HREF="#sub:Integers"><IMG ALT="[*]" SRC="crossref.png"></A>.
+For information about strings, see Section <A HREF="#sub:Strings"><IMG ALT="[*]" SRC="crossref.png"></A>.
+
+<P>
+Script arguments at the end of a command line are expanded as literals. You
+can use these in all contexts where literals are accepted. A reference to
+a nonexistent argument number is an error.
+
+<P>
+
+<H3><A ID="SECTION00067100000000000000"></A>
+<A NAME="868"></A>
+<BR>
+<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">7</SPAN>.<SPAN CLASS="arabic">1</SPAN> $1 ... $<NN> for literal pasting
+</H3>
+Use <SPAN CLASS="texttt">$1 ... $<NN></SPAN> for pasting the entire argument string
+into the input stream, which will be further lexically tokenized.
+
+<P>
+
+<H3><A ID="SECTION00067200000000000000">
+<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">7</SPAN>.<SPAN CLASS="arabic">2</SPAN> @1 ... @<NN> for strings</A>
+</H3>
+
+<P>
+Use <SPAN CLASS="texttt">@1 ... @<NN></SPAN> for casting an entire argument
+as a string literal.
+
+<P>
+
+<H3><A ID="SECTION00067300000000000000">
+<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">7</SPAN>.<SPAN CLASS="arabic">3</SPAN> Examples</A>
+</H3>
+
+<P>
+For example, if the following script named example.stp
+
+<P>
+
+<DL class="COMPACT">
+<DT>
+<DD><PRE>
+probe begin { printf("%d, %s\n", $1, @2) }
+</PRE>
+</DD>
+</DL>is invoked as follows
+
+<P>
+
+<DL class="COMPACT">
+<DT>
+<DD><PRE>
+# stap example.stp '5+5' mystring
+</PRE>
+</DD>
+</DL>then 5+5 is substituted for $1 and "mystring" for @2. The
+output will be
+
+<P>
+
+<DL class="COMPACT">
+<DT>
+<DD><PRE>
+10, mystring
+</PRE>
+</DD>
+</DL>
+<P>
+
+<H2><A ID="SECTION00068000000000000000">
+<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">8</SPAN> Conditional compilation</A>
+</H2>
+
+<P>
+
+<H3><A ID="SECTION00068100000000000000"></A>
+<A NAME="889"></A>
+<BR>
+<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">8</SPAN>.<SPAN CLASS="arabic">1</SPAN> Conditions
+</H3>
+One of the steps of parsing is a simple preprocessing stage. The
+preprocessor supports conditionals with a general form similar to the
+ternary operator (Section <A HREF="#sub:Ternary-operator"><IMG ALT="[*]" SRC="crossref.png"></A>).
+
+<P>
+
+<DL class="COMPACT">
+<DT>
+<DD><PRE>
+%( CONDITION %? TRUE-TOKENS %)
+%( CONDITION %? TRUE-TOKENS %: FALSE-TOKENS %)
+</PRE>
+</DD>
+</DL>The CONDITION is a limited expression whose format is determined by its first
+keyword. The following is the general syntax.
+
+<P>
+
+<DL class="COMPACT">
+<DT>
+<DD><PRE>
+%( <condition> %? <code> [ %: <code> ] %)
+</PRE>
+</DD>
+</DL>
+<P>
+
+<H3><A ID="SECTION00068200000000000000"></A>
+<A NAME="900"></A>
+<BR>
+<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">8</SPAN>.<SPAN CLASS="arabic">2</SPAN> Conditions based on available target variables
+</H3>
+The predicate @defined() is available for testing whether a
+particular $variable/expression is resolvable at translation time. The
+following is an example of its use:
+
+<P>
+
+<DL class="COMPACT">
+<DT>
+<DD><PRE>
+ probe foo { if (@defined($bar)) log ("$bar is available here") }
+</PRE>
+</DD>
+</DL>
+<P>
+
+<H3><A ID="SECTION00068300000000000000"></A>
+<A NAME="906"></A>
+<A NAME="907"></A>
+<A NAME="908"></A>
+<BR>
+<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">8</SPAN>.<SPAN CLASS="arabic">3</SPAN> Conditions based on kernel version: kernel_v, kernel_vr
+</H3>
+If the first part of a conditional expression is the identifier <SPAN CLASS="texttt">kernel_v</SPAN>
+or <SPAN CLASS="texttt">kernel_vr</SPAN>, the second part must be one of six standard numeric
+comparison operators “<”, “<=”, “==”, “!=”, “>”,
+or “>=”,
+and the third part must be a string literal that contains an RPM-style version-release
+value. The condition returns true if the version of the target kernel (as
+optionally overridden by the <SPAN CLASS="textbf">-r</SPAN> option) matches the given version
+string. The comparison is performed by the glibc function strverscmp.
+
+<P>
+<SPAN CLASS="texttt">kernel_v</SPAN> refers to the kernel version number only, such as “2.6.13".
+
+<P>
+<SPAN CLASS="texttt">kernel_vr</SPAN> refers to the kernel version number including the release
+code suffix, such as “2.6.13-1.322FC3smp”.
+
+<P>
+
+<H3><A ID="SECTION00068400000000000000"></A>
+<A NAME="924"></A>
+<BR>
+<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">8</SPAN>.<SPAN CLASS="arabic">4</SPAN> Conditions based on architecture: arch
+</H3>
+If the first part of the conditional expression is the identifier <SPAN CLASS="texttt">arch</SPAN>
+which refers to the processor architecture, then the second part is a string
+comparison operator ”==” or ”!=”, and the third part is a string
+literal for matching it. This comparison is a simple string equality or inequality.
+The currently supported architecture strings are i386, i686, x86_64, ia64,
+s390, and powerpc.
+
+<P>
+
+<H3><A ID="SECTION00068500000000000000"></A>
+<A NAME="927"></A>
+<BR>
+<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">8</SPAN>.<SPAN CLASS="arabic">5</SPAN> Conditions based on privilege level: systemtap_privilege
+</H3>
+
+<P>
+If the first part of the conditional expression is the identifier
+<SPAN CLASS="texttt">systemtap_privilege</SPAN> which refers to the privilege level the
+systemtap script is being compiled with, then the second part is a
+string comparison operator ”==” or ”!=”, and the third part is a
+string literal for matching it. This comparison is a simple string
+equality or inequality. The possible privilege strings to consider
+are <code>"stapusr"</code> for unprivileged scripts, and <code>"stapsys"</code> or
+<code>"stapdev"</code> for privileged scripts. (In general, to test for a
+privileged script it is best to use <code>!= "stapusr"</code>.)
+
+<P>
+This condition can be used to write scripts that can be run in both
+privileged and unprivileged modes, with additional functionality made
+available in the privileged case.
+
+<P>
+
+<H3><A ID="SECTION00068600000000000000"></A>
+<A NAME="930"></A>
+<BR>
+<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">8</SPAN>.<SPAN CLASS="arabic">6</SPAN> True and False Tokens
+</H3>
+TRUE-TOKENS and FALSE-TOKENS are zero or more general parser tokens, possibly
+including nested preprocessor conditionals, that are pasted into the input
+stream if the condition is true or false. For example, the following code
+induces a parse error unless the target kernel version is newer than 2.6.5.
+
+<P>
+
+<DL class="COMPACT">
+<DT>
+<DD><PRE>
+%( kernel_v <= "2.6.5" %? **ERROR** %) # invalid token sequence
+</PRE>
+</DD>
+</DL>The following code adapts to hypothetical kernel version drift.
+
+<P>
+
+<DL class="COMPACT">
+<DT>
+<DD><PRE>
+probe kernel.function (
+ %( kernel_v <= "2.6.12" %? "__mm_do_fault" %:
+ %( kernel_vr == "2.6.13-1.8273FC3smp" %? "do_page_fault" %: UNSUPPORTED %)
+ %)) { /* ... */ }
+
+%( arch == "ia64" %?
+ probe syscall.vliw = kernel.function("vliw_widget") {}
+%)
+</PRE>
+</DD>
+</DL>
+<P>
+The following code adapts to the presence of a kernel CONFIG option.
+
+<P>
+
+<DL class="COMPACT">
+<DT>
+<DD><PRE>
+%( CONFIG_UTRACE == "y" %?
+ probe process.syscall {}
+%)
+</PRE>
+</DD>
+</DL>
+<P>
+
+<H2><A ID="SECTION00069000000000000000">
+<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">9</SPAN> Preprocessor macros</A>
+</H2>
+
+<P>
+This feature lets scripts eliminate some types of repetition.
+
+<P>
+
+<H3><A ID="SECTION00069100000000000000">
+<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">9</SPAN>.<SPAN CLASS="arabic">1</SPAN> Local macros</A>
+</H3>
+
+<P>
+The preprocessor also supports a simple macro facility.
+
+<P>
+Macros taking zero or more arguments are defined using the following
+construct:
+
+<P>
+
+<DL class="COMPACT">
+<DT>
+<DD><PRE>
+@define NAME %( BODY %)
+@define NAME(PARAM_1, PARAM_2, ...) %( BODY %)
+</PRE>
+</DD>
+</DL>
+<P>
+Macro arguments are referred to in the body by prefixing the argument
+name with an <SPAN CLASS="texttt">@</SPAN> symbol. Likewise, once defined, macros are
+invoked by prefixing the macro name with an <SPAN CLASS="texttt">@</SPAN> symbol:
+
+<P>
+
+<DL class="COMPACT">
+<DT>
+<DD><PRE>
+@define foo %( x %)
+@define add(a,b) %( ((@a)+(@b)) %)
+
+ @foo = @add(2,2)
+</PRE>
+</DD>
+</DL>
+<P>
+Macro expansion is currently performed in a separate pass before
+conditional compilation. Therefore, both TRUE- and FALSE-tokens in
+conditional expressions will be macroexpanded regardless of how the
+condition is evaluated. This can sometimes lead to errors:
+
+<P>
+
+<DL class="COMPACT">
+<DT>
+<DD><PRE>
+// The following results in a conflict:
+%( CONFIG_UTRACE == "y" %?
+ @define foo %( process.syscall %)
+%:
+ @define foo %( **ERROR** %)
+%)
+
+// The following works properly as expected:
+@define foo %(
+ %( CONFIG_UTRACE == "y" %? process.syscall %: **ERROR** %)
+%)
+</PRE>
+</DD>
+</DL>
+<P>
+The first example is incorrect because both <SPAN CLASS="texttt">@define</SPAN>s are
+evaluated in a pass prior to the conditional being evaluated.
+
+<P>
+
+<H3><A ID="SECTION00069200000000000000">
+<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">9</SPAN>.<SPAN CLASS="arabic">2</SPAN> Library macros</A>
+</H3>
+
+<P>
+Normally, a macro definition is local to the file it occurs in. Thus,
+defining a macro in a tapset does not make it available to the user of
+the tapset.
+
+<P>
+Publically available library macros can be defined by including
+<SPAN CLASS="texttt">.stpm</SPAN> files on the tapset search path. These files may only
+contain <SPAN CLASS="texttt">@define</SPAN> constructs, which become visible across all
+tapsets and user scripts.
+
+<P>
+
+<DIV CLASS="navigation"><HR>
+<!--Navigation Panel-->
+<A
+ HREF="6_Statement_types.html">
+<IMG WIDTH="37" HEIGHT="24" ALT="next" SRC="next.png"></A>
+<A
+ HREF="langref.html">
+<IMG WIDTH="26" HEIGHT="24" ALT="up" SRC="up.png"></A>
+<A
+ HREF="4_Probe_points.html">
+<IMG WIDTH="63" HEIGHT="24" ALT="previous" SRC="prev.png"></A>
+<A ID="tex2html316"
+ HREF="Contents.html">
+<IMG WIDTH="65" HEIGHT="24" ALT="contents" SRC="contents.png"></A>
+<A ID="tex2html318"
+ HREF="Index.html">
+<IMG WIDTH="43" HEIGHT="24" ALT="index" SRC="index.png"></A>
+<BR>
+<B> Next:</B> <A
+ HREF="6_Statement_types.html">6 Statement types</A>
+<B> Up:</B> <A
+ HREF="langref.html">SystemTap Language Reference</A>
+<B> Previous:</B> <A
+ HREF="4_Probe_points.html">4 Probe points</A>
+ <B> <A ID="tex2html317"
+ HREF="Contents.html">Contents</A></B>
+ <B> <A ID="tex2html319"
+ HREF="Index.html">Index</A></B> </DIV>
+<!--End of Navigation Panel-->
+
+</BODY>
+</HTML>
--- /dev/null
+<!DOCTYPE HTML>
+
+<!--Converted with LaTeX2HTML 2020.2 (Released July 1, 2020) -->
+<HTML lang="en">
+<HEAD>
+<TITLE>6 Statement types</TITLE>
+<META NAME="description" CONTENT="6 Statement types">
+<META NAME="keywords" CONTENT="langref">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+
+<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=utf-8">
+<META NAME="viewport" CONTENT="width=device-width, initial-scale=1.0">
+<META NAME="Generator" CONTENT="LaTeX2HTML v2020.2">
+
+<LINK REL="STYLESHEET" HREF="langref.css">
+
+<LINK REL="next" HREF="7_Associative_arrays.html">
+<LINK REL="previous" HREF="5_Language_elements.html">
+<LINK REL="next" HREF="7_Associative_arrays.html">
+</HEAD>
+
+<BODY >
+
+<DIV CLASS="navigation"><!--Navigation Panel-->
+<A
+ HREF="7_Associative_arrays.html">
+<IMG WIDTH="37" HEIGHT="24" ALT="next" SRC="next.png"></A>
+<A
+ HREF="langref.html">
+<IMG WIDTH="26" HEIGHT="24" ALT="up" SRC="up.png"></A>
+<A
+ HREF="5_Language_elements.html">
+<IMG WIDTH="63" HEIGHT="24" ALT="previous" SRC="prev.png"></A>
+<A ID="tex2html358"
+ HREF="Contents.html">
+<IMG WIDTH="65" HEIGHT="24" ALT="contents" SRC="contents.png"></A>
+<A ID="tex2html360"
+ HREF="Index.html">
+<IMG WIDTH="43" HEIGHT="24" ALT="index" SRC="index.png"></A>
+<BR>
+<B> Next:</B> <A
+ HREF="7_Associative_arrays.html">7 Associative arrays</A>
+<B> Up:</B> <A
+ HREF="langref.html">SystemTap Language Reference</A>
+<B> Previous:</B> <A
+ HREF="5_Language_elements.html">5 Language elements</A>
+ <B> <A ID="tex2html359"
+ HREF="Contents.html">Contents</A></B>
+ <B> <A ID="tex2html361"
+ HREF="Index.html">Index</A></B>
+<BR>
+<BR></DIV>
+<!--End of Navigation Panel-->
+<!--Table of Child-Links-->
+<A ID="CHILD_LINKS"><STRONG>Subsections</STRONG></A>
+
+<UL CLASS="ChildLinks">
+<LI><A ID="tex2html362"
+ HREF="6_Statement_types.html#SECTION00071000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN> break and continue</A>
+<LI><A ID="tex2html363"
+ HREF="6_Statement_types.html#SECTION00072000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN> try/catch</A>
+<LI><A ID="tex2html364"
+ HREF="6_Statement_types.html#SECTION00073000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN> delete</A>
+<LI><A ID="tex2html365"
+ HREF="6_Statement_types.html#SECTION00074000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">4</SPAN> EXP (expression)</A>
+<LI><A ID="tex2html366"
+ HREF="6_Statement_types.html#SECTION00075000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">5</SPAN> for</A>
+<LI><A ID="tex2html367"
+ HREF="6_Statement_types.html#SECTION00076000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">6</SPAN> foreach</A>
+<LI><A ID="tex2html368"
+ HREF="6_Statement_types.html#SECTION00077000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">7</SPAN> if</A>
+<LI><A ID="tex2html369"
+ HREF="6_Statement_types.html#SECTION00078000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">8</SPAN> next</A>
+<LI><A ID="tex2html370"
+ HREF="6_Statement_types.html#SECTION00079000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">9</SPAN> ; (null statement)</A>
+<LI><A ID="tex2html371"
+ HREF="6_Statement_types.html#SECTION000710000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">10</SPAN> return</A>
+<LI><A ID="tex2html372"
+ HREF="6_Statement_types.html#SECTION000711000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">11</SPAN> { } (statement block)</A>
+<LI><A ID="tex2html373"
+ HREF="6_Statement_types.html#SECTION000712000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">12</SPAN> while</A>
+</UL>
+<!--End of Table of Child-Links-->
+<HR>
+
+<H1><A ID="SECTION00070000000000000000"></A><A ID="sec:Statement-Types"></A>
+<BR>
+<SPAN CLASS="arabic">6</SPAN> Statement types
+</H1>
+
+<P>
+Statements enable procedural control flow within functions and probe handlers.
+The total number of statements executed in response to any single probe event
+is limited to MAXACTION, which defaults to 1000. See Section <A HREF="1_SystemTap_overview.html#sub:SystemTap-safety"><IMG ALT="[*]" SRC="crossref.png"></A>.
+
+<P>
+
+<H2><A ID="SECTION00071000000000000000"></A>
+<A NAME="966"></A>
+<A NAME="967"></A>
+<BR>
+<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN> break and continue
+</H2>
+Use <SPAN CLASS="texttt">break</SPAN> or <SPAN CLASS="texttt">continue</SPAN> to exit or iterate the innermost
+nesting loop statement, such as within a <SPAN CLASS="texttt">while, for,</SPAN> or <SPAN CLASS="texttt">foreach</SPAN>
+statement. The syntax and semantics are the same as those used in C.
+
+<P>
+
+<H2><A ID="SECTION00072000000000000000"></A>
+<A NAME="973"></A>
+<A NAME="974"></A>
+<BR>
+<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN> try/catch
+</H2>
+Use <SPAN CLASS="texttt">try</SPAN>/<SPAN CLASS="texttt">catch</SPAN> to handle most kinds of run-time errors within the script
+instead of aborting the probe handler in progress. The semantics are similar
+to C++ in that try/catch blocks may be nested. The error string may be captured
+by optionally naming a variable which is to receive it.
+
+<P>
+
+<DL class="COMPACT">
+<DT>
+<DD><PRE>
+try {
+ /* do something */
+ /* trigger error like kread(0), or divide by zero, or error("foo") */
+} catch (msg) { /* omit (msg) entirely if not interested */
+ /* println("caught error ", msg) */
+ /* handle error */
+}
+/* execution continues */
+</PRE>
+</DD>
+</DL>
+<P>
+
+<H2><A ID="SECTION00073000000000000000"></A><A ID="sub:delete"></A>
+<A NAME="982"></A>
+<BR>
+<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN> delete
+</H2>
+<SPAN CLASS="texttt">delete</SPAN> removes an element.
+
+<P>
+The following statement removes from ARRAY the element specified by the index
+tuple. The value will no longer be available, and subsequent iterations will
+not report the element. It is not an error to delete an element that does
+not exist.
+
+<P>
+
+<DL class="COMPACT">
+<DT>
+<DD><PRE>
+delete ARRAY[INDEX1, INDEX2, ...]
+</PRE>
+</DD>
+</DL>The following syntax removes all elements from ARRAY:
+
+<P>
+
+<DL class="COMPACT">
+<DT>
+<DD><PRE>
+delete ARRAY
+</PRE>
+</DD>
+</DL>The following statement removes the value of SCALAR. Integers and strings
+are cleared to zero and null ("") respectively, while statistics
+are reset to their initial empty state.
+
+<P>
+
+<DL class="COMPACT">
+<DT>
+<DD><PRE>
+delete SCALAR
+</PRE>
+</DD>
+</DL>
+<P>
+
+<H2><A ID="SECTION00074000000000000000"></A>
+<A NAME="999"></A>
+<BR>
+<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">4</SPAN> EXP (expression)
+</H2>
+An <SPAN CLASS="texttt">expression</SPAN> executes a string- or integer-valued expression and
+discards the value.
+
+<P>
+
+<H2><A ID="SECTION00075000000000000000"></A>
+<A NAME="1002"></A>
+<BR>
+<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">5</SPAN> for
+</H2>
+General syntax:
+
+<DL class="COMPACT">
+<DT>
+<DD><PRE>
+for (EXP1; EXP2; EXP3) STMT
+</PRE>
+</DD>
+</DL>The <SPAN CLASS="texttt">for</SPAN> statement is similar to the <SPAN CLASS="texttt">for</SPAN> statement in C.
+The <SPAN CLASS="texttt">for</SPAN> expression executes EXP1 as initialization. While EXP2 is
+non-zero, it executes STMT, then the iteration expression EXP3.
+
+<P>
+
+<H2><A ID="SECTION00076000000000000000"></A><A ID="sub:foreach"></A>
+<A NAME="1011"></A>
+<BR>
+<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">6</SPAN> foreach
+</H2>
+General syntax:
+
+<DL class="COMPACT">
+<DT>
+<DD><PRE>
+foreach (VAR in ARRAY) STMT
+</PRE>
+</DD>
+</DL>The <SPAN CLASS="texttt">foreach</SPAN> statement loops over each element of a named global array, assigning
+the current key to VAR. The array must not be modified within the statement.
+If you add a single plus (+) or minus (-) operator after the VAR or the ARRAY
+identifier, the iteration order will be sorted by the ascending or descending
+index or value.
+
+<P>
+The following statement behaves the same as the first example, except it
+is used when an array is indexed with a tuple of keys. Use a sorting suffix
+on at most one VAR or ARRAY identifier.
+
+<P>
+
+<DL class="COMPACT">
+<DT>
+<DD><PRE>
+foreach ([VAR1, VAR2, ...] in ARRAY) STMT
+</PRE>
+</DD>
+</DL>
+<P>
+You can combine the first and second syntax to capture both the full tuple
+and the keys at the same time as follows.
+
+<DL class="COMPACT">
+<DT>
+<DD><PRE>
+foreach (VAR = [VAR1, VAR2, ...] in ARRAY) STMT
+</PRE>
+</DD>
+</DL>
+<P>
+The following statement is the same as the first example, except that the
+<SPAN CLASS="texttt">limit</SPAN> keyword limits the number of loop iterations to EXP times.
+EXP is evaluated once at the beginning of the loop.
+
+<P>
+
+<DL class="COMPACT">
+<DT>
+<DD><PRE>
+foreach (VAR in ARRAY limit EXP) STMT
+</PRE>
+</DD>
+</DL>
+<P>
+
+<H2><A ID="SECTION00077000000000000000"></A>
+<A NAME="1031"></A>
+<BR>
+<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">7</SPAN> if
+</H2>
+General syntax:
+
+<P>
+
+<DL class="COMPACT">
+<DT>
+<DD><PRE>
+if (EXP) STMT1 [ else STMT2 ]
+</PRE>
+</DD>
+</DL>The <SPAN CLASS="texttt">if</SPAN> statement compares an integer-valued EXP to zero. It executes
+the first STMT if non-zero, or the second STMT if zero.
+
+<P>
+The <SPAN CLASS="texttt">if</SPAN> command has the same syntax and semantics as used in C.
+
+<P>
+
+<H2><A ID="SECTION00078000000000000000"></A>
+<A NAME="1039"></A>
+<BR>
+<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">8</SPAN> next
+</H2>
+The <SPAN CLASS="texttt">next</SPAN> statement returns immediately from the enclosing probe
+handler. When used in functions, the execution will be immediately transferred
+to the next overloaded function.
+
+<P>
+
+<H2><A ID="SECTION00079000000000000000"></A>
+<A NAME="1042"></A>
+<A NAME="1043"></A>
+<BR>
+<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">9</SPAN> ; (null statement)
+</H2>
+General syntax:
+
+<P>
+
+<DL class="COMPACT">
+<DT>
+<DD><PRE>
+statement1
+;
+statement2
+</PRE>
+</DD>
+</DL>The semicolon represents the null statement, or do nothing. It is useful
+as an optional separator between statements to improve syntax error detection
+and to handle certain grammar ambiguities.
+
+<P>
+
+<H2><A ID="SECTION000710000000000000000"></A>
+<A NAME="1049"></A>
+<BR>
+<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">10</SPAN> return
+</H2>
+General syntax:
+
+<P>
+
+<DL class="COMPACT">
+<DT>
+<DD><PRE>
+return EXP
+</PRE>
+</DD>
+</DL>The <SPAN CLASS="texttt">return</SPAN> statement returns the EXP value from the enclosing function.
+If the value of the function is not returned, then a return statement is
+not needed, and the function will have a special <SPAN CLASS="textit">unknown</SPAN> type with
+no return value.
+
+<P>
+
+<H2><A ID="SECTION000711000000000000000"></A>
+<A NAME="1057"></A>
+<A NAME="1058"></A>
+<BR>
+<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">11</SPAN> { } (statement block)
+</H2>
+This is the statement block with zero or more statements enclosed within
+brackets. The following is the general syntax:
+
+<P>
+
+<DL class="COMPACT">
+<DT>
+<DD><PRE>
+{ STMT1 STMT2 ... }
+</PRE>
+</DD>
+</DL>The statement block executes each statement in sequence in the block. Separators
+or terminators are generally not necessary between statements. The statement
+block uses the same syntax and semantics as in C.
+
+<P>
+
+<H2><A ID="SECTION000712000000000000000"></A>
+<A NAME="1064"></A>
+<BR>
+<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">12</SPAN> while
+</H2>
+General syntax:
+
+<P>
+
+<DL class="COMPACT">
+<DT>
+<DD><PRE>
+while (EXP) STMT
+</PRE>
+</DD>
+</DL>The <SPAN CLASS="texttt">while</SPAN> statement uses the same syntax and semantics as in C.
+In the statement above, while the integer-valued EXP evaluates to non-zero,
+the parser will execute STMT.
+
+<P>
+
+<DIV CLASS="navigation"><HR>
+<!--Navigation Panel-->
+<A
+ HREF="7_Associative_arrays.html">
+<IMG WIDTH="37" HEIGHT="24" ALT="next" SRC="next.png"></A>
+<A
+ HREF="langref.html">
+<IMG WIDTH="26" HEIGHT="24" ALT="up" SRC="up.png"></A>
+<A
+ HREF="5_Language_elements.html">
+<IMG WIDTH="63" HEIGHT="24" ALT="previous" SRC="prev.png"></A>
+<A ID="tex2html358"
+ HREF="Contents.html">
+<IMG WIDTH="65" HEIGHT="24" ALT="contents" SRC="contents.png"></A>
+<A ID="tex2html360"
+ HREF="Index.html">
+<IMG WIDTH="43" HEIGHT="24" ALT="index" SRC="index.png"></A>
+<BR>
+<B> Next:</B> <A
+ HREF="7_Associative_arrays.html">7 Associative arrays</A>
+<B> Up:</B> <A
+ HREF="langref.html">SystemTap Language Reference</A>
+<B> Previous:</B> <A
+ HREF="5_Language_elements.html">5 Language elements</A>
+ <B> <A ID="tex2html359"
+ HREF="Contents.html">Contents</A></B>
+ <B> <A ID="tex2html361"
+ HREF="Index.html">Index</A></B> </DIV>
+<!--End of Navigation Panel-->
+
+</BODY>
+</HTML>
--- /dev/null
+<!DOCTYPE HTML>
+
+<!--Converted with LaTeX2HTML 2020.2 (Released July 1, 2020) -->
+<HTML lang="en">
+<HEAD>
+<TITLE>7 Associative arrays</TITLE>
+<META NAME="description" CONTENT="7 Associative arrays">
+<META NAME="keywords" CONTENT="langref">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+
+<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=utf-8">
+<META NAME="viewport" CONTENT="width=device-width, initial-scale=1.0">
+<META NAME="Generator" CONTENT="LaTeX2HTML v2020.2">
+
+<LINK REL="STYLESHEET" HREF="langref.css">
+
+<LINK REL="next" HREF="8_Statistics_aggregates.html">
+<LINK REL="previous" HREF="6_Statement_types.html">
+<LINK REL="next" HREF="8_Statistics_aggregates.html">
+</HEAD>
+
+<BODY >
+
+<DIV CLASS="navigation"><!--Navigation Panel-->
+<A
+ HREF="8_Statistics_aggregates.html">
+<IMG WIDTH="37" HEIGHT="24" ALT="next" SRC="next.png"></A>
+<A
+ HREF="langref.html">
+<IMG WIDTH="26" HEIGHT="24" ALT="up" SRC="up.png"></A>
+<A
+ HREF="6_Statement_types.html">
+<IMG WIDTH="63" HEIGHT="24" ALT="previous" SRC="prev.png"></A>
+<A ID="tex2html374"
+ HREF="Contents.html">
+<IMG WIDTH="65" HEIGHT="24" ALT="contents" SRC="contents.png"></A>
+<A ID="tex2html376"
+ HREF="Index.html">
+<IMG WIDTH="43" HEIGHT="24" ALT="index" SRC="index.png"></A>
+<BR>
+<B> Next:</B> <A
+ HREF="8_Statistics_aggregates.html">8 Statistics (aggregates)</A>
+<B> Up:</B> <A
+ HREF="langref.html">SystemTap Language Reference</A>
+<B> Previous:</B> <A
+ HREF="6_Statement_types.html">6 Statement types</A>
+ <B> <A ID="tex2html375"
+ HREF="Contents.html">Contents</A></B>
+ <B> <A ID="tex2html377"
+ HREF="Index.html">Index</A></B>
+<BR>
+<BR></DIV>
+<!--End of Navigation Panel-->
+<!--Table of Child-Links-->
+<A ID="CHILD_LINKS"><STRONG>Subsections</STRONG></A>
+
+<UL CLASS="ChildLinks">
+<LI><A ID="tex2html378"
+ HREF="7_Associative_arrays.html#SECTION00081000000000000000"><SPAN CLASS="arabic">7</SPAN>.<SPAN CLASS="arabic">1</SPAN> Examples</A>
+<LI><A ID="tex2html379"
+ HREF="7_Associative_arrays.html#SECTION00082000000000000000"><SPAN CLASS="arabic">7</SPAN>.<SPAN CLASS="arabic">2</SPAN> Types of values</A>
+<LI><A ID="tex2html380"
+ HREF="7_Associative_arrays.html#SECTION00083000000000000000"><SPAN CLASS="arabic">7</SPAN>.<SPAN CLASS="arabic">3</SPAN> Array capacity</A>
+<LI><A ID="tex2html381"
+ HREF="7_Associative_arrays.html#SECTION00084000000000000000"><SPAN CLASS="arabic">7</SPAN>.<SPAN CLASS="arabic">4</SPAN> Array wrapping</A>
+<LI><A ID="tex2html382"
+ HREF="7_Associative_arrays.html#SECTION00085000000000000000"><SPAN CLASS="arabic">7</SPAN>.<SPAN CLASS="arabic">5</SPAN> Iteration, foreach</A>
+<LI><A ID="tex2html383"
+ HREF="7_Associative_arrays.html#SECTION00086000000000000000"><SPAN CLASS="arabic">7</SPAN>.<SPAN CLASS="arabic">6</SPAN> Deletion</A>
+</UL>
+<!--End of Table of Child-Links-->
+<HR>
+
+<H1><A ID="SECTION00080000000000000000"></A><A ID="sec:Associative-Arrays"></A>
+<A NAME="1071"></A>
+<BR>
+<SPAN CLASS="arabic">7</SPAN> Associative arrays
+</H1>
+Associative arrays are implemented as hash tables with a maximum size set
+at startup. Associative arrays are too large to be created dynamically for
+individual probe handler runs, so they must be declared as global. The basic
+operations for arrays are setting and looking up elements. These operations
+are expressed in awk syntax: the array name followed by an opening bracket
+([), a comma-separated list of up to nine index index expressions, and
+a closing bracket (]). Each index expression may be a string or a number,
+as long as it is consistently typed throughout the script.
+
+<P>
+
+<H2><A ID="SECTION00081000000000000000">
+<SPAN CLASS="arabic">7</SPAN>.<SPAN CLASS="arabic">1</SPAN> Examples</A>
+</H2>
+
+<P>
+
+<DL class="COMPACT">
+<DT>
+<DD><PRE>
+# Increment the named array slot:
+foo [4,"hello"] ++
+
+# Update a statistic:
+processusage [uid(),execname()] ++
+
+# Set a timestamp reference point:
+times [tid()] = get_cycles()
+
+# Compute a timestamp delta:
+delta = get_cycles() - times [tid()]
+</PRE>
+</DD>
+</DL>
+<P>
+
+<H2><A ID="SECTION00082000000000000000">
+<SPAN CLASS="arabic">7</SPAN>.<SPAN CLASS="arabic">2</SPAN> Types of values</A>
+</H2>
+
+<P>
+Array elements may be set to a number, a string, or an aggregate.
+The type must be consistent
+throughout the use of the array. The first assignment to the array defines
+the type of the elements. Unset array elements may be fetched and return
+a null value (zero or empty string) as appropriate, but they are not seen
+by a membership test.
+
+<P>
+
+<H2><A ID="SECTION00083000000000000000">
+<SPAN CLASS="arabic">7</SPAN>.<SPAN CLASS="arabic">3</SPAN> Array capacity</A>
+</H2>
+
+<P>
+Array sizes can be specified explicitly or allowed to default to the maximum
+size as defined by MAXMAPENTRIES. See Section <A HREF="1_SystemTap_overview.html#sub:SystemTap-safety"><IMG ALT="[*]" SRC="crossref.png"></A>
+for details on changing MAXMAPENTRIES.
+
+<P>
+You can explicitly specify the size of an array as follows:
+
+<P>
+
+<DL class="COMPACT">
+<DT>
+<DD><PRE>
+global ARRAY[<size>]
+</PRE>
+</DD>
+</DL>If you do not specify the size parameter, then the array is created to hold
+MAXMAPENTRIES number of elements.
+
+<P>
+
+<H2><A ID="SECTION00084000000000000000"></A><A ID="sub:Array-Wrapping"></A>
+<BR>
+<SPAN CLASS="arabic">7</SPAN>.<SPAN CLASS="arabic">4</SPAN> Array wrapping
+</H2>
+
+<P>
+Arrays may be wrapped using the percentage symbol (%) causing previously entered
+elements to be overwritten if more elements are inserted than the array can
+hold. This works for both regular and statistics typed arrays.
+
+<P>
+You can mark arrays for wrapping as follows:
+
+<P>
+
+<DL class="COMPACT">
+<DT>
+<DD><PRE>
+global ARRAY1%[<size>], ARRAY2%
+</PRE>
+</DD>
+</DL>
+<P>
+
+<H2><A ID="SECTION00085000000000000000"></A>
+<A NAME="1091"></A>
+<BR>
+<SPAN CLASS="arabic">7</SPAN>.<SPAN CLASS="arabic">5</SPAN> Iteration, foreach
+</H2>
+Like awk, SystemTap's foreach creates a loop that iterates over key tuples
+of an array, not only values. The iteration may be sorted by any single key
+or a value by adding an extra plus symbol (+) or minus symbol (-) to the
+code or limited to only a few elements with the limit keyword.
+The following are examples.
+
+<P>
+
+<DL class="COMPACT">
+<DT>
+<DD><PRE>
+# Simple loop in arbitrary sequence:
+foreach ([a,b] in foo)
+ fuss_with(foo[a,b])
+
+# Loop in increasing sequence of value:
+foreach ([a,b] in foo+) { ... }
+
+# Loop in decreasing sequence of first key:
+foreach ([a-,b] in foo) { ... }
+
+# Print the first 10 tuples and values in the array in decreasing sequence
+foreach (v = [i,j] in foo- limit 10)
+ printf("foo[%d,%s] = %d\n", i, j, v)
+</PRE>
+</DD>
+</DL>The <SPAN CLASS="texttt">break</SPAN> and <SPAN CLASS="texttt">continue</SPAN> statements also work inside foreach
+loops. Since arrays can be large but probe handlers must execute quickly,
+you should write scripts that exit iteration early, if possible. For simplicity,
+SystemTap forbids any modification of an array during iteration with a foreach.
+
+<P>
+For a full description of <SPAN CLASS="texttt">foreach</SPAN> see subsection <A HREF="6_Statement_types.html#sub:foreach"><IMG ALT="[*]" SRC="crossref.png"></A>.
+
+<P>
+
+<H2><A ID="SECTION00086000000000000000"></A>
+<A NAME="1101"></A>
+<BR>
+<SPAN CLASS="arabic">7</SPAN>.<SPAN CLASS="arabic">6</SPAN> Deletion
+</H2>
+The <SPAN CLASS="texttt">delete</SPAN> statement can either remove a single element by index from
+an array or clear an entire array at once. See subsection <A HREF="6_Statement_types.html#sub:delete"><IMG ALT="[*]" SRC="crossref.png"></A> for
+details and examples.
+
+<P>
+
+<DIV CLASS="navigation"><HR>
+<!--Navigation Panel-->
+<A
+ HREF="8_Statistics_aggregates.html">
+<IMG WIDTH="37" HEIGHT="24" ALT="next" SRC="next.png"></A>
+<A
+ HREF="langref.html">
+<IMG WIDTH="26" HEIGHT="24" ALT="up" SRC="up.png"></A>
+<A
+ HREF="6_Statement_types.html">
+<IMG WIDTH="63" HEIGHT="24" ALT="previous" SRC="prev.png"></A>
+<A ID="tex2html374"
+ HREF="Contents.html">
+<IMG WIDTH="65" HEIGHT="24" ALT="contents" SRC="contents.png"></A>
+<A ID="tex2html376"
+ HREF="Index.html">
+<IMG WIDTH="43" HEIGHT="24" ALT="index" SRC="index.png"></A>
+<BR>
+<B> Next:</B> <A
+ HREF="8_Statistics_aggregates.html">8 Statistics (aggregates)</A>
+<B> Up:</B> <A
+ HREF="langref.html">SystemTap Language Reference</A>
+<B> Previous:</B> <A
+ HREF="6_Statement_types.html">6 Statement types</A>
+ <B> <A ID="tex2html375"
+ HREF="Contents.html">Contents</A></B>
+ <B> <A ID="tex2html377"
+ HREF="Index.html">Index</A></B> </DIV>
+<!--End of Navigation Panel-->
+
+</BODY>
+</HTML>
--- /dev/null
+<!DOCTYPE HTML>
+
+<!--Converted with LaTeX2HTML 2020.2 (Released July 1, 2020) -->
+<HTML lang="en">
+<HEAD>
+<TITLE>8 Statistics (aggregates)</TITLE>
+<META NAME="description" CONTENT="8 Statistics (aggregates)">
+<META NAME="keywords" CONTENT="langref">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+
+<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=utf-8">
+<META NAME="viewport" CONTENT="width=device-width, initial-scale=1.0">
+<META NAME="Generator" CONTENT="LaTeX2HTML v2020.2">
+
+<LINK REL="STYLESHEET" HREF="langref.css">
+
+<LINK REL="next" HREF="9_Formatted_output.html">
+<LINK REL="previous" HREF="7_Associative_arrays.html">
+<LINK REL="next" HREF="9_Formatted_output.html">
+</HEAD>
+
+<BODY >
+
+<DIV CLASS="navigation"><!--Navigation Panel-->
+<A
+ HREF="9_Formatted_output.html">
+<IMG WIDTH="37" HEIGHT="24" ALT="next" SRC="next.png"></A>
+<A
+ HREF="langref.html">
+<IMG WIDTH="26" HEIGHT="24" ALT="up" SRC="up.png"></A>
+<A
+ HREF="7_Associative_arrays.html">
+<IMG WIDTH="63" HEIGHT="24" ALT="previous" SRC="prev.png"></A>
+<A ID="tex2html384"
+ HREF="Contents.html">
+<IMG WIDTH="65" HEIGHT="24" ALT="contents" SRC="contents.png"></A>
+<A ID="tex2html386"
+ HREF="Index.html">
+<IMG WIDTH="43" HEIGHT="24" ALT="index" SRC="index.png"></A>
+<BR>
+<B> Next:</B> <A
+ HREF="9_Formatted_output.html">9 Formatted output</A>
+<B> Up:</B> <A
+ HREF="langref.html">SystemTap Language Reference</A>
+<B> Previous:</B> <A
+ HREF="7_Associative_arrays.html">7 Associative arrays</A>
+ <B> <A ID="tex2html385"
+ HREF="Contents.html">Contents</A></B>
+ <B> <A ID="tex2html387"
+ HREF="Index.html">Index</A></B>
+<BR>
+<BR></DIV>
+<!--End of Navigation Panel-->
+<!--Table of Child-Links-->
+<A ID="CHILD_LINKS"><STRONG>Subsections</STRONG></A>
+
+<UL CLASS="ChildLinks">
+<LI><A ID="tex2html388"
+ HREF="8_Statistics_aggregates.html#SECTION00091000000000000000"><SPAN CLASS="arabic">8</SPAN>.<SPAN CLASS="arabic">1</SPAN> The aggregation (< < <) operator</A>
+<LI><A ID="tex2html389"
+ HREF="8_Statistics_aggregates.html#SECTION00092000000000000000"><SPAN CLASS="arabic">8</SPAN>.<SPAN CLASS="arabic">2</SPAN> Extraction functions</A>
+<LI><A ID="tex2html390"
+ HREF="8_Statistics_aggregates.html#SECTION00093000000000000000"><SPAN CLASS="arabic">8</SPAN>.<SPAN CLASS="arabic">3</SPAN> Integer extractors</A>
+<UL>
+<LI><A ID="tex2html391"
+ HREF="8_Statistics_aggregates.html#SECTION00093100000000000000"><SPAN CLASS="arabic">8</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">1</SPAN> @count(s)</A>
+<LI><A ID="tex2html392"
+ HREF="8_Statistics_aggregates.html#SECTION00093200000000000000"><SPAN CLASS="arabic">8</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN> @sum(s)</A>
+<LI><A ID="tex2html393"
+ HREF="8_Statistics_aggregates.html#SECTION00093300000000000000"><SPAN CLASS="arabic">8</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN> @min(s)</A>
+<LI><A ID="tex2html394"
+ HREF="8_Statistics_aggregates.html#SECTION00093400000000000000"><SPAN CLASS="arabic">8</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">4</SPAN> @max(s)</A>
+<LI><A ID="tex2html395"
+ HREF="8_Statistics_aggregates.html#SECTION00093500000000000000"><SPAN CLASS="arabic">8</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN> @avg(s)</A>
+</UL>
+<BR>
+<LI><A ID="tex2html396"
+ HREF="8_Statistics_aggregates.html#SECTION00094000000000000000"><SPAN CLASS="arabic">8</SPAN>.<SPAN CLASS="arabic">4</SPAN> Histogram extractors</A>
+<UL>
+<LI><A ID="tex2html397"
+ HREF="8_Statistics_aggregates.html#SECTION00094100000000000000"><SPAN CLASS="arabic">8</SPAN>.<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN> @hist_linear</A>
+<LI><A ID="tex2html398"
+ HREF="8_Statistics_aggregates.html#SECTION00094200000000000000"><SPAN CLASS="arabic">8</SPAN>.<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">2</SPAN> @hist_log</A>
+</UL>
+<BR>
+<LI><A ID="tex2html399"
+ HREF="8_Statistics_aggregates.html#SECTION00095000000000000000"><SPAN CLASS="arabic">8</SPAN>.<SPAN CLASS="arabic">5</SPAN> Deletion</A>
+</UL>
+<!--End of Table of Child-Links-->
+<HR>
+
+<H1><A ID="SECTION00090000000000000000"></A><A ID="sec:Statistics"></A>
+<A NAME="1105"></A>
+<BR>
+<SPAN CLASS="arabic">8</SPAN> Statistics (aggregates)
+</H1>
+Aggregate instances are used to collect statistics on numerical values, when
+it is important to accumulate new data quickly and in large volume. These
+instances operate without exclusive locks, and store only aggregated stream
+statistics. Aggregates make sense only for global variables. They are stored
+individually or as elements of an associative array. For information about
+wrapping associative arrays with statistics elements, see section <A HREF="7_Associative_arrays.html#sub:Array-Wrapping"><IMG ALT="[*]" SRC="crossref.png"></A>
+
+<P>
+
+<H2><A ID="SECTION00091000000000000000">
+<SPAN CLASS="arabic">8</SPAN>.<SPAN CLASS="arabic">1</SPAN> The aggregation (< < <) operator</A>
+</H2>
+<A NAME="1400"></A>
+The aggregation operator is “< < <”,
+and its effect is similar to an assignment or a C++ output streaming operation.
+The left operand specifies a scalar or array-index <SPAN CLASS="textit">l-value</SPAN>, which
+must be declared global. The right operand is a numeric expression. The meaning
+is intuitive: add the given number as a sample to the set of numbers to compute their
+statistics. The specific list of statistics to gather is given separately
+by the extraction functions. The following is an example.
+
+<P>
+
+<DL class="COMPACT">
+<DT>
+<DD><PRE>
+a <<< delta_timestamp
+writes[execname()] <<< count
+</PRE>
+</DD>
+</DL>
+<P>
+
+<H2><A ID="SECTION00092000000000000000"></A>
+<A NAME="1120"></A>
+<BR>
+<SPAN CLASS="arabic">8</SPAN>.<SPAN CLASS="arabic">2</SPAN> Extraction functions
+</H2>
+For each instance of a distinct extraction function operating on a given
+identifier, the translator computes a set of statistics. With each execution
+of an extraction function, the aggregation is computed for that moment across
+all processors. The first argument of each function is the same style of
+l-value as used on the left side of the aggregation operation.
+
+<P>
+
+<H2><A ID="SECTION00093000000000000000">
+<SPAN CLASS="arabic">8</SPAN>.<SPAN CLASS="arabic">3</SPAN> Integer extractors</A>
+</H2>
+
+<P>
+The following functions provide methods to extract information about aggregate.
+
+<P>
+
+<H3><A ID="SECTION00093100000000000000"></A>
+<A NAME="1123"></A>
+<BR>
+<SPAN CLASS="arabic">8</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">1</SPAN> @count(s)
+</H3>
+This statement returns the number of samples accumulated in aggregate s.
+
+<P>
+
+<H3><A ID="SECTION00093200000000000000"></A>
+<A NAME="1125"></A>
+<BR>
+<SPAN CLASS="arabic">8</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN> @sum(s)
+</H3>
+This statement returns the total sum of all samples in aggregate s.
+
+<P>
+
+<H3><A ID="SECTION00093300000000000000"></A>
+<A NAME="1127"></A>
+<BR>
+<SPAN CLASS="arabic">8</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN> @min(s)
+</H3>
+This statement returns the minimum of all samples in aggregate s.
+
+<P>
+
+<H3><A ID="SECTION00093400000000000000"></A>
+<A NAME="1129"></A>
+<BR>
+<SPAN CLASS="arabic">8</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">4</SPAN> @max(s)
+</H3>
+This statement returns the maximum of all samples in aggregate s.
+
+<P>
+
+<H3><A ID="SECTION00093500000000000000"></A>
+<A NAME="1131"></A>
+<BR>
+<SPAN CLASS="arabic">8</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN> @avg(s)
+</H3>
+This statement returns the average value of all samples in aggregate s.
+
+<P>
+
+<H2><A ID="SECTION00094000000000000000"></A>
+<A NAME="1133"></A>
+<BR>
+<SPAN CLASS="arabic">8</SPAN>.<SPAN CLASS="arabic">4</SPAN> Histogram extractors
+</H2>
+The following functions provide methods to extract histogram information.
+Printing a histogram with the print family of functions renders a histogram
+object as a tabular "ASCII art" bar chart.
+
+<P>
+
+<H3><A ID="SECTION00094100000000000000"></A>
+<A NAME="1135"></A>
+<BR>
+<SPAN CLASS="arabic">8</SPAN>.<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN> @hist_linear
+</H3>
+The statement <SPAN CLASS="texttt">@hist_linear(v,L,H,W)</SPAN> represents a linear histogram
+of aggregate <SPAN CLASS="texttt">v</SPAN>,
+where <SPAN CLASS="textit">L</SPAN> and <SPAN CLASS="textit">H</SPAN> represent the lower and upper end of
+a range of values and <SPAN CLASS="textit">W</SPAN> represents the width (or size) of each bucket
+within the range. The low and high values can be negative, but the overall
+difference (high minus low) must be positive. The width parameter must also
+be positive.
+
+<P>
+In the output, a range of consecutive empty buckets may be replaced with a tilde
+(~) character. This can be controlled on the command line
+with -DHIST_ELISION=< num> ,
+where < num> specifies how many
+empty buckets at the top and bottom of the range to print.
+The default is 2. A < num> of 0
+removes all empty buckets. A negative < num>
+disables removal.
+
+<P>
+For example, if you specify -DHIST_ELISION=3 and the histogram has 10
+consecutive empty buckets, the first 3 and last 3 empty buckets will
+be printed and the middle 4 empty buckets will be represented by a
+tilde (~).
+
+<P>
+The following is an example.
+
+<P>
+
+<DL class="COMPACT">
+<DT>
+<DD><PRE>
+global reads
+probe netdev.receive {
+ reads <<< length
+}
+probe end {
+ print(@hist_linear(reads, 0, 10240, 200))
+}
+</PRE>
+</DD>
+</DL>This generates the following output.
+
+<P>
+
+<DL class="COMPACT">
+<DT>
+<DD><PRE>
+value |-------------------------------------------------- count
+ 0 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 1650
+ 200 | 8
+ 400 | 0
+ 600 | 0
+ ~
+ 1000 | 0
+ 1200 | 0
+ 1400 | 1
+ 1600 | 0
+ 1800 | 0
+</PRE>
+</DD>
+</DL>
+This shows that 1650 network reads were of a size between 0 and 199 bytes,
+8 reads were between 200 and 399 bytes, and 1 read was between
+1200 and 1399 bytes. The tilde (~) character indicates
+the bucket for 800 to 999 bytes was removed because it was empty.
+Empty buckets for 2000 bytes and larger were also removed because they
+were empty.
+
+<P>
+
+<H3><A ID="SECTION00094200000000000000"></A>
+<A NAME="1163"></A>
+<BR>
+<SPAN CLASS="arabic">8</SPAN>.<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">2</SPAN> @hist_log
+</H3>
+The statement <SPAN CLASS="texttt">@hist_log(v)</SPAN> represents a base-2 logarithmic
+histogram. Empty buckets are replaced with a tilde (~)
+character in the same way as <SPAN CLASS="texttt">@hist_linear()</SPAN> (see above).
+
+<P>
+The following is an example.
+
+<P>
+
+<DL class="COMPACT">
+<DT>
+<DD><PRE>
+global reads
+probe netdev.receive {
+ reads <<< length
+}
+probe end {
+ print(@hist_log(reads))
+}
+</PRE>
+</DD>
+</DL>This generates the following output.
+
+<P>
+
+<DL class="COMPACT">
+<DT>
+<DD><PRE>
+value |-------------------------------------------------- count
+ 8 | 0
+ 16 | 0
+ 32 | 254
+ 64 | 3
+ 128 | 2
+ 256 | 2
+ 512 | 4
+ 1024 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 16689
+ 2048 | 0
+ 4096 | 0
+</PRE>
+</DD>
+</DL>
+
+<P>
+
+<H2><A ID="SECTION00095000000000000000"></A>
+<A NAME="1178"></A>
+<BR>
+<SPAN CLASS="arabic">8</SPAN>.<SPAN CLASS="arabic">5</SPAN> Deletion
+</H2>
+The <SPAN CLASS="texttt">delete</SPAN> statement (subsection <A HREF="6_Statement_types.html#sub:delete"><IMG ALT="[*]" SRC="crossref.png"></A>) applied to an
+aggregate variable will reset it to the initial empty state.
+
+<P>
+
+<DIV CLASS="navigation"><HR>
+<!--Navigation Panel-->
+<A
+ HREF="9_Formatted_output.html">
+<IMG WIDTH="37" HEIGHT="24" ALT="next" SRC="next.png"></A>
+<A
+ HREF="langref.html">
+<IMG WIDTH="26" HEIGHT="24" ALT="up" SRC="up.png"></A>
+<A
+ HREF="7_Associative_arrays.html">
+<IMG WIDTH="63" HEIGHT="24" ALT="previous" SRC="prev.png"></A>
+<A ID="tex2html384"
+ HREF="Contents.html">
+<IMG WIDTH="65" HEIGHT="24" ALT="contents" SRC="contents.png"></A>
+<A ID="tex2html386"
+ HREF="Index.html">
+<IMG WIDTH="43" HEIGHT="24" ALT="index" SRC="index.png"></A>
+<BR>
+<B> Next:</B> <A
+ HREF="9_Formatted_output.html">9 Formatted output</A>
+<B> Up:</B> <A
+ HREF="langref.html">SystemTap Language Reference</A>
+<B> Previous:</B> <A
+ HREF="7_Associative_arrays.html">7 Associative arrays</A>
+ <B> <A ID="tex2html385"
+ HREF="Contents.html">Contents</A></B>
+ <B> <A ID="tex2html387"
+ HREF="Index.html">Index</A></B> </DIV>
+<!--End of Navigation Panel-->
+
+</BODY>
+</HTML>
--- /dev/null
+<!DOCTYPE HTML>
+
+<!--Converted with LaTeX2HTML 2020.2 (Released July 1, 2020) -->
+<HTML lang="en">
+<HEAD>
+<TITLE>9 Formatted output</TITLE>
+<META NAME="description" CONTENT="9 Formatted output">
+<META NAME="keywords" CONTENT="langref">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+
+<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=utf-8">
+<META NAME="viewport" CONTENT="width=device-width, initial-scale=1.0">
+<META NAME="Generator" CONTENT="LaTeX2HTML v2020.2">
+
+<LINK REL="STYLESHEET" HREF="langref.css">
+
+<LINK REL="next" HREF="10_Tapset_defined_functions.html">
+<LINK REL="previous" HREF="8_Statistics_aggregates.html">
+<LINK REL="next" HREF="10_Tapset_defined_functions.html">
+</HEAD>
+
+<BODY >
+
+<DIV CLASS="navigation"><!--Navigation Panel-->
+<A
+ HREF="10_Tapset_defined_functions.html">
+<IMG WIDTH="37" HEIGHT="24" ALT="next" SRC="next.png"></A>
+<A
+ HREF="langref.html">
+<IMG WIDTH="26" HEIGHT="24" ALT="up" SRC="up.png"></A>
+<A
+ HREF="8_Statistics_aggregates.html">
+<IMG WIDTH="63" HEIGHT="24" ALT="previous" SRC="prev.png"></A>
+<A ID="tex2html400"
+ HREF="Contents.html">
+<IMG WIDTH="65" HEIGHT="24" ALT="contents" SRC="contents.png"></A>
+<A ID="tex2html402"
+ HREF="Index.html">
+<IMG WIDTH="43" HEIGHT="24" ALT="index" SRC="index.png"></A>
+<BR>
+<B> Next:</B> <A
+ HREF="10_Tapset_defined_functions.html">10 Tapset-defined functions</A>
+<B> Up:</B> <A
+ HREF="langref.html">SystemTap Language Reference</A>
+<B> Previous:</B> <A
+ HREF="8_Statistics_aggregates.html">8 Statistics (aggregates)</A>
+ <B> <A ID="tex2html401"
+ HREF="Contents.html">Contents</A></B>
+ <B> <A ID="tex2html403"
+ HREF="Index.html">Index</A></B>
+<BR>
+<BR></DIV>
+<!--End of Navigation Panel-->
+<!--Table of Child-Links-->
+<A ID="CHILD_LINKS"><STRONG>Subsections</STRONG></A>
+
+<UL CLASS="ChildLinks">
+<LI><A ID="tex2html404"
+ HREF="9_Formatted_output.html#SECTION000101000000000000000"><SPAN CLASS="arabic">9</SPAN>.<SPAN CLASS="arabic">1</SPAN> print</A>
+<LI><A ID="tex2html405"
+ HREF="9_Formatted_output.html#SECTION000102000000000000000"><SPAN CLASS="arabic">9</SPAN>.<SPAN CLASS="arabic">2</SPAN> printf</A>
+<LI><A ID="tex2html406"
+ HREF="9_Formatted_output.html#SECTION000103000000000000000"><SPAN CLASS="arabic">9</SPAN>.<SPAN CLASS="arabic">3</SPAN> printd</A>
+<LI><A ID="tex2html407"
+ HREF="9_Formatted_output.html#SECTION000104000000000000000"><SPAN CLASS="arabic">9</SPAN>.<SPAN CLASS="arabic">4</SPAN> printdln</A>
+<LI><A ID="tex2html408"
+ HREF="9_Formatted_output.html#SECTION000105000000000000000"><SPAN CLASS="arabic">9</SPAN>.<SPAN CLASS="arabic">5</SPAN> println</A>
+<LI><A ID="tex2html409"
+ HREF="9_Formatted_output.html#SECTION000106000000000000000"><SPAN CLASS="arabic">9</SPAN>.<SPAN CLASS="arabic">6</SPAN> sprint</A>
+<LI><A ID="tex2html410"
+ HREF="9_Formatted_output.html#SECTION000107000000000000000"><SPAN CLASS="arabic">9</SPAN>.<SPAN CLASS="arabic">7</SPAN> sprintf</A>
+</UL>
+<!--End of Table of Child-Links-->
+<HR>
+
+<H1><A ID="SECTION000100000000000000000">
+<SPAN CLASS="arabic">9</SPAN> Formatted output</A>
+</H1>
+
+<P>
+
+<H2><A ID="SECTION000101000000000000000"></A>
+<A NAME="1183"></A>
+<BR>
+<SPAN CLASS="arabic">9</SPAN>.<SPAN CLASS="arabic">1</SPAN> print
+</H2>
+General syntax:
+
+<P>
+
+<DL class="COMPACT">
+<DT>
+<DD><PRE>
+print ()
+</PRE>
+</DD>
+</DL>This function prints a single value of any type.
+
+<P>
+
+<H2><A ID="SECTION000102000000000000000"></A>
+<A NAME="1189"></A>
+<BR>
+<SPAN CLASS="arabic">9</SPAN>.<SPAN CLASS="arabic">2</SPAN> printf
+</H2>
+General syntax:
+
+<P>
+
+<DL class="COMPACT">
+<DT>
+<DD><PRE>
+printf (fmt:string, ...)
+</PRE>
+</DD>
+</DL>The printf function takes a formatting string as an argument, and a number
+of values of corresponding types, and prints them all. The format must be a
+literal string constant. The printf formatting directives are similar to those
+of C, except that they are fully checked for type by the translator.
+
+<P>
+The formatting string can contain tags that are defined as follows:
+
+<P>
+
+<DL class="COMPACT">
+<DT>
+<DD><PRE>
+%[flags][width][.precision][length]specifier
+</PRE>
+</DD>
+</DL>Where <SPAN CLASS="texttt">specifier</SPAN> is required and defines the type and the interpretation
+of the value of the corresponding argument. The following table shows the
+details of the specifier parameter:
+
+<P>
+<BR><P></P>
+<DIV class="CENTER">
+
+<A ID="1200"></A>
+<TABLE class="PAD BORDER" style="">
+<CAPTION><STRONG>Table:</STRONG>
+printf specifier values</CAPTION>
+<TR><TH CLASS="LEFT TOP" WIDTH=72>
+<DIV class="LEFT"3691>
+<SPAN CLASS="textbf">Specifier</SPAN>
+</DIV></TH>
+<TH CLASS="LEFT TOP" WIDTH=252>
+<DIV class="LEFT"3693>
+<SPAN CLASS="textbf">Output</SPAN>
+</DIV></TH>
+<TH CLASS="LEFT TOP" WIDTH=90>
+<DIV class="LEFT"3695>
+<SPAN CLASS="textbf">Example</SPAN>
+<BR>
+d or i
+</DIV></TH>
+</TR>
+</TABLE>
+</DIV>
+<BR>
+The tag can also contain <SPAN CLASS="texttt">flags</SPAN>, <SPAN CLASS="texttt">width</SPAN>, <SPAN CLASS="texttt">.precision</SPAN>
+and <SPAN CLASS="texttt">modifiers</SPAN> sub-specifiers, which are optional and follow these
+specifications:
+
+<P>
+<BR><P></P>
+<DIV class="CENTER">
+
+<A ID="1218"></A>
+<TABLE class="PAD BORDER" style="">
+<CAPTION><STRONG>Table:</STRONG>
+printf flag values</CAPTION>
+<TR><TH CLASS="LEFT TOP" WIDTH=108>
+<DIV class="LEFT"3700>
+<SPAN CLASS="textbf">Flags</SPAN>
+</DIV></TH>
+<TH CLASS="LEFT TOP" WIDTH=324>
+<DIV class="LEFT"3702>
+<SPAN CLASS="textbf">Description</SPAN>
+<BR>
+
+- (minus sign)
+</DIV></TH>
+</TR>
+</TABLE>
+</DIV>
+<BR>
+
+<P>
+<BR><P></P>
+<DIV class="CENTER">
+
+<A ID="1237"></A>
+<TABLE class="PAD BORDER" style="">
+<CAPTION><STRONG>Table:</STRONG>
+printf width values</CAPTION>
+<TR><TH CLASS="LEFT TOP" WIDTH=108>
+<DIV class="LEFT"3707>
+<SPAN CLASS="textbf">Width</SPAN>
+</DIV></TH>
+<TH CLASS="LEFT TOP" WIDTH=324>
+<DIV class="LEFT"3709>
+<SPAN CLASS="textbf">Description</SPAN>
+<BR>
+
+(number)
+</DIV></TH>
+</TR>
+</TABLE>
+</DIV>
+<BR>
+
+<P>
+<BR><P></P>
+<DIV class="CENTER">
+
+<P>
+
+<P>
+<A ID="1248"></A>
+<TABLE class="PAD BORDER" style="">
+<CAPTION><STRONG>Table:</STRONG>
+printf precision values</CAPTION>
+<TR><TH CLASS="LEFT TOP" WIDTH=108>
+<DIV class="LEFT"3714>
+<SPAN CLASS="textbf">Precision</SPAN>
+</DIV></TH>
+<TH CLASS="LEFT TOP" WIDTH=324>
+<DIV class="LEFT"3716>
+<SPAN CLASS="textbf">Description</SPAN>
+<BR>
+
+.number
+</DIV></TH>
+</TR>
+</TABLE>
+</DIV>
+<BR>
+
+<P>
+<SPAN CLASS="textbf">Binary Write Examples</SPAN>
+
+<P>
+The following is an example of using the binary write functions:
+
+<P>
+
+<DL class="COMPACT">
+<DT>
+<DD><PRE>
+probe begin {
+ for (i = 97; i < 110; i++)
+ printf("%3d: %1b%1b%1b\n", i, i, i-32, i-64)
+ exit()
+}
+</PRE>
+</DD>
+</DL>This prints:
+
+<P>
+
+<DL class="COMPACT">
+<DT>
+<DD><PRE>
+ 97: aA!
+ 98: bB"
+ 99: cC#
+100: dD$
+101: eE%
+102: fF&
+103: gG'
+104: hH(
+105: iI)
+106: jJ*
+107: kK+
+108: lL,
+109: mM-
+</PRE>
+</DD>
+</DL>Another example:
+
+<P>
+
+<DL class="COMPACT">
+<DT>
+<DD><PRE>
+stap -e 'probe begin{printf("%b%b", 0xc0dedbad, \
+0x12345678);exit()}' | hexdump -C
+</PRE>
+</DD>
+</DL>This prints:
+
+<P>
+
+<DL class="COMPACT">
+<DT>
+<DD><PRE>
+00000000 ad db de c0 00 00 00 00 78 56 34 12 00 00 00 00 |........xV4.....|
+00000010
+</PRE>
+</DD>
+</DL>Another example:
+
+<P>
+
+<DL class="COMPACT">
+<DT>
+<DD><PRE>
+probe begin{
+ printf("%1b%1b%1blo %1b%1brld\n", 72,101,108,87,111)
+ exit()
+}
+</PRE>
+</DD>
+</DL>This prints:
+
+<P>
+
+<DL class="COMPACT">
+<DT>
+<DD><PRE>
+Hello World
+</PRE>
+</DD>
+</DL>
+<P>
+
+<H2><A ID="SECTION000103000000000000000"></A>
+<A NAME="1288"></A>
+<BR>
+<SPAN CLASS="arabic">9</SPAN>.<SPAN CLASS="arabic">3</SPAN> printd
+</H2>
+General syntax:
+
+<P>
+
+<DL class="COMPACT">
+<DT>
+<DD><PRE>
+printd (delimiter:string, ...)
+</PRE>
+</DD>
+</DL>This function takes a string delimiter and two or more values of any type, then
+prints the values with the delimiter interposed. The delimiter must be a
+literal string constant.
+
+<P>
+For example:
+
+<DL class="COMPACT">
+<DT>
+<DD><PRE>
+printd("/", "one", "two", "three", 4, 5, 6)
+</PRE>
+</DD>
+</DL>prints:
+
+<DL class="COMPACT">
+<DT>
+<DD><PRE>
+one/two/three/4/5/6
+</PRE>
+</DD>
+</DL>
+<P>
+
+<H2><A ID="SECTION000104000000000000000"></A>
+<A NAME="1302"></A>
+<BR>
+<SPAN CLASS="arabic">9</SPAN>.<SPAN CLASS="arabic">4</SPAN> printdln
+</H2>
+General syntax:
+
+<P>
+
+<DL class="COMPACT">
+<DT>
+<DD><PRE>
+printdln (delimiter:string, ...)
+</PRE>
+</DD>
+</DL>This function operates like <SPAN CLASS="texttt">printd</SPAN>, but also appends a newline.
+
+<P>
+
+<H2><A ID="SECTION000105000000000000000"></A>
+<A NAME="1309"></A>
+<BR>
+<SPAN CLASS="arabic">9</SPAN>.<SPAN CLASS="arabic">5</SPAN> println
+</H2>
+General syntax:
+
+<P>
+
+<DL class="COMPACT">
+<DT>
+<DD><PRE>
+println ()
+</PRE>
+</DD>
+</DL>This function prints a single value like <SPAN CLASS="texttt">print</SPAN>,
+but also appends a newline.
+
+<P>
+
+<H2><A ID="SECTION000106000000000000000"></A>
+<A NAME="1316"></A>
+<BR>
+<SPAN CLASS="arabic">9</SPAN>.<SPAN CLASS="arabic">6</SPAN> sprint
+</H2>
+General syntax:
+
+<P>
+
+<DL class="COMPACT">
+<DT>
+<DD><PRE>
+sprint:string ()
+</PRE>
+</DD>
+</DL>This function operates like <SPAN CLASS="texttt">print</SPAN>, but returns the string rather
+than printing it.
+
+<P>
+
+<H2><A ID="SECTION000107000000000000000"></A>
+<A NAME="1323"></A>
+<BR>
+<SPAN CLASS="arabic">9</SPAN>.<SPAN CLASS="arabic">7</SPAN> sprintf
+</H2>
+General syntax:
+
+<P>
+
+<DL class="COMPACT">
+<DT>
+<DD><PRE>
+sprintf:string (fmt:string, ...)
+</PRE>
+</DD>
+</DL>This function operates like <SPAN CLASS="texttt">printf</SPAN>, but returns the formatted string
+rather than printing it.
+
+<P>
+
+<DIV CLASS="navigation"><HR>
+<!--Navigation Panel-->
+<A
+ HREF="10_Tapset_defined_functions.html">
+<IMG WIDTH="37" HEIGHT="24" ALT="next" SRC="next.png"></A>
+<A
+ HREF="langref.html">
+<IMG WIDTH="26" HEIGHT="24" ALT="up" SRC="up.png"></A>
+<A
+ HREF="8_Statistics_aggregates.html">
+<IMG WIDTH="63" HEIGHT="24" ALT="previous" SRC="prev.png"></A>
+<A ID="tex2html400"
+ HREF="Contents.html">
+<IMG WIDTH="65" HEIGHT="24" ALT="contents" SRC="contents.png"></A>
+<A ID="tex2html402"
+ HREF="Index.html">
+<IMG WIDTH="43" HEIGHT="24" ALT="index" SRC="index.png"></A>
+<BR>
+<B> Next:</B> <A
+ HREF="10_Tapset_defined_functions.html">10 Tapset-defined functions</A>
+<B> Up:</B> <A
+ HREF="langref.html">SystemTap Language Reference</A>
+<B> Previous:</B> <A
+ HREF="8_Statistics_aggregates.html">8 Statistics (aggregates)</A>
+ <B> <A ID="tex2html401"
+ HREF="Contents.html">Contents</A></B>
+ <B> <A ID="tex2html403"
+ HREF="Index.html">Index</A></B> </DIV>
+<!--End of Navigation Panel-->
+
+</BODY>
+</HTML>
--- /dev/null
+<!DOCTYPE HTML>
+
+<!--Converted with LaTeX2HTML 2020.2 (Released July 1, 2020) -->
+<HTML lang="en">
+<HEAD>
+<TITLE>About this document ...</TITLE>
+<META NAME="description" CONTENT="About this document ...">
+<META NAME="keywords" CONTENT="langref">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+
+<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=utf-8">
+<META NAME="viewport" CONTENT="width=device-width, initial-scale=1.0">
+<META NAME="Generator" CONTENT="LaTeX2HTML v2020.2">
+
+<LINK REL="STYLESHEET" HREF="langref.css">
+
+<LINK REL="previous" HREF="Index.html">
+</HEAD>
+
+<BODY >
+
+<DIV CLASS="navigation"><!--Navigation Panel-->
+<IMG WIDTH="37" HEIGHT="24" ALT="next" SRC="next_g.png">
+<A
+ HREF="langref.html">
+<IMG WIDTH="26" HEIGHT="24" ALT="up" SRC="up.png"></A>
+<A
+ HREF="Index.html">
+<IMG WIDTH="63" HEIGHT="24" ALT="previous" SRC="prev.png"></A>
+<A ID="tex2html421"
+ HREF="Contents.html">
+<IMG WIDTH="65" HEIGHT="24" ALT="contents" SRC="contents.png"></A>
+<A ID="tex2html423"
+ HREF="Index.html">
+<IMG WIDTH="43" HEIGHT="24" ALT="index" SRC="index.png"></A>
+<BR>
+<B> Up:</B> <A
+ HREF="langref.html">SystemTap Language Reference</A>
+<B> Previous:</B> <A
+ HREF="Index.html">Index</A>
+ <B> <A ID="tex2html422"
+ HREF="Contents.html">Contents</A></B>
+ <B> <A ID="tex2html424"
+ HREF="Index.html">Index</A></B>
+<BR>
+<BR></DIV>
+<!--End of Navigation Panel-->
+
+<H1><A ID="SECTION000140000000000000000">
+About this document ...</A>
+</H1>
+ <STRONG>SystemTap Language Reference</STRONG><P>
+This document was generated using the
+<A HREF="http://www.latex2html.org/">LaTeX2HTML</A> translator Version 2020.2 (Released July 1, 2020)
+<P>
+The command line arguments were: <BR>
+ <kbd>latex2html -noaddress -show_section_numbers -custom_titles -local_icons -split 4 langref.tex -dir /tmp/stapdocsZU6/htdocs/langref/</kbd>
+<P>
+The translation was initiated on 2021-03-01
+<BR><HR>
+
+</BODY>
+</HTML>
--- /dev/null
+<!DOCTYPE HTML>
+
+<!--Converted with LaTeX2HTML 2020.2 (Released July 1, 2020) -->
+<HTML lang="en">
+<HEAD>
+<TITLE>Contents</TITLE>
+<META NAME="description" CONTENT="Contents">
+<META NAME="keywords" CONTENT="langref">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+
+<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=utf-8">
+<META NAME="viewport" CONTENT="width=device-width, initial-scale=1.0">
+<META NAME="Generator" CONTENT="LaTeX2HTML v2020.2">
+
+<LINK REL="STYLESHEET" HREF="langref.css">
+
+<LINK REL="next" HREF="1_SystemTap_overview.html">
+<LINK REL="previous" HREF="langref.html">
+<LINK REL="next" HREF="1_SystemTap_overview.html">
+</HEAD>
+
+<BODY >
+
+<DIV CLASS="navigation"><!--Navigation Panel-->
+<A
+ HREF="1_SystemTap_overview.html">
+<IMG WIDTH="37" HEIGHT="24" ALT="next" SRC="next.png"></A>
+<A
+ HREF="langref.html">
+<IMG WIDTH="26" HEIGHT="24" ALT="up" SRC="up.png"></A>
+<A
+ HREF="langref.html">
+<IMG WIDTH="63" HEIGHT="24" ALT="previous" SRC="prev.png"></A>
+<A ID="tex2html162"
+ HREF="Index.html">
+<IMG WIDTH="43" HEIGHT="24" ALT="index" SRC="index.png"></A>
+<BR>
+<B> Next:</B> <A
+ HREF="1_SystemTap_overview.html">1 SystemTap overview</A>
+<B> Up:</B> <A
+ HREF="langref.html">SystemTap Language Reference</A>
+<B> Previous:</B> <A
+ HREF="langref.html">SystemTap Language Reference</A>
+ <B> <A ID="tex2html163"
+ HREF="Index.html">Index</A></B>
+<BR>
+<BR></DIV>
+<!--End of Navigation Panel-->
+<BR>
+
+<H2><A ID="SECTION00010000000000000000">
+Contents</A>
+</H2>
+<!--Table of Contents-->
+
+<UL CLASS="TofC">
+<LI><A ID="tex2html164"
+ HREF="1_SystemTap_overview.html"><SPAN CLASS="arabic">1</SPAN> SystemTap overview</A>
+<UL>
+<LI><A ID="tex2html165"
+ HREF="1_SystemTap_overview.html#SECTION00021000000000000000"><SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN> About this guide</A>
+<LI><A ID="tex2html166"
+ HREF="1_SystemTap_overview.html#SECTION00022000000000000000"><SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">2</SPAN> Reasons to use SystemTap</A>
+<LI><A ID="tex2html167"
+ HREF="1_SystemTap_overview.html#SECTION00023000000000000000"><SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">3</SPAN> Event-action language</A>
+<LI><A ID="tex2html168"
+ HREF="1_SystemTap_overview.html#SECTION00024000000000000000"><SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">4</SPAN> Sample SystemTap scripts</A>
+<LI><A ID="tex2html169"
+ HREF="1_SystemTap_overview.html#SECTION00025000000000000000"><SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">5</SPAN> The stap command</A>
+<LI><A ID="tex2html170"
+ HREF="1_SystemTap_overview.html#SECTION00026000000000000000"><SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">6</SPAN> Safety and security</A>
+</UL>
+<BR>
+<LI><A ID="tex2html171"
+ HREF="2_Types_SystemTap_scripts.html"><SPAN CLASS="arabic">2</SPAN> Types of SystemTap scripts</A>
+<UL>
+<LI><A ID="tex2html172"
+ HREF="2_Types_SystemTap_scripts.html#SECTION00031000000000000000"><SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN> Probe scripts</A>
+<LI><A ID="tex2html173"
+ HREF="2_Types_SystemTap_scripts.html#SECTION00032000000000000000"><SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN> Tapset scripts</A>
+</UL>
+<BR>
+<LI><A ID="tex2html174"
+ HREF="3_Components_SystemTap_scri.html"><SPAN CLASS="arabic">3</SPAN> Components of a SystemTap script</A>
+<UL>
+<LI><A ID="tex2html175"
+ HREF="3_Components_SystemTap_scri.html#SECTION00041000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">1</SPAN> Probe definitions</A>
+<LI><A ID="tex2html176"
+ HREF="3_Components_SystemTap_scri.html#SECTION00042000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN> Probe aliases</A>
+<LI><A ID="tex2html177"
+ HREF="3_Components_SystemTap_scri.html#SECTION00043000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN> Variables</A>
+<LI><A ID="tex2html178"
+ HREF="3_Components_SystemTap_scri.html#SECTION00044000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">4</SPAN> Auxiliary functions</A>
+<LI><A ID="tex2html179"
+ HREF="3_Components_SystemTap_scri.html#SECTION00045000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN> Embedded C</A>
+<LI><A ID="tex2html180"
+ HREF="3_Components_SystemTap_scri.html#SECTION00046000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">6</SPAN> Embedded C functions</A>
+<LI><A ID="tex2html181"
+ HREF="3_Components_SystemTap_scri.html#SECTION00047000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">7</SPAN> Embedded C pragma comments</A>
+<LI><A ID="tex2html182"
+ HREF="3_Components_SystemTap_scri.html#SECTION00048000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">8</SPAN> Accessing script level global variables</A>
+</UL>
+<BR>
+<LI><A ID="tex2html183"
+ HREF="4_Probe_points.html"><SPAN CLASS="arabic">4</SPAN> Probe points</A>
+<UL>
+<LI><A ID="tex2html184"
+ HREF="4_Probe_points.html#SECTION00051000000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN> General syntax</A>
+<LI><A ID="tex2html185"
+ HREF="4_Probe_points.html#SECTION00052000000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">2</SPAN> Built-in probe point types (DWARF probes)</A>
+<LI><A ID="tex2html186"
+ HREF="4_Probe_points.html#SECTION00053000000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">3</SPAN> Function return probes</A>
+<LI><A ID="tex2html187"
+ HREF="4_Probe_points.html#SECTION00054000000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">4</SPAN> DWARF-less probing</A>
+<LI><A ID="tex2html188"
+ HREF="4_Probe_points.html#SECTION00055000000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">5</SPAN> Userspace probing</A>
+<LI><A ID="tex2html189"
+ HREF="4_Probe_points.html#SECTION00056000000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">6</SPAN> Java probes</A>
+<LI><A ID="tex2html190"
+ HREF="4_Probe_points.html#SECTION00057000000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">7</SPAN> PROCFS probes</A>
+<LI><A ID="tex2html191"
+ HREF="4_Probe_points.html#SECTION00058000000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">8</SPAN> Marker probes</A>
+<LI><A ID="tex2html192"
+ HREF="4_Probe_points.html#SECTION00059000000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">9</SPAN> Tracepoints</A>
+<LI><A ID="tex2html193"
+ HREF="4_Probe_points.html#SECTION000510000000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">10</SPAN> Syscall probes</A>
+<LI><A ID="tex2html194"
+ HREF="4_Probe_points.html#SECTION000511000000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">11</SPAN> Timer probes</A>
+<LI><A ID="tex2html195"
+ HREF="4_Probe_points.html#SECTION000512000000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">12</SPAN> Special probe points</A>
+</UL>
+<BR>
+<LI><A ID="tex2html196"
+ HREF="5_Language_elements.html"><SPAN CLASS="arabic">5</SPAN> Language elements</A>
+<UL>
+<LI><A ID="tex2html197"
+ HREF="5_Language_elements.html#SECTION00061000000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">1</SPAN> Identifiers</A>
+<LI><A ID="tex2html198"
+ HREF="5_Language_elements.html#SECTION00062000000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">2</SPAN> Data types</A>
+<LI><A ID="tex2html199"
+ HREF="5_Language_elements.html#SECTION00063000000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">3</SPAN> Semicolons</A>
+<LI><A ID="tex2html200"
+ HREF="5_Language_elements.html#SECTION00064000000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">4</SPAN> Comments</A>
+<LI><A ID="tex2html201"
+ HREF="5_Language_elements.html#SECTION00065000000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">5</SPAN> Whitespace</A>
+<LI><A ID="tex2html202"
+ HREF="5_Language_elements.html#SECTION00066000000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">6</SPAN> Expressions</A>
+<LI><A ID="tex2html203"
+ HREF="5_Language_elements.html#SECTION00067000000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">7</SPAN> Literals passed in from the stap command line</A>
+<LI><A ID="tex2html204"
+ HREF="5_Language_elements.html#SECTION00068000000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">8</SPAN> Conditional compilation</A>
+<LI><A ID="tex2html205"
+ HREF="5_Language_elements.html#SECTION00069000000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">9</SPAN> Preprocessor macros</A>
+</UL>
+<BR>
+<LI><A ID="tex2html206"
+ HREF="6_Statement_types.html"><SPAN CLASS="arabic">6</SPAN> Statement types</A>
+<UL>
+<LI><A ID="tex2html207"
+ HREF="6_Statement_types.html#SECTION00071000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN> break and continue</A>
+<LI><A ID="tex2html208"
+ HREF="6_Statement_types.html#SECTION00072000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN> try/catch</A>
+<LI><A ID="tex2html209"
+ HREF="6_Statement_types.html#SECTION00073000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN> delete</A>
+<LI><A ID="tex2html210"
+ HREF="6_Statement_types.html#SECTION00074000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">4</SPAN> EXP (expression)</A>
+<LI><A ID="tex2html211"
+ HREF="6_Statement_types.html#SECTION00075000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">5</SPAN> for</A>
+<LI><A ID="tex2html212"
+ HREF="6_Statement_types.html#SECTION00076000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">6</SPAN> foreach</A>
+<LI><A ID="tex2html213"
+ HREF="6_Statement_types.html#SECTION00077000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">7</SPAN> if</A>
+<LI><A ID="tex2html214"
+ HREF="6_Statement_types.html#SECTION00078000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">8</SPAN> next</A>
+<LI><A ID="tex2html215"
+ HREF="6_Statement_types.html#SECTION00079000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">9</SPAN> ; (null statement)</A>
+<LI><A ID="tex2html216"
+ HREF="6_Statement_types.html#SECTION000710000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">10</SPAN> return</A>
+<LI><A ID="tex2html217"
+ HREF="6_Statement_types.html#SECTION000711000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">11</SPAN> { } (statement block)</A>
+<LI><A ID="tex2html218"
+ HREF="6_Statement_types.html#SECTION000712000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">12</SPAN> while</A>
+</UL>
+<BR>
+<LI><A ID="tex2html219"
+ HREF="7_Associative_arrays.html"><SPAN CLASS="arabic">7</SPAN> Associative arrays</A>
+<UL>
+<LI><A ID="tex2html220"
+ HREF="7_Associative_arrays.html#SECTION00081000000000000000"><SPAN CLASS="arabic">7</SPAN>.<SPAN CLASS="arabic">1</SPAN> Examples</A>
+<LI><A ID="tex2html221"
+ HREF="7_Associative_arrays.html#SECTION00082000000000000000"><SPAN CLASS="arabic">7</SPAN>.<SPAN CLASS="arabic">2</SPAN> Types of values</A>
+<LI><A ID="tex2html222"
+ HREF="7_Associative_arrays.html#SECTION00083000000000000000"><SPAN CLASS="arabic">7</SPAN>.<SPAN CLASS="arabic">3</SPAN> Array capacity</A>
+<LI><A ID="tex2html223"
+ HREF="7_Associative_arrays.html#SECTION00084000000000000000"><SPAN CLASS="arabic">7</SPAN>.<SPAN CLASS="arabic">4</SPAN> Array wrapping</A>
+<LI><A ID="tex2html224"
+ HREF="7_Associative_arrays.html#SECTION00085000000000000000"><SPAN CLASS="arabic">7</SPAN>.<SPAN CLASS="arabic">5</SPAN> Iteration, foreach</A>
+<LI><A ID="tex2html225"
+ HREF="7_Associative_arrays.html#SECTION00086000000000000000"><SPAN CLASS="arabic">7</SPAN>.<SPAN CLASS="arabic">6</SPAN> Deletion</A>
+</UL>
+<BR>
+<LI><A ID="tex2html226"
+ HREF="8_Statistics_aggregates.html"><SPAN CLASS="arabic">8</SPAN> Statistics (aggregates)</A>
+<UL>
+<LI><A ID="tex2html227"
+ HREF="8_Statistics_aggregates.html#SECTION00091000000000000000"><SPAN CLASS="arabic">8</SPAN>.<SPAN CLASS="arabic">1</SPAN> The aggregation (< < <) operator</A>
+<LI><A ID="tex2html228"
+ HREF="8_Statistics_aggregates.html#SECTION00092000000000000000"><SPAN CLASS="arabic">8</SPAN>.<SPAN CLASS="arabic">2</SPAN> Extraction functions</A>
+<LI><A ID="tex2html229"
+ HREF="8_Statistics_aggregates.html#SECTION00093000000000000000"><SPAN CLASS="arabic">8</SPAN>.<SPAN CLASS="arabic">3</SPAN> Integer extractors</A>
+<LI><A ID="tex2html230"
+ HREF="8_Statistics_aggregates.html#SECTION00094000000000000000"><SPAN CLASS="arabic">8</SPAN>.<SPAN CLASS="arabic">4</SPAN> Histogram extractors</A>
+<LI><A ID="tex2html231"
+ HREF="8_Statistics_aggregates.html#SECTION00095000000000000000"><SPAN CLASS="arabic">8</SPAN>.<SPAN CLASS="arabic">5</SPAN> Deletion</A>
+</UL>
+<BR>
+<LI><A ID="tex2html232"
+ HREF="9_Formatted_output.html"><SPAN CLASS="arabic">9</SPAN> Formatted output</A>
+<UL>
+<LI><A ID="tex2html233"
+ HREF="9_Formatted_output.html#SECTION000101000000000000000"><SPAN CLASS="arabic">9</SPAN>.<SPAN CLASS="arabic">1</SPAN> print</A>
+<LI><A ID="tex2html234"
+ HREF="9_Formatted_output.html#SECTION000102000000000000000"><SPAN CLASS="arabic">9</SPAN>.<SPAN CLASS="arabic">2</SPAN> printf</A>
+<LI><A ID="tex2html235"
+ HREF="9_Formatted_output.html#SECTION000103000000000000000"><SPAN CLASS="arabic">9</SPAN>.<SPAN CLASS="arabic">3</SPAN> printd</A>
+<LI><A ID="tex2html236"
+ HREF="9_Formatted_output.html#SECTION000104000000000000000"><SPAN CLASS="arabic">9</SPAN>.<SPAN CLASS="arabic">4</SPAN> printdln</A>
+<LI><A ID="tex2html237"
+ HREF="9_Formatted_output.html#SECTION000105000000000000000"><SPAN CLASS="arabic">9</SPAN>.<SPAN CLASS="arabic">5</SPAN> println</A>
+<LI><A ID="tex2html238"
+ HREF="9_Formatted_output.html#SECTION000106000000000000000"><SPAN CLASS="arabic">9</SPAN>.<SPAN CLASS="arabic">6</SPAN> sprint</A>
+<LI><A ID="tex2html239"
+ HREF="9_Formatted_output.html#SECTION000107000000000000000"><SPAN CLASS="arabic">9</SPAN>.<SPAN CLASS="arabic">7</SPAN> sprintf</A>
+</UL>
+<BR>
+<LI><A ID="tex2html240"
+ HREF="10_Tapset_defined_functions.html"><SPAN CLASS="arabic">10</SPAN> Tapset-defined functions</A>
+<LI><A ID="tex2html241"
+ HREF="11_Further_Reference.html"><SPAN CLASS="arabic">11</SPAN> For Further Reference</A>
+<LI><A ID="tex2html242"
+ HREF="Index.html">Index</A>
+</UL>
+<!--End of Table of Contents-->
+
+
+<P>
+<BR><HR>
+
+</BODY>
+</HTML>
--- /dev/null
+<!DOCTYPE HTML>
+
+<!--Converted with LaTeX2HTML 2020.2 (Released July 1, 2020) -->
+<HTML lang="en">
+<HEAD>
+<TITLE>Index</TITLE>
+<META NAME="description" CONTENT="Index">
+<META NAME="keywords" CONTENT="langref">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+
+<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=utf-8">
+<META NAME="viewport" CONTENT="width=device-width, initial-scale=1.0">
+<META NAME="Generator" CONTENT="LaTeX2HTML v2020.2">
+
+<LINK REL="STYLESHEET" HREF="langref.css">
+
+<LINK REL="next" HREF="About_this_document.html">
+<LINK REL="previous" HREF="11_Further_Reference.html">
+<LINK REL="next" HREF="About_this_document.html">
+</HEAD>
+
+<BODY >
+
+<DIV CLASS="navigation"><!--Navigation Panel-->
+<A
+ HREF="About_this_document.html">
+<IMG WIDTH="37" HEIGHT="24" ALT="next" SRC="next.png"></A>
+<A
+ HREF="langref.html">
+<IMG WIDTH="26" HEIGHT="24" ALT="up" SRC="up.png"></A>
+<A
+ HREF="11_Further_Reference.html">
+<IMG WIDTH="63" HEIGHT="24" ALT="previous" SRC="prev.png"></A>
+<A ID="tex2html419"
+ HREF="Contents.html">
+<IMG WIDTH="65" HEIGHT="24" ALT="contents" SRC="contents.png"></A>
+<BR>
+<B> Next:</B> <A
+ HREF="About_this_document.html">About this document ...</A>
+<B> Up:</B> <A
+ HREF="langref.html">SystemTap Language Reference</A>
+<B> Previous:</B> <A
+ HREF="11_Further_Reference.html">11 For Further Reference</A>
+ <B> <A ID="tex2html420"
+ HREF="Contents.html">Contents</A></B>
+<BR>
+<BR></DIV>
+<!--End of Navigation Panel-->
+<BR>
+
+<H2><A ID="SECTION000130000000000000000">
+Index</A>
+</H2><DL COMPACT>
+<DT><STRONG>$</STRONG>
+<DD><A HREF="5_Language_elements.html#868"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">7</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DT><STRONG>+=</STRONG>
+<DD><A HREF="3_Components_SystemTap_scri.html#161"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
+<DT><STRONG>;</STRONG>
+<DD><A HREF="5_Language_elements.html#773"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
+ | <A HREF="6_Statement_types.html#1042"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
+<DT><STRONG>< < <</STRONG>
+<DD><A HREF="8_Statistics_aggregates.html#1400"><SPAN CLASS="arabic">8</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DT><STRONG>=</STRONG>
+<DD><A HREF="3_Components_SystemTap_scri.html#154"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DT><STRONG>?</STRONG>
+<DD><A HREF="4_Probe_points.html#309"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">4</SPAN></A>
+ | <A HREF="5_Language_elements.html#816"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">7</SPAN></A>
+<DT><STRONG>{ }</STRONG>
+<DD><A HREF="6_Statement_types.html#1057"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">11</SPAN></A>
+<DT><STRONG>aggregates</STRONG>
+<DD><A HREF="8_Statistics_aggregates.html#1105"><SPAN CLASS="arabic">8</SPAN></A>
+<DT><STRONG>arch</STRONG>
+<DD><A HREF="5_Language_elements.html#924"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">8</SPAN>.<SPAN CLASS="arabic">4</SPAN></A>
+<DT><STRONG>associative arrays</STRONG>
+<DD><A HREF="7_Associative_arrays.html#1071"><SPAN CLASS="arabic">7</SPAN></A>
+<DT><STRONG>asynchronous</STRONG>
+<DD><A HREF="4_Probe_points.html#292"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DT><STRONG>auxiliary functions</STRONG>
+<DD><A HREF="3_Components_SystemTap_scri.html#203"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">4</SPAN></A>
+<DT><STRONG>avg</STRONG>
+<DD><A HREF="8_Statistics_aggregates.html#1131"><SPAN CLASS="arabic">8</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
+<DT><STRONG>begin</STRONG>
+<DD><A HREF="4_Probe_points.html#708"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">12</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DT><STRONG>binary</STRONG>
+<DD><A HREF="5_Language_elements.html#785"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+ | <A HREF="5_Language_elements.html#793"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
+<DT><STRONG>braceexpansion</STRONG>
+<DD><A HREF="4_Probe_points.html#315"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
+<DT><STRONG>break</STRONG>
+<DD><A HREF="6_Statement_types.html#966"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DT><STRONG>built-in probes</STRONG>
+<DD><A HREF="4_Probe_points.html#321"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
+<DT><STRONG>catch</STRONG>
+<DD><A HREF="6_Statement_types.html#974"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
+<DT><STRONG>comments</STRONG>
+<DD><A HREF="5_Language_elements.html#775"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">4</SPAN></A>
+<DT><STRONG>comparison</STRONG>
+<DD><A HREF="5_Language_elements.html#808"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">6</SPAN></A>
+<DT><STRONG>conditions</STRONG>
+<DD><A HREF="5_Language_elements.html#889"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">8</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DT><STRONG>constraints</STRONG>
+<DD><A HREF="1_SystemTap_overview.html#96"><SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">6</SPAN></A>
+<DT><STRONG>continue</STRONG>
+<DD><A HREF="6_Statement_types.html#967"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DT><STRONG>count</STRONG>
+<DD><A HREF="8_Statistics_aggregates.html#1123"><SPAN CLASS="arabic">8</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DT><STRONG>data types</STRONG>
+<DD><A HREF="5_Language_elements.html#749"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
+<DT><STRONG>defined target variable</STRONG>
+<DD><A HREF="5_Language_elements.html#900"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">8</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
+<DT><STRONG>delete</STRONG>
+<DD><A HREF="6_Statement_types.html#982"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
+ | <A HREF="7_Associative_arrays.html#1101"><SPAN CLASS="arabic">7</SPAN>.<SPAN CLASS="arabic">6</SPAN></A>
+ | <A HREF="8_Statistics_aggregates.html#1178"><SPAN CLASS="arabic">8</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
+<DT><STRONG>dwarf probes</STRONG>
+<DD><A HREF="4_Probe_points.html#322"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
+<DT><STRONG>DWARF-less probing</STRONG>
+<DD><A HREF="4_Probe_points.html#412"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">4</SPAN></A>
+<DT><STRONG>embedded C</STRONG>
+<DD><A HREF="3_Components_SystemTap_scri.html#238"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
+<DT><STRONG>end</STRONG>
+<DD><A HREF="4_Probe_points.html#712"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">12</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
+<DT><STRONG>epilogue-style aliases</STRONG>
+<DD><A HREF="3_Components_SystemTap_scri.html#160"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
+<DT><STRONG>error</STRONG>
+<DD><A HREF="4_Probe_points.html#718"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">12</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
+<DT><STRONG>example scripts</STRONG>
+<DD><A HREF="1_SystemTap_overview.html#52"><SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">4</SPAN></A>
+<DT><STRONG>expression</STRONG>
+<DD><A HREF="6_Statement_types.html#999"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">4</SPAN></A>
+<DT><STRONG>expressions</STRONG>
+<DD><A HREF="5_Language_elements.html#783"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">6</SPAN></A>
+<DT><STRONG>extraction</STRONG>
+<DD><A HREF="8_Statistics_aggregates.html#1120"><SPAN CLASS="arabic">8</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
+<DT><STRONG>fn</STRONG>
+<DD><A HREF="5_Language_elements.html#822"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
+<DT><STRONG>for</STRONG>
+<DD><A HREF="6_Statement_types.html#1002"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
+<DT><STRONG>foreach</STRONG>
+<DD><A HREF="6_Statement_types.html#1011"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">6</SPAN></A>
+ | <A HREF="7_Associative_arrays.html#1091"><SPAN CLASS="arabic">7</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
+<DT><STRONG>grouping</STRONG>
+<DD><A HREF="5_Language_elements.html#819"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">8</SPAN></A>
+<DT><STRONG>guru mode</STRONG>
+<DD><A HREF="3_Components_SystemTap_scri.html#239"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
+<DT><STRONG>hist_linear</STRONG>
+<DD><A HREF="8_Statistics_aggregates.html#1135"><SPAN CLASS="arabic">8</SPAN>.<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DT><STRONG>hist_log</STRONG>
+<DD><A HREF="8_Statistics_aggregates.html#1163"><SPAN CLASS="arabic">8</SPAN>.<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
+<DT><STRONG>histograms</STRONG>
+<DD><A HREF="8_Statistics_aggregates.html#1133"><SPAN CLASS="arabic">8</SPAN>.<SPAN CLASS="arabic">4</SPAN></A>
+<DT><STRONG>identifiers</STRONG>
+<DD><A HREF="5_Language_elements.html#746"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DT><STRONG>if</STRONG>
+<DD><A HREF="6_Statement_types.html#1031"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">7</SPAN></A>
+<DT><STRONG>index</STRONG>
+<DD><A HREF="5_Language_elements.html#860"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">12</SPAN></A>
+<DT><STRONG>inference</STRONG>
+<DD><A HREF="5_Language_elements.html#750"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
+<DT><STRONG>integers</STRONG>
+<DD><A HREF="5_Language_elements.html#756"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
+<DT><STRONG>Java probes</STRONG>
+<DD><A HREF="4_Probe_points.html#593"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">6</SPAN></A>
+<DT><STRONG>jiffies</STRONG>
+<DD><A HREF="4_Probe_points.html#681"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">11</SPAN></A>
+<DT><STRONG>kernel version</STRONG>
+<DD><A HREF="5_Language_elements.html#906"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">8</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
+<DT><STRONG>kernel.function</STRONG>
+<DD><A HREF="4_Probe_points.html#383"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DT><STRONG>kernel.statement</STRONG>
+<DD><A HREF="4_Probe_points.html#395"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
+<DT><STRONG>kernel_v</STRONG>
+<DD><A HREF="5_Language_elements.html#908"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">8</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
+<DT><STRONG>kernel_vr</STRONG>
+<DD><A HREF="5_Language_elements.html#907"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">8</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
+<DT><STRONG>language</STRONG>
+<DD><A HREF="1_SystemTap_overview.html#48"><SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
+<DT><STRONG>limits</STRONG>
+<DD><A HREF="1_SystemTap_overview.html#93"><SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">6</SPAN></A>
+<DT><STRONG>literals</STRONG>
+<DD><A HREF="5_Language_elements.html#752"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+ | <A HREF="5_Language_elements.html#863"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">7</SPAN></A>
+<DT><STRONG>local arrays</STRONG>
+<DD><A HREF="3_Components_SystemTap_scri.html#187"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
+<DT><STRONG>marker probes</STRONG>
+<DD><A HREF="4_Probe_points.html#635"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">8</SPAN></A>
+<DT><STRONG>max</STRONG>
+<DD><A HREF="8_Statistics_aggregates.html#1129"><SPAN CLASS="arabic">8</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">4</SPAN></A>
+<DT><STRONG>milliseconds</STRONG>
+<DD><A HREF="4_Probe_points.html#695"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">11</SPAN></A>
+<DT><STRONG>min</STRONG>
+<DD><A HREF="8_Statistics_aggregates.html#1127"><SPAN CLASS="arabic">8</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
+<DT><STRONG>module().function</STRONG>
+<DD><A HREF="4_Probe_points.html#384"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DT><STRONG>module().statement</STRONG>
+<DD><A HREF="4_Probe_points.html#396"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
+<DT><STRONG>never</STRONG>
+<DD><A HREF="4_Probe_points.html#740"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">12</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
+<DT><STRONG>next</STRONG>
+<DD><A HREF="6_Statement_types.html#1039"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">8</SPAN></A>
+<DT><STRONG>null statement</STRONG>
+<DD><A HREF="6_Statement_types.html#1043"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
+<DT><STRONG>numbers</STRONG>
+<DD><A HREF="5_Language_elements.html#757"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
+<DT><STRONG>numeric</STRONG>
+<DD><A HREF="5_Language_elements.html#796"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
+<DT><STRONG>pointer</STRONG>
+<DD><A HREF="5_Language_elements.html#825"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">10</SPAN></A>
+<DT><STRONG>Pointer typecasting</STRONG>
+<DD><A HREF="5_Language_elements.html#828"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">11</SPAN></A>
+<DT><STRONG>prefixes</STRONG>
+<DD><A HREF="4_Probe_points.html#294"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DT><STRONG>print</STRONG>
+<DD><A HREF="9_Formatted_output.html#1183"><SPAN CLASS="arabic">9</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DT><STRONG>printd</STRONG>
+<DD><A HREF="9_Formatted_output.html#1288"><SPAN CLASS="arabic">9</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
+<DT><STRONG>printdln</STRONG>
+<DD><A HREF="9_Formatted_output.html#1302"><SPAN CLASS="arabic">9</SPAN>.<SPAN CLASS="arabic">4</SPAN></A>
+<DT><STRONG>printf</STRONG>
+<DD><A HREF="9_Formatted_output.html#1189"><SPAN CLASS="arabic">9</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
+<DT><STRONG>println</STRONG>
+<DD><A HREF="9_Formatted_output.html#1309"><SPAN CLASS="arabic">9</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
+<DT><STRONG>probe aliases</STRONG>
+<DD><A HREF="3_Components_SystemTap_scri.html#133"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
+<DT><STRONG>probe points</STRONG>
+<DD><A HREF="4_Probe_points.html#282"><SPAN CLASS="arabic">4</SPAN></A>
+<DT><STRONG>probe sequence</STRONG>
+<DD><A HREF="4_Probe_points.html#728"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">12</SPAN>.<SPAN CLASS="arabic">4</SPAN></A>
+<DT><STRONG>probe syntax</STRONG>
+<DD><A HREF="4_Probe_points.html#284"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DT><STRONG>process</STRONG>
+<DD><A HREF="4_Probe_points.html#442"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
+<DT><STRONG>PROCFS probes</STRONG>
+<DD><A HREF="4_Probe_points.html#611"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">7</SPAN></A>
+<DT><STRONG>prologue-style aliases</STRONG>
+<DD><A HREF="3_Components_SystemTap_scri.html#153"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DT><STRONG>randomize</STRONG>
+<DD><A HREF="4_Probe_points.html#688"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">11</SPAN></A>
+<DT><STRONG>recursion</STRONG>
+<DD><A HREF="1_SystemTap_overview.html#74"><SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
+<DT><STRONG>return</STRONG>
+<DD><A HREF="6_Statement_types.html#1049"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">10</SPAN></A>
+<DT><STRONG>return probes</STRONG>
+<DD><A HREF="4_Probe_points.html#407"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
+<DT><STRONG>sprint</STRONG>
+<DD><A HREF="9_Formatted_output.html#1316"><SPAN CLASS="arabic">9</SPAN>.<SPAN CLASS="arabic">6</SPAN></A>
+<DT><STRONG>sprintf</STRONG>
+<DD><A HREF="9_Formatted_output.html#1323"><SPAN CLASS="arabic">9</SPAN>.<SPAN CLASS="arabic">7</SPAN></A>
+<DT><STRONG>stap</STRONG>
+<DD><A HREF="1_SystemTap_overview.html#86"><SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
+<DT><STRONG>STAP_ARG_</STRONG>
+<DD><A HREF="3_Components_SystemTap_scri.html#261"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">6</SPAN></A>
+<DT><STRONG>STAP_RETVALUE</STRONG>
+<DD><A HREF="3_Components_SystemTap_scri.html#264"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">6</SPAN></A>
+<DT><STRONG>statement block</STRONG>
+<DD><A HREF="6_Statement_types.html#1058"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">11</SPAN></A>
+<DT><STRONG>strings</STRONG>
+<DD><A HREF="5_Language_elements.html#761"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
+<DT><STRONG>suffixes</STRONG>
+<DD><A HREF="4_Probe_points.html#299"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
+<DT><STRONG>sum</STRONG>
+<DD><A HREF="8_Statistics_aggregates.html#1125"><SPAN CLASS="arabic">8</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
+<DT><STRONG>synchronous</STRONG>
+<DD><A HREF="4_Probe_points.html#290"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DT><STRONG>syscall probes</STRONG>
+<DD><A HREF="4_Probe_points.html#666"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">10</SPAN></A>
+<DT><STRONG>systemtap_privilege</STRONG>
+<DD><A HREF="5_Language_elements.html#927"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">8</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
+<DT><STRONG>target variables</STRONG>
+<DD><A HREF="3_Components_SystemTap_scri.html#131"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DT><STRONG>timer probes</STRONG>
+<DD><A HREF="4_Probe_points.html#680"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">11</SPAN></A>
+<DT><STRONG>tokens</STRONG>
+<DD><A HREF="5_Language_elements.html#930"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">8</SPAN>.<SPAN CLASS="arabic">6</SPAN></A>
+<DT><STRONG>tracepoints</STRONG>
+<DD><A HREF="4_Probe_points.html#651"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
+<DT><STRONG>try</STRONG>
+<DD><A HREF="6_Statement_types.html#973"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
+<DT><STRONG>unary</STRONG>
+<DD><A HREF="5_Language_elements.html#804"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
+<DT><STRONG>unused variables</STRONG>
+<DD><A HREF="3_Components_SystemTap_scri.html#200"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DT><STRONG>userspace probing</STRONG>
+<DD><A HREF="4_Probe_points.html#441"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
+<DT><STRONG>variables</STRONG>
+<DD><A HREF="3_Components_SystemTap_scri.html#186"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
+<DT><STRONG>while</STRONG>
+<DD><A HREF="6_Statement_types.html#1064"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">12</SPAN></A>
+<DT><STRONG>whitespace</STRONG>
+<DD><A HREF="5_Language_elements.html#781"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
+<DT><STRONG>wildcards</STRONG>
+<DD><A HREF="4_Probe_points.html#302"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
+
+</DL>
+<BR><HR>
+
+</BODY>
+</HTML>
\relax
+\bbl@cs{beforestart}
-This is pdfTeX, Version 3.14159265-2.6-1.40.20 (TeX Live 2019) (preloaded format=pdflatex 2020.3.29) 11 JUN 2020 11:23
+This is pdfTeX, Version 3.14159265-2.6-1.40.21 (TeX Live 2020) (preloaded format=pdflatex 2021.3.1) 1 MAR 2021 20:27
entering extended mode
restricted \write18 enabled.
%&-line parsing enabled.
**./images.tex
(./images.tex
-LaTeX2e <2018-12-01>
-
+LaTeX2e <2020-02-02> patch level 5
+L3 programming layer <2020-04-06>
(/usr/share/texlive/texmf-dist/tex/latex/base/article.cls
-Document Class: article 2018/09/03 v1.4i Standard LaTeX document class
+Document Class: article 2019/12/20 v1.4l Standard LaTeX document class
(/usr/share/texlive/texmf-dist/tex/latex/base/size10.clo
-File: size10.clo 2018/09/03 v1.4i Standard LaTeX file (size option)
+File: size10.clo 2019/12/20 v1.4l Standard LaTeX file (size option)
)
-\c@part=\count80
-\c@section=\count81
-\c@subsection=\count82
-\c@subsubsection=\count83
-\c@paragraph=\count84
-\c@subparagraph=\count85
-\c@figure=\count86
-\c@table=\count87
-\abovecaptionskip=\skip41
-\belowcaptionskip=\skip42
-\bibindent=\dimen102
+\c@part=\count167
+\c@section=\count168
+\c@subsection=\count169
+\c@subsubsection=\count170
+\c@paragraph=\count171
+\c@subparagraph=\count172
+\c@figure=\count173
+\c@table=\count174
+\abovecaptionskip=\skip47
+\belowcaptionskip=\skip48
+\bibindent=\dimen134
) (/usr/share/texlive/texmf-dist/tex/latex/base/ifthen.sty
Package: ifthen 2014/09/29 v1.1c Standard LaTeX ifthen package (DPC)
) (/usr/share/texlive/texmf-dist/tex/latex/geometry/geometry.sty
-Package: geometry 2018/04/16 v5.8 Page Geometry
+Package: geometry 2020/01/02 v5.9 Page Geometry
(/usr/share/texlive/texmf-dist/tex/latex/graphics/keyval.sty
Package: keyval 2014/10/28 v1.15 key=value parser (DPC)
-\KV@toks@=\toks14
-) (/usr/share/texlive/texmf-dist/tex/generic/oberdiek/ifpdf.sty
-Package: ifpdf 2018/09/07 v3.3 Provides the ifpdf switch
-) (/usr/share/texlive/texmf-dist/tex/generic/oberdiek/ifvtex.sty
-Package: ifvtex 2016/05/16 v1.6 Detect VTeX and its facilities (HO)
-Package ifvtex Info: VTeX not detected.
-) (/usr/share/texlive/texmf-dist/tex/generic/ifxetex/ifxetex.sty
-Package: ifxetex 2010/09/12 v0.6 Provides ifxetex conditional
-)
-\Gm@cnth=\count88
-\Gm@cntv=\count89
-\c@Gm@tempcnt=\count90
-\Gm@bindingoffset=\dimen103
-\Gm@wd@mp=\dimen104
-\Gm@odd@mp=\dimen105
-\Gm@even@mp=\dimen106
-\Gm@layoutwidth=\dimen107
-\Gm@layoutheight=\dimen108
-\Gm@layouthoffset=\dimen109
-\Gm@layoutvoffset=\dimen110
-\Gm@dimlist=\toks15
+\KV@toks@=\toks15
+) (/usr/share/texlive/texmf-dist/tex/generic/iftex/ifvtex.sty
+Package: ifvtex 2019/10/25 v1.7 ifvtex legacy package. Use iftex instead.
+(/usr/share/texlive/texmf-dist/tex/generic/iftex/iftex.sty
+Package: iftex 2020/03/06 v1.0d TeX engine tests
+))
+\Gm@cnth=\count175
+\Gm@cntv=\count176
+\c@Gm@tempcnt=\count177
+\Gm@bindingoffset=\dimen135
+\Gm@wd@mp=\dimen136
+\Gm@odd@mp=\dimen137
+\Gm@even@mp=\dimen138
+\Gm@layoutwidth=\dimen139
+\Gm@layoutheight=\dimen140
+\Gm@layouthoffset=\dimen141
+\Gm@layoutvoffset=\dimen142
+\Gm@dimlist=\toks16
) (/usr/share/texlive/texmf-dist/tex/latex/fancyhdr/fancyhdr.sty
Package: fancyhdr 2019/01/31 v3.10 Extensive control of page headers and footer
s
-\f@nch@headwidth=\skip43
-\f@nch@O@elh=\skip44
-\f@nch@O@erh=\skip45
-\f@nch@O@olh=\skip46
-\f@nch@O@orh=\skip47
-\f@nch@O@elf=\skip48
-\f@nch@O@erf=\skip49
-\f@nch@O@olf=\skip50
-\f@nch@O@orf=\skip51
+\f@nch@headwidth=\skip49
+\f@nch@O@elh=\skip50
+\f@nch@O@erh=\skip51
+\f@nch@O@olh=\skip52
+\f@nch@O@orh=\skip53
+\f@nch@O@elf=\skip54
+\f@nch@O@erf=\skip55
+\f@nch@O@olf=\skip56
+\f@nch@O@orf=\skip57
) (/usr/share/texlive/texmf-dist/tex/latex/tools/array.sty
-Package: array 2018/12/30 v2.4k Tabular extension package (FMi)
-\col@sep=\dimen111
-\ar@mcellbox=\box27
-\extrarowheight=\dimen112
-\NC@list=\toks16
-\extratabsurround=\skip52
-\backup@length=\skip53
-\ar@cellbox=\box28
+Package: array 2019/08/31 v2.4l Tabular extension package (FMi)
+\col@sep=\dimen143
+\ar@mcellbox=\box45
+\extrarowheight=\dimen144
+\NC@list=\toks17
+\extratabsurround=\skip58
+\backup@length=\skip59
+\ar@cellbox=\box46
) (/usr/share/texlive/texmf-dist/tex/latex/tools/varioref.sty
-Package: varioref 2016/02/16 v1.5c package for extended references (FMi)
-\c@vrcnt=\count91
+Package: varioref 2020/01/23 v1.6c package for extended references (FMi)
+\c@vrcnt=\count178
) (/usr/share/texlive/texmf-dist/tex/latex/float/float.sty
Package: float 2001/11/08 v1.3d Float enhancements (AL)
-\c@float@type=\count92
-\float@exts=\toks17
-\float@box=\box29
-\@float@everytoks=\toks18
-\@floatcapt=\box30
+\c@float@type=\count179
+\float@exts=\toks18
+\float@box=\box47
+\@float@everytoks=\toks19
+\@floatcapt=\box48
) (/usr/share/texlive/texmf-dist/tex/latex/base/makeidx.sty
Package: makeidx 2014/09/29 v1.0m Standard LaTeX package
) (/usr/share/texlive/texmf-dist/tex/latex/tools/verbatim.sty
-Package: verbatim 2014/10/28 v1.5q LaTeX2e package for verbatim enhancements
-\every@verbatim=\toks19
-\verbatim@line=\toks20
-\verbatim@in@stream=\read1
+Package: verbatim 2019/11/10 v1.5r LaTeX2e package for verbatim enhancements
+\every@verbatim=\toks20
+\verbatim@line=\toks21
+\verbatim@in@stream=\read2
) (/usr/share/texlive/texmf-dist/tex/latex/url/url.sty
-\Urlmuskip=\muskip10
+\Urlmuskip=\muskip16
Package: url 2013/09/16 ver 3.4 Verb mode for urls, etc.
)
\@indexfile=\write3
Writing index file images.idx
(/usr/share/texlive/texmf-dist/tex/generic/babel/babel.sty
-Package: babel 2019/07/19 3.33 The Babel package
+Package: babel 2020/03/22 3.42 The Babel package
(/usr/share/texlive/texmf-dist/tex/generic/babel/switch.def
-File: switch.def 2019/07/19 3.33 Babel switching mechanism
+File: switch.def 2020/03/22 3.42 Babel switching mechanism
) (/usr/share/texlive/texmf-dist/tex/generic/babel-english/english.ldf
Language: english 2017/06/06 v3.3r English support from the babel system
(/usr/share/texlive/texmf-dist/tex/generic/babel/babel.def
-File: babel.def 2019/07/19 3.33 Babel common definitions
-\babel@savecnt=\count93
-\U@D=\dimen113
+File: babel.def 2020/03/22 3.42 Babel common definitions
+\babel@savecnt=\count180
+\U@D=\dimen145
(/usr/share/texlive/texmf-dist/tex/generic/babel/txtbabel.def)
-\bbl@dirlevel=\count94
+\bbl@readstream=\read3
+\bbl@dirlevel=\count181
)
-\l@british = a dialect from \language\l@english
-\l@UKenglish = a dialect from \language\l@english
-\l@canadian = a dialect from \language\l@american
-\l@australian = a dialect from \language\l@british
-\l@newzealand = a dialect from \language\l@british
+Package babel Info: \l@british = using hyphenrules for english
+(babel) (\language0) on input line 82.
+Package babel Info: \l@UKenglish = using hyphenrules for english
+(babel) (\language0) on input line 83.
+Package babel Info: \l@canadian = using hyphenrules for english
+(babel) (\language0) on input line 102.
+Package babel Info: \l@australian = using hyphenrules for english
+(babel) (\language0) on input line 105.
+Package babel Info: \l@newzealand = using hyphenrules for english
+(babel) (\language0) on input line 108.
)) (/usr/share/texlive/texmf-dist/tex/latex/xcolor/xcolor.sty
Package: xcolor 2016/05/11 v2.12 LaTeX color extensions (UK)
(/usr/share/texlive/texmf-dist/tex/latex/graphics-cfg/color.cfg
Package xcolor Info: Model `HSB' substituted by `hsb' on input line 1369.
Package xcolor Info: Model `Gray' substituted by `gray' on input line 1370.
Package xcolor Info: Model `wave' substituted by `hsb' on input line 1371.
-) (/usr/share/texlive/texmf-dist/tex/latex/base/inputenc.sty
-Package: inputenc 2018/08/11 v1.3c Input encoding file
-\inpenc@prehook=\toks21
-\inpenc@posthook=\toks22
-(/usr/share/texlive/texmf-dist/tex/latex/base/latin1.def
-File: latin1.def 2018/08/11 v1.3c Input encoding file
-))
-\sizebox=\box31
+)
+\sizebox=\box49
\lthtmlwrite=\write4
(/usr/share/texlive/texmf-dist/tex/latex/preview/preview.sty
Package: preview 2017/04/24 12.1 (AUCTeX/preview-latex)
(/usr/share/texlive/texmf-dist/tex/latex/preview/prtightpage.def
-\PreviewBorder=\dimen114
+\PreviewBorder=\dimen146
)
-\pr@snippet=\count95
-\pr@box=\box32
-\pr@output=\toks23
+\pr@snippet=\count182
+\pr@box=\box50
+\pr@output=\toks22
)
-\lthtmlPageBox=\box33
-\lthtmlCropMarkHeight=\dimen115
-\lthtmlCropMarkDepth=\dimen116
-! Too many }'s.
-l.113 ...review}\copy\lthtmlPageBox\end{preview}}}
- %
-You've closed more groups than you opened.
-Such booboos are generally harmless, so keep going.
-
-(./images.aux)
+\lthtmlPageBox=\box51
+\lthtmlCropMarkHeight=\dimen147
+\lthtmlCropMarkDepth=\dimen148
+(/usr/share/texlive/texmf-dist/tex/latex/l3backend/l3backend-pdfmode.def
+File: l3backend-pdfmode.def 2020-03-12 L3 backend support: PDF mode
+\l__kernel_color_stack_int=\count183
+\l__pdf_internal_box=\box52
+) (./images.aux)
\openout1 = `images.aux'.
-LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 144.
-LaTeX Font Info: ... okay on input line 144.
-LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 144.
-LaTeX Font Info: ... okay on input line 144.
-LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 144.
-LaTeX Font Info: ... okay on input line 144.
-LaTeX Font Info: Checking defaults for OMS/cmsy/m/n on input line 144.
-LaTeX Font Info: ... okay on input line 144.
-LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 144.
-LaTeX Font Info: ... okay on input line 144.
-LaTeX Font Info: Checking defaults for U/cmr/m/n on input line 144.
-LaTeX Font Info: ... okay on input line 144.
+LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 145.
+LaTeX Font Info: ... okay on input line 145.
+LaTeX Font Info: Checking defaults for OMS/cmsy/m/n on input line 145.
+LaTeX Font Info: ... okay on input line 145.
+LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 145.
+LaTeX Font Info: ... okay on input line 145.
+LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 145.
+LaTeX Font Info: ... okay on input line 145.
+LaTeX Font Info: Checking defaults for TS1/cmr/m/n on input line 145.
+LaTeX Font Info: ... okay on input line 145.
+LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 145.
+LaTeX Font Info: ... okay on input line 145.
+LaTeX Font Info: Checking defaults for U/cmr/m/n on input line 145.
+LaTeX Font Info: ... okay on input line 145.
*geometry* driver: auto-detecting
*geometry* detected driver: pdftex
(/usr/share/texlive/texmf-dist/tex/context/base/mkii/supp-pdf.mkii
[Loading MPS to PDF converter (version 2006.09.02).]
-\scratchcounter=\count96
-\scratchdimen=\dimen117
-\scratchbox=\box34
-\nofMPsegments=\count97
-\nofMParguments=\count98
-\everyMPshowfont=\toks24
-\MPscratchCnt=\count99
-\MPscratchDim=\dimen118
-\MPnumerator=\count100
-\makeMPintoPDFobject=\count101
-\everyMPtoPDFconversion=\toks25
+\scratchcounter=\count184
+\scratchdimen=\dimen149
+\scratchbox=\box53
+\nofMPsegments=\count185
+\nofMParguments=\count186
+\everyMPshowfont=\toks23
+\MPscratchCnt=\count187
+\MPscratchDim=\dimen150
+\MPnumerator=\count188
+\makeMPintoPDFobject=\count189
+\everyMPtoPDFconversion=\toks24
)
Preview: Fontsize 10pt
Preview: PDFoutput 1
latex2htmlLength evensidemargin=0.0pt
LaTeX Font Info: External font `cmex10' loaded for size
-(Font) <7> on input line 240.
+(Font) <7> on input line 241.
LaTeX Font Info: External font `cmex10' loaded for size
-(Font) <5> on input line 240.
+(Font) <5> on input line 241.
-:tex2html_wrap_inline2172:lthtmlCropMarkHeight:=14.14003pt
+:tex2html_wrap_inline2173:lthtmlCropMarkHeight:=14.14003pt
-:tex2html_wrap_inline2172:lthtmlCropMarkDepth:=0.0pt:1ex:=4.30554pt
+:tex2html_wrap_inline2173:lthtmlCropMarkDepth:=0.0pt:1ex:=4.30554pt
Preview: Tightpage -32891 -32891 32891 32891
[1{/usr/share/texlive/texmf-dist/fonts/map/pdftex/updmap/pdftex.map}]
-:tex2html_wrap_inline2174:lthtmlCropMarkHeight:=14.14003pt
+:tex2html_wrap_inline2175:lthtmlCropMarkHeight:=14.14003pt
-:tex2html_wrap_inline2174:lthtmlCropMarkDepth:=0.0pt:1ex:=4.30554pt
+:tex2html_wrap_inline2175:lthtmlCropMarkDepth:=0.0pt:1ex:=4.30554pt
[2] (./images.aux) )
Here is how much of TeX's memory you used:
- 2966 strings out of 494553
- 38233 string characters out of 6177318
- 115627 words of memory out of 5000000
- 6627 multiletter control sequences out of 15000+600000
- 3640 words of font info for 14 fonts, out of 8000000 for 9000
+ 3188 strings out of 482555
+ 43051 string characters out of 5952146
+ 296601 words of memory out of 5000000
+ 18828 multiletter control sequences out of 15000+600000
+ 532338 words of font info for 24 fonts, out of 8000000 for 9000
14 hyphenation exceptions out of 8191
- 24i,5n,43p,203b,131s stack positions out of 5000i,500n,10000p,200000b,80000s
+ 30i,5n,45p,218b,122s stack positions out of 5000i,500n,10000p,200000b,80000s
</usr/share/texlive/texmf-dist/fonts/type1/public/amsfonts/
cm/cmr10.pfb></usr/share/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmr7
.pfb>
-# LaTeX2HTML 2018.3 (Released July 19, 2018)
+# LaTeX2HTML 2020.2 (Released July 1, 2020)
# Associate images original text with physical files.
-$key = q/2^{63};MSF=1.6;AAT/;
+$key = q/2^{63};MSF=1;AAT/;
$cached_env_img{$key} = q|<IMG STYLE="height: 1.96ex; vertical-align: -0.12ex; " SRC="|."$dir".q|img1.png"
ALT="$2^{63}$">|;
-$key = q/2^{64};MSF=1.6;AAT/;
+$key = q/2^{64};MSF=1;AAT/;
$cached_env_img{$key} = q|<IMG STYLE="height: 1.96ex; vertical-align: -0.12ex; " SRC="|."$dir".q|img2.png"
ALT="$2^{64}$">|;
\usepackage{xcolor}
-\usepackage[latin1]{inputenc}
-
\makeatletter
\newbox\lthtmlPageBox
\newdimen\lthtmlCropMarkHeight
\newdimen\lthtmlCropMarkDepth
-\long\def\lthtmlTightVBox#1#2{%
- \setbox\lthtmlPageBox\vbox{\hbox{\catcode`\_=8 #2}}%
+\long\def\lthtmlTightVBoxA#1{\def\lthtmllabel{#1}
+ \setbox\lthtmlPageBox\vbox\bgroup\catcode`\_=8 }%
+\long\def\lthtmlTightVBoxZ{\egroup
\lthtmlCropMarkHeight=\ht\lthtmlPageBox \advance \lthtmlCropMarkHeight 6pt
\lthtmlCropMarkDepth=\dp\lthtmlPageBox
- \lthtmltypeout{^^J:#1:lthtmlCropMarkHeight:=\the\lthtmlCropMarkHeight}%
- \lthtmltypeout{^^J:#1:lthtmlCropMarkDepth:=\the\lthtmlCropMarkDepth:1ex:=\the \dimexpr 1ex}%
- \begin{preview}\copy\lthtmlPageBox\end{preview}}}%
-\long\def\lthtmlTightFBox#1#2{%
+ \lthtmltypeout{^^J:\lthtmllabel:lthtmlCropMarkHeight:=\the\lthtmlCropMarkHeight}%
+ \lthtmltypeout{^^J:\lthtmllabel:lthtmlCropMarkDepth:=\the\lthtmlCropMarkDepth:1ex:=\the \dimexpr 1ex}%
+ \begin{preview}\copy\lthtmlPageBox\end{preview}}%
+\long\def\lthtmlTightFBoxA#1{\def\lthtmllabel{#1}%
\adjustnormalsize\setbox\lthtmlPageBox=\vbox\bgroup %
\let\ifinner=\iffalse \let\)\liih@math %
- {\catcode`\_=8 #2}%
+ \bgroup\catcode`\_=8 }%
+\long\def\lthtmlTightFBoxZ{\egroup
\@next\next\@currlist{}{\def\next{\voidb@x}}%
\expandafter\box\next\egroup %
\lthtmlCropMarkHeight=\ht\lthtmlPageBox \advance \lthtmlCropMarkHeight 6pt
\lthtmlCropMarkDepth=\dp\lthtmlPageBox
- \lthtmltypeout{^^J:#1:lthtmlCropMarkHeight:=\the\lthtmlCropMarkHeight}%
- \lthtmltypeout{^^J:#1:lthtmlCropMarkDepth:=\the\lthtmlCropMarkDepth:1ex:=\the \dimexpr 1ex}%
+ \lthtmltypeout{^^J:\lthtmllabel:lthtmlCropMarkHeight:=\the\lthtmlCropMarkHeight}%
+ \lthtmltypeout{^^J:\lthtmllabel:lthtmlCropMarkDepth:=\the\lthtmlCropMarkDepth:1ex:=\the \dimexpr 1ex}%
\begin{preview}\copy\lthtmlPageBox\end{preview}}%
- \long\def\lthtmlinlinemathA#1#2\lthtmlindisplaymathZ{\lthtmlTightVBox{#1}{#2}}
- \def\lthtmlinlineA#1#2\lthtmlinlineZ{\lthtmlTightVBox{#1}{#2}}
- \long\def\lthtmldisplayA#1#2\lthtmldisplayZ{\lthtmlTightVBox{#1}{#2}}
- \long\def\lthtmlinlinemathA#1#2\lthtmlindisplaymathZ{\lthtmlTightVBox{#1}{#2}}
- \def\lthtmlinlineA#1#2\lthtmlinlineZ{\lthtmlTightVBox{#1}{#2}}
- \long\def\lthtmldisplayA#1#2\lthtmldisplayZ{\lthtmlTightVBox{#1}{#2}}
+ \long\def\lthtmlinlinemathA#1#2\lthtmlindisplaymathZ{\lthtmlTightVBoxA{#1}{\hbox\bgroup#2\egroup}\lthtmlTightVBoxZ}
+ \def\lthtmlinlineA#1#2\lthtmlinlineZ{\lthtmlTightVBoxA{#1}{\hbox\bgroup#2\egroup}\lthtmlTightVBoxZ}
+ \long\def\lthtmldisplayA#1#2\lthtmldisplayZ{\lthtmlTightVBoxA{#1}{#2}\lthtmlTightVBoxZ}
\long\def\lthtmldisplayB#1#2\lthtmldisplayZ{\\edef\preveqno{(\theequation)}%
- \lthtmlTightVBox{#1}{\let\@eqnnum\relax#2}}
- \long\def\lthtmlfigureA#1#2\lthtmlfigureZ{\let\@savefreelist\@freelist
- \lthtmlTightFBox{#1}{#2}\global\let\@freelist\@savefreelist}
- \long\def\lthtmlpictureA#1#2\lthtmlpictureZ{\let\@savefreelist\@freelist
- \lthtmlTightVBox{#1}{#2}\global\let\@freelist\@savefreelist}
+ \lthtmlTightVBoxA{#1}{\let\@eqnnum\relax#2}\lthtmlTightVBoxZ}
+ \long\def\lthtmlfigureA#1{\let\@savefreelist\@freelist
+ \lthtmlTightFBoxA{#1}}
+ \long\def\lthtmlfigureZ{
+ \lthtmlTightFBoxZ\global\let\@freelist\@savefreelist}
+ \long\def\lthtmlpictureA#1{\let\@savefreelist\@freelist
+ \lthtmlTightVBoxA{#1}}
+ \long\def\lthtmlpictureZ{
+ \lthtmlTightVBoxZ\global\let\@freelist\@savefreelist}
\def\lthtmlcheckvsize{\ifdim\ht\sizebox<\vsize
\ifdim\wd\sizebox<\hsize\expandafter\hfill\fi \expandafter\vfill
\else\expandafter\vss\fi}%
\stepcounter{subsubsection}
\stepcounter{subsubsection}
{\newpage\clearpage
-\lthtmlinlinemathA{tex2html_wrap_inline2172}%
+\lthtmlinlinemathA{tex2html_wrap_inline2173}%
$2^{63}$%
\lthtmlindisplaymathZ
\lthtmlcheckvsize\clearpage}
{\newpage\clearpage
-\lthtmlinlinemathA{tex2html_wrap_inline2174}%
+\lthtmlinlinemathA{tex2html_wrap_inline2175}%
$2^{64}$%
\lthtmlindisplaymathZ
\lthtmlcheckvsize\clearpage}
--- /dev/null
+<!DOCTYPE HTML>
+
+<!--Converted with LaTeX2HTML 2020.2 (Released July 1, 2020) -->
+<HTML lang="en">
+<HEAD>
+<TITLE>SystemTap Language Reference</TITLE>
+<META NAME="description" CONTENT="SystemTap Language Reference">
+<META NAME="keywords" CONTENT="langref">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+
+<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=utf-8">
+<META NAME="viewport" CONTENT="width=device-width, initial-scale=1.0">
+<META NAME="Generator" CONTENT="LaTeX2HTML v2020.2">
+
+<LINK REL="STYLESHEET" HREF="langref.css">
+
+<LINK REL="next" HREF="Contents.html">
+</HEAD>
+
+<BODY >
+
+<DIV CLASS="navigation"><!--Navigation Panel-->
+<A
+ HREF="Contents.html">
+<IMG WIDTH="37" HEIGHT="24" ALT="next" SRC="next.png"></A>
+<IMG WIDTH="26" HEIGHT="24" ALT="up" SRC="up_g.png">
+<IMG WIDTH="63" HEIGHT="24" ALT="previous" SRC="prev_g.png">
+<A ID="tex2html12"
+ HREF="Contents.html">
+<IMG WIDTH="65" HEIGHT="24" ALT="contents" SRC="contents.png"></A>
+<A ID="tex2html14"
+ HREF="Index.html">
+<IMG WIDTH="43" HEIGHT="24" ALT="index" SRC="index.png"></A>
+<BR>
+<B> Next:</B> <A
+ HREF="Contents.html">Contents</A>
+ <B> <A ID="tex2html13"
+ HREF="Contents.html">Contents</A></B>
+ <B> <A ID="tex2html15"
+ HREF="Index.html">Index</A></B>
+<BR>
+<BR></DIV>
+<!--End of Navigation Panel-->
+
+<P>
+
+<P>
+<H1 class="CENTER">SystemTap Language Reference</H1>
+<DIV CLASS="author_info">
+
+</DIV>
+This document was derived from other documents contributed to the SystemTap project by employees of Red Hat, IBM and Intel.
+<BR>
+
+<P>
+Copyright © 2007-2013 Red Hat Inc.
+<BR>
+Copyright © 2007-2009 IBM Corp.
+<BR>
+Copyright © 2007 Intel Corporation.
+<BR>
+
+<P>
+Permission is granted to copy, distribute and/or modify this document
+under the terms of the GNU Free Documentation License, Version 1.2
+or any later version published by the Free Software Foundation;
+with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
+<BR>
+
+<P>
+The GNU Free Documentation License is available from
+<kbd><A ID="tex2html1"
+ HREF="http://www.gnu.org/licenses/fdl.html">http://www.gnu.org/licenses/fdl.html</A></kbd> or by writing to
+the Free Software Foundation, Inc., 51 Franklin Street,
+Fifth Floor, Boston, MA 02110-1301, USA.
+
+<BR><HR>
+<!--Table of Child-Links-->
+<A ID="CHILD_LINKS"></A>
+
+<UL CLASS="ChildLinks">
+<LI><A ID="tex2html16"
+ HREF="Contents.html">Contents</A>
+<LI><A ID="tex2html17"
+ HREF="1_SystemTap_overview.html"><SPAN CLASS="arabic">1</SPAN> SystemTap overview</A>
+<UL>
+<LI><A ID="tex2html18"
+ HREF="1_SystemTap_overview.html#SECTION00021000000000000000"><SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN> About this guide</A>
+<LI><A ID="tex2html19"
+ HREF="1_SystemTap_overview.html#SECTION00022000000000000000"><SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">2</SPAN> Reasons to use SystemTap</A>
+<LI><A ID="tex2html20"
+ HREF="1_SystemTap_overview.html#SECTION00023000000000000000"><SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">3</SPAN> Event-action language</A>
+<LI><A ID="tex2html21"
+ HREF="1_SystemTap_overview.html#SECTION00024000000000000000"><SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">4</SPAN> Sample SystemTap scripts</A>
+<UL>
+<LI><A ID="tex2html22"
+ HREF="1_SystemTap_overview.html#SECTION00024100000000000000"><SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN> Basic SystemTap syntax and control structures</A>
+<LI><A ID="tex2html23"
+ HREF="1_SystemTap_overview.html#SECTION00024200000000000000"><SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">2</SPAN> Primes between 0 and 49</A>
+<LI><A ID="tex2html24"
+ HREF="1_SystemTap_overview.html#SECTION00024300000000000000"><SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">3</SPAN> Recursive functions</A>
+</UL>
+<LI><A ID="tex2html25"
+ HREF="1_SystemTap_overview.html#SECTION00025000000000000000"><SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">5</SPAN> The stap command</A>
+<LI><A ID="tex2html26"
+ HREF="1_SystemTap_overview.html#SECTION00026000000000000000"><SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">6</SPAN> Safety and security</A>
+</UL>
+<BR>
+<LI><A ID="tex2html27"
+ HREF="2_Types_SystemTap_scripts.html"><SPAN CLASS="arabic">2</SPAN> Types of SystemTap scripts</A>
+<UL>
+<LI><A ID="tex2html28"
+ HREF="2_Types_SystemTap_scripts.html#SECTION00031000000000000000"><SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN> Probe scripts</A>
+<LI><A ID="tex2html29"
+ HREF="2_Types_SystemTap_scripts.html#SECTION00032000000000000000"><SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN> Tapset scripts</A>
+</UL>
+<BR>
+<LI><A ID="tex2html30"
+ HREF="3_Components_SystemTap_scri.html"><SPAN CLASS="arabic">3</SPAN> Components of a SystemTap script</A>
+<UL>
+<LI><A ID="tex2html31"
+ HREF="3_Components_SystemTap_scri.html#SECTION00041000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">1</SPAN> Probe definitions</A>
+<LI><A ID="tex2html32"
+ HREF="3_Components_SystemTap_scri.html#SECTION00042000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN> Probe aliases</A>
+<UL>
+<LI><A ID="tex2html33"
+ HREF="3_Components_SystemTap_scri.html#SECTION00042100000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN> Prologue-style aliases (=)</A>
+<LI><A ID="tex2html34"
+ HREF="3_Components_SystemTap_scri.html#SECTION00042200000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN> Epilogue-style aliases (+=)</A>
+<LI><A ID="tex2html35"
+ HREF="3_Components_SystemTap_scri.html#SECTION00042300000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">3</SPAN> Probe alias usage</A>
+<LI><A ID="tex2html36"
+ HREF="3_Components_SystemTap_scri.html#SECTION00042400000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">4</SPAN> Alias suffixes</A>
+<LI><A ID="tex2html37"
+ HREF="3_Components_SystemTap_scri.html#SECTION00042500000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">5</SPAN> Alias suffixes and wildcards</A>
+</UL>
+<LI><A ID="tex2html38"
+ HREF="3_Components_SystemTap_scri.html#SECTION00043000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN> Variables</A>
+<UL>
+<LI><A ID="tex2html39"
+ HREF="3_Components_SystemTap_scri.html#SECTION00043100000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">1</SPAN> Unused variables</A>
+</UL>
+<LI><A ID="tex2html40"
+ HREF="3_Components_SystemTap_scri.html#SECTION00044000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">4</SPAN> Auxiliary functions</A>
+<LI><A ID="tex2html41"
+ HREF="3_Components_SystemTap_scri.html#SECTION00045000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN> Embedded C</A>
+<LI><A ID="tex2html42"
+ HREF="3_Components_SystemTap_scri.html#SECTION00046000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">6</SPAN> Embedded C functions</A>
+<LI><A ID="tex2html43"
+ HREF="3_Components_SystemTap_scri.html#SECTION00047000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">7</SPAN> Embedded C pragma comments</A>
+<LI><A ID="tex2html44"
+ HREF="3_Components_SystemTap_scri.html#SECTION00048000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">8</SPAN> Accessing script level global variables</A>
+</UL>
+<BR>
+<LI><A ID="tex2html45"
+ HREF="4_Probe_points.html"><SPAN CLASS="arabic">4</SPAN> Probe points</A>
+<UL>
+<LI><A ID="tex2html46"
+ HREF="4_Probe_points.html#SECTION00051000000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN> General syntax</A>
+<UL>
+<LI><A ID="tex2html47"
+ HREF="4_Probe_points.html#SECTION00051100000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN> Prefixes</A>
+<LI><A ID="tex2html48"
+ HREF="4_Probe_points.html#SECTION00051200000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">2</SPAN> Suffixes</A>
+<LI><A ID="tex2html49"
+ HREF="4_Probe_points.html#SECTION00051300000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">3</SPAN> Wildcarded file names, function names</A>
+<LI><A ID="tex2html50"
+ HREF="4_Probe_points.html#SECTION00051400000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">4</SPAN> Optional probe points</A>
+<LI><A ID="tex2html51"
+ HREF="4_Probe_points.html#SECTION00051500000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">5</SPAN> Brace expansion</A>
+</UL>
+<LI><A ID="tex2html52"
+ HREF="4_Probe_points.html#SECTION00052000000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">2</SPAN> Built-in probe point types (DWARF probes)</A>
+<UL>
+<LI><A ID="tex2html53"
+ HREF="4_Probe_points.html#SECTION00052100000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN> kernel.function, module().function</A>
+<LI><A ID="tex2html54"
+ HREF="4_Probe_points.html#SECTION00052200000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN> kernel.statement, module().statement</A>
+</UL>
+<LI><A ID="tex2html55"
+ HREF="4_Probe_points.html#SECTION00053000000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">3</SPAN> Function return probes</A>
+<LI><A ID="tex2html56"
+ HREF="4_Probe_points.html#SECTION00054000000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">4</SPAN> DWARF-less probing</A>
+<LI><A ID="tex2html57"
+ HREF="4_Probe_points.html#SECTION00055000000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">5</SPAN> Userspace probing</A>
+<UL>
+<LI><A ID="tex2html58"
+ HREF="4_Probe_points.html#SECTION00055100000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">1</SPAN> Begin/end variants</A>
+<LI><A ID="tex2html59"
+ HREF="4_Probe_points.html#SECTION00055200000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">2</SPAN> Syscall variants</A>
+<LI><A ID="tex2html60"
+ HREF="4_Probe_points.html#SECTION00055300000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">3</SPAN> Function/statement variants</A>
+<LI><A ID="tex2html61"
+ HREF="4_Probe_points.html#SECTION00055400000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">4</SPAN> Absolute variant</A>
+<LI><A ID="tex2html62"
+ HREF="4_Probe_points.html#SECTION00055500000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">5</SPAN> Process probe paths</A>
+<LI><A ID="tex2html63"
+ HREF="4_Probe_points.html#SECTION00055600000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">6</SPAN> Target process mode</A>
+<LI><A ID="tex2html64"
+ HREF="4_Probe_points.html#SECTION00055700000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">7</SPAN> Instruction probes</A>
+<LI><A ID="tex2html65"
+ HREF="4_Probe_points.html#SECTION00055800000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">8</SPAN> Static userspace probing</A>
+</UL>
+<LI><A ID="tex2html66"
+ HREF="4_Probe_points.html#SECTION00056000000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">6</SPAN> Java probes</A>
+<LI><A ID="tex2html67"
+ HREF="4_Probe_points.html#SECTION00057000000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">7</SPAN> PROCFS probes</A>
+<LI><A ID="tex2html68"
+ HREF="4_Probe_points.html#SECTION00058000000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">8</SPAN> Marker probes</A>
+<LI><A ID="tex2html69"
+ HREF="4_Probe_points.html#SECTION00059000000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">9</SPAN> Tracepoints</A>
+<LI><A ID="tex2html70"
+ HREF="4_Probe_points.html#SECTION000510000000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">10</SPAN> Syscall probes</A>
+<LI><A ID="tex2html71"
+ HREF="4_Probe_points.html#SECTION000511000000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">11</SPAN> Timer probes</A>
+<LI><A ID="tex2html72"
+ HREF="4_Probe_points.html#SECTION000512000000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">12</SPAN> Special probe points</A>
+<UL>
+<LI><A ID="tex2html73"
+ HREF="4_Probe_points.html#SECTION000512100000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">12</SPAN>.<SPAN CLASS="arabic">1</SPAN> begin</A>
+<LI><A ID="tex2html74"
+ HREF="4_Probe_points.html#SECTION000512200000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">12</SPAN>.<SPAN CLASS="arabic">2</SPAN> end</A>
+<LI><A ID="tex2html75"
+ HREF="4_Probe_points.html#SECTION000512300000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">12</SPAN>.<SPAN CLASS="arabic">3</SPAN> error</A>
+<LI><A ID="tex2html76"
+ HREF="4_Probe_points.html#SECTION000512400000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">12</SPAN>.<SPAN CLASS="arabic">4</SPAN> begin, end, and error probe sequence</A>
+<LI><A ID="tex2html77"
+ HREF="4_Probe_points.html#SECTION000512500000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">12</SPAN>.<SPAN CLASS="arabic">5</SPAN> never</A>
+</UL>
+</UL>
+<BR>
+<LI><A ID="tex2html78"
+ HREF="5_Language_elements.html"><SPAN CLASS="arabic">5</SPAN> Language elements</A>
+<UL>
+<LI><A ID="tex2html79"
+ HREF="5_Language_elements.html#SECTION00061000000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">1</SPAN> Identifiers</A>
+<LI><A ID="tex2html80"
+ HREF="5_Language_elements.html#SECTION00062000000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">2</SPAN> Data types</A>
+<UL>
+<LI><A ID="tex2html81"
+ HREF="5_Language_elements.html#SECTION00062100000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN> Literals</A>
+<LI><A ID="tex2html82"
+ HREF="5_Language_elements.html#SECTION00062200000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN> Integers</A>
+<LI><A ID="tex2html83"
+ HREF="5_Language_elements.html#SECTION00062300000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">3</SPAN> Strings</A>
+<LI><A ID="tex2html84"
+ HREF="5_Language_elements.html#SECTION00062400000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">4</SPAN> Associative arrays</A>
+<LI><A ID="tex2html85"
+ HREF="5_Language_elements.html#SECTION00062500000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">5</SPAN> Statistics</A>
+</UL>
+<LI><A ID="tex2html86"
+ HREF="5_Language_elements.html#SECTION00063000000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">3</SPAN> Semicolons</A>
+<LI><A ID="tex2html87"
+ HREF="5_Language_elements.html#SECTION00064000000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">4</SPAN> Comments</A>
+<LI><A ID="tex2html88"
+ HREF="5_Language_elements.html#SECTION00065000000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">5</SPAN> Whitespace</A>
+<LI><A ID="tex2html89"
+ HREF="5_Language_elements.html#SECTION00066000000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">6</SPAN> Expressions</A>
+<UL>
+<LI><A ID="tex2html90"
+ HREF="5_Language_elements.html#SECTION00066100000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN> Binary numeric operators</A>
+<LI><A ID="tex2html91"
+ HREF="5_Language_elements.html#SECTION00066200000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN> Binary string operators</A>
+<LI><A ID="tex2html92"
+ HREF="5_Language_elements.html#SECTION00066300000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN> Numeric assignment operators</A>
+<LI><A ID="tex2html93"
+ HREF="5_Language_elements.html#SECTION00066400000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">4</SPAN> String assignment operators</A>
+<LI><A ID="tex2html94"
+ HREF="5_Language_elements.html#SECTION00066500000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">5</SPAN> Unary numeric operators</A>
+<LI><A ID="tex2html95"
+ HREF="5_Language_elements.html#SECTION00066600000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">6</SPAN> Numeric & string comparison, regular expression matching operators</A>
+<LI><A ID="tex2html96"
+ HREF="5_Language_elements.html#SECTION00066700000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">7</SPAN> Ternary operator</A>
+<LI><A ID="tex2html97"
+ HREF="5_Language_elements.html#SECTION00066800000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">8</SPAN> Grouping operator</A>
+<LI><A ID="tex2html98"
+ HREF="5_Language_elements.html#SECTION00066900000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">9</SPAN> Function call</A>
+<LI><A ID="tex2html99"
+ HREF="5_Language_elements.html#SECTION000661000000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">10</SPAN> $ptr->member</A>
+<LI><A ID="tex2html100"
+ HREF="5_Language_elements.html#SECTION000661100000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">11</SPAN> Pointer typecasting</A>
+<LI><A ID="tex2html101"
+ HREF="5_Language_elements.html#SECTION000661200000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">12</SPAN> <value> in <array_name></A>
+<LI><A ID="tex2html102"
+ HREF="5_Language_elements.html#SECTION000661300000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">13</SPAN> [ <value>, ... ] in <array_name></A>
+</UL>
+<LI><A ID="tex2html103"
+ HREF="5_Language_elements.html#SECTION00067000000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">7</SPAN> Literals passed in from the stap command line</A>
+<UL>
+<LI><A ID="tex2html104"
+ HREF="5_Language_elements.html#SECTION00067100000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">7</SPAN>.<SPAN CLASS="arabic">1</SPAN> $1 ... $<NN> for literal pasting</A>
+<LI><A ID="tex2html105"
+ HREF="5_Language_elements.html#SECTION00067200000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">7</SPAN>.<SPAN CLASS="arabic">2</SPAN> @1 ... @<NN> for strings</A>
+<LI><A ID="tex2html106"
+ HREF="5_Language_elements.html#SECTION00067300000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">7</SPAN>.<SPAN CLASS="arabic">3</SPAN> Examples</A>
+</UL>
+<LI><A ID="tex2html107"
+ HREF="5_Language_elements.html#SECTION00068000000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">8</SPAN> Conditional compilation</A>
+<UL>
+<LI><A ID="tex2html108"
+ HREF="5_Language_elements.html#SECTION00068100000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">8</SPAN>.<SPAN CLASS="arabic">1</SPAN> Conditions</A>
+<LI><A ID="tex2html109"
+ HREF="5_Language_elements.html#SECTION00068200000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">8</SPAN>.<SPAN CLASS="arabic">2</SPAN> Conditions based on available target variables</A>
+<LI><A ID="tex2html110"
+ HREF="5_Language_elements.html#SECTION00068300000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">8</SPAN>.<SPAN CLASS="arabic">3</SPAN> Conditions based on kernel version: kernel_v, kernel_vr</A>
+<LI><A ID="tex2html111"
+ HREF="5_Language_elements.html#SECTION00068400000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">8</SPAN>.<SPAN CLASS="arabic">4</SPAN> Conditions based on architecture: arch</A>
+<LI><A ID="tex2html112"
+ HREF="5_Language_elements.html#SECTION00068500000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">8</SPAN>.<SPAN CLASS="arabic">5</SPAN> Conditions based on privilege level: systemtap_privilege</A>
+<LI><A ID="tex2html113"
+ HREF="5_Language_elements.html#SECTION00068600000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">8</SPAN>.<SPAN CLASS="arabic">6</SPAN> True and False Tokens</A>
+</UL>
+<LI><A ID="tex2html114"
+ HREF="5_Language_elements.html#SECTION00069000000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">9</SPAN> Preprocessor macros</A>
+<UL>
+<LI><A ID="tex2html115"
+ HREF="5_Language_elements.html#SECTION00069100000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">9</SPAN>.<SPAN CLASS="arabic">1</SPAN> Local macros</A>
+<LI><A ID="tex2html116"
+ HREF="5_Language_elements.html#SECTION00069200000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">9</SPAN>.<SPAN CLASS="arabic">2</SPAN> Library macros</A>
+</UL>
+</UL>
+<BR>
+<LI><A ID="tex2html117"
+ HREF="6_Statement_types.html"><SPAN CLASS="arabic">6</SPAN> Statement types</A>
+<UL>
+<LI><A ID="tex2html118"
+ HREF="6_Statement_types.html#SECTION00071000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN> break and continue</A>
+<LI><A ID="tex2html119"
+ HREF="6_Statement_types.html#SECTION00072000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN> try/catch</A>
+<LI><A ID="tex2html120"
+ HREF="6_Statement_types.html#SECTION00073000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN> delete</A>
+<LI><A ID="tex2html121"
+ HREF="6_Statement_types.html#SECTION00074000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">4</SPAN> EXP (expression)</A>
+<LI><A ID="tex2html122"
+ HREF="6_Statement_types.html#SECTION00075000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">5</SPAN> for</A>
+<LI><A ID="tex2html123"
+ HREF="6_Statement_types.html#SECTION00076000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">6</SPAN> foreach</A>
+<LI><A ID="tex2html124"
+ HREF="6_Statement_types.html#SECTION00077000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">7</SPAN> if</A>
+<LI><A ID="tex2html125"
+ HREF="6_Statement_types.html#SECTION00078000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">8</SPAN> next</A>
+<LI><A ID="tex2html126"
+ HREF="6_Statement_types.html#SECTION00079000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">9</SPAN> ; (null statement)</A>
+<LI><A ID="tex2html127"
+ HREF="6_Statement_types.html#SECTION000710000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">10</SPAN> return</A>
+<LI><A ID="tex2html128"
+ HREF="6_Statement_types.html#SECTION000711000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">11</SPAN> { } (statement block)</A>
+<LI><A ID="tex2html129"
+ HREF="6_Statement_types.html#SECTION000712000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">12</SPAN> while</A>
+</UL>
+<BR>
+<LI><A ID="tex2html130"
+ HREF="7_Associative_arrays.html"><SPAN CLASS="arabic">7</SPAN> Associative arrays</A>
+<UL>
+<LI><A ID="tex2html131"
+ HREF="7_Associative_arrays.html#SECTION00081000000000000000"><SPAN CLASS="arabic">7</SPAN>.<SPAN CLASS="arabic">1</SPAN> Examples</A>
+<LI><A ID="tex2html132"
+ HREF="7_Associative_arrays.html#SECTION00082000000000000000"><SPAN CLASS="arabic">7</SPAN>.<SPAN CLASS="arabic">2</SPAN> Types of values</A>
+<LI><A ID="tex2html133"
+ HREF="7_Associative_arrays.html#SECTION00083000000000000000"><SPAN CLASS="arabic">7</SPAN>.<SPAN CLASS="arabic">3</SPAN> Array capacity</A>
+<LI><A ID="tex2html134"
+ HREF="7_Associative_arrays.html#SECTION00084000000000000000"><SPAN CLASS="arabic">7</SPAN>.<SPAN CLASS="arabic">4</SPAN> Array wrapping</A>
+<LI><A ID="tex2html135"
+ HREF="7_Associative_arrays.html#SECTION00085000000000000000"><SPAN CLASS="arabic">7</SPAN>.<SPAN CLASS="arabic">5</SPAN> Iteration, foreach</A>
+<LI><A ID="tex2html136"
+ HREF="7_Associative_arrays.html#SECTION00086000000000000000"><SPAN CLASS="arabic">7</SPAN>.<SPAN CLASS="arabic">6</SPAN> Deletion</A>
+</UL>
+<BR>
+<LI><A ID="tex2html137"
+ HREF="8_Statistics_aggregates.html"><SPAN CLASS="arabic">8</SPAN> Statistics (aggregates)</A>
+<UL>
+<LI><A ID="tex2html138"
+ HREF="8_Statistics_aggregates.html#SECTION00091000000000000000"><SPAN CLASS="arabic">8</SPAN>.<SPAN CLASS="arabic">1</SPAN> The aggregation (< < <) operator</A>
+<LI><A ID="tex2html139"
+ HREF="8_Statistics_aggregates.html#SECTION00092000000000000000"><SPAN CLASS="arabic">8</SPAN>.<SPAN CLASS="arabic">2</SPAN> Extraction functions</A>
+<LI><A ID="tex2html140"
+ HREF="8_Statistics_aggregates.html#SECTION00093000000000000000"><SPAN CLASS="arabic">8</SPAN>.<SPAN CLASS="arabic">3</SPAN> Integer extractors</A>
+<UL>
+<LI><A ID="tex2html141"
+ HREF="8_Statistics_aggregates.html#SECTION00093100000000000000"><SPAN CLASS="arabic">8</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">1</SPAN> @count(s)</A>
+<LI><A ID="tex2html142"
+ HREF="8_Statistics_aggregates.html#SECTION00093200000000000000"><SPAN CLASS="arabic">8</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN> @sum(s)</A>
+<LI><A ID="tex2html143"
+ HREF="8_Statistics_aggregates.html#SECTION00093300000000000000"><SPAN CLASS="arabic">8</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN> @min(s)</A>
+<LI><A ID="tex2html144"
+ HREF="8_Statistics_aggregates.html#SECTION00093400000000000000"><SPAN CLASS="arabic">8</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">4</SPAN> @max(s)</A>
+<LI><A ID="tex2html145"
+ HREF="8_Statistics_aggregates.html#SECTION00093500000000000000"><SPAN CLASS="arabic">8</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN> @avg(s)</A>
+</UL>
+<LI><A ID="tex2html146"
+ HREF="8_Statistics_aggregates.html#SECTION00094000000000000000"><SPAN CLASS="arabic">8</SPAN>.<SPAN CLASS="arabic">4</SPAN> Histogram extractors</A>
+<UL>
+<LI><A ID="tex2html147"
+ HREF="8_Statistics_aggregates.html#SECTION00094100000000000000"><SPAN CLASS="arabic">8</SPAN>.<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN> @hist_linear</A>
+<LI><A ID="tex2html148"
+ HREF="8_Statistics_aggregates.html#SECTION00094200000000000000"><SPAN CLASS="arabic">8</SPAN>.<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">2</SPAN> @hist_log</A>
+</UL>
+<LI><A ID="tex2html149"
+ HREF="8_Statistics_aggregates.html#SECTION00095000000000000000"><SPAN CLASS="arabic">8</SPAN>.<SPAN CLASS="arabic">5</SPAN> Deletion</A>
+</UL>
+<BR>
+<LI><A ID="tex2html150"
+ HREF="9_Formatted_output.html"><SPAN CLASS="arabic">9</SPAN> Formatted output</A>
+<UL>
+<LI><A ID="tex2html151"
+ HREF="9_Formatted_output.html#SECTION000101000000000000000"><SPAN CLASS="arabic">9</SPAN>.<SPAN CLASS="arabic">1</SPAN> print</A>
+<LI><A ID="tex2html152"
+ HREF="9_Formatted_output.html#SECTION000102000000000000000"><SPAN CLASS="arabic">9</SPAN>.<SPAN CLASS="arabic">2</SPAN> printf</A>
+<LI><A ID="tex2html153"
+ HREF="9_Formatted_output.html#SECTION000103000000000000000"><SPAN CLASS="arabic">9</SPAN>.<SPAN CLASS="arabic">3</SPAN> printd</A>
+<LI><A ID="tex2html154"
+ HREF="9_Formatted_output.html#SECTION000104000000000000000"><SPAN CLASS="arabic">9</SPAN>.<SPAN CLASS="arabic">4</SPAN> printdln</A>
+<LI><A ID="tex2html155"
+ HREF="9_Formatted_output.html#SECTION000105000000000000000"><SPAN CLASS="arabic">9</SPAN>.<SPAN CLASS="arabic">5</SPAN> println</A>
+<LI><A ID="tex2html156"
+ HREF="9_Formatted_output.html#SECTION000106000000000000000"><SPAN CLASS="arabic">9</SPAN>.<SPAN CLASS="arabic">6</SPAN> sprint</A>
+<LI><A ID="tex2html157"
+ HREF="9_Formatted_output.html#SECTION000107000000000000000"><SPAN CLASS="arabic">9</SPAN>.<SPAN CLASS="arabic">7</SPAN> sprintf</A>
+</UL>
+<BR>
+<LI><A ID="tex2html158"
+ HREF="10_Tapset_defined_functions.html"><SPAN CLASS="arabic">10</SPAN> Tapset-defined functions</A>
+<LI><A ID="tex2html159"
+ HREF="11_Further_Reference.html"><SPAN CLASS="arabic">11</SPAN> For Further Reference</A>
+<LI><A ID="tex2html160"
+ HREF="Index.html">Index</A>
+<LI><A ID="tex2html161"
+ HREF="About_this_document.html">About this document ...</A>
+</UL>
+<!--End of Table of Child-Links-->
+<BR><HR>
+
+</BODY>
+</HTML>
-# LaTeX2HTML 2018.3 (Released July 19, 2018)
+# LaTeX2HTML 2020.2 (Released July 1, 2020)
# Associate internals original text with physical files.
-# LaTeX2HTML 2018.3 (Released July 19, 2018)
+# LaTeX2HTML 2020.2 (Released July 1, 2020)
# Associate labels original text with physical files.
1;
-# LaTeX2HTML 2018.3 (Released July 19, 2018)
+# LaTeX2HTML 2020.2 (Released July 1, 2020)
# labels from external_latex_labels array.
--- /dev/null
+<!DOCTYPE HTML>
+
+<!--Converted with LaTeX2HTML 2020.2 (Released July 1, 2020) -->
+<HTML lang="en">
+<HEAD>
+<TITLE>SystemTap Language Reference</TITLE>
+<META NAME="description" CONTENT="SystemTap Language Reference">
+<META NAME="keywords" CONTENT="langref">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+
+<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=utf-8">
+<META NAME="viewport" CONTENT="width=device-width, initial-scale=1.0">
+<META NAME="Generator" CONTENT="LaTeX2HTML v2020.2">
+
+<LINK REL="STYLESHEET" HREF="langref.css">
+
+<LINK REL="next" HREF="Contents.html">
+</HEAD>
+
+<BODY >
+
+<DIV CLASS="navigation"><!--Navigation Panel-->
+<A
+ HREF="Contents.html">
+<IMG WIDTH="37" HEIGHT="24" ALT="next" SRC="next.png"></A>
+<IMG WIDTH="26" HEIGHT="24" ALT="up" SRC="up_g.png">
+<IMG WIDTH="63" HEIGHT="24" ALT="previous" SRC="prev_g.png">
+<A ID="tex2html12"
+ HREF="Contents.html">
+<IMG WIDTH="65" HEIGHT="24" ALT="contents" SRC="contents.png"></A>
+<A ID="tex2html14"
+ HREF="Index.html">
+<IMG WIDTH="43" HEIGHT="24" ALT="index" SRC="index.png"></A>
+<BR>
+<B> Next:</B> <A
+ HREF="Contents.html">Contents</A>
+ <B> <A ID="tex2html13"
+ HREF="Contents.html">Contents</A></B>
+ <B> <A ID="tex2html15"
+ HREF="Index.html">Index</A></B>
+<BR>
+<BR></DIV>
+<!--End of Navigation Panel-->
+
+<P>
+
+<P>
+<H1 class="CENTER">SystemTap Language Reference</H1>
+<DIV CLASS="author_info">
+
+</DIV>
+This document was derived from other documents contributed to the SystemTap project by employees of Red Hat, IBM and Intel.
+<BR>
+
+<P>
+Copyright © 2007-2013 Red Hat Inc.
+<BR>
+Copyright © 2007-2009 IBM Corp.
+<BR>
+Copyright © 2007 Intel Corporation.
+<BR>
+
+<P>
+Permission is granted to copy, distribute and/or modify this document
+under the terms of the GNU Free Documentation License, Version 1.2
+or any later version published by the Free Software Foundation;
+with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
+<BR>
+
+<P>
+The GNU Free Documentation License is available from
+<kbd><A ID="tex2html1"
+ HREF="http://www.gnu.org/licenses/fdl.html">http://www.gnu.org/licenses/fdl.html</A></kbd> or by writing to
+the Free Software Foundation, Inc., 51 Franklin Street,
+Fifth Floor, Boston, MA 02110-1301, USA.
+
+<BR><HR>
+<!--Table of Child-Links-->
+<A ID="CHILD_LINKS"></A>
+
+<UL CLASS="ChildLinks">
+<LI><A ID="tex2html16"
+ HREF="Contents.html">Contents</A>
+<LI><A ID="tex2html17"
+ HREF="1_SystemTap_overview.html"><SPAN CLASS="arabic">1</SPAN> SystemTap overview</A>
+<UL>
+<LI><A ID="tex2html18"
+ HREF="1_SystemTap_overview.html#SECTION00021000000000000000"><SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN> About this guide</A>
+<LI><A ID="tex2html19"
+ HREF="1_SystemTap_overview.html#SECTION00022000000000000000"><SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">2</SPAN> Reasons to use SystemTap</A>
+<LI><A ID="tex2html20"
+ HREF="1_SystemTap_overview.html#SECTION00023000000000000000"><SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">3</SPAN> Event-action language</A>
+<LI><A ID="tex2html21"
+ HREF="1_SystemTap_overview.html#SECTION00024000000000000000"><SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">4</SPAN> Sample SystemTap scripts</A>
+<UL>
+<LI><A ID="tex2html22"
+ HREF="1_SystemTap_overview.html#SECTION00024100000000000000"><SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN> Basic SystemTap syntax and control structures</A>
+<LI><A ID="tex2html23"
+ HREF="1_SystemTap_overview.html#SECTION00024200000000000000"><SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">2</SPAN> Primes between 0 and 49</A>
+<LI><A ID="tex2html24"
+ HREF="1_SystemTap_overview.html#SECTION00024300000000000000"><SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">3</SPAN> Recursive functions</A>
+</UL>
+<LI><A ID="tex2html25"
+ HREF="1_SystemTap_overview.html#SECTION00025000000000000000"><SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">5</SPAN> The stap command</A>
+<LI><A ID="tex2html26"
+ HREF="1_SystemTap_overview.html#SECTION00026000000000000000"><SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">6</SPAN> Safety and security</A>
+</UL>
+<BR>
+<LI><A ID="tex2html27"
+ HREF="2_Types_SystemTap_scripts.html"><SPAN CLASS="arabic">2</SPAN> Types of SystemTap scripts</A>
+<UL>
+<LI><A ID="tex2html28"
+ HREF="2_Types_SystemTap_scripts.html#SECTION00031000000000000000"><SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN> Probe scripts</A>
+<LI><A ID="tex2html29"
+ HREF="2_Types_SystemTap_scripts.html#SECTION00032000000000000000"><SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN> Tapset scripts</A>
+</UL>
+<BR>
+<LI><A ID="tex2html30"
+ HREF="3_Components_SystemTap_scri.html"><SPAN CLASS="arabic">3</SPAN> Components of a SystemTap script</A>
+<UL>
+<LI><A ID="tex2html31"
+ HREF="3_Components_SystemTap_scri.html#SECTION00041000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">1</SPAN> Probe definitions</A>
+<LI><A ID="tex2html32"
+ HREF="3_Components_SystemTap_scri.html#SECTION00042000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN> Probe aliases</A>
+<UL>
+<LI><A ID="tex2html33"
+ HREF="3_Components_SystemTap_scri.html#SECTION00042100000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN> Prologue-style aliases (=)</A>
+<LI><A ID="tex2html34"
+ HREF="3_Components_SystemTap_scri.html#SECTION00042200000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN> Epilogue-style aliases (+=)</A>
+<LI><A ID="tex2html35"
+ HREF="3_Components_SystemTap_scri.html#SECTION00042300000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">3</SPAN> Probe alias usage</A>
+<LI><A ID="tex2html36"
+ HREF="3_Components_SystemTap_scri.html#SECTION00042400000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">4</SPAN> Alias suffixes</A>
+<LI><A ID="tex2html37"
+ HREF="3_Components_SystemTap_scri.html#SECTION00042500000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">5</SPAN> Alias suffixes and wildcards</A>
+</UL>
+<LI><A ID="tex2html38"
+ HREF="3_Components_SystemTap_scri.html#SECTION00043000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN> Variables</A>
+<UL>
+<LI><A ID="tex2html39"
+ HREF="3_Components_SystemTap_scri.html#SECTION00043100000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">1</SPAN> Unused variables</A>
+</UL>
+<LI><A ID="tex2html40"
+ HREF="3_Components_SystemTap_scri.html#SECTION00044000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">4</SPAN> Auxiliary functions</A>
+<LI><A ID="tex2html41"
+ HREF="3_Components_SystemTap_scri.html#SECTION00045000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN> Embedded C</A>
+<LI><A ID="tex2html42"
+ HREF="3_Components_SystemTap_scri.html#SECTION00046000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">6</SPAN> Embedded C functions</A>
+<LI><A ID="tex2html43"
+ HREF="3_Components_SystemTap_scri.html#SECTION00047000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">7</SPAN> Embedded C pragma comments</A>
+<LI><A ID="tex2html44"
+ HREF="3_Components_SystemTap_scri.html#SECTION00048000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">8</SPAN> Accessing script level global variables</A>
+</UL>
+<BR>
+<LI><A ID="tex2html45"
+ HREF="4_Probe_points.html"><SPAN CLASS="arabic">4</SPAN> Probe points</A>
+<UL>
+<LI><A ID="tex2html46"
+ HREF="4_Probe_points.html#SECTION00051000000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN> General syntax</A>
+<UL>
+<LI><A ID="tex2html47"
+ HREF="4_Probe_points.html#SECTION00051100000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN> Prefixes</A>
+<LI><A ID="tex2html48"
+ HREF="4_Probe_points.html#SECTION00051200000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">2</SPAN> Suffixes</A>
+<LI><A ID="tex2html49"
+ HREF="4_Probe_points.html#SECTION00051300000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">3</SPAN> Wildcarded file names, function names</A>
+<LI><A ID="tex2html50"
+ HREF="4_Probe_points.html#SECTION00051400000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">4</SPAN> Optional probe points</A>
+<LI><A ID="tex2html51"
+ HREF="4_Probe_points.html#SECTION00051500000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">5</SPAN> Brace expansion</A>
+</UL>
+<LI><A ID="tex2html52"
+ HREF="4_Probe_points.html#SECTION00052000000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">2</SPAN> Built-in probe point types (DWARF probes)</A>
+<UL>
+<LI><A ID="tex2html53"
+ HREF="4_Probe_points.html#SECTION00052100000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN> kernel.function, module().function</A>
+<LI><A ID="tex2html54"
+ HREF="4_Probe_points.html#SECTION00052200000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN> kernel.statement, module().statement</A>
+</UL>
+<LI><A ID="tex2html55"
+ HREF="4_Probe_points.html#SECTION00053000000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">3</SPAN> Function return probes</A>
+<LI><A ID="tex2html56"
+ HREF="4_Probe_points.html#SECTION00054000000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">4</SPAN> DWARF-less probing</A>
+<LI><A ID="tex2html57"
+ HREF="4_Probe_points.html#SECTION00055000000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">5</SPAN> Userspace probing</A>
+<UL>
+<LI><A ID="tex2html58"
+ HREF="4_Probe_points.html#SECTION00055100000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">1</SPAN> Begin/end variants</A>
+<LI><A ID="tex2html59"
+ HREF="4_Probe_points.html#SECTION00055200000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">2</SPAN> Syscall variants</A>
+<LI><A ID="tex2html60"
+ HREF="4_Probe_points.html#SECTION00055300000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">3</SPAN> Function/statement variants</A>
+<LI><A ID="tex2html61"
+ HREF="4_Probe_points.html#SECTION00055400000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">4</SPAN> Absolute variant</A>
+<LI><A ID="tex2html62"
+ HREF="4_Probe_points.html#SECTION00055500000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">5</SPAN> Process probe paths</A>
+<LI><A ID="tex2html63"
+ HREF="4_Probe_points.html#SECTION00055600000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">6</SPAN> Target process mode</A>
+<LI><A ID="tex2html64"
+ HREF="4_Probe_points.html#SECTION00055700000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">7</SPAN> Instruction probes</A>
+<LI><A ID="tex2html65"
+ HREF="4_Probe_points.html#SECTION00055800000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">8</SPAN> Static userspace probing</A>
+</UL>
+<LI><A ID="tex2html66"
+ HREF="4_Probe_points.html#SECTION00056000000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">6</SPAN> Java probes</A>
+<LI><A ID="tex2html67"
+ HREF="4_Probe_points.html#SECTION00057000000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">7</SPAN> PROCFS probes</A>
+<LI><A ID="tex2html68"
+ HREF="4_Probe_points.html#SECTION00058000000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">8</SPAN> Marker probes</A>
+<LI><A ID="tex2html69"
+ HREF="4_Probe_points.html#SECTION00059000000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">9</SPAN> Tracepoints</A>
+<LI><A ID="tex2html70"
+ HREF="4_Probe_points.html#SECTION000510000000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">10</SPAN> Syscall probes</A>
+<LI><A ID="tex2html71"
+ HREF="4_Probe_points.html#SECTION000511000000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">11</SPAN> Timer probes</A>
+<LI><A ID="tex2html72"
+ HREF="4_Probe_points.html#SECTION000512000000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">12</SPAN> Special probe points</A>
+<UL>
+<LI><A ID="tex2html73"
+ HREF="4_Probe_points.html#SECTION000512100000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">12</SPAN>.<SPAN CLASS="arabic">1</SPAN> begin</A>
+<LI><A ID="tex2html74"
+ HREF="4_Probe_points.html#SECTION000512200000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">12</SPAN>.<SPAN CLASS="arabic">2</SPAN> end</A>
+<LI><A ID="tex2html75"
+ HREF="4_Probe_points.html#SECTION000512300000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">12</SPAN>.<SPAN CLASS="arabic">3</SPAN> error</A>
+<LI><A ID="tex2html76"
+ HREF="4_Probe_points.html#SECTION000512400000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">12</SPAN>.<SPAN CLASS="arabic">4</SPAN> begin, end, and error probe sequence</A>
+<LI><A ID="tex2html77"
+ HREF="4_Probe_points.html#SECTION000512500000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">12</SPAN>.<SPAN CLASS="arabic">5</SPAN> never</A>
+</UL>
+</UL>
+<BR>
+<LI><A ID="tex2html78"
+ HREF="5_Language_elements.html"><SPAN CLASS="arabic">5</SPAN> Language elements</A>
+<UL>
+<LI><A ID="tex2html79"
+ HREF="5_Language_elements.html#SECTION00061000000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">1</SPAN> Identifiers</A>
+<LI><A ID="tex2html80"
+ HREF="5_Language_elements.html#SECTION00062000000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">2</SPAN> Data types</A>
+<UL>
+<LI><A ID="tex2html81"
+ HREF="5_Language_elements.html#SECTION00062100000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN> Literals</A>
+<LI><A ID="tex2html82"
+ HREF="5_Language_elements.html#SECTION00062200000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN> Integers</A>
+<LI><A ID="tex2html83"
+ HREF="5_Language_elements.html#SECTION00062300000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">3</SPAN> Strings</A>
+<LI><A ID="tex2html84"
+ HREF="5_Language_elements.html#SECTION00062400000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">4</SPAN> Associative arrays</A>
+<LI><A ID="tex2html85"
+ HREF="5_Language_elements.html#SECTION00062500000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">5</SPAN> Statistics</A>
+</UL>
+<LI><A ID="tex2html86"
+ HREF="5_Language_elements.html#SECTION00063000000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">3</SPAN> Semicolons</A>
+<LI><A ID="tex2html87"
+ HREF="5_Language_elements.html#SECTION00064000000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">4</SPAN> Comments</A>
+<LI><A ID="tex2html88"
+ HREF="5_Language_elements.html#SECTION00065000000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">5</SPAN> Whitespace</A>
+<LI><A ID="tex2html89"
+ HREF="5_Language_elements.html#SECTION00066000000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">6</SPAN> Expressions</A>
+<UL>
+<LI><A ID="tex2html90"
+ HREF="5_Language_elements.html#SECTION00066100000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN> Binary numeric operators</A>
+<LI><A ID="tex2html91"
+ HREF="5_Language_elements.html#SECTION00066200000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN> Binary string operators</A>
+<LI><A ID="tex2html92"
+ HREF="5_Language_elements.html#SECTION00066300000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN> Numeric assignment operators</A>
+<LI><A ID="tex2html93"
+ HREF="5_Language_elements.html#SECTION00066400000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">4</SPAN> String assignment operators</A>
+<LI><A ID="tex2html94"
+ HREF="5_Language_elements.html#SECTION00066500000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">5</SPAN> Unary numeric operators</A>
+<LI><A ID="tex2html95"
+ HREF="5_Language_elements.html#SECTION00066600000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">6</SPAN> Numeric & string comparison, regular expression matching operators</A>
+<LI><A ID="tex2html96"
+ HREF="5_Language_elements.html#SECTION00066700000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">7</SPAN> Ternary operator</A>
+<LI><A ID="tex2html97"
+ HREF="5_Language_elements.html#SECTION00066800000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">8</SPAN> Grouping operator</A>
+<LI><A ID="tex2html98"
+ HREF="5_Language_elements.html#SECTION00066900000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">9</SPAN> Function call</A>
+<LI><A ID="tex2html99"
+ HREF="5_Language_elements.html#SECTION000661000000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">10</SPAN> $ptr->member</A>
+<LI><A ID="tex2html100"
+ HREF="5_Language_elements.html#SECTION000661100000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">11</SPAN> Pointer typecasting</A>
+<LI><A ID="tex2html101"
+ HREF="5_Language_elements.html#SECTION000661200000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">12</SPAN> <value> in <array_name></A>
+<LI><A ID="tex2html102"
+ HREF="5_Language_elements.html#SECTION000661300000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">13</SPAN> [ <value>, ... ] in <array_name></A>
+</UL>
+<LI><A ID="tex2html103"
+ HREF="5_Language_elements.html#SECTION00067000000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">7</SPAN> Literals passed in from the stap command line</A>
+<UL>
+<LI><A ID="tex2html104"
+ HREF="5_Language_elements.html#SECTION00067100000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">7</SPAN>.<SPAN CLASS="arabic">1</SPAN> $1 ... $<NN> for literal pasting</A>
+<LI><A ID="tex2html105"
+ HREF="5_Language_elements.html#SECTION00067200000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">7</SPAN>.<SPAN CLASS="arabic">2</SPAN> @1 ... @<NN> for strings</A>
+<LI><A ID="tex2html106"
+ HREF="5_Language_elements.html#SECTION00067300000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">7</SPAN>.<SPAN CLASS="arabic">3</SPAN> Examples</A>
+</UL>
+<LI><A ID="tex2html107"
+ HREF="5_Language_elements.html#SECTION00068000000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">8</SPAN> Conditional compilation</A>
+<UL>
+<LI><A ID="tex2html108"
+ HREF="5_Language_elements.html#SECTION00068100000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">8</SPAN>.<SPAN CLASS="arabic">1</SPAN> Conditions</A>
+<LI><A ID="tex2html109"
+ HREF="5_Language_elements.html#SECTION00068200000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">8</SPAN>.<SPAN CLASS="arabic">2</SPAN> Conditions based on available target variables</A>
+<LI><A ID="tex2html110"
+ HREF="5_Language_elements.html#SECTION00068300000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">8</SPAN>.<SPAN CLASS="arabic">3</SPAN> Conditions based on kernel version: kernel_v, kernel_vr</A>
+<LI><A ID="tex2html111"
+ HREF="5_Language_elements.html#SECTION00068400000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">8</SPAN>.<SPAN CLASS="arabic">4</SPAN> Conditions based on architecture: arch</A>
+<LI><A ID="tex2html112"
+ HREF="5_Language_elements.html#SECTION00068500000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">8</SPAN>.<SPAN CLASS="arabic">5</SPAN> Conditions based on privilege level: systemtap_privilege</A>
+<LI><A ID="tex2html113"
+ HREF="5_Language_elements.html#SECTION00068600000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">8</SPAN>.<SPAN CLASS="arabic">6</SPAN> True and False Tokens</A>
+</UL>
+<LI><A ID="tex2html114"
+ HREF="5_Language_elements.html#SECTION00069000000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">9</SPAN> Preprocessor macros</A>
+<UL>
+<LI><A ID="tex2html115"
+ HREF="5_Language_elements.html#SECTION00069100000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">9</SPAN>.<SPAN CLASS="arabic">1</SPAN> Local macros</A>
+<LI><A ID="tex2html116"
+ HREF="5_Language_elements.html#SECTION00069200000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">9</SPAN>.<SPAN CLASS="arabic">2</SPAN> Library macros</A>
+</UL>
+</UL>
+<BR>
+<LI><A ID="tex2html117"
+ HREF="6_Statement_types.html"><SPAN CLASS="arabic">6</SPAN> Statement types</A>
+<UL>
+<LI><A ID="tex2html118"
+ HREF="6_Statement_types.html#SECTION00071000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN> break and continue</A>
+<LI><A ID="tex2html119"
+ HREF="6_Statement_types.html#SECTION00072000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN> try/catch</A>
+<LI><A ID="tex2html120"
+ HREF="6_Statement_types.html#SECTION00073000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN> delete</A>
+<LI><A ID="tex2html121"
+ HREF="6_Statement_types.html#SECTION00074000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">4</SPAN> EXP (expression)</A>
+<LI><A ID="tex2html122"
+ HREF="6_Statement_types.html#SECTION00075000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">5</SPAN> for</A>
+<LI><A ID="tex2html123"
+ HREF="6_Statement_types.html#SECTION00076000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">6</SPAN> foreach</A>
+<LI><A ID="tex2html124"
+ HREF="6_Statement_types.html#SECTION00077000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">7</SPAN> if</A>
+<LI><A ID="tex2html125"
+ HREF="6_Statement_types.html#SECTION00078000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">8</SPAN> next</A>
+<LI><A ID="tex2html126"
+ HREF="6_Statement_types.html#SECTION00079000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">9</SPAN> ; (null statement)</A>
+<LI><A ID="tex2html127"
+ HREF="6_Statement_types.html#SECTION000710000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">10</SPAN> return</A>
+<LI><A ID="tex2html128"
+ HREF="6_Statement_types.html#SECTION000711000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">11</SPAN> { } (statement block)</A>
+<LI><A ID="tex2html129"
+ HREF="6_Statement_types.html#SECTION000712000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">12</SPAN> while</A>
+</UL>
+<BR>
+<LI><A ID="tex2html130"
+ HREF="7_Associative_arrays.html"><SPAN CLASS="arabic">7</SPAN> Associative arrays</A>
+<UL>
+<LI><A ID="tex2html131"
+ HREF="7_Associative_arrays.html#SECTION00081000000000000000"><SPAN CLASS="arabic">7</SPAN>.<SPAN CLASS="arabic">1</SPAN> Examples</A>
+<LI><A ID="tex2html132"
+ HREF="7_Associative_arrays.html#SECTION00082000000000000000"><SPAN CLASS="arabic">7</SPAN>.<SPAN CLASS="arabic">2</SPAN> Types of values</A>
+<LI><A ID="tex2html133"
+ HREF="7_Associative_arrays.html#SECTION00083000000000000000"><SPAN CLASS="arabic">7</SPAN>.<SPAN CLASS="arabic">3</SPAN> Array capacity</A>
+<LI><A ID="tex2html134"
+ HREF="7_Associative_arrays.html#SECTION00084000000000000000"><SPAN CLASS="arabic">7</SPAN>.<SPAN CLASS="arabic">4</SPAN> Array wrapping</A>
+<LI><A ID="tex2html135"
+ HREF="7_Associative_arrays.html#SECTION00085000000000000000"><SPAN CLASS="arabic">7</SPAN>.<SPAN CLASS="arabic">5</SPAN> Iteration, foreach</A>
+<LI><A ID="tex2html136"
+ HREF="7_Associative_arrays.html#SECTION00086000000000000000"><SPAN CLASS="arabic">7</SPAN>.<SPAN CLASS="arabic">6</SPAN> Deletion</A>
+</UL>
+<BR>
+<LI><A ID="tex2html137"
+ HREF="8_Statistics_aggregates.html"><SPAN CLASS="arabic">8</SPAN> Statistics (aggregates)</A>
+<UL>
+<LI><A ID="tex2html138"
+ HREF="8_Statistics_aggregates.html#SECTION00091000000000000000"><SPAN CLASS="arabic">8</SPAN>.<SPAN CLASS="arabic">1</SPAN> The aggregation (< < <) operator</A>
+<LI><A ID="tex2html139"
+ HREF="8_Statistics_aggregates.html#SECTION00092000000000000000"><SPAN CLASS="arabic">8</SPAN>.<SPAN CLASS="arabic">2</SPAN> Extraction functions</A>
+<LI><A ID="tex2html140"
+ HREF="8_Statistics_aggregates.html#SECTION00093000000000000000"><SPAN CLASS="arabic">8</SPAN>.<SPAN CLASS="arabic">3</SPAN> Integer extractors</A>
+<UL>
+<LI><A ID="tex2html141"
+ HREF="8_Statistics_aggregates.html#SECTION00093100000000000000"><SPAN CLASS="arabic">8</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">1</SPAN> @count(s)</A>
+<LI><A ID="tex2html142"
+ HREF="8_Statistics_aggregates.html#SECTION00093200000000000000"><SPAN CLASS="arabic">8</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN> @sum(s)</A>
+<LI><A ID="tex2html143"
+ HREF="8_Statistics_aggregates.html#SECTION00093300000000000000"><SPAN CLASS="arabic">8</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN> @min(s)</A>
+<LI><A ID="tex2html144"
+ HREF="8_Statistics_aggregates.html#SECTION00093400000000000000"><SPAN CLASS="arabic">8</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">4</SPAN> @max(s)</A>
+<LI><A ID="tex2html145"
+ HREF="8_Statistics_aggregates.html#SECTION00093500000000000000"><SPAN CLASS="arabic">8</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN> @avg(s)</A>
+</UL>
+<LI><A ID="tex2html146"
+ HREF="8_Statistics_aggregates.html#SECTION00094000000000000000"><SPAN CLASS="arabic">8</SPAN>.<SPAN CLASS="arabic">4</SPAN> Histogram extractors</A>
+<UL>
+<LI><A ID="tex2html147"
+ HREF="8_Statistics_aggregates.html#SECTION00094100000000000000"><SPAN CLASS="arabic">8</SPAN>.<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN> @hist_linear</A>
+<LI><A ID="tex2html148"
+ HREF="8_Statistics_aggregates.html#SECTION00094200000000000000"><SPAN CLASS="arabic">8</SPAN>.<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">2</SPAN> @hist_log</A>
+</UL>
+<LI><A ID="tex2html149"
+ HREF="8_Statistics_aggregates.html#SECTION00095000000000000000"><SPAN CLASS="arabic">8</SPAN>.<SPAN CLASS="arabic">5</SPAN> Deletion</A>
+</UL>
+<BR>
+<LI><A ID="tex2html150"
+ HREF="9_Formatted_output.html"><SPAN CLASS="arabic">9</SPAN> Formatted output</A>
+<UL>
+<LI><A ID="tex2html151"
+ HREF="9_Formatted_output.html#SECTION000101000000000000000"><SPAN CLASS="arabic">9</SPAN>.<SPAN CLASS="arabic">1</SPAN> print</A>
+<LI><A ID="tex2html152"
+ HREF="9_Formatted_output.html#SECTION000102000000000000000"><SPAN CLASS="arabic">9</SPAN>.<SPAN CLASS="arabic">2</SPAN> printf</A>
+<LI><A ID="tex2html153"
+ HREF="9_Formatted_output.html#SECTION000103000000000000000"><SPAN CLASS="arabic">9</SPAN>.<SPAN CLASS="arabic">3</SPAN> printd</A>
+<LI><A ID="tex2html154"
+ HREF="9_Formatted_output.html#SECTION000104000000000000000"><SPAN CLASS="arabic">9</SPAN>.<SPAN CLASS="arabic">4</SPAN> printdln</A>
+<LI><A ID="tex2html155"
+ HREF="9_Formatted_output.html#SECTION000105000000000000000"><SPAN CLASS="arabic">9</SPAN>.<SPAN CLASS="arabic">5</SPAN> println</A>
+<LI><A ID="tex2html156"
+ HREF="9_Formatted_output.html#SECTION000106000000000000000"><SPAN CLASS="arabic">9</SPAN>.<SPAN CLASS="arabic">6</SPAN> sprint</A>
+<LI><A ID="tex2html157"
+ HREF="9_Formatted_output.html#SECTION000107000000000000000"><SPAN CLASS="arabic">9</SPAN>.<SPAN CLASS="arabic">7</SPAN> sprintf</A>
+</UL>
+<BR>
+<LI><A ID="tex2html158"
+ HREF="10_Tapset_defined_functions.html"><SPAN CLASS="arabic">10</SPAN> Tapset-defined functions</A>
+<LI><A ID="tex2html159"
+ HREF="11_Further_Reference.html"><SPAN CLASS="arabic">11</SPAN> For Further Reference</A>
+<LI><A ID="tex2html160"
+ HREF="Index.html">Index</A>
+<LI><A ID="tex2html161"
+ HREF="About_this_document.html">About this document ...</A>
+</UL>
+<!--End of Table of Child-Links-->
+<BR><HR>
+
+</BODY>
+</HTML>