summaryrefslogtreecommitdiff
path: root/signal.c
diff options
context:
space:
mode:
authorDmitry V. Levin <ldv@altlinux.org>2013-09-11 13:26:17 +0000
committerDmitry V. Levin <ldv@altlinux.org>2013-09-11 13:26:17 +0000
commitaca4ff79d1adc70ec033ffc5377ba7494daf350d (patch)
tree09948a27f43dfb3ae76a799d74b6f16f740ca56d /signal.c
parenta877379bcbb0ca6270031c31f5eb8213b460c7cb (diff)
downloadstrace-aca4ff79d1adc70ec033ffc5377ba7494daf350d.tar.gz
strace-aca4ff79d1adc70ec033ffc5377ba7494daf350d.tar.bz2
strace-aca4ff79d1adc70ec033ffc5377ba7494daf350d.tar.xz
x86, x86_64: fix compilation warnings
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.
Diffstat (limited to 'signal.c')
-rw-r--r--signal.c13
1 files changed, 8 insertions, 5 deletions
diff --git a/signal.c b/signal.c
index 3db908d..6b3c8c0 100644
--- 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)) {