Lines Matching refs:clazz
179 static void loadMethodFromDex(ClassObject* clazz, const DexMethod* pDexMethod,\
182 static void loadSFieldFromDex(ClassObject* clazz,
184 static void loadIFieldFromDex(ClassObject* clazz,
186 static bool precacheReferenceOffsets(ClassObject* clazz);
187 static void computeRefOffsets(ClassObject* clazz);
189 static bool createVtable(ClassObject* clazz);
190 static bool createIftable(ClassObject* clazz);
191 static bool insertMethodStubs(ClassObject* clazz);
192 static bool computeFieldOffsets(ClassObject* clazz);
193 static void throwEarlierClassFailure(ClassObject* clazz);
203 static void logClassLoadWithTime(char type, ClassObject* clazz, u8 time) { in logClassLoadWithTime() argument
209 get_process_name(), (int) clazz->classLoader, clazz->descriptor, in logClassLoadWithTime()
216 static void logClassLoad(char type, ClassObject* clazz) { in logClassLoad() argument
217 logClassLoadWithTime(type, clazz, dvmGetThreadCpuTimeNsec()); in logClassLoad()
298 size_t dvmClassObjectSize(const ClassObject *clazz) in dvmClassObjectSize() argument
300 assert(clazz != NULL); in dvmClassObjectSize()
301 return classObjectSize(clazz->sfieldCount); in dvmClassObjectSize()
834 static InitiatingLoaderList *dvmGetInitiatingLoaderList(ClassObject* clazz) in dvmGetInitiatingLoaderList() argument
836 assert(clazz->serialNumber >= INITIAL_CLASS_SERIAL_NUMBER); in dvmGetInitiatingLoaderList()
837 int classIndex = clazz->serialNumber-INITIAL_CLASS_SERIAL_NUMBER; in dvmGetInitiatingLoaderList()
842 return &(clazz->initiatingLoaderList); in dvmGetInitiatingLoaderList()
856 bool dvmLoaderInInitiatingList(const ClassObject* clazz, const Object* loader) in dvmLoaderInInitiatingList() argument
870 ClassObject* nonConstClazz = (ClassObject*) clazz; in dvmLoaderInInitiatingList()
894 void dvmAddInitiatingLoader(ClassObject* clazz, Object* loader) in dvmAddInitiatingLoader() argument
896 if (loader != clazz->classLoader) { in dvmAddInitiatingLoader()
899 LOGVV("Adding %p to '%s' init list\n", loader, clazz->descriptor); in dvmAddInitiatingLoader()
920 InitiatingLoaderList *loaderList = dvmGetInitiatingLoaderList(clazz); in dvmAddInitiatingLoader()
962 const ClassObject* clazz = (const ClassObject*) vclazz; in hashcmpClassByCrit() local
966 match = (strcmp(clazz->descriptor, pCrit->descriptor) == 0 && in hashcmpClassByCrit()
967 (clazz->classLoader == pCrit->loader || in hashcmpClassByCrit()
969 dvmLoaderInInitiatingList(clazz, pCrit->loader)) )); in hashcmpClassByCrit()
983 const ClassObject* clazz = (const ClassObject*) vclazz; in hashcmpClassByClass() local
987 match = (strcmp(clazz->descriptor, addClazz->descriptor) == 0 && in hashcmpClassByClass()
988 (clazz->classLoader == addClazz->classLoader || in hashcmpClassByClass()
990 dvmLoaderInInitiatingList(clazz, addClazz->classLoader)) )); in hashcmpClassByClass()
1061 bool dvmAddClassToHash(ClassObject* clazz) in dvmAddClassToHash() argument
1066 hash = dvmComputeUtf8Hash(clazz->descriptor); in dvmAddClassToHash()
1069 found = dvmHashTableLookup(gDvm.loadedClasses, hash, clazz, in dvmAddClassToHash()
1074 clazz->descriptor, clazz->classLoader, in dvmAddClassToHash()
1075 (found == (void*) clazz), clazz); in dvmAddClassToHash()
1080 return (found == (void*) clazz); in dvmAddClassToHash()
1107 static void removeClassFromHash(ClassObject* clazz) in removeClassFromHash() argument
1109 LOGV("+++ removeClassFromHash '%s'\n", clazz->descriptor); in removeClassFromHash()
1111 u4 hash = dvmComputeUtf8Hash(clazz->descriptor); in removeClassFromHash()
1114 if (!dvmHashTableRemove(gDvm.loadedClasses, hash, clazz)) in removeClassFromHash()
1115 LOGW("Hash table remove failed on class '%s'\n", clazz->descriptor); in removeClassFromHash()
1132 void dvmSetClassSerialNumber(ClassObject* clazz) in dvmSetClassSerialNumber() argument
1134 assert(clazz->serialNumber == 0); in dvmSetClassSerialNumber()
1135 clazz->serialNumber = android_atomic_inc(&gDvm.classSerialNumber); in dvmSetClassSerialNumber()
1151 ClassObject* clazz; in dvmFindClass() local
1153 clazz = dvmFindClassNoInit(descriptor, loader); in dvmFindClass()
1154 if (clazz != NULL && clazz->status < CLASS_INITIALIZED) { in dvmFindClass()
1156 if (!dvmInitClass(clazz)) { in dvmFindClass()
1159 assert(clazz->status == CLASS_ERROR); in dvmFindClass()
1164 return clazz; in dvmFindClass()
1215 ClassObject* clazz; in findClassFromLoaderNoInit() local
1229 clazz = dvmLookupClass(descriptor, loader, false); in findClassFromLoaderNoInit()
1230 if (clazz != NULL) { in findClassFromLoaderNoInit()
1232 return clazz; in findClassFromLoaderNoInit()
1255 loadClass = dvmFindVirtualMethodHierByDescriptor(loader->clazz, "loadClass", in findClassFromLoaderNoInit()
1273 clazz = (ClassObject*) result.l; in findClassFromLoaderNoInit()
1281 dotName, loader, excep->clazz->descriptor); in findClassFromLoaderNoInit()
1288 clazz = NULL; in findClassFromLoaderNoInit()
1290 } else if (clazz == NULL) { in findClassFromLoaderNoInit()
1297 dvmAddInitiatingLoader(clazz, loader); in findClassFromLoaderNoInit()
1300 descriptor, clazz->classLoader, loader, clazz); in findClassFromLoaderNoInit()
1305 return clazz; in findClassFromLoaderNoInit()
1332 ClassObject* clazz; in dvmFindSystemClass() local
1334 clazz = dvmFindSystemClassNoInit(descriptor); in dvmFindSystemClass()
1335 if (clazz != NULL && clazz->status < CLASS_INITIALIZED) { in dvmFindSystemClass()
1337 if (!dvmInitClass(clazz)) { in dvmFindSystemClass()
1340 assert(clazz->status == CLASS_ERROR); in dvmFindSystemClass()
1345 return clazz; in dvmFindSystemClass()
1377 ClassObject* clazz; in findClassNoInit() local
1399 descriptor, dvmGetException(self)->clazz->descriptor); in findClassNoInit()
1404 clazz = dvmLookupClass(descriptor, loader, true); in findClassNoInit()
1405 if (clazz == NULL) { in findClassNoInit()
1435 clazz = loadClassFromDex(pDvmDex, pClassDef, loader); in findClassNoInit()
1438 if (clazz != NULL) { in findClassNoInit()
1439 dvmFreeClassInnards(clazz); in findClassNoInit()
1440 dvmReleaseTrackedAlloc((Object*) clazz, NULL); in findClassNoInit()
1450 dvmLockObject(self, (Object*) clazz); in findClassNoInit()
1451 clazz->initThreadId = self->threadId; in findClassNoInit()
1458 assert(clazz->classLoader == loader); in findClassNoInit()
1459 if (!dvmAddClassToHash(clazz)) { in findClassNoInit()
1468 clazz->initThreadId = 0; in findClassNoInit()
1469 dvmUnlockObject(self, (Object*) clazz); in findClassNoInit()
1473 dvmFreeClassInnards(clazz); in findClassNoInit()
1474 dvmReleaseTrackedAlloc((Object*) clazz, NULL); in findClassNoInit()
1478 clazz = dvmLookupClass(descriptor, loader, true); in findClassNoInit()
1479 assert(clazz != NULL); in findClassNoInit()
1482 dvmReleaseTrackedAlloc((Object*) clazz, NULL); in findClassNoInit()
1485 logClassLoadWithTime('>', clazz, startTime); in findClassNoInit()
1490 if (!dvmLinkClass(clazz)) { in findClassNoInit()
1495 removeClassFromHash(clazz); in findClassNoInit()
1496 clazz->status = CLASS_ERROR; in findClassNoInit()
1497 dvmFreeClassInnards(clazz); in findClassNoInit()
1501 clazz->initThreadId = 0; in findClassNoInit()
1502 dvmObjectNotifyAll(self, (Object*) clazz); in findClassNoInit()
1503 dvmUnlockObject(self, (Object*) clazz); in findClassNoInit()
1507 clazz->descriptor, get_process_name()); in findClassNoInit()
1514 logClassLoad('<', clazz); in findClassNoInit()
1516 clazz = NULL; in findClassNoInit()
1525 dvmObjectNotifyAll(self, (Object*) clazz); in findClassNoInit()
1526 dvmUnlockObject(self, (Object*) clazz); in findClassNoInit()
1535 clazz->virtualMethodCount + clazz->directMethodCount; in findClassNoInit()
1536 gDvm.numDeclaredInstFields += clazz->ifieldCount; in findClassNoInit()
1537 gDvm.numDeclaredStaticFields += clazz->sfieldCount; in findClassNoInit()
1552 gDvm.classJavaLangObject = clazz; in findClassNoInit()
1556 logClassLoad('<', clazz); in findClassNoInit()
1561 if (!dvmIsClassLinked(clazz) && clazz->status != CLASS_ERROR) { in findClassNoInit()
1574 dvmLockObject(self, (Object*) clazz); in findClassNoInit()
1575 if (!dvmIsClassLinked(clazz) && in findClassNoInit()
1576 clazz->initThreadId == self->threadId) in findClassNoInit()
1578 LOGW("Recursive link on class %s\n", clazz->descriptor); in findClassNoInit()
1579 dvmUnlockObject(self, (Object*) clazz); in findClassNoInit()
1581 "Ljava/lang/ClassCircularityError;", clazz->descriptor); in findClassNoInit()
1582 clazz = NULL; in findClassNoInit()
1587 while (!dvmIsClassLinked(clazz) && clazz->status != CLASS_ERROR) { in findClassNoInit()
1588 dvmObjectWait(self, (Object*) clazz, 0, 0, false); in findClassNoInit()
1590 dvmUnlockObject(self, (Object*) clazz); in findClassNoInit()
1592 if (clazz->status == CLASS_ERROR) { in findClassNoInit()
1597 throwEarlierClassFailure(clazz); in findClassNoInit()
1598 clazz = NULL; in findClassNoInit()
1604 assert(dvmIsClassLinked(clazz)); in findClassNoInit()
1606 assert(clazz->obj.clazz == gDvm.classJavaLangClass); in findClassNoInit()
1607 if (clazz != gDvm.classJavaLangObject) { in findClassNoInit()
1608 if (clazz->super == NULL) { in findClassNoInit()
1614 if (!dvmIsInterfaceClass(clazz)) { in findClassNoInit()
1618 assert(clazz->vtableCount >= clazz->virtualMethodCount); in findClassNoInit()
1629 if (clazz == gDvm.classJavaLangClass && !dvmIsClassInitialized(clazz) && in findClassNoInit()
1630 !(clazz->status == CLASS_VERIFYING)) in findClassNoInit()
1632 LOGV("+++ explicitly initializing %s\n", clazz->descriptor); in findClassNoInit()
1633 dvmInitClass(clazz); in findClassNoInit()
1639 assert(clazz != NULL || dvmCheckException(self)); in findClassNoInit()
1640 return clazz; in findClassNoInit()
1916 void dvmFreeClassInnards(ClassObject* clazz) in dvmFreeClassInnards() argument
1921 if (clazz == NULL) in dvmFreeClassInnards()
1924 assert(clazz->obj.clazz == gDvm.classJavaLangClass); in dvmFreeClassInnards()
1950 dvmLinearFree(clazz->classLoader, tp); \ in dvmFreeClassInnards()
1956 clazz->vtableCount = -1; in dvmFreeClassInnards()
1957 if (clazz->vtable == gDvm.classJavaLangObject->vtable) { in dvmFreeClassInnards()
1958 clazz->vtable = NULL; in dvmFreeClassInnards()
1960 NULL_AND_LINEAR_FREE(clazz->vtable); in dvmFreeClassInnards()
1963 clazz->descriptor = NULL; in dvmFreeClassInnards()
1964 NULL_AND_FREE(clazz->descriptorAlloc); in dvmFreeClassInnards()
1966 if (clazz->directMethods != NULL) { in dvmFreeClassInnards()
1967 Method *directMethods = clazz->directMethods; in dvmFreeClassInnards()
1968 int directMethodCount = clazz->directMethodCount; in dvmFreeClassInnards()
1969 clazz->directMethods = NULL; in dvmFreeClassInnards()
1970 clazz->directMethodCount = -1; in dvmFreeClassInnards()
1971 dvmLinearReadWrite(clazz->classLoader, directMethods); in dvmFreeClassInnards()
1975 dvmLinearReadOnly(clazz->classLoader, directMethods); in dvmFreeClassInnards()
1976 dvmLinearFree(clazz->classLoader, directMethods); in dvmFreeClassInnards()
1978 if (clazz->virtualMethods != NULL) { in dvmFreeClassInnards()
1979 Method *virtualMethods = clazz->virtualMethods; in dvmFreeClassInnards()
1980 int virtualMethodCount = clazz->virtualMethodCount; in dvmFreeClassInnards()
1981 clazz->virtualMethodCount = -1; in dvmFreeClassInnards()
1982 clazz->virtualMethods = NULL; in dvmFreeClassInnards()
1983 dvmLinearReadWrite(clazz->classLoader, virtualMethods); in dvmFreeClassInnards()
1987 dvmLinearReadOnly(clazz->classLoader, virtualMethods); in dvmFreeClassInnards()
1988 dvmLinearFree(clazz->classLoader, virtualMethods); in dvmFreeClassInnards()
1991 InitiatingLoaderList *loaderList = dvmGetInitiatingLoaderList(clazz); in dvmFreeClassInnards()
1995 clazz->interfaceCount = -1; in dvmFreeClassInnards()
1996 NULL_AND_LINEAR_FREE(clazz->interfaces); in dvmFreeClassInnards()
1998 clazz->iftableCount = -1; in dvmFreeClassInnards()
1999 NULL_AND_LINEAR_FREE(clazz->iftable); in dvmFreeClassInnards()
2001 clazz->ifviPoolCount = -1; in dvmFreeClassInnards()
2002 NULL_AND_LINEAR_FREE(clazz->ifviPool); in dvmFreeClassInnards()
2004 clazz->sfieldCount = -1; in dvmFreeClassInnards()
2008 clazz->ifieldCount = -1; in dvmFreeClassInnards()
2009 NULL_AND_LINEAR_FREE(clazz->ifields); in dvmFreeClassInnards()
2043 dvmLinearFree(meth->clazz->classLoader, methodDexCode); in freeMethodInnards()
2055 LOGE(" cloning %s.%s\n", src->clazz->descriptor, src->name); in cloneMethod()
2067 static void loadMethodFromDex(ClassObject* clazz, const DexMethod* pDexMethod, in loadMethodFromDex() argument
2070 DexFile* pDexFile = clazz->pDvmDex->pDexFile; in loadMethodFromDex()
2080 meth->clazz = clazz; in loadMethodFromDex()
2084 SET_CLASS_FLAG(clazz, CLASS_ISFINALIZABLE); in loadMethodFromDex()
2138 dvmLinearReadWrite(meth->clazz->classLoader, methodDexCode);
2146 meth->clazz->descriptor, meth->name, dexCodeSize);
2149 (DexCode*) dvmLinearAlloc(meth->clazz->classLoader, dexCodeSize);
2166 dvmLinearReadOnly(meth->clazz->classLoader, methodDexCode);
2241 static void loadSFieldFromDex(ClassObject* clazz, in loadSFieldFromDex() argument
2244 DexFile* pDexFile = clazz->pDvmDex->pDexFile; in loadSFieldFromDex()
2249 sfield->field.clazz = clazz; in loadSFieldFromDex()
2269 static void loadIFieldFromDex(ClassObject* clazz, in loadIFieldFromDex() argument
2272 DexFile* pDexFile = clazz->pDvmDex->pDexFile; in loadIFieldFromDex()
2277 ifield->field.clazz = clazz; in loadIFieldFromDex()
2294 static bool precacheReferenceOffsets(ClassObject* clazz) in precacheReferenceOffsets() argument
2307 dvmLinearReadWrite(clazz->classLoader, clazz->ifields); in precacheReferenceOffsets()
2308 for (i = 0; i < clazz->ifieldRefCount; i++) { in precacheReferenceOffsets()
2309 InstField *pField = &clazz->ifields[i]; in precacheReferenceOffsets()
2315 targetIndex = clazz->ifieldRefCount - 1; in precacheReferenceOffsets()
2317 InstField *swapField = &clazz->ifields[targetIndex]; in precacheReferenceOffsets()
2336 clazz->ifieldRefCount--; in precacheReferenceOffsets()
2341 dvmLinearReadOnly(clazz->classLoader, clazz->ifields); in precacheReferenceOffsets()
2342 if (i == clazz->ifieldRefCount) { in precacheReferenceOffsets()
2343 LOGE("Unable to reorder 'referent' in %s\n", clazz->descriptor); in precacheReferenceOffsets()
2351 gDvm.classJavaLangRefReference = clazz; in precacheReferenceOffsets()
2374 meth = dvmFindDirectMethodByDescriptor(clazz, "enqueueInternal", "()Z"); in precacheReferenceOffsets()
2386 static void computeRefOffsets(ClassObject* clazz) in computeRefOffsets() argument
2388 if (clazz->super != NULL) { in computeRefOffsets()
2389 clazz->refOffsets = clazz->super->refOffsets; in computeRefOffsets()
2391 clazz->refOffsets = 0; in computeRefOffsets()
2396 if (clazz->refOffsets != CLASS_WALK_SUPER) { in computeRefOffsets()
2403 f = clazz->ifields; in computeRefOffsets()
2404 const int ifieldRefCount = clazz->ifieldRefCount; in computeRefOffsets()
2416 clazz->refOffsets |= newBit; in computeRefOffsets()
2418 clazz->refOffsets = CLASS_WALK_SUPER; in computeRefOffsets()
2441 bool dvmLinkClass(ClassObject* clazz) in dvmLinkClass() argument
2448 assert(clazz != NULL); in dvmLinkClass()
2449 assert(clazz->descriptor != NULL); in dvmLinkClass()
2450 assert(clazz->status == CLASS_IDX || clazz->status == CLASS_LOADED); in dvmLinkClass()
2452 LOGV("CLASS: linking '%s'...\n", clazz->descriptor); in dvmLinkClass()
2455 assert(clazz->obj.clazz == gDvm.classJavaLangClass); in dvmLinkClass()
2456 if (clazz->classLoader == NULL && in dvmLinkClass()
2457 (strcmp(clazz->descriptor, "Ljava/lang/Class;") == 0)) in dvmLinkClass()
2478 if (clazz->status == CLASS_IDX) { in dvmLinkClass()
2479 if (clazz->interfaceCount > 0) { in dvmLinkClass()
2483 assert(sizeof(*interfaceIdxArray) == sizeof(*clazz->interfaces)); in dvmLinkClass()
2484 size_t len = clazz->interfaceCount * sizeof(*interfaceIdxArray); in dvmLinkClass()
2487 LOGW("Unable to allocate memory to link %s", clazz->descriptor); in dvmLinkClass()
2490 memcpy(interfaceIdxArray, clazz->interfaces, len); in dvmLinkClass()
2492 dvmLinearReadWrite(clazz->classLoader, clazz->interfaces); in dvmLinkClass()
2493 memset(clazz->interfaces, 0, len); in dvmLinkClass()
2494 dvmLinearReadOnly(clazz->classLoader, clazz->interfaces); in dvmLinkClass()
2497 assert(sizeof(superclassIdx) == sizeof(clazz->super)); in dvmLinkClass()
2498 superclassIdx = (u4) clazz->super; in dvmLinkClass()
2499 clazz->super = NULL; in dvmLinkClass()
2503 clazz->status = CLASS_LOADED; in dvmLinkClass()
2506 ClassObject* super = dvmResolveClass(clazz, superclassIdx, false); in dvmLinkClass()
2512 clazz->descriptor, superclassIdx); in dvmLinkClass()
2515 clazz->descriptor, superclassIdx); in dvmLinkClass()
2519 dvmSetFieldObject((Object *)clazz, in dvmLinkClass()
2524 if (clazz->interfaceCount > 0) { in dvmLinkClass()
2527 dvmLinearReadWrite(clazz->classLoader, clazz->interfaces); in dvmLinkClass()
2528 for (i = 0; i < clazz->interfaceCount; i++) { in dvmLinkClass()
2530 clazz->interfaces[i] = in dvmLinkClass()
2531 dvmResolveClass(clazz, interfaceIdxArray[i], false); in dvmLinkClass()
2532 if (clazz->interfaces[i] == NULL) { in dvmLinkClass()
2533 const DexFile* pDexFile = clazz->pDvmDex->pDexFile; in dvmLinkClass()
2536 dvmLinearReadOnly(clazz->classLoader, clazz->interfaces); in dvmLinkClass()
2544 clazz->descriptor, interfaceIdxArray[i], in dvmLinkClass()
2548 clazz->descriptor, interfaceIdxArray[i], in dvmLinkClass()
2555 if (!dvmCheckClassAccess(clazz, clazz->interfaces[i])) { in dvmLinkClass()
2556 dvmLinearReadOnly(clazz->classLoader, clazz->interfaces); in dvmLinkClass()
2558 clazz->interfaces[i]->descriptor, clazz->descriptor); in dvmLinkClass()
2564 clazz->interfaces[i]->descriptor); in dvmLinkClass()
2566 dvmLinearReadOnly(clazz->classLoader, clazz->interfaces); in dvmLinkClass()
2579 assert(clazz->primitiveType == PRIM_NOT); in dvmLinkClass()
2580 if (strcmp(clazz->descriptor, "Ljava/lang/Object;") == 0) { in dvmLinkClass()
2581 if (clazz->super != NULL) { in dvmLinkClass()
2593 CLEAR_CLASS_FLAG(clazz, CLASS_ISFINALIZABLE); in dvmLinkClass()
2595 if (clazz->super == NULL) { in dvmLinkClass()
2601 if (dvmIsFinalClass(clazz->super)) { in dvmLinkClass()
2603 clazz->descriptor, clazz->super->descriptor); in dvmLinkClass()
2607 } else if (dvmIsInterfaceClass(clazz->super)) { in dvmLinkClass()
2609 clazz->descriptor, clazz->super->descriptor); in dvmLinkClass()
2613 } else if (!dvmCheckClassAccess(clazz, clazz->super)) { in dvmLinkClass()
2615 clazz->descriptor, clazz->super->descriptor); in dvmLinkClass()
2625 if (IS_CLASS_FLAG_SET(clazz->super, CLASS_ISFINALIZABLE)) { in dvmLinkClass()
2626 SET_CLASS_FLAG(clazz, CLASS_ISFINALIZABLE); in dvmLinkClass()
2632 if (IS_CLASS_FLAG_SET(clazz->super, CLASS_ISREFERENCE)) { in dvmLinkClass()
2638 superRefFlags = GET_CLASS_FLAG_GROUP(clazz->super, in dvmLinkClass()
2642 SET_CLASS_FLAG(clazz, superRefFlags); in dvmLinkClass()
2643 } else if (clazz->classLoader == NULL && in dvmLinkClass()
2644 clazz->super->classLoader == NULL && in dvmLinkClass()
2645 strcmp(clazz->super->descriptor, in dvmLinkClass()
2654 if (strcmp(clazz->descriptor, in dvmLinkClass()
2659 } else if (strcmp(clazz->descriptor, in dvmLinkClass()
2663 } else if (strcmp(clazz->descriptor, in dvmLinkClass()
2679 assert(GET_CLASS_FLAG_GROUP(clazz, in dvmLinkClass()
2684 SET_CLASS_FLAG(clazz, refFlags); in dvmLinkClass()
2691 if (dvmIsInterfaceClass(clazz)) { in dvmLinkClass()
2693 int count = clazz->virtualMethodCount; in dvmLinkClass()
2697 clazz->descriptor); in dvmLinkClass()
2701 dvmLinearReadWrite(clazz->classLoader, clazz->virtualMethods); in dvmLinkClass()
2704 clazz->virtualMethods[i].methodIndex = (u2) i; in dvmLinkClass()
2706 dvmLinearReadOnly(clazz->classLoader, clazz->virtualMethods); in dvmLinkClass()
2708 if (!createVtable(clazz)) { in dvmLinkClass()
2717 if (!createIftable(clazz)) in dvmLinkClass()
2723 if (!insertMethodStubs(clazz)) in dvmLinkClass()
2729 if (!computeFieldOffsets(clazz)) in dvmLinkClass()
2736 if (clazz->classLoader == NULL) { in dvmLinkClass()
2737 if (strcmp(clazz->descriptor, "Ljava/lang/ref/Reference;") == 0) { in dvmLinkClass()
2738 if (!precacheReferenceOffsets(clazz)) { in dvmLinkClass()
2743 } else if (clazz == gDvm.classJavaLangClass) { in dvmLinkClass()
2744 gDvm.offJavaLangClass_pd = dvmFindFieldOffset(clazz, "pd", in dvmLinkClass()
2758 computeRefOffsets(clazz); in dvmLinkClass()
2763 if (IS_CLASS_FLAG_SET(clazz, CLASS_ISPREVERIFIED)) in dvmLinkClass()
2764 clazz->status = CLASS_VERIFIED; in dvmLinkClass()
2766 clazz->status = CLASS_RESOLVED; in dvmLinkClass()
2769 LOGV("CLASS: linked '%s'\n", clazz->descriptor); in dvmLinkClass()
2783 dvmDbgPostClassPrepare(clazz); in dvmLinkClass()
2788 clazz->status = CLASS_ERROR; in dvmLinkClass()
2806 static bool createVtable(ClassObject* clazz) in createVtable() argument
2812 if (clazz->super != NULL) { in createVtable()
2818 maxCount = clazz->virtualMethodCount; in createVtable()
2819 if (clazz->super != NULL) { in createVtable()
2820 maxCount += clazz->super->vtableCount; in createVtable()
2825 assert(strcmp(clazz->descriptor, "Ljava/lang/Object;") == 0); in createVtable()
2835 dvmLinearReadWrite(clazz->classLoader, clazz->virtualMethods); in createVtable()
2836 clazz->vtable = (Method**) dvmLinearAlloc(clazz->classLoader, in createVtable()
2838 if (clazz->vtable == NULL) in createVtable()
2841 if (clazz->super != NULL) { in createVtable()
2844 memcpy(clazz->vtable, clazz->super->vtable, in createVtable()
2845 sizeof(*(clazz->vtable)) * clazz->super->vtableCount); in createVtable()
2846 actualCount = clazz->super->vtableCount; in createVtable()
2851 for (i = 0; i < clazz->virtualMethodCount; i++) { in createVtable()
2852 Method* localMeth = &clazz->virtualMethods[i]; in createVtable()
2855 for (si = 0; si < clazz->super->vtableCount; si++) { in createVtable()
2856 Method* superMeth = clazz->vtable[si]; in createVtable()
2863 localMeth->clazz->descriptor, localMeth->name, in createVtable()
2864 superMeth->clazz->descriptor, superMeth->name); in createVtable()
2867 clazz->vtable[si] = localMeth; in createVtable()
2875 if (si == clazz->super->vtableCount) { in createVtable()
2877 clazz->vtable[actualCount] = localMeth; in createVtable()
2888 clazz->descriptor); in createVtable()
2895 assert(clazz->vtable != NULL); in createVtable()
2896 dvmLinearReadOnly(clazz->classLoader, clazz->vtable); in createVtable()
2897 clazz->vtable = dvmLinearRealloc(clazz->classLoader, clazz->vtable, in createVtable()
2898 sizeof(*(clazz->vtable)) * actualCount); in createVtable()
2899 if (clazz->vtable == NULL) { in createVtable()
2908 clazz->vtableCount = actualCount; in createVtable()
2911 int count = clazz->virtualMethodCount; in createVtable()
2914 clazz->descriptor); in createVtable()
2919 clazz->vtable[i] = &clazz->virtualMethods[i]; in createVtable()
2920 clazz->virtualMethods[i].methodIndex = (u2) i; in createVtable()
2922 clazz->vtableCount = clazz->virtualMethodCount; in createVtable()
2928 dvmLinearReadOnly(clazz->classLoader, clazz->vtable); in createVtable()
2929 dvmLinearReadOnly(clazz->classLoader, clazz->virtualMethods); in createVtable()
2950 static bool createIftable(ClassObject* clazz) in createIftable() argument
2959 if (clazz->super != NULL) in createIftable()
2960 superIfCount = clazz->super->iftableCount; in createIftable()
2965 ifCount += clazz->interfaceCount; in createIftable()
2966 for (i = 0; i < clazz->interfaceCount; i++) in createIftable()
2967 ifCount += clazz->interfaces[i]->iftableCount; in createIftable()
2970 clazz->descriptor, ifCount - superIfCount, superIfCount, ifCount); in createIftable()
2973 assert(clazz->iftableCount == 0); in createIftable()
2974 assert(clazz->iftable == NULL); in createIftable()
2983 clazz->iftable = (InterfaceEntry*) dvmLinearAlloc(clazz->classLoader, in createIftable()
2986 memset(clazz->iftable, 0x00, sizeof(InterfaceEntry) * ifCount); in createIftable()
2988 memcpy(clazz->iftable, clazz->super->iftable, in createIftable()
2997 for (i = 0; i < clazz->interfaceCount; i++) { in createIftable()
3001 interf = clazz->interfaces[i]; in createIftable()
3007 clazz->descriptor, interf->descriptor); in createIftable()
3010 clazz->descriptor); in createIftable()
3015 clazz->iftable[idx++].clazz = interf; in createIftable()
3019 clazz->iftable[idx++].clazz = interf->iftable[j].clazz; in createIftable()
3051 if (clazz->iftable[i].clazz == clazz->iftable[j].clazz) { in createIftable()
3053 clazz->iftable[i].clazz->descriptor, in createIftable()
3054 clazz->descriptor); in createIftable()
3057 memmove(&clazz->iftable[i], &clazz->iftable[i+1], in createIftable()
3065 LOGVV("INTF: class '%s' nodupes=%d\n", clazz->descriptor, ifCount); in createIftable()
3068 clazz->iftableCount = ifCount; in createIftable()
3075 if (dvmIsInterfaceClass(clazz) || superIfCount == ifCount) { in createIftable()
3105 clazz->iftable[i].clazz->virtualMethodCount, in createIftable()
3106 clazz->iftable[i].clazz->descriptor); in createIftable()
3107 poolSize += clazz->iftable[i].clazz->virtualMethodCount; in createIftable()
3116 clazz->ifviPoolCount = poolSize; in createIftable()
3117 clazz->ifviPool = (int*) dvmLinearAlloc(clazz->classLoader, in createIftable()
3133 clazz->iftable[i].methodIndexArray = clazz->ifviPool + poolOffset; in createIftable()
3134 interface = clazz->iftable[i].clazz; in createIftable()
3177 for (j = clazz->vtableCount-1; j >= 0; j--) { in createIftable()
3178 if (dvmCompareMethodNamesAndProtos(imeth, clazz->vtable[j]) in createIftable()
3182 if (!dvmIsPublicMethod(clazz->vtable[j])) { in createIftable()
3184 clazz->descriptor, clazz->vtable[j]->name); in createIftable()
3189 clazz->iftable[i].methodIndexArray[methIdx] = j; in createIftable()
3198 imeth->name, desc, clazz->descriptor); in createIftable()
3207 mirandaList = dvmLinearAlloc(clazz->classLoader, in createIftable()
3210 dvmLinearReadOnly(clazz->classLoader, mirandaList); in createIftable()
3211 mirandaList = dvmLinearRealloc(clazz->classLoader, in createIftable()
3232 mirandaList[mir]->clazz->descriptor, in createIftable()
3233 imeth->clazz->descriptor, in createIftable()
3242 clazz->iftable[i].methodIndexArray[methIdx] = in createIftable()
3243 clazz->vtableCount + mir; in createIftable()
3245 imeth->name, clazz->vtableCount + mir); in createIftable()
3265 mirandaList[i]->clazz->descriptor, mirandaList[i]->name); in createIftable()
3276 clazz->descriptor, mirandaCount); in createIftable()
3284 if (clazz->virtualMethods == NULL) { in createIftable()
3285 newVirtualMethods = (Method*) dvmLinearAlloc(clazz->classLoader, in createIftable()
3286 sizeof(Method) * (clazz->virtualMethodCount + mirandaCount)); in createIftable()
3289 newVirtualMethods = (Method*) dvmLinearRealloc(clazz->classLoader, in createIftable()
3290 clazz->virtualMethods, in createIftable()
3291 sizeof(Method) * (clazz->virtualMethodCount + mirandaCount)); in createIftable()
3293 if (newVirtualMethods != clazz->virtualMethods) { in createIftable()
3311 dvmLinearReadWrite(clazz->classLoader, clazz->vtable); in createIftable()
3313 for (i = 0; i < clazz->virtualMethodCount; i++, meth++) in createIftable()
3314 clazz->vtable[meth->methodIndex] = meth; in createIftable()
3315 dvmLinearReadOnly(clazz->classLoader, clazz->vtable); in createIftable()
3318 oldMethodCount = clazz->virtualMethodCount; in createIftable()
3319 clazz->virtualMethods = newVirtualMethods; in createIftable()
3320 clazz->virtualMethodCount += mirandaCount; in createIftable()
3322 dvmLinearReadOnly(clazz->classLoader, clazz->virtualMethods); in createIftable()
3327 assert(clazz->vtable != NULL); in createIftable()
3328 clazz->vtable = (Method**) dvmLinearRealloc(clazz->classLoader, in createIftable()
3329 clazz->vtable, in createIftable()
3330 sizeof(Method*) * (clazz->vtableCount + mirandaCount)); in createIftable()
3331 if (clazz->vtable == NULL) { in createIftable()
3337 oldVtableCount = clazz->vtableCount; in createIftable()
3338 clazz->vtableCount += mirandaCount; in createIftable()
3348 meth = clazz->virtualMethods + oldMethodCount; in createIftable()
3350 dvmLinearReadWrite(clazz->classLoader, clazz->virtualMethods); in createIftable()
3352 meth->clazz = clazz; in createIftable()
3355 dvmLinearReadOnly(clazz->classLoader, clazz->virtualMethods); in createIftable()
3358 clazz->vtable[oldVtableCount + i] = meth; in createIftable()
3361 dvmLinearReadOnly(clazz->classLoader, mirandaList); in createIftable()
3362 dvmLinearFree(clazz->classLoader, mirandaList); in createIftable()
3399 dvmLinearReadOnly(clazz->classLoader, clazz->iftable); in createIftable()
3401 dvmLinearReadOnly(clazz->classLoader, clazz->vtable); in createIftable()
3403 dvmLinearReadOnly(clazz->classLoader, clazz->ifviPool); in createIftable()
3424 static bool insertMethodStubs(ClassObject* clazz) in insertMethodStubs() argument
3426 dvmLinearReadWrite(clazz->classLoader, clazz->virtualMethods); in insertMethodStubs()
3431 meth = clazz->virtualMethods; in insertMethodStubs()
3432 for (i = 0; i < clazz->virtualMethodCount; i++, meth++) { in insertMethodStubs()
3443 dvmLinearReadOnly(clazz->classLoader, clazz->virtualMethods); in insertMethodStubs()
3492 static bool computeFieldOffsets(ClassObject* clazz) in computeFieldOffsets() argument
3497 dvmLinearReadWrite(clazz->classLoader, clazz->ifields); in computeFieldOffsets()
3499 if (clazz->super != NULL) in computeFieldOffsets()
3500 fieldOffset = clazz->super->objectSize; in computeFieldOffsets()
3504 LOGVV("--- computeFieldOffsets '%s'\n", clazz->descriptor); in computeFieldOffsets()
3514 clazz->ifieldRefCount = 0; in computeFieldOffsets()
3515 j = clazz->ifieldCount - 1; in computeFieldOffsets()
3516 for (i = 0; i < clazz->ifieldCount; i++) { in computeFieldOffsets()
3517 InstField* pField = &clazz->ifields[i]; in computeFieldOffsets()
3526 InstField* refField = &clazz->ifields[j--]; in computeFieldOffsets()
3541 clazz->ifieldRefCount++; in computeFieldOffsets()
3550 clazz->ifieldRefCount++; in computeFieldOffsets()
3569 if (i != clazz->ifieldCount && (fieldOffset & 0x04) != 0) { in computeFieldOffsets()
3572 InstField* pField = &clazz->ifields[i]; in computeFieldOffsets()
3591 j = clazz->ifieldCount - 1; in computeFieldOffsets()
3593 InstField* singleField = &clazz->ifields[j--]; in computeFieldOffsets()
3611 LOGV(" +++ inserting pad field in '%s'\n", clazz->descriptor); in computeFieldOffsets()
3621 assert(i == clazz->ifieldCount || (fieldOffset & 0x04) == 0); in computeFieldOffsets()
3622 j = clazz->ifieldCount - 1; in computeFieldOffsets()
3623 for ( ; i < clazz->ifieldCount; i++) { in computeFieldOffsets()
3624 InstField* pField = &clazz->ifields[i]; in computeFieldOffsets()
3633 InstField* doubleField = &clazz->ifields[j--]; in computeFieldOffsets()
3667 for (i = 0; i < clazz->ifieldCount; i++) { in computeFieldOffsets()
3668 InstField *pField = &clazz->ifields[i]; in computeFieldOffsets()
3677 assert(i == clazz->ifieldRefCount); in computeFieldOffsets()
3685 assert(clazz->ifieldRefCount == clazz->ifieldCount); in computeFieldOffsets()
3693 assert(clazz != gDvm.classJavaLangClass || (size_t)fieldOffset < in computeFieldOffsets()
3694 offsetof(ClassObject, instanceData) + sizeof(clazz->instanceData)); in computeFieldOffsets()
3696 clazz->objectSize = fieldOffset; in computeFieldOffsets()
3698 dvmLinearReadOnly(clazz->classLoader, clazz->ifields); in computeFieldOffsets()
3771 static void throwEarlierClassFailure(ClassObject* clazz) in throwEarlierClassFailure() argument
3774 clazz->descriptor, clazz->verifyErrorClass); in throwEarlierClassFailure()
3776 if (clazz->verifyErrorClass == NULL) { in throwEarlierClassFailure()
3778 clazz->descriptor); in throwEarlierClassFailure()
3780 dvmThrowExceptionByClassWithClassMessage(clazz->verifyErrorClass, in throwEarlierClassFailure()
3781 clazz->descriptor); in throwEarlierClassFailure()
3789 static void initSFields(ClassObject* clazz) in initSFields() argument
3798 if (clazz->sfieldCount == 0) { in initSFields()
3801 if (clazz->pDvmDex == NULL) { in initSFields()
3803 LOGV("Not initializing static fields in %s\n", clazz->descriptor); in initSFields()
3806 pDexFile = clazz->pDvmDex->pDexFile; in initSFields()
3808 pClassDef = dexFindClass(pDexFile, clazz->descriptor); in initSFields()
3816 dvmEncodedArrayIteratorInitialize(&iterator, pValueList, clazz); in initSFields()
3826 StaticField* sfield = &clazz->sfields[i]; in initSFields()
3837 clazz->descriptor, i); in initSFields()
3906 value.type, descriptor, clazz->descriptor, i); in initSFields()
4066 static bool validateSuperDescriptors(const ClassObject* clazz) in validateSuperDescriptors() argument
4070 if (dvmIsInterfaceClass(clazz)) in validateSuperDescriptors()
4076 if (clazz->super != NULL && in validateSuperDescriptors()
4077 clazz->classLoader != clazz->super->classLoader) in validateSuperDescriptors()
4098 for (i = clazz->super->vtableCount - 1; i >= 0; i--) { in validateSuperDescriptors()
4099 meth = clazz->vtable[i]; in validateSuperDescriptors()
4100 if (meth != clazz->super->vtable[i] && in validateSuperDescriptors()
4101 !checkMethodDescriptorClasses(meth, clazz->super, clazz)) in validateSuperDescriptors()
4104 meth->name, clazz->descriptor, clazz->classLoader, in validateSuperDescriptors()
4105 clazz->super->descriptor, clazz->super->classLoader); in validateSuperDescriptors()
4121 for (i = 0; i < clazz->iftableCount; i++) { in validateSuperDescriptors()
4122 const InterfaceEntry* iftable = &clazz->iftable[i]; in validateSuperDescriptors()
4124 if (clazz->classLoader != iftable->clazz->classLoader) { in validateSuperDescriptors()
4125 const ClassObject* iface = iftable->clazz; in validateSuperDescriptors()
4133 meth = clazz->vtable[vtableIndex]; in validateSuperDescriptors()
4135 if (!checkMethodDescriptorClasses(meth, iface, meth->clazz)) { in validateSuperDescriptors()
4138 meth->name, clazz->descriptor, clazz->classLoader, in validateSuperDescriptors()
4158 bool dvmIsClassInitializing(const ClassObject* clazz) in dvmIsClassInitializing() argument
4160 return (clazz->status == CLASS_INITIALIZING && in dvmIsClassInitializing()
4161 clazz->initThreadId == dvmThreadSelf()->threadId); in dvmIsClassInitializing()
4228 bool dvmInitClass(ClassObject* clazz) in dvmInitClass() argument
4237 dvmLockObject(self, (Object*) clazz); in dvmInitClass()
4238 assert(dvmIsClassLinked(clazz) || clazz->status == CLASS_ERROR); in dvmInitClass()
4243 if (clazz->status < CLASS_VERIFIED) { in dvmInitClass()
4247 if (clazz->status == CLASS_ERROR) { in dvmInitClass()
4248 throwEarlierClassFailure(clazz); in dvmInitClass()
4252 assert(clazz->status == CLASS_RESOLVED); in dvmInitClass()
4253 assert(!IS_CLASS_FLAG_SET(clazz, CLASS_ISPREVERIFIED)); in dvmInitClass()
4257 clazz->classLoader == NULL)) in dvmInitClass()
4261 clazz->descriptor, clazz->classLoader); in dvmInitClass()
4262 clazz->status = CLASS_VERIFIED; in dvmInitClass()
4267 LOGV("+++ late verify on %s\n", clazz->descriptor); in dvmInitClass()
4274 if (IS_CLASS_FLAG_SET(clazz, CLASS_ISOPTIMIZED)) { in dvmInitClass()
4277 clazz->descriptor); in dvmInitClass()
4282 clazz->status = CLASS_VERIFYING; in dvmInitClass()
4283 if (!dvmVerifyClass(clazz)) { in dvmInitClass()
4286 clazz->descriptor); in dvmInitClass()
4287 dvmSetFieldObject((Object*) clazz, in dvmInitClass()
4289 (Object*) dvmGetException(self)->clazz); in dvmInitClass()
4290 clazz->status = CLASS_ERROR; in dvmInitClass()
4294 clazz->status = CLASS_VERIFIED; in dvmInitClass()
4303 if (!IS_CLASS_FLAG_SET(clazz, CLASS_ISOPTIMIZED)) { in dvmInitClass()
4305 clazz->descriptor, IS_CLASS_FLAG_SET(clazz, CLASS_ISPREVERIFIED)); in dvmInitClass()
4306 dvmOptimizeClass(clazz, true); in dvmInitClass()
4307 SET_CLASS_FLAG(clazz, CLASS_ISOPTIMIZED); in dvmInitClass()
4311 dvmFlushBreakpoints(clazz); in dvmInitClass()
4313 if (clazz->status == CLASS_INITIALIZED) in dvmInitClass()
4316 while (clazz->status == CLASS_INITIALIZING) { in dvmInitClass()
4318 if (clazz->initThreadId == self->threadId) { in dvmInitClass()
4333 dvmObjectWait(self, (Object*) clazz, 0, 0, false); in dvmInitClass()
4342 clazz->descriptor); in dvmInitClass()
4357 clazz->status = CLASS_ERROR; in dvmInitClass()
4360 if (clazz->status == CLASS_INITIALIZING) { in dvmInitClass()
4364 assert(clazz->status == CLASS_INITIALIZED || in dvmInitClass()
4365 clazz->status == CLASS_ERROR); in dvmInitClass()
4366 if (clazz->status == CLASS_ERROR) { in dvmInitClass()
4378 if (clazz->status == CLASS_ERROR) { in dvmInitClass()
4381 dvmUnlockObject(self, (Object*) clazz); in dvmInitClass()
4382 throwEarlierClassFailure(clazz); in dvmInitClass()
4406 if (!validateSuperDescriptors(clazz)) { in dvmInitClass()
4408 clazz->status = CLASS_ERROR; in dvmInitClass()
4419 assert(clazz->status < CLASS_INITIALIZING); in dvmInitClass()
4423 logClassLoad('+', clazz); in dvmInitClass()
4427 clazz->status = CLASS_INITIALIZING; in dvmInitClass()
4428 clazz->initThreadId = self->threadId; in dvmInitClass()
4429 dvmUnlockObject(self, (Object*) clazz); in dvmInitClass()
4432 if (clazz->super != NULL && clazz->super->status != CLASS_INITIALIZED) { in dvmInitClass()
4433 assert(!dvmIsInterfaceClass(clazz)); in dvmInitClass()
4434 if (!dvmInitClass(clazz->super)) { in dvmInitClass()
4436 clazz->status = CLASS_ERROR; in dvmInitClass()
4438 dvmLockObject(self, (Object*) clazz); in dvmInitClass()
4451 initSFields(clazz); in dvmInitClass()
4455 method = dvmFindDirectMethodByDescriptor(clazz, "<clinit>", "()V"); in dvmInitClass()
4457 LOGVV("No <clinit> found for %s\n", clazz->descriptor); in dvmInitClass()
4459 LOGVV("Invoking %s.<clinit>\n", clazz->descriptor); in dvmInitClass()
4471 (dvmGetException(self)->clazz)->descriptor, clazz->descriptor); in dvmInitClass()
4475 dvmLockObject(self, (Object*) clazz); in dvmInitClass()
4476 clazz->status = CLASS_ERROR; in dvmInitClass()
4479 dvmLockObject(self, (Object*) clazz); in dvmInitClass()
4480 clazz->status = CLASS_INITIALIZED; in dvmInitClass()
4481 LOGVV("Initialized class: %s\n", clazz->descriptor); in dvmInitClass()
4499 dvmObjectNotifyAll(self, (Object*) clazz); in dvmInitClass()
4506 logClassLoad('-', clazz); in dvmInitClass()
4510 dvmUnlockObject(self, (Object*) clazz); in dvmInitClass()
4512 return (clazz->status != CLASS_ERROR); in dvmInitClass()
4541 ClassObject* clazz = method->clazz; in dvmSetNativeFunc() local
4546 dvmLinearReadWrite(clazz->classLoader, clazz->virtualMethods); in dvmSetNativeFunc()
4547 dvmLinearReadWrite(clazz->classLoader, clazz->directMethods); in dvmSetNativeFunc()
4559 dvmLinearReadOnly(clazz->classLoader, clazz->virtualMethods); in dvmSetNativeFunc()
4560 dvmLinearReadOnly(clazz->classLoader, clazz->directMethods); in dvmSetNativeFunc()
4571 ClassObject* clazz = method->clazz; in dvmSetRegisterMap() local
4576 method->clazz->descriptor, method->name); in dvmSetRegisterMap()
4582 dvmLinearReadWrite(clazz->classLoader, clazz->virtualMethods); in dvmSetRegisterMap()
4583 dvmLinearReadWrite(clazz->classLoader, clazz->directMethods); in dvmSetRegisterMap()
4587 dvmLinearReadOnly(clazz->classLoader, clazz->virtualMethods); in dvmSetRegisterMap()
4588 dvmLinearReadOnly(clazz->classLoader, clazz->directMethods); in dvmSetRegisterMap()
4597 ClassObject* clazz = vclazz; in findClassCallback() local
4600 if (strcmp(clazz->descriptor, descriptor) == 0) in findClassCallback()
4601 return (int) clazz; in findClassCallback()
4632 ClassObject* clazz; in dvmGetSystemClassLoader() local
4636 clazz = dvmFindSystemClass("Ljava/lang/ClassLoader;"); in dvmGetSystemClassLoader()
4637 if (clazz == NULL) in dvmGetSystemClassLoader()
4640 getSysMeth = dvmFindDirectMethodByDescriptor(clazz, "getSystemClassLoader", in dvmGetSystemClassLoader()
4657 const ClassObject* clazz = (const ClassObject*) vclazz; in dumpClass() local
4663 if (clazz == NULL) { in dumpClass()
4673 initStr = dvmIsClassInitialized(clazz) ? "true" : "false"; in dumpClass()
4676 LOGI("%s %p %s\n", clazz->descriptor, clazz->classLoader, initStr); in dumpClass()
4678 LOGI("%s %s\n", clazz->descriptor, initStr); in dumpClass()
4680 LOGI("%s %p\n", clazz->descriptor, clazz->classLoader); in dumpClass()
4682 LOGI("%s\n", clazz->descriptor); in dumpClass()
4688 if ((u4)clazz->super > 0x10000 && (u4) clazz->super != (u4)-1) in dumpClass()
4689 super = clazz->super; in dumpClass()
4694 dvmIsInterfaceClass(clazz) ? "interface" : "class", in dumpClass()
4695 clazz->descriptor, clazz->classLoader, clazz->serialNumber); in dumpClass()
4696 LOGI(" objectSize=%d (%d from super)\n", (int) clazz->objectSize, in dumpClass()
4698 LOGI(" access=0x%04x.%04x\n", clazz->accessFlags >> 16, in dumpClass()
4699 clazz->accessFlags & JAVA_FLAGS_MASK); in dumpClass()
4702 if (dvmIsArrayClass(clazz)) { in dumpClass()
4704 clazz->arrayDim, clazz->elementClass->descriptor); in dumpClass()
4706 if (clazz->iftableCount > 0) { in dumpClass()
4707 LOGI(" interfaces (%d):\n", clazz->iftableCount); in dumpClass()
4708 for (i = 0; i < clazz->iftableCount; i++) { in dumpClass()
4709 InterfaceEntry* ent = &clazz->iftable[i]; in dumpClass()
4713 i, ent->clazz->descriptor, ent->clazz->classLoader); in dumpClass()
4717 for (j = 0; j < ent->clazz->virtualMethodCount; j++) in dumpClass()
4720 ent->clazz->virtualMethods[j].name, in dumpClass()
4721 clazz->vtable[ent->methodIndexArray[j]]->name); in dumpClass()
4725 if (!dvmIsInterfaceClass(clazz)) { in dumpClass()
4726 LOGI(" vtable (%d entries, %d in super):\n", clazz->vtableCount, in dumpClass()
4728 for (i = 0; i < clazz->vtableCount; i++) { in dumpClass()
4729 desc = dexProtoCopyMethodDescriptor(&clazz->vtable[i]->prototype); in dumpClass()
4731 (i != clazz->vtable[i]->methodIndex) ? "*** " : "", in dumpClass()
4732 (u4) clazz->vtable[i]->methodIndex, clazz->vtable[i], in dumpClass()
4733 clazz->vtable[i]->name, desc); in dumpClass()
4736 LOGI(" direct methods (%d entries):\n", clazz->directMethodCount); in dumpClass()
4737 for (i = 0; i < clazz->directMethodCount; i++) { in dumpClass()
4739 &clazz->directMethods[i].prototype); in dumpClass()
4740 LOGI(" %2d: %20s %s\n", i, clazz->directMethods[i].name, in dumpClass()
4745 LOGI(" interface methods (%d):\n", clazz->virtualMethodCount); in dumpClass()
4746 for (i = 0; i < clazz->virtualMethodCount; i++) { in dumpClass()
4748 &clazz->virtualMethods[i].prototype); in dumpClass()
4750 (u4) clazz->virtualMethods[i].methodIndex, in dumpClass()
4751 clazz->virtualMethods[i].name, in dumpClass()
4756 if (clazz->sfieldCount > 0) { in dumpClass()
4757 LOGI(" static fields (%d entries):\n", clazz->sfieldCount); in dumpClass()
4758 for (i = 0; i < clazz->sfieldCount; i++) { in dumpClass()
4759 LOGI(" %2d: %20s %s\n", i, clazz->sfields[i].field.name, in dumpClass()
4760 clazz->sfields[i].field.signature); in dumpClass()
4763 if (clazz->ifieldCount > 0) { in dumpClass()
4764 LOGI(" instance fields (%d entries):\n", clazz->ifieldCount); in dumpClass()
4765 for (i = 0; i < clazz->ifieldCount; i++) { in dumpClass()
4766 LOGI(" %2d: %20s %s\n", i, clazz->ifields[i].field.name, in dumpClass()
4767 clazz->ifields[i].field.signature); in dumpClass()
4778 void dvmDumpClass(const ClassObject* clazz, int flags) in dvmDumpClass() argument
4780 dumpClass((void*) clazz, (void*) flags); in dvmDumpClass()
4826 const ClassObject* clazz = (const ClassObject*) vclazz; in dumpAccessCounts() local
4829 for (i = 0; i < clazz->ifieldCount; i++) { in dumpAccessCounts()
4830 Field* field = &clazz->ifields[i].field; in dumpAccessCounts()
4834 field->clazz->descriptor, field->name); in dumpAccessCounts()
4837 field->clazz->descriptor, field->name); in dumpAccessCounts()
4839 for (i = 0; i < clazz->sfieldCount; i++) { in dumpAccessCounts()
4840 Field* field = &clazz->sfields[i].field; in dumpAccessCounts()
4844 field->clazz->descriptor, field->name); in dumpAccessCounts()
4847 field->clazz->descriptor, field->name); in dumpAccessCounts()
4868 static int markClassObject(void *clazz, void *arg) in markClassObject() argument
4872 dvmMarkObjectNonNull((Object *)clazz); in markClassObject()