Reviewers: rsc,
Message:
Hello rsc@golang.org (cc: golang-dev@googlegroups.com),
I'd like you to review this change to
https://code.google.com/p/go/
Description:
cmd/*g: Flush return parameters in case of panic.
Fixes issue 4066.
Please review this at https://codereview.appspot.com/7040044/
Affected files:
M src/cmd/5g/reg.c
M src/cmd/6g/reg.c
M src/cmd/8g/reg.c
Index: src/cmd/5g/reg.c
===================================================================
--- a/src/cmd/5g/reg.c
+++ b/src/cmd/5g/reg.c
@@ -1074,10 +1074,10 @@
break;
default:
- // Work around for issue 1304:
- // flush modified globals before each instruction.
+ // Work around for issue 1304 & 4066:
+ // flush modified globals and return parameters before each instruction.
for(z=0; z<BITS; z++)
- cal.b[z] |= externs.b[z];
+ cal.b[z] |= externs.b[z] | ovar.b[z];
break;
}
for(z=0; z<BITS; z++) {
Index: src/cmd/6g/reg.c
===================================================================
--- a/src/cmd/6g/reg.c
+++ b/src/cmd/6g/reg.c
@@ -1119,10 +1119,10 @@
break;
default:
- // Work around for issue 1304:
- // flush modified globals before each instruction.
+ // Work around for issue 1304 & 4066:
+ // flush modified globals and return parameters before each instruction.
for(z=0; z<BITS; z++)
- cal.b[z] |= externs.b[z];
+ cal.b[z] |= externs.b[z] | ovar.b[z];
break;
}
for(z=0; z<BITS; z++) {
Index: src/cmd/8g/reg.c
===================================================================
--- a/src/cmd/8g/reg.c
+++ b/src/cmd/8g/reg.c
@@ -989,10 +989,10 @@
break;
default:
- // Work around for issue 1304:
- // flush modified globals before each instruction.
+ // Work around for issue 1304 & 4066:
+ // flush modified globals and return parameters before each instruction.
for(z=0; z<BITS; z++)
- cal.b[z] |= externs.b[z];
+ cal.b[z] |= externs.b[z] | ovar.b[z];
break;
}
for(z=0; z<BITS; z++) {