aboutsummaryrefslogtreecommitdiff
path: root/sim
diff options
context:
space:
mode:
authorMike Frysinger <vapier@gentoo.org>2021-06-30 20:30:43 -0400
committerMike Frysinger <vapier@gentoo.org>2021-07-01 20:38:07 -0400
commit055a3f27e8c704a459a84ef6deeadd06a4a55d23 (patch)
tree829e3b6af9bcef984e5e5054eadae517926d06f3 /sim
parent33b477e1c7fc12b21934e5f8fa799c163a554b20 (diff)
downloadbinutils-055a3f27e8c704a459a84ef6deeadd06a4a55d23.zip
binutils-055a3f27e8c704a459a84ef6deeadd06a4a55d23.tar.gz
binutils-055a3f27e8c704a459a84ef6deeadd06a4a55d23.tar.bz2
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.
Diffstat (limited to 'sim')
-rw-r--r--sim/m32r/ChangeLog5
-rw-r--r--sim/m32r/traps-linux.c11
-rw-r--r--sim/testsuite/m32r/ChangeLog5
-rw-r--r--sim/testsuite/m32r/hw-trap.ms1
-rw-r--r--sim/testsuite/m32r/trap.cgs1
5 files changed, 15 insertions, 8 deletions
diff --git a/sim/m32r/ChangeLog b/sim/m32r/ChangeLog
index 5243cda..19ddf8f 100644
--- a/sim/m32r/ChangeLog
+++ b/sim/m32r/ChangeLog
@@ -1,5 +1,10 @@
2021-07-01 Mike Frysinger <vapier@gentoo.org>
+ * traps-linux.c (m32r_trap): Change OPERATING_ENVIRONMENT check to
+ !USER_ENVIRONMENT. Jump to default switch case.
+
+2021-07-01 Mike Frysinger <vapier@gentoo.org>
+
* syscall.h: Change __NR_ prefix on all symbols to TARGET_LINUX_SYS_.
* traps-linux.c: Likewise. Include sim/callback.h & stdlib.h.
diff --git a/sim/m32r/traps-linux.c b/sim/m32r/traps-linux.c
index d60be7c..7aec04b 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 6e6facb..535435a 100644
--- a/sim/testsuite/m32r/ChangeLog
+++ b/sim/testsuite/m32r/ChangeLog
@@ -1,3 +1,8 @@
+2021-07-01 Mike Frysinger <vapier@gentoo.org>
+
+ * hw-trap.ms: Run sim with --environment virtual.
+ * trap.cgs: Likewise.
+
2021-04-08 Mike Frysinger <vapier@gentoo.org>
* allinsn.exp (arch): Delete.
diff --git a/sim/testsuite/m32r/hw-trap.ms b/sim/testsuite/m32r/hw-trap.ms
index 2aa200b..0979024 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 59e136a..f132d16 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"