David Smith [Tue, 7 Jul 2015 19:01:27 +0000 (14:01 -0500)]
Fixed PR18634 by getting timer probes to compile on rawhide.
* runtime/linux/timer.c (_stp_hrtimer_init): If STAPCONF_HRTIMER_GET_RES
isn't defined, meaning hrtimer_get_res() doesn't exist, just use the
'hrtimer_resolution' variable.
* buildrun.cxx (compile_pass): Add an export test for hrtimer_get_res().
* translate.cxx (emit_common_header): Remove generated inclusion of
linux/hrtimer.h.
* runtime/linux/timer.h: Add inclusion of linux/hrtimer.h.
David Smith [Tue, 7 Jul 2015 15:41:43 +0000 (10:41 -0500)]
Fixed BZ1240682 by fixing a rawhide compile problem.
* translate.cxx (translate_pass): Move the inclusion of runtime.h up
before the declaration of the module refresh mutex, to avoid compilation
problems on rawhide.
Josh Stone [Mon, 6 Jul 2015 18:35:51 +0000 (11:35 -0700)]
PR18555: prefer linkage_name to match the symtab
DW_AT_name is usually only the same as the symbol table for C. C++
names are mangled, which may be given by DW_AT_linkage_name. So if we
want to compare a DWARF subprogram to the symbol table by name, we
should prefer the linkage name when it's available.
This mattered especially for ppc64le, where query_dwarf_func was trying
to apply the global/local symbol offset. When we took a DWARF C++
function and tried to find that name in the symbol table for its offset,
there was no match, so the function wouldn't be resolved at all.
Now that lookup uses the linkage name. If there's still no match, like
with a stripped symbol table, then it falls through to just use DWARF's
entrypc as usual.
This patch also maintains the raw "addr" and offset "entrypc" separately
for symbol table functions, so for instance update_symtab can still
compare the original address.
David Smith [Thu, 2 Jul 2015 19:18:52 +0000 (14:18 -0500)]
Simplify a few syscall probes and handle RHEL5 kernels a bit better.
* tapset/linux/nd_syscalls.stp (nd_syscall.truncate): Simplified with fix
to long_arg() properly returning negative values.
(nd_syscall.keyctl): Ditto.
* tapset/linux/nd_syscalls2.stp (nd_syscall.quotactl): Only skip calls if
we're on a kernel >= 2.623, when sys32_quotactl() was introduced.
(syscall.truncate): Simplified.
* tapset/linux/syscalls2.stp (syscall.quotactl): Only skip calls if we're
on a kernel >= 2.623, when sys32_quotactl() was introduced.
(syscall.truncate): Matches more closely with the nd_syscall version,
which fixed a problem on RHEL5.
* tapset/linux/x86_64/syscalls.stp (syscall.get_thread_area): Added
support for RHEL5 kernels.
(syscall.set_thread_area): Ditto.
* tapset/linux/x86_64/nd_syscalls.stp: Ditto.
* testsuite/systemtap.syscall/fallocate.c: Properly handle ppc calls.
* testsuite/systemtap.syscall/keyctl.c: Handle keyctl() being
non-implemented.
* testsuite/systemtap.syscall/readahead.c: Handle ppc problems and glibc <
2.8 problems.
* testsuite/systemtap.syscall/readdir.c: Handle readdir() being
non-implemented.
* testsuite/systemtap.syscall/rt_signal.c (main): Handle
rt_tgsigqueueinfo() being non-implemented.
* testsuite/systemtap.syscall/uselib.c: Make sure we're on kernel >=
2.6.22, since before that uselib() could call quiet_ni_syscall(), which
we can't probe since it is in assembly.
David Smith [Wed, 1 Jul 2015 17:27:21 +0000 (12:27 -0500)]
Fixed PR18597 by returning negative values correctly from long_arg().
* tapset/powerpc/registers.stp (_stp_arg2): New function that fixes the
problem with _stp_arg() where long_arg() doesn't handle negative values
correctly. Callers can also force a 64-bit returned value.
(longlong_arg): Force a 64-bit return value.
* tapset/s390/registers.stp: Ditto.
* tapset/x86_64/registers.stp: Ditto.
* tapset/linux/nd_syscalls2.stp: Simplified nd_syscall.sync_file_range.
* tapset/linux/nd_syscalls.stp: Simplified nd_syscall.io_submit.
* testsuite/systemtap.syscall/pread.c: Add more 64-bit values to test.
* testsuite/systemtap.syscall/pwrite.c: Ditto.
Mark Wielaard [Tue, 30 Jun 2015 22:34:32 +0000 (00:34 +0200)]
Various fixes for test failures caused by implicit warnings.
Add various function and variable declarations and/or includes for
failures caused by new gcc warnings -Wimplicit-function-declaration
or -Wimplicit-int.
Mark Wielaard [Tue, 30 Jun 2015 19:54:28 +0000 (21:54 +0200)]
unwind.c (compute_expr): Don't fallthrough after div/mod/shr.
When processing DW_OP_div, DW_OP_mod or DW_OP_shr compute_expr
would accidentially fallthrough to the next case statement causing
the DWARF value stack to contain wrong values.
David Smith [Tue, 30 Jun 2015 20:24:54 +0000 (15:24 -0500)]
Two small stat code fixes found by source analysis.
* runtime/stat-common.c (_stp_stat_print_histogram_buf): Fixed small
potential overflow problem by widening values.
* runtime/stat.c (_stp_stat_init): Fixed missing 'va_end' call in an error
situation.
Martin Cermak [Fri, 26 Jun 2015 08:22:37 +0000 (10:22 +0200)]
PR18571: tapset support bpf and seccomp syscalls
NEWS: Deprecate seccomp's 'uargs' in favor of 'uargs_uaddr'.
tapset/linux/aux_syscalls.stp: New _seccomp_op_str() and _bpf_cmd_str().
tapset/linux/nd_syscalls.stp: New probe nd_syscall.bpf.
tapset/linux/nd_syscalls2.stp: Update probe nd_syscall.seccomp.
tapset/linux/syscalls.stp: New probe syscall.bpf.
tapset/linux/syscalls2.stp: Update probe syscall.seccomp.
testsuite/buildok/aux_syscalls-embedded.stp: Test _seccomp_op_str(), _bpf_cmd_str().
testsuite/buildok/nd_syscalls-detailed.stp: Test probe nd_syscall.bpf.
testsuite/buildok/nd_syscalls2-detailed.stp: Update test for probe nd_syscall.seccomp.
testsuite/buildok/syscalls-detailed.stp: Test probe syscall.bpf.
testsuite/buildok/syscalls2-detailed.stp: Update test for probe syscall.seccomp.
testsuite/systemtap.syscall/bpf.c: New testcase.
testsuite/systemtap.syscall/seccomp.c: New testcase.
David Smith [Thu, 25 Jun 2015 14:46:39 +0000 (09:46 -0500)]
Fixed PR18577 by making 'stap -l **' faster.
* tapsets.cxx (suggest_marks): Don't generate the suggestion list if we're
in either of the listing modes (-l/-L) and the verbose level is less
than 2.
(suggest_plt_functions): Ditto.
(suggest_dwarf_functions): Ditto.
* elaborate.cxx (suggest_functors): Ditto.
* elaborate.h: Updated suggest_functors declaration.
* tapset/linux/rpc.stp: Make some optional probes more optional.
* tapset/linux/scsi.stp: Ditto.
* tapset/linux/signal.stp: Ditto.
* tapset/linux/syscalls2.stp: Ditto.
* tapset/linux/nd_syscalls2.stp: Ditto.
Martin Cermak [Tue, 23 Jun 2015 06:36:46 +0000 (08:36 +0200)]
PR18462: Allow library macro deprecation
Parts of the tapset code can get deprecated using conditionals as
described in the HACKING file. This patch extends this to library
macros, which can now get deprecated too. Patch includes example
macro deprecation and a testcase.
Mark Wielaard [Mon, 22 Jun 2015 14:57:59 +0000 (16:57 +0200)]
runtime/unwind.c: Also sanity check DWARF regno for DW_CFA_restore[_extended].
When processCFI wanted to restore a register state to its initial value it
wasn't checking whether the register was actually interesting (or existing).
DWARF_REG_MAP might return a marker (9999) that we don't know or don't care
about this register. This was checked in all the set_*_rule functions, but
not in the case we reset the rule of the register. Add this check also for
DW_CFA_restore[_extended].
David Smith [Fri, 19 Jun 2015 18:08:23 +0000 (13:08 -0500)]
Fixed PR18562 by updating listing_mode.exp for systems without uprobes.
* testsuite/systemtap.base/listing_mode.exp: For systems without uprobes,
such as ia64 and some s390x kernels, mark probes requiring uprobes as
untested.
Frank Ch. Eigler [Fri, 19 Jun 2015 14:04:33 +0000 (10:04 -0400)]
PR17737 cont'd: switch to out-of-line xsl parameter file
The "generate.toc" parameter is a PITA to pass on the xmlto command
line with --stringparam, because it's whitespace-laden and structured.
So instead we switch to the "xmlto -m FRAGMENT.xml" mechanism.
David Smith [Thu, 18 Jun 2015 17:46:43 +0000 (12:46 -0500)]
Fixed PR17831 by making kprobes_onthefly.exp more robust.
* testsuite/systemtap.onthefly/kprobes_onthefly.exp: Switch from probing
'vfs.read' and 'vfs.read.return' to probing the underlying kernel
function to avoid inlines, which confused the output.
David Smith [Wed, 17 Jun 2015 18:13:09 +0000 (13:13 -0500)]
Fixed PR18554 by upating the list.exp test case.
* testsuite/systemtap.base/list.exp: Look for several inlined kernel
functions instead of just one (since on any particular kernel there
might not be an inlined version of that function).
David Smith [Wed, 17 Jun 2015 16:35:44 +0000 (11:35 -0500)]
Fixed PR18551 by updating the migrate.stp example script.
* testsuite/systemtap.examples/process/migrate.stp: Now prefers using the
'sched_migrate_task' tracepoint since its arguments will always be
available. Updated to use more of the functions from task.stp.
David Smith [Mon, 15 Jun 2015 16:34:08 +0000 (11:34 -0500)]
Fixed PR18538 by updating the scsi tapset.
* tapset/linux/scsi.stp: Fix problems on rawhide by removing source file
names from probe aliases. These don't appear to be needed and they cause
problems if functions get moved around.
David Smith [Fri, 12 Jun 2015 20:38:34 +0000 (15:38 -0500)]
Fixed PR18526 by updating the socket tapset.
* tapset/linux/socket.stp: Add support for socket_write_iter() and
socket_read_iter(), the replacements for socket_aio_write() and
socket_aio_read. Update socket.sendmsg for newer kernels. Update
_get_sock_addr() for newer kernels.
* testsuite/buildok/socket-detailed.stp: Updated and add tests for new
probes.
David Smith [Fri, 12 Jun 2015 14:07:05 +0000 (09:07 -0500)]
Fixed PR18518 by updating the vfs and nfs tapsets.
* tapset/linux/vfs.stp: Fix the vfs.do_sync_read and vfs.do_sync_write
probe aliases on rawhide kernels where the underlying probe points no
longer exist.
* tapset/linux/nfs.stp: Update probes that use vfs.do_sync_read and
vfs.do_sync_write.
Abegail Jakop [Mon, 8 Jun 2015 19:30:12 +0000 (15:30 -0400)]
runtime/linux/namespaces.h: hold rcu_read_lock longer
require the rcu_read_lock in get_*_namespaces(). then the rcu_read_lock
is acquired in from_target_*_ns() before calling get_*_namespace()
and is returned after it's done with the pid namepace. also moved
duplicated code to a helper function, get_task_struct_from pid()
Abegail Jakop [Fri, 29 May 2015 20:08:07 +0000 (16:08 -0400)]
add -N TARGET_NS_PID option to staprun
buildrun.cxx: add -N if there is a target namespaces pid when making
the staprun command
staprun/common.c: parse new -N option that takes a pid. also check
to make sure the given pid is not obviously invalid
staprun/mainloop.c: dbug msg if there is a target namespace pid
session.cxx: check the target ns pid is not an obviously invalid pid
Abegail Jakop [Mon, 1 Jun 2015 15:46:34 +0000 (11:46 -0400)]
move the bulk of [task_]ns_* tapsets to helper fns
runtime/linux/namespaces.h: define helper fns to get specific pid or user
information based on the target namespaces. rely on the new runtime
variable _stp_namespace_pid rather than the _STP_NAMESPACE_PID macro
runtime/transport/transport.c: define runtime var _stp_namespace_pid
that will contain the target namespaces pid. default to _stp_pid
if there was no target ns pid specified
tapset/linux/*.stp: replace body of [task_]ns_* tapset functions with a
call to the helper functions in namespaces.h
translate.cxx: remove _STP_NAMESPACE_PID macro definition
Abegail Jakop [Fri, 29 May 2015 15:20:17 +0000 (11:20 -0400)]
add /* guru */ pragma to task_ns_* tapsets
the task_ns_* functions aren't protected from read faults when trying to
access the task struct at the provided address, so we'll add the /* guru */
pragma to hint at how unsafe those functions are.
Abegail Jakop [Tue, 26 May 2015 18:40:35 +0000 (14:40 -0400)]
moved repetitive pid-to-ns chunks into a function
runtime/linux/namespaces.h: get_pid_namespace() and get_user_namespace()
that take in a (int) pid returning a pointer to the namespace.
translate.cxx: include the namespaces.h file, if --runtime=kernel
tapset/linux/*.stp: replace repetitive pid-to-namespace code with new
get_*_namespace()
Abegail Jakop [Mon, 25 May 2015 18:45:08 +0000 (14:45 -0400)]
context_ns.exp: test for pid ns-aware tapset functions
new test case to check that the ns-aware tapset functions are returning
values that match what is expected. currently only implemented for pid
ns tapset functions.
Abegail Jakop [Fri, 22 May 2015 18:10:03 +0000 (14:10 -0400)]
remove ns comparison in [task_]ns_* tapsets
turns out that the functions used to get the ns-specific values in the
new tapsets will return a sufficient error value (0 or uid/guid overflow
value) if the target task/current is not in the target pid/user namespace
Abegail Jakop [Fri, 22 May 2015 18:02:17 +0000 (14:02 -0400)]
use find_pid_ns instead of find_get_pid in [task_]ns_*
in the new namespace-aware tapset functions, we cant use find_get_pid() to
get the pid struct from a target ns pid because it looks for that pid in the
current task's pid ns, when we want it to look in the root pidns. switched
to find_pid_ns() which allows us to specify a pid ns to look in.
Abegail Jakop [Tue, 19 May 2015 18:30:50 +0000 (14:30 -0400)]
buildok test cases for ns-aware tapsets
testsuite/buildok/context-embedded-ns.stp: check that the pid and user
related ns_* tapsets can build.
testsuite/buildok/task_ns.stp: check that the pid and user related
task_ns_* tapsets can build.
testsuite/systemtap.pass1-4/buildok-dyninst.exp: add test cases to
dyinst run's KFAIL list
Abegail Jakop [Fri, 15 May 2015 15:18:01 +0000 (11:18 -0400)]
new namespace-aware tapset functions: [task_]ns_*
context.stp: new tapset functions ns_[pid|tid|ppid|pgrp|sid] for pid
namespaces. ns_[e][g|u]id functions for user namespaces. the returned
value with be relative to either the --target-namespaces=PID or the stap
process' pid or user namespace.
task.stp: task_ns_* (and others) functions to be the namespace-aware
counterparts to the original task_* functions. the new functions will
return a value relative to the target-namespaces=PID or stap process'
namespaces.
Abegail Jakop [Tue, 19 May 2015 15:54:31 +0000 (11:54 -0400)]
new option: --target-namespaces=PID
added a new option to specify a set of target namespaces based on a pid.
this will be used with upcoming namespace-aware tapsets, which will
rely on that target namespaces in order to provide relevant information.
David Smith [Wed, 10 Jun 2015 17:38:52 +0000 (12:38 -0500)]
Fixed PR18461 by updating the netfilter code for linux 4.1.
* tapset-netfilter.cxx (emit_module_decls): Add support for new linux 4.1
netfilter changes.
* buildrun.cxx (compile_pass): Add new netfilter autoconf test.
* runtime/linux/autoconf-netfilter-4_1.c: New autoconf test.
Martin Cermak [Tue, 9 Jun 2015 07:47:01 +0000 (09:47 +0200)]
PR18492: Add tapset support and test coverage for sched_{get,set}attr
* tapset/linux/aux_syscalls.stp: New function _struct_sched_attr_u()
* tapset/linux/nd_syscalls2.stp: New probes nd_syscall.sched_{g,s}etattr
* tapset/linux/syscalls2.stp: New probes syscall.sched_{g,s}etattr
* testsuite/buildok/aux_syscalls-embedded.stp: New subtest
* testsuite/buildok/nd_syscalls2-detailed.stp: Ditto
* testsuite/buildok/syscalls2-detailed.stp: Ditto
* testsuite/systemtap.syscall/sched_attr.c: New testcase
Martin Cermak [Tue, 9 Jun 2015 06:32:41 +0000 (08:32 +0200)]
PR18501: Add tapset support and test coverage for the kcmp syscall
* tapset/linux/aux_syscalls.stp: New function _kcmp_type_str()
* tapset/linux/nd_syscalls.stp: New probe nd_syscall.kcmp
* tapset/linux/syscalls.stp: New probe syscall.kcmp
* testsuite/buildok/aux_syscalls-embedded.stp: New subtest
* testsuite/buildok/nd_syscalls-detailed.stp: Ditto
* testsuite/buildok/syscalls-detailed.stp: Ditto
* testsuite/systemtap.syscall/kcmp.c: New testcase
William Cohen [Fri, 29 May 2015 19:50:22 +0000 (15:50 -0400)]
Use a value for bad syscall that works better on 32-bit ARM
On 32-bit ARM the use of -1 for the syscall number for the bad syscall
in the utrace_syscall_args test will result in a kernel oops on some
kernels and the use other negative numbers will result in illegal
instruction exceptions. Changing the bad syscall to use a large
positive number for the bad syscall to allow this test to work better
on 32-bit arm.
Frank Ch. Eigler [Tue, 26 May 2015 23:01:33 +0000 (19:01 -0400)]
netfilter/ip tapset: add "kernel<foo.h>" for all @cast()'s
It is preferable to generate typing debuginfo for tapsets from headers
if possible, rather than require kernel-debuginfo. This corrects the
buildok/netfilter-glob.stp test case on f21.
This is because ppc64le is not added to arch list in systemtap.exp .
cmd_parse.exp also fails with similar error for arch. Modifying the
code for ppc64le.