diff options
author | Nick Clifton <nickc@redhat.com> | 2016-07-14 10:38:07 +0100 |
---|---|---|
committer | Nick Clifton <nickc@redhat.com> | 2016-07-14 10:38:07 +0100 |
commit | 7df94786e4723ba93d8982e55fc5e652b4b80142 (patch) | |
tree | a396635bc96e67a428947ebc8a283614797436ad | |
parent | fa1c0170176a5e4820f43824cffe80ffc4e7a717 (diff) | |
download | gdb-7df94786e4723ba93d8982e55fc5e652b4b80142.zip gdb-7df94786e4723ba93d8982e55fc5e652b4b80142.tar.gz gdb-7df94786e4723ba93d8982e55fc5e652b4b80142.tar.bz2 |
Small improvements to the ARM simulator to cope with illegal binaries.
* armemu.c (Multiply64): Only issue error messages about invalid
arguments if debugging is enabled.
* armos.c (ARMul_OSHandleSWI): Ignore invalid flags.
-rw-r--r-- | sim/arm/ChangeLog | 6 | ||||
-rw-r--r-- | sim/arm/armemu.c | 6 | ||||
-rw-r--r-- | sim/arm/armos.c | 5 |
3 files changed, 13 insertions, 4 deletions
diff --git a/sim/arm/ChangeLog b/sim/arm/ChangeLog index cae6f52..2ce9429 100644 --- a/sim/arm/ChangeLog +++ b/sim/arm/ChangeLog @@ -1,3 +1,9 @@ +2016-07-14 Nick Clifton <nickc@redhat.com> + + * armemu.c (Multiply64): Only issue error messages about invalid + arguments if debugging is enabled. + * armos.c (ARMul_OSHandleSWI): Ignore invalid flags. + 2016-01-10 Mike Frysinger <vapier@gentoo.org> * config.in, configure: Regenerate. diff --git a/sim/arm/armemu.c b/sim/arm/armemu.c index 5fde3fd..76f398b 100644 --- a/sim/arm/armemu.c +++ b/sim/arm/armemu.c @@ -5950,10 +5950,10 @@ Multiply64 (ARMul_State * state, ARMword instr, int msigned, int scc) ; else #endif - if (nRdHi == nRm || nRdLo == nRm) + /* BAD code can trigger this result. So only complain if debugging. */ + if (state->Debug && (nRdHi == nRm || nRdLo == nRm)) fprintf (stderr, "sim: MULTIPLY64 - INVALID ARGUMENTS: %d %d %d\n", nRdHi, nRdLo, nRm); - if (msigned) { /* Compute sign of result and adjust operands if necessary. */ @@ -5998,7 +5998,7 @@ Multiply64 (ARMul_State * state, ARMword instr, int msigned, int scc) state->Reg[nRdLo] = RdLo; state->Reg[nRdHi] = RdHi; } - else + else if (state->Debug) fprintf (stderr, "sim: MULTIPLY64 - INVALID ARGUMENTS\n"); if (scc) diff --git a/sim/arm/armos.c b/sim/arm/armos.c index c49036f..ea3d229 100644 --- a/sim/arm/armos.c +++ b/sim/arm/armos.c @@ -260,7 +260,10 @@ SWIopen (ARMul_State * state, ARMword name, ARMword SWIflags) return; /* Now we need to decode the Demon open mode. */ - flags = translate_open_mode[SWIflags]; + if (SWIflags >= sizeof (translate_open_mode) / sizeof (translate_open_mode[0])) + flags = 0; + else + flags = translate_open_mode[SWIflags]; /* Filename ":tt" is special: it denotes stdin/out. */ if (strcmp (buf, ":tt") == 0) |