[Git][ghc/ghc][wip/ghc-debug] Decode more StgTSO fields in ghc-heap
Sven Tennie
gitlab at gitlab.haskell.org
Sun May 10 15:28:41 UTC 2020
Sven Tennie pushed to branch wip/ghc-debug at Glasgow Haskell Compiler / GHC
Commits:
203cbc02 by Sven Tennie at 2020-05-10T17:27:51+02:00
Decode more StgTSO fields in ghc-heap
- - - - -
4 changed files:
- includes/rts/storage/TSO.h
- libraries/ghc-heap/GHC/Exts/Heap.hs
- libraries/ghc-heap/GHC/Exts/Heap/Closures.hs
- rts/Heap.c
Changes:
=====================================
includes/rts/storage/TSO.h
=====================================
@@ -107,6 +107,22 @@ typedef struct StgTSO_ {
*/
struct StgStack_ *stackobj;
+ struct InCall_ *bound;
+ struct Capability_ *cap;
+
+ struct StgTRecHeader_ *trec; /* STM transaction record */
+
+ /*
+ * A list of threads blocked on this TSO waiting to throw exceptions.
+ */
+ struct MessageThrowTo_ *blocked_exceptions;
+
+ /*
+ * A list of StgBlockingQueue objects, representing threads
+ * blocked on thunks that are under evaluation by this thread.
+ */
+ struct StgBlockingQueue_ *bq;
+
/*
* The tso->dirty flag indicates that this TSO's stack should be
* scanned during garbage collection. It also indicates that this
@@ -128,21 +144,6 @@ typedef struct StgTSO_ {
StgThreadID id;
StgWord32 saved_errno;
StgWord32 dirty; /* non-zero => dirty */
- struct InCall_* bound;
- struct Capability_* cap;
-
- struct StgTRecHeader_ * trec; /* STM transaction record */
-
- /*
- * A list of threads blocked on this TSO waiting to throw exceptions.
- */
- struct MessageThrowTo_ * blocked_exceptions;
-
- /*
- * A list of StgBlockingQueue objects, representing threads
- * blocked on thunks that are under evaluation by this thread.
- */
- struct StgBlockingQueue_ *bq;
/*
* The allocation limit for this thread, which is updated as the
=====================================
libraries/ghc-heap/GHC/Exts/Heap.hs
=====================================
@@ -287,10 +287,18 @@ getClosureX get_closure_raw x = do
, link = pts !! 4
}
TSO -> do
- unless (length pts >= 1) $
- fail $ "Expected at least 1 ptr argument to TSO, found "
+ unless (length pts == 6) $
+ fail $ "Expected 6 ptr arguments to TSO, found "
++ show (length pts)
- pure $ TSOClosure itbl (pts !! 0)
+ pure $ TSOClosure
+ { info = itbl
+ , _link = (pts !! 0)
+ , global_link = (pts !! 1)
+ , tsoStack = (pts !! 2)
+ , trec = (pts !! 3)
+ , blocked_exceptions = (pts !! 4)
+ , bq = (pts !! 5)
+ }
STACK -> do
unless (length pts >= 1) $
fail $ "Expected at least 1 ptr argument to STACK, found "
=====================================
libraries/ghc-heap/GHC/Exts/Heap/Closures.hs
=====================================
@@ -262,9 +262,16 @@ data GenClosure b
-- TODO: There are many more fields in a TSO closure which
-- are not yet implemented
+
+ -- | StgTSO
| TSOClosure
{ info :: !StgInfoTable
- , tsoStack :: !b
+ , _link :: !b
+ , global_link :: !b
+ , tsoStack :: !b -- ^ stackobj from StgTSO
+ , trec :: !b
+ , blocked_exceptions :: !b
+ , bq :: !b
}
| StackClosure
=====================================
rts/Heap.c
=====================================
@@ -206,8 +206,23 @@ static StgWord collect_pointers(StgClosure *closure, StgWord size, StgClosure *p
ptrs[nptrs++] = ((StgMVar *)closure)->value;
break;
case TSO:
- // TODO: Not complete
+ ASSERT((StgClosure *)((StgTSO *)closure)->_link != NULL);
+ ptrs[nptrs++] = (StgClosure *)((StgTSO *)closure)->_link;
+
+ ASSERT((StgClosure *)((StgTSO *)closure)->global_link != NULL);
+ ptrs[nptrs++] = (StgClosure *)((StgTSO *)closure)->global_link;
+
+ ASSERT((StgClosure *)((StgTSO *)closure)->stackobj != NULL);
ptrs[nptrs++] = (StgClosure *)((StgTSO *)closure)->stackobj;
+
+ ASSERT((StgClosure *)((StgTSO *)closure)->trec != NULL);
+ ptrs[nptrs++] = (StgClosure *)((StgTSO *)closure)->trec;
+
+ ASSERT((StgClosure *)((StgTSO *)closure)->blocked_exceptions != NULL);
+ ptrs[nptrs++] = (StgClosure *)((StgTSO *)closure)->blocked_exceptions;
+
+ ASSERT((StgClosure *)((StgTSO *)closure)->bq != NULL);
+ ptrs[nptrs++] = (StgClosure *)((StgTSO *)closure)->bq;
break;
case STACK:
ptrs[nptrs++] = (StgClosure *)((StgStack *)closure)->sp;
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/203cbc02fe3358a5d2300eacce59666b7a4c699a
--
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/203cbc02fe3358a5d2300eacce59666b7a4c699a
You're receiving this email because of your account on gitlab.haskell.org.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/ghc-commits/attachments/20200510/e3e2ebcc/attachment-0001.html>
More information about the ghc-commits
mailing list