[aarch64-port-dev ] Fix off-by-one error in array initialization

Andrew Haley aph at redhat.com
Thu Nov 14 04:57:19 PST 2013


This bug writes one word of zeros beyond the end of an array when it
is initialized.  This causes odd random memory corruption.

Fixed thusly.

Andrew.


changeset:   6081:31cacf78a35a
tag:         tip
user:        aph
date:        Thu Nov 14 07:54:51 2013 -0500
summary:     Fix off-by-one error in array initialization

diff -r feef9250f2fe -r 31cacf78a35a src/cpu/aarch64/vm/aarch64.ad
--- a/src/cpu/aarch64/vm/aarch64.ad	Tue Nov 12 14:13:18 2013 -0500
+++ b/src/cpu/aarch64/vm/aarch64.ad	Thu Nov 14 07:54:51 2013 -0500
@@ -2552,12 +2552,11 @@
     // for now we just write cnt zeros
     Label loop;
     Label done;
+    __ cbz(cnt_reg, done);
     __ bind(loop);
-    __ cmp(cnt_reg, zr);
-    __ br(Assembler::LT, done);
+    __ sub(cnt_reg, cnt_reg, 1);
     __ str(zr, __ post(base_reg, wordSize));
-    __ sub(cnt_reg, cnt_reg, 1);
-    __ b(loop);
+    __ cbnz(cnt_reg, loop);
     __ bind(done);

   %}




More information about the aarch64-port-dev mailing list