mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-07 17:53:56 -06:00
target/sh4: Implement prctl_unalign_sigbus
Leave TARGET_ALIGNED_ONLY set, but use the new CPUState flag to set MO_UNALN for the instructions that the kernel handles in the unaligned trap. The Linux kernel does not handle all memory operations: no floating-point and no MAC. Signed-off-by: Richard Henderson <richard.henderson@linaro.org> Reviewed-by: Laurent Vivier <laurent@vivier.eu> Message-Id: <20211227150127.2659293-7-richard.henderson@linaro.org> Signed-off-by: Laurent Vivier <laurent@vivier.eu>
This commit is contained in:
parent
217d1a5ef8
commit
4da06fb306
3 changed files with 39 additions and 17 deletions
|
@ -83,6 +83,7 @@
|
|||
#define DELAY_SLOT_RTE (1 << 2)
|
||||
|
||||
#define TB_FLAG_PENDING_MOVCA (1 << 3)
|
||||
#define TB_FLAG_UNALIGN (1 << 4)
|
||||
|
||||
#define GUSA_SHIFT 4
|
||||
#ifdef CONFIG_USER_ONLY
|
||||
|
@ -373,6 +374,9 @@ static inline void cpu_get_tb_cpu_state(CPUSH4State *env, target_ulong *pc,
|
|||
| (env->sr & ((1u << SR_MD) | (1u << SR_RB))) /* Bits 29-30 */
|
||||
| (env->sr & (1u << SR_FD)) /* Bit 15 */
|
||||
| (env->movcal_backup ? TB_FLAG_PENDING_MOVCA : 0); /* Bit 3 */
|
||||
#ifdef CONFIG_USER_ONLY
|
||||
*flags |= TB_FLAG_UNALIGN * !env_cpu(env)->prctl_unalign_sigbus;
|
||||
#endif
|
||||
}
|
||||
|
||||
#endif /* SH4_CPU_H */
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue