/* A function that returns the device name given the net_device struct */
function get_netdev_name:string (addr:long) {
- return kernel_string(@cast(addr, "net_device")->name)
+ return kernel_string(@cast(addr, "net_device", "kernel")->name)
}
/**
function timer_pending:long(timer:long)
{
- return (@choose_defined(@cast(timer, "timer_list")->entry->next,
- @cast(timer, "timer_list")->base) != 0)
+ return (@choose_defined(@cast(timer, "timer_list", "kernel")->entry->next,
+ @cast(timer, "timer_list", "kernel")->base) != 0)
}
function scsi_timer_pending:long(cmd:long)
# pretty-printing with @cast
probe begin {
t = task_current()
- log(@cast(t, "task_struct")->fs$)
- log(@cast(t, "task_struct")->fs$$)
- log(@cast(t, "task_struct")->comm$)
- log(@cast(t, "task_struct")->comm$$)
- log(@cast(t, "task_struct")->comm[0]$)
- log(@cast(t, "task_struct")->comm[0]$$)
- log(@cast(t, "task_struct")->comm[i]$)
- log(@cast(t, "task_struct")->comm[i]$$)
+ log(@cast(t, "task_struct", "kernel")->fs$)
+ log(@cast(t, "task_struct", "kernel")->fs$$)
+ log(@cast(t, "task_struct", "kernel")->comm$)
+ log(@cast(t, "task_struct", "kernel")->comm$$)
+ log(@cast(t, "task_struct", "kernel")->comm[0]$)
+ log(@cast(t, "task_struct", "kernel")->comm[0]$$)
+ log(@cast(t, "task_struct", "kernel")->comm[i]$)
+ log(@cast(t, "task_struct", "kernel")->comm[i]$$)
}
# pretty-printing in dwarf kernel context
probe begin {
// basic @cast test, with and without specifying kernel
- println(@cast(0, "task_struct")->tgid)
+ println(@cast(0, "task_struct", "kernel")->tgid)
println(@cast(0, "task_struct", "kernel")->tgid)
// check module-search paths
@cast(0, "task_struct", "no_such_module")->tgid
// PR11556: we should be able to treat the initial pointer like an array too
- println(@cast(0, "task_struct")[42]->tgid)
+ println(@cast(0, "task_struct", "kernel")[42]->tgid)
}
# pretty-printing with @cast
probe begin {
t = task_current()
- log(@cast(t, "task_struct")$)
- log(@cast(t, "task_struct")$$)
- log(@cast(t, "task_struct")->fs$)
- log(@cast(t, "task_struct")->fs$$)
- log(@cast(t, "task_struct")->comm$)
- log(@cast(t, "task_struct")->comm$$)
- log(@cast(t, "task_struct")->comm[0]$)
- log(@cast(t, "task_struct")->comm[0]$$)
- log(@cast(t, "task_struct")->comm[i]$)
- log(@cast(t, "task_struct")->comm[i]$$)
+ log(@cast(t, "task_struct", "kernel")$)
+ log(@cast(t, "task_struct", "kernel")$$)
+ log(@cast(t, "task_struct", "kernel")->fs$)
+ log(@cast(t, "task_struct", "kernel")->fs$$)
+ log(@cast(t, "task_struct", "kernel")->comm$)
+ log(@cast(t, "task_struct", "kernel")->comm$$)
+ log(@cast(t, "task_struct", "kernel")->comm[0]$)
+ log(@cast(t, "task_struct", "kernel")->comm[0]$$)
+ log(@cast(t, "task_struct", "kernel")->comm[i]$)
+ log(@cast(t, "task_struct", "kernel")->comm[i]$$)
}
# pretty-printing in dwarf kernel context
#! stap -p2
probe begin {
- println("task_struct: ", @cast_sizeof("task_struct"))
+ # println("task_struct: ", @cast_sizeof("task_struct"))
println("task_struct: ", @cast_module_sizeof("kernel", "task_struct"))
println("task_struct: ", @cast_module_sizeof("kernel<linux/sched.h>", "task_struct"))
println("FILE: ", @cast_module_sizeof("<stdio.h>", "FILE"))
probe kernel.function("do_sys_open") { println(@defined($mode) ? 1 : $nosuchvar) }
probe kernel.trace("sched_switch")? { println(@defined($next->pid) ? 1 : $nosuchvar) }
probe procfs.write { println(@defined($value) ? 1 : $nosuchvar) }
-probe begin { println(@defined(@cast(0, "task_struct")->pid) ? 1 : $nosuchvar) }
+probe begin { println(@defined(@cast(0, "task_struct", "kernel")->pid) ? 1 : $nosuchvar) }
probe timer.s(1),timer.jiffies(1) { println(@defined($nosuchvar)?$nosuchvar:0) } # invalid
probe timer.profile { println(@defined($nosuchvar)?$nosuchvar:0) } # invalid
-probe begin { println(@defined(@cast(0, "task_struct")->foo)?$nosuchvar:0) } # invalid
-probe begin { println(@defined(@cast(0, "task_struct")->pid)?1:$nosuchvar) } # valid
-probe kernel.function("do_sys_open") { println(@defined(@cast(0, "task_struct")->foo)?$nosuchvar:0) } # invalid
-probe kernel.function("do_sys_open") { println(@defined(@cast(0, "task_struct")->pid)?1:$nosuchvar) } # valid
+probe begin { println(@defined(@cast(0, "task_struct", "kernel")->foo)?$nosuchvar:0) } # invalid
+probe begin { println(@defined(@cast(0, "task_struct", "kernel")->pid)?1:$nosuchvar) } # valid
+probe kernel.function("do_sys_open") { println(@defined(@cast(0, "task_struct", "kernel")->foo)?$nosuchvar:0) } # invalid
+probe kernel.function("do_sys_open") { println(@defined(@cast(0, "task_struct", "kernel")->pid)?1:$nosuchvar) } # valid
-function foo1() { println(@defined(@cast(0, "task_struct")->foo)?$nosuchvar:0) } # invalid
-function foo2() { println(@defined(@cast(0, "task_struct")->pid)?1:$nosuchvar) } # valid
+function foo1() { println(@defined(@cast(0, "task_struct", "kernel")->foo)?$nosuchvar:0) } # invalid
+function foo2() { println(@defined(@cast(0, "task_struct", "kernel")->pid)?1:$nosuchvar) } # valid
probe begin { foo1(); foo2(); }
# PR11598: support @defined(&...)
-probe begin { println(@defined(@cast(0, "task_struct")->rcu)?$nosuchvar:0) } # invalid
-probe begin { println(@defined(&@cast(0, "task_struct")->rcu)?1:$nosuchvar) } # valid
+probe begin { println(@defined(@cast(0, "task_struct", "kernel")->rcu)?$nosuchvar:0) } # invalid
+probe begin { println(@defined(&@cast(0, "task_struct", "kernel")->rcu)?1:$nosuchvar) } # valid
probe kernel.function("release_task") { println(@defined($p->rcu)?$nosuchvar:0) } # invalid
probe kernel.function("release_task") { println(@defined(&$p->rcu)?1:$nosuchvar) } # valid
ptr = get_ptr()
/* set the bits with cast */
- @cast(ptr, "tcphdr")->ack = ack
- @cast(ptr, "tcphdr")->urg = urg
+ @cast(ptr, "tcphdr", "kernel")->ack = ack
+ @cast(ptr, "tcphdr", "kernel")->urg = urg
/* check that reading with embedded-C is ok */
real_ack = get_ack()
errors = (ack != real_ack) + (urg != real_urg)
/* check that reading with a cast is ok */
- cast_ack = @cast(ptr, "tcphdr")->ack
- cast_urg = @cast(ptr, "tcphdr")->urg
+ cast_ack = @cast(ptr, "tcphdr", "kernel")->ack
+ cast_urg = @cast(ptr, "tcphdr", "kernel")->urg
errors += (ack != cast_ack) + (urg != cast_urg)
if (errors)
probe syscall.nanosleep
{
if (target_set_pid(pid())
- && user_long(&@cast(req_uaddr, "struct timespec")->tv_sec) == $1)
+ && user_long(&@cast(req_uaddr, "struct timespec", "kernel")->tv_sec) == $1)
target_set_report()
}
probe syscall.compat_nanosleep ?
{
if (target_set_pid(pid())
- && user_long(&@cast(req_uaddr, "struct compat_timespec")->tv_sec) == $1)
+ && user_long(&@cast(req_uaddr, "struct compat_timespec", "kernel")->tv_sec) == $1)
target_set_report()
}
probe syscall.rt_sigaction {
if (pid() == target() && execname() == "%s") {
// Note user address.
- handler = user_long(&@cast(act_uaddr, "struct sigaction")->sa_handler);
+ handler = user_long(&@cast(act_uaddr, "struct sigaction", "kernel")->sa_handler);
try {
printf("handler: %%s (%%s)\n", usymname(handler), umodname(handler));
} catch {
probe syscall.rt_sigaction32 ? {
if (pid() == target() && execname() == "%s") {
// Note user address.
- handler = user_long(@defined(@cast(0, "compat_sigaction")->sa_handler)
- ? &@cast(act_uaddr, "compat_sigaction")->sa_handler
- : &@cast(act_uaddr, "sigaction32")->sa_handler);
+ handler = user_long(@defined(@cast(0, "compat_sigaction", "kernel")->sa_handler)
+ ? &@cast(act_uaddr, "compat_sigaction", "kernel")->sa_handler
+ : &@cast(act_uaddr, "sigaction32", "kernel")->sa_handler);
try {
printf("handler: %%s (%%s)\n", usymname(handler), umodname(handler));
} catch {