diff --git a/SOURCES/rhbz1852021.patch b/SOURCES/rhbz1852021.patch new file mode 100644 index 0000000..c8e5d76 --- /dev/null +++ b/SOURCES/rhbz1852021.patch @@ -0,0 +1,636 @@ +diff --git a/tapset/linux/dentry.stp b/tapset/linux/dentry.stp +index 4e73532..d148c57 100644 +--- a/tapset/linux/dentry.stp ++++ b/tapset/linux/dentry.stp +@@ -28,7 +28,7 @@ + + @__private30 function __dentry_IS_ROOT:long(dentry:long) + { +- return (@cast(dentry, "dentry")->d_parent == dentry) ++ return (@cast(dentry, "dentry", "kernel")->d_parent == dentry) + } + + +@@ -61,7 +61,7 @@ + */ + function d_name:string(dentry:long) + { +- s = & @cast(dentry, "dentry")->d_name; ++ s = & @cast(dentry, "dentry", "kernel")->d_name; + return kernel_string_n(s->name, s->len); + } + +@@ -70,8 +70,8 @@ function d_name:string(dentry:long) + { + /* i_dentry is an hlist_head on 3.6+, or a list_head before that. */ + d_alias = @choose_defined( +- @cast(inode, "struct inode")->i_dentry->first, +- @cast(inode, "struct inode")->i_dentry->next) ++ @cast(inode, "struct inode", "kernel")->i_dentry->first, ++ @cast(inode, "struct inode", "kernel")->i_dentry->next) + + if (@type_member_defined("struct dentry", d_alias)) { + return & @container_of(d_alias, "struct dentry", d_alias) +@@ -86,8 +86,8 @@ function d_name:string(dentry:long) + { + /* s_mounts was added in kernel 3.6, commit b3d9b7a3c. */ + if (@type_member_defined("struct super_block", s_mounts)) { +- mnt_ns = @cast(task_current(), "struct task_struct")->nsproxy->mnt_ns +- sb = @cast(inode, "struct inode")->i_sb ++ mnt_ns = @cast(task_current(), "struct task_struct", "kernel")->nsproxy->mnt_ns ++ sb = @cast(inode, "struct inode", "kernel")->i_sb + + /* Look for the mount which matches the current namespace */ + head = &sb->s_mounts +@@ -141,7 +141,7 @@ function reverse_path_walk:string(dentry:long) + { + while(1) { + name = __dentry_prepend(dentry, name); +- dentry = @cast(dentry, "dentry")->d_parent; ++ dentry = @cast(dentry, "dentry", "kernel")->d_parent; + if (__dentry_IS_ROOT(dentry)) + return name; + } +@@ -209,8 +209,8 @@ function task_dentry_path:string(task:long,dentry:long,vfsmnt:long) + * dentry == vfsmnt->mnt_root. In that case, we'll just go + * ahead and handle them normally. + */ +- dentry = & @cast(dentry, "dentry") +- vfsmnt = & @cast(vfsmnt, "vfsmount") ++ dentry = & @cast(dentry, "dentry", "kernel") ++ vfsmnt = & @cast(vfsmnt, "vfsmount", "kernel") + + if (@type_member_defined("dentry", d_op->d_dname) + && dentry->d_op && dentry->d_op->d_dname +@@ -230,7 +230,7 @@ function task_dentry_path:string(task:long,dentry:long,vfsmnt:long) + return sprintf("ANON_INODE:%s", d_name(dentry)) + } + else if (vfsmnt->mnt_sb->s_magic == @const("NSFS_MAGIC")) { +- ns_ops = &@cast(dentry->d_fsdata, "proc_ns_operations") ++ ns_ops = &@cast(dentry->d_fsdata, "proc_ns_operations", "kernel") + return sprintf("%s:[%lu]", kernel_string(ns_ops->name), + dentry->d_inode->i_ino) + } +@@ -239,16 +239,16 @@ function task_dentry_path:string(task:long,dentry:long,vfsmnt:long) + + # Handle old-school vs. new-school fs_structs. + if (@type_member_defined("fs_struct", rootmnt)) { +- root_dentry = & @cast(task, "task_struct")->fs->root +- root_vfsmnt = & @cast(task, "task_struct")->fs->rootmnt ++ root_dentry = & @cast(task, "task_struct", "kernel")->fs->root ++ root_vfsmnt = & @cast(task, "task_struct", "kernel")->fs->rootmnt + } + else { +- root_dentry = @cast(task, "task_struct")->fs->root->dentry +- root_vfsmnt = @cast(task, "task_struct")->fs->root->mnt ++ root_dentry = @cast(task, "task_struct", "kernel")->fs->root->dentry ++ root_vfsmnt = @cast(task, "task_struct", "kernel")->fs->root->mnt + } + + if (@type_member_defined("mount", mnt_parent)) { +- mnt = &@cast(real_mount(vfsmnt), "mount") ++ mnt = &@cast(real_mount(vfsmnt), "mount", "kernel") + if (mnt == 0) + return "" + } +@@ -305,10 +305,10 @@ function task_dentry_path:string(task:long,dentry:long,vfsmnt:long) + */ + function d_path:string(nd:long) + { +- dentry = @choose_defined(@cast(nd,"nameidata")->path->dentry, +- @cast(nd,"nameidata")->dentry) +- vfsmnt = @choose_defined(@cast(nd,"nameidata")->path->mnt, +- @cast(nd,"nameidata")->mnt) ++ dentry = @choose_defined(@cast(nd,"nameidata", "kernel")->path->dentry, ++ @cast(nd,"nameidata", "kernel")->dentry) ++ vfsmnt = @choose_defined(@cast(nd,"nameidata", "kernel")->path->mnt, ++ @cast(nd,"nameidata", "kernel")->mnt) + + return sprintf("%s/", task_dentry_path(task_current(), dentry, vfsmnt)) + } +@@ -353,8 +353,8 @@ function fullpath_struct_path:string(path:long) + function fullpath_struct_file:string(task:long, file:long) + { + return task_dentry_path(task, +- @choose_defined(@cast(file, "file")->f_path->dentry, +- @cast(file, "file")->f_dentry), +- @choose_defined(@cast(file, "file")->f_path->mnt, +- @cast(file, "file")->f_vfsmnt)) ++ @choose_defined(@cast(file, "file", "kernel")->f_path->dentry, ++ @cast(file, "file", "kernel")->f_dentry), ++ @choose_defined(@cast(file, "file", "kernel")->f_path->mnt, ++ @cast(file, "file", "kernel")->f_vfsmnt)) + } +diff --git a/tapset/linux/dev.stp b/tapset/linux/dev.stp +index 0232fc9..079ce1c 100644 +--- a/tapset/linux/dev.stp ++++ b/tapset/linux/dev.stp +@@ -56,8 +56,8 @@ function usrdev2kerndev:long(dev:long) + function disk_name:string(hd:long, partno:long) + { + if (!partno) +- return kernel_string(@cast(hd, "gendisk")->disk_name) +- disk_name = kernel_string(@cast(hd, "gendisk")->disk_name) ++ return kernel_string(@cast(hd, "gendisk", "kernel")->disk_name) ++ disk_name = kernel_string(@cast(hd, "gendisk", "kernel")->disk_name) + if (isdigit(substr(disk_name, strlen(disk_name)-1, 1))) + return sprintf("%sp%d", disk_name, partno) + else +@@ -66,7 +66,7 @@ function disk_name:string(hd:long, partno:long) + + function bdevname:string(bdev:long) + { +- bdev = & @cast(bdev, "block_device") ++ bdev = & @cast(bdev, "block_device", "kernel") + if (bdev == 0) + return "N/A" + +diff --git a/tapset/linux/ioblock.stp b/tapset/linux/ioblock.stp +index ad3603c..9d8f57b 100644 +--- a/tapset/linux/ioblock.stp ++++ b/tapset/linux/ioblock.stp +@@ -107,12 +107,12 @@ function bio_rw_str(rw:long) + @__private30 function __bio_start_sect:long(bio:long) + { + try { +- if (@defined(@cast(bio, "bio")->bi_dev)) { +- return @cast(bio, "bio")->bi_bdev->bd_part->start_sect ++ if (@defined(@cast(bio, "bio", "kernel")->bi_dev)) { ++ return @cast(bio, "bio", "kernel")->bi_bdev->bd_part->start_sect + } +- else if (@defined(@cast(bio, "bio")->bi_disk)) { +- return disk_get_part_start_sect(@cast(bio, "bio")->bi_disk, +- @cast(bio, "bio")->bi_partno) ++ else if (@defined(@cast(bio, "bio", "kernel")->bi_disk)) { ++ return disk_get_part_start_sect(@cast(bio, "bio", "kernel")->bi_disk, ++ @cast(bio, "bio", "kernel")->bi_partno) + } + } catch { + return -1 +@@ -122,12 +122,12 @@ function bio_rw_str(rw:long) + /* returns the block device name */ + @__private30 function __bio_devname:string(bio:long) + { +- if (@defined(@cast(bio, "bio")->bi_bdev)) { +- return bdevname(@cast(bio, "bio")->bi_bdev) ++ if (@defined(@cast(bio, "bio", "kernel")->bi_bdev)) { ++ return bdevname(@cast(bio, "bio", "kernel")->bi_bdev) + } + else { +- return disk_name(@cast(bio, "bio")->bi_disk, +- @cast(bio, "bio")->bi_partno) ++ return disk_name(@cast(bio, "bio", "kernel")->bi_disk, ++ @cast(bio, "bio", "kernel")->bi_partno) + } + } + +diff --git a/tapset/linux/networking.stp b/tapset/linux/networking.stp +index 69843a7..0b52cbc 100644 +--- a/tapset/linux/networking.stp ++++ b/tapset/linux/networking.stp +@@ -69,7 +69,7 @@ + + /* 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) + } + + /** +diff --git a/tapset/linux/nfs_proc.stp b/tapset/linux/nfs_proc.stp +index 8da3f6b..2579074 100644 +--- a/tapset/linux/nfs_proc.stp ++++ b/tapset/linux/nfs_proc.stp +@@ -77,11 +77,11 @@ function get_ip_from_client:string(clnt:long) + * inside that buffer. */ + if (@cast(addr, "sockaddr")->sa_family + == @const("AF_INET")) { +- return format_ipaddr(&@cast(addr, "sockaddr_in")->sin_addr->s_addr, @const("AF_INET")) ++ return format_ipaddr(&@cast(addr, "sockaddr_in", "kernel:sunrpc")->sin_addr->s_addr, @const("AF_INET")) + } + else if (@cast(addr, "sockaddr")->sa_family + == @const("AF_INET6")) { +- return format_ipaddr(&@cast(addr, "sockaddr_in6")->sin6_addr, @const("AF_INET6")) ++ return format_ipaddr(&@cast(addr, "sockaddr_in6", "kernel:sunrpc")->sin6_addr, @const("AF_INET6")) + } + return "" + } +@@ -90,12 +90,12 @@ function get_ip_from_client:long(clnt:long) + { + cl_xprt = @cast(clnt, "rpc_clnt", "kernel:sunrpc")->cl_xprt + addr = &@cast(cl_xprt, "rpc_xprt", "kernel:sunrpc")->addr +- if (@cast(addr, "sockaddr_in")->sin_family ++ if (@cast(addr, "sockaddr_in", "kernel:sunrpc")->sin_family + != @const("AF_INET")) { + /* Now consider ipv4 only */ + return 0 + } +- return @cast(addr, "sockaddr_in")->sin_addr->s_addr ++ return @cast(addr, "sockaddr_in", "kernel:sunrpc")->sin_addr->s_addr + } + %) + +@@ -758,7 +758,11 @@ probe _nfs.proc2.missing_read_setup = never + { + inode = 0 + client = 0 ++%( systemtap_v >= "4.3" %? ++ server_ip = "0" ++%: + server_ip = 0 ++%) + prot = 0 + + count = 0 +diff --git a/tapset/linux/scsi.stp b/tapset/linux/scsi.stp +index 3577942..5359fe8 100644 +--- a/tapset/linux/scsi.stp ++++ b/tapset/linux/scsi.stp +@@ -179,8 +179,8 @@ probe scsi.iocompleted + + 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) +diff --git a/tapset/linux/task.stp b/tapset/linux/task.stp +index 4afc458..b542b61 100644 +--- a/tapset/linux/task.stp ++++ b/tapset/linux/task.stp +@@ -40,7 +40,7 @@ function task_current:long () { + return -1; + } + sig = @task(task)->signal; +- return @cast(sig, "signal_struct")->rlim[nd_limit]->rlim_cur; ++ return @cast(sig, "signal_struct", "kernel")->rlim[nd_limit]->rlim_cur; + } + + /* sfunction task_rlimit - The current resource limit of the task +diff --git a/testsuite/buildok/pretty.stp b/testsuite/buildok/pretty.stp +index 85c9cd9..a2fc781 100755 +--- a/testsuite/buildok/pretty.stp ++++ b/testsuite/buildok/pretty.stp +@@ -6,14 +6,14 @@ global i = 1 + # 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 +diff --git a/testsuite/semok/cast.stp b/testsuite/semok/cast.stp +index d72763c..fe78e36 100755 +--- a/testsuite/semok/cast.stp ++++ b/testsuite/semok/cast.stp +@@ -2,7 +2,7 @@ + + 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 +@@ -25,5 +25,5 @@ probe begin { + @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) + } +diff --git a/testsuite/semok/pretty.stp b/testsuite/semok/pretty.stp +index 0211d86..25490e7 100755 +--- a/testsuite/semok/pretty.stp ++++ b/testsuite/semok/pretty.stp +@@ -12,16 +12,16 @@ global i = 1 + # 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 +diff --git a/testsuite/semok/sizeof.stp b/testsuite/semok/sizeof.stp +index 8e35e29..a5a6bbb 100755 +--- a/testsuite/semok/sizeof.stp ++++ b/testsuite/semok/sizeof.stp +@@ -1,7 +1,7 @@ + #! 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", "task_struct")) + println("FILE: ", @cast_module_sizeof("", "FILE")) +diff --git a/testsuite/semok/thirtyeight.stp b/testsuite/semok/thirtyeight.stp +index 15189b7..5018795 100755 +--- a/testsuite/semok/thirtyeight.stp ++++ b/testsuite/semok/thirtyeight.stp +@@ -7,4 +7,4 @@ + 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) } +diff --git a/testsuite/semok/thirtysix.stp b/testsuite/semok/thirtysix.stp +index 14f10c1..0adae14 100755 +--- a/testsuite/semok/thirtysix.stp ++++ b/testsuite/semok/thirtysix.stp +@@ -17,17 +17,17 @@ probe begin,end,error,never { println(@defined($nosuchvar)?$nosuchvar:0) } # inv + 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 +diff --git a/testsuite/systemtap.base/bitfield.stp b/testsuite/systemtap.base/bitfield.stp +index 0208108..b5f7b89 100644 +--- a/testsuite/systemtap.base/bitfield.stp ++++ b/testsuite/systemtap.base/bitfield.stp +@@ -11,8 +11,8 @@ function check:long(ack:long, urg:long) { + 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() +@@ -20,8 +20,8 @@ function check:long(ack:long, urg:long) { + 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) +diff --git a/testsuite/systemtap.base/target_set.stp b/testsuite/systemtap.base/target_set.stp +index ad4dca6..7c458cb 100644 +--- a/testsuite/systemtap.base/target_set.stp ++++ b/testsuite/systemtap.base/target_set.stp +@@ -19,13 +19,13 @@ probe begin + 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() + } + +diff --git a/testsuite/systemtap.context/usymbols.exp b/testsuite/systemtap.context/usymbols.exp +index f53c1cd..e12f067 100644 +--- a/testsuite/systemtap.context/usymbols.exp ++++ b/testsuite/systemtap.context/usymbols.exp +@@ -20,7 +20,7 @@ set testscript { + 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 { +@@ -31,9 +31,9 @@ set testscript { + 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 { +diff --git a/testsuite/systemtap.examples/general/sizeof.stp b/testsuite/systemtap.examples/general/sizeof.stp +index 0c77dce..b45f593 100755 +--- a/testsuite/systemtap.examples/general/sizeof.stp ++++ b/testsuite/systemtap.examples/general/sizeof.stp +@@ -7,9 +7,11 @@ + # sizeof.stp TYPENAME + + probe oneshot { +- println("type ", @1, +- %( $# > 1 %? " in ", @2, %) /* module or header file name */ +- " byte-size: ", +- %( $# > 1 %? @cast_module_sizeof(@2, @1) %: @cast_sizeof(@1) %) +- ) ++ %( $# > 1 %? ++ printf("type %s in %s byte-size: %d\n", @1, @2, ++ @cast_module_sizeof(@2, @1)) ++ %: ++ printf("type %s byte-size: %d\n", @1, ++ @cast_module_sizeof("kernel", @1)) ++ %) + } +diff --git a/testsuite/systemtap.examples/lwtools/fslatency-nd.stp b/testsuite/systemtap.examples/lwtools/fslatency-nd.stp +index 6008399..0bee34f 100755 +--- a/testsuite/systemtap.examples/lwtools/fslatency-nd.stp ++++ b/testsuite/systemtap.examples/lwtools/fslatency-nd.stp +@@ -63,8 +63,8 @@ probe __vfs_read = kprobe.function("__vfs_read") + { + # Skip the call if new_sync_read() wouldn't be called. + file = pointer_arg(1) +- if (!file || @cast(file, "file")->f_op->read +- || !@cast(file, "file")->f_op->read_iter) ++ if (!file || @cast(file, "file", "kernel")->f_op->read ++ || !@cast(file, "file", "kernel")->f_op->read_iter) + next + } + +@@ -75,8 +75,8 @@ probe __vfs_write = kprobe.function("__vfs_write") + { + # Skip the call if new_sync_write() wouldn't be called. + file = pointer_arg(1) +- if (!file || @cast(file, "file")->f_op->write +- || !@cast(file, "file")->f_op->write_iter) ++ if (!file || @cast(file, "file", "kernel")->f_op->write ++ || !@cast(file, "file", "kernel")->f_op->write_iter) + next + } + +@@ -102,8 +102,8 @@ probe __vfs_read.return = kprobe.function("__vfs_read").return + { + # Skip the call if new_sync_read() wouldn't be called. + file = @entry(pointer_arg(1)) +- if (!file || @cast(file, "file")->f_op->read +- || !@cast(file, "file")->f_op->read_iter) ++ if (!file || @cast(file, "file", "kernel")->f_op->read ++ || !@cast(file, "file", "kernel")->f_op->read_iter) + next + } + +@@ -115,8 +115,8 @@ probe __vfs_write.return = kprobe.function("__vfs_write") + { + # Skip the call if new_sync_write() wouldn't be called. + file = pointer_arg(1) +- if (!file || @cast(file, "file")->f_op->write +- || !@cast(file, "file")->f_op->write_iter) ++ if (!file || @cast(file, "file", "kernel")->f_op->write ++ || !@cast(file, "file", "kernel")->f_op->write_iter) + next + } + +diff --git a/testsuite/systemtap.examples/lwtools/fsslower-nd.stp b/testsuite/systemtap.examples/lwtools/fsslower-nd.stp +index 64abe41..90fa9b5 100755 +--- a/testsuite/systemtap.examples/lwtools/fsslower-nd.stp ++++ b/testsuite/systemtap.examples/lwtools/fsslower-nd.stp +@@ -65,8 +65,8 @@ probe __vfs_read = kprobe.function("__vfs_read") + { + # Skip the call if new_sync_read() wouldn't be called. + file = pointer_arg(1) +- if (!file || @cast(file, "file")->f_op->read +- || !@cast(file, "file")->f_op->read_iter) ++ if (!file || @cast(file, "file", "kernel")->f_op->read ++ || !@cast(file, "file", "kernel")->f_op->read_iter) + next + } + +@@ -77,8 +77,8 @@ probe __vfs_write = kprobe.function("__vfs_write") + { + # Skip the call if new_sync_write() wouldn't be called. + file = pointer_arg(1) +- if (!file || @cast(file, "file")->f_op->write +- || !@cast(file, "file")->f_op->write_iter) ++ if (!file || @cast(file, "file", "kernel")->f_op->write ++ || !@cast(file, "file", "kernel")->f_op->write_iter) + next + } + +@@ -110,8 +110,8 @@ probe __vfs_read.return = kprobe.function("__vfs_read").return + { + # Skip the call if new_sync_read() wouldn't be called. + file = @entry(pointer_arg(1)) +- if (!file || @cast(file, "file")->f_op->read +- || !@cast(file, "file")->f_op->read_iter) ++ if (!file || @cast(file, "file", "kernel")->f_op->read ++ || !@cast(file, "file", "kernel")->f_op->read_iter) + next + } + +@@ -123,7 +123,7 @@ probe __vfs_write.return = kprobe.function("__vfs_write") + { + # Skip the call if new_sync_write() wouldn't be called. + file = pointer_arg(1) +- if (!file || @cast(file, "file")->f_op->write +- || !@cast(file, "file")->f_op->write_iter) ++ if (!file || @cast(file, "file", "kernel")->f_op->write ++ || !@cast(file, "file", "kernel")->f_op->write_iter) + next + } +diff --git a/testsuite/systemtap.examples/process/pfiles.stp b/testsuite/systemtap.examples/process/pfiles.stp +index d52a154..6344a4c 100755 +--- a/testsuite/systemtap.examples/process/pfiles.stp ++++ b/testsuite/systemtap.examples/process/pfiles.stp +@@ -787,9 +787,9 @@ function print_unix_socket(sock) { + strlen(peername) > 0 ? peername . "\n" : "") + try { # skip line in case of null pointers + printf(" peercred pid: %d\n", +- @defined(@cast(sock, "socket")->sk->sk_peer_pid) ? +- @cast(sock, "socket")->sk->sk_peer_pid->numbers[0]->nr : +- @cast(sock, "socket")->sk->sk_peercred->pid ); } catch { } ++ @defined(@cast(sock, "socket", "kernel")->sk->sk_peer_pid) ? ++ @cast(sock, "socket", "kernel")->sk->sk_peer_pid->numbers[0]->nr : ++ @cast(sock, "socket", "kernel")->sk->sk_peercred->pid ); } catch { } + } + + function print_ipv4_socket(sock) { +diff --git a/testsuite/systemtap.examples/profiling/ioctl_handler.stp b/testsuite/systemtap.examples/profiling/ioctl_handler.stp +index 7044185..6f1e52c 100755 +--- a/testsuite/systemtap.examples/profiling/ioctl_handler.stp ++++ b/testsuite/systemtap.examples/profiling/ioctl_handler.stp +@@ -9,7 +9,7 @@ probe syscall.ioctl { + ioctl_requests[execname()] <<< 1 + try { + # Dig down through the task struct to find the actual function handling ioctl. +- ioctl_func_address = @cast(task_current(), "struct task_struct")->files->fdt->fd[fd]->f_op->unlocked_ioctl ++ ioctl_func_address = @cast(task_current(), "struct task_struct", "kernel")->files->fdt->fd[fd]->f_op->unlocked_ioctl + if (ioctl_func_address) + ioctl_func[execname(), ioctl_func_address] <<< 1 + } catch { +diff --git a/testsuite/systemtap.examples/profiling/periodic.stp b/testsuite/systemtap.examples/profiling/periodic.stp +index f18f183..b9052e5 100755 +--- a/testsuite/systemtap.examples/profiling/periodic.stp ++++ b/testsuite/systemtap.examples/profiling/periodic.stp +@@ -18,8 +18,8 @@ probe kernel.trace("timer_expire_entry") + period[$timer] <<< elapsed + funct[$timer] = $timer->function + data[$timer] = @defined($timer->data) ? $timer->data : 0 +- proc_info[$timer] = @defined($timer->data) ? 0 : @container_of($timer, "struct process_timer", timer)->task +- delayed_work_info[$timer] = @defined($timer->data) ? 0 : & @container_of($timer, "struct delayed_work", timer) ++ proc_info[$timer] = @defined($timer->data) ? 0 : @module_container_of($timer, "kernel", "struct process_timer", timer)->task ++ delayed_work_info[$timer] = @defined($timer->data) ? 0 : & @module_container_of($timer, "kernel", "struct delayed_work", timer) + } + last_expire[$timer] = new_expire + } diff --git a/SPECS/systemtap.spec b/SPECS/systemtap.spec index 0d18414..997f4bd 100644 --- a/SPECS/systemtap.spec +++ b/SPECS/systemtap.spec @@ -95,7 +95,7 @@ Name: %{?scl_prefix}systemtap Version: 4.3 -Release: 5%{?dist} +Release: 6%{?dist} # for version, see also configure.ac @@ -131,6 +131,7 @@ License: GPLv2+ URL: http://sourceware.org/systemtap/ Source: ftp://sourceware.org/pub/systemtap/releases/systemtap-%{version}.tar.gz +Patch10: rhbz1852021.patch # Build* BuildRequires: gcc-c++ @@ -508,6 +509,8 @@ systemtap-runtime-virthost machine to execute systemtap scripts. %prep %setup -q -n systemtap-%{version} +%patch10 -p1 + %build # Enable/disable the dyninst pure-userspace backend @@ -1243,6 +1246,9 @@ done # PRERELEASE %changelog +* Thu Jul 09 2020 Martin Cermak - 4.3-6 +- Fix rhbz1852021 + * Mon Jun 22 2020 Martin Cermak - 4.3-5 - Fix file conflicts between x86_64 and i686