error::pass4 - systemtap pass-4 errors
Errors that occur during pass 4 (compilation) have generally only
a few causes:
- kernel or OS version
changes
- The systemtap runtime and embedded-C fragments in the tapset library are
designed to be portable across a wide range of OS versions. However,
incompatibilities can occur when some OS changes occur, such as kernel
modifications that change functions, types, or macros referenced by
systemtap. Upstream (git://sourceware.org/git/systemtap.git) builds of
systemtap are often quickly updated to include relevant fixes, so try
getting or making an updated build. Reworded: build systemtap from
git for use with very young kernels. If the issue persists,
report the problem to the systemtap developers.
- buggy embedded-C
code
- Embedded-C code in your own guru-mode script cannot be checked by
systemtap, and is passed through verbatim to the compiler. Errors in such
snippets of code may be found during the pass-4 compiler invocation,
though may be hard to identify by the compiler errors.
- incompatible
embedded-C code
- The interface standards between systemtap-generated code and embedded-C
code occasionally change. For example, before version 1.8, arguments were
passed using macros THIS->foo and THIS->__retvalue but
from version 1.8 onward, using STAP_ARG_foo and
STAP_RETVALUE. Adjust your embedded-C code to current standards, or
use the stap --compatible=VERSION option to make systemtap use a
different one.
- compiler bugs and
mysteries
- Messages such as "internal compiler error" suggest compiler
problems. These should be reported to the compiler developers in the form
of a preprocessed .i file, plus the compiler command line. To
gather relevant information, run
stap -k --vp 0003 -p4 ....
Systemtap will report the saved temporary directory, and the
compiler command line it attempted. Go to the directory to find he main
generated file stap_NNNNN_src.c. Force the compiler to produce a
preprocessed file with:
make -C /lib/modules/`uname -r`/build M=`pwd` stap_NNNNN_src.i
(note the .i suffix), and the compiler command line should
be in the file .stap_NNNNN_src.i.cmd.