diff options
author | Gordon Henriksen <gordonhenriksen@mac.com> | 2008-01-24 05:16:36 +0000 |
---|---|---|
committer | Gordon Henriksen <gordonhenriksen@mac.com> | 2008-01-24 05:16:36 +0000 |
commit | bcb265e2af6052895c400fe0d5729a23a82a5542 (patch) | |
tree | 5ad351da28d40cea303b2886e5e15cbe87f3239a /runtime | |
parent | 58ea52a6a5b46fad7f00729c9bf59e8588061be3 (diff) | |
download | llvm-bcb265e2af6052895c400fe0d5729a23a82a5542.tar.gz llvm-bcb265e2af6052895c400fe0d5729a23a82a5542.tar.bz2 llvm-bcb265e2af6052895c400fe0d5729a23a82a5542.tar.xz |
Fixing the stack walker.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@46302 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'runtime')
-rw-r--r-- | runtime/GC/SemiSpace/semispace.c | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/runtime/GC/SemiSpace/semispace.c b/runtime/GC/SemiSpace/semispace.c index 40af1cb2e3..0ae6e11bd2 100644 --- a/runtime/GC/SemiSpace/semispace.c +++ b/runtime/GC/SemiSpace/semispace.c @@ -97,25 +97,28 @@ void llvm_gc_write(void *V, void *ObjPtr, void **FieldPtr) { *FieldPtr = V; } * FIXME: This should be in a code-generator specific library, but for now this * will work for all code generators. */ +typedef struct FrameMap FrameMap; struct FrameMap { int32_t NumRoots; // Number of roots in stack frame. int32_t NumMeta; // Number of metadata descriptors. May be < NumRoots. void *Meta[]; // May be absent for roots without metadata. }; +typedef struct StackEntry StackEntry; struct StackEntry { - ShadowStackEntry *Next; // Caller's stack entry. + StackEntry *Next; // Caller's stack entry. const FrameMap *Map; // Pointer to constant FrameMap. void *Roots[]; // Stack roots (in-place array). }; StackEntry *llvm_gc_root_chain; void llvm_cg_walk_gcroots(void (*FP)(void **Root, void *Meta)) { - for (StackEntry *R; R; R = R->Next) { + StackEntry *R; + for (R = llvm_gc_root_chain; R; R = R->Next) { unsigned i, e; - for (i = 0, e = R->NumMeta; i != e; ++i) + for (i = 0, e = R->Map->NumMeta; i != e; ++i) FP(&R->Roots[i], R->Map->Meta[i]); - for (e = R->NumRoots; i != e; ++i) + for (e = R->Map->NumRoots; i != e; ++i) FP(&R->Roots[i], NULL); } } |