changeset 5fad1d2eb314 in /z/repo/gem5
details: http://repo.gem5.org/gem5?cmd=changeset;node=5fad1d2eb314
description:
        sim: Fix undefined behavior in the pseudo-inst interface

        The order between updating and using arg_num in
        PseudoInst::pseudoInst() is currently undefined. This changeset
        explicitly updates arg_num after it has been used to extract an
        argument.

diffstat:

 src/sim/pseudo_inst.cc |  6 ++++--
 1 files changed, 4 insertions(+), 2 deletions(-)

diffs (16 lines):

diff -r cfb305ba76bd -r 5fad1d2eb314 src/sim/pseudo_inst.cc
--- a/src/sim/pseudo_inst.cc    Wed Sep 18 08:46:33 2013 -0400
+++ b/src/sim/pseudo_inst.cc    Wed Sep 18 17:08:35 2013 +0200
@@ -98,8 +98,10 @@
     // used the Argument class, but due to the possible side effects
     // from getArgument, it'd most likely break.
     int arg_num(0);
-    for (int i = 0; i < sizeof(args) / sizeof(*args); ++i)
-        args[arg_num++] = getArgument(tc, arg_num, sizeof(uint64_t), false);
+    for (int i = 0; i < sizeof(args) / sizeof(*args); ++i) {
+        args[arg_num] = getArgument(tc, arg_num, sizeof(uint64_t), false);
+        ++arg_num;
+    }
 
     switch (func) {
       case 0x00: // arm_func
_______________________________________________
gem5-dev mailing list
[email protected]
http://m5sim.org/mailman/listinfo/gem5-dev

Reply via email to