summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBen Gamari <ben@smart-cactus.org>2022-11-22 20:23:19 -0500
committerMatthew Pickering <matthewtpickering@gmail.com>2022-12-15 09:52:43 +0000
commitbb4d238b675e5138d1a6ea46552528136e4142d8 (patch)
tree5bbacd35744b146dba5ca0e8f149a72de2769492
parent32497a141fd1415c166451730bb5adc7b16882b3 (diff)
downloadhaskell-bb4d238b675e5138d1a6ea46552528136e4142d8.tar.gz
rts: Ensure that global regs are never passed as fun call args
This is in general unsafe as they may be clobbered if they are mapped to caller-saved machine registers. See Note [Register parameter passing]. (cherry picked from commit 9372329008143104b0ae5e8e792e957090dfa743)
-rw-r--r--rts/HeapStackCheck.cmm6
1 files changed, 3 insertions, 3 deletions
diff --git a/rts/HeapStackCheck.cmm b/rts/HeapStackCheck.cmm
index ba89f75522..fd977076ed 100644
--- a/rts/HeapStackCheck.cmm
+++ b/rts/HeapStackCheck.cmm
@@ -518,7 +518,7 @@ stg_block_takemvar_finally
W_ r1, r3;
r1 = R1;
r3 = R3;
- unlockClosure(R3, stg_MVAR_DIRTY_info);
+ unlockClosure(r3, stg_MVAR_DIRTY_info);
R1 = r1;
R3 = r3;
jump StgReturn [R1];
@@ -546,7 +546,7 @@ stg_block_readmvar_finally
W_ r1, r3;
r1 = R1;
r3 = R3;
- unlockClosure(R3, stg_MVAR_DIRTY_info);
+ unlockClosure(r3, stg_MVAR_DIRTY_info);
R1 = r1;
R3 = r3;
jump StgReturn [R1];
@@ -574,7 +574,7 @@ stg_block_putmvar_finally
W_ r1, r3;
r1 = R1;
r3 = R3;
- unlockClosure(R3, stg_MVAR_DIRTY_info);
+ unlockClosure(r3, stg_MVAR_DIRTY_info);
R1 = r1;
R3 = r3;
jump StgReturn [R1];