- p = (ptr_t) c->methods;
- MAYBE_MARK (p, mark_stack_ptr, mark_stack_limit, c, c6label);
-
-
- if (! c->isArray() && ! c->isPrimitive())
- {
- // Scan each method in the cases where `methods' really
- // points to a methods structure.
- for (int i = 0; i < c->method_count; ++i)
- {
- p = (ptr_t) c->methods[i].name;
- MAYBE_MARK (p, mark_stack_ptr, mark_stack_limit, c,
- cm1label);
- p = (ptr_t) c->methods[i].signature;
- MAYBE_MARK (p, mark_stack_ptr, mark_stack_limit, c,
- cm2label);
-
- // FIXME: `ncode' entry?
-
-#ifdef INTERPRETER
- // The interpreter installs a heap-allocated
- // trampoline here, so we'll mark it.
- if (_Jv_IsInterpretedClass (c))
- {
- p = (ptr_t) c->methods[i].ncode;
- MAYBE_MARK (p, mark_stack_ptr, mark_stack_limit, c,
- cm3label);
- }
-#endif
- }
- }
-
- // Mark all the fields.
- p = (ptr_t) c->fields;
- MAYBE_MARK (p, mark_stack_ptr, mark_stack_limit, c, c8label);
- for (int i = 0; i < c->field_count; ++i)
- {
- _Jv_Field* field = &c->fields[i];
-
-#ifndef COMPACT_FIELDS
- p = (ptr_t) field->name;
- MAYBE_MARK (p, mark_stack_ptr, mark_stack_limit, c, c8alabel);
-#endif
- p = (ptr_t) field->type;
- MAYBE_MARK (p, mark_stack_ptr, mark_stack_limit, c, c8blabel);
-
- // For the interpreter, we also need to mark the memory
- // containing static members
- if ((field->flags & java::lang::reflect::Modifier::STATIC))
- {
- p = (ptr_t) field->u.addr;
- MAYBE_MARK (p, mark_stack_ptr, mark_stack_limit, c, c8clabel);
-
- // also, if the static member is a reference,
- // mark also the value pointed to. We check for isResolved
- // since marking can happen before memory is allocated for
- // static members.
- if (JvFieldIsRef (field) && field->isResolved())
- {
- jobject val = *(jobject*) field->u.addr;
- p = (ptr_t) val;
- MAYBE_MARK (p, mark_stack_ptr, mark_stack_limit,
- c, c8elabel);
- }
- }
- }
-
- p = (ptr_t) c->vtable;
- MAYBE_MARK (p, mark_stack_ptr, mark_stack_limit, c, c9label);
- p = (ptr_t) c->interfaces;
- MAYBE_MARK (p, mark_stack_ptr, mark_stack_limit, c, cAlabel);
- for (int i = 0; i < c->interface_count; ++i)
- {
- p = (ptr_t) c->interfaces[i];
- MAYBE_MARK (p, mark_stack_ptr, mark_stack_limit, c, cClabel);
- }
- p = (ptr_t) c->loader;
- MAYBE_MARK (p, mark_stack_ptr, mark_stack_limit, c, cBlabel);
-
-#ifdef INTERPRETER
- if (_Jv_IsInterpretedClass (c))
- {
- _Jv_InterpClass* ic = (_Jv_InterpClass*)c;
-
- p = (ptr_t) ic->interpreted_methods;
- MAYBE_MARK (p, mark_stack_ptr, mark_stack_limit, ic, cElabel);
-
- for (int i = 0; i < c->method_count; i++)
- {
- p = (ptr_t) ic->interpreted_methods[i];
- MAYBE_MARK (p, mark_stack_ptr, mark_stack_limit, ic, \
- cFlabel);
- }
-
- p = (ptr_t) ic->field_initializers;
- MAYBE_MARK (p, mark_stack_ptr, mark_stack_limit, ic, cGlabel);
-
- }
-#endif
-
+ p = (GC_PTR) c->methods;
+ MAYBE_MARK (p, mark_stack_ptr, mark_stack_limit, c);
+
+ p = (GC_PTR) c->fields;
+ MAYBE_MARK (p, mark_stack_ptr, mark_stack_limit, c);
+
+ // The vtable might be allocated even for compiled code.
+ p = (GC_PTR) c->vtable;
+ MAYBE_MARK (p, mark_stack_ptr, mark_stack_limit, c);
+
+ p = (GC_PTR) c->interfaces;
+ MAYBE_MARK (p, mark_stack_ptr, mark_stack_limit, c);
+ p = (GC_PTR) c->loader;
+ MAYBE_MARK (p, mark_stack_ptr, mark_stack_limit, c);
+
+ // The dispatch tables can be allocated at runtime.
+ p = (GC_PTR) c->ancestors;
+ MAYBE_MARK (p, mark_stack_ptr, mark_stack_limit, c);
+
+ p = (GC_PTR) c->idt;
+ MAYBE_MARK (p, mark_stack_ptr, mark_stack_limit, c);
+
+ p = (GC_PTR) c->arrayclass;
+ MAYBE_MARK (p, mark_stack_ptr, mark_stack_limit, c);
+ p = (GC_PTR) c->protectionDomain;
+ MAYBE_MARK (p, mark_stack_ptr, mark_stack_limit, c);
+ p = (GC_PTR) c->hack_signers;
+ MAYBE_MARK (p, mark_stack_ptr, mark_stack_limit, c);
+ p = (GC_PTR) c->aux_info;
+ MAYBE_MARK (p, mark_stack_ptr, mark_stack_limit, c);
+
+ p = (GC_PTR) c->reflection_data;
+ MAYBE_MARK (p, mark_stack_ptr, mark_stack_limit, c);
+
+ // The class chain must be marked for runtime-allocated Classes
+ // loaded by the bootstrap ClassLoader.
+ p = (GC_PTR) c->next_or_version;
+ MAYBE_MARK (p, mark_stack_ptr, mark_stack_limit, c);