]> sourceware.org Git - systemtap.git/commitdiff
PR13440: Use real userspace addresses in @cast tests
authorJosh Stone <jistone@redhat.com>
Mon, 28 Nov 2011 21:06:15 +0000 (13:06 -0800)
committerJosh Stone <jistone@redhat.com>
Mon, 28 Nov 2011 21:06:15 +0000 (13:06 -0800)
Some architectures make a harder distinction between user/kernel
addresses, so we shouldn't be faking our user memory.

* testsuite/systemtap.base/cast.*: Remove userspace @cast.
* testsuite/systemtap.base/cast-user.*: Add a new test for userspace
  @casts with an honest userspace address.

testsuite/systemtap.base/cast-user.c [new file with mode: 0644]
testsuite/systemtap.base/cast-user.exp [new file with mode: 0644]
testsuite/systemtap.base/cast-user.stp [new file with mode: 0644]
testsuite/systemtap.base/cast.exp
testsuite/systemtap.base/cast.stp

diff --git a/testsuite/systemtap.base/cast-user.c b/testsuite/systemtap.base/cast-user.c
new file mode 100644 (file)
index 0000000..3f4808a
--- /dev/null
@@ -0,0 +1,11 @@
+#include <sys/socket.h>
+int main()
+{
+    struct sockaddr sa = {
+        .sa_family = (sa_family_t) -1,
+        .sa_data = 42,
+    };
+    bind(-1, &sa, sizeof(sa));
+    return 0;
+}
+
diff --git a/testsuite/systemtap.base/cast-user.exp b/testsuite/systemtap.base/cast-user.exp
new file mode 100644 (file)
index 0000000..e0a1f58
--- /dev/null
@@ -0,0 +1,21 @@
+set test "cast-user"
+set ::result_string {binary sa_family OK
+binary sa_data OK
+header sa_family OK
+header sa_data OK}
+
+set srcfile "$srcdir/$subdir/$test.c"
+set stpfile "$srcdir/$subdir/$test.stp"
+set exefile "[pwd]/$test.exe"
+set test_flags "additional_flags=-g"
+set res [target_compile "$srcfile" "$exefile" executable "$test_flags"]
+if { $res != "" } {
+  verbose "target_compile failed: $res" 2
+  fail "$test compile"
+  untested "$test"
+  return
+} else {
+  pass "$test compile"
+}
+
+stap_run3 $test "$stpfile" "$exefile" -c "$exefile"
diff --git a/testsuite/systemtap.base/cast-user.stp b/testsuite/systemtap.base/cast-user.stp
new file mode 100644 (file)
index 0000000..7daa81d
--- /dev/null
@@ -0,0 +1,36 @@
+probe syscall.bind!, nd_syscall.bind
+{
+    if (pid() != target()) next
+
+    sa = my_addr_uaddr
+    family = 0xffff
+    data = 42
+
+    // Compare sa_family and sa_data using the target binary
+
+    cast_family = @cast(sa, "sockaddr", @1)->sa_family
+    if (family == cast_family)
+        println("binary sa_family OK")
+    else
+        printf("binary sa_family %#x != %#x\n", family, cast_family)
+
+    cast_data = @cast(sa, "sockaddr", @1)->sa_data[0]
+    if (data == cast_data)
+        println("binary sa_data OK")
+    else
+        printf("binary sa_data %d != %d\n", data, cast_data)
+
+    // Compare sa_family and sa_data using a generated user module
+
+    cast_family = @cast(sa, "sockaddr", "<sys/socket.h>")->sa_family
+    if (family == cast_family)
+        println("header sa_family OK")
+    else
+        printf("header sa_family %#x != %#x\n", family, cast_family)
+
+    cast_data = @cast(sa, "sockaddr", "<sys/socket.h>")->sa_data[0]
+    if (data == cast_data)
+        println("header sa_data OK")
+    else
+        printf("header sa_data %d != %d\n", data, cast_data)
+}
index 9d8d42f6ac2cc4836e2fd8dd01f66fc8caa1c32a..7535808f818013100c2f5a9d51d5be8a3a1659d8 100644 (file)
@@ -3,6 +3,5 @@ set ::result_string {PID OK
 PID2 OK
 PID3 OK
 execname OK
-sa_data OK
 usage OK}
-stap_run2 $srcdir/$subdir/$test.stp -g
+stap_run2 $srcdir/$subdir/$test.stp
index 4e5232bc0656d9a2532f45d2a805bb945f0fa27b..cc44a3666d13243ad84c5bb1d266445934dc7e3f 100644 (file)
@@ -32,14 +32,6 @@ probe begin
     else
         printf("execname \"%s\" != \"%s\"\n", name, cast_name)
 
-    // Compare sa_data using a generated user module
-    data = 42
-    cast_data = @cast(get_sockaddr(data), "sockaddr", "<sys/socket.h>")->sa_data[0]
-    if (data == cast_data)
-        println("sa_data OK")
-    else
-        printf("sa_data %d != %d\n", data, cast_data)
-
     // Compare usage counter values through a struct address
     usage = @cast(curr, "task_struct")->usage->counter
     pusage = & @cast(curr, "task_struct")->usage
@@ -51,13 +43,3 @@ probe begin
 
     exit()
 }
-
-%{
-#include <linux/socket.h>
-%}
-
-function get_sockaddr:long(data:long) %{
-    static struct sockaddr sa = {0};
-    sa.sa_data[0] = THIS->data;
-    THIS->__retvalue = (long)&sa;
-%}
This page took 0.034602 seconds and 5 git commands to generate.