Author: gordon Date: Wed Jan 23 23:16:36 2008 New Revision: 46302 URL: http://llvm.org/viewvc/llvm-project?rev=46302&view=rev Log: Fixing the stack walker.
Modified: llvm/trunk/runtime/GC/SemiSpace/semispace.c Modified: llvm/trunk/runtime/GC/SemiSpace/semispace.c URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/runtime/GC/SemiSpace/semispace.c?rev=46302&r1=46301&r2=46302&view=diff ============================================================================== --- llvm/trunk/runtime/GC/SemiSpace/semispace.c (original) +++ llvm/trunk/runtime/GC/SemiSpace/semispace.c Wed Jan 23 23:16:36 2008 @@ -97,25 +97,28 @@ * 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); } } _______________________________________________ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits