qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH 2/2] linux-user/signal: Silent -Winitializer-overrides warnin


From: Peter Maydell
Subject: Re: [PATCH 2/2] linux-user/signal: Silent -Winitializer-overrides warnings
Date: Tue, 20 Dec 2022 15:47:56 +0000

On Tue, 20 Dec 2022 at 14:43, Philippe Mathieu-Daudé <philmd@linaro.org> wrote:
>
> The target SIGIOT signal is sometimes aliased with SIGABRT,
> producing the following warning when compiling with -Wextra:
>
>   ../linux-user/signal.c:57:9: warning: initializer overrides prior 
> initialization of this subobject [-Winitializer-overrides]
>           MAKE_SIGNAL_LIST
>           ^~~~~~~~~~~~~~~~
>   ../linux-user/signal-common.h:165:9: note: expanded from macro 
> 'MAKE_SIGNAL_LIST'
>           MAKE_SIG_ENTRY_SIGIOT
>           ^~~~~~~~~~~~~~~~~~~~~
>   ../linux-user/signal-common.h:128:41: note: expanded from macro 
> 'MAKE_SIG_ENTRY_SIGIOT'
>   #define MAKE_SIG_ENTRY_SIGIOT           MAKE_SIG_ENTRY(SIGIOT)
>                                           ^~~~~~~~~~~~~~~~~~~~~~
>   ../linux-user/signal.c:56:41: note: expanded from macro 'MAKE_SIG_ENTRY'
>   #define MAKE_SIG_ENTRY(sig)     [sig] = TARGET_##sig,
>                                           ^~~~~~~~~~~~
>   <scratch space>:81:1: note: expanded from here
>   TARGET_SIGIOT
>   ^~~~~~~~~~~~~
>   ../linux-user/sh4/../generic/signal.h:26:34: note: expanded from macro 
> 'TARGET_SIGIOT'
>   #define TARGET_SIGIOT            6
>                                    ^
>   <scratch space>:55:1: note: expanded from here
>   TARGET_SIGABRT
>   ^~~~~~~~~~~~~~
>   ../linux-user/sh4/../generic/signal.h:25:34: note: expanded from macro 
> 'TARGET_SIGABRT'
>   #define TARGET_SIGABRT           6
>                                    ^
>
> Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
> ---
>  linux-user/signal-common.h | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/linux-user/signal-common.h b/linux-user/signal-common.h
> index 3e2dc604c2..a168ea4851 100644
> --- a/linux-user/signal-common.h
> +++ b/linux-user/signal-common.h
> @@ -124,7 +124,7 @@ static inline void finish_sigsuspend_mask(int ret)
>  #define MAKE_SIG_ENTRY_SIGSTKFLT
>  #endif
>
> -#if defined(SIGIOT) && defined(TARGET_SIGIOT)
> +#if defined(SIGIOT) && defined(TARGET_SIGIOT) && TARGET_SIGABRT != 
> TARGET_SIGIOT
>  #define MAKE_SIG_ENTRY_SIGIOT           MAKE_SIG_ENTRY(SIGIOT)
>  #else
>  #define MAKE_SIG_ENTRY_SIGIOT

This suppresses the array entry in the case where TARGET_SIGABRT ==
TARGET_SIGIOT,
but the compiler error is I think complaining about the case where
host SIGABRT == SIGIOT.

The MAKE_SIG_ENTRY macros are used to construct both the host-to-target signal
table in signal.c and also a target-signal-to-string table in strace.c;
so whether you want to check "target signals the same?" or "host signals
the same?" to suppress the overriding entry varies depending on which table.

However, this is all a bit moot because:
 (1) we deliberately do not enable the -Winitializer-overrides
     warning, because it produces false positives on the various
     cases where we want to use the coding pattern "initialize a range
     first, then override some specific members within it"
 (2) There is no Linux architecture where SIGIOT is not a synonym
     for SIGABRT, so the right thing to do here is just to
     delete MAKE_SIG_ENTRY_SIGIOT entirely.

thanks
-- PMM



reply via email to

[Prev in Thread] Current Thread [Next in Thread]