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:
parent
5b6828d194
commit
5fa2a10ba6
@ -77,4 +77,6 @@ struct target_sigframe {
|
|||||||
target_ucontext_t sf_uc; /* saved ucontext */
|
target_ucontext_t sf_uc; /* saved ucontext */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#define TARGET_SIGSTACK_ALIGN 16
|
||||||
|
|
||||||
#endif /* TARGET_ARCH_SIGNAL_H */
|
#endif /* TARGET_ARCH_SIGNAL_H */
|
||||||
|
@ -86,4 +86,6 @@ struct target_sigframe {
|
|||||||
target_mcontext_vfp_t sf_vfp; /* actual saved VFP context */
|
target_mcontext_vfp_t sf_vfp; /* actual saved VFP context */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#define TARGET_SIGSTACK_ALIGN 8
|
||||||
|
|
||||||
#endif /* TARGET_ARCH_SIGNAL_H */
|
#endif /* TARGET_ARCH_SIGNAL_H */
|
||||||
|
@ -88,4 +88,6 @@ struct target_sigframe {
|
|||||||
uint32_t __spare__[2];
|
uint32_t __spare__[2];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#define TARGET_SIGSTACK_ALIGN 8
|
||||||
|
|
||||||
#endif /* TARGET_ARCH_SIGNAL_H */
|
#endif /* TARGET_ARCH_SIGNAL_H */
|
||||||
|
@ -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;
|
sp = ts->sigaltstack_used.ss_sp + ts->sigaltstack_used.ss_size;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* TODO: make this a target_arch function / define */
|
return ROUND_DOWN(sp - frame_size, TARGET_SIGSTACK_ALIGN);
|
||||||
#if defined(TARGET_ARM)
|
|
||||||
return (sp - frame_size) & ~7;
|
|
||||||
#elif defined(TARGET_AARCH64)
|
|
||||||
return (sp - frame_size) & ~15;
|
|
||||||
#else
|
|
||||||
return sp - frame_size;
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* compare to $M/$M/exec_machdep.c sendsig and sys/kern/kern_sig.c sigexit */
|
/* compare to $M/$M/exec_machdep.c sendsig and sys/kern/kern_sig.c sigexit */
|
||||||
|
@ -97,4 +97,6 @@ struct target_sigframe {
|
|||||||
uint32_t __spare__[2];
|
uint32_t __spare__[2];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#define TARGET_SIGSTACK_ALIGN 16
|
||||||
|
|
||||||
#endif /* TARGET_ARCH_SIGNAL_H */
|
#endif /* TARGET_ARCH_SIGNAL_H */
|
||||||
|
Loading…
Reference in New Issue
Block a user