[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