summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMartin Hunt <hunt@redhat.com>2008-03-25 13:44:37 -0400
committerMartin Hunt <hunt@redhat.com>2008-03-25 13:44:37 -0400
commita8bfd6f19b6fd8b8091b9123e38c77abdebc2fb9 (patch)
treedfb6cf7ec796db2cd151a314c41fb942352d36de
parentb56639bb84656464efbf88912f68c36e7f099d49 (diff)
downloadsystemtap-steved-a8bfd6f19b6fd8b8091b9123e38c77abdebc2fb9.tar.gz
systemtap-steved-a8bfd6f19b6fd8b8091b9123e38c77abdebc2fb9.tar.xz
systemtap-steved-a8bfd6f19b6fd8b8091b9123e38c77abdebc2fb9.zip
32-bit fixes
-rw-r--r--runtime/transport/ChangeLog5
-rw-r--r--runtime/transport/symbols.c10
-rw-r--r--runtime/transport/transport_msgs.h2
3 files changed, 11 insertions, 6 deletions
diff --git a/runtime/transport/ChangeLog b/runtime/transport/ChangeLog
index c3837f86..9fea0dd4 100644
--- a/runtime/transport/ChangeLog
+++ b/runtime/transport/ChangeLog
@@ -1,3 +1,8 @@
+2008-03-25 Martin Hunt <hunt@redhat.com>
+ 32-bit systems can't do 64-bit get_user(), so
+ * symbols.c (_stp_do_unwind_data): Change unwind_len to a u32.
+ * transport_msgs.h (struct _stp_msg_unwind): Ditto.
+
2008-02-27 Martin Hunt <hunt@redhat.com>
* symbols.c: Use rwlocks. Use new dbug macros. Handle
diff --git a/runtime/transport/symbols.c b/runtime/transport/symbols.c
index 6406d6ad..a81e594f 100644
--- a/runtime/transport/symbols.c
+++ b/runtime/transport/symbols.c
@@ -205,7 +205,7 @@ static int _stp_init_kernel_symbols(void)
static void _stp_do_unwind_data(const char __user *buf, size_t count)
{
- u64 unwind_len;
+ u32 unwind_len;
unsigned long flags;
char name[STP_MODULE_NAME_LEN];
int i;
@@ -213,7 +213,7 @@ static void _stp_do_unwind_data(const char __user *buf, size_t count)
dbug_unwind(1, "got unwind data, count=%d\n", count);
- if (count < STP_MODULE_NAME_LEN + sizeof(u64)) {
+ if (count < STP_MODULE_NAME_LEN + sizeof(unwind_len)) {
dbug_unwind(1, "unwind message too short\n");
return;
}
@@ -230,12 +230,12 @@ static void _stp_do_unwind_data(const char __user *buf, size_t count)
count -= STP_MODULE_NAME_LEN;
buf += STP_MODULE_NAME_LEN;
- if (get_user(unwind_len, (u64 __user *)buf)) {
+ if (get_user(unwind_len, (u32 __user *)buf)) {
errk("userspace copy failed\n");
return;
}
- count -= sizeof(u64);
- buf += sizeof(u64);
+ count -= sizeof(unwind_len);
+ buf += sizeof(unwind_len);
if (count != unwind_len) {
dbug_unwind(1, "count=%d unwind_len=%d\n", (int)count, (int)unwind_len);
return;
diff --git a/runtime/transport/transport_msgs.h b/runtime/transport/transport_msgs.h
index 0e65b63a..5f385565 100644
--- a/runtime/transport/transport_msgs.h
+++ b/runtime/transport/transport_msgs.h
@@ -72,7 +72,7 @@ struct _stp_msg_unwind
/* the module name, or "*" for all */
char name[STP_MODULE_NAME_LEN];
/* length of unwind data */
- uint64_t unwind_len;
+ uint32_t unwind_len;
/* data ...*/
};