summaryrefslogtreecommitdiff
path: root/libraries/base/cbits/StackCloningDecoding.cmm
diff options
context:
space:
mode:
Diffstat (limited to 'libraries/base/cbits/StackCloningDecoding.cmm')
-rw-r--r--libraries/base/cbits/StackCloningDecoding.cmm26
1 files changed, 26 insertions, 0 deletions
diff --git a/libraries/base/cbits/StackCloningDecoding.cmm b/libraries/base/cbits/StackCloningDecoding.cmm
new file mode 100644
index 0000000000..17b71dd0f0
--- /dev/null
+++ b/libraries/base/cbits/StackCloningDecoding.cmm
@@ -0,0 +1,26 @@
+#include "Cmm.h"
+
+stg_cloneMyStackzh () {
+ gcptr stgStack;
+ gcptr clonedStack;
+
+ stgStack = StgTSO_stackobj(CurrentTSO);
+ StgStack_sp(stgStack) = Sp;
+
+ ("ptr" clonedStack) = ccall cloneStack(MyCapability() "ptr", stgStack "ptr");
+
+ return (clonedStack);
+}
+
+stg_sendCloneStackMessagezh (gcptr threadId, gcptr mVarStablePtr) {
+ ccall sendCloneStackMessage(threadId "ptr", mVarStablePtr "ptr");
+
+ return ();
+}
+
+stg_decodeStackzh (gcptr stgStack) {
+ gcptr stackEntries;
+ ("ptr" stackEntries) = ccall decodeClonedStack(MyCapability() "ptr", stgStack "ptr");
+
+ return (stackEntries);
+}