Message ID | 1451382219-5159-1-git-send-email-mjt@msgid.tls.msk.ru |
---|---|
State | New |
Headers | show |
On 29 December 2015 at 09:43, Michael Tokarev <mjt@tls.msk.ru> wrote: > All other architectures define get_sp_from_cpustate as an inline function, > only unicore32 uses a #define. With this, some usages are impossible, for > example, enabling sigaltstack in linux-user/syscall.c results in > > linux-user/syscall.c: In function ‘do_syscall’: > linux-user/syscall.c:8299:39: error: dereferencing ‘void *’ pointer [-Werror] > get_sp_from_cpustate(arg1, arg2, get_sp_from_cpustate((CPUArchState *)cpu_env)); > ^ > linux-user/syscall.c:8299:39: error: request for member ‘regs’ in something not a structure or union I think this is a bug in the macro implementation (lack of brackets around the macro argument on its RHS) rather than a macro being impossible to use for this, but I agree that the inline function is better both for consistency with other targets and as a style issue. Reviewed-by: Peter Maydell <peter.maydell@linaro.org> thanks -- PMM
diff --git a/linux-user/unicore32/target_signal.h b/linux-user/unicore32/target_signal.h index 8b255c4..7c44238 100644 --- a/linux-user/unicore32/target_signal.h +++ b/linux-user/unicore32/target_signal.h @@ -21,6 +21,10 @@ typedef struct target_sigaltstack { #define TARGET_SS_ONSTACK 1 #define TARGET_SS_DISABLE 2 -#define get_sp_from_cpustate(cpustate) (cpustate->regs[29]) +static inline abi_ulong get_sp_from_cpustate(CPUUniCore32State *state) +{ + return state->regs[29]; +} + #endif /* TARGET_SIGNAL_H */
All other architectures define get_sp_from_cpustate as an inline function, only unicore32 uses a #define. With this, some usages are impossible, for example, enabling sigaltstack in linux-user/syscall.c results in linux-user/syscall.c: In function ‘do_syscall’: linux-user/syscall.c:8299:39: error: dereferencing ‘void *’ pointer [-Werror] get_sp_from_cpustate(arg1, arg2, get_sp_from_cpustate((CPUArchState *)cpu_env)); ^ linux-user/syscall.c:8299:39: error: request for member ‘regs’ in something not a structure or union Signed-off-by: Michael Tokarev <mjt@tls.msk.ru> --- linux-user/unicore32/target_signal.h | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-)