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()
295 size_t dvmClassObjectSize(const ClassObject *clazz) in dvmClassObjectSize() argument
297 assert(clazz != NULL); in dvmClassObjectSize()
298 return classObjectSize(clazz->sfieldCount); in dvmClassObjectSize()
374 ClassObject* clazz = (ClassObject*) in createInitialClasses() local
376 if (clazz == NULL) { in createInitialClasses()
379 DVM_OBJECT_INIT(clazz, clazz); in createInitialClasses()
380 SET_CLASS_FLAG(clazz, ACC_PUBLIC | ACC_FINAL | CLASS_ISCLASS); in createInitialClasses()
381 clazz->descriptor = "Ljava/lang/Class;"; in createInitialClasses()
382 gDvm.classJavaLangClass = clazz; in createInitialClasses()
942 static InitiatingLoaderList *dvmGetInitiatingLoaderList(ClassObject* clazz) in dvmGetInitiatingLoaderList() argument
944 assert(clazz->serialNumber >= INITIAL_CLASS_SERIAL_NUMBER); in dvmGetInitiatingLoaderList()
945 int classIndex = clazz->serialNumber-INITIAL_CLASS_SERIAL_NUMBER; in dvmGetInitiatingLoaderList()
950 return &(clazz->initiatingLoaderList); in dvmGetInitiatingLoaderList()
964 bool dvmLoaderInInitiatingList(const ClassObject* clazz, const Object* loader) in dvmLoaderInInitiatingList() argument
978 ClassObject* nonConstClazz = (ClassObject*) clazz; in dvmLoaderInInitiatingList()
1002 void dvmAddInitiatingLoader(ClassObject* clazz, Object* loader) in dvmAddInitiatingLoader() argument
1004 if (loader != clazz->classLoader) { in dvmAddInitiatingLoader()
1007 LOGVV("Adding %p to '%s' init list", loader, clazz->descriptor); in dvmAddInitiatingLoader()
1028 InitiatingLoaderList *loaderList = dvmGetInitiatingLoaderList(clazz); in dvmAddInitiatingLoader()
1070 const ClassObject* clazz = (const ClassObject*) vclazz; in hashcmpClassByCrit() local
1074 match = (strcmp(clazz->descriptor, pCrit->descriptor) == 0 && in hashcmpClassByCrit()
1075 (clazz->classLoader == pCrit->loader || in hashcmpClassByCrit()
1077 dvmLoaderInInitiatingList(clazz, pCrit->loader)) )); in hashcmpClassByCrit()
1091 const ClassObject* clazz = (const ClassObject*) vclazz; in hashcmpClassByClass() local
1095 match = (strcmp(clazz->descriptor, addClazz->descriptor) == 0 && in hashcmpClassByClass()
1096 (clazz->classLoader == addClazz->classLoader || in hashcmpClassByClass()
1098 dvmLoaderInInitiatingList(clazz, addClazz->classLoader)) )); in hashcmpClassByClass()
1169 bool dvmAddClassToHash(ClassObject* clazz) in dvmAddClassToHash() argument
1174 hash = dvmComputeUtf8Hash(clazz->descriptor); in dvmAddClassToHash()
1177 found = dvmHashTableLookup(gDvm.loadedClasses, hash, clazz, in dvmAddClassToHash()
1182 clazz->descriptor, clazz->classLoader, in dvmAddClassToHash()
1183 (found == (void*) clazz), clazz); in dvmAddClassToHash()
1188 return (found == (void*) clazz); in dvmAddClassToHash()
1215 static void removeClassFromHash(ClassObject* clazz) in removeClassFromHash() argument
1217 ALOGV("+++ removeClassFromHash '%s'", clazz->descriptor); in removeClassFromHash()
1219 u4 hash = dvmComputeUtf8Hash(clazz->descriptor); in removeClassFromHash()
1222 if (!dvmHashTableRemove(gDvm.loadedClasses, hash, clazz)) in removeClassFromHash()
1223 ALOGW("Hash table remove failed on class '%s'", clazz->descriptor); in removeClassFromHash()
1240 void dvmSetClassSerialNumber(ClassObject* clazz) in dvmSetClassSerialNumber() argument
1242 assert(clazz->serialNumber == 0); in dvmSetClassSerialNumber()
1243 clazz->serialNumber = android_atomic_inc(&gDvm.classSerialNumber); in dvmSetClassSerialNumber()
1259 ClassObject* clazz; in dvmFindClass() local
1261 clazz = dvmFindClassNoInit(descriptor, loader); in dvmFindClass()
1262 if (clazz != NULL && clazz->status < CLASS_INITIALIZED) { in dvmFindClass()
1264 if (!dvmInitClass(clazz)) { in dvmFindClass()
1267 assert(clazz->status == CLASS_ERROR); in dvmFindClass()
1272 return clazz; in dvmFindClass()
1336 ClassObject* clazz = dvmLookupClass(descriptor, loader, false); in findClassFromLoaderNoInit() local
1337 if (clazz != NULL) { in findClassFromLoaderNoInit()
1339 return clazz; in findClassFromLoaderNoInit()
1370 loader->clazz->vtable[gDvm.voffJavaLangClassLoader_loadClass]; in findClassFromLoaderNoInit()
1373 clazz = (ClassObject*) result.l; in findClassFromLoaderNoInit()
1380 dotName, loader, excep->clazz->descriptor); in findClassFromLoaderNoInit()
1386 clazz = NULL; in findClassFromLoaderNoInit()
1388 } else if (clazz == NULL) { in findClassFromLoaderNoInit()
1397 dvmAddInitiatingLoader(clazz, loader); in findClassFromLoaderNoInit()
1400 descriptor, clazz->classLoader, loader, clazz); in findClassFromLoaderNoInit()
1405 return clazz; in findClassFromLoaderNoInit()
1432 ClassObject* clazz; in dvmFindSystemClass() local
1434 clazz = dvmFindSystemClassNoInit(descriptor); in dvmFindSystemClass()
1435 if (clazz != NULL && clazz->status < CLASS_INITIALIZED) { in dvmFindSystemClass()
1437 if (!dvmInitClass(clazz)) { in dvmFindSystemClass()
1440 assert(clazz->status == CLASS_ERROR); in dvmFindSystemClass()
1445 return clazz; in dvmFindSystemClass()
1477 ClassObject* clazz; in findClassNoInit() local
1505 clazz = dvmLookupClass(descriptor, loader, true); in findClassNoInit()
1506 if (clazz == NULL) { in findClassNoInit()
1535 clazz = loadClassFromDex(pDvmDex, pClassDef, loader); in findClassNoInit()
1538 if (clazz != NULL) { in findClassNoInit()
1539 dvmFreeClassInnards(clazz); in findClassNoInit()
1540 dvmReleaseTrackedAlloc((Object*) clazz, NULL); in findClassNoInit()
1551 dvmLockObject(self, (Object*) clazz); in findClassNoInit()
1552 clazz->initThreadId = self->threadId; in findClassNoInit()
1559 assert(clazz->classLoader == loader); in findClassNoInit()
1560 if (!dvmAddClassToHash(clazz)) { in findClassNoInit()
1569 clazz->initThreadId = 0; in findClassNoInit()
1570 dvmUnlockObject(self, (Object*) clazz); in findClassNoInit()
1574 dvmFreeClassInnards(clazz); in findClassNoInit()
1575 dvmReleaseTrackedAlloc((Object*) clazz, NULL); in findClassNoInit()
1579 clazz = dvmLookupClass(descriptor, loader, true); in findClassNoInit()
1580 assert(clazz != NULL); in findClassNoInit()
1583 dvmReleaseTrackedAlloc((Object*) clazz, NULL); in findClassNoInit()
1586 logClassLoadWithTime('>', clazz, startTime); in findClassNoInit()
1591 if (!dvmLinkClass(clazz)) { in findClassNoInit()
1596 removeClassFromHash(clazz); in findClassNoInit()
1597 clazz->status = CLASS_ERROR; in findClassNoInit()
1598 dvmFreeClassInnards(clazz); in findClassNoInit()
1602 clazz->initThreadId = 0; in findClassNoInit()
1603 dvmObjectNotifyAll(self, (Object*) clazz); in findClassNoInit()
1604 dvmUnlockObject(self, (Object*) clazz); in findClassNoInit()
1608 clazz->descriptor, get_process_name()); in findClassNoInit()
1615 logClassLoad('<', clazz); in findClassNoInit()
1617 clazz = NULL; in findClassNoInit()
1626 dvmObjectNotifyAll(self, (Object*) clazz); in findClassNoInit()
1627 dvmUnlockObject(self, (Object*) clazz); in findClassNoInit()
1636 clazz->virtualMethodCount + clazz->directMethodCount; in findClassNoInit()
1637 gDvm.numDeclaredInstFields += clazz->ifieldCount; in findClassNoInit()
1638 gDvm.numDeclaredStaticFields += clazz->sfieldCount; in findClassNoInit()
1653 gDvm.classJavaLangObject = clazz; in findClassNoInit()
1657 logClassLoad('<', clazz); in findClassNoInit()
1662 if (!dvmIsClassLinked(clazz) && clazz->status != CLASS_ERROR) { in findClassNoInit()
1675 dvmLockObject(self, (Object*) clazz); in findClassNoInit()
1676 if (!dvmIsClassLinked(clazz) && in findClassNoInit()
1677 clazz->initThreadId == self->threadId) in findClassNoInit()
1679 ALOGW("Recursive link on class %s", clazz->descriptor); in findClassNoInit()
1680 dvmUnlockObject(self, (Object*) clazz); in findClassNoInit()
1681 dvmThrowClassCircularityError(clazz->descriptor); in findClassNoInit()
1682 clazz = NULL; in findClassNoInit()
1687 while (!dvmIsClassLinked(clazz) && clazz->status != CLASS_ERROR) { in findClassNoInit()
1688 dvmObjectWait(self, (Object*) clazz, 0, 0, false); in findClassNoInit()
1690 dvmUnlockObject(self, (Object*) clazz); in findClassNoInit()
1692 if (clazz->status == CLASS_ERROR) { in findClassNoInit()
1697 throwEarlierClassFailure(clazz); in findClassNoInit()
1698 clazz = NULL; in findClassNoInit()
1704 assert(dvmIsClassLinked(clazz)); in findClassNoInit()
1706 assert(clazz->clazz == gDvm.classJavaLangClass); in findClassNoInit()
1707 assert(dvmIsClassObject(clazz)); in findClassNoInit()
1708 assert(clazz == gDvm.classJavaLangObject || clazz->super != NULL); in findClassNoInit()
1709 if (!dvmIsInterfaceClass(clazz)) { in findClassNoInit()
1713 assert(clazz->vtableCount >= clazz->virtualMethodCount); in findClassNoInit()
1719 assert(clazz != NULL || dvmCheckException(self)); in findClassNoInit()
1720 return clazz; in findClassNoInit()
1996 void dvmFreeClassInnards(ClassObject* clazz) in dvmFreeClassInnards() argument
2001 if (clazz == NULL) in dvmFreeClassInnards()
2004 assert(clazz->clazz == gDvm.classJavaLangClass); in dvmFreeClassInnards()
2005 assert(dvmIsClassObject(clazz)); in dvmFreeClassInnards()
2031 dvmLinearFree(clazz->classLoader, tp); \ in dvmFreeClassInnards()
2037 clazz->vtableCount = -1; in dvmFreeClassInnards()
2038 if (clazz->vtable == gDvm.classJavaLangObject->vtable) { in dvmFreeClassInnards()
2039 clazz->vtable = NULL; in dvmFreeClassInnards()
2041 NULL_AND_LINEAR_FREE(clazz->vtable); in dvmFreeClassInnards()
2044 clazz->descriptor = NULL; in dvmFreeClassInnards()
2045 NULL_AND_FREE(clazz->descriptorAlloc); in dvmFreeClassInnards()
2047 if (clazz->directMethods != NULL) { in dvmFreeClassInnards()
2048 Method *directMethods = clazz->directMethods; in dvmFreeClassInnards()
2049 int directMethodCount = clazz->directMethodCount; in dvmFreeClassInnards()
2050 clazz->directMethods = NULL; in dvmFreeClassInnards()
2051 clazz->directMethodCount = -1; in dvmFreeClassInnards()
2052 dvmLinearReadWrite(clazz->classLoader, directMethods); in dvmFreeClassInnards()
2056 dvmLinearReadOnly(clazz->classLoader, directMethods); in dvmFreeClassInnards()
2057 dvmLinearFree(clazz->classLoader, directMethods); in dvmFreeClassInnards()
2059 if (clazz->virtualMethods != NULL) { in dvmFreeClassInnards()
2060 Method *virtualMethods = clazz->virtualMethods; in dvmFreeClassInnards()
2061 int virtualMethodCount = clazz->virtualMethodCount; in dvmFreeClassInnards()
2062 clazz->virtualMethodCount = -1; in dvmFreeClassInnards()
2063 clazz->virtualMethods = NULL; in dvmFreeClassInnards()
2064 dvmLinearReadWrite(clazz->classLoader, virtualMethods); in dvmFreeClassInnards()
2068 dvmLinearReadOnly(clazz->classLoader, virtualMethods); in dvmFreeClassInnards()
2069 dvmLinearFree(clazz->classLoader, virtualMethods); in dvmFreeClassInnards()
2072 InitiatingLoaderList *loaderList = dvmGetInitiatingLoaderList(clazz); in dvmFreeClassInnards()
2076 clazz->interfaceCount = -1; in dvmFreeClassInnards()
2077 NULL_AND_LINEAR_FREE(clazz->interfaces); in dvmFreeClassInnards()
2079 clazz->iftableCount = -1; in dvmFreeClassInnards()
2080 NULL_AND_LINEAR_FREE(clazz->iftable); in dvmFreeClassInnards()
2082 clazz->ifviPoolCount = -1; in dvmFreeClassInnards()
2083 NULL_AND_LINEAR_FREE(clazz->ifviPool); in dvmFreeClassInnards()
2085 clazz->sfieldCount = -1; in dvmFreeClassInnards()
2089 clazz->ifieldCount = -1; in dvmFreeClassInnards()
2090 NULL_AND_LINEAR_FREE(clazz->ifields); in dvmFreeClassInnards()
2124 dvmLinearFree(meth->clazz->classLoader, methodDexCode); in freeMethodInnards()
2136 ALOGE(" cloning %s.%s", src->clazz->descriptor, src->name); in cloneMethod()
2148 static void loadMethodFromDex(ClassObject* clazz, const DexMethod* pDexMethod, in loadMethodFromDex() argument
2151 DexFile* pDexFile = clazz->pDvmDex->pDexFile; in loadMethodFromDex()
2161 meth->clazz = clazz; in loadMethodFromDex()
2174 if (clazz->classLoader != NULL || in loadMethodFromDex()
2175 strcmp(clazz->descriptor, "Ljava/lang/Enum;") != 0) in loadMethodFromDex()
2177 SET_CLASS_FLAG(clazz, CLASS_ISFINALIZABLE); in loadMethodFromDex()
2232 dvmLinearReadWrite(meth->clazz->classLoader, methodDexCode);
2240 meth->clazz->descriptor, meth->name, dexCodeSize);
2243 (DexCode*) dvmLinearAlloc(meth->clazz->classLoader, dexCodeSize);
2260 dvmLinearReadOnly(meth->clazz->classLoader, methodDexCode);
2335 static void loadSFieldFromDex(ClassObject* clazz, in loadSFieldFromDex() argument
2338 DexFile* pDexFile = clazz->pDvmDex->pDexFile; in loadSFieldFromDex()
2343 sfield->clazz = clazz; in loadSFieldFromDex()
2359 static void loadIFieldFromDex(ClassObject* clazz, in loadIFieldFromDex() argument
2362 DexFile* pDexFile = clazz->pDvmDex->pDexFile; in loadIFieldFromDex()
2367 ifield->clazz = clazz; in loadIFieldFromDex()
2380 static bool precacheReferenceOffsets(ClassObject* clazz) in precacheReferenceOffsets() argument
2392 dvmLinearReadWrite(clazz->classLoader, clazz->ifields); in precacheReferenceOffsets()
2393 for (i = 0; i < clazz->ifieldRefCount; i++) { in precacheReferenceOffsets()
2394 InstField *pField = &clazz->ifields[i]; in precacheReferenceOffsets()
2400 targetIndex = clazz->ifieldRefCount - 1; in precacheReferenceOffsets()
2402 InstField *swapField = &clazz->ifields[targetIndex]; in precacheReferenceOffsets()
2421 clazz->ifieldRefCount--; in precacheReferenceOffsets()
2426 dvmLinearReadOnly(clazz->classLoader, clazz->ifields); in precacheReferenceOffsets()
2427 if (i == clazz->ifieldRefCount) { in precacheReferenceOffsets()
2428 ALOGE("Unable to reorder 'referent' in %s", clazz->descriptor); in precacheReferenceOffsets()
2436 if (!dvmFindReferenceMembers(clazz)) { in precacheReferenceOffsets()
2449 static void computeRefOffsets(ClassObject* clazz) in computeRefOffsets() argument
2451 if (clazz->super != NULL) { in computeRefOffsets()
2452 clazz->refOffsets = clazz->super->refOffsets; in computeRefOffsets()
2454 clazz->refOffsets = 0; in computeRefOffsets()
2459 if (clazz->refOffsets != CLASS_WALK_SUPER) { in computeRefOffsets()
2466 f = clazz->ifields; in computeRefOffsets()
2467 const int ifieldRefCount = clazz->ifieldRefCount; in computeRefOffsets()
2479 clazz->refOffsets |= newBit; in computeRefOffsets()
2481 clazz->refOffsets = CLASS_WALK_SUPER; in computeRefOffsets()
2504 bool dvmLinkClass(ClassObject* clazz) in dvmLinkClass() argument
2511 assert(clazz != NULL); in dvmLinkClass()
2512 assert(clazz->descriptor != NULL); in dvmLinkClass()
2513 assert(clazz->status == CLASS_IDX || clazz->status == CLASS_LOADED); in dvmLinkClass()
2515 ALOGV("CLASS: linking '%s'...", clazz->descriptor); in dvmLinkClass()
2518 assert(clazz->clazz == gDvm.classJavaLangClass); in dvmLinkClass()
2519 assert(dvmIsClassObject(clazz)); in dvmLinkClass()
2520 if (clazz->classLoader == NULL && in dvmLinkClass()
2521 (strcmp(clazz->descriptor, "Ljava/lang/Class;") == 0)) in dvmLinkClass()
2543 if (clazz->status == CLASS_IDX) { in dvmLinkClass()
2544 if (clazz->interfaceCount > 0) { in dvmLinkClass()
2548 assert(sizeof(*interfaceIdxArray) == sizeof(*clazz->interfaces)); in dvmLinkClass()
2549 size_t len = clazz->interfaceCount * sizeof(*interfaceIdxArray); in dvmLinkClass()
2552 ALOGW("Unable to allocate memory to link %s", clazz->descriptor); in dvmLinkClass()
2555 memcpy(interfaceIdxArray, clazz->interfaces, len); in dvmLinkClass()
2557 dvmLinearReadWrite(clazz->classLoader, clazz->interfaces); in dvmLinkClass()
2558 memset(clazz->interfaces, 0, len); in dvmLinkClass()
2559 dvmLinearReadOnly(clazz->classLoader, clazz->interfaces); in dvmLinkClass()
2562 assert(sizeof(superclassIdx) == sizeof(clazz->super)); in dvmLinkClass()
2563 superclassIdx = (u4) clazz->super; in dvmLinkClass()
2564 clazz->super = NULL; in dvmLinkClass()
2568 clazz->status = CLASS_LOADED; in dvmLinkClass()
2571 ClassObject* super = dvmResolveClass(clazz, superclassIdx, false); in dvmLinkClass()
2577 clazz->descriptor, superclassIdx); in dvmLinkClass()
2580 clazz->descriptor, superclassIdx); in dvmLinkClass()
2584 dvmSetFieldObject((Object *)clazz, in dvmLinkClass()
2589 if (clazz->interfaceCount > 0) { in dvmLinkClass()
2592 dvmLinearReadWrite(clazz->classLoader, clazz->interfaces); in dvmLinkClass()
2593 for (i = 0; i < clazz->interfaceCount; i++) { in dvmLinkClass()
2595 clazz->interfaces[i] = in dvmLinkClass()
2596 dvmResolveClass(clazz, interfaceIdxArray[i], false); in dvmLinkClass()
2597 if (clazz->interfaces[i] == NULL) { in dvmLinkClass()
2598 const DexFile* pDexFile = clazz->pDvmDex->pDexFile; in dvmLinkClass()
2601 dvmLinearReadOnly(clazz->classLoader, clazz->interfaces); in dvmLinkClass()
2609 clazz->descriptor, interfaceIdxArray[i], in dvmLinkClass()
2613 clazz->descriptor, interfaceIdxArray[i], in dvmLinkClass()
2620 if (!dvmCheckClassAccess(clazz, clazz->interfaces[i])) { in dvmLinkClass()
2621 dvmLinearReadOnly(clazz->classLoader, clazz->interfaces); in dvmLinkClass()
2623 clazz->interfaces[i]->descriptor, clazz->descriptor); in dvmLinkClass()
2628 clazz->interfaces[i]->descriptor); in dvmLinkClass()
2630 dvmLinearReadOnly(clazz->classLoader, clazz->interfaces); in dvmLinkClass()
2643 assert(clazz->primitiveType == PRIM_NOT); in dvmLinkClass()
2644 if (strcmp(clazz->descriptor, "Ljava/lang/Object;") == 0) { in dvmLinkClass()
2645 if (clazz->super != NULL) { in dvmLinkClass()
2656 CLEAR_CLASS_FLAG(clazz, CLASS_ISFINALIZABLE); in dvmLinkClass()
2658 if (clazz->super == NULL) { in dvmLinkClass()
2663 if (dvmIsFinalClass(clazz->super)) { in dvmLinkClass()
2665 clazz->descriptor, clazz->super->descriptor); in dvmLinkClass()
2668 } else if (dvmIsInterfaceClass(clazz->super)) { in dvmLinkClass()
2670 clazz->descriptor, clazz->super->descriptor); in dvmLinkClass()
2673 } else if (!dvmCheckClassAccess(clazz, clazz->super)) { in dvmLinkClass()
2675 clazz->descriptor, clazz->super->descriptor); in dvmLinkClass()
2684 if (IS_CLASS_FLAG_SET(clazz->super, CLASS_ISFINALIZABLE)) { in dvmLinkClass()
2685 SET_CLASS_FLAG(clazz, CLASS_ISFINALIZABLE); in dvmLinkClass()
2691 if (IS_CLASS_FLAG_SET(clazz->super, CLASS_ISREFERENCE)) { in dvmLinkClass()
2697 superRefFlags = GET_CLASS_FLAG_GROUP(clazz->super, in dvmLinkClass()
2702 SET_CLASS_FLAG(clazz, superRefFlags); in dvmLinkClass()
2703 } else if (clazz->classLoader == NULL && in dvmLinkClass()
2704 clazz->super->classLoader == NULL && in dvmLinkClass()
2705 strcmp(clazz->super->descriptor, in dvmLinkClass()
2714 if (strcmp(clazz->descriptor, in dvmLinkClass()
2719 } else if (strcmp(clazz->descriptor, in dvmLinkClass()
2723 } else if (strcmp(clazz->descriptor, in dvmLinkClass()
2727 } else if (strcmp(clazz->descriptor, in dvmLinkClass()
2742 assert(GET_CLASS_FLAG_GROUP(clazz, in dvmLinkClass()
2748 SET_CLASS_FLAG(clazz, refFlags); in dvmLinkClass()
2755 if (dvmIsInterfaceClass(clazz)) { in dvmLinkClass()
2757 int count = clazz->virtualMethodCount; in dvmLinkClass()
2761 clazz->descriptor); in dvmLinkClass()
2765 dvmLinearReadWrite(clazz->classLoader, clazz->virtualMethods); in dvmLinkClass()
2768 clazz->virtualMethods[i].methodIndex = (u2) i; in dvmLinkClass()
2770 dvmLinearReadOnly(clazz->classLoader, clazz->virtualMethods); in dvmLinkClass()
2772 if (!createVtable(clazz)) { in dvmLinkClass()
2781 if (!createIftable(clazz)) in dvmLinkClass()
2787 if (!insertMethodStubs(clazz)) in dvmLinkClass()
2793 if (!computeFieldOffsets(clazz)) in dvmLinkClass()
2801 if ((clazz->classLoader == NULL) in dvmLinkClass()
2802 && (strcmp(clazz->descriptor, "Ljava/lang/ref/Reference;") == 0)) { in dvmLinkClass()
2803 if (!precacheReferenceOffsets(clazz)) { in dvmLinkClass()
2815 computeRefOffsets(clazz); in dvmLinkClass()
2820 if (IS_CLASS_FLAG_SET(clazz, CLASS_ISPREVERIFIED)) in dvmLinkClass()
2821 clazz->status = CLASS_VERIFIED; in dvmLinkClass()
2823 clazz->status = CLASS_RESOLVED; in dvmLinkClass()
2826 ALOGV("CLASS: linked '%s'", clazz->descriptor); in dvmLinkClass()
2840 dvmDbgPostClassPrepare(clazz); in dvmLinkClass()
2845 clazz->status = CLASS_ERROR; in dvmLinkClass()
2864 static bool createVtable(ClassObject* clazz) in createVtable() argument
2870 if (clazz->super != NULL) { in createVtable()
2876 maxCount = clazz->virtualMethodCount; in createVtable()
2877 if (clazz->super != NULL) { in createVtable()
2878 maxCount += clazz->super->vtableCount; in createVtable()
2883 assert(strcmp(clazz->descriptor, "Ljava/lang/Object;") == 0); in createVtable()
2893 dvmLinearReadWrite(clazz->classLoader, clazz->virtualMethods); in createVtable()
2894 clazz->vtable = (Method**) dvmLinearAlloc(clazz->classLoader, in createVtable()
2896 if (clazz->vtable == NULL) in createVtable()
2899 if (clazz->super != NULL) { in createVtable()
2902 memcpy(clazz->vtable, clazz->super->vtable, in createVtable()
2903 sizeof(*(clazz->vtable)) * clazz->super->vtableCount); in createVtable()
2904 actualCount = clazz->super->vtableCount; in createVtable()
2909 for (i = 0; i < clazz->virtualMethodCount; i++) { in createVtable()
2910 Method* localMeth = &clazz->virtualMethods[i]; in createVtable()
2913 for (si = 0; si < clazz->super->vtableCount; si++) { in createVtable()
2914 Method* superMeth = clazz->vtable[si]; in createVtable()
2919 bool isAccessible = dvmCheckMethodAccess(clazz, superMeth); in createVtable()
2922 localMeth->clazz->descriptor, localMeth->name, in createVtable()
2923 superMeth->clazz->descriptor, superMeth->name); in createVtable()
2931 localMeth->clazz->descriptor, localMeth->name, in createVtable()
2932 superMeth->clazz->descriptor); in createVtable()
2935 clazz->vtable[si] = localMeth; in createVtable()
2943 if (si == clazz->super->vtableCount) { in createVtable()
2945 clazz->vtable[actualCount] = localMeth; in createVtable()
2956 clazz->descriptor); in createVtable()
2963 assert(clazz->vtable != NULL); in createVtable()
2964 dvmLinearReadOnly(clazz->classLoader, clazz->vtable); in createVtable()
2965 clazz->vtable = (Method **)dvmLinearRealloc(clazz->classLoader, in createVtable()
2966 clazz->vtable, sizeof(*(clazz->vtable)) * actualCount); in createVtable()
2967 if (clazz->vtable == NULL) { in createVtable()
2976 clazz->vtableCount = actualCount; in createVtable()
2979 int count = clazz->virtualMethodCount; in createVtable()
2982 clazz->descriptor); in createVtable()
2987 clazz->vtable[i] = &clazz->virtualMethods[i]; in createVtable()
2988 clazz->virtualMethods[i].methodIndex = (u2) i; in createVtable()
2990 clazz->vtableCount = clazz->virtualMethodCount; in createVtable()
2996 dvmLinearReadOnly(clazz->classLoader, clazz->vtable); in createVtable()
2997 dvmLinearReadOnly(clazz->classLoader, clazz->virtualMethods); in createVtable()
3018 static bool createIftable(ClassObject* clazz) in createIftable() argument
3029 if (clazz->super != NULL) in createIftable()
3030 superIfCount = clazz->super->iftableCount; in createIftable()
3035 ifCount += clazz->interfaceCount; in createIftable()
3036 for (int i = 0; i < clazz->interfaceCount; i++) in createIftable()
3037 ifCount += clazz->interfaces[i]->iftableCount; in createIftable()
3040 clazz->descriptor, ifCount - superIfCount, superIfCount, ifCount); in createIftable()
3043 assert(clazz->iftableCount == 0); in createIftable()
3044 assert(clazz->iftable == NULL); in createIftable()
3052 clazz->iftable = (InterfaceEntry*) dvmLinearAlloc(clazz->classLoader, in createIftable()
3055 memset(clazz->iftable, 0x00, sizeof(InterfaceEntry) * ifCount); in createIftable()
3057 memcpy(clazz->iftable, clazz->super->iftable, in createIftable()
3066 for (int i = 0; i < clazz->interfaceCount; i++) { in createIftable()
3067 ClassObject* interf = clazz->interfaces[i]; in createIftable()
3073 clazz->descriptor, interf->descriptor); in createIftable()
3075 clazz->descriptor); in createIftable()
3080 clazz->iftable[idx++].clazz = interf; in createIftable()
3087 cand = interf->iftable[j].clazz; in createIftable()
3098 if (clazz->iftable[k].clazz == cand) in createIftable()
3102 clazz->iftable[idx++].clazz = cand; in createIftable()
3116 InterfaceEntry* oldmem = clazz->iftable; in createIftable()
3118 clazz->iftable = (InterfaceEntry*) dvmLinearAlloc(clazz->classLoader, in createIftable()
3120 memcpy(clazz->iftable, oldmem, sizeof(InterfaceEntry) * newIfCount); in createIftable()
3121 dvmLinearFree(clazz->classLoader, oldmem); in createIftable()
3126 clazz->iftableCount = ifCount; in createIftable()
3133 if (dvmIsInterfaceClass(clazz) || superIfCount == ifCount) { in createIftable()
3162 clazz->iftable[i].clazz->virtualMethodCount, in createIftable()
3163 clazz->iftable[i].clazz->descriptor); in createIftable()
3164 poolSize += clazz->iftable[i].clazz->virtualMethodCount; in createIftable()
3173 clazz->ifviPoolCount = poolSize; in createIftable()
3174 clazz->ifviPool = (int*) dvmLinearAlloc(clazz->classLoader, in createIftable()
3186 clazz->iftable[i].methodIndexArray = clazz->ifviPool + poolOffset; in createIftable()
3187 interface = clazz->iftable[i].clazz; in createIftable()
3230 for (j = clazz->vtableCount-1; j >= 0; j--) { in createIftable()
3231 if (dvmCompareMethodNamesAndProtos(imeth, clazz->vtable[j]) in createIftable()
3235 if (!dvmIsAbstractMethod(clazz->vtable[j]) && in createIftable()
3236 !dvmIsPublicMethod(clazz->vtable[j])) in createIftable()
3239 clazz->descriptor, clazz->vtable[j]->name); in createIftable()
3244 clazz->iftable[i].methodIndexArray[methIdx] = j; in createIftable()
3253 imeth->name, desc, clazz->descriptor); in createIftable()
3263 clazz->classLoader, in createIftable()
3266 dvmLinearReadOnly(clazz->classLoader, mirandaList); in createIftable()
3268 clazz->classLoader, in createIftable()
3289 mirandaList[mir]->clazz->descriptor, in createIftable()
3290 imeth->clazz->descriptor, in createIftable()
3299 clazz->iftable[i].methodIndexArray[methIdx] = in createIftable()
3300 clazz->vtableCount + mir; in createIftable()
3302 imeth->name, clazz->vtableCount + mir); in createIftable()
3322 mirandaList[i]->clazz->descriptor, mirandaList[i]->name); in createIftable()
3333 clazz->descriptor, mirandaCount); in createIftable()
3341 if (clazz->virtualMethods == NULL) { in createIftable()
3342 newVirtualMethods = (Method*) dvmLinearAlloc(clazz->classLoader, in createIftable()
3343 sizeof(Method) * (clazz->virtualMethodCount + mirandaCount)); in createIftable()
3346 newVirtualMethods = (Method*) dvmLinearRealloc(clazz->classLoader, in createIftable()
3347 clazz->virtualMethods, in createIftable()
3348 sizeof(Method) * (clazz->virtualMethodCount + mirandaCount)); in createIftable()
3350 if (newVirtualMethods != clazz->virtualMethods) { in createIftable()
3368 dvmLinearReadWrite(clazz->classLoader, clazz->vtable); in createIftable()
3370 for (int i = 0; i < clazz->virtualMethodCount; i++, meth++) in createIftable()
3371 clazz->vtable[meth->methodIndex] = meth; in createIftable()
3372 dvmLinearReadOnly(clazz->classLoader, clazz->vtable); in createIftable()
3375 oldMethodCount = clazz->virtualMethodCount; in createIftable()
3376 clazz->virtualMethods = newVirtualMethods; in createIftable()
3377 clazz->virtualMethodCount += mirandaCount; in createIftable()
3379 dvmLinearReadOnly(clazz->classLoader, clazz->virtualMethods); in createIftable()
3384 assert(clazz->vtable != NULL); in createIftable()
3385 clazz->vtable = (Method**) dvmLinearRealloc(clazz->classLoader, in createIftable()
3386 clazz->vtable, in createIftable()
3387 sizeof(Method*) * (clazz->vtableCount + mirandaCount)); in createIftable()
3388 if (clazz->vtable == NULL) { in createIftable()
3394 oldVtableCount = clazz->vtableCount; in createIftable()
3395 clazz->vtableCount += mirandaCount; in createIftable()
3405 meth = clazz->virtualMethods + oldMethodCount; in createIftable()
3407 dvmLinearReadWrite(clazz->classLoader, clazz->virtualMethods); in createIftable()
3409 meth->clazz = clazz; in createIftable()
3412 dvmLinearReadOnly(clazz->classLoader, clazz->virtualMethods); in createIftable()
3415 clazz->vtable[oldVtableCount + i] = meth; in createIftable()
3418 dvmLinearReadOnly(clazz->classLoader, mirandaList); in createIftable()
3419 dvmLinearFree(clazz->classLoader, mirandaList); in createIftable()
3456 dvmLinearReadOnly(clazz->classLoader, clazz->iftable); in createIftable()
3458 dvmLinearReadOnly(clazz->classLoader, clazz->vtable); in createIftable()
3460 dvmLinearReadOnly(clazz->classLoader, clazz->ifviPool); in createIftable()
3481 static bool insertMethodStubs(ClassObject* clazz) in insertMethodStubs() argument
3483 dvmLinearReadWrite(clazz->classLoader, clazz->virtualMethods); in insertMethodStubs()
3488 meth = clazz->virtualMethods; in insertMethodStubs()
3489 for (i = 0; i < clazz->virtualMethodCount; i++, meth++) { in insertMethodStubs()
3500 dvmLinearReadOnly(clazz->classLoader, clazz->virtualMethods); in insertMethodStubs()
3549 static bool computeFieldOffsets(ClassObject* clazz) in computeFieldOffsets() argument
3554 dvmLinearReadWrite(clazz->classLoader, clazz->ifields); in computeFieldOffsets()
3556 if (clazz->super != NULL) in computeFieldOffsets()
3557 fieldOffset = clazz->super->objectSize; in computeFieldOffsets()
3561 LOGVV("--- computeFieldOffsets '%s'", clazz->descriptor); in computeFieldOffsets()
3571 clazz->ifieldRefCount = 0; in computeFieldOffsets()
3572 j = clazz->ifieldCount - 1; in computeFieldOffsets()
3573 for (i = 0; i < clazz->ifieldCount; i++) { in computeFieldOffsets()
3574 InstField* pField = &clazz->ifields[i]; in computeFieldOffsets()
3583 InstField* refField = &clazz->ifields[j--]; in computeFieldOffsets()
3598 clazz->ifieldRefCount++; in computeFieldOffsets()
3607 clazz->ifieldRefCount++; in computeFieldOffsets()
3626 if (i != clazz->ifieldCount && (fieldOffset & 0x04) != 0) { in computeFieldOffsets()
3629 InstField* pField = &clazz->ifields[i]; in computeFieldOffsets()
3648 j = clazz->ifieldCount - 1; in computeFieldOffsets()
3650 InstField* singleField = &clazz->ifields[j--]; in computeFieldOffsets()
3668 ALOGV(" +++ inserting pad field in '%s'", clazz->descriptor); in computeFieldOffsets()
3678 assert(i == clazz->ifieldCount || (fieldOffset & 0x04) == 0); in computeFieldOffsets()
3679 j = clazz->ifieldCount - 1; in computeFieldOffsets()
3680 for ( ; i < clazz->ifieldCount; i++) { in computeFieldOffsets()
3681 InstField* pField = &clazz->ifields[i]; in computeFieldOffsets()
3690 InstField* doubleField = &clazz->ifields[j--]; in computeFieldOffsets()
3724 for (i = 0; i < clazz->ifieldCount; i++) { in computeFieldOffsets()
3725 InstField *pField = &clazz->ifields[i]; in computeFieldOffsets()
3734 assert(i == clazz->ifieldRefCount); in computeFieldOffsets()
3742 assert(clazz->ifieldRefCount == clazz->ifieldCount); in computeFieldOffsets()
3750 assert(!dvmIsTheClassClass(clazz) || (size_t)fieldOffset < in computeFieldOffsets()
3751 OFFSETOF_MEMBER(ClassObject, instanceData) + sizeof(clazz->instanceData)); in computeFieldOffsets()
3753 clazz->objectSize = fieldOffset; in computeFieldOffsets()
3755 dvmLinearReadOnly(clazz->classLoader, clazz->ifields); in computeFieldOffsets()
3765 static void throwEarlierClassFailure(ClassObject* clazz) in throwEarlierClassFailure() argument
3768 clazz->descriptor, clazz->verifyErrorClass); in throwEarlierClassFailure()
3770 if (clazz->verifyErrorClass == NULL) { in throwEarlierClassFailure()
3771 dvmThrowNoClassDefFoundError(clazz->descriptor); in throwEarlierClassFailure()
3773 dvmThrowExceptionWithClassMessage(clazz->verifyErrorClass, in throwEarlierClassFailure()
3774 clazz->descriptor); in throwEarlierClassFailure()
3782 static void initSFields(ClassObject* clazz) in initSFields() argument
3791 if (clazz->sfieldCount == 0) { in initSFields()
3794 if (clazz->pDvmDex == NULL) { in initSFields()
3796 ALOGV("Not initializing static fields in %s", clazz->descriptor); in initSFields()
3799 pDexFile = clazz->pDvmDex->pDexFile; in initSFields()
3801 pClassDef = dexFindClass(pDexFile, clazz->descriptor); in initSFields()
3809 dvmEncodedArrayIteratorInitialize(&iterator, pValueList, clazz); in initSFields()
3819 StaticField* sfield = &clazz->sfields[i]; in initSFields()
3830 clazz->descriptor, i); in initSFields()
3899 value.type, descriptor, clazz->descriptor, i); in initSFields()
4059 static bool validateSuperDescriptors(const ClassObject* clazz) in validateSuperDescriptors() argument
4063 if (dvmIsInterfaceClass(clazz)) in validateSuperDescriptors()
4069 if (clazz->super != NULL && in validateSuperDescriptors()
4070 clazz->classLoader != clazz->super->classLoader) in validateSuperDescriptors()
4091 for (i = clazz->super->vtableCount - 1; i >= 0; i--) { in validateSuperDescriptors()
4092 meth = clazz->vtable[i]; in validateSuperDescriptors()
4093 if (meth != clazz->super->vtable[i] && in validateSuperDescriptors()
4094 !checkMethodDescriptorClasses(meth, clazz->super, clazz)) in validateSuperDescriptors()
4097 meth->name, clazz->descriptor, clazz->classLoader, in validateSuperDescriptors()
4098 clazz->super->descriptor, clazz->super->classLoader); in validateSuperDescriptors()
4114 for (i = 0; i < clazz->iftableCount; i++) { in validateSuperDescriptors()
4115 const InterfaceEntry* iftable = &clazz->iftable[i]; in validateSuperDescriptors()
4117 if (clazz->classLoader != iftable->clazz->classLoader) { in validateSuperDescriptors()
4118 const ClassObject* iface = iftable->clazz; in validateSuperDescriptors()
4126 meth = clazz->vtable[vtableIndex]; in validateSuperDescriptors()
4128 if (!checkMethodDescriptorClasses(meth, iface, meth->clazz)) { in validateSuperDescriptors()
4131 meth->name, clazz->descriptor, clazz->classLoader, in validateSuperDescriptors()
4161 bool dvmIsClassInitializing(const ClassObject* clazz) in dvmIsClassInitializing() argument
4163 const int32_t* addr = (const int32_t*)(const void*)&clazz->status; in dvmIsClassInitializing()
4167 clazz->initThreadId == dvmThreadSelf()->threadId); in dvmIsClassInitializing()
4234 bool dvmInitClass(ClassObject* clazz) in dvmInitClass() argument
4245 dvmLockObject(self, (Object*) clazz); in dvmInitClass()
4246 assert(dvmIsClassLinked(clazz) || clazz->status == CLASS_ERROR); in dvmInitClass()
4251 if (clazz->status < CLASS_VERIFIED) { in dvmInitClass()
4255 if (clazz->status == CLASS_ERROR) { in dvmInitClass()
4256 throwEarlierClassFailure(clazz); in dvmInitClass()
4260 assert(clazz->status == CLASS_RESOLVED); in dvmInitClass()
4261 assert(!IS_CLASS_FLAG_SET(clazz, CLASS_ISPREVERIFIED)); in dvmInitClass()
4265 clazz->classLoader == NULL)) in dvmInitClass()
4269 clazz->descriptor, clazz->classLoader); in dvmInitClass()
4270 clazz->status = CLASS_VERIFIED; in dvmInitClass()
4275 ALOGV("+++ late verify on %s", clazz->descriptor); in dvmInitClass()
4282 if (IS_CLASS_FLAG_SET(clazz, CLASS_ISOPTIMIZED)) { in dvmInitClass()
4285 clazz->descriptor); in dvmInitClass()
4290 clazz->status = CLASS_VERIFYING; in dvmInitClass()
4291 if (!dvmVerifyClass(clazz)) { in dvmInitClass()
4293 dvmThrowVerifyError(clazz->descriptor); in dvmInitClass()
4294 dvmSetFieldObject((Object*) clazz, in dvmInitClass()
4296 (Object*) dvmGetException(self)->clazz); in dvmInitClass()
4297 clazz->status = CLASS_ERROR; in dvmInitClass()
4301 clazz->status = CLASS_VERIFIED; in dvmInitClass()
4319 if (!IS_CLASS_FLAG_SET(clazz, CLASS_ISOPTIMIZED) && !gDvm.optimizing) { in dvmInitClass()
4321 clazz->descriptor, IS_CLASS_FLAG_SET(clazz, CLASS_ISPREVERIFIED)); in dvmInitClass()
4323 dvmOptimizeClass(clazz, essentialOnly); in dvmInitClass()
4324 SET_CLASS_FLAG(clazz, CLASS_ISOPTIMIZED); in dvmInitClass()
4328 dvmFlushBreakpoints(clazz); in dvmInitClass()
4330 if (clazz->status == CLASS_INITIALIZED) in dvmInitClass()
4333 while (clazz->status == CLASS_INITIALIZING) { in dvmInitClass()
4335 if (clazz->initThreadId == self->threadId) { in dvmInitClass()
4350 dvmObjectWait(self, (Object*) clazz, 0, 0, false); in dvmInitClass()
4359 clazz->descriptor); in dvmInitClass()
4374 clazz->status = CLASS_ERROR; in dvmInitClass()
4377 if (clazz->status == CLASS_INITIALIZING) { in dvmInitClass()
4381 assert(clazz->status == CLASS_INITIALIZED || in dvmInitClass()
4382 clazz->status == CLASS_ERROR); in dvmInitClass()
4383 if (clazz->status == CLASS_ERROR) { in dvmInitClass()
4395 if (clazz->status == CLASS_ERROR) { in dvmInitClass()
4398 dvmUnlockObject(self, (Object*) clazz); in dvmInitClass()
4399 throwEarlierClassFailure(clazz); in dvmInitClass()
4422 if (!validateSuperDescriptors(clazz)) { in dvmInitClass()
4424 clazz->status = CLASS_ERROR; in dvmInitClass()
4435 assert(clazz->status < CLASS_INITIALIZING); in dvmInitClass()
4439 logClassLoad('+', clazz); in dvmInitClass()
4444 clazz->initThreadId = self->threadId; in dvmInitClass()
4446 (int32_t*)(void*)&clazz->status); in dvmInitClass()
4447 dvmUnlockObject(self, (Object*) clazz); in dvmInitClass()
4450 if (clazz->super != NULL && clazz->super->status != CLASS_INITIALIZED) { in dvmInitClass()
4451 assert(!dvmIsInterfaceClass(clazz)); in dvmInitClass()
4452 if (!dvmInitClass(clazz->super)) { in dvmInitClass()
4454 clazz->status = CLASS_ERROR; in dvmInitClass()
4456 dvmLockObject(self, (Object*) clazz); in dvmInitClass()
4469 initSFields(clazz); in dvmInitClass()
4473 method = dvmFindDirectMethodByDescriptor(clazz, "<clinit>", "()V"); in dvmInitClass()
4475 LOGVV("No <clinit> found for %s", clazz->descriptor); in dvmInitClass()
4477 LOGVV("Invoking %s.<clinit>", clazz->descriptor); in dvmInitClass()
4489 (dvmGetException(self)->clazz)->descriptor, clazz->descriptor); in dvmInitClass()
4493 dvmLockObject(self, (Object*) clazz); in dvmInitClass()
4494 clazz->status = CLASS_ERROR; in dvmInitClass()
4497 dvmLockObject(self, (Object*) clazz); in dvmInitClass()
4498 clazz->status = CLASS_INITIALIZED; in dvmInitClass()
4499 LOGVV("Initialized class: %s", clazz->descriptor); in dvmInitClass()
4517 dvmObjectNotifyAll(self, (Object*) clazz); in dvmInitClass()
4524 logClassLoad('-', clazz); in dvmInitClass()
4528 dvmUnlockObject(self, (Object*) clazz); in dvmInitClass()
4530 return (clazz->status != CLASS_ERROR); in dvmInitClass()
4559 ClassObject* clazz = method->clazz; in dvmSetNativeFunc() local
4564 dvmLinearReadWrite(clazz->classLoader, clazz->virtualMethods); in dvmSetNativeFunc()
4565 dvmLinearReadWrite(clazz->classLoader, clazz->directMethods); in dvmSetNativeFunc()
4577 dvmLinearReadOnly(clazz->classLoader, clazz->virtualMethods); in dvmSetNativeFunc()
4578 dvmLinearReadOnly(clazz->classLoader, clazz->directMethods); in dvmSetNativeFunc()
4589 ClassObject* clazz = method->clazz; in dvmSetRegisterMap() local
4594 method->clazz->descriptor, method->name); in dvmSetRegisterMap()
4600 dvmLinearReadWrite(clazz->classLoader, clazz->virtualMethods); in dvmSetRegisterMap()
4601 dvmLinearReadWrite(clazz->classLoader, clazz->directMethods); in dvmSetRegisterMap()
4605 dvmLinearReadOnly(clazz->classLoader, clazz->virtualMethods); in dvmSetRegisterMap()
4606 dvmLinearReadOnly(clazz->classLoader, clazz->directMethods); in dvmSetRegisterMap()
4615 ClassObject* clazz = (ClassObject*)vclazz; in findClassCallback() local
4618 if (strcmp(clazz->descriptor, descriptor) == 0) in findClassCallback()
4619 return (int) clazz; in findClassCallback()
4672 const ClassObject* clazz = (const ClassObject*) vclazz; in dumpClass() local
4678 if (clazz == NULL) { in dumpClass()
4688 initStr = dvmIsClassInitialized(clazz) ? "true" : "false"; in dumpClass()
4691 ALOGI("%s %p %s", clazz->descriptor, clazz->classLoader, initStr); in dumpClass()
4693 ALOGI("%s %s", clazz->descriptor, initStr); in dumpClass()
4695 ALOGI("%s %p", clazz->descriptor, clazz->classLoader); in dumpClass()
4697 ALOGI("%s", clazz->descriptor); in dumpClass()
4703 if ((u4)clazz->super > 0x10000 && (u4) clazz->super != (u4)-1) in dumpClass()
4704 super = clazz->super; in dumpClass()
4709 dvmIsInterfaceClass(clazz) ? "interface" : "class", in dumpClass()
4710 clazz->descriptor, clazz->classLoader, clazz->serialNumber); in dumpClass()
4711 ALOGI(" objectSize=%d (%d from super)", (int) clazz->objectSize, in dumpClass()
4713 ALOGI(" access=0x%04x.%04x", clazz->accessFlags >> 16, in dumpClass()
4714 clazz->accessFlags & JAVA_FLAGS_MASK); in dumpClass()
4717 if (dvmIsArrayClass(clazz)) { in dumpClass()
4719 clazz->arrayDim, clazz->elementClass->descriptor); in dumpClass()
4721 if (clazz->iftableCount > 0) { in dumpClass()
4722 ALOGI(" interfaces (%d):", clazz->iftableCount); in dumpClass()
4723 for (i = 0; i < clazz->iftableCount; i++) { in dumpClass()
4724 InterfaceEntry* ent = &clazz->iftable[i]; in dumpClass()
4728 i, ent->clazz->descriptor, ent->clazz->classLoader); in dumpClass()
4732 for (j = 0; j < ent->clazz->virtualMethodCount; j++) in dumpClass()
4735 ent->clazz->virtualMethods[j].name, in dumpClass()
4736 clazz->vtable[ent->methodIndexArray[j]]->name); in dumpClass()
4740 if (!dvmIsInterfaceClass(clazz)) { in dumpClass()
4741 ALOGI(" vtable (%d entries, %d in super):", clazz->vtableCount, in dumpClass()
4743 for (i = 0; i < clazz->vtableCount; i++) { in dumpClass()
4744 desc = dexProtoCopyMethodDescriptor(&clazz->vtable[i]->prototype); in dumpClass()
4746 (i != clazz->vtable[i]->methodIndex) ? "*** " : "", in dumpClass()
4747 (u4) clazz->vtable[i]->methodIndex, clazz->vtable[i], in dumpClass()
4748 clazz->vtable[i]->name, desc); in dumpClass()
4751 ALOGI(" direct methods (%d entries):", clazz->directMethodCount); in dumpClass()
4752 for (i = 0; i < clazz->directMethodCount; i++) { in dumpClass()
4754 &clazz->directMethods[i].prototype); in dumpClass()
4755 ALOGI(" %2d: %20s %s", i, clazz->directMethods[i].name, in dumpClass()
4760 ALOGI(" interface methods (%d):", clazz->virtualMethodCount); in dumpClass()
4761 for (i = 0; i < clazz->virtualMethodCount; i++) { in dumpClass()
4763 &clazz->virtualMethods[i].prototype); in dumpClass()
4765 (u4) clazz->virtualMethods[i].methodIndex, in dumpClass()
4766 clazz->virtualMethods[i].name, in dumpClass()
4771 if (clazz->sfieldCount > 0) { in dumpClass()
4772 ALOGI(" static fields (%d entries):", clazz->sfieldCount); in dumpClass()
4773 for (i = 0; i < clazz->sfieldCount; i++) { in dumpClass()
4774 ALOGI(" %2d: %20s %s", i, clazz->sfields[i].name, in dumpClass()
4775 clazz->sfields[i].signature); in dumpClass()
4778 if (clazz->ifieldCount > 0) { in dumpClass()
4779 ALOGI(" instance fields (%d entries):", clazz->ifieldCount); in dumpClass()
4780 for (i = 0; i < clazz->ifieldCount; i++) { in dumpClass()
4781 ALOGI(" %2d: %20s %s", i, clazz->ifields[i].name, in dumpClass()
4782 clazz->ifields[i].signature); in dumpClass()
4793 void dvmDumpClass(const ClassObject* clazz, int flags) in dvmDumpClass() argument
4795 dumpClass((void*) clazz, (void*) flags); in dvmDumpClass()