This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
Commit: ARM SIM
- From: Nick Clifton <nickc at redhat dot com>
- To: gdb-patches at sourceware dot org
- Date: Thu, 14 Jul 2016 11:41:32 +0100
- Subject: Commit: ARM SIM
- Authentication-results: sourceware.org; auth=none
Hi Guys,
I have been testing the ARM simulator against various illegal binaries
and I have come across a couple of small problems. The first is that
the sim will complain about illegal arguments to the 64-bit multiply
instructions (good), but it will complain even if the user does not
want to see the complaints (bad). So I have added code to restrict
the error messages to when debugging is enabled.
The second fix is to the SWIopen() function, which used to assume that
the flags provided in register r1 were always valid. This patch adds
code to check the flags, and ignore invalid ones.
Cheers
Nick
sim/arm/ChangeLog
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.
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)