diff options
-rw-r--r-- | vm/AllocTracker.cpp (renamed from vm/AllocTracker.c) | 25 | ||||
-rw-r--r-- | vm/AllocTracker.h | 2 | ||||
-rw-r--r-- | vm/Atomic.cpp (renamed from vm/Atomic.c) | 0 | ||||
-rw-r--r-- | vm/AtomicCache.cpp (renamed from vm/AtomicCache.c) | 0 | ||||
-rw-r--r-- | vm/BitVector.cpp (renamed from vm/BitVector.c) | 0 | ||||
-rw-r--r-- | vm/Ddm.cpp (renamed from vm/Ddm.c) | 4 | ||||
-rw-r--r-- | vm/Debugger.cpp (renamed from vm/Debugger.c) | 60 | ||||
-rw-r--r-- | vm/Dvm.mk | 66 | ||||
-rw-r--r-- | vm/DvmDex.cpp (renamed from vm/DvmDex.c) | 0 | ||||
-rw-r--r-- | vm/Exception.cpp (renamed from vm/Exception.c) | 6 | ||||
-rw-r--r-- | vm/Globals.h | 2 | ||||
-rw-r--r-- | vm/Hash.cpp (renamed from vm/Hash.c) | 0 | ||||
-rw-r--r-- | vm/IndirectRefTable.cpp (renamed from vm/IndirectRefTable.c) | 0 | ||||
-rw-r--r-- | vm/Init.cpp (renamed from vm/Init.c) | 15 | ||||
-rw-r--r-- | vm/InitRefs.cpp (renamed from vm/InitRefs.c) | 0 | ||||
-rw-r--r-- | vm/InlineNative.cpp (renamed from vm/InlineNative.c) | 14 | ||||
-rw-r--r-- | vm/Inlines.cpp (renamed from vm/Inlines.c) | 0 | ||||
-rw-r--r-- | vm/Intern.cpp (renamed from vm/Intern.c) | 0 | ||||
-rw-r--r-- | vm/JarFile.cpp (renamed from vm/JarFile.c) | 2 | ||||
-rw-r--r-- | vm/LinearAlloc.cpp (renamed from vm/LinearAlloc.c) | 0 | ||||
-rw-r--r-- | vm/Misc.cpp (renamed from vm/Misc.c) | 0 | ||||
-rw-r--r-- | vm/Misc.h | 12 | ||||
-rw-r--r-- | vm/Native.cpp (renamed from vm/Native.c) | 38 | ||||
-rw-r--r-- | vm/PointerSet.cpp (renamed from vm/PointerSet.c) | 0 | ||||
-rw-r--r-- | vm/Profile.cpp (renamed from vm/Profile.c) | 0 | ||||
-rw-r--r-- | vm/Properties.cpp (renamed from vm/Properties.c) | 0 | ||||
-rw-r--r-- | vm/RawDexFile.cpp (renamed from vm/RawDexFile.c) | 0 | ||||
-rw-r--r-- | vm/ReferenceTable.cpp (renamed from vm/ReferenceTable.c) | 0 | ||||
-rw-r--r-- | vm/SignalCatcher.cpp (renamed from vm/SignalCatcher.c) | 2 | ||||
-rw-r--r-- | vm/StdioConverter.cpp (renamed from vm/StdioConverter.c) | 0 | ||||
-rw-r--r-- | vm/Sync.cpp (renamed from vm/Sync.c) | 4 | ||||
-rw-r--r-- | vm/Thread.cpp (renamed from vm/Thread.c) | 49 | ||||
-rw-r--r-- | vm/UtfString.cpp (renamed from vm/UtfString.c) | 31 | ||||
-rw-r--r-- | vm/UtfString.h | 2 | ||||
-rw-r--r-- | vm/jdwp/JdwpAdb.cpp | 4 | ||||
-rw-r--r-- | vm/mterp/Mterp.cpp (renamed from vm/mterp/Mterp.c) | 0 | ||||
-rw-r--r-- | vm/mterp/common/FindInterface.h | 8 | ||||
-rw-r--r-- | vm/test/AtomicTest.cpp (renamed from vm/test/AtomicTest.c) | 0 | ||||
-rw-r--r-- | vm/test/TestHash.cpp (renamed from vm/test/TestHash.c) | 10 | ||||
-rw-r--r-- | vm/test/TestIndirectRefTable.cpp (renamed from vm/test/TestIndirectRefTable.c) | 0 |
40 files changed, 180 insertions, 176 deletions
diff --git a/vm/AllocTracker.c b/vm/AllocTracker.cpp index 8e2c32586..c65ac4d3b 100644 --- a/vm/AllocTracker.c +++ b/vm/AllocTracker.cpp @@ -184,16 +184,18 @@ static void getStackFrames(Thread* self, AllocRecord* pRec) /* * Add a new allocation to the set. */ -void dvmDoTrackAllocation(ClassObject* clazz, int size) +void dvmDoTrackAllocation(ClassObject* clazz, size_t size) { - dvmLockMutex(&gDvm.allocTrackerLock); - if (gDvm.allocRecords == NULL) - goto bail; - Thread* self = dvmThreadSelf(); if (self == NULL) { LOGW("alloc tracker: no thread\n"); - goto bail; + return; + } + + dvmLockMutex(&gDvm.allocTrackerLock); + if (gDvm.allocRecords == NULL) { + dvmUnlockMutex(&gDvm.allocTrackerLock); + return; } /* advance and clip */ @@ -210,7 +212,6 @@ void dvmDoTrackAllocation(ClassObject* clazz, int size) if (gDvm.allocRecordCount < kNumAllocRecords) gDvm.allocRecordCount++; -bail: dvmUnlockMutex(&gDvm.allocTrackerLock); } @@ -600,8 +601,10 @@ void dvmDumpTrackedAllocations(bool enable) dvmEnableAllocTracker(); dvmLockMutex(&gDvm.allocTrackerLock); - if (gDvm.allocRecords == NULL) - goto bail; + if (gDvm.allocRecords == NULL) { + dvmUnlockMutex(&gDvm.allocTrackerLock); + return; + } /* * "idx" is the head of the list. We want to start at the end of the @@ -618,8 +621,7 @@ void dvmDumpTrackedAllocations(bool enable) pRec->threadId, pRec->size, pRec->clazz->descriptor); if (true) { - int i; - for (i = 0; i < kMaxAllocRecordStackDepth; i++) { + for (int i = 0; i < kMaxAllocRecordStackDepth; i++) { if (pRec->stackElem[i].method == NULL) break; @@ -642,7 +644,6 @@ void dvmDumpTrackedAllocations(bool enable) idx = (idx + 1) & (kNumAllocRecords-1); } -bail: dvmUnlockMutex(&gDvm.allocTrackerLock); if (false) { u1* data; diff --git a/vm/AllocTracker.h b/vm/AllocTracker.h index b6d668d9d..fa8ba7553 100644 --- a/vm/AllocTracker.h +++ b/vm/AllocTracker.h @@ -48,7 +48,7 @@ void dvmDisableAllocTracker(void); if (gDvm.allocRecords != NULL) \ dvmDoTrackAllocation(_clazz, _size); \ } -void dvmDoTrackAllocation(ClassObject* clazz, int size); +void dvmDoTrackAllocation(ClassObject* clazz, size_t size); /* * Generate a DDM packet with all of the tracked allocation data. diff --git a/vm/Atomic.c b/vm/Atomic.cpp index 4473c8568..4473c8568 100644 --- a/vm/Atomic.c +++ b/vm/Atomic.cpp diff --git a/vm/AtomicCache.c b/vm/AtomicCache.cpp index a6f48c2c7..a6f48c2c7 100644 --- a/vm/AtomicCache.c +++ b/vm/AtomicCache.cpp diff --git a/vm/BitVector.c b/vm/BitVector.cpp index 4e9a1cb72..4e9a1cb72 100644 --- a/vm/BitVector.c +++ b/vm/BitVector.cpp @@ -284,7 +284,7 @@ void dvmDdmSendThreadNotification(Thread* thread, bool started) set4BE(&buf[0x04], stringLen); /* copy the UTF-16 string, transforming to big-endian */ - outChars = (u2*) &buf[0x08]; + outChars = (u2*)(void*)&buf[0x08]; while (stringLen--) set2BE((u1*) (outChars++), *chars++); } else { @@ -320,7 +320,7 @@ void dvmDdmSendThreadNameChange(int threadId, StringObject* newName) set4BE(&buf[0x00], threadId); set4BE(&buf[0x04], stringLen); - u2* outChars = (u2*) &buf[0x08]; + u2* outChars = (u2*)(void*)&buf[0x08]; while (stringLen--) set2BE((u1*) (outChars++), *chars++); diff --git a/vm/Debugger.c b/vm/Debugger.cpp index 0f0164722..ebe4149c3 100644 --- a/vm/Debugger.c +++ b/vm/Debugger.cpp @@ -459,7 +459,8 @@ s8 dvmDbgLastDebuggerActivity(void) */ int dvmDbgThreadRunning(void) { - return dvmChangeStatus(NULL, THREAD_RUNNING); + ThreadStatus oldStatus = dvmChangeStatus(NULL, THREAD_RUNNING); + return static_cast<int>(oldStatus); } /* @@ -467,7 +468,8 @@ int dvmDbgThreadRunning(void) */ int dvmDbgThreadWaiting(void) { - return dvmChangeStatus(NULL, THREAD_VMWAIT); + ThreadStatus oldStatus = dvmChangeStatus(NULL, THREAD_VMWAIT); + return static_cast<int>(oldStatus); } /* @@ -475,7 +477,9 @@ int dvmDbgThreadWaiting(void) */ int dvmDbgThreadContinuing(int status) { - return dvmChangeStatus(NULL, status); + ThreadStatus newStatus = static_cast<ThreadStatus>(status); + ThreadStatus oldStatus = dvmChangeStatus(NULL, newStatus); + return static_cast<int>(oldStatus); } /* @@ -1173,36 +1177,32 @@ static u4 augmentedAccessFlags(u4 accessFlags) void dvmDbgOutputAllFields(RefTypeId refTypeId, bool withGeneric, ExpandBuf* pReply) { - static const u1 genericSignature[1] = ""; - ClassObject* clazz; - Field* field; - u4 declared; - int i; - - clazz = refTypeIdToClassObject(refTypeId); + ClassObject* clazz = refTypeIdToClassObject(refTypeId); assert(clazz != NULL); - declared = clazz->sfieldCount + clazz->ifieldCount; + u4 declared = clazz->sfieldCount + clazz->ifieldCount; expandBufAdd4BE(pReply, declared); - for (i = 0; i < clazz->sfieldCount; i++) { - field = (Field*) &clazz->sfields[i]; - + for (int i = 0; i < clazz->sfieldCount; i++) { + Field* field = &clazz->sfields[i].field; expandBufAddFieldId(pReply, fieldToFieldId(field)); expandBufAddUtf8String(pReply, (const u1*) field->name); expandBufAddUtf8String(pReply, (const u1*) field->signature); - if (withGeneric) + if (withGeneric) { + static const u1 genericSignature[1] = ""; expandBufAddUtf8String(pReply, genericSignature); + } expandBufAdd4BE(pReply, augmentedAccessFlags(field->accessFlags)); } - for (i = 0; i < clazz->ifieldCount; i++) { - field = (Field*) &clazz->ifields[i]; - + for (int i = 0; i < clazz->ifieldCount; i++) { + Field* field = (Field*)&clazz->ifields[i].field; expandBufAddFieldId(pReply, fieldToFieldId(field)); expandBufAddUtf8String(pReply, (const u1*) field->name); expandBufAddUtf8String(pReply, (const u1*) field->signature); - if (withGeneric) + if (withGeneric) { + static const u1 genericSignature[1] = ""; expandBufAddUtf8String(pReply, genericSignature); + } expandBufAdd4BE(pReply, augmentedAccessFlags(field->accessFlags)); } } @@ -2635,21 +2635,17 @@ JdwpError dvmDbgInvokeMethod(ObjectId threadId, ObjectId objectId, u4 options, u1* pResultTag, u8* pResultValue, ObjectId* pExceptObj) { Object* threadObj = objectIdToObject(threadId); - Thread* targetThread; - JdwpError err = ERR_NONE; dvmLockThreadList(NULL); - targetThread = threadObjToThread(threadObj); + Thread* targetThread = threadObjToThread(threadObj); if (targetThread == NULL) { - err = ERR_INVALID_THREAD; /* thread does not exist */ dvmUnlockThreadList(); - goto bail; + return ERR_INVALID_THREAD; /* thread does not exist */ } if (!targetThread->invokeReq.ready) { - err = ERR_INVALID_THREAD; /* thread not stopped by event */ dvmUnlockThreadList(); - goto bail; + return ERR_INVALID_THREAD; /* thread not stopped by event */ } /* @@ -2671,9 +2667,8 @@ JdwpError dvmDbgInvokeMethod(ObjectId threadId, ObjectId objectId, "for method exec\n", dvmThreadSelf()->threadId, targetThread->threadId, targetThread->interpBreak.ctl.suspendCount); - err = ERR_THREAD_SUSPENDED; /* probably not expected here */ dvmUnlockThreadList(); - goto bail; + return ERR_THREAD_SUSPENDED; /* probably not expected here */ } /* @@ -2704,7 +2699,7 @@ JdwpError dvmDbgInvokeMethod(ObjectId threadId, ObjectId objectId, * the invokeReq mutex, although that should never be held for long. */ Thread* self = dvmThreadSelf(); - int oldStatus = dvmChangeStatus(self, THREAD_VMWAIT); + ThreadStatus oldStatus = dvmChangeStatus(self, THREAD_VMWAIT); LOGV(" Transferring control to event thread\n"); dvmLockMutex(&targetThread->invokeReq.lock); @@ -2760,10 +2755,7 @@ JdwpError dvmDbgInvokeMethod(ObjectId threadId, ObjectId objectId, *pResultValue = objectToObjectId(tmpObj); } *pExceptObj = targetThread->invokeReq.exceptObj; - err = targetThread->invokeReq.err; - -bail: - return err; + return targetThread->invokeReq.err; } /* @@ -2786,7 +2778,7 @@ void dvmDbgExecuteMethod(DebugInvokeReq* pReq) Thread* self = dvmThreadSelf(); const Method* meth; Object* oldExcept; - int oldStatus; + ThreadStatus oldStatus; /* * We can be called while an exception is pending in the VM. We need @@ -85,37 +85,37 @@ endif # !dvm_make_debug_vm #LOCAL_CFLAGS += -DWITH_JNI_STACK_CHECK LOCAL_SRC_FILES := \ - AllocTracker.c \ - Atomic.c.arm \ - AtomicCache.c \ - BitVector.c.arm \ + AllocTracker.cpp \ + Atomic.cpp.arm \ + AtomicCache.cpp \ + BitVector.cpp.arm \ CheckJni.cpp \ - Ddm.c \ - Debugger.c \ - DvmDex.c \ - Exception.c \ - Hash.c \ - IndirectRefTable.c.arm \ - Init.c \ - InitRefs.c \ - InlineNative.c.arm \ - Inlines.c \ - Intern.c \ + Ddm.cpp \ + Debugger.cpp \ + DvmDex.cpp \ + Exception.cpp \ + Hash.cpp \ + IndirectRefTable.cpp.arm \ + Init.cpp \ + InitRefs.cpp \ + InlineNative.cpp.arm \ + Inlines.cpp \ + Intern.cpp \ Jni.cpp \ - JarFile.c \ - LinearAlloc.c \ - Misc.c \ - Native.c \ - PointerSet.c \ - Profile.c \ - Properties.c \ - RawDexFile.c \ - ReferenceTable.c \ - SignalCatcher.c \ - StdioConverter.c \ - Sync.c \ - Thread.c \ - UtfString.c \ + JarFile.cpp \ + LinearAlloc.cpp \ + Misc.cpp \ + Native.cpp \ + PointerSet.cpp \ + Profile.cpp \ + Properties.cpp \ + RawDexFile.cpp \ + ReferenceTable.cpp \ + SignalCatcher.cpp \ + StdioConverter.cpp \ + Sync.cpp \ + Thread.cpp \ + UtfString.cpp \ alloc/Alloc.cpp \ alloc/CardTable.cpp \ alloc/HeapBitmap.cpp.arm \ @@ -146,7 +146,7 @@ LOCAL_SRC_FILES := \ jdwp/JdwpHandler.cpp \ jdwp/JdwpMain.cpp \ jdwp/JdwpSocket.cpp \ - mterp/Mterp.c.arm \ + mterp/Mterp.cpp.arm \ mterp/out/InterpC-portable.c.arm \ native/InternalNative.cpp \ native/dalvik_bytecode_OpcodeInfo.cpp \ @@ -186,9 +186,9 @@ LOCAL_SRC_FILES := \ reflect/Annotation.cpp \ reflect/Proxy.cpp \ reflect/Reflect.cpp \ - test/AtomicTest.c.arm \ - test/TestHash.c \ - test/TestIndirectRefTable.c + test/AtomicTest.cpp.arm \ + test/TestHash.cpp \ + test/TestIndirectRefTable.cpp WITH_COPYING_GC := $(strip $(WITH_COPYING_GC)) diff --git a/vm/DvmDex.c b/vm/DvmDex.cpp index c5790e5a6..c5790e5a6 100644 --- a/vm/DvmDex.c +++ b/vm/DvmDex.cpp diff --git a/vm/Exception.c b/vm/Exception.cpp index 740f5a6d0..281873e57 100644 --- a/vm/Exception.c +++ b/vm/Exception.cpp @@ -888,7 +888,7 @@ void* dvmFillInStackTraceInternal(Thread* thread, bool wantObject, size_t* pCoun assert(dvmCheckException(dvmThreadSelf())); goto bail; } - intPtr = (int*) stackData->contents; + intPtr = (int*)(void*)stackData->contents; } else { /* array of ints; first entry is stack depth */ assert(sizeof(Method*) == sizeof(int)); @@ -950,7 +950,7 @@ ArrayObject* dvmGetStackTrace(const Object* ostackData) { const ArrayObject* stackData = (const ArrayObject*) ostackData; size_t stackSize = stackData->length / 2; - const int* intVals = (const int*) stackData->contents; + const int* intVals = (const int*)(void*)stackData->contents; return dvmGetStackTraceRaw(intVals, stackSize); } @@ -1189,7 +1189,7 @@ static void logStackTraceOf(Object* exception) } stackSize = stackData->length / 2; - intVals = (const int*) stackData->contents; + intVals = (const int*)(void*)stackData->contents; dvmLogRawStackTrace(intVals, stackSize); } diff --git a/vm/Globals.h b/vm/Globals.h index 163ce99f1..041530561 100644 --- a/vm/Globals.h +++ b/vm/Globals.h @@ -95,7 +95,7 @@ struct DvmGlobals { bool jdwpAllowed; // debugging allowed for this process? bool jdwpConfigured; // has debugging info been provided? - int jdwpTransport; + JdwpTransportType jdwpTransport; bool jdwpServer; char* jdwpHost; int jdwpPort; diff --git a/vm/Hash.c b/vm/Hash.cpp index 7bdd92f20..7bdd92f20 100644 --- a/vm/Hash.c +++ b/vm/Hash.cpp diff --git a/vm/IndirectRefTable.c b/vm/IndirectRefTable.cpp index 819b15d2e..819b15d2e 100644 --- a/vm/IndirectRefTable.c +++ b/vm/IndirectRefTable.cpp diff --git a/vm/Init.c b/vm/Init.cpp index a8cf258b3..90191574e 100644 --- a/vm/Init.c +++ b/vm/Init.cpp @@ -17,11 +17,7 @@ /* * Dalvik initialization, shutdown, and command-line argument processing. */ -#include "Dalvik.h" -#include "test/Test.h" -#include "mterp/Mterp.h" -#include "Hash.h" - +#define __STDC_LIMIT_MACROS #include <stdlib.h> #include <stdio.h> #include <signal.h> @@ -30,6 +26,11 @@ #include <sys/wait.h> #include <unistd.h> +#include "Dalvik.h" +#include "test/Test.h" +#include "mterp/Mterp.h" +#include "Hash.h" + #define kMinHeapStartSize (1*1024*1024) #define kMinHeapSize (2*1024*1024) #define kMaxHeapSize (1*1024*1024*1024) @@ -37,7 +38,7 @@ /* * Register VM-agnostic native methods for system classes. */ -extern int jniRegisterSystemMethods(JNIEnv* env); +extern "C" int jniRegisterSystemMethods(JNIEnv* env); /* fwd */ static bool registerSystemNatives(JNIEnv* pEnv); @@ -1332,7 +1333,7 @@ int dvmStartup(int argc, const char* const argv[], bool ignoreUnrecognized, #ifndef NDEBUG if (!dvmTestHash()) - LOGE("dmvTestHash FAILED\n"); + LOGE("dvmTestHash FAILED\n"); if (false /*noisy!*/ && !dvmTestIndirectRefTable()) LOGE("dvmTestIndirectRefTable FAILED\n"); #endif diff --git a/vm/InitRefs.c b/vm/InitRefs.cpp index 5c832bf35..5c832bf35 100644 --- a/vm/InitRefs.c +++ b/vm/InitRefs.cpp diff --git a/vm/InlineNative.c b/vm/InlineNative.cpp index f230c1258..cd978aaa4 100644 --- a/vm/InlineNative.c +++ b/vm/InlineNative.cpp @@ -27,7 +27,7 @@ //#warning "trying memcmp16" //#define CHECK_MEMCMP16 /* "count" is in 16-bit units */ -extern u4 __memcmp16(const u2* s0, const u2* s1, size_t count); +extern "C" u4 __memcmp16(const u2* s0, const u2* s1, size_t count); #endif /* @@ -146,7 +146,7 @@ bool javaLangString_charAt(u4 arg0, u4 arg1, u4 arg2, u4 arg3, chars = (ArrayObject*) dvmGetFieldObject((Object*) arg0, STRING_FIELDOFF_VALUE); - pResult->i = ((const u2*) chars->contents)[arg1 + offset]; + pResult->i = ((const u2*)(void*)chars->contents)[arg1 + offset]; return true; } } @@ -238,8 +238,8 @@ bool javaLangString_compareTo(u4 arg0, u4 arg1, u4 arg2, u4 arg3, dvmGetFieldObject((Object*) arg0, STRING_FIELDOFF_VALUE); compArray = (ArrayObject*) dvmGetFieldObject((Object*) arg1, STRING_FIELDOFF_VALUE); - thisChars = ((const u2*) thisArray->contents) + thisOffset; - compChars = ((const u2*) compArray->contents) + compOffset; + thisChars = ((const u2*)(void*)thisArray->contents) + thisOffset; + compChars = ((const u2*)(void*)compArray->contents) + compOffset; #ifdef HAVE__MEMCMP16 /* @@ -359,8 +359,8 @@ bool javaLangString_equals(u4 arg0, u4 arg1, u4 arg2, u4 arg3, dvmGetFieldObject((Object*) arg0, STRING_FIELDOFF_VALUE); compArray = (ArrayObject*) dvmGetFieldObject((Object*) arg1, STRING_FIELDOFF_VALUE); - thisChars = ((const u2*) thisArray->contents) + thisOffset; - compChars = ((const u2*) compArray->contents) + compOffset; + thisChars = ((const u2*)(void*)thisArray->contents) + thisOffset; + compChars = ((const u2*)(void*)compArray->contents) + compOffset; #ifdef HAVE__MEMCMP16 pResult->i = (__memcmp16(thisChars, compChars, thisCount) == 0); @@ -452,7 +452,7 @@ static inline int indexOfCommon(Object* strObj, int ch, int start) /* pull out the basic elements */ ArrayObject* charArray = (ArrayObject*) dvmGetFieldObject(strObj, STRING_FIELDOFF_VALUE); - const u2* chars = (const u2*) charArray->contents; + const u2* chars = (const u2*)(void*)charArray->contents; int offset = dvmGetFieldInt(strObj, STRING_FIELDOFF_OFFSET); int count = dvmGetFieldInt(strObj, STRING_FIELDOFF_COUNT); //LOGI("String.indexOf(0x%08x, 0x%04x, %d) off=%d count=%d\n", diff --git a/vm/Inlines.c b/vm/Inlines.cpp index f1bd621af..f1bd621af 100644 --- a/vm/Inlines.c +++ b/vm/Inlines.cpp diff --git a/vm/Intern.c b/vm/Intern.cpp index 8f8452817..8f8452817 100644 --- a/vm/Intern.c +++ b/vm/Intern.cpp diff --git a/vm/JarFile.c b/vm/JarFile.cpp index f26f1d6c6..0288fef6a 100644 --- a/vm/JarFile.c +++ b/vm/JarFile.cpp @@ -119,7 +119,7 @@ DexCacheStatus dvmDexCacheStatus(const char *fileName) LOGV("dvmDexCacheStatus: Checking cache for %s\n", fileName); cachedName = dexOptGenerateCacheFileName(fileName, kDexInJarName); if (cachedName == NULL) - return -1; + return DEX_CACHE_BAD_ARCHIVE; fd = dvmOpenCachedDexFile(fileName, cachedName, dexGetZipEntryModTime(&archive, entry), diff --git a/vm/LinearAlloc.c b/vm/LinearAlloc.cpp index dc937593c..dc937593c 100644 --- a/vm/LinearAlloc.c +++ b/vm/LinearAlloc.cpp diff --git a/vm/Misc.c b/vm/Misc.cpp index 2c3926c16..2c3926c16 100644 --- a/vm/Misc.c +++ b/vm/Misc.cpp @@ -90,17 +90,19 @@ INLINE void dvmPrintHexDumpDbg(const void* vaddr, size_t length,const char* tag) #endif } +typedef enum { + kDebugTargetUnknown = 0, + kDebugTargetLog, + kDebugTargetFile, +} DebugTargetKind; + /* * We pass one of these around when we want code to be able to write debug * info to either the log or to a file (or stdout/stderr). */ typedef struct DebugOutputTarget { /* where to? */ - enum { - kDebugTargetUnknown = 0, - kDebugTargetLog, - kDebugTargetFile, - } which; + DebugTargetKind which; /* additional bits */ union { diff --git a/vm/Native.c b/vm/Native.cpp index a06bf3c64..58963f5c5 100644 --- a/vm/Native.c +++ b/vm/Native.cpp @@ -71,7 +71,6 @@ void dvmResolveNativeMethod(const u4* args, JValue* pResult, const Method* method, Thread* self) { ClassObject* clazz = method->clazz; - void* func; /* * If this is a static method, it could be called before the class @@ -88,8 +87,8 @@ void dvmResolveNativeMethod(const u4* args, JValue* pResult, } /* start with our internal-native methods */ - func = dvmLookupInternalNativeMethod(method); - if (func != NULL) { + DalvikNativeFunc infunc = dvmLookupInternalNativeMethod(method); + if (infunc != NULL) { /* resolution always gets the same answer, so no race here */ IF_LOGVV() { char* desc = dexProtoCopyMethodDescriptor(&method->prototype); @@ -102,14 +101,14 @@ void dvmResolveNativeMethod(const u4* args, JValue* pResult, LOGE("Failing on %s.%s\n", method->clazz->descriptor, method->name); dvmAbort(); // harsh, but this is VM-internal problem } - DalvikBridgeFunc dfunc = (DalvikBridgeFunc) func; + DalvikBridgeFunc dfunc = (DalvikBridgeFunc) infunc; dvmSetNativeFunc((Method*) method, dfunc, NULL); dfunc(args, pResult, method, self); return; } /* now scan any DLLs we have loaded for JNI signatures */ - func = lookupSharedLibMethod(method); + void* func = lookupSharedLibMethod(method); if (func != NULL) { /* found it, point it at the JNI bridge and then call it */ dvmUseJNIBridge((Method*) method, func); @@ -580,27 +579,22 @@ static char* createJniNameString(const char* classDescriptor, */ static char* mangleString(const char* str, int len) { - u2* utf16 = NULL; - char* mangle = NULL; - int charLen; - //LOGI("mangling '%s' %d\n", str, len); assert(str[len] == '\0'); - charLen = dvmUtf8Len(str); - utf16 = (u2*) malloc(sizeof(u2) * charLen); + size_t charLen = dvmUtf8Len(str); + u2* utf16 = (u2*) malloc(sizeof(u2) * charLen); if (utf16 == NULL) - goto bail; + return NULL; dvmConvertUtf8ToUtf16(utf16, str); /* * Compute the length of the mangled string. */ - int i, mangleLen = 0; - - for (i = 0; i < charLen; i++) { + size_t mangleLen = 0; + for (size_t i = 0; i < charLen; i++) { u2 ch = utf16[i]; if (ch == '$' || ch > 127) { @@ -619,13 +613,14 @@ static char* mangleString(const char* str, int len) } } - char* cp; - - mangle = (char*) malloc(mangleLen +1); - if (mangle == NULL) - goto bail; + char* mangle = (char*) malloc(mangleLen +1); + if (mangle == NULL) { + free(utf16); + return NULL; + } - for (i = 0, cp = mangle; i < charLen; i++) { + char* cp = mangle; + for (size_t i = 0; i < charLen; i++) { u2 ch = utf16[i]; if (ch == '$' || ch > 127) { @@ -657,7 +652,6 @@ static char* mangleString(const char* str, int len) *cp = '\0'; -bail: free(utf16); return mangle; } diff --git a/vm/PointerSet.c b/vm/PointerSet.cpp index ca7b537f2..ca7b537f2 100644 --- a/vm/PointerSet.c +++ b/vm/PointerSet.cpp diff --git a/vm/Profile.c b/vm/Profile.cpp index 6faf72686..6faf72686 100644 --- a/vm/Profile.c +++ b/vm/Profile.cpp diff --git a/vm/Properties.c b/vm/Properties.cpp index 00d4b077a..00d4b077a 100644 --- a/vm/Properties.c +++ b/vm/Properties.cpp diff --git a/vm/RawDexFile.c b/vm/RawDexFile.cpp index 2c7348198..2c7348198 100644 --- a/vm/RawDexFile.c +++ b/vm/RawDexFile.cpp diff --git a/vm/ReferenceTable.c b/vm/ReferenceTable.cpp index 92bc930c7..92bc930c7 100644 --- a/vm/ReferenceTable.c +++ b/vm/ReferenceTable.cpp diff --git a/vm/SignalCatcher.c b/vm/SignalCatcher.cpp index c8f9833cb..a8fc59dde 100644 --- a/vm/SignalCatcher.c +++ b/vm/SignalCatcher.cpp @@ -178,7 +178,7 @@ static void handleSigQuit(void) * We don't know how long it will take to do the disk I/O, so put us * into VMWAIT for the duration. */ - int oldStatus = dvmChangeStatus(dvmThreadSelf(), THREAD_VMWAIT); + ThreadStatus oldStatus = dvmChangeStatus(dvmThreadSelf(), THREAD_VMWAIT); /* * Open the stack trace output file, creating it if necessary. It diff --git a/vm/StdioConverter.c b/vm/StdioConverter.cpp index 6a4d84584..6a4d84584 100644 --- a/vm/StdioConverter.c +++ b/vm/StdioConverter.cpp diff --git a/vm/Sync.c b/vm/Sync.cpp index 73f7d1cb1..fc6233bb5 100644 --- a/vm/Sync.c +++ b/vm/Sync.cpp @@ -84,7 +84,7 @@ struct Monitor { * Who last acquired this monitor, when lock sampling is enabled. * Even when enabled, ownerFileName may be NULL. */ - char* ownerFileName; + const char* ownerFileName; u4 ownerLineNumber; }; @@ -617,7 +617,7 @@ static void waitMonitor(Thread* self, Monitor* mon, s8 msec, s4 nsec, bool wasInterrupted = false; bool timed; int ret; - char *savedFileName; + const char *savedFileName; u4 savedLineNumber; assert(self != NULL); diff --git a/vm/Thread.c b/vm/Thread.cpp index 62f95aa8f..1754e0d1e 100644 --- a/vm/Thread.c +++ b/vm/Thread.cpp @@ -384,8 +384,7 @@ void dvmLockThreadList(Thread* self) self->status = THREAD_VMWAIT; } else { /* happens during VM shutdown */ - //LOGW("NULL self in dvmLockThreadList\n"); - oldStatus = -1; // shut up gcc + oldStatus = THREAD_UNDEFINED; // shut up gcc } dvmLockMutex(&gDvm.threadListLock); @@ -1232,16 +1231,10 @@ static void setThreadName(const char *threadName) */ bool dvmCreateInterpThread(Object* threadObj, int reqStackSize) { - pthread_attr_t threadAttr; - pthread_t threadHandle; - Thread* self; - Thread* newThread = NULL; - Object* vmThreadObj = NULL; - int stackSize; - assert(threadObj != NULL); - self = dvmThreadSelf(); + Thread* self = dvmThreadSelf(); + int stackSize; if (reqStackSize == 0) stackSize = gDvm.stackSize; else if (reqStackSize < kMinStackSize) @@ -1251,6 +1244,7 @@ bool dvmCreateInterpThread(Object* threadObj, int reqStackSize) else stackSize = reqStackSize; + pthread_attr_t threadAttr; pthread_attr_init(&threadAttr); pthread_attr_setdetachstate(&threadAttr, PTHREAD_CREATE_DETACHED); @@ -1258,13 +1252,16 @@ bool dvmCreateInterpThread(Object* threadObj, int reqStackSize) * To minimize the time spent in the critical section, we allocate the * vmThread object here. */ - vmThreadObj = dvmAllocObject(gDvm.classJavaLangVMThread, ALLOC_DEFAULT); + Object* vmThreadObj = dvmAllocObject(gDvm.classJavaLangVMThread, ALLOC_DEFAULT); if (vmThreadObj == NULL) - goto fail; + return false; + + Thread* newThread = allocThread(stackSize); + if (newThread == NULL) { + dvmReleaseTrackedAlloc(vmThreadObj, NULL); + return false; + } - newThread = allocThread(stackSize); - if (newThread == NULL) - goto fail; newThread->threadObj = threadObj; assert(newThread->status == THREAD_INITIALIZING); @@ -1282,7 +1279,8 @@ bool dvmCreateInterpThread(Object* threadObj, int reqStackSize) dvmUnlockThreadList(); dvmThrowIllegalThreadStateException( "thread has already been started"); - goto fail; + freeThread(newThread); + dvmReleaseTrackedAlloc(vmThreadObj, NULL); } /* @@ -1302,9 +1300,10 @@ bool dvmCreateInterpThread(Object* threadObj, int reqStackSize) dvmUnlockThreadList(); ThreadStatus oldStatus = dvmChangeStatus(self, THREAD_VMWAIT); + pthread_t threadHandle; int cc = pthread_create(&threadHandle, &threadAttr, interpThreadStart, - newThread); - oldStatus = dvmChangeStatus(self, oldStatus); + newThread); + dvmChangeStatus(self, oldStatus); if (cc != 0) { /* @@ -1721,7 +1720,7 @@ static void* internalThreadStart(void* arg) jniArgs.version = JNI_VERSION_1_2; jniArgs.name = pArgs->name; - jniArgs.group = pArgs->group; + jniArgs.group = reinterpret_cast<jobject>(pArgs->group); setThreadName(pArgs->name); @@ -2096,7 +2095,9 @@ void dvmDetachCurrentThread(void) * parallel with us from here out. It's important to do this if * profiling is enabled, since we can wait indefinitely. */ - android_atomic_release_store(THREAD_VMWAIT, &self->status); + volatile void* raw = reinterpret_cast<volatile void*>(&self->status); + volatile int32_t* addr = reinterpret_cast<volatile int32_t*>(raw); + android_atomic_release_store(THREAD_VMWAIT, addr); /* * If we're doing method trace profiling, we don't want threads to exit, @@ -2964,7 +2965,9 @@ ThreadStatus dvmChangeStatus(Thread* self, ThreadStatus newStatus) * the thread is supposed to be suspended. This is possibly faster * on SMP and slightly more correct, but less convenient. */ - android_atomic_acquire_store(newStatus, &self->status); + volatile void* raw = reinterpret_cast<volatile void*>(&self->status); + volatile int32_t* addr = reinterpret_cast<volatile int32_t*>(raw); + android_atomic_acquire_store(newStatus, addr); if (self->interpBreak.ctl.suspendCount != 0) { fullSuspendCheck(self); } @@ -2977,7 +2980,9 @@ ThreadStatus dvmChangeStatus(Thread* self, ThreadStatus newStatus) * will be observed before the state change. */ assert(newStatus != THREAD_SUSPENDED); - android_atomic_release_store(newStatus, &self->status); + volatile void* raw = reinterpret_cast<volatile void*>(&self->status); + volatile int32_t* addr = reinterpret_cast<volatile int32_t*>(raw); + android_atomic_release_store(newStatus, addr); } return oldStatus; diff --git a/vm/UtfString.c b/vm/UtfString.cpp index ec35cdf63..4b541b16a 100644 --- a/vm/UtfString.c +++ b/vm/UtfString.cpp @@ -104,9 +104,10 @@ u4 dvmComputeUtf8Hash(const char* utf8Str) * (If this needs optimizing, try: mask against 0xa0, shift right 5, * get increment {1-3} from table of 8 values.) */ -int dvmUtf8Len(const char* utf8Str) +size_t dvmUtf8Len(const char* utf8Str) { - int ic, len = 0; + size_t len = 0; + int ic; while ((ic = *utf8Str++) != '\0') { len++; @@ -193,7 +194,7 @@ static void convertUtf16ToUtf8(char* utf8Str, const u2* utf16Str, int len) /* * Use the java/lang/String.computeHashCode() algorithm. */ -static inline u4 dvmComputeUtf16Hash(const u2* utf16Str, int len) +static inline u4 computeUtf16Hash(const u2* utf16Str, size_t len) { u4 hash = 0; @@ -202,6 +203,7 @@ static inline u4 dvmComputeUtf16Hash(const u2* utf16Str, int len) return hash; } + u4 dvmComputeStringHash(const StringObject* strObj) { ArrayObject* chars = (ArrayObject*) dvmGetFieldObject((Object*) strObj, STRING_FIELDOFF_VALUE); @@ -210,7 +212,7 @@ u4 dvmComputeStringHash(const StringObject* strObj) { len = dvmGetFieldInt((Object*) strObj, STRING_FIELDOFF_COUNT); offset = dvmGetFieldInt((Object*) strObj, STRING_FIELDOFF_OFFSET); - return dvmComputeUtf16Hash((u2*) chars->contents + offset, len); + return computeUtf16Hash((u2*)(void*)chars->contents + offset, len); } /* @@ -235,7 +237,7 @@ StringObject* dvmCreateStringFromCstr(const char* utf8Str) * Returns NULL and throws an exception on failure. */ StringObject* dvmCreateStringFromCstrAndLength(const char* utf8Str, - u4 utf16Length) + size_t utf16Length) { assert(utf8Str != NULL); @@ -245,9 +247,9 @@ StringObject* dvmCreateStringFromCstrAndLength(const char* utf8Str, return NULL; } - dvmConvertUtf8ToUtf16((u2*) chars->contents, utf8Str); + dvmConvertUtf8ToUtf16((u2*)(void*)chars->contents, utf8Str); - u4 hashCode = dvmComputeUtf16Hash((u2*) chars->contents, utf16Length); + u4 hashCode = computeUtf16Hash((u2*)(void*)chars->contents, utf16Length); dvmSetFieldInt((Object*) newObj, STRING_FIELDOFF_HASHCODE, hashCode); return newObj; @@ -269,7 +271,7 @@ StringObject* dvmCreateStringFromUnicode(const u2* unichars, int len) if (len > 0) memcpy(chars->contents, unichars, len * sizeof(u2)); - u4 hashCode = dvmComputeUtf16Hash((u2*) chars->contents, len); + u4 hashCode = computeUtf16Hash((u2*)(void*)chars->contents, len); dvmSetFieldInt((Object*)newObj, STRING_FIELDOFF_HASHCODE, hashCode); return newObj; @@ -296,7 +298,7 @@ char* dvmCreateCstrFromString(StringObject* jstr) offset = dvmGetFieldInt((Object*) jstr, STRING_FIELDOFF_OFFSET); chars = (ArrayObject*) dvmGetFieldObject((Object*) jstr, STRING_FIELDOFF_VALUE); - data = (const u2*) chars->contents + offset; + data = (const u2*)(void*)chars->contents + offset; assert(offset + len <= (int) chars->length); byteLen = utf16_utf8ByteLen(data, len); @@ -341,7 +343,7 @@ int dvmStringUtf8ByteLen(StringObject* jstr) offset = dvmGetFieldInt((Object*) jstr, STRING_FIELDOFF_OFFSET); chars = (ArrayObject*) dvmGetFieldObject((Object*) jstr, STRING_FIELDOFF_VALUE); - data = (const u2*) chars->contents + offset; + data = (const u2*)(void*)chars->contents + offset; assert(offset + len <= (int) chars->length); return utf16_utf8ByteLen(data, len); @@ -375,7 +377,7 @@ const u2* dvmStringChars(StringObject* jstr) offset = dvmGetFieldInt((Object*) jstr, STRING_FIELDOFF_OFFSET); chars = (ArrayObject*) dvmGetFieldObject((Object*) jstr, STRING_FIELDOFF_VALUE); - return (const u2*) chars->contents + offset; + return (const u2*)(void*)chars->contents + offset; } @@ -413,8 +415,8 @@ int dvmHashcmpStrings(const void* vstrObj1, const void* vstrObj2) assert(offset1 + len1 <= (int) chars1->length); assert(offset2 + len2 <= (int) chars2->length); - return memcmp((const u2*) chars1->contents + offset1, - (const u2*) chars2->contents + offset2, + return memcmp((const u2*)(void*)chars1->contents + offset1, + (const u2*)(void*)chars2->contents + offset2, len1 * sizeof(u2)); } @@ -437,8 +439,7 @@ ArrayObject* dvmCreateStringArray(const char** strings, size_t count) /* * Create the individual String objects and add them to the array. */ - size_t i; - for (i = 0; i < count; i++) { + for (size_t i = 0; i < count; i++) { Object* str = (Object*) dvmCreateStringFromCstr(strings[i]); if (str == NULL) { diff --git a/vm/UtfString.h b/vm/UtfString.h index a1ee71231..6b9a5e363 100644 --- a/vm/UtfString.h +++ b/vm/UtfString.h @@ -93,7 +93,7 @@ StringObject* dvmCreateStringFromCstrAndLength(const char* utf8Str, * Compute the number of characters in a "modified UTF-8" string. This will * match the result from strlen() so long as there are no multi-byte chars. */ -int dvmUtf8Len(const char* utf8Str); +size_t dvmUtf8Len(const char* utf8Str); /* * Convert a UTF-8 string to UTF-16. "utf16Str" must have enough room diff --git a/vm/jdwp/JdwpAdb.cpp b/vm/jdwp/JdwpAdb.cpp index e73814d60..337691052 100644 --- a/vm/jdwp/JdwpAdb.cpp +++ b/vm/jdwp/JdwpAdb.cpp @@ -163,7 +163,7 @@ static int receiveClientFd(JdwpNetState* netState) cmsg->cmsg_len = msg.msg_controllen; cmsg->cmsg_level = SOL_SOCKET; cmsg->cmsg_type = SCM_RIGHTS; - ((int*)CMSG_DATA(cmsg))[0] = -1; + ((int*)(void*)CMSG_DATA(cmsg))[0] = -1; do { ret = recvmsg(netState->controlSock, &msg, 0); @@ -181,7 +181,7 @@ static int receiveClientFd(JdwpNetState* netState) return -1; } - return ((int*)CMSG_DATA(cmsg))[0]; + return ((int*)(void*)CMSG_DATA(cmsg))[0]; } /* diff --git a/vm/mterp/Mterp.c b/vm/mterp/Mterp.cpp index fa9b037c8..fa9b037c8 100644 --- a/vm/mterp/Mterp.c +++ b/vm/mterp/Mterp.cpp diff --git a/vm/mterp/common/FindInterface.h b/vm/mterp/common/FindInterface.h index 021ed6591..a640adb23 100644 --- a/vm/mterp/common/FindInterface.h +++ b/vm/mterp/common/FindInterface.h @@ -17,6 +17,10 @@ /* common includes */ #include "Dalvik.h" +#ifdef __cplusplus +extern "C" { +#endif + /* * Look up an interface on a class using the cache. * @@ -35,3 +39,7 @@ INLINE Method* dvmFindInterfaceMethodInCache(ClassObject* thisClass, #undef ATOMIC_CACHE_CALC } + +#ifdef __cplusplus +} +#endif diff --git a/vm/test/AtomicTest.c b/vm/test/AtomicTest.cpp index 52f29cc3b..52f29cc3b 100644 --- a/vm/test/AtomicTest.c +++ b/vm/test/AtomicTest.cpp diff --git a/vm/test/TestHash.c b/vm/test/TestHash.cpp index 431e62ab0..b45802803 100644 --- a/vm/test/TestHash.c +++ b/vm/test/TestHash.cpp @@ -141,7 +141,7 @@ bool dvmTestHash(void) hash = 0; /* two entries, same hash, different values */ - char* str1; + const char* str1; str1 = (char*) dvmHashTableLookup(pTab, hash, strdup("one"), (HashCompareFunc) strcmp, true); assert(str1 != NULL); @@ -149,10 +149,10 @@ bool dvmTestHash(void) (HashCompareFunc) strcmp, true); /* remove the first one */ - if (!dvmHashTableRemove(pTab, hash, str1)) + if (!dvmHashTableRemove(pTab, hash, (void*)str1)) LOGE("TestHash failed to delete item\n"); else - free(str1); // "Remove" doesn't call the free func + free((void*)str1); // "Remove" doesn't call the free func /* make sure iterator doesn't included deleted entries */ int count = 0; @@ -167,11 +167,11 @@ bool dvmTestHash(void) } /* see if we can find them */ - str = (const char*) dvmHashTableLookup(pTab, hash, "one", + str = (const char*) dvmHashTableLookup(pTab, hash, (void*)"one", (HashCompareFunc) strcmp,false); if (str != NULL) LOGE("TestHash deleted entry has returned!"); - str = (const char*) dvmHashTableLookup(pTab, hash, "two", + str = (const char*) dvmHashTableLookup(pTab, hash, (void*)"two", (HashCompareFunc) strcmp,false); if (str == NULL) LOGE("TestHash entry vanished\n"); diff --git a/vm/test/TestIndirectRefTable.c b/vm/test/TestIndirectRefTable.cpp index 155ba32a9..155ba32a9 100644 --- a/vm/test/TestIndirectRefTable.c +++ b/vm/test/TestIndirectRefTable.cpp |