From 055a3f27e8c704a459a84ef6deeadd06a4a55d23 Mon Sep 17 00:00:00 2001 From: Mike Frysinger Date: Wed, 30 Jun 2021 20:30:43 -0400 Subject: [PATCH] sim: m32r: fix virtual environment with Linux targets We don't want to handle Linux syscalls when in the virtual environment, just the user environment, so adjust the Linux traps logic to check for that specifically (instead of just skipping the operating environment). Also tweak some testcases to explicitly specify the environment they run under rather than relying on the default matching their needs. This gets the tests passing for all m32r targets. --- sim/m32r/ChangeLog | 5 +++++ sim/m32r/traps-linux.c | 11 +++-------- sim/testsuite/m32r/ChangeLog | 5 +++++ sim/testsuite/m32r/hw-trap.ms | 1 + sim/testsuite/m32r/trap.cgs | 1 + 5 files changed, 15 insertions(+), 8 deletions(-) diff --git a/sim/m32r/ChangeLog b/sim/m32r/ChangeLog index 5243cdad828..19ddf8f5600 100644 --- a/sim/m32r/ChangeLog +++ b/sim/m32r/ChangeLog @@ -1,3 +1,8 @@ +2021-07-01 Mike Frysinger + + * traps-linux.c (m32r_trap): Change OPERATING_ENVIRONMENT check to + !USER_ENVIRONMENT. Jump to default switch case. + 2021-07-01 Mike Frysinger * syscall.h: Change __NR_ prefix on all symbols to TARGET_LINUX_SYS_. diff --git a/sim/m32r/traps-linux.c b/sim/m32r/traps-linux.c index d60be7ca54b..7aec04b5116 100644 --- a/sim/m32r/traps-linux.c +++ b/sim/m32r/traps-linux.c @@ -231,14 +231,8 @@ m32r_trap (SIM_CPU *current_cpu, PCADDR pc, int num) unsigned int func, arg1, arg2, arg3, arg4, arg5, arg6, arg7; int result, result2, errcode; - if (STATE_ENVIRONMENT (sd) == OPERATING_ENVIRONMENT) - { - /* The new pc is the trap vector entry. - We assume there's a branch there to some handler. - Use cr5 as EVB (EIT Vector Base) register. */ - USI new_pc = m32rbf_h_cr_get (current_cpu, 5) + 0x40 + num * 4; - return new_pc; - } + if (STATE_ENVIRONMENT (sd) != USER_ENVIRONMENT) + goto case_default; func = m32rbf_h_gr_get (current_cpu, 7); arg1 = m32rbf_h_gr_get (current_cpu, 0); @@ -1344,6 +1338,7 @@ m32r_trap (SIM_CPU *current_cpu, PCADDR pc, int num) /* Do nothing. */ break; + case_default: default : { /* Use cr5 as EVB (EIT Vector Base) register. */ diff --git a/sim/testsuite/m32r/ChangeLog b/sim/testsuite/m32r/ChangeLog index 6e6facbf9bd..535435ac3f8 100644 --- a/sim/testsuite/m32r/ChangeLog +++ b/sim/testsuite/m32r/ChangeLog @@ -1,3 +1,8 @@ +2021-07-01 Mike Frysinger + + * hw-trap.ms: Run sim with --environment virtual. + * trap.cgs: Likewise. + 2021-04-08 Mike Frysinger * allinsn.exp (arch): Delete. diff --git a/sim/testsuite/m32r/hw-trap.ms b/sim/testsuite/m32r/hw-trap.ms index 2aa200b5d70..09790248d10 100644 --- a/sim/testsuite/m32r/hw-trap.ms +++ b/sim/testsuite/m32r/hw-trap.ms @@ -1,4 +1,5 @@ # mach(): m32r m32rx +# sim: --environment virtual # output(): pass\n .include "testutils.inc" diff --git a/sim/testsuite/m32r/trap.cgs b/sim/testsuite/m32r/trap.cgs index 59e136a0173..f132d165367 100644 --- a/sim/testsuite/m32r/trap.cgs +++ b/sim/testsuite/m32r/trap.cgs @@ -1,5 +1,6 @@ # m32r testcase for trap #$uimm4 # mach(): m32r m32rx +# sim: --environment virtual .include "testutils.inc" -- 2.30.2