On 29 May 2014 20:46, Paolo Bonzini <pbonz...@redhat.com> wrote:
> Set it on startup and in signal handler frames.
>
> Signed-off-by: Paolo Bonzini <pbonz...@redhat.com>
> ---
>  linux-user/main.c   | 1 +
>  linux-user/signal.c | 5 +++++
>  2 files changed, 6 insertions(+)
>
> diff --git a/linux-user/main.c b/linux-user/main.c
> index 882186e..2a04446 100644
> --- a/linux-user/main.c
> +++ b/linux-user/main.c
> @@ -4191,6 +4191,7 @@ int main(int argc, char **argv, char **envp)
>          if (EF_ARM_EABI_VERSION(info->elf_flags) >= EF_ARM_EABI_VER4
>              && (info->elf_flags & EF_ARM_BE8)) {
>              env->bswap_code = 1;
> +            env->uncached_cpsr |= CPSR_E;
>          }
>      }
>  #elif defined(TARGET_UNICORE32)
> diff --git a/linux-user/signal.c b/linux-user/signal.c
> index c652829..048ffac 100644
> --- a/linux-user/signal.c
> +++ b/linux-user/signal.c
> @@ -1633,6 +1633,11 @@ setup_return(CPUARMState *env, struct target_sigaction 
> *ka,
>      } else {
>          cpsr &= ~CPSR_T;
>      }
> +#ifdef TARGET_WORDS_BIGENDIAN
> +    cpsr |= CPSR_E;

This is wrong for BE32, where CPSR_E doesn't exist and both code
and data accesses are big-endian.

> +#else
> +    cpsr &= ~CPSR_E;
> +#endif
>
>      if (ka->sa_flags & TARGET_SA_RESTORER) {
>          retcode = ka->sa_restorer;
> --
> 1.9.3

thanks
-- PMM

Reply via email to