]> granicus.if.org Git - strace/commitdiff
x86, x86_64: fix compilation warnings
authorDmitry V. Levin <ldv@altlinux.org>
Wed, 11 Sep 2013 13:26:17 +0000 (13:26 +0000)
committerDmitry V. Levin <ldv@altlinux.org>
Wed, 11 Sep 2013 13:26:17 +0000 (13:26 +0000)
Fix "dereferencing type-punned pointer will break strict-aliasing rules"
warnings introduced by commit v4.8-52-gb51f364.

* signal.c (sys_sigreturn): Avoid dereferencing type-punned pointers.

signal.c

index 3db908d41c29edc3f915bb495e40c5dd8b314e5c..6b3c8c057a2f282d3546b1cca2278e3371f0bb6e 100644 (file)
--- a/signal.c
+++ b/signal.c
@@ -888,13 +888,16 @@ sys_sigreturn(struct tcb *tcp)
                 * and after it an additional u32 extramask[1] which holds
                 * upper half of the mask.
                 */
-               sigset_t sigm;
+               union {
+                       sigset_t sig;
+                       uint32_t mask[2];
+               } sigmask;
                if (umove(tcp, *i386_esp_ptr, &signal_stack) < 0)
                        return 0;
-               sigemptyset(&sigm);
-               ((uint32_t*)&sigm)[0] = signal_stack.sc.oldmask;
-               ((uint32_t*)&sigm)[1] = signal_stack.extramask[0];
-               tprints(sprintsigmask(") (mask ", &sigm));
+               sigemptyset(&sigmask.sig);
+               sigmask.mask[0] = signal_stack.sc.oldmask;
+               sigmask.mask[1] = signal_stack.extramask[0];
+               tprints(sprintsigmask(") (mask ", &sigmask.sig));
        }
 #elif defined(IA64)
        if (entering(tcp)) {