[llvm-commits] [llvm] r46302 - /llvm/trunk/runtime/GC/SemiSpace/semispace.c
Gordon Henriksen
gordonhenriksen at mac.com
Wed Jan 23 21:16:37 PST 2008
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);
}
}
More information about the llvm-commits
mailing list