From: Nick Clifton Date: Thu, 14 Jul 2016 09:38:07 +0000 (+0100) Subject: Small improvements to the ARM simulator to cope with illegal binaries. X-Git-Tag: gdb-7.12-release~259 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=7df94786e4723ba93d8982e55fc5e652b4b80142;p=thirdparty%2Fbinutils-gdb.git 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. --- diff --git a/sim/arm/ChangeLog b/sim/arm/ChangeLog index cae6f528d90..2ce94292420 100644 --- a/sim/arm/ChangeLog +++ b/sim/arm/ChangeLog @@ -1,3 +1,9 @@ +2016-07-14 Nick Clifton + + * 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 * config.in, configure: Regenerate. diff --git a/sim/arm/armemu.c b/sim/arm/armemu.c index 5fde3fd2595..76f398b3d71 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 c49036f1224..ea3d22979ac 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)