mirror of
https://github.com/checkpoint-restore/criu
synced 2025-08-30 22:05:36 +00:00
Silence clang-4 warning about unaligned pointer
This is what we have:
> compel/src/lib/infect.c:1145:38: error: taking address of packed member
> 'uc_sigmask' of class or structure 'ucontext_ia32' may result in an
> unaligned pointer value [-Werror,-Waddress-of-packed-member]
> blk_sigset = RT_SIGFRAME_UC_SIGMASK(f);
> ~~~~~~~~~~~~~~~~~~~~~~~^~
> compel/include/uapi/asm/sigframe.h:133:4: note: expanded from macro
> 'RT_SIGFRAME_UC_SIGMASK'
> (&rt_sigframe->compat.uc.uc_sigmask))
> ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> 1 error generated.
Indeed this results in an unaligned pointer, but as this is intended and
well known (see commit dd6736bd
"compel/x86/compat: pack ucontext_ia32"),
we need to silence the warning here.
For more details, see https://reviews.llvm.org/D20561
Originally found by Travis on Alpine Linux, reproduced on Ubuntu 17.10.
[v2: fix for non-x86]
Reported-by: Andrei Vagin <avagin@virtuozzo.com>
Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
Signed-off-by: Andrei Vagin <avagin@virtuozzo.com>
This commit is contained in:
committed by
Andrei Vagin
parent
f7e52b8b4a
commit
20a460fabf
@@ -130,7 +130,7 @@ struct rt_sigframe {
|
|||||||
#define RT_SIGFRAME_UC_SIGMASK(rt_sigframe) \
|
#define RT_SIGFRAME_UC_SIGMASK(rt_sigframe) \
|
||||||
((rt_sigframe->is_native) ? \
|
((rt_sigframe->is_native) ? \
|
||||||
(&rt_sigframe->native.uc.uc_sigmask) : \
|
(&rt_sigframe->native.uc.uc_sigmask) : \
|
||||||
(&rt_sigframe->compat.uc.uc_sigmask))
|
((k_rtsigset_t *)(void *)&rt_sigframe->compat.uc.uc_sigmask))
|
||||||
|
|
||||||
#define RT_SIGFRAME_REGIP(rt_sigframe) \
|
#define RT_SIGFRAME_REGIP(rt_sigframe) \
|
||||||
((rt_sigframe->is_native) ? \
|
((rt_sigframe->is_native) ? \
|
||||||
|
@@ -1126,7 +1126,7 @@ static int save_regs_plain(void *to, user_regs_struct_t *r, user_fpregs_struct_t
|
|||||||
|
|
||||||
#ifndef RT_SIGFRAME_UC_SIGMASK
|
#ifndef RT_SIGFRAME_UC_SIGMASK
|
||||||
#define RT_SIGFRAME_UC_SIGMASK(sigframe) \
|
#define RT_SIGFRAME_UC_SIGMASK(sigframe) \
|
||||||
(k_rtsigset_t*)&RT_SIGFRAME_UC(sigframe)->uc_sigmask
|
(k_rtsigset_t*)(void *)&RT_SIGFRAME_UC(sigframe)->uc_sigmask
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static int make_sigframe_plain(void *from, struct rt_sigframe *f, struct rt_sigframe *rtf, k_rtsigset_t *b)
|
static int make_sigframe_plain(void *from, struct rt_sigframe *f, struct rt_sigframe *rtf, k_rtsigset_t *b)
|
||||||
|
Reference in New Issue
Block a user