Blame SOURCES/strace-strict-aliasing.patch

dddb0e
diff -Nrup a/system.c b/system.c
dddb0e
--- a/system.c	2012-03-16 05:02:22.000000000 -0600
dddb0e
+++ b/system.c	2013-02-18 15:17:23.651569983 -0700
dddb0e
@@ -516,10 +516,14 @@ print_cap_header(struct tcb *tcp, unsign
dddb0e
 		 umoven(tcp, addr, sizeof(*arg.p), arg.c) < 0)
dddb0e
 		tprintf("%#lx", addr);
dddb0e
 	else {
dddb0e
+		__u32 version;
dddb0e
+		int pid;
dddb0e
 		tprints("{");
dddb0e
-		printxval(cap_version, arg.p->version,
dddb0e
+		memcpy (&version, &arg.p->version, sizeof (__u32));
dddb0e
+		printxval(cap_version, version,
dddb0e
 			  "_LINUX_CAPABILITY_VERSION_???");
dddb0e
-		tprintf(", %d}", arg.p->pid);
dddb0e
+		memcpy (&pid, &arg.p->pid, sizeof (int));
dddb0e
+		tprintf(", %d}", pid);
dddb0e
 	}
dddb0e
 }
dddb0e
 
dddb0e
@@ -537,12 +541,16 @@ print_cap_data(struct tcb *tcp, unsigned
dddb0e
 		 umoven(tcp, addr, sizeof(*arg.p), arg.c) < 0)
dddb0e
 		tprintf("%#lx", addr);
dddb0e
 	else {
dddb0e
+		__u32 x;
dddb0e
 		tprints("{");
dddb0e
-		printflags(capabilities, arg.p->effective, "CAP_???");
dddb0e
+		memcpy (&x, &arg.p->effective, sizeof (__u32));
dddb0e
+		printflags(capabilities, x, "CAP_???");
dddb0e
 		tprints(", ");
dddb0e
-		printflags(capabilities, arg.p->permitted, "CAP_???");
dddb0e
+		memcpy (&x, &arg.p->permitted, sizeof (__u32));
dddb0e
+		printflags(capabilities, x, "CAP_???");
dddb0e
 		tprints(", ");
dddb0e
-		printflags(capabilities, arg.p->inheritable, "CAP_???");
dddb0e
+		memcpy (&x, &arg.p->inheritable, sizeof (__u32));
dddb0e
+		printflags(capabilities, x, "CAP_???");
dddb0e
 		tprints("}");
dddb0e
 	}
dddb0e
 }