aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Maydell <peter.maydell@linaro.org>2013-05-20 13:36:09 -0600
committerJohn Rigby <john.rigby@linaro.org>2013-05-24 10:50:04 -0600
commitbd4f4da18811fc45f684f33fdd9030a39b7d0b78 (patch)
tree9564f2e93e97d4f211b105a6c26641c3f8102671
parent0aa888afe73373e0e9511bfeb79e93b70475f2cf (diff)
linux-user: no fpe with aarch64kvm-aarch64-wip
From Peter Maydell, quick work around for missing linux-user/aarch64/nwfpe This needs to be squashed with one of the earlier linux-user commits. Signed-off-by: John Rigby <john.rigby@linaro.org>
-rw-r--r--linux-user/main.c9
-rw-r--r--linux-user/qemu.h4
2 files changed, 12 insertions, 1 deletions
diff --git a/linux-user/main.c b/linux-user/main.c
index 539d45b7b..4fbc6fb64 100644
--- a/linux-user/main.c
+++ b/linux-user/main.c
@@ -713,6 +713,14 @@ void cpu_loop(CPUARMState *env)
switch(trapnr) {
case EXCP_UDEF:
{
+#ifdef TARGET_AARCH64
+ /* obvious rubbish. aarch64 probably needs its own top loop */
+ info.si_signo = SIGILL;
+ info.si_errno = 0;
+ info.si_code = TARGET_ILL_ILLOPN;
+ info._sifields._sigfault._addr = env->regs[15];
+ queue_signal(env, info.si_signo, &info);
+#else
TaskState *ts = env->opaque;
uint32_t opcode;
int rc;
@@ -780,6 +788,7 @@ void cpu_loop(CPUARMState *env)
/* increment PC */
env->regs[15] += 4;
}
+#endif /* not AArch64 */
}
break;
case EXCP_SWI:
diff --git a/linux-user/qemu.h b/linux-user/qemu.h
index b10e9572a..5d27d0d1e 100644
--- a/linux-user/qemu.h
+++ b/linux-user/qemu.h
@@ -79,7 +79,7 @@ struct vm86_saved_state {
};
#endif
-#ifdef TARGET_ARM
+#if defined(TARGET_ARM) && defined(TARGET_ABI32)
/* FPU emulator */
#include "nwfpe/fpa11.h"
#endif
@@ -103,8 +103,10 @@ struct emulated_sigtable {
typedef struct TaskState {
pid_t ts_tid; /* tid (or pid) of this task */
#ifdef TARGET_ARM
+# ifdef TARGET_ABI32
/* FPA state */
FPA11 fpa;
+#endif
int swi_errno;
#endif
#ifdef TARGET_UNICORE32