bsd-user: Define TARGET_SIGSTACK_ALIGN and use it to round stack

Most (all?) targets require stacks to be properly aligned. Rather than a
series of ifdefs in bsd-user/signal.h, instead use a manditory #define
for all architectures.

Signed-off-by: Warner Losh <imp@bsdimp.com>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
This commit is contained in:
Warner Losh 2024-06-23 15:29:42 -06:00
parent 5b6828d194
commit 5fa2a10ba6
5 changed files with 9 additions and 8 deletions

View File

@ -77,4 +77,6 @@ struct target_sigframe {
target_ucontext_t sf_uc; /* saved ucontext */
};
#define TARGET_SIGSTACK_ALIGN 16
#endif /* TARGET_ARCH_SIGNAL_H */

View File

@ -86,4 +86,6 @@ struct target_sigframe {
target_mcontext_vfp_t sf_vfp; /* actual saved VFP context */
};
#define TARGET_SIGSTACK_ALIGN 8
#endif /* TARGET_ARCH_SIGNAL_H */

View File

@ -88,4 +88,6 @@ struct target_sigframe {
uint32_t __spare__[2];
};
#define TARGET_SIGSTACK_ALIGN 8
#endif /* TARGET_ARCH_SIGNAL_H */

View File

@ -728,14 +728,7 @@ static inline abi_ulong get_sigframe(struct target_sigaction *ka,
sp = ts->sigaltstack_used.ss_sp + ts->sigaltstack_used.ss_size;
}
/* TODO: make this a target_arch function / define */
#if defined(TARGET_ARM)
return (sp - frame_size) & ~7;
#elif defined(TARGET_AARCH64)
return (sp - frame_size) & ~15;
#else
return sp - frame_size;
#endif
return ROUND_DOWN(sp - frame_size, TARGET_SIGSTACK_ALIGN);
}
/* compare to $M/$M/exec_machdep.c sendsig and sys/kern/kern_sig.c sigexit */

View File

@ -97,4 +97,6 @@ struct target_sigframe {
uint32_t __spare__[2];
};
#define TARGET_SIGSTACK_ALIGN 16
#endif /* TARGET_ARCH_SIGNAL_H */